diff --git a/malware-tech_ref_and_memo.md b/malware-tech_ref_and_memo.md index 4d3f33b..79d477a 100644 --- a/malware-tech_ref_and_memo.md +++ b/malware-tech_ref_and_memo.md @@ -86,7 +86,6 @@ to do... - WinDBG等のカーネルモードデバッガでは追跡することができる
- 名前の由来はVX Heavenに投稿されたから
- 少なくともtrickbot,locky,emotet等では利用されていた
- **ref:**
[Knockin’ on Heaven’s Gate – Dynamic Processor Mode Switching(2012-09)](http://rce.co/knockin-on-heavens-gate-dynamic-processor-mode-switching/)
[The 0x33 Segment Selector (Heavens Gate)](https://www.malwaretech.com/2014/02/the-0x33-segment-selector-heavens-gate.html)
@@ -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)
### 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