CDI 内製ポストエクスプロイトツール Immeer のご紹介

内製のポストエクスプロイトツール Immeer のご紹介とともに、弊社のネットワーク・ペネトレーションテストではどのようなことをやっているのか解説いたします。

はじめに

サイバーディフェンス研究所 アドベントカレンダー 2022 の 23 日目(17 記事目)です。

弊社のネットワーク・ペネトレーションテストサービスは、数多くの内製ツールとそれを使いこなすエキスパートを主軸とした疑似サイバー攻撃を行います。

数多くの内製ツールには弊社所属の歴代ハッカー達の哲学が随所に散りばめられています。
ひとつのツールに頼り切ることなく、状況に応じて武器を使い分けて結果を分析、次の作戦を立案していきます。
同じ目的を持ったツールが複数存在することもあり、うまくいかない時の切り替えが円滑に行われる場面もしばしばあります(内製ツールに限った話ではないですが、多くの攻撃ツールは品質は不安定だったり特定の条件でしか動作しないものがよくあるので、オプションを複数持つのは大事なことです)。

特定のツールに依存したペネトレーションテスト・脆弱性診断と比較して、非常に精度・練度の高い疑似攻撃が可能という印象を持って頂けたら幸いです。
その反面、著名なツールのように名前やカタログでテストの内容・結果を説明できないため、理解の得にくさがあります。
内製ツールを公開することは出来ないけれども、どんなことをやっているのかお伝えしたい(あとミーアかわいい)というのが本稿の趣旨となります。

サイバーディフェンス研究所の内製ツールと言えば、テレビドラマ「ブラッディ・マンデイ」に登場し各所でいろいろな考察をして頂いた Pypen なのですが、こちらは作者にして CTO な Lauri Korts-Pärn が筆を執る日を待つとして、

今回は拙作 Immeer をご紹介します。写真はメルボルン出張時に撮影したミーアです。

Immeer とは

社内の README にはこうあります。

README: ボク、ミーア!!! Impacket ベースの カワイイ ことするツールだよ!!!

Impacket は Python で実装されたネットワーク・プロトコル・ライブラリにして、実用的な実装例が examples として提供される攻撃ツールでもあります(最初の開発元である SecureAuth 社のページ を見るのがわかりやすいと思います)。

Immeer は Impacket を使用して開発したポストエクスプロイトツール集です。
既に侵入した Windows の遠隔操作や情報窃取、他のホストやネットワークを攻撃するための踏み台化などの機能を有します。
いわゆるラテラルムーブメントに長けたツールを収録しています。

ミーアのなかまたち

Immeer にはたくさんのなかまたちがいます。ミーアなのでとにかく群れます。
うまれた順番で紹介していきます。

meerexec

README: psexec を カワイク したやつ. immeer のリーダー的存在で安定してるよ 🦸‍♀️

Sysinternals の PsExec をご存知の方は多いと思います。
Linux でも使える同様のツールに Winexe や Impacket の psexec.py などがあります。

これらのツールをペネトレーションテストで利用するにはいくつかの問題がありました。

  1. Linux で使いにくい(PsExec)
  2. 実際の攻撃にも利用されるためアンチウイルスに検知されやすい
  3. 異常終了時にサービスやファイルを残置してしまうことがある
  4. テスト対象のセキュリティを低下させてしまう(psexec.py)
    • psexec.py が Windows 上で実行する RemComSvc には権限昇格を引き起こすセキュリティ問題があります
    • psexec.py 以外にも RemCom が同梱されていることがあるので、ご注意ください
    • PsExec も権限昇格の脆弱性が報告されたことがあります、とにかくご注意ください

meerexec はこれらの問題を解消しつつ、ペネトレーションテストで安全に使用できるように配慮して再開発したものです。
Winexe(winexesvc)、psexec.py、RemCom(RemComSvc)を分析していいとこ取りしながら、アンチウイルス対策、死活監視を盛り込みました。

開発時に社内説明用に psexec.py(RemComSvc 同梱)の動作シーケンスを図解したものがあったので、本稿にも掲載しておきます。

psexec.py 動作シーケンス

meerkatz

README: ボクの天敵、アンチウイルスに見つからない alt mimikatz ... だったモノ。2020 年くらいからよく見つかるようになっちゃった 🥲 事故起こしがちな バッドボーイ 😎 であんまり使わないほうがいいって ミーア のおじいちゃんも言ってた 👴 mmm / meerkz の方が安心 ... カモ

かつて「アンチウイルス実験室 〜⚗️マルウェア検知実験🧪〜」という記事で、次のような解説をしたことがありました。

アンチウイルスに検知されやすい mimikatz を使う代わりに、LSASS のメモリーダンプを取得するということが実際の攻撃でも行われます。

meerkatz はリモートで Windows タスクスケジューラーを介して LSASS のメモリーダンプを出力し、PyPyKatz でメモリーダンプから資格情報を抽出するというツールです。

README の説明の通り、アンチウイルスに検知されては検知バイパスしながら使っていましたが、何度か LSASS のメモリーダンプが原因と思われる障害が発生しました。
検証環境ではなかなか再現できずに調査を断念し、原則使用禁止としました。
mmm / meerkz は後述します。

ちなみに meerreverse と同じ日に生まれた双子ちゃんです。

meerreverse

README: ファイル共有が無い Windows でも powershell が降ってくるんダッテ. immeer の飛び道具的存在 🪃 この子もアンチウイルスに捕まりガチなんだって、長老が言ってた 🦥

こちらもかつて「アンチウイルス実験室 〜⚗️マルウェア検知実験🧪〜」という記事で、次のような解説をしたことがありました。

リバースシェルは、侵害に成功したコンピューターの対話型シェル(コマンドプロンプトや PowerShell のウィンドウ、Linux のターミナル画面が想像できたら OK です)をリモート操作する際によく使われます。
...(中略)...
侵入テストでよく使うテクニックなだけに、PS reverse shell(CDI) も当然あります。難読化はせずに検知されなくなるまで調整しながら作っているので、AV1-5 には検知されません。

meerreverse はリモートで Windows タスクスケジューラーを介して PowerShell を実行し、対話型のリバースシェルを獲得するツールです。

PsExec 系のツールは必ずではないですが基本的に Windows サービス アプリケーションのアップロードを必要とします。
リモートで書き込み可能なファイル共有が必要ということです。
セキュリティ意識の高まりか、管理共有(ADMIN$ や C$ など)が無効化された Windows に遭遇することが徐々に増えてきました。
実際にはリモートで書き込み可能なファイル共有が無くとも何とでもなるのですが、対応に一手間必要になります。
その一手間を惜しんでとりあえずシェルだけ欲しい時に使う飛び道具、それが meerreverse です。

たまにアンチウイルスに検知されては検知バイパスしながら姿を変えていっています。

meerreverse は meerkatz と同じ日に生まれた双子ちゃんです。

meersocks🧦

README: ssh -D -L -R の SMB 版. meer is everywhere💕 immeer の ニンジャ 🥷🏻

侵入した Windows ホストを、他のホストやネットワークを攻撃するために踏み台化するツールです。

トンネル好きな紳士淑女はご存知かと思いますが、UNIX 系ホストでは SSH さえあれば他のポートをファイアウォールなどで全て閉じていても、我、融通無碍を得たりです。

  • ssh -D: ダイナミックフォワード(SOCKS プロキシ)
  • ssh -L: ローカルフォワード
  • ssh -R: リモートフォワード
  • 稀にこれらが設定で禁止されていることも

ところが Windows ではそうはいきません。
踏み台化のため何かしらトンネリングツールを使うとして、インバウンドなりアウトバウンドなりの疎通可能なプロトコルやポートを見つけなければなりません。
ネットワーク ACL が非常に厳密な環境においてはトンネリングツール用に使用可能なプロトコルやポートが一つも見つからず(これはとても良いことです、拍手!)、ラテラルムーブメント工程の作業効率がひどく低下するという経験を何度かしました。

そこで考えついたのが SMB の名前付きパイプを使ったトンネリングで、meersocks🧦 が誕生しました。
meersocks🧦 は SMB の 445/tcp ポートだけを使って ssh -D -L -R 相当のフォワード機能を実装したツールです。
これで Windows 系ホストでは SMB さえあれば、我、融通無碍を得たりです。
UNIX 系サーバーの管理に少なくとも運用管理などのネットワークセグメントから SSH 接続可能にするのと同様に、Windows サーバーの SMB を完全に塞いでしまうことは難しいでしょう。
少なくともドメインコントローラーは空いています。

SOCKS 非対応のクライアントでも透過的に SOCKS 対応させるツールに ProxyChains-NG などがあります。
CDI 社内でも古くからいくつかの実装があり、そのうちの一つが GitHub Gist で公開されているので紹介しておきます: tcp2socks.go
こういったクライアント側のツールも開発・利用することで SSH、SMB、その他のプロトコルや手法も組み合わせつつの多段串がとてもスムーズになりました。

トンネル好きではない紳士淑女には、やや理解しにくい話だったかもしれません。
ネットワーク ACL の厳密な管理は非常に重要なことですが、それだけで攻撃者のラテラルムーブメントが止まることは無い、と理解頂ければと思います。

このトンネリング手法は CDI だけのものなどではなく、Cobalt Strike や Meterpreter(Metasploit)でも使われています。
また、開発時は単体でこの機能を実現するのは meersocks🧦 だけ!と喜んでいましたが、rpc2socks という名の meersocks🧦 によく似たツールが公開されたことを紹介しておきます。

meersecrets

README: 書き込み可能な ADMIN$ がなくても何とかしてくれる secretsdump. ミーアに隠し事は通じないノダ secretsdump ニキ自体が危ないから気をつけてね 😎

secretsdump とは、Impacket の secretsdump.py のことです。
パスワードハッシュや平文のパスワードなどの情報をダンプします。

meersecrets 開発当時は secretsdump の実行に、書き込み可能な ADMIN$ 管理共有を必要としていたようです。
現在は ADMIN$ に限らず、書き込み可能なファイル共有があればよいようです。

meerreverse と同じく、リモートで書き込み可能なファイル共有が無くとも何とでもなりはするけれども、その一手間を省きたいがために誕生したのが meersecrets です。
物理パスベースで対象を操作することで、読み込み可能なファイル共有さえあれば secretsdump を可能にします。

README の説明の通り、secretsdump が原因と思われる障害を経験しています。
現在では secretsdump 以外の安全性が高いと考えられる手法を検討し新たなツールに置き換わっていたり、secretsdump を使用するとしても非常に限定的な使用方法に置き換わっています。

meertsch

README: タスクスケジューラの操作も ミーア にお任せ🕤 色んなことできる汎用 meer 型決戦兵器なんダッテ 🤖

意外なことに Impacket にはタスクスケジューラを細かく制御する examples 実装がありません(実装してみたらバグっていたので報告しました)。

ペネトレーションテストで残置したタスクやファイルがないか調査、および対処するためのツールとして meertsch は誕生しました。
タスクやインスタンスの情報取得や制御が可能です。

meerreverse はファイル共有無しの遠隔操作が出来ますが、リバースシェルであるためネットワーク ACL でアウトバウンドの通信が許可されている必要があります。
meertsch はファイル共有無しかつアウトバウンド通信制限下でも、タスクスケジューラーを介して任意の処理を実行を実行するのにも役立っています(ただし処理結果が必要な場合は別途取得する必要がある)。

Windows binaries

README: ミーア のなかまはここにもいるよ 🦔 よろしくね 🦥

Windows 上で実行する EXE ファイルです。前述したミーアたちと連携します。単体で動作可能なものもあります。

cdisvc

README: RemComSvc の代替。meerexec で使ってる。exe にいくつか種類があるので頭にいれておくべし。

ミーア節は終わりのようです。

meerexec によってアップロードおよび実行される Windows サービス アプリケーションです。
winexesvc と RemComSvc のいいとこ取りをしていて、ちょっとだけ高機能です。

弊社のペネトレーションテストで最もアップロードおよび実行される実行ファイルであり、死活監視と安全停止の機能が実装されています。

proxysrv

README: 標準入出力を使ったプロキシ。meersocks で使ってる。

meersocks によってアップロードおよび実行されるアプリケーションです。
名前付きパイプの処理は cdisvc に任せて、meersocks に指示された通信の転送を行います。

mmm / meerkz

README: アンチウイルスバイパス Mimikatz。meerexec と組み合わせて使うとヨシ。

「アンチウイルス実験室 〜⚗️マルウェア検知実験🧪〜」記事に登場した、アンチウイルス検知バイパスの Mimikatz です。

あまり重要ではないのでアンチウイルス記事では触れてませんでしたが、C/C++ 実装の mmm と C# 実装の meerkz がありました。
Invoke-Mimikatz(PowerShell 実装)の異なる実装、のようなものになります。

mm_meterpreter_reverse_tcp

README: mmm と同じアンチウイルスバイパス技術を使った Meterpreter。アンチウイルスバイパスは Meterpreter 起動までで、その後の振る舞いによってそこそこ検知されてしまう。

弊社のペネトレーションテストでは Meterpreter を使うことはあまり無いのですが、思いつきでアンチウイルスバイパス版を作ってみたものです。
Microsoft Defender でしか確認していませんが、Meterpreter セッション確立後に getsystem や hashdump、kiwi などのコマンドを実行すると、振る舞いや実行する OS コマンドの特徴で検知されていました。

マルウェアや不正通信の検知をテストしたいと要望頂いた際に役立ったことがあり、何でも作って用意しておいてみるものだな、と思ったことがあります。

おわりに

CDI 内製ポストエクスプロイトツール Immeer を紹介しました。

内製ツールを多用するためテストの内容・結果を想像しにくかった弊社のペネトレーションについて、「へー、こんなことやっているんだ」とふんわりと感想を持って頂けたら幸いです。

もっと脆弱性を突いた攻撃の嵐のようなものを想像していたのに残念。のような感想を持った方もいるのではないかと思います。
当社のバイナリ解析グループのリーダー、松隈へのインタビュー記事でもそのような話が出ていましたが、私も入社後間もない頃に同じような感想を周囲にこぼしていました。

アクセルを踏むべき時に踏む覚悟は持ちつつも、普段はテスト対象ホストやネットワークへ与えうる影響をコントロールすべく、ペンテスターたちによる内製ツールの研究開発が日々進んでいます。

今年も大変お世話になりました。
Have a nice meer!

© 2016 - 2022 DARK MATTER / Built with Hugo / Theme Stack designed by Jimmy