Mockingjayはマルウェアの名前ではなく、技法の名前です。
プロセスインジェクションというものがあります。
これはオペレーティングシステムによって信頼されている別の実行中のプロセスのアドレス空間で任意のコードを実行する方法を指します。
これにより、攻撃者は不正アクセスを達成したり、プロセスの動作を操作したり、注入されたコードをセキュリティツールや防御者から隠蔽したりすることを目的とします。
このプロセスインジェクションには種類があります。
Self Injection、Classic DLL Injection、PE Injection、Process Hollowing、Thread Execution Hijacking、Process Doppelganging、などがあります。
どの名前も、聞いたことのあるものなのではないでしょうか。
こういったプロセスインジェクションの技法に、新たな技法が加えられました。
それがMockingjayです。
これまで認識されている攻撃技法については、既存のセキュリティ対策で検出できるものは少なくありません。
これは、現在のEDRなどのセキュリティ対策の方針の選択が効果を発揮したものと考えられます。
プロセスを挿入しようとする場合、通常いくつかのシステムコールを利用することになります。
- EDRなどのセキュリティ対策の監視するWindowsのAPIコールの例
WriteProcessMemory、NtWriteVirtualMemory、CreateRemoteThread、NtCreateThreadEx
しかし、仮に、これらのこれまでよく使われてきたAPIを使用することなく、プロセスインジェクションが実現できたらどうでしょう。
- これまであまり注目されていないWindowsのAPIコールの例
LoadLibraryW、CreateProcessW、GetModuleInformation
こういったこれまでセキュリティ対策の方面で監視の必要があると認識されてきていないAPIのみを使ってプロセスインジェクションができる方法が確認されました。
これがMockingjayです。
Mockingjayは、2つのステップで任意のコードを実行することが可能な手法です。
- 脆弱なDLLを見つける
もともと読み取り/書き込み/実行(RWX)メモリセクションを持つ脆弱なDLLを探します。 - プロセスをインジェクションする
RWXメモリセクションを悪用してプロセスを注入します。
注入にはローカルで注入する方法とリモートで注入する方法があり、どちらも確認されています。
これだけなのです。
良く悪用されるAPIを使うわけではありません。
特権を要求するわけでもありません。
これまで悪用されることの少なかったAPIを使うだけなのです。
もちろん今回悪用が確認されたAPIをこれからは監視することにしよう、という作戦の変更は思いつきます。
しかし単にこの作戦変更を実施してしまうと誤検出が多くなることが考えられます。
このため、話はそう単純に進みそうにありません。
Mockingjayの動きそのものをセキュリティ対策製品で検出することは現時点では簡単ではなさそうです。
しかしMockingjayは前提として脆弱なDLLがあらかじめ存在していることを必要とします。
もちろんマルウェアと一緒に脆弱なDLLを持ち込むことも選択できますが、それだと既存のセキュリティ対策機能でHASHで認識されるなどの対策が取られやすくなってしまうかもしれません。
せっかく検出が難しい技法を使用するのですから、Mockingjayを使うなら侵害先にあらかじめ存在するDLLを悪用したいというところになるように思われます。
このように考えると、現時点のMockingjayは重要な実行前提条件を持っているといえそうです。
私たちにできるMockingjay対策は何でしょう。
悪用できるDLLがなるべく手元のシステムに存在しないようにしてしまえばよいのではないでしょうか。
そうです、いつもの対策です。
手元のすべてのシステムの状態をタイムリーに最新の状態に保つことができれば、Mockingjayの脅威は小さく抑えることができそうです。
参考記事(外部リンク):Process Mockingjay: Echoing RWX In Userland To Achieve Code
Execution
www.securityjoes.com/post/process-mockingjay-echoing-rwx-in-userland-to-achieve-code-execution
この記事をシェア |
---|