首页 > 技术文章 > 信息收集——ike-scan

jiuzhongxian 2020-04-26 15:06 原文

简介

ike-scan可以发现IKE主机,也可以使用重传回退模式对它们进行指纹识别。

ike-scan可以执行以下功能:

  • 发现确定给定IP范围内的哪些主机正在运行IKE。通过显示那些响应ike-scan发送的IKE请求的主机来完成此操作。
  • 指纹确定主机正在使用哪种IKE实施,并在某些情况下确定主机正在运行的软件的版本。这是通过两种方式完成的:首先是UDP退避指纹识别,它包括记录来自目标主机的IKE响应数据包的时间,并将观察到的重传退避模式与已知模式进行比较;其次是供应商ID指纹识别,该指纹将VPN服务器中的供应商ID负载与已知的供应商ID模式进行比较。
  • 转换枚举查找IKE阶段1的VPN服务器支持哪些转换属性(例如,加密算法,哈希算法等)。
  • 用户枚举对于某些VPN系统,请发现有效的VPN用户名。
  • 预共享密钥破解通过预共享密钥身份验证为IKE积极模式执行脱机字典或暴力破解密码。它使用ike-scan来获取哈希值和其他参数,并使用psk-crack(这是ike-scan软件包的一部分)来执行破解。

重传回退指纹识别概念在UDP退回指纹识别纸中进行了更详细的讨论,该文件应作为UDP退回指纹识别纸包含在ike-scan套件中

该程序将IKE阶段1(主模式或攻击模式)请求发送到指定的主机,并显示收到的所有响应。它处理带有重发的重试和重传以应对数据包丢失。它还限制了出站IKE数据包使用的带宽量。

IKE是Internet密钥交换协议,它是IPsec使用的密钥交换和身份验证机制。几乎所有现代VPN系统都实现IPsec,并且绝大多数IPsec VPN使用IKE进行密钥交换。主模式是为IKE交换的第1阶段定义的模式之一(另一种定义的模式是攻击模式)。RFC 2409第5节指定必须实现主模式,因此可以预期所有IKE实现都支持主模式。

使用方法

在man手册或者帮助手册上能看到的内容,我就尽量不拿出来说了。

主机输入和内存要求

可以在命令行上指定要扫描的主机,也可以使用该--file=<fn>选项从输入文件中读取该程序可以处理大量主机,而这些主机仅受存储host_entry结构列表所需的内存量限制。在32位系统上,每个host_entry结构都需要45字节,因此B类网络(65534台主机)将需要大约2.8 MB的列表空间。可以将主机指定为IP地址或主机名,但是该程序会将所有主机内部存储为IP地址,并且只会在输出中显示IP地址(ike-scan调用gethostbyname(3)以确定每个主机的IP地址,但这可以通过--nodns选项禁用)。

限速

该程序限制了它发送IKE数据包的速率,以确保它不会使网络连接过载。默认情况下,它使用每秒56000位的出站数据速率。可以使用该--bandwidth选项进行更改

如果要以特定速率发送数据包,则可以使用该--interval选项。

Cookie生成和远程主机识别

ike-scan为每个主机生成唯一的IKE cookie,并使用这些cookie来确定响应数据包属于哪个主机。请注意,它不依赖于响应数据包的源IP地址,因为响应数据包可能是从与原始发送地址不同的IP地址发送的。有关此示例,请参见“程序输出”部分。

通过获取gettimeofday()返回的当前时间的MD5哈希值的前64位(以秒和微秒为单位),唯一的主机号和主机IP地址来生成cookie。这样可以确保cookie具有合理确定性的唯一性。

如果--verbose有效,则收到的任何与cookie不匹配的数据包都将产生如下消息:

Ignoring 84 bytes from 172.16.2.2 with unknown cookie 195c837e5a39f657

如果--verbose未生效,则将忽略这些数据包。

此类Cookie不匹配的原因可能是:

  • 主机仍在向先前的ike-scan运行返回IKE响应。
  • 该数据包不是IKE数据包,或已以某种方式损坏。要么
  • 已收到与ike-scan无关的IKE数据包。

IKE封包详细资料

发送的主模式数据包包含一个ISAKMP标头和一个SA有效负载。SA有效负载包含一个提议,该提议可以包含可变数量的转换,如下所述。

默认情况下,SA提议包含8个转换。这8个转换代表以下所有可能的组合:

  • 加密算法:DES-CBC和3DES-CBC;
  • 哈希算法:MD5和SHA-1;
  • DH组:1(MODP 768)和2(MODP 1024)。

ike-scan使用默认转换集发送的主模式数据包的tcpdump输出示例如下所示。这显示了8个转换,还显示了它们的发送顺序:

16:57:16.024536 192.168.124.8.500 > 172.16.2.2.500:  [udp sum ok]isakmp 1.0 msgid 00000000: phase 1 I ident:
  (sa: doi=ipsec situation=identity
    (p: #1 protoid=isakmp transform=8
      (t: #1 id=ike (type=enc value=3des)(type=hash value=sha1)(type=auth value=preshared)(type=group desc value=modp1024)(type=lifetype value=sec)(type=lifeduration len=4 value=00007080))
      (t: #2 id=ike (type=enc value=3des)(type=hash value=md5)(type=auth value=preshared)(type=group desc value=modp1024)(type=lifetype value=sec)(type=lifeduration len=4 value=00007080))
      (t: #3 id=ike (type=enc value=1des)(type=hash value=sha1)(type=auth value=preshared)(type=group desc value=modp1024)(type=lifetype value=sec)(type=lifeduration len=4 value=00007080))
      (t: #4 id=ike (type=enc value=1des)(type=hash value=md5)(type=auth value=preshared)(type=group desc value=modp1024)(type=lifetype value=sec)(type=lifeduration len=4 value=00007080))
      (t: #5 id=ike (type=enc value=3des)(type=hash value=sha1)(type=auth value=preshared)(type=group desc value=modp768)(type=lifetype value=sec)(type=lifeduration len=4 value=00007080))
      (t: #6 id=ike (type=enc value=3des)(type=hash value=md5)(type=auth value=preshared)(type=group desc value=modp768)(type=lifetype value=sec)(type=lifeduration len=4 value=00007080))
      (t: #7 id=ike (type=enc value=1des)(type=hash value=sha1)(type=auth value=preshared)(type=group desc value=modp768)(type=lifetype value=sec)(type=lifeduration len=4 value=00007080))
      (t: #8 id=ike (type=enc value=1des)(type=hash value=md5)(type=auth value=preshared)(type=group desc value=modp768)(type=lifetype value=sec)(type=lifeduration len=4 value=00007080)))) (DF) (ttl 64, id 0, len 364)```

该默认转换集旨在为大多数IKE实现所接受-大多数将接受至少一个提供的转换。但是,有时有必要使用其他身份验证方法(预共享密钥是最常见的方法,但并非始终受支持),并且有时需要指定其他密码,例如256位AES。很少有必要更改寿命。最后,某些实现要求客户端在响应之前发送特定的“供应商ID”字符串。可以使用--vendor选项指定

默认的转换集导致数据包数据长度为336字节,当添加IP和UDP标头时,总数据包大小为364字节。

可以使用--auth(默认值为1-预共享密钥)指定Authentication Method,使用IKE指定以秒为单位的IKE寿命--lifetime(默认为28800秒或RFC 2407建议的8小时)。如果指定--lifetime为0,则转换有效载荷中不包含生存期属性。如果指定自定义转换,则可以多次使用此选项以产生具有不同生存期的转换有效负载。每个--trans选项将使用先前指定的生存期值。

可以指定一个自定义转换集,--trans=e[/l],h,a,g其中“ e”是加密算法,“ l”是可变长度密码的密钥长度,“ h”是哈希算法,“ a”是身份验证方法,g是DH集团。这些被指定为数值;有关使用哪些值的详细信息,请参见RFC 2409附录A。

例如:--trans=5,2,1,2指定: Enc=5 (3DES-CBC), Hash=2 (SHA1), Auth=1 (shared key), DH Group=2 (modp 1024)

并--trans=7/256,1,1,5指定: Enc=7 (AES), Keylen=256 bits, Hash=MD5, Auth=shared key, DH Group=5 (modp 1536)

您可以--trans多次使用该选项,以在提案中发送任意数量的自定义转换。

指定自定义转换集会覆盖使用指定的任何身份验证方法--auth但是,它仍然使用最后一个--lifetime选项中指定的生存期值

一个复杂的自定义转换集的示例是:

--trans=5,2,1,2 --lifetime=0 --trans=7/256,1,3,5 --lifetime=600 --trans=7/128,1,3,5

这将指定以下三个转换:

  • 具有SHA1哈希,共享密钥身份验证,DH组2和默认生存期的3DES加密;
  • 256位AES加密,带有MD5哈希,RSA身份验证,DH组5,并且没有生存期;
  • 具有MD5哈希,RSA认证,DH组5和600秒生存期的128位AES加密。

如果指定了自定义转换集,则数据包长度将与默认值不同。少于8个转换将使其变小,而超过8个转换将使它变大。如果数据包大小超过了MTU,则它将被分段。您可能需要增加--interval大数据包设置,以避免网络连接过载。某些VPN服务器可能会忽略很长的数据包。

在以下情况下,自定义转换会很有用:

  • 如果默认转换集中的所有转换都不是远程IKE实施可接受的;
  • 如果您知道可以接受特定的转换,并且希望最大程度地减少带宽使用或允许更快的扫描速率;要么
  • 如果您想确切确定远程IKE实施支持指纹的转换。

使用的默认模式是主模式。但是,可以使用该--aggressive选项指定“积极模式” 完成此操作后,将包括三个其他有效负载:密钥交换,随机数和ID。这将增加数据包的大小,您可能需要增加--interval以确保ike-scan不会尝试使用过多的带宽。如果使用积极模式,还可以使用以下选项:

  • --id 设置识别值。
  • --idtype 设置标识类型(默认3(ID_USER_FQDN))。
  • --dhgroup 指定Diffie-Hellman组(默认2-MODP 1024)。

如果使用积极模式,则只能在变换集中使用一个Diffie Hellman组。如果使用--trans选项指定自定义转换,则应确保它们都使用相同的组,并且该组与使用该--dhgroup选项指定的DH组匹配;如果--dhgroup未指定,则默认为2 

IKE主机可以以下两种方式之一进行响应:

  • 使用IKE主或主动模式响应数据包,其中包含最初发送给主机的cookie。这是一个“握手”响应,表示主机支持IKE并认为我们的建议可以接受;要么
  • 使用IKE通知消息,其中包含最初发送给主机的cookie。这是一个“ notify”响应,表示主机正在运行IKE,但不接受我们的建议。

对于“握手”响应的示例tcpdump输出为:

16:57:48.068698 172.16.2.2.500 > 192.168.124.8.500:  [udp sum ok]isakmp 1.0 msgid 00000000: phase 1 R ident:
  (sa: doi=ipsec situation=identity
    (p: #1 protoid=isakmp transform=1
      (t: #1 id=ike (type=enc value=3des)(type=hash value=sha1)(type=auth value=preshared)(type=group desc value=modp1024)(type=lifetype value=sec)(type=lifeduration len=4 value=00007080)))) (ttl 126, id 37891, len 112)

 

这表明IKE主机已响应一个ISAKMP标头和一个包含单个提议的SA有效负载。该提议包含一个转换,代表从ike-scan发送的提议中选择的转换。

“ notify”响应的示例tcpdump输出为:

17:12:55.038554 192.168.89.22.500 > 192.168.37.1.500:  [udp sum ok]isakmp 1.0 msgid 00000000: phase 1 R inf:
  (n: doi=0 proto=1 type=NO-PROPOSAL-CHOSEN) (ttl 52, id 39577, len 68)

 

这表明IKE主机已通过ISAKMP标头和通知有效载荷进行了响应。通知有效负载是类型为“ NO-PROPOSAL-CHOSEN”的信息性消息。

ike-scan不响应收到的任何IKE响应,因此IKE主模式握手将永远不会完成。某些IKE实施不记录未完成的握手。这些实现将不会记录扫描,因此这些系统的所有者将不会意识到扫描。如果您有权访问系统日志,则可以使用ike-scan来确定给定的实现是否将记录这些扫描尝试。

退避指纹

对于那些响应的主机,ike-scan记录接收到的IKE响应的时间。IKE响应之间的退避在不同的IKE实现之间有所不同,因此可以用作指纹。--showbackoff选项用于显示每个响应主机的退避时间。请注意,使用该--showbackoff选项将使ike-scan在最后收到的数据包之后等待60秒,以确保它已查看所有响应。可以通过为该--showbackoff选项指定不同的值(以秒为单位)来更改这60秒的等待时间

收到所有数据包后,将显示退避表,程序会尝试将退避模式与文本文件ike-backoff-patterns中包含的已知退避模式进行匹配可以向该文件添加新模式。

请注意,只有通过握手响应的主机才能通过退避时间进行指纹识别。发出通知消息的主机不能。这是因为通知消息仅发送一次,并且不会因退避而重发。

如果您发现IKE主机具有ike-scan无法识别的退避模式,则鼓励您向我提交IKE实施的模式和详细信息,以便将其合并到以后的ike-scan版本中。您可以通过在github上发布问题或请求请求来完成此操作。

请注意,任何数据包丢失都会阻止退避指纹工作,因为程序需要查看所有响应。

ike-scan也可以通过其他方式用于对IKE主机进行指纹识别。例如:

  • 某些系统(例如Checkpoint Firewall-1)允许使用任何源端口(例如--sport=0),而其他系统(例如Windows 2000)仅响应来自源端口500的IKE请求(实际上,Windows 2000响应来自任何端口的请求,但始终将响应发送回端口500(相当于同一件事)。
  • 某些系统使用专有的通知消息代码,使它们可以被识别。例如,Checkpoint Firewall-1 4.0、4.1和NG Base使用通知消息代码9101。ike-scan会识别此消息,并将系统标识为“ Checkpoint Firewall-1 4.x或NG Base”。
  • 不同的系统支持不同的转换,可以通过尝试使用与所有可能的组合来确定这种支持--trans但是请注意,用户通常可以更改变换集,因此不能单独依靠它。
  • 不同的实现需要不同的IKE生存期。一些实现将接受任何生存期,而其他实现将仅接受低于特定值的生存期。
  • 通过使用其他工具(例如tcpdump)来嗅探返回的IKE数据包,可以确定IP ID和IP TTL。这些可用于对IP堆栈进行指纹识别,从而有助于确定IKE实施。
  • IKE主机可以发送供应商ID有效载荷,以唯一标识实现。此供应商ID指纹识别方法最初是由Brett Eldridge beldridg@pobox.com提出的ike-scan将显示它收到的任何供应商ID有效负载,并将尝试将它们与已知的供应商ID模式进行匹配。

节目输出

程序输出包括两部分:

  • IKE主机检测部分;
  • IKE退避模式部分(如果--showbackoff已指定)。

IKE主机检测部分针对每个响应主机包含一行。响应可以是成功的握手,也可以是参考消息。此部分仅显示任何给定主机返回的第一个数据包。

IKE主机检测部分的一些示例包括:

10.0.1.98        IKE Handshake returned (1 transforms)
10.0.1.22        Notify message 14 (NO-PROPOSAL-CHOSEN)
10.0.1.189        (10.0.1.130) Notify message 9101 (No common authentication method with Firewall.)

 

在上面的示例输出中,主机10.0.1.98返回了IKE握手,10.0.1.22返回了通知消息14(十进制),该消息对应于RFC定义的错误消息“ NO-PROPOSAL-CHOSEN”(请参阅​​RFC 2408第3.14节)。 1),并且10.0.1.189已返回非标准通知消息9101,但响应来自IP地址10.0.1.130,而不是请求发送到的地址(假定这是多宿主系统)。通知消息9101并非由RFC 2408定义,但是它是Checkpoint专有的通知代码(因此系统可能是Firewall-1),并且程序将显示通知消息中包含的文本。

IKE退避模式部分的一些示例是:

IP Address      No.     Recv time               Delta Time
172.16.2.2      1       1042549209.247980       0.000000
172.16.2.2      2       1042549211.239254       1.991274
172.16.2.2      3       1042549213.241935       2.002681
172.16.2.2      4       1042549215.244731       2.002796
172.16.2.2      5       1042549217.247512       2.002781
172.16.2.2      6       1042549219.250254       2.002742
172.16.2.2      7       1042549221.253044       2.002790
172.16.2.2      8       1042549225.258551       4.005507
172.16.2.2      9       1042549229.264074       4.005523
172.16.2.2      10      1042549233.269605       4.005531
172.16.2.2      11      1042549237.275145       4.005540
172.16.2.2      12      1042549241.280654       4.005509
172.16.2.2      Implementation guess: Firewall-1 4.1/NG

IP Address      No.     Recv time               Delta Time
10.0.1.98        1       1042549209.426540       0.000000
10.0.1.98        2       1042549224.425435       14.998895
10.0.1.98        3       1042549239.422251       14.996816
10.0.1.98        Implementation guess: Cisco IOS / PIX

此处,主机172.16.2.2返回总共12个数据包,并且模式匹配“ Firewall-1 4.1 / NG”,主机10.0.1.98返回了3个与“ Cisco IOS / PIX”模式匹配的数据包。recv time列显示自该时间段以来以秒和微秒为单位接收数据包的绝对时间;增量时间显示数据包之间的经过时间,以秒和微秒为单位。

例子

以下示例将对单个主机172.16.2.2运行IKE检测。不会进行退避指纹识别,并且所有选项(超时,重试,变换集等)将是默认选项。

  • ike-scan 172.16.2.2

这将从文件“ hostlist.txt”中读取目标主机。

  • ike-scan --file=hostlist.txt

这将从标准输入中读取主机,并执行IKE检测和退避指纹识别。退避等待时间指定为20秒。

  • cat hostlist.txt | ike-scan --file=- --showbackoff=20

这将对172.16.0.0/16指定的网络中的所有主机(包括网络和广播地址)运行ike-scan。在这种情况下,这将导致总共扫描65536台主机-从172.16.0.0到172.16.255.255(含)。

  • ike-scan 172.16.0.0/16

这使用范围表示法来扫描从172.16.0.0到172.16.255.255(含)之间的总共65536台主机。

  • ike-scan 172.16.0.0-172.16.255.255

目前也没有去找有VPN服务的主机,等我流量操控中的文章更新到IPSec VPN隧道建立的时候,再用这个工具去扫描我的IPSec VPN,做实际演示,做扫描测试,现在还没搭建隧道的,日后再做补充。

 

推荐阅读