Tìm hiểu các dạng tấn công XSS (Cross-Site Scriting) và biện pháp phòng chống cho lỗ hổng này trên ứng dụng web.
Trong bài trước có giới thiệu tới các bạn Top 10 nguy cơ và lỗ hổng bảo mật ứng dụng Web được OWASP công bố năm 2013. Một trong số đó là lỗ hổng XSS - (Cross-Site Scripting) luôn là cái tên "sáng giá" được OWASP liên tục được đề cử trong danh sách top 10 hàng năm. Bài viết dưới đây, Blog Thao Phạm sẽ cùng các bạn tìm hiểu về vấn đề này.
1. Giới thiệu
Lỗi Cross-Site Scripting (XSS) là lỗ hổng trên ứng dụng web cho phép hacker có thể chèn những đoạn mã client-script (thương là Javascript hoặc HTML) vào trang web, khi người dùng và những trang web này thì mã độc sẽ được thự c thi trên máy người dùng.
XSS tấn công trực tiếp bằng cách chèn vào URL, chèn qua các thanh tìm kiếm hoặc chèn vào bất cứ textbox nào những thẻ HTML hoặc những đoạn mã script nguy hiểm đó từ đó chiếm quyền điều khiển của victim hoặc các mệnh lệnh gây nguy hại cho người khác.
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-script như JavaScript, Jscript, DHTML, và các thẻ HTML.
Khi thực hiện thành công XSS, kẻ tấn công có thể:
- Đánh cắp thông tin nhạy cảm của người dùng lưu trong Cookies của trình duyệt.
- Giả mạo hộp đối thoại đăng nhập để đánh cắp mật khẩu.
- Cài keylog, bắt phím gõ người dùng để đánh cắp thông tin về tài khoản ngân hàng, email, và thông tin đăng nhập các dịch vụ trả tiền,...
- Sử dụng trình duyệt để quét các cổng dịch vụ trong mạng LAN
- Lén lút cấu hình lại bộ định tuyến nội bộ để bỏ qua tường lửa của nó
- Tự động thêm người dùng ngẫu nhiên vào tài khoản mạng xã hội
- Tạo môi trường cho tấn công CSRF
Một số trang web nổi tiếng như Facebook, Twiter, một số forum Việt Nam,... đều từng dính phải lỗi này.
2. Một số dạng tấn công XSS
Tấn công XSS gồm 3 loại chính:
- Stored XSS (XSS lưu trữ)
- Reflected XSS (XSS phản chiếu)
- DOM-base/Local XSS
Là lỗi XSS mà đoạn mã script thường được nhúng vào trong các nội dung và được lưu trữ trong CSDL của website. Chẳng hạn như việc các diễn đàn cho phép người dùng post các mầu tin và gửi phản hồi; các trang thương mại điện tử cho phép người dùng thêm nhận xét (comment) vào sản phẩm; các mạng xã hội, ứng dụng chat cho phép gửi tin nhắn qua trang web,...
Kẻ tấn công sẽ khéo léo nhúng đoạn mã script (như <script>alert(“XSS”)</script> ) vào đoạn văn bản, hình ảnh,... sử dụng các thẻ HTML.
Kẻ tấn công sẽ khéo léo nhúng đoạn mã script (như <script>alert(“XSS”)</script> ) vào đoạn văn bản, hình ảnh,... sử dụng các thẻ HTML.
Kịch bản của tấn công.
- A có một website cho phép người dùng post các thông điệp và nọi dung khác; các nội dung này có thể được người dùng khác xem lại;
- B phát hiện website của Bob tồn tại lỗ hổng an ninh cho phép tấn công XSS;
- A post một bài viết có nội dung gây tranh cãi, có khả năng thu hút nhiều người dùng đọc. Mã XSS sẽ khéo léo nhúng vào bài viết. (Chú ý mấy bạn thường ghé thăm các website tươi mát thì nên cẩn thận nhé!)
- Khi người dùng tải bài viết của A, thông tin trong cookie và các thông tin nhạy cảm khác có thể bị đánh cắ
- p và gửi đến máy chủ của A mà họ không hề biết.
- Sau khi có được trong tay thông tin của những người dính bẫy thì A có thể thực hiện những hành vi xấu để trục lợi.
2.2. Reflected XSS
Khác với tấn công Stored XSS, Reflected XSS các đoạn mã không được lưu trữ trên server và thường xuất hiện khi dữ liệu do người dùng cung cấp được sử dụng bởi scripts trên máy chủ để tạo ra kết quả và hiển thị lại ngay (xuất hiện trên các máy tìm kiếm, các trang có tính năng tìm kiếm).
Kịch bản tấn công:
Kịch bản tấn công:
- Bưới 1: Người dùng đăng nhập trang example.com và giả sử được gán session:
- Bước 2: Bằng cách nào đó, hacker gửi được cho người dùng URL:
Giả sử trong đó: example.com là website nạn nhân truy cập; hacker-site.net là website của hacker tạo ra.
- Bước 3: Nạn nhân truy cập đến URL trên
- Bước 4: 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)
- Bước 5: Trình duyệt của nạn nhân sẽ nhận phản hồi và thực thi đoạn mã javascript
- Bước 6: Đoạn javascript mà hacker tạo ra thực tế như sau:
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:
GET/sessId = 5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4 HTTP/1.1
- Bước 7: Từ phía site của mình, hacker sẽ bắt dược nội dung request trên và coi như session của người dùng sẽ bị chiếm. Đến lúc này, hacker có thể gỉ mạo với tư cách nạn nhân và thực hiện mọi quyền trên website nạn nhân có.
0 Comments