Tìm hiểu về lỗ hổng CVE 2017-0016 (Phần cuối)
Bài đăng này đã không được cập nhật trong 5 năm
Phần III: Thiết lập môi trường kiểm thử
1. Phương pháp khai thác
Phần II, mình đã trình bày sơ lược về một số phương pháp khai thác lỗ hổng CVE 2017 – 0016. Mình lựa chọn phương pháp tấn công chuyển hướng (redirect to SMB) để thực hiện demo. Cách thức khai thác mình đã trình bày trong phần II (2.1. Tấn công chuỗi), nên mình sẽ không trình bày lại. Trong phần này mình sẽ tập trung giải thích các thành phần sẽ sử dụng để thực hiện demo phương pháp khai thác này.
2. Giải thích chi tiết các thành phần trong demo
2.1 Phía server
a. Hệ điều hành:
Nhiệm vụ là cần phải chạy được file tấn công (Win10.py), bởi vậy hệ điều hành cần phải hỗ trợ ngôn ngữ lập trình Python.
Mình lựa chọn hệ điều hành Kali Linux có hỗ trợ Python 3, thông tin về hệ điều hành được hiển thị ở hình dưới:
Hình 14: Thông tin hệ điều hành phía server
b. File Win10.py:
Win10.py là tên của file được hệ điều hành phía server chạy bằng ngôn ngữ Python, khi chạy file này máy chủ server sẽ lắng nghe và phản hồi kết nối SMB và trở thành Server độc hại. Trước tiên, cần tìm hiểu cách thức mà một máy khách và một máy chủ có thể mở kết nối để giao tiếp với nhau thông qua giao thức SMB. Hình bên dưới miêu tả về cách thức giao tiếp và các bản tin trao đổi giữa client là một máy Windows NT Workstation 4.0 Service Pack 6a (SP6a) và một server là một máy Windows NT Server 4.0 (SP6a), dựa vào đó ta có thể làm hiểu cách thức mở kết nối của giao thức này [10].
Hình 15: Ví dụ quá trình mở kết nối SMB
Bước 1: Bước đầu tiên là yêu cầu thương lượng (Negotiate). Đây là lời đề nghị thông thường của các phương ngữ và trao đổi các trường Flags và Flags2 trong SMB Header của SMB_COM_NEGOTIATE Request. SMB_FLAGS2_SMB_SECURITY_ SIGNATURE bit trong trường Flags2 sẽ bị xóa và trường SecuritySignature được đặt thành 0x0000000000000000.
Bước 2: Phản hồi thương lượng (negotiate response) có bit SMB_FLAGS2_ SMB_SECURITY_SIGNATURE trong trường Flags2 bị xóa và trường SecuritySignature được đặt thành 0x0000000000000000.
Bước 3: Việc trao đổi tiếp theo tận dụng lợi thế của chuỗi thông báo ANDX. Hai yêu cầu được gửi cùng nhau; SMB_COM_SESSION_SETUP_ANDX Request đầu tiên được gửi cùng với SMB_COM_TREE_CONNECT_ANDX Request. SMB_FLAGS2_ SMB_SECURITY_SIGNATURE bit trong trường Flags2 sẽ bị xóa trong yêu cầu này và trường SecuritySignature được đặt thành 0x0000000000000000.
Bước 4: ANDX response chứa trường SecuritySignature được đặt thành 0x0000000000000000 và bit SMB_FLAGS2_SMB_SECURITY_SIGNATURE trong bit trường Flags2 sẽ bị xóa.
Bước 5: Tiếp theo, một ANDX Request khác bao gồm một SMB_ COM_SESSION_SETUP_ANDX Request và một SMB_COM_TREE_ CONNECT_ANDX Request khác được gửi đi. Đây được gọi là nỗ lực kết nối để chia sẻ. Bước 6: Lưu ý rằng thời gian này, bit SMB_FLAGS2_SMB_SECURITY_ SIGNATURE trong trường Flags2 được thiết lập và trường SecuritySignature chứa một chữ ký hợp lệ. Từ thời điểm này trở đi, quá trình mở kết nối đã kết thúc.
Như vậy để hoàn thành quá trình này cần 5 bản tin chứa các giá trị khác nhau, và 5 bản tin này cần được định nghĩa trong file Win10.py chịu trách nhiệm trao đổi các gói tin này để có thể mở kết nối và gửi gói tin độc hại. 5 bản tin này gồm các bản tin sau:
- SMBv2Header.
- SMB2NegoAns.
- SMB2Session1Data.
- SMB2SessionAcceptData.
- SMB2TreeData.
Từ đó, File Win10.py sẽ phải bảo đảm các nhiệm vụ như sau:
1. Mở cổng kết nối phía Server (Cổng 445), để lắng nghe kết nối và phản hồi.
Hình 16: Lệnh mở kết nối trong Win10.py
2. Khởi tạo các gói tin phản hồi trong quá trình kết nối của giao thức SMB.
Hình 17: Các gói tin được định nghĩa trong Win10.py
Trong hình 17, 5 gói tin có nhiệm vụ mở kết nối được được định nghĩa chi tiết trong các class ở file Win10.py. Về chi tiết nội dung các gói tin này có những gì, mời xem chi tiết tại tài liệu số [10].
3. Tạo và gửi gói tin độc hại (SMB2 TREE_CONNECT), gây DoS phía nạn nhân.
Hình 18: Dòng lệnh tạo BUG khai thác trong Win10.py
Tại đoạn xử lý dữ liệu cuối cùng trước khi gửi đi, gói tin TreeData đã được thêm vào 1500 ký tự ‘C’ và phần dữ liệu để tạo Bug, dẫn đến máy nạn nhân khi xử lý đoạn dữ liệu này sẽ bị treo và lỗ hổng được khai thác thành công (Xem phần II. Ý 1. Cơ chế của lỗ hổng).
4. Thông báo khi việc tấn công thành công.
Hình 19: Dòng lệnh thông báo khai thác thành công
Khi khai thác thành công lỗ hổng, việc lắng nghe dữ liệu phản hồi trở lại sẽ xảy ra 1 exception, dòng lệnh này bắt được exception đó và đẩy ra một thông báo cho biết việc tấn công đã thành công.
2.2 Phía Web server
Web server chạy một trang web mà kẻ tấn công đã nắm quyền điều khiển. Kẻ tấn công đăng lên trang web này 1 file chuyển hướng có tên là “redirect-smb.php”. Nội dung của file này được thể hiện trong Hình 4. Trong báo cáo này mình thực hiện chạy máy chủ WEB local tại máy nạn nhân thông qua phần mềm XAMPP và máy chủ WEB Apache.
2.3 Phía client
Hệ điều hành: Để khai thác thành công phía client cần sử dụng một trong các hệ điều hành được liệt kê tại Bảng 1. Mình sử dụng hệ điều hành Windows 10 x86, thông tin về hệ điều hành được thể hiện ở hình 20.
Hình 20: Thông tin hệ điều hành nạn nhân
Trình duyệt sử dụng:
Để tiến hành khai thác thành công, cần sử dụng một trong các trình duyệt có thể chuyển hướng, một số trình duyệt hiện tại chuyển hướng đã bị tắt một cách tự động.
Hình 21: Thông tin trình duyệt sử dụng trên máy nạn nhân
Phần IV: Thực hiện và kết quả kiểm thử
1. Quá trình thực hiện
Phía server:
- Đầu tiên, kiểm tra địa chỉ IP của máy chủ SMB độc hại, từ hình 22, ta biết địa chỉ IP của server là 192.168.1.84.
Hình 22: IP máy server
- Tiếp theo, cần cấp quyền và chạy file khai thác Win10.py bằng Python.
Hình 23: Cấp quyền và chạy file khai thác
WEB SERVER:
- Đầu tiên, cấu hình file chuyển hướng redirect-smb.php, thay địa chỉ của server SMB độc hại đã tìm được ở trên: 192.168.1.84.
Hình 24: File redirect-smb.php đã hiệu chỉnh
- Tiếp theo, truy cập thư mục htdocs trong Xampp tạo 1 thư mục làm WEB và chuyển file redirect-smb.php vào trong thư mục đó, tương tự như hình 27:
Hình 25: Tạo WEB chứa file chuyển hướng
- Tiếp theo, mở máy chủ Apache.
Hình 26: Máy chủ Apache đã được bật
Phía Client:
- Đầu tiên, kiểm tra IP của máy nạn nhân, từ hình 24 cho thấy địa chỉ IP máy nạn nhân là 192.168.1.130.
Hình 27: IP máy nạn nhân
- Tiếp theo, để chắc chắn kết nối giữa máy nạn nhân và server là hoàn toàn thông suốt, ta thực hiện ping từ máy nạn nhân đến server. Hình 25 cho thấy kết nối giữa máy nạn nhân và server là hoàn toàn thông suốt.
Hình 28: Kiểm tra kết nối giữa Client và Server
- Tiếp theo, Sử dụng trình duyệt Microsoft Egde truy cập vào trang WEB của kẻ tấn công. Ở đây trang WEB có địa chỉ: localhost/demo-cve-2017-0016.
Hình 29: Trang WEB kẻ tấn công được truy cập
- Tiếp theo, click vào file redirect-smb.php trên trang WEB, máy nạn nhân được chuyển hướng sang Server SMB độc hại, và lỗ hổng được khai thác thành công.
Phía server:
- Thông báo có kết quả kết nối đến từ máy client có địa chỉ 192.168.1.130 chính là máy nạn nhân mà ta đã kiểm tra IP. Cuối cùng là một thông báo mất kết nối (disconnected) chứng tỏ tấn công đã thành công.
Hình 30: Các thông báo sau khi khai thác từ server
2 .Kết luận
CVE 2017-0016 là một lỗ hổng nguy hiểm và hoàn toàn có thể bị khai thác bằng nhiều cách khác nhau, dẫn đến tình trạng mất đi tính sẵn sàng của hệ thống, gây thiệt hại cho tổ chức và cá nhân. Trong báo cáo mình đã trình bày khá chi tiết về lỗ hổng này, cũng như một số cách thức để có thể phòng và tránh được các dạng tấn công kiểu này. Mặc dù vậy, người dùng vẫn nên theo dõi các thông tin liên quan để kịp thời có những biện pháp cập nhật nhất.
V. TÀI LIỆU THAM KHẢO
- [1] FIRST, “Common Vulnerability Scoring System SIG.” [Online]. Available: https://www.first.org/cvss/. [Accessed: 01-Nov-2018].
- [2] Wikipedia, “Common Weakness Enumeration,” 2018. [Online]. Available: https://en.wikipedia.org/wiki/Common_Weakness_Enumeration. [Accessed: 01-Nov-2018].
- [3] Rapid7, “Microsoft CVE-2017-0016: SMBv2/SMBv3 Null Dereference Denial of Service Vulnerability,” 2017. [Online]. Available: https://www.rapid7.com/db/vulnerabilities/msft-cve-2017-0016. [Accessed: 29-Oct-2018].
- [4] SecurityFocus, “Microsoft Windows CVE-2017-0016 Memory Corruption Vulnerability,” 2017-02-02, 2017. [Online]. Available: https://www.securityfocus.com/bid/95969. [Accessed: 30-Oct-2018].
- [5] C. Detail, “Vulnerability Details : CVE-2017-0016,” 2017-03-16, 2017. [Online]. Available: https://www.cvedetails.com/cve/cve-2017-0016. [Accessed: 29-Oct-2018].
- [6] Wikipedia, “Server Message Block,” 2017. [Online]. Available: https://en.wikipedia.org/wiki/Server_Message_Block. [Accessed: 02-Nov-2018].
- [7] A. Nhiên, “SMB là gì?,” 2017. [Online]. Available: https://trainghiemso.vn/smb-la-gi/. [Accessed: 02-Nov-2018].
- [8] Lbqthinh, “Cảnh báo điểm yếu trong dịch vụ Microsoft Windows SMB cho phép tin tặc thực hiện tấn công từ chối dịch vụ,” 09:28 AM 17/02/2017, 2017. [Online]. Available: https://ais.gov.vn/canh-bao-khuyen-nghi/canh-bao/canh-bao-diem-yeu-trong-dich-vu-microsoft-windows-smb-cho-phep-tin-tac-thuc-hien-tan-cong-tu-choi-dich-vu.htm?fbclid=IwAR0n7gc78H-229gvtpYx4L-D_qK172SSgVx0VWeM_MqaFZvUWke_8WodTVc. [Accessed: 03-Nov-2018].
- [9] M. O. A. H. MIWA, “Attacking Windows SMB Zero-Day Vulnerability,” 2017-02-27, 2017. [Online]. Available: https://www.secureworks.com/blog/attacking-windows-smb-zero-day-vulnerability?fbclid=IwAR2RaRQoRZGGdSG4pR7RwZQCTj5yyU3LpueSPRaCCrS78k2eJ75GtxrPsXA. [Accessed: 03-Nov-2018].
- [10] Microsoft, “Message Signing Example,” 2017. [Online]. Available: https://msdn.microsoft.com/en-us/library/ee442085.aspx. [Accessed: 03-Nov-2018].
All rights reserved