14. Copyright ? NTT Communications Corporation. All rights reserved.
EXEとDLLを結びつける仕組み IATとEAT
B.DLL
EAT
b() ? RVA of b
C.DLL
EAT
c() ? RVA of c
A.EXE
B.DLL
b() ? B Base +RVA
C.DLL
c() ? C Base +RVA
IAT
B Base
+
C Base
+
13/19
16. Copyright ? NTT Communications Corporation. All rights reserved.
(1)攻撃対象のプロセス内メモリに偽DLLのファイル名を書き込む
?VirtualAllocExとWriteProcessMemoryを使う
(2)偽DLLを攻撃対象のプロセスに読み込ませる
?CreateRemoteThread を使う.
起動パラメータは, LoadLibraryと上記で書き込んだリモートアドレス
(3)攻撃対象のプロセスのIATの,ターゲット関数のアドレスを偽DLLの関数アドレスで上書き
?偽DLLのDllMain関数で実行
DLLインジェクションの手順
15/19
17. Copyright ? NTT Communications Corporation. All rights reserved.
イメージ図
main.exe
add.dll
prtintf(“a+b=%d“,add(15,3));
Create RemoteThread
?LoadLibrary
起動
IAT
add.dll
add => X
add(){
return a-b;
}
X inj.exe
newadd.dll
main.exe
add.dll
newadd.dllZ newproc(){
return a+b;
}
DllMain(){
IAT書き換え
}
Z
16/19
18. Copyright ? NTT Communications Corporation. All rights reserved.
DLLインジェクション実験
①
②
③
④
①ターゲットプロセスを起動 main.exe
②ターゲットプロセスのプロセスIDを調査
③DLLインジェクション実行
④ターゲットプロセスのバグが修正された
17/19
19. Copyright ? NTT Communications Corporation. All rights reserved.
APIフック
アプリケーション
WinAPI
kernel32.dll
DLLインジェクション
で挿入したkernel32.dll
の偽物
呼ばれたパラメータをそのまま
使って本物のAPIを呼ぶ
APIコールのログ収集
18/19