网络信息探测技巧

1、快速建立TCP扫描的方法
    我们都有一个经验,就是要网卡工作到高速率上不容易,100M的网卡流量到60M时就差不多了。但是很多做测试仪器的,如Smartbit在测试时可以到物理带宽,看了下面的小工具你也能做到了:
先了解一些TCP的基础,TCP的会话过程(三次握手):
n         A发送SYN到B,生成ISN-A(A收到包编号基数),ISN为防止连接中数据接收顺序差错的编号,初始值在建立连接时随机生成,以后开始递增。ISN为通讯的双向ISN-A与ISN-B,各自记录自己的包顺序
n         B回送SYN/ACK到A,生成ISN-B(B收到包编号基数),AN=ISN-A+1
n         A发送SYN到B,ISN-A+1,AN=ISN-B+1
在TCP包头序列号SN字段,存放在对话初协商随机的32位编号ISN
主机在发送SYN时,要在会话内存中保留ISN与预期的AN,等待回送的SYN/ACK,并与收到的包中的作对比,一致的才认可,防止其他“冒充”的数据包,若等待时间超出,则重发几次SYN,直到有回应,或返回一个超时的错误。一般在扫描过程中,多数连接是没有回应的,但都要等待到超时才结束,因为同时建立的会话多,计算机消耗资源多,尤其是内存,所以多数的扫描工具速度较慢。
逆向SYN cookie技术:在发送SYN时,使用非随机的ISN,利用源与目的IP、源与目的端口,与一个作为“密钥”的种子(共160位)(该种子是扫描工具设置的),通过单向散列函数计算出一个32位的ISN,Scanrand工具采用的是SHA-1,160位输出截取到32位。这样发送SYN时,就不记录ISN等信息,发送进程只管尽快发送。当目标回应时,监听进程把接收数据包的AN减1,然后利用数据包的IP与端口信息,与“种子”一起进行同样的散列算法处理,的出发送时的ISN,如果与收到的数据相匹配,监听进程就可以判定是自己发送的,并且可以知道目的的IP与端口。
由于发送无需等待回应,也不用内存占用,所以扫描发送的速度只受网卡的物理限制。
Scanrand的TCP扫描的返回值:
2        UP:打开SYN/ACK
2        DOWN:关闭RST/ACK
2        un**:ICMP type 3目的不可达(RFC792):un01主机不可达,un03端口不可达
2        ***:ICMP type 11服务超时
    另外,逆向SYN cookie技术把发送与接收过程的联系分开,因为之间的联系“没有”了,这样扫描工具可以分别起两个进程,一个只管发,另一个只管收,大大提供扫描的效率。
 
2、 躲避IDS监测的探测扫描技巧
入侵的第一步是收集信息阶段,也就是收集目标是漏洞点,俗称“踩点”。踩点的主要是工作为几个方面:
?         确定目标系统的操作系统类型与版本
?         开启服务的端口
?         开启服务的版本信息
原理:探测扫描的真正风险在于向目标发送太多的数据包暴露攻击者的存在,这些通讯中常包含一些构成可识别签名的数据,其中一些被有意构建为畸形的数据包,以便得到可辨识的错误信息回复。很多入侵检测系统(IDS)把这些签名作为“特征”进行查找,从而识别攻击的扫描行为。尤其是纯粹的TCP方式。
Xprobe2工具混合了ICMP、TCP与UDP多中方式,并且不发送畸形数据包,探测行为不给网络带来“噪音”,所以能躲避很多IDS的检测。同时利用IDS一般喜欢有产生大量日志或假报警的习惯,用一些表面上看是偶尔可疑的事件,尤其是在大数量事件的背景下,很容易逃脱安全管理人员的眼睛。
探测操作系统类型:
例子1: ICMP的PING是网络中常见的连接查询方式,但很多“指纹”细节可以带来探测中需要的重要信息。正常情况下发送ICMP Echo Request,目标机器一般回复为Echo Reply。工具Xprobe2在发送Request时,把ICMP包的Code字段设为123(自己定义的),而不是0。有意思的是不同操作系统的目标机器回复是不同的,Microsoft Windows会用Code 0回复,其他OS一般采用与请求相同的Code值回复。
探测服务端口是否带开:
例子2:正常情况下,探测服务端口会对常见的端口或全部端口直接发送连接建立请求包,密度大,排列整齐,很容易被IDS发现。为了在探测目标端口是否打开时躲避IDS的监控,工具Xprobe2采用了一个“第三方模拟”的技术。Xprobe2先自己给本地DNS发个某地址DNS请求,得到正确的返回包。然后Xpeobe2把这个返回包改造为自己是DNS服务器,给目标机器的返回包,发送DNS端口(53),查询端口就是目标中要探测的端口,如UDP65500。目标机器收到这个包很意外,因为自己没有发过请求,所以就给了一个正常的回复,如端口不可达,而这正式Xprobe2所需要的,回复中表明该端口关闭。因为DNS包不会引起IDS的注意,从而掩盖了探测的行为。
探测服务端口上的服务类型信息:
该需求对常见服务是不必要的,但对于网络管理人员采用了很多“安全”措施后,也就变得很需要了。“不公开,即安全”是一种传统的安全理念,所以网管人员采用一些非标准端口运行通常的网络服务,让探测者失去“目标”,保证安全。
作为扫描者需要探知端口上的服务详细信息,作为网络管理员需要探知网络内用户安装了那些公司不允许的“服务”。
Amap( www.thc.org)是探测端口服务的工具。主要的原理是通过开启多个连接,抓取该端口服务的“特征”,从而判断服务的类型。如Telnet到到端口,即可提示服务类型与版本信息等。但是服务“特征”不明显或被修改时,这种方式就难以奏效。Amap通过模拟一些查询或会话建立的初始请求,尝试与目标建立连接,从而探测服务的类型与版本。如SSL服务需要握手的三个步骤:1、Client_hello。2、Server_hello。3、Server-to-client certificate transfer
当然,该工具积累了一个庞大的常见应用模拟通讯数据库。
Amap也是网管人员的好工具,可用来发现用户安装的、未经授权的服务,尤其是对经常变化端口号,隐藏公司不允许的服务的情况,如P2P、VNC远程桌面等。
 
3、 不可小看的ARP协议
ARP是通讯中匹配IP地址与MAC地址的协议,是TCP/IP通讯的基础,当主机要给目标发送数据时,首先通过DNS协议把www地址(应用层地址)翻译成目标IP地址(网络层地址),再通过ARP协议把IP地址影射为目标的MAC地址(数据链路层地址)(可能是网关而非真正的目标计算机),数据才可以发送。在Hub时代,大家通讯都是可监听到的,MAC地址的广播与更新相对简单,但到了Switch时代,冲突域“没有了”,其他两人的通讯也不再是你能随意获得的,所以ARP也有了新的发展。
?         代理ARP(proxy ARP):在很早的时候,目标主机与源主机不在一个网段时,ARP的广播会网关设备截止而抛弃,目标主机就听不到,当然就无法回答。所以网络中有一个“管理者”负责把不是本网段的ARP请求统一管理,代理这些请求,让源主机先发送给自己,再由自己发送给目标机器,这就是ARP代理。后来主机内都设置了默认网关地址,当主机发现目标主机不在本网段时,直接发送给设备的网关。所以直接请求网关的MAC地址就可以了。虽然ARP代理已经很少使用,但想侦听别人通讯的人也可以冒充网关,从而代理你的业务。
?         查询ARP(Unsolicited ARP,也称未经同意的ARP):在主机开机时,初始化TCP/IP栈,并向准备使用的IP地址发送一个ARP请求,查看网络中是否有地址冲突。当请求没有收到答复时,可以放心使用该IP地址。当然TCP/IP规定在发送方不知道目标的MAC时,都要先发送查询ARP,等待目标者答复,没有目标MAC是没有办法组织发送包的。
?         免费ARP(Unicast ARP,Gratuitous ARP,也称无故ARP):因为网络设备(交换机)中的FDB转发表(MAC地址对应端口)和主机ARP缓存表(IP地址对应MAC地址)都是动态学习刷新的,一段时间没有数据包就会“老化”而删除,所以为了刷新这些会“学习”的表格,直接发送ARP应答,由于是自己主动发送的,并且此ARP应答不是针对某个地址,而是针对本网段的广播,所以称免费ARP。一种情况是主机在开机时会发送免费ARP,目的是告诉网络“我来了”,同时通知交换机在对应的端口上记录自己的MAC。另一种情况是有些主机与网络设备为了保持自己在别人缓存中不被老化,定期发送的刷新提示,这样当有人给自己发数据时,就不用因为地址老化而发送ARP请求再重新查找了。Cisco的网络设备就有定期发免费ARP的习惯。
   
ARP是MAC地址学习的工具,所以免费ARP一般很常见,安全设备会忽视他是存在,从而成为攻击者监听的工具。
ARP下毒攻击原理:攻击方的目标是成为通讯双方的ARP代理,也称作中间人攻击,具体是通过免费ARP,快速刷新通讯双方的主机ARP缓存,让双方都认为对方的IP地址对应的MAC地址就是中间人的,从而在他们双方通讯时把数据“误送”给了中间人,再由中间人代理给对方。
中间人攻击若模拟自己是网关,则可以代理网段上所有主机对外的通讯,所以网关设备对网络上的冒充自己IP的行为一向非常重视。

你可能感兴趣的:(网络协议编程-攻击和网络驱动)