THỬ NGHIỆM VÀ DEMO CVE-2021-31166

Một phần của tài liệu Báo cáo bài tập lớn học phần an toàn Ứng dụng web và cơ sở dữ liệu mã học phần int14105 Đề tài tìm hiểu về lỗ hổng iis remote code execution (Trang 36 - 40)

3.1 Tổng quan về CVE-2021-31166

CVE-2021-31166 là một lỗ hổng tồn tại trên driver HTTP.sys được cài đặt và sử dụng bởi IIS. Kẻ xấu có thể xây dựng một gói tin đặc biệt để gửi đến server làm server ngừng hoạt động từ đó khiến dịch vụ bị ngưng trệ (tấn công từ chối dịch vụ) hoặc tệ hơn, có thể điều khiển từ xa server. [3]

Hình dưới mô tả tổng quan lỗ hổng CVE-2021-31166:

Hình 18: Tổng quan lỗ hổng CVE-2021-31166

3.2 Chuẩn bị môi trường

- Một máy victim Windows 10 built 2004 (Máy chủ web server IIS)

Hình 19 – Cấu hình máy chủ web server IIS

- Một máy attack Kali 3.3 Proof of Concept

POC của CVE-2021-31166 rất đơn giản. Đó chỉ là một GET request đến server IIS:

Hình 20 – POC của CVE-2021-31166

Dựa vào header “Accept-Encoding” có một dấu phẩy (,) bất thường, ta có thể suy đoán lỗi có liên quan đến việc phân tích cú pháp header “Accept-Encoding”.

Ngay khi nhận được gói tin POC, server lập tức crash:

Hình 21 – Server bị crash

3.4 Cách diễn ra lỗi

Server sử dụng hàm HTTP!UlAcceptEncodingHeaderHandler để parse tất cả header

“Accept-Encoding” trong request. Với mỗi dòng “Accept-Encoding”, hàm trên sẽ sử dụng hàm HTTP!UlpParseAcceptEncoding.

Ví dụ một header “Accept-Encoding”:

Accept-Encoding: gzip, aaaa, bbbb;

Hàm HTTP!UlpParseAcceptEncoding sẽ thực hiện một vòng lặp, kết quả là lấy ra chuỗi

“gzip” còn hai chuỗi “aaaa”, “bbbb” sẽ được đưa vào một danh sách liên kết vòng chuyên để chứa những field-value “Accept-Encoding” không hợp lệ. Node đầu danh sách được lưu trên stack và có kiểu dữ liệu LIST_ENTRY64. Những node còn lại trong danh sách có kiểu:

Sau khi phân tích toàn bộ, danh sách những cái tên không hợp lệ sẽ được free bằng cách gọi đến hàm HTTP!UlFreeUnknownCodingList với tham số là địa chỉ node đầu của danh sách. Lúc này danh sách có hình dạng như sau:

Trong khi parse một trường, nếu giá trị trả về không phải ERROR_SUCCESS, hàm HTTP!UlpParseAcceptEncoding ngay lập tức thực hiện free toàn bộ danh sách những cái tên không hợp lệ. Đây là điểm gây ra lỗi. Với một dấu phẩy (,) thừa như trong POC, chương trình đã allocate 4 node, nhưng lại chỉ có 3 cái tên, và qua các thao tác gán liên kết, HTTP!UlpParseAcceptEncoding đã liên kết các node đó với một node thuộc internal structure gây xáo trộn cấu trúc. Hình dưới sẽ mô tả:

Khi phân tích field cuối cùng trong header “Accept-Encoding” của POC, kết quả trả về khác 0, do đó hàm HTTP!UlpParseAcceptEncoding kích hoạt hàm HTTP!UlFreeUnknown CodingList với tham số truyền vào vẫn là địa chỉ của root node. Hàm HTTP!UlFree UnknownCodingList sẽ chạy vòng lặp đi đến từng node trong danh sách. Với mỗi node, hàm sẽ kiểm tra tính hợp logic của node đó nếu phù hợp sẽ thực hiện deallocate và unlink khỏi root node. Root node được lấy từ Blink của node được deallocate, mà trong trường hợp này không phải root node thực sự mà là node trong internal struct (màu tím), vì thế Flink của root node thực sự vẫn là node 2 (vừa được deallocate) do đó địa chỉ của node 2 có nguy cơ bị free lần thứ hai.

Đoạn code kiểm tra tính hợp lệ của vị trí node trong danh sách fail do đó ngay lập tức kernel bị crash:

Với trường hợp của chúng ta, đoạn code kiểm tra tính hợp lệ không được thỏa mãn do đó kernel tự crash chính mình.

3.5 Hệ thống phát hiện xâm nhập IDS Suricata detect CVE-2021-31166

Rule phát hiện CVE-2021-31166:

alert tcp any any <> $HOME_NET $HTTP_PORTS,5357,5985 (flow:to_server, established; http.accept_enc; content:","; endswith;

http.accept_enc; pcre:"/\S,[\s]{0,},$/"; classtype:attempted-dos; msg:"CVE- 2021-31166 Denial of Service attempt"; reference: cve,CVE-2021-31166;

reference: url,msrc.microsoft.com/update-guide/en-US/vulnerability/CVE- 2021-31166; reference: url,github.com/mvlnetdev/CVE-2021-31166-detection- rules; sid:21311661; rev:2;)

- Thực hiện cấu hình và Add rule trên Ubuntu:

Hình 22 thực hiện cấu hình cài đặt IDS và add rule

- Câu lệnh để xem log phát hiện cve-2021-31166 : sudo tail -f /var/log/suricata/fast.log

Hình 23 detect CVE-2021-31166

Một phần của tài liệu Báo cáo bài tập lớn học phần an toàn Ứng dụng web và cơ sở dữ liệu mã học phần int14105 Đề tài tìm hiểu về lỗ hổng iis remote code execution (Trang 36 - 40)

Tải bản đầy đủ (PDF)

(41 trang)