两千多年前,《黄帝内经》提到 “上医治未病,中医治欲病,下医治已病”。云安全也是同理,未雨绸缪、防患于未然,这虽是老生常谈,但真正能具备这一能力的企业却不多,各种各样的安全事件仍在频频上演。
—— 01 ——
云安全拒绝 “事后诸葛亮”
2017 年 5 月,WannaCry 勒索病毒在全球爆发,百余个国家遭受大规模攻击,是史上波及范围最广的病毒之一。这次安全事件为各行各业敲响了警钟,但却并没有 “长鸣”。
图:近两年部分重大网络安全事件一览
可以看到,黑客入侵攻击是无处不在的。而没有防护的云计算环境相当于裸奔,只要任意一点遭受攻击,便有可能波及云上所有业务。在黑客威胁日益严重的情况下,云主机又该如何应对呢?☟
UHIDS 是 UCloud 为保护用户云主机安全而设计的一套基于主机的安全检测体系。该体系能够实时监控云主机的安全性,及时发现安全隐患,帮助用户了解云主机的安全状况并有针对性地进行加固。UHIDS 能在事前做好风险检测并加以告警,也就是我们所说的 “上医治未病”。
那么,UHIDS 又是如何 “治疗” 云安全 “未病” 的呢?
—— 02 ——
从入侵时间链看 “未病”
入侵受害者有两类人,一种是知道自己已经被入侵了,可此时亡羊补牢,为时晚矣;另一种是不知道自己被入侵了,等到大厦将倾时才发现。
其实,还可以存在第三类人:在系统受到危害前便已接收到警告,因而可以做到防患于未然。
如何才能做到在系统受到危害前便可有效检测出入侵方式呢?未知攻,焉知防,如下图,基于 Cyber-Kill-Chain 网络攻击杀伤链模型,我们首先还原出了一个简化的入侵攻击流程。
图:一个简化的入侵攻击流程
每个阶段的攻击详情如下:
① 侦察阶段:以扫描、信息收集为主,通常包含 IP 收集、域名收集、端口扫描等步骤,黑客进行这些步骤的目的是尽可能探测出攻击目标的资产信息,例如使用什么软件,什么版本等。② 攻击阶段:收集到足够的信息后,黑客会尝试使用一些手段来探测目标是否存在可利用的漏洞,这些尝试有的是手工精确实施,有的是使用大量攻击手段来进行遍历尝试。③ 分发阶段:主要以留后门、下载木马等为主,黑客会利用获取到的系统权限,在服务器上安装后门、Botnet、挖矿程序等。④ 安装维持阶段:主要以替换服务器关键配置为主,例如隐藏木马进程,对木马进程进行保护等。
UHIDS 的整体设计思路就是在每一个攻击步骤的关键点设置检测手段,这样设计的好处是避免单点失效,且尽可能的提前知晓黑客入侵手段从而采取相应的防御措施。此外,在越早的攻击环节阻止入侵,修复漏洞的成本和时间损耗也会越低。
—— 03 ——UHIDS
全流程入侵检测设计
根据入侵攻击链不同阶段的特点,UHIDS 云上入侵检测有三种思路,可提供对各类攻击的有效防御。
| 登录安全风险检测
登录安全是所有服务器最基础的安全内容,代表了服务器的入口。登录安全通常存在的安全风险包括:密码泄露、弱密码、暴力破解、不安全的配置、漏洞利用等。作为云上用户,我们遇到最常见造成入侵的风险往往是弱口令,弱口令带来的风险也是不容小觑的。
2015 年春运前夕爆发了 12306 数据泄露事件,乌云网发布漏洞报告称,大量 12306 用户数据在网络上疯狂传播。本次泄露事件被泄露的数据达 131653 条,弱密码在其中就占据了举足轻重的地位。
通常,针对弱口令的攻击方式包括异地登录和暴力破解。传统的检测方式一般按照非黑即白的策略去检测,即让用户添加一个白名单列表,只要不在白名单列表中的地点 / IP 均告警,然而该方法的缺点在于需要用户在维护白名单列表上投入大量人力,往往造成用户使用上的麻烦。
图:黑白名单策略示意
☛ 基于机器学习的检测机制
UHIDS 提出了一种基于机器学习的检测机制。基于机器学习模型强大的自学习及泛化能力,通过学习大量的数据,挖掘出潜在的登录风险为业务决策提供支撑。
机器学习都需要一个训练阶段,从数据收集到模型建立通常会面临诸多难题,下面是我们遇到的典型问题与解决思路。
- 样本类别不平衡
在入侵检测的场景中,由于黑名单数据(黑样本)的数量远少于白名单数据(白样本),因此会出现样本类别不平衡的问题,进而导致机器算法模型失效。
为解决该问题,我们通过 SMOTE 算法在相似样本中进行 feature 的随机选择并拼接出新的样本。SMOTE 算法的思想是合成新的少数类样本,合成的策略是对每个少数类样本 a,从它的最近邻中随机选一个样本 b,然后在 a、b 之间的连线上随机选一点作为新合成的少数类样本,如下图所示。
图:SMOTE 算法原理示意
- 模型过拟合问题
在模型建立后,后续的数据清洗和预处理、数据分析到合并稀疏特征、One-hot 编码处理离散型特征、随机森林选择特征、标准化、归一化、正则化也都会对模型的最终效果也会产生较大影响。因此还需研究如何根据登录 IP、登录时间、登录地点、登录方式等字段构建出不影响模型拟合问题的特征工程。
针对该问题,我们采用交叉验证的方法评估模型的预测性能,并通过网格搜索进行模型参数选择,在后期还会通过 bagging、stacking 等模型集成手段进一步提升效果。
最终,通过机器学习和业务经验的结合,UHIDS 的检测模型大大提高了异地登录的检测准确率,降低了误报率,提升了用户体验。
图:UHIDS 异地登录检测功能示意
| 应用安全风险检测
应用安全风险通常由三部分构成:
► 漏洞风险:程序是人为写的,只要是人为参与的就一定会有 Bug,这类漏洞被黑客分析出来后,加以利用就构成了入侵服务器的杀手锏。► 不安全的配置:这类问题通常是某种特性使用不当造成的,比如最常见的 Redis 空密码的问题。Redis 本身提供了一个配置,使得用户可以不使用密码就能登录 Redis,很多用户有意或无意间设置了这个选项,被黑客利用造成 Redis 被入侵,并以 Redis 为跳板又可以进一步入侵至整个服务器。► 设计问题:这类问题基本为开发人员的不规范操作导致的。例如开发人员一次性返回 API 所有字段,放松了对前端人员的管控,造成敏感字段数据泄露。再比如在公网开远程 debug 接口,导致被黑客攻击。这个问题的解决需要企业的代码规范与前端开发管理,提高人员安全意识。
针对应用安全漏洞风险,UHIDS 的应对方案如下:
① UHIDS 采集服务器上应用的特征信息,送往后端数据集群和漏洞库进行比对,并将比对结果进行入库,在 UHIDS 控制台上用户也可看到漏洞检测结果。如果发现系统存在漏洞风险,便会向用户发出告警,以此便可规避黑客的无差别漏洞扫描。
图:UHIDS 漏洞库匹配功能示意
② UHIDS 继续通过分析进程确定配置文件路径,再对配置文件内容按照标准语法树进行解析。解析后,使用预先定义好的通用数据模型将其一一填充送往服务端进行再次分析检测,一旦发现不安全的配置,便会向用户发出告警及修复建议。
| 木马安全风险检测
云计算场景中最常见的木马类型是僵尸网络 Botnet 和挖矿木马。近年来,随着区块链技术和数字货币的火爆,无数黑客及黑产组织盯上了云端充足的计算资源,据统计,今年挖矿木马已经超越 Botnet 成为造成用户损失最多的病毒。挖矿木马通常会占用用户全部服务器带宽和 CPU 资源,导致正常业务中断。
这类木马通常是利用成熟已公开的漏洞或者简单的安全问题进行全球范围内的无差别扫描,一般不会涉及到特别复杂的技术原理。预防此类木马,需要用户加强对应用安全中未修复的安全漏洞和不安全的配置的关注。
目前,UHIDS 针对木马查杀主要使用以下三种手段:
① 分析关键系统配置:在这里 UHIDS 更多关注的是深层次的系统基础配置,比如内核模块加载等问题,通过分析上述问题来确认用户是否被感染木马。② 清除残余顽固木马:由于 Linux 的特性,即使木马进程的可执行文件被删除了,其进程如果仍在运行,那么 Linux 中仍残存有顽固木马文件。对此,UHIDS 会还原出该文件进行分析,分析后送往大数据集群进行检测。一旦检测到某个进程和特征库中的木马相匹配,便会向用户发出告警。③ Webshell 漏洞检测:Webshell 作为 Web 入侵后留下的后门,在入侵过程中非常常见。UHIDS 首先对 Webserver 的进程进行分析,确定好 Web 目录后,进而解析 Web 目录中的文件。然后进行特征匹配,将匹配到的内容上传到大数据集群,进行打分模型判断,当分数权重超过一定值后就会告警。
图:UHIDS 控制台木马检测功能示意
—— 04 ——
预见云上安全风险
最后,从安全防御的角度来讲,安全防御是一个与黑客竞争的过程,只有抢占先机,在攻击者利用漏洞攻击前修复漏洞,才可以有效防止此类攻击。而抢占先机的前提就是关注云厂商发布的漏洞和事件预警,在第一时间做好防范工作。
以一个 ThinkPHP 漏洞为例。ThinkPHP 是一款国内流行的开源 PHP 框架,2018 年 12 月 9 日 ThinkPHP 官方发布一则安全更新,内容为修复了一个严重的远程代码执行漏洞,该漏洞可导致(php / 系统)代码执行,由于框架对控制器名没有进行足够的检测,最终会导致出现在没有开启强制路由的情况下可能的 Getshell 漏洞。
在官方预警发布后,UHIDS 也在第一时间更新漏洞特征库并开启入侵检测模式。此后,在该漏洞大规模爆发时,UHIDS 及时向用户发布了漏洞告警,免于遭受入侵攻击。
图:UHIDS 检测到 ThinkPHP 漏洞
结语
需要明确的是,UHIDS 入侵检测只是 UCloud 云安全防护体系中的一环。在实际业务中,还需针对具体需求明确具体防护手段,例如 DDoS 防护、Web 安全防护等。此外,在与黑客暗中较量的赛场上,最重要的还是安全意识的建立,产品可以提供外力的辅助,但内在安全的构建仍需企业巩固提高自身安全意识。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。