【安全扫描器原理】网络扫描算法
【安全扫描器原理】网络扫描算法
- 1.非顺序扫描
- 2.高速扫描 & 分布式扫描
- 3.服务扫描 & 指纹扫描
1.非顺序扫描
参考已有的扫描器,会发现几乎所有的扫描器都无一例外地使用增序扫描,即对所扫描的端口自小到大依次扫描,殊不知,这一效果可以被对方的防火墙或IDS作为判断正被扫描的特征。虽然通过多线程会使这一特征发生少量的变化,但从整体效果上看,仍然显示增序现象
改变增序特征并不难,一般有如下几种非顺序扫描算法:
1️⃣ 逆序扫描算法,在扫描的时候,采用从大到小的逆序扫描方式
2️⃣ 随机重排扫描算法,在新排的顺序中,为了避免漏掉或重复使用某一端口,可以采用互换位置的方式进行
3️⃣ 线程前加延时扫描算法
在 Windows 系统中,多个线程是并发执行的,调度是基于抢占式的。也就是说,线程之间会竞争 CPU 时间片。但线程的启动顺序往往是按照创建线程的顺序来的,尤其在短时间内创建多个线程时,它们的启动时间差可能非常小。如果不作处理,线程 1 总是比线程 2 先执行,那么它扫描的端口或地址也往往先于线程 2,可能导致扫描行为过于集中和有规律,易被防护系统识别
为了让多个线程的扫描顺序更加随机化、分散,防止被探测机制或防火墙认为是异常行为,可以采用如下策略:
Sleep(rand() % 5000); // 每个线程延迟 0~4999 毫秒
这样,每个线程在启动执行扫描逻辑之前,会暂停一段随机时间,避免线程之间形成固定顺序和节奏
2.高速扫描 & 分布式扫描
1、高速扫描
常见的高速扫描算法有多线程并行扫描技术、基于KB(Knowledge Base,知识库)技术、将扫描和判断分离的技术
KB技术是指把扫描过的主机信息存储起来,当下次扫描的时候,首先以上次的扫描结果作为参考,先对用户最关心的方面进行重新扫描,然后对其余部分进行扫描,这样既能提高扫描速度,又能有效降低占用的带宽。例如,某次扫描中,用户只关心原有“开”的端口是否仍处于开的状态,则只需要扫描上次记录中“开”状态的端口即可
2、分布式扫描
高速扫描主要依靠多线程实现,而分布式扫描则主要使用多台主机同时对目标主机进行扫描,参与的主机可以事先约定后主动加入,也可以被入侵后植入扫描程序。在实施扫描的时候,由主控主机向各参与的主机发送要扫描的主机IP地址和端口范围,然后所有主机同时向被测主机进行扫描
3.服务扫描 & 指纹扫描
1、服务扫描
端口扫描器只能扫描出端口的状态是否开放,而不会判断端口所对应的服务是否为该端口所具有的默认服务。服务扫描则是直接对服务进行扫描,并通过服务的存在与否,间接地判断端口是否处于“开”状态
2、指纹扫描
所谓指纹识别技术就是与目标主机建立连接,并发送某种请求,由于不同操作系统以及相同操作系统不同版本所返回的数据或格式不同,这样,根据返回的数据就可以判定目标主机的操作系统类型及版本
通常的指纹识别算法有几大类:
一类是通过操作系统提供的服务进行判断,各主流操作系统都内嵌一些服务器软件,常见的如FTP、Telnet、HTTP和DNS服务器,这些软件都会在欢迎信息、版权声明、命令回复中或多或少地透露自身的版本号,这也可以间接地反映出操作系统的类型和版本号。但这种方式也有不足之处,就是这些信息有些不准,甚至是错误的
另一类就是根据一些协议实现上各操作系统的细微差别进行判断,如通过TTL值进行操作系统识别、TCP FIN扫描等方法