Python chỉnh sửa tập tin rtf

Có một khai thác mới [CVE-2017-0199] đang diễn ra và bản vá đã được Microsoft phát hành vào ngày 04/11/2017. Trong bài đăng này, chúng tôi phân tích một tài liệu RTF khai thác lỗ hổng này và cung cấp quy tắc YARA để phát hiện

rtfdump. py là một công cụ Python để phân tích các tài liệu RTF. Chạy nó trên mẫu của chúng tôi sẽ tạo ra một danh sách có tất cả "thực thể" trong tài liệu RTF [văn bản được đính kèm giữa {}]

Đây thường là một danh sách lớn với rất nhiều thông tin. Nhưng ở đây, chúng tôi quan tâm đến OLE 1. 0 đối tượng được nhúng trong tệp RTF này. Chúng ta có thể sử dụng bộ lọc với tùy chọn -f O cho các đối tượng như vậy

Có 2 thực thể [objdata và datastore] có chỉ số 153 và 249 [đây là số do rtfdump tạo ra, nó không phải là một phần của mã RTF]. Nội dung của đối tượng được mã hóa bằng ký tự thập lục phân trong tệp RTF, thực thể 153 chứa 5448 ký tự thập lục phân. Vì vậy, hãy xem bằng cách chọn thực thể này để phân tích sâu hơn với tùy chọn -s 153

Trong kết xuất hex/ascii này, chúng ta có thể thấy rằng văn bản bắt đầu bằng 01050000 02000000, biểu thị OLE 1. 0 đối tượng. Khi dòng thứ hai bắt đầu bằng d0cf11e0, chúng ta có thể đoán nó chứa tệp OLE

Với tùy chọn -H, chúng ta có thể chuyển đổi các ký tự thập lục phân thành nhị phân

Bây giờ chúng ta có thể thấy chuỗi OLE2Link, thường được nhắc đến khi nói về zero-day này. Với tùy chọn -i, chúng ta có thể lấy thêm thông tin về đối tượng được nhúng

Vì vậy, đây rõ ràng là tệp OLE được nhúng và tên OLE2Link theo sau là byte 0 đã được chọn để xác định tệp OLE được nhúng này. Với tùy chọn -E, chúng ta có thể trích xuất đối tượng được nhúng

Vì đây là tệp OLE nên chúng tôi có thể phân tích nó bằng oledump. py. chúng tôi kết xuất tệp với tùy chọn -d và chuyển tệp đó vào oledump

Tệp OLE chứa 2 luồng. Hãy xem luồng đầu tiên

Chúng tôi có thể nhận ra một URL, hãy trích xuất nó bằng chuỗi

Do lỗ hổng CVE-2017-0199, URL này sẽ tự động được tải xuống. Máy chủ web phục vụ tài liệu này, sẽ xác định nó là tệp HTA thông qua tiêu đề Loại nội dung

Vì quá trình tải xuống này được thực hiện bởi Biệt danh URL nên biệt danh này sẽ nhận dạng loại nội dung và mở tệp đã tải xuống bằng công cụ HTA của Microsoft. Tệp HTA đã tải xuống có thể trông giống như tệp RTF đối với chúng tôi, nhưng trình phân tích cú pháp HTA sẽ tìm tập lệnh VBS và thực thi nó

Tập lệnh VBS này thực hiện một số hành động, cuối cùng tải xuống và thực thi tệp thực thi độc hại

phát hiện

Hãy cùng xem lại luồng đầu tiên trong tệp OLE [luồng có URL độc hại]

Chuỗi byte mà chúng tôi đã chọn ở đây [E0 C9 EA 79 F9 BA CE 11 8C 82 00 AA 00 4B A9 0B], là biểu diễn nhị phân của GUID Biệt danh URL. {79EAC9E0-BAF9-11CE-8C82-00AA004BA90B}. Lưu ý rằng chuỗi byte nhị phân và biểu diễn văn bản của GUID bị đảo ngược một phần, điều này là điển hình cho GUID

Sau biệt danh URL GUID, có một trường độ dài, theo sau là URL độc hại [và sau đó là trình tự đóng tệp,…]

Chúng tôi sử dụng quy tắc YARA sau để tìm các tài liệu RTF này

rule rtf_objdata_urlmoniker_http {
 strings:
 $header = "{\\rtf1"
 $objdata = "objdata 0105000002000000" nocase
 $urlmoniker = "E0C9EA79F9BACE118C8200AA004BA90B" nocase
 $http = "68007400740070003a002f002f00" nocase
 condition:
 $header at 0 and $objdata and $urlmoniker and $http
 }
 

Ghi chú 1. chúng tôi không tìm kiếm chuỗi OLE2Link

Ghi chú 2. với một chút kiến ​​thức về ngôn ngữ RTF, việc sửa đổi tài liệu để qua mặt quy tắc này là điều đơn giản

Ghi chú 3. tìm kiếm http. // [chuỗi $http] phân biệt chữ hoa chữ thường và nếu muốn, bạn có thể bỏ qua nó [ví dụ: nó sẽ không kích hoạt trên https]

Chủ Đề