有的时候,网络管理员可以通过配置一个内部网络来实现单一主机与其他主机在不同层次上的通信。一个单一的互联网协议(IP)地址可能会代表很多在内部网络上已经打开了端口的设备。虽然有一些基本的方式去检测它们,令人惊讶的是当今流行的各种工具也会在他们各自输出信息的网络层上发现一些相关的信息。这篇文章将会指导读者通过检测请求信息的普通行为的Time-To-Live(TTL)值来检测端口转发和周边远程主机的入侵响应。
了解TTL响应
主机每一次将数据发送给其他主机时,数据以数据包的形式发送,数据包从一个主机沿着一系列的路由器、交换机和其他主机,直到到达目的主机。数据包中有TTL的信息头并且指定了数据包到达目的主机时经过的路由器跳数。数据包每经过一个路由器,数据包头部的TTL值将会减1。
TTL能够揭示传输路线的变化
传输路线的改变经常会发生在互联网服务提供商与一级主干网络提供商的通信时。当这种变化发生时,一个主机上传输路线改变的每一个响应都会立刻改变TTL的值。一次传输路线的改变可能是因为正常的网络扩展,也可能是一个网络设备限制了某个数据源到蜜罐的传输,或者是为了负载均衡而进行目的端口重定向等活动。
TTL的扫描响应
在端口扫描的过程中,为了产生一个响应,SYN数据包会从不同的端口发送到目的主机,我们便可得知哪一个端口对服务进行了侦听。所有由同一个扫描器(除非扫描器进行了特殊的设定)发送的数据包将会有相同的初始TTL值,有的时候IP地址在被扫描时产生不同的TTL响应值。TTL值的不同表明在公共IP地址扫描的背后还有额外的网络层在工作。如果TTL的值越高,则表示运行服务的主机离执行扫描的主机越近;若TTL的越低,则表示运行服务的主机离执行扫描的主机越远。
换句话说,如果主机的TTL响应值以47为基准,但是一个传输过来的TTL响应值为45,则这个端口传递过来的响应明显是经过了转发的。另一方面,如果从相同的主机接收到的一个数据包中TTL的响应值为48,它很有可能是从扫描主机和目的主机设备中传输过来的原始数据包。
TTL可能会骗过防火墙和入侵响应
端口扫描并不是惟一一个有利于TTL异常检测的方法。处于攻击者和他们的目标主机之间的防火墙和入侵防御系统(IPS)同样可以以RST数据包的形式产生响应值,并终止那些被认为对系统有害的链接。因为在这些处于攻击者和目标主机之间装置中,攻击者通过这些端口所接收到的RST数据包将会带有一个高于目标主机所接收的RST数据包的TTL值。
为了观察TTL异常检测的信息,我们的团队将ttl_mon.py聚集到了github中。它会在一直运行,直到用户使用control+C组合键退出,并且会将主机在运行期间的详细信息输出到屏幕上。当各个端口的TTL响应值在运行期间改变时,一个关于传输路径修改的红色通知将会在屏幕上输出。它能够检测到所有主机在被分配的接口上或者在一个单一目标主机中发送的数据。
附属
ttl_mon.py依赖python2的dpkt和pcapy包。它们可以使用python pip模块进行安装,例如:
python2 -mpip install pcapy dpkt
用法
用法:ttl_mon.py [options]
选项:
-h, --help
显示帮助信息和退出
-i INTERFACE, --interface=INTERFACE
监听的接口
-l LOCAL, --local=LOCAL
需要忽略的本地地址
-t TARGET, --target=TARGET
仅记录指定IP的改变
(责任编辑:安博涛)