Được phát hành vào 1990, Com (Microsoft Component Object Model (COM) được MS phát triển, Theo như định nghĩa của Microsoft, “COM là một hệ thống phân tán và hướng đối tượng, cho phép tạo ra các thành phần phần mềm nhị phân có khả năng tương tác với nhau. Là nền tảng cho những công nghệ như Microsoft’s OLE (compound documents) và ActiveX (Internet-enabled components)”
Theo một cách dễ hiểu hơn, COM là một hệ thống cho phép các thành phần bên trong các ứng dụng có thể giao tiếp và tương tác với nhau thông qua việc sử dụng một đối tượng có thể gọi tới DLL hoặc EXE. Ví dụ như Microsoft Office sử dụng COM để tương tác giữa các ứng dụng trong bộ Office như Word, Excel và PowerPoint, dễ gặp nhất là việc nhúng một bảng tính Excel vào một tài liệu Word bằng cách sử dụng tính năng OLE (Object Linking and Embedding) hay Microsoft Outlook có các add-in và plug-in cho Outlook thường sử dụng COM để thêm các tính năng mới vào ứng dụng.
Tuy nhiên, COM lại hạn chế ở việc chỉ hoạt động giới hạn trong phạm vi của một máy tính cụ thể do không thể tương tác qua mạng. Để giải quyết vấn đề này, DCOM (Distributed Component Object Model) ra đời, đây là một thành phần trung gian giúp mở rộng chức năng của COM sử dụng RPC (Remote procedure call). Theo mặc định, chỉ Administrators mới quyền sử dụng và khởi chạy các COM object thông qua DCOM. Thông qua DCOM, attacker có thể sử dụng đặc quyền phù hợp để thực thi shellcode tùy ý, thậm chí từ xa thông qua các ứng dụng Office hoặc các đối tượng Windows khác có chứa các phương thức không an toàn. DCOM cũng có khả năng thực thi macro trong các tài liệu hiện có và có thể gọi thực thi DDE (Dynamic Data Exchange) trực tiếp thông qua các phiên bản COM của các ứng dụng Microsoft Office, mà không cần sử dụng tài liệu độc hại. Do đó có đa dạng các cách thức tấn công thông qua COM mà kẻ tấn công có thể sử dụng.
Trước khi đi vào giới thiệu môt số kiểu tấn công cơ bản đã được các researcher phát hiện nhiều năm về trước, chúng ta giới thiệu qua về khái niệm cơ bản quan trọng: CLSID. CLSID hay Class Identifier là một chuỗi định danh duy nhất, được biểu diễn dưới dạng chuỗi 128 bit bao gồm chữ cái và số, được sử dụng để xác định các đối tượng COM, cho phép hệ điều hành và các ứng dụng hiểu và truy cập tới các thành phần này trong ứng dụng mà không cần xác định thông qua tên.
Chúng ta có thể tự tạo giá trị CLSID trong registry và việc tạo này không cần yêu cầu đặc quyền cao. Vậy CLSID thì liên quan gì đến tấn công thông qua COM? Về cơ bản, khi một ứng dụng cần sử dụng một đối tượng COM hoặc cần gọi một thư viện (DLL/EXE), nó sẽ tra cứu registry để tìm đường dẫn đến thư viện đó. Windows sẽ tra cứu thông tin này trong các hive của registry theo thứ tự ưu tiên từ HKEY_CURRENT_USER (HKCU) sau đó là HKEY_LOCAL_MACHINE (HKLM). Attacker có thể tìm kiếm các key có thể bị lạm dụng, từ đó tạo CLSID tương ứng trỏ đến các tiến trình độc hại, một số COM object khác cho phép tương tác với tệp tin, tiến trình hoặc thực thi câu lệnh
Đối với cách thức tấn công tại local: Attack có thể tìm được các CLSID có thể bị lạm dụng thông qua việc liệt được tất cả các CLSID đa dạng các công cụ có thể hỗ trợ công việc này như ComPower, COMHijackToolkit, sau đó liệt kê các thuộc tính và phương thức và tìm kiếm các từ khóa như Shell, Execute, Create, Run, Exec,… Dưới đây là một số CLSID có thể bị lạm dụng cho việc thực thi và thực hiện các HTTP request và download file:
- MMC20.Application {49b2791a-b1ae-4c90-9b8e-e860ba07f889}
- WScript.Shell – {72c24dd5-d70a-438b-8a42-98424b88afb8}, {f935dc22-1cf0-11d0-adb9-00c04fd58a0b}
- ShellBrowserWindow – {c08afd90-f2a1-11d1-8455-00a0c91f3880}
- Shell.Application – {13709620-c279-11ce-a49e-444553540000}
- InternetExplorer.Application – {0002df01-0000-0000-c000-000000000046}, {d5e8041d-920f-45e9-b8fb-b1deb82c6e5e}
- WinHttpRequest – {2087c2f4-2cef-4953-a8ab-66779b670495}
- Shell.Explorer – {8856f961-340a-11d0-a96b-00c04fd705a2}, {eab22ac3-30c1-11cf-a7eb-0000c05bae0b}
Trong trường hợp trên, bạn đọc có thể sẽ hiểu nhầm rằng tiến trình powershell.exe sẽ là tiến trình cha, thực chất khi sử dụng MMC20.Application COM object để bắt đầu một tiến trình, tiến trình cha là mmc.exe thay vì powershell.exe.
Bằng cách tương tự, kẻ tấn công có thể sử dụng DCOM để thực thi các tiến trình hoặc câu lệnh ở các máy trong cùng mạng, thay thế cho psexec, WMI hoặc các kỹ thuật khác.
CLSID, LOCALSERVER32 VÀ INPROCSERVER32
Như đã đề cập ở trên ở trên, mỗi COM class được nhận dạng bằng một mã định danh duy nhật gọi GUID được lưu trong registry HKCU và HKLM. Trong mỗi khóa CLSID, có thể có các khóa con (subkey) khác nhau chỉ định các triển khai COM class, thông dụng trong số đó có 2 khóa con (cấu trúc như hình ảnh dưới đây):
LocalServer32: Khóa trỏ đến file thực thi (.exe).
inProcserver32: Khóa trỏ đến một tệp thư viện liên kết động (.DLL)
Bằng cách liệt kê và tìm kiếm các đường dẫn được tham chiếu trong COM nhưng không còn tồn tại, kẻ tấn công có thể lạm dụng để trỏ đến các tiến trình độc hại và thực thi. Tuy nhiên, một câu hỏi khác làm sao để trigger các files độc hại này trong COM. Có một số cách thức sau:
- Sử dụng rundll32 với tham số -sta {CLSID} hoặc -sta ProgID
- Sử dụng xwizard.exe với tham số RunWizard /taero /u {CLSID}
- Sử dụng Verclsid.exe với tham số /S ?C {CLSID}