
内部ネットワークにいるが、AD環境外にいる場合に、Active Directoryの平文資格情報を取得する。
このかわいらしいActive Directory環境とのアイスブレイクを行いましょう。冷たく孤独にActive Directoryのパーティを覗き見ているが、参加するためのAD認証情報すら持っていない場合、このツールが役立ちます。
Active Directoryに対して5つの内部ネットワーク攻撃を順次自動化し、プレーンテキストの認証情報を提供します。--autoオプションを使用すると、足掛かりを得た後にドメイン管理者権限を自動取得できます。
以下の攻撃が順次実行され、4番目と5番目の攻撃は並列かつ無期限に実行されます。
以下でキャプチャされたすべてのNetNTLMv2ハッシュは、JohnTheRipperとAD固有のパスワードリスト(100万件)で自動解析されます。
P@ssw0rd および <現在の季節><年>(例:Spring2018)smb-enum-shares により匿名書き込み可能なネットワーク共有を検出しますsmb-security-mode により脆弱なリレーターゲットを特定しますicebreaker:P@ssword123456 を追加上記5つのネットワーク攻撃を順次実行します。リバースブルートフォースとSCFファイルのアップロードは通常すぐに終わり、その後攻撃3(Responder.py)でデフォルト10分間待機します。その時間、またはユーザー指定の時間が経過すると、最後の2つの攻撃に移行し、これらは並列かつ無期限に実行されます。
null SMBセッションを許可するホストが検出された場合、icebreakerはridenumを使用してRIDサイクリングを行い、有効なユーザー名を取得します。-d <somedomain.com> オプションを使用すると、theHarvesterが指定されたウェブサイトからメールアドレスを収集します。AD互換のメールユーザー名は、リバースブルートフォースのユーザー名リストに追加されます。Icebreakerはasyncioライブラリを使用し、10の非同期ワーカーでLinuxツールrpcclientを用いてリバースブルートフォースを実行します。
SCFアップロード攻撃は、Shell Command Filesを匿名書き込み可能なネットワーク共有に対して悪用します。SCFは、デスクトップの表示やFile Explorerウィンドウのオープンなどの基本的なアクションを実行できるファイルです。これらのファイルは、ファイルアイコンをネットワークパスに設定できるという特異な特性を持っています。このネットワークパスを自分のマシンに設定すると、File Explorerでファイル共有を開いたユーザーは自動的に自分のNetNTLMv2パスワードハッシュを送信します。IcebreakerはNmapスクリプト smb-enum-shares を使用して匿名書き込み可能な共有を見つけ、ペイロードを含むSCFを自動生成してアップロードします。
攻撃3ではResponder.pyを使用してLLMNR、NBT-NS、mDNSマルチキャスト/ブロードキャストプロトコルをポイズニングします。ユーザーが存在しないネットワークパスに移動すると、Responderは攻撃者のマシンが正しいパスであると伝えます。ユーザーのNetNTLMv2パスワードハッシュが手に入ります。ResponderはSCF攻撃で送信されたハッシュもキャプチャしますが、次の攻撃はSCFハッシュのキャプチャに通常より有用です。なぜなら、ハッシュをコマンド実行に利用できる可能性があるからです。
SMBリレーは古典的なネットワーク攻撃で、攻撃者がSMBクライアントとSMBサーバーの間に割り込みます。これにより、攻撃者はSMBv1が有効でSMB署名が無効なホストに対してNetNTLMv2ハッシュをキャプチャおよびリレーできます。Impacketライブラリのntlmrelayx.pyを使用してリレーし、Responder.pyを使用してSMB接続のMan-in-the-middleを行います。SMBクライアントユーザーが、SMB署名が無効なネットワーク上のホストに対して管理者権限を持っている場合、ntlmrelayx.pyはそのホストでコマンド実行を行います。
ntlmrelayxがキャプチャしたハッシュをリレーすると、base64エンコードされたPowerShellコマンドが実行され、最初に管理ユーザー(icebreaker:P@ssword123456)を追加し、次に難読化されAMSIバイパスされたバージョンのMimikatzを実行し、続いて難読化されAMSIバイパスされたバージョンのInvoke-PowerDumpを実行します。Invoke-MimikatzとInvoke-PowerDumpの出力からプレーンテキストパスワードまたはNTLMハッシュが解析され、標準出力および found-passwords.txt ファイルに提供されます。NTLMハッシュはNetNTLMv2ハッシュとは異なり、他のADホストへの認証にプレーンテキストパスワードと同様に使用できます。ただし、MicrosoftのKB2871997パッチ以降、Pass-the-Hash攻撃で使用できるのは組み込みのRID 500ローカル管理者アカウントのみであることに注意してください。
最後の攻撃では、mitm6ツールを使用してネットワーク全体に対してMan-in-the-middle IPv6 DNS攻撃を実行します。これにより、ネットワーク上のホストは攻撃者のマシンをDNSサーバーとして使用するよう強制されます。DNSサーバーとして設定された後、攻撃者は被害者に悪意のあるWPADプロキシ設定ファイルを提供し、NetNTLMv2ハッシュを収集します。これらのハッシュはntlmrelayx.pyを使用してリレーされ、さらなるリモートコード実行の可能性が生まれます。注意すべき点は、この攻撃はネットワークに問題を引き起こしやすいことです。クライアントマシンのブラウザで証明書エラーが頻繁に発生します。また、ネットワーク速度が低下する可能性があります。しかし、この攻撃の利点は、Windows AD環境がデフォルトで脆弱であることです。
icebreakerが --auto [tmux/xterm] フラグで実行されると、攻撃4に達した時点でIcebreakerは Empire と DeathStar をtmuxセッションまたはxtermウィンドウで実行します。このオプションでは、ハッシュをリレーしたリモートホストでmimikatzを実行する代わりに、icebreakerは管理ユーザーを追加し、EmpireのPowerShellランチャーコードを実行してリモートマシンにエージェントを配置します。DeathStarはこのエージェントを使用してドメイン管理者達成のプロセスを自動化します。icebreakerを終了してもEmpireとDeathStarは閉じません。
パスワードクラッキングはJohnTheRipperとカスタムワードリストで行われます。このリストの起源は merged.txt で、SecLists GitHubアカウントのすべてのパスワードを結合したものです。ワードリストは整理され、以下のパスワードは含まれていません:すべて小文字、すべて大文字、すべて記号、7文字未満、32文字超過。これらのルールはデフォルトのActive Directoryパスワード要件に準拠しており、リストを2000万からちょうど100万以上に減らし、パスワードクラッキングを非常に高速にしています。
rootとして:
./setup.sh
pipenv install --three
pipenv shell
pipenv install 実行後にエラーが発生する場合があります。その場合は、pipenvのバージョンを11.9.0より新しいものにアップデートしてください。pipenvをGitHubからgit cloneし、フォルダ内で apt-get remove python-pipenv && python setup.py install を実行することもできます。
Dockerイメージにはまだいくつかのバグがあり、エラーが発生する可能性がありますが、ほぼ完成しています。Gitリポジトリから:
docker build --rm -t danmcinerney/icebreaker .
docker run danmcinery/icebreaker
または、icebreakerに通常追加するコマンドを追加します(ボリュームのマッピングを忘れずに):
docker run -v $(pwd)/logs:/icebreaker/logs -v $(pwd)/hashes:/icebreaker/hashes -v $(pwd)/icebreaker-scan.xml:/icebreaker/icebreaker-scan.xml -v $(pwd)/submodules:/icebreaker/submodules -e PYTHONUNBUFFERED=0 danmcinerney/icebreaker -x icebreaker-scan.xml
注意: リスナーのためにdockerの -p <host>:<container> フラグでポートをマッピングする必要があります。
rootとして実行します。改行区切りのIPアドレスリスト(単一IPまたはCIDR範囲)を読み取り、ntlmrelayxがハッシュリレー時にユーザーを追加してmimikatzを実行する代わりに、被害マシンでカスタムコマンドを実行させます。この例では、EmpireがPowerShellランチャーのワンライナーとして提供するようなコマンドを与えています。
./icebreaker -l targets.txt -c "powershell -nop -w hidden -exec bypass -enc WwFk..."
ホストリストを読み取り、Responderにデフォルトゲートウェイインターフェースではなくeth0インターフェースを使用するよう指示し、Responderの実行時間を通常の10分から30分に延長し、ntlmrelayxのデフォルトのpost-relayコマンドを実行して被害サーバーからSAMをダンプします。
./icebreaker -l targets.txt -i eth0 -t 30 -c default
Nmap XML出力ファイルを使用し、5つの攻撃すべてをスキップし、ハッシュの自動解析も行わず、リバースブルートフォース攻撃にカスタムパスワードリストを使用します(この例では -s rid により攻撃1をスキップしているため、指定したパスワードリストは実際には使用されません。これは例として示しています)。
./icebreaker.py -x nmapscan.xml -s rid,scf,llmnr,relay,dns,crack -p /home/user/password-list.txt
Fire-and-forgetの使用法:ターゲットファイルを入力し、companydomain.comからメールユーザー名をスクレイピングしてリバースブルートフォース攻撃に追加し、mitm6のIPv6 DNSポイズニングをスキップし、攻撃4が開始されたらEmpireとDeathStarをtmuxまたはxtermウィンドウで実行して自動ドメイン管理者を取得します。この使用法の目標は、月曜日の午前9時にコマンドを発射し、その後金曜日の午後4:30まで短く中断のない休憩を取り、その時点で待っているドメイン管理者シェルに戻ることです。攻撃5(mitm6)はネットワークに問題を引き起こす可能性があるためスキップし、貴重な休憩を邪魔する怒っているクライアントを避けます。
./icebreaker.py -l targets.txt -d companydomain.com -s dns --auto [tmux/xterm]