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-23 02:53:15 +09:00 committed by GitHub
parent d6e4a3db79
commit 5aa3fc8a26
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -86,7 +86,6 @@ to do...
- WinDBG等のカーネルモードデバッガでは追跡することができる<br>
- 名前の由来はVX Heavenに投稿されたから<br>
- 少なくともtrickbot,locky,emotet等では利用されていた<br>
**ref:**<br>
[Knockin on Heavens Gate Dynamic Processor Mode Switching(2012-09)](http://rce.co/knockin-on-heavens-gate-dynamic-processor-mode-switching/)<br>
[The 0x33 Segment Selector (Heavens Gate)](https://www.malwaretech.com/2014/02/the-0x33-segment-selector-heavens-gate.html)<br>
@ -95,7 +94,7 @@ to do...
[A Museum of API Obfuscation on Win32](https://www.symantec.com/content/en/us/enterprise/media/security_response/whitepapers/a_museum_of_api_obfuscation_on_win32.pdf)<br>
### Using GetProcAddress and GetModulehandleA
- GetProcAddressを利用して呼び出したいAPIのアドレスを動的に解決することでAPIの呼び出し解析を回避する
- GetProcAddressの引数は第一引数に対象dllのハンドルを指定(i.e. GetModuleHandleA("kernel32.dll"))し第二引数にdllから呼び出したいAPI名を指定
- GetProcAddressの引数は第一引数に対象dllのハンドルを指定(e.g. GetModuleHandleA("kernel32.dll"))し第二引数にdllから呼び出したいAPI名を指定
```cpp
// Get a handle on kernel32.dll
HMODULE kernel32 = GetModuleHandleA("kernel32.dll");
@ -327,6 +326,17 @@ New-Object System.IO.Compression.DeflateStream([iO.mEmoRySTream] [sysTEM.ConVert
- レジスタにAPIのアドレスをsetしてjmpしてAPIを呼び出し
- スタックにAPIのアドレスをsetしてretでAPIを呼び出し
## Mutex
- 本来はプロセス間の同期や排他制御を行うことが目的に作成されるが,マルウェアでは1つのホストで2重で感染させるのを回避する目的で利用されることが多い。
- ロック状態で該当プロセスが終了すると,自動解放される
- Mutexは感染ホスト固有の情報を用いて作成される場合があるため同一マルウェアでもシステムごとに異なるという可能性を考慮する必要がある
- e.g.
- OpenMutex():Mutexの状態確認
- CreateMutex():Mutexの作成
- OpenMutex()で状態を確認→ロック状態の場合自プロセス終了またはロックしているプロセス終了。アンロック状態の場合Mutexの作成。
- ref:
- [How Malware Generates Mutex Names to Evade Detection](https://isc.sans.edu/forums/diary/How+Malware+Generates+Mutex+Names+to+Evade+Detection/19429/#comments)
## Poisoning CRT Library
- C/C++ランタイム(CRT)ライブラリに悪性コードを注入,特定のランタイムライブラリ関数の改ざん
- libcmt.libやmsvcrt.libの上書き不正なライブラリファイルの指定
@ -335,12 +345,13 @@ New-Object System.IO.Compression.DeflateStream([iO.mEmoRySTream] [sysTEM.ConVert
- __scrt_common_main_seh():cランタイムライブラリ_mainCRTStartupのEntryPoint
- _security_init_cookie():セキュリティチェックを行う関数。バッファオバーフローを防ぐ
- _initterm():関数インポートテーブルのエントリー呼び出し
- i.e.
- e.g.
- DllEntryPoint() -> __DllmainCRTStartup() -> _CRT_INIT() -> _initterm() -> __imp_initterm() -> malicious_code()
- コンパイル時点のレベルで改ざんされ,サプライチェーン攻撃として利用されることがある
- i.e. ShadowPad,CCLeaner,Operation ShadowHammer,etc.
- e.g. ShadowPad,CCLeaner,Operation ShadowHammer,etc.
- ref:
- [Analyzing C/C++ Runtime Library Code Tampering in Software Supply Chain Attacks](https://blog.trendmicro.com/trendlabs-security-intelligence/analyzing-c-c-runtime-library-code-tampering-in-software-supply-chain-attacks/)
- [Mutex List,Hexacorn,2015](http://hexacorn.com/examples/2015-04-05_easter_bunny_with_a_bag_full_of_events.txt)
# Persistence
## Registry