Lỗ hổng xss là gì?
Nếu bạn nhắc đến XSS trước dân IT, có thể họ sẽ cảm thấy khá "ám ảnh" bởi cơ bản đây là một lỗ hổng bảo mật khá nghiêm trọng. Vậy XSS thực sự nghiêm trọng như thế nào?
XSS là gì?
XSS là gì? - XSS được viết tắt từ cụm Cross Site Scripting. XSS là một dạng tấn công vào tính bảo mật của website khá phổ biến và rất hay gặp. Người thực hiện các cuộc tấn công XSS là các hacker nhằm đánh cắp dữ liệu, làm ảnh hưởng đến tính an toàn của website. Các tester có kinh nghiệm đều biết đến lỗi này và nếu họ không khắc phục, hậu quả có thể nghiêm trọng đối với hệ thống dữ liệu thông tin.
Ảnh hưởng của lỗ hổng XSS
Bạn có thể hiểu cơ bản, các hacker sẽ gửi một đoạn mã độc vào hệ thống website của doanh nghiệp. Cách thức thực hiện là hacker sẽ sử dụng các đoạn Script và ăn cắp thông tin từ phía Client.
Mục đích chính của việc tấn công này là đánh cắp dữ liệu của người dùng. Các dữ liệu "có giá trị" này thường là Cookies, Session Tokens... Đặc biệt là Cookies - giúp người dùng đăng nhập tự động. Nếu Cookies bị đánh cắp, điều này cho thấy nguy cơ hacker có thể đăng nhập vào hệ thống bằng thông tin nhận dạng.
Chính vì thế, lỗ hổng bảo mật XSS có thể coi là nguy hiểm hiện nay. Những hậu quả nghiêm trọng của việc hacker đánh cắp được thông tin người dùng như:
- Mạo danh tính người dùng thực, xâm phạm dữ liệu nhạy cảm của người dùng trên chính website đó.
- Đọc DOM và tự tạo chỉnh sửa tùy ý.
- Truy cập vào vị trí người dùng, các webcam hay microphone.
- Thêm các phương án như Social Engineering và đánh cắp các thông tin riêng tư hơn.
Những xu hướng tấn công XSS thường gặp nhất
Thông thường, cách hacker sẽ thực hiện 3 xu hướng tấn công nhất như: Reflected XSS, DOM Based XSS và Stored XSS. Vậy các hình thức tấn công XSS là gì?
Xu hướng tấn công Reflected XSS
Nhiều hacker lựa chọn chiếm phiên làm việc (session) của người dùng. Thông qua đó, họ có thể truy cập và dữ liệu và chiếm quyền của người dùng trên website. Quá trình tấn công Reflected XSS được cơ bản bằng sơ đồ sau:
- Người dùng đăng nhập vào web và (giả sử) được hacker gán session.
- Hacker sẽ gửi được cho người dùng URL bằng cách nào đó.
- Nạn nhân vào URL mà hacker gửi.
- Server phản hồi cho nạn nhân và kèm các dữ liệu có trong request (một đoạn javascript từ hacker).
- Trình duyệt của nạn nhân phản hồi và thực thi đoạn Javascript.
- Hacker tạo ra một đoạn Javascript và dùng lệnh đó để thực hiện request đến site của hacker với tham số là cookie của nạn nhân.
- Từ phía site của hacker, họ sẽ bắt được nội dung request và coi như session của nạn nhân bị chiếm.
- Hacker có thể thực hiện mọi quyền trên website mà nạn nhân sở hữu.
Tấn công DOM Based XSS
Bản chất của lỗ hoonge DOM Based XSS là gì? DOM Based XSS sẽ khai thác XSS dựa trên quá trình đổi cấu trúc DOM của HTML. DOM Based XSS là nơi mà lỗ hổng bảo mật tồn tại trong mã client chứ không phải từ server và thay đổi cấu trúc DOM.
Giả sử, nếu bạn có một website có đường dẫn đăng ký và truy cập vào, bạn thấy một form bình thường. Tất nhiên người dùng sẽ không có nghi ngờ, nhưng lập tức Script sẽ thực thi vào cơ sở dữ liệu > hệ thống bị hack.
Stored XSS
Nếu như Reflected XSS tấn công trực tiếp vào một vài nạn nhân mà hacker nhắm đến thì Stored XSS nhắm đến nhiều nạn nhân hơn. Thông thường, lỗi XSS này xảy ra khi ứng dụng web không kiểm tra kỹ dữ liệu đầu vào trước khi lưu vào cơ sở dữ liệu. Thông qua Stored XSS, hacker sẽ phải thực hiện tối thiểu qua hai bước như sau:
- Hacker thông qua các điểm đầu vào như input, form, textarea... không được kiểm tra kỹ và chèn vào phần CSDL những đoạn mã độc.
- Khi có 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 thì đoạn mã độc của hacker sẽ thực thi trên trình duyệt của người dùng.
Nhìn chung, Stored XSS nguy hiểm hơn Reflected XSS vì đối tượng bị ảnh hưởng có thể là tất cả người dùng của website đó. Và nếu nạn nhân có vai trò quản trị web thì nguy cơ quyền điều khiển web bị chiếm là rất cao.
Một số xu hướng tấn công XSS thường gặp khác
Vậy những lỗi XSS khác như thế nào? Một số xu hướng tấn công XSS có thể "hiếm gặp" hơn nhưng cũng nguy hiểm không kém. Điển hình như:
Tấn công DOM Clobbering
Khi người dùng tạo một phần trong HTML (ví dụ: <input id = username>) và sau đó tham chiếu nó từ JavaScript thì người dùng sẽ có một hàm như document.getEuityById(‘username’). Thông qua một thuộc tính của đối tượng cửa sổ toàn cầu, người dùng có thể truy cập vào.
Vì thế, window.username sẽ tương tự như document.getEuityById(‘username’). Tất cả quá trình này gọi là DOM Clobbering. Kết quả lỗ hổng sẽ xuất hiện nếu ứng dụng đưa ra quyết định dựa vào sự có mặt của một vài biến nhất định.
Tấn công mở rộng Protocol Handler
Việc tấn công mở rộng Protocol Handler sẽ gây cạn kiệt hoặc đánh cắp tài nguyên của máy chủ ( các thiết bị hạ tầng mạng như firewalls, máy chủ application hay load-balancers. Kỹ thuật tấn công thường là SYN flood, Fragmentation attack hay ACK flood.
Tấn công tương tác qua Ajax
Ajax - Asynchronous JavaScript and XML là công nghệ tạo ra web động mà không reload lại trang nên rất đẹp và mượt. Ajax được đánh giá là tập hợp công nghệ mạnh nhất nhưng cũng không tránh khỏi các nguy cơ bị tấn công XSS.
Chức năng phát biểu nên các website nền tảng Ajax có cùng kiểu lỗ hổng và có thể bị phá theo phương thức của các ứng dụng phổ thông khác. Ngoài ra, Ajax là chương trình công thức hóa yêu cầu server. Cơ chế hoạt động của nó là dùng JavaScript nên hacker có thể dễ dàng dùng các hàm Ajax để tấn công người dùng.
Cách nhận biết và ngăn chặn tấn công XSS
Vậy làm cách nào để nhận biết và ngăn chặn các đợt tấn công XSS hiệu quả?
Kiểm tra thử tấn công XSS
Công cụ quét lỗ hổng sẽ kết nối với ứng dụng web và tìm ra các lỗi tiềm ẩn và những điểm yếu của cấu tạo web. Những công cụ có thể giúp bạn kiểm tra thử có tấn công XSS không như:
- CyStack Platform – A Web Security Platform: là nền tảng an ninh mạng đầu tiên tại Việt Nam, nó bao gồm 4 apps và cung cấp các tính năng như quét lỗ hổng bảo mật ứng dụng web, giám sát an ninh liên tục, tường lửa và truy tìm mã độc.
- Burp Suite: bộ công cụ quét lỗ hổng, bạn có thể trải nghiệm phiên bản miễn phí trước nhằm trải nghiệm khả năng lập bản đồ đến khai thác lỗ hổng bảo mật.
- Netsparker: chỉ báo cáo về các lỗ hổng đã xác định được sau khi thử nghiệm hay khai thác thành công.
- Arachni: kiểm tra và học hỏi từ hành động của ứng dụng qua quá trình scan, phân tích meta để đánh giá độ tin cậy.
- W3af: được chia làm 2 phần chính gồm core và plug-in.
Cách ngăn chặn XSS là gì?
Mặc dù lỗ hổng XSS được xếp vào loại tấn công nguy hiểm nhưng bạn vẫn có thể phòng nó bằng một số cách phổ biến như:
-
Data validation: luôn đảm bảo dữ liệu đầu vào chính xác - cách này giúp giảm thiểu khả năng rủi ro và tránh được dạng tấn công Stored XSS.
-
Filtering: tìm kiếm những keyword nguy hiểm có trong phần nhập của người dùng và thay thế (hoặc xóa bỏ nó.
-
Escaping: thay đổi các ký tự bằng mã đặc biệt. Lưu ý là nên tìm kiếm thư viện Excape phù hợp.
-
Thiết lập HTTP header đúng: thiết lập "X-XSS-Protection" giúp chống cá mã độc như request.
-
Định kỳ kiểm tra và thử tấn công XSS: giúp phòng ngừa phần nào các đợt tấn công XSS và giảm mức độ nguy hiểm của nó.
-
Giảm thiểu sử dụng JavaScript inline: nhằm giúp dễ dàng hơn khi code và bảo trì hệ thống, giảm nguy cơ gặp XSS.
Các câu hỏi thường gặp liên quan đến tấn công XSS
Khi tìm hiểu về tấn công XSS là gì, ắt hẳn nhiều bạn cũng đang thắc mắc về các khái niệm khác xoay quanh XSS. Dưới đây Gofiber đã tổng hợp và giải đáp cho bạn:
1. File upload XSS là gì?
File upload XSS là gì? Trước hết, File upload là diễn đàn cho phép bạn upload hình ảnh trong phần bình luận, bài viết mới hay văn bản mới. Nếu như webserver không kiểm tra kỹ dữ liệu đầu vào của nó thì một lỗ hổng XSS lớn có thể tồn tại trên webserver thông qua tính năng File upload.
2. Sql Injection là gì?
Sql Injection là kỹ thuật lợi dụng các lỗ hổng về truy vấn trên ứng dụng. Hacker có thể thực hiện bằng cách chèn một đoạn mã SQL để thực hiện sai lệch câu truy vấn ban đầu. Từ đó, họ có thể khai thác dữ liệu từ cơ sở dữ liệu gốc. Nhìn chung, Sql Injection sẽ cho phép kẻ tấn công thực hiện những thao tác tương tự với quản trị viên thông qua cơ sở dữ liệu của ứng dụng.
3. XSS khác gì so với các cuộc tấn công khác như SQL Injection?
Đối với XSS, lỗ hổng này sẽ xuất hiện từ phía máy khách tấn công vào người dùng của ứng dụng. Còn SQL injection là lỗ hổng xuất phát từ phía máy chủ tấn công vào cơ sở dữ liệu của ứng dụng.
Gofiber hy vọng bạn đã hiểu rõ XSS là gì và biết cách phòng ngừa, giảm nguy cơ website của mình gặp phải nó. Hãy trang bị kiến thức để sẵn sàng ứng phó với các đợt tấn công XSS nhé!