引言
扫描行为往往会触发大量安全告警,这些告警会干扰运营人员对“高危告警”的查找,这使得扫描识别成为安全运营的一大需求。而扫描行为看似简单,但是在告警数据中却体现出复杂的攻击模式,检测起来并不容易。《扫描识别》分为上、下两篇文章,上篇主要介绍扫描行为,包括类型、特征、检测所需考虑的因素、可能的干扰行为等,下篇依据扫描行为的特点,介绍基于安全告警数据的扫描检测方法。
一、为什么要进行扫描识别
在系列文章《数据透视篇》(https://mp.weixin.qq.com/s/v66-lEMwmeZYk7_TD4Yqdw)中我们提到,安全设备每天产生的告警数据在千万量级,虽然经过一定的过滤操作,可以过滤约90%的误报(详见《数据过滤篇》(https://mp.weixin.qq.com/s/epfrsqZnt7lRLIqs26U5_w)),剩余告警仍然在百万量级,仍然达不到“可运营”的需求。剩余告警中,包含大量的攻击行为,而由扫描行为触发的告警数量往往占绝大多数,因此对于扫描触发的告警进行有效识别、聚类可显著提升运营效率,减少“待研判”告警数量。
扫描识别不仅可以大幅减少“待研判”告警数量,更近一步,可以满足运营人员对于“攻击分类”需求,在互联网中,充斥着各种各样的攻击尝试,而只有少量的可能对系统造成影响的攻击才会引起运营人员的重视、采取应急措施,在这种背景下,就需要对攻击行为进行一定的分类,辅助运营人员对攻击的严重程度做出判断。
二、扫描面面观
本小节从类型和拓扑两方面对对扫描行为做较为全面的介绍,并且分析影响扫描检测精度的干扰行为。
2.1 按类型分类
扫描分为主机扫描和网络扫描,主机扫描是在主机上扫描一些本地信息,不产生网络流量,暂时忽略;网络扫描是基于网络的远程服务发现和系统脆弱点检测的技术,大致可分为:
- 端口扫描。目标是获取目的主机的端口开放情况(TCP、UDP),探测TCP端口开放技术包括:全连接扫描(TCP connect)、半连接扫描、FIN扫描、ACK扫描、NULL扫描、XMAS扫描、TCP窗口扫描(其中全连接扫描(TCP connect)、半连接扫描 为可靠的扫描方式,其他的不可靠);UDP扫描直接发送UDP包到对应端口即可;
- 服务扫描。扫描完开放端口后,一般还会进行服务扫描,检测端口上运行的服务类型和版本,基本原理是针对不同服务使用的协议类型,发送响应的应用层协议探测报文,检测返回报文,从而判断目标服务类型和版本,一般的,扫描器会构建特征库进行匹配。
- 操作系统扫描。由于各种各样的原因,如:对RFC理解不同,没有严格执行规范,些实现了一些可选特性,对TCP/IP协议做了改进等,不同操作系统对于TCP/IP协议的实现细节各不相同,以IPID的变化为例,Linux是随机变化的,早期window是递增的,某些打印设备或交换设备是固定不变的,不仅是IPID,FIN、TCP窗口、DF标志等等字段都可以作为判断依据,这些字段的组合也会被用于构建特征库集成到扫描工具当中;
- 弱口令扫描。在该过程中,攻击者使用字典中的字符串探测需要进行远程用户认证的网络服务(如SSH,TRLNET,FTP,SMB等)的用户名和密码。
- 漏洞扫描。指针对特定应用和服务查找目标网络中存在的漏洞,常见的漏洞扫描器包括nessus、OpenVAS等。
- Web漏洞扫描。Web服务是互联网中最重要、最复杂的服务,在安全领域广受重视,几乎所有的漏扫工具都会有专门的Web扫描模块。Web漏扫的目标是扫描web漏洞(可参考OWASP的安全漏洞列表),不过目前来讲很多漏洞的自动化发现还存在瓶颈(如:文件上传漏洞、CSRF等等),大多数Web漏扫一般只扫描已经披露的漏洞,或者扫描sql注入、XSS等比较容易发现的漏洞类型。
一般来讲,上述扫描行为都在在安全设备中留下大量的告警信息,将这些扫描行为找出、甚至细化到各种不同的子类别中,将提升安全运营的效率。
2.2 按拓扑分类
按照扫描源和被扫描对象的物理拓扑,扫描行为可以分为[1]:
- 一对一扫描。这种行为比较常见,典型案例就是渗透测试人员对目标系统进行信息收集,表现为同一IP对(sip,dip)在短时间内触发大量告警。并且根据扫描类型的不同,触发告警也有很大差异,如弱口令扫描,触发的告警类型单一,但是告警载荷中username和password字段会快速变化;而漏洞扫描,触发的告警类型众多,肉眼即可分辨。由于这种扫描会比较深入,有时候也称之为“纵向扫描”
- 一对多扫描。由于扫描资源、扫描时间是有限的,有些时候会对某些IP(如同一网段)做批量扫描,如:渗透人员对内网机器测试某个漏洞是否存在。这种行为表现为同一源IP对多个目的IP触发同一种或同几种类型的告警。这种扫描对每个机器发送的数据包都不是很多,有时候也称之为“横向扫描”或者“专项扫描”
- 多对一扫描。这种扫描也被称之为“分布式扫描”,是攻击者隐蔽扫描行为的一种手段。表现为大量的主机以相同的策略扫描一个网络或者主机。
2.3 干扰行为分析[2]
做扫描识别的目标是准确地发现恶意扫描,交于运营人员进行后续操作。这里就涉及到两点,第一是“恶意”,实际上,扫描只是搜集信息的一种行为,本身并不一定是恶意的,学术界和工业界往往会因某些原因(如完成科学研究、网络空间引擎(如shodan)、网络存档(Internet Archive)行为)发起扫描行为,这些扫描行为并不会对企业造成危害,理论上可以忽略;第二是“扫描”,扫描行为在告警上最直观的感受就是在短时间内触发大量告警,可是在网络空间内有大量的行为与之类似,造成干扰,需要设计更加精确的算法将这些行为与扫描行为分离。
在所有的干扰行为中,最明显的属于搜索引擎的爬虫行为[2]。搜索引擎会爬取目标网站的资源数据,当这些数据比较敏感时,就会触发告警。如图1所示,百度爬虫每天会触发大量安全设备的告警,且告警类型众多,图2为告警的payload样例,可以明显看出“User-Agent”字段中包含有“Baiduspider”的标志。实际上,除了百度,其他各大厂商(如google,bing)的爬虫也会触发大量告警。这些爬虫行为虽然与扫描行为类似,但严格意义上讲并不属于扫描行为,需要从算法上将两种行为区分开来。
三、 扫描检测需要考虑的告警字段
在第二节中我们提到扫描在类型上、拓扑上均有不同细分,为了覆盖尽可能多的扫描行为,我们需要考虑尽可能多的关联字段,同时,为了与一些干扰行为做区分,还需要考虑一些特殊字段。具体来说:
- 为了满足扫描行为在拓扑上的差异,需要选择“sip”,“dip”字段,从而观测是一对一、一对多、还是多对一的扫描类型
- 为了符合扫描的基本特(短时间内触发大量告警),需要选择“timestamp”字段,判断告警产生的密集程度。
- 为了检测不同类型的扫描,需要针对性的选择不同字段,如:对于漏洞扫描,该行为会触发大量不同类型的告警,“log_message”字段就需要考虑;对于弱口令扫描,需要提取“payload”字段中的用户名和密码信息,若payload为密文(如ssh登录),则从网络侧告警中无法检测;对于Web漏洞扫描,需要对考虑“q_body”,”r_body”字段,对请求体和响应体做一定的解析处理
- 为了过滤大量的干扰行为,如爬虫、正常用户登录、web渗透测试等。需要考虑许多其他字段:‘r_body’中的响应码,爬虫一般会扫描已经存在的资源,而扫描行为一般扫描攻击者自己想要的资源,大概率不存在,一般会触发“4XX”响应码;q_body中URL的文件类型,爬虫一般访问一些静态资源,如图片、视频类型(.jpg, .mp4等),而扫描一般访问可以进行渗透或者获取重要信息的资源,如 php文件、asp文件、mdb(数据库)文件等;
四、总结
本文对扫描行为做了整体介绍,包括特点、类型、拓扑等方面,并且分析了对扫描检测精度产生主要影响的干扰项,从而进一步介绍进行扫描检测需要考虑安全告警数据中的哪些字段。在考虑这些字段的基础上,设计精细的算法便可进行扫描检测了,关于扫描检测中使用的具体算法,将在下期文章中介绍,敬请期待。
参考文献
[1] Bhuyan M H, Bhattacharyya D K, Kalita J K. Surveying port scans and their detection methodologies[J]. The Computer Journal, 2011, 54(10): 1565-1581.
[2] Li X, Azad B A, Rahmati A, et al. Good bot, bad bot: Characterizing automated browsing activity[C]//2021 IEEE symposium on security and privacy (sp). IEEE, 2021: 1589-1605.
版权声明
本站“技术博客”所有内容的版权持有者为绿盟科技集团股份有限公司(“绿盟科技”)。作为分享技术资讯的平台,绿盟科技期待与广大用户互动交流,并欢迎在标明出处(绿盟科技-技术博客)及网址的情形下,全文转发。
上述情形之外的任何使用形式,均需提前向绿盟科技(010-68438880-5462)申请版权授权。如擅自使用,绿盟科技保留追责权利。同时,如因擅自使用博客内容引发法律纠纷,由使用者自行承担全部法律责任,与绿盟科技无关。