Đối với DLL Hijacking, DLL payload cần được đặt vào 1 trong các thư mục phù hợp để khai thác lỗi của các chương trình có thể bị hijack. Nhưng đa số trường hợp DLL Hijacking thường phải có quyền cao hơn user thường để đặt payload vào trong các thư mục của hệ thống và ít trường hợp có thể đặt vào các thư mục thông thường để thực hiện hijack.
Có một số cách khác để thực hiện việc này như:
Mặc dù vẫn có thể dựa vào đường dẫn của tập tin trong khóa autoruns (đường dẫn bất thường), nội dung command hay kiểm tra sâu hơn các thuộc tính khác (tên file thực tế và internal name trong cấu trúc PE, và nội dung các file nằm trong cùng thư mục bao gồm unsigned dll, các file có entropy cao, cấu hình, nội dung script,…) của khóa autoruns nghi ngờ (dựa vào baseline hệ thống, case tương tự,..) để kiểm tra kỹ hơn nhưng đây cũng là một lớp để giảm khả năng bị phát hiện khi thực hiện persistence.
Kỹ thuật này được thực hiện theo cơ chế chỉ thêm persistence khi phiên đang hoạt động có thể bị ngắt bởi các hoạt động thông thường như Logout, Shutdown,.. Khi đó mã độc sẽ không tạo persistent mà chờ đến khi phát hiện các sự kiện đặc biệt mới tiến hành. Việc rà soát autorun sẽ không đem lại kết quả, nhưng mỗi khi các hành vi như Logout, Shutdown xảy ra, autorun sẽ tự động được thêm vào và mã độc có thể tiếp tục thực thi ở các lần khởi động tiếp theo của hệ thống.
Hạn chế có thể gặp là sẽ bị mất persistence khi tiến trình theo dõi không nhận biết được các sự kiện đặc biệt trên (vì ngắt điện đột ngột, hoặc các ứng dụng khác yêu cầu Logout/Shutdown mà không gửi notify,..)
Kỹ thuật tiếp theo lợi dụng tập tin .libray-ms và COM Model để thực hiện load 1 dll bất thường bằng explorer mà không cần tạo entry ASEP. Có 2 bước để thực hiện kỹ thuật này.
Đầu tiên cần chuẩn bị file payload dll phù hợp với COM model
Sau đó, tạo khóa CLSID với GUID ngẫu nhiên, trong đó tạo 2 khóa con InProcServer32 và ShellFolder. Trong khóa InProcServer32, giá trị (Default) sẽ trỏ tới dll payload đã chuẩn bị, ThreadingModel có thể gán 1 trong các giá trị như trong bài sau.
Trong khóa ShellFolder, tạo DWORD Attributes có giá trị là 0xf090013d. Việc này giúp chuẩn bị phần payload vào trong file .library-ms sau này và cho phép payload được tiến trình explorer load lên thay vì các tiền trình khác như dllhost.exe và verclsid.exe.
Sau khi đã chuẩn bị nội dung registry trên, khi tạo một thư mục với tên NewFolder.<CLSID>
(ví dụ C:\newfolder.{1aef7ed5-3edd-40a3-8387-37242f20bccd}
) và truy cập thư mục này, Dll payload cũng có thể được thực thi. Thư mục có format tên như vậy gọi là Junction Folder.
Libray (.library-ms) là các file thư viện có định giạng XML, có tác dụng để explorer hiển thị nội dung của nhiều thư mục trong cùng một lúc. Library file có thể bị lợi dụng theo nhiều cách khác nhau thông qua thuộc tính SearchConenectionDescription/SimpleLocation/Url. Các thuộc tính này mô tả các thư mục để explorer kiểm tra nội dung và gộp vào. Trên windows có nhiều file .library-ms mặc định trong thư mục %appdata%\Microsoft\Windows\Libraries
có thể dùng làm template để chỉnh sửa payload trong thuộc tính <url>
Trỏ tới URL(WebDAV)/UNC path để hiển thị nội dung từ WebDAV server qua internet. Gần đây còn công bố CVE-2025-24071/CVE-2025-24054 để leak NTLM hash khi sử dụng SMB path trong file library-ms.
Trỏ tới Juntion Folder hoặc thư mục bên trong junction folder (có thể không tồn tại) để thực thi COM dll ứng với CLSID của junction folder.
Trỏ tới CLSID với format shell:::<CLSID>
để thực thi COM dll, ngoài ra có thể sử dụng format knownfolder:<CLSID>
để thực thi sau các CLSID mặc định sau khi đã chỉnh sửa giá trị (Default) của khóa registry InProcServer32 tương ứng.
Sau khi chỉnh sửa hoặc tạo bản sao các file .library-ms với payload thích hợp để (Junction folder hoặc shell), mỗi khi người dùng truy cập các file này, <url>
sẽ được phân giải và payload được thực thi.
Để có thể tạo persistent thông qua các tập tin này, chỉ cần đặt file .libary-ms vào thư mục %appdata%\Microsoft\Windows\Start Menu\Programs
. Thư mục này sẽ được explorer tự động kiểm tra thường xuyên, nếu gặp các file .library, explorer sẽ truy vấn các giá trị <url>
để hiện thị và gián tiếp thực thi payload COM dll.
Trigger tại start menu tương đối hiệu quả với các máy tính của người dùng cuối, còn với các máy chủ Windows Server thì khả năng kích hoạt payload từ start menu sẽ thấp hơn.
Khi thực hiện kiểm tra persistence, để tránh bỏ sót các dấu vết, có một số lưu ý sau đây:
<URL>
trong các file .library-ms
trên máyfolder_name.<CLSID>
(HKLM|HKCU)\Software\Classes\...\(InProcServer|InProcServer32|LocalServer|LocalServer32)