DLL注入
DLL注入(英語:DLL injection)是一種涉及計算機信息安全的特殊編程技術,它可以強行使一個進程加載某個動態鏈接庫以在其私有地址空間內運行指定代碼(往往是惡意代碼)。[1]DLL注入的常見手段是用外部DLL庫覆蓋一個程序原先的DLL庫,目的是實現該程序的作者未預期的結果。[2][3]比如,注入的代碼可以掛鉤(Hook)系統消息或系統調用[4][5],以達到讀取密碼框的內容等危險目的,而一般編程手段無法達成這些目的。[6]
能將任意代碼注入任意進程的程序被稱為DLL注入器(DLL injector)。
實現方式
編輯Windows平台
編輯- 先利用惡意TSR程序調用惡意DLL,在惡意DLL初始化時,由TSR定位待注入目標程序並將其句柄傳遞至DLL中的注入函數,注入函數會繞過安全權限並向目標程序的私有地址空間申請一塊預留空間,並在該空間內展開後續惡意操作[7]
Unix平台
編輯- 在類Unix操作系統上,基於ld.so(在BSD上)和ld-linux.so(在Linux上)的動態鏈接器,可以通過在LD_PRELOAD環境變量中指定庫的路徑名,將任意庫鏈接到新進程中,該變量可以全局設置或單獨為某個進程設置。[8]
例如,在Linux系統上,這條命令會在啟動時將文件"test.so"中的共享庫鏈接到命令"prog"中:
LD_PRELOAD="./test.so" prog
這樣的庫可以像其他共享對象一樣創建。在GCC中,這涉及到使用-fpic或-fPIC選項編譯包含要鏈接的新全局變量的源文件[9],並使用-shared選項進行鏈接。[10]該庫可以像其他庫一樣訪問程序中聲明的外部符號。
參考資料
編輯- ^ James Shewmaker. Analyzing DLL Injection (PDF). GSM Presentation. Bluenotch. 2006 [2008-08-31]. (原始內容 (PDF)存檔於2008-12-03).
- ^ Iczelion. Tutorial 24: Windows Hooks. Iczelion's Win32 Assembly Homepage. August 2002 [2008-08-31]. (原始內容存檔於2008-08-01).
- ^ Rocky Pulley. Extending Task Manager with DLL Injection. CodeProject. CodeProject. 2005-05-19 [2008-09-01]. (原始內容存檔於2009-02-06).
- ^ Nasser R. Rowhani. DLL Injection and function interception tutorial. CodeProject. CodeProject. 2003-10-23 [2008-08-31]. (原始內容存檔於2008-06-15).
- ^ Ivo Ivanov. API hooking revealed. CodeProject. CodeProject. 2002-12-02 [2008-08-31]. (原始內容存檔於2008-10-14).
- ^ Robert Kuster. Three Ways to Inject Your Code into Another Process. CodeProject. CodeProject. 2003-08-20 [2008-08-31]. (原始內容存檔於2008-07-20).
- ^ Tutorial 24: Windows Hooks. [2018-04-14]. 原始內容存檔於2008-08-01.
- ^ UNIX man pages : ld.so (8). web.archive.org. 2009-02-06 [2024-06-10].
- ^ Code Gen Options - Using the GNU Compiler Collection (GCC). gcc.gnu.org. [2024-06-10].
- ^ Link Options - Using the GNU Compiler Collection (GCC). gcc.gnu.org. [2024-06-10].
- ^ Goldsborough, Peter. The LD_PRELOAD trick. Peter Goldsborough. [2024-06-10].
- ^ Code Injection into Running Linux Application. CodeProject. 2009-02-12 [2024-06-10] (美國英語).