网盾科技IT教育,只培训技术精英
全国免费咨询电话: 15827351614
如何进行企业入侵检测?

黑客通过网络远程控制目标的笔记本电脑/手机/服务器/网络设备,进而随意地读取目标的隐私数据,又或者使用目标系统上的功能,包括但不限于使用手机的麦克风监听目标,使用摄像头偷窥监控目标,使用目标设备的计算能力挖矿,使用目标设备的网络能力发动DDoS攻击等等。亦或是破解了一个服务的密码,进去查看敏感资料、控制门禁/红绿灯。以上这些都属于经典的入侵场景。

我们可以给入侵下一个定义:就是黑客在未经授权的情况下,控制、使用我方资源(包括但不限于读写数据、执行命令、控制资源等)达到各种目的。从广义上讲,黑客利用SQL注入漏洞窃取数据,或者拿到了目标域名在ISP中的帐号密码,以篡改DNS指向一个黑页,又或者找到了目标的社交帐号,在微博/QQ/邮箱上,对虚拟资产进行非授权的控制,都属于入侵的范畴。

针对企业的入侵检测

企业入侵检测的范围,多数情况下比较狭义:一般特指黑客对PC、系统、服务器、网络(包括办公网、生产网)控制的行为。

黑客对PC、服务器等主机资产的控制,最常见的方法是通过Shell去执行指令,获得Shell的这个动作叫做GetShell。

比如通过Web服务的上传漏洞,拿到WebShell,或者利用RCE漏洞直接执行命令/代码(RCE环境变相的提供了一个Shell)。另外,通过某种方式先植入“木马后门”,后续直接利用木马集成的SHELL功能对目标远程控制,这个也比较典型。

因此,入侵检测可以重点关注GetShell这个动作,以及GetShell成功之后的恶意行为(为了扩大战果,黑客多半会利用Shell进行探测、翻找窃取、横向移动攻击其它内部目标,这些区别于好人的特性也可以作为重要的特征)。

有一些同行(包括商业产品),喜欢报告GetShell之前的一些“外部扫描、攻击探测和尝试行为”,并美其名曰“态势感知”,告诉企业有人正在“试图攻击”。在笔者看来,实战价值并不大。很多企业,基本上无时无刻都在遭受“不明身份”的攻击,知道了有人在“尝试”攻击,如果并不能有效地去行动,无法有效地对行动进行告警,除了耗费心力之外,并没有太大的实际价值。

当我们习惯“攻击”是常态之后,就会在这样的常态下去解决问题,可以使用什么加固策略,哪些可以实现常态化的运营,如果有什么策略无法常态化运营,比如需要很多人加班临时突击守着,那这个策略多半在不久之后就会逐渐消逝掉。跟我们做不做这个策略,并没有本质上的区别。

类似于SQL注入、XSS等一些不直接GetShell的Web攻击,暂时不在狭义的“入侵检测”考虑范围,建议可以划入“漏洞”、“威胁感知”等领域,另行再做探讨。当然,利用SQL注入、XSS等入口,进行了GetShell操作的,我们仍抓GetShell这个关键点,不必在乎漏洞入口在何处。

“入侵”和“内鬼”

与入侵接近的一种场景是“内鬼”。入侵本身是手段,GetShell只是起点,黑客GetShell的目标是为了之后对资源的控制和数据的窃取。而“内鬼”天然拥有合法的权限,可以合法接触敏感资产,但是基于工作以外的目的,他们对这些资源进行非法的处置,包括拷贝副本、转移外泄、篡改数据牟利等。

内鬼的行为不在“入侵检测”的范畴,一般从内部风险控制的视角进行管理和审计,比如职责分离、双人审计等。也有数据防泄密产品(DLP)对其进行辅助,这里不展开细说。

有时候,黑客知道员工A有权限接触目标资产,便定向攻击A,再利用A的权限把数据窃取走,也定性为“入侵”。毕竟A不是主观恶意的“内鬼”。如果不能在黑客攻击A的那一刻捕获,或者无法区分黑客控制的A窃取数据和正常员工A的访问数据,那这个入侵检测也是失败的。

入侵检测的本质

前文已经讲过,入侵就是黑客可以不经过我们的同意,来操作我们的资产,在手段上并没有任何的限制。那么如何找出入侵行为和合法正常行为的区别,将其跟合法行为进行分开,就是“入侵发现”。在算法模型上,这算是一个标记问题(入侵、非入侵)。

可惜的是,入侵这种动作的“黑”样本特别稀少,想通过大量的带标签的数据,有监督的训练入侵检测模型,找出入侵的规律比较难。因此,入侵检测策略开发人员,往往需要投入大量的时间,去提炼更精准的表达模型,或者花更多的精力去构造“类似入侵”的模拟数据。

一个经典的例子是,为了检测出WebShell,安全从业人员可以去GitHub上搜索一些公开的WebShell样本,数量大约不到1000个。而对于机器学习动辄百万级的训练需求,这些数据远远不够。况且GitHub上的这些样本集,从技术手法上来看,有单一技术手法生成的大量类似样本,也有一些对抗的手法样本缺失。因此,这样的训练,试图让AI去通过“大量的样本”掌握WebShell的特征并区分出它们,原则上不太可能完美地去实现。

此时,针对已知样本做技术分类,提炼更精准的表达模型,被称为传统的特征工程。而传统的特征工程往往被视为效率低下的重复劳动,但效果往往比较稳定,毕竟加一个技术特征就可以稳定发现一类WebShell。而构造大量的恶意样本,虽然有机器学习、AI等光环加持,但在实际环境中往往难以获得成功:自动生成的样本很难描述WebShell本来的含义,多半描述的是自动生成的算法特征。

另一个方面,入侵的区别是看行为本身是否“授权”,而授权与否本身是没有任何显著的区分特征的。因此,做入侵对抗的时候,如果能够通过某种加固,将合法的访问收敛到有限的通道,并且给该通道做出强有力的区分,也就能大大的降低入侵检测的成本。例如,对访问来源进行严格的认证,无论是自然人,还是程序API,都要求持有合法票据,而派发票据时,针对不同情况做多纬度的认证和授权,再用IAM针对这些票据记录和监控它们可以访问的范围,还能产生更底层的Log做异常访问模型感知。

这个全生命周期的风控模型,也是Google的BeyondCorp无边界网络得以实施的前提和基础。

因此,入侵检测的主要思路也就有2种:

根据黑特征进行模式匹配(例如WebShell关键字匹配)。

根据业务历史行为(生成基线模型),对入侵行为做异常对比(非白既黑),如果业务的历史行为不够收敛,就用加固的手段对其进行收敛,再挑出不合规的小众异常行为。

入侵检测与攻击向量

根据目标不同,可能暴露给黑客的攻击面会不同,黑客可能采用的入侵手法也就完全不同。比如,入侵我们的PC/笔记本电脑,还有入侵部署在机房/云上的服务器,攻击和防御的方法都有挺大的区别。

针对一个明确的“目标”,它被访问的渠道可能是有限集,被攻击的必经路径也有限。“攻击方法”+“目标的攻击面”的组合,被称为“攻击向量”。

因此,谈入侵检测模型效果时,需要先明确攻击向量,针对不同的攻击路径,采集对应的日志(数据),才可能做对应的检测模型。比如,基于SSH登录后的Shell命令数据集,是不能用于检测WebShell的行为。而基于网络流量采集的数据,也不可能感知黑客是否在SSH后的Shell环境中执行了什么命令。

基于此,如果有企业不提具体的场景,就说做好了APT感知模型,显然就是在“吹嘘”了。

所以,入侵检测得先把各类攻击向量罗列出来,每一个细分场景分别采集数据(HIDS+NIDS+WAF+RASP+应用层日志+系统日志+PC……),再结合公司的实际数据特性,作出适应公司实际情况的对应检测模型。不同公司的技术栈、数据规模、暴露的攻击面,都会对模型产生重大的影响。比如很多安全工作者特别擅长PHP下的WebShell检测,但是到了一个Java系的公司就不好使了。