大型互联网公司如何防止黑客入侵(上)

如何知道自己所在的企业是否被入侵了?
是没人来“黑”,
还是因自身感知能力不足,
暂时还无法发现?

其实,入侵检测是每一个大型互联网企业都要面对的严峻挑战。价值越高的公司,面临入侵的威胁也越大,即便是 Yahoo 这样的互联网鼻祖,在落幕(被收购)时仍遭遇全量数据失窃的事情。

安全无小事,一旦互联网公司被成功“入侵”,其后果将不堪想象。

基于“攻防对抗”的考量,本文不会提及具体的入侵检测模型、算法和策略,那些希望直接照搬“入侵策略”的同学可能会感到失望。

但是我们会将一部分运营思路分享出来,请各位同行指点,如能对后来者起到帮助的作用,那就更好了,也欢迎大家跟我们交流探讨。

入侵的定义

典型的入侵场景:黑客在很远的地方,通过网络远程控制目标的笔记本电脑/手机/服务器/网络设备,进而随意地读取目标的隐私数据,又或者使用目标系统上的功能,包括但不限于使用手机的麦克风监听目标,使用摄像头偷窥监控目标,使用目标设备的计算能力挖矿,使用目标设备的网络能力发动 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 无边界网络得以实施的前提和基础。

因此,入侵检测的主要思路也就有两种:
1、根据黑特征进行模式匹配(例如 WebShell 关键字匹配)。
2、根据业务历史行为(生成基线模型),对入侵行为做异常对比(非白即黑),如果业务的历史行为不够收敛,就用加固的手段对其进行收敛,再挑出不合规的小众异常行为。

入侵检测与攻击向量

根据目标不同,可能暴露给黑客的攻击面会不同,黑客可能采用的入侵手法也就完全不同。

比如,入侵我们的 PC/笔记本电脑,还有入侵部署在机房/云上的服务器,攻击和防御的方法都有挺大的区别。

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

因此,谈入侵检测模型效果时,需要先明确攻击向量,针对不同的攻击路径,采集对应的日志(数据),才可能做对应的检测模型。

比如,基于 SSH 登录后的 Shell 命令数据集,是不能用于检测 WebShell 的行为。

而基于网络流量采集的数据,也不可能感知黑客是否在 SSH 后的 Shell 环境中执行了什么命令。

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

所以,入侵检测得先把各类攻击向量罗列出来,对每一个细分场景分别采集数据(HIDS+NIDS+WAF+RASP+应用层日志+系统日志+PC……),再结合公司的实际数据特性,作出适应公司实际情况的对应检测模型。

不同公司的技术栈、数据规模、暴露的攻击面,都会对模型产生重大的影响。

比如很多安全工作者特别擅长 PHP 下的 WebShell 检测,但是到了一个 Java 系的公司……

常见的入侵手法与应对

如果对黑客的常见入侵手法理解不足,就很难有的放矢,有时候甚至会陷入“政治正确”的陷阱里。比如渗透测试团队说,我们做了 A 动作,你们竟然没有发现,所以你们不行。

而实际情况是,该场景可能不是一个完备的入侵链条,就算不发现该动作,对入侵检测效果可能也没有什么影响。

每一个攻击向量对公司造成的危害,发生的概率如何进行排序,解决它耗费的成本和带来的收益如何,都需要有专业经验来做支撑与决策。

现在简单介绍一下,黑客入侵教程里的经典流程(完整过程可以参考杀伤链模型):

入侵一个目标之前,黑客对该目标可能还不够了解,所以第一件事往往是“踩点”,也就是搜集信息,加深了解。

比如,黑客需要知道,目标有哪些资产(域名、IP、服务),它们各自的状态如何,是否存在已知的漏洞,管理它们的人有谁(以及如何合法的管理的),存在哪些已知的泄漏信息(比如社工库里的密码等)……

一旦踩点完成,熟练的黑客就会针对各种资产的特性,酝酿和逐个验证“攻击向量”的可行性,下文列举了常见的攻击方式和防御建议。

高危服务入侵

所有的公共服务都是“高危服务”,因为该协议或者实现该协议的开源组件,可能存在已知的攻击方法(高级的攻击者甚至拥有对应的 0day)。

只要你的价值足够高,黑客有足够的动力和资源去挖掘,那么当你把高危服务开启到互联网,面向所有人都打开的那一刻,就相当于为黑客打开了“大门”。

比如 SSH、RDP 这些运维管理相关的服务,是设计给管理员用的,只要知道密码/秘钥,任何人都能登录到服务器端,进而完成入侵。

而黑客可能通过猜解密码(结合社工库的信息泄露、网盘检索或者暴力破解),获得凭据。

事实上这类攻击由于过于常见,黑客早就做成了全自动化的全互联网扫描的蠕虫类工具,云上购买的一个主机如果设置了一个弱口令,往往在几分钟内就会感染蠕虫病毒,就是因为这类自动化的攻击者实在是太多了。

或许,你的密码设置得非常强壮,但是这并不是你可以把该服务继续暴露在互联网的理由,我们应该把这些端口限制好,只允许自己的 IP(或者内部的堡垒主机)访问,彻底断掉黑客通过它入侵我们的可能。

与此类似的,MySQL、Redis、FTP、SMTP、MSSQL、Rsync 等等,凡是自己用来管理服务器或者数据库、文件的服务,都不应该针对互联网无限制的开放。

否则,蠕虫化的攻击工具会在短短几分钟内攻破我们的服务,甚至直接加密我们的数据,甚至要求我们支付比特币,进行敲诈勒索。

还有一些高危服务存在 RCE 漏洞(远程命令执行),只要端口开放,黑客就能利用现成的 exp,直接 GetShell,完成入侵。

防御建议: 针对每一个高危服务做入侵检测的成本较高,因为高危服务的具体所指非常的多,不一定存在通用的特征。

所以,通过加固方式,收敛攻击入口性价比更高。禁止所有高危端口对互联网开放可能,这样能够减少 90% 以上的入侵概率。

Web 入侵

随着高危端口的加固,黑客知识库里的攻击手法很多都会失效了。但是 Web 服务是现代互联网公司的主要服务形式,不可能都关掉。

于是,基于 PHP、Java、ASP、ASP.NET、Node、C 写的 CGI 等等动态的 Web 服务漏洞,就变成了黑客入侵的最主要入口。

比如,利用上传功能直接上传一个 WebShell,利用文件包含功能,直接引用执行一个远程的 WebShell(或者代码),然后利用代码执行的功能,直接当作 Shell 的入口执行任意命令,解析一些图片、视频的服务,上传一个恶意的样本,触发解析库的漏洞……

Web 服务下的应用安全是一个专门的领域(道哥还专门写了本《白帽子讲 Web 安全》),具体的攻防场景和对抗已经发展得非常成熟了。

当然,由于它们都是由 Web 服务做为入口,所以入侵行为也会存在某种意义上的共性。相对而言,我们比较容易能够找到黑客 GetShell 和正常业务行为的一些区别。

针对 Web 服务的入侵痕迹检测,可以考虑采集 WAF 日志、Access Log、Auditd 记录的系统调用,或者 Shell 指令,以及网络层面 Response 相关的数据,提炼出被攻击成功的特征,建议我们将主要的精力放在这些方面。

0day 入侵

通过泄漏的工具包来看,早些年 NSA 是拥有直接攻击 Apache、Nginx 这些服务的 0day 武器的。

这意味着对手很可能完全不用在乎我们的代码和服务写成什么样,拿 0day 一打,神不知鬼不觉就 GetShell 了。

但是对于入侵检测而言,这并不可怕:因为无论对手利用什么漏洞当入口,它所使用的 Shellcode 和之后的行为本身依然有共性。

Apache 存在 0day 漏洞被攻击,还是一个 PHP 页面存在低级的代码漏洞被利用,从入侵的行为上来看,说不定是完全一样的,入侵检测模型还可以通用。

所以,把精力聚焦在有黑客 GetShell 入口和之后的行为上,可能比关注漏洞入口更有价值。当然,具体的漏洞利用还是要实际跟进,然后验证其行为是否符合预期。

办公终端入侵

绝大多数 APT(advanced persistent thread高级持续性威胁) 报告里,黑客是先对人(办公终端)下手,比如发个邮件,哄骗我们打开后,控制我们的 PC,再进行长期的观察/翻阅,拿到我们的合法凭据后,再到内网漫游。

所以这些报告,多数集中在描述黑客用的木马行为以及家族代码相似度上。而反观APT 的产品、解决方案,多数也是在办公终端的系统调用层面,用类似的方法,检验“免杀木马”的行为。

因此,EDR 类的产品+邮件安全网关+办公网出口的行为审计+APT 产品的沙箱等,联合起来,可以采集到对应的数据,并作出相似的入侵检测感知模型。

而最重要的一点,是黑客喜欢关注内部的重要基础设施,包括但不限于 AD 域控、邮件服务器、密码管理系统、权限管理系统等,一旦拿下,就相当于成为了内网的“上帝”,可以为所欲为。

所以对公司来说,重要基础设施要有针对性的攻防加固讨论,微软针对 AD 的攻防甚至还发过专门的加固白皮书。

大型的互联网公司,本身就处在互联网中。网络安全事件十分复杂,网络安全问题是一件不可松懈的事情,不要被“狼来了”的信息所困扰从而放松警惕,安全无小事,“黑客”一旦攻击入侵,接下来面对的结果损失是无法预计的!

猜你喜欢

转载自blog.csdn.net/weixin_44489066/article/details/88644105