1
0
mirror of https://github.com/nganhkhoa/malware.git synced 2024-06-10 21:32:07 +07:00

Update malware-tech_ref_and_memo.md

This commit is contained in:
mether049 2020-02-17 01:46:48 +09:00 committed by GitHub
parent ea73b065c8
commit 632d3b7de8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -215,7 +215,6 @@ New-Object System.IO.Compression.DeflateStream([iO.mEmoRySTream] [sysTEM.ConVert
**ref:**<br>
[Powershell Static Analysis & Emotet results](https://hatching.io/blog/powershell-analysis)<br>
# Anti-detection
## Living Off The Land(LOL)
- システムに備わっている信頼性の高いツールを悪用する
- LOLで利用される各種Binary(LOLBin), Script(LOLScript), Library(LOLLib)のドキュメント<br>
@ -289,6 +288,44 @@ New-Object System.IO.Compression.DeflateStream([iO.mEmoRySTream] [sysTEM.ConVert
- HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
- HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\SharedTaskScheduler
## Packing
- 実行形式を保持したまま,実行ファイルを圧縮
- パッキング後のプログラムには展開ルーチン,圧縮されたオリジナルコードが含まれる
- オリジナルコードを静的解析するためにはアンパッキングが必要
- 特徴
- 特徴的なセクション名
- 可読性のある文字列が少ない
- インポートされているAPIが少ない(オリジナルコードの展開ルーチンに利用するAPI?)
- 展開ルーチンの流れ(簡易)
- オリジナルコードをデコード
- ローダによりオリジナルコードのIATを再構築
- OEPに制御を移しオリジナルコードを実行
- プログラムをパッキングするまでの流れ(簡易)
- PEヘッダから下記のパッキングに必要な各種情報(AddressOfEntryPoint,ImageBase,SectionTable(VirtualAddress,VirtualSize,PointerToRawData,SizeOfRawData),etc.)を取得
- コードセクションのエンコード(PointerToRawからSizeOFRawData分の領域まで)
- 展開ルーチンの追加
- コードセクションの使われていない後方領域(0パディングされた領域)を利用(FileAlignment,VirtualSize,SizeOfRawDataから算出)
- PEヘッダの修正
- 展開ルーチン追加後のVirtualSize
- 展開ルーチンの先頭を示すAddressOfEntryPoint
- コードセクションへの書き込み属性の付与
- 既知のパッカー
- UPX
- ASProtect
- Stolen Bytesを利用
- tELock
- Import Redirectionを利用
## Anti-Unpacking
### Stolen Bytes(Stolen Codes)
- 展開ルーチンのコードの中にオリジナルコードの先頭部分(OEP付近)をあらかじめ含めて実行させることで展開ルーチンによって展開させるオリジナルコードをその先頭部分から後ろのみにし本来のOEPの特定を難化させる(展開されたオリジナルコードの領域監視によるOEP特定の難化)
### Import Redirection
- IATの再構築を妨害
- IATにAPIのアドレスではなくAPIを呼び出すための関数をsetする
- 関数内
- レジスタにAPIのアドレスをsetしてjmpしてAPIを呼び出し
- スタックにAPIのアドレスをsetしてretでAPIを呼び出し
# rootkit
## LKM rootkit
- 動的にカーネルに組み込めるモジュールであるLKM(Loadable Kernel Module)を利用してsys_call_tableの特定のカーネル関数のアドレスを任意の関数のアドレスへと書き換えることで本来とは異なるカーネル関数であるrootkitのカーネル関数等が呼び出せるようになる(システムコールフック)