导读
由于篇幅所限,遂将此文分为上下两篇,上篇侧重讲原理,下篇会结合原理讲述若干实际案例。
概述
从 Google 的 BeyondCorp 计划说起。
Google 的这项行动计划名为 BeyondCorp ,目的是为了彻底打破内外网之别。其基本假设是——内部网络实际上跟互联网一样危险,原因有两点:
一旦内网边界被突破,***者就很容易访问到企业内部应用。
现在的企业越来越多采用移动和云技术,边界保护变得越来越难。所以干脆一视同仁,不外区分内外网,用一致的手段去对待。
本文不深入阐述 Google 的这个方案是如何做的,从这个案例只想说明一个问题,随着信息安全漏洞层出不穷,而且利用手法也日益精妙,内部网络也会面临极大的风险(除非是完全物理隔离的内网)。所以需要同时关注内部网络和边界网络的安全。
一、原理篇
有段时间经常看*一套的《今日说法》,其中有一个案件寻找破案线索的过程令我印象非常深刻。当时大概的案情是在一段没有监控的路上,有个女的被绑架了,这个时候寻找绑架作案的车辆就非常重要。
由于事发路段没有监控,寻找作案车辆就陷入了困难,后面*干警想出了一个非常简单的办法找到了作案的车辆。
在绑架的现场是没有监控的,但在路的两头是有监控的,干警用给每辆车计时的方法来查找作案的车辆。如果要作案,必须要有作案的时间,也就是说这辆车的通过时间要比其他车辆时间要长。这就是最简单的逻辑推理破案。
同理,网络安全事件的发生也会有类似的逻辑,很多时候通过直接的手段很难发现***行为,但如果用推理的方式,***一定会存在某些不同寻常的行为。就像刚才的案件,没有直接监控发现,但车辆通过的时间会比其他时间长。
如果我们拥有多样化的纵深防御能力,对进攻行为体系化防御,就带来了更多的防御点和监测点,这样就可以极大的降低安全的风险。
防御具有排兵布阵的的先发优势,在精心策划下,可以通过深度防御防止单点突破造成的***。我们以主机***为例来说明深度防御的架构。对于主机来说,主要有几个层面的内容,网络,进程,文件,操作命令,文件操作,系统事件大概几个方面。通过这几个方面的综合分析,就可以发现绝大多数的***行为。
我们从一些假设的***开始分析,大多数的***都是从弱点开始,包括一些漏洞、弱口令、0day 等等,尤其是 0day,大多数基于规则的安全防护都是失效的。
***的第一步是踩点,踩点的行为有多种多样,最常用的是扫描,包括主机扫描,端口扫描,漏洞扫描等,扫描的发现可以从两个方面来发现:
一是从网络上发现流量的异常行为,比如端口扫描就会发现一台主机在短时间内会有大量的不同端口请求。
一是从主机上可以发现,比如密码猜测扫描就会发现大量的登录失败的日志等。
当发现主机有漏洞的时候,下一步要做的事情是漏洞利用,漏洞的利用过程有时候很难被感知,比如缓冲区溢出等,但利用后的结果还是从系统中可以发现。比如如果有弱口令就会发现有异常登录行为,包括时间异常,登录源 IP 异常等等。
比如文件的上传行为,用户操作行为,大多数******成功后会到服务器上上传一些***等文件,会做一些操作行为,比如创建一些隐蔽账号等。
当一台主机被***控制后,往往这台机器机会沦为***的肉鸡,这个时候也会产生一些异常的行为,比如在网络上,会有非法外联,不管是***主动发起还是***被动监听,都会在网络上产生这些异常信息。
在进程层面,很多时候会产生异常进程,很多进程会通过伪装成系统进程名,但是只要留意依然能够被发现。
二、技术篇
对 Linux 系统而言,这些参数和指标都是比较容易的。下面是我经常用的一些脚本可以参考下。
1.进程
返回值示例:
说明:此脚本主要是根据ps aux的进程信息进行再次分析,进行格式化处理,排序,去重复,然后过滤掉一些系统进程。
2. 端口:
返回值示例:
说明:此脚本主要是根据ss -ntu获取ip端口信息,排除掉本机到本机的IP,然后进行格式化输出。
3. 操作命令审计:
说明:此脚本主要获取的是 history 命令中的内容,然后格式化处理后可以通过 syslog 发送出来,这样就可以实时的审计登录系统用户的命令行操作。
4. 系统事件:
正常在 /var/log/secure 文件中,比如登录成功失败等。
例如,登录会话:
Jan 1 11:29:45 localhost sshd[29778]: Accepted password for secisland from xx.xx.xx.72 port 14630 ssh2
Jan 1 11:29:45 localhost sshd[29778]: pam_unix(sshd:session): session opened for user secilog by (uid=0)
Jan 1 11:29:45 localhost sshd[29780]: subsystem request for sftp by user secilog
Jan 1 11:29:45 localhost sshd[29778]: pam_unix(sshd:session): session closed for user secilog
5. 上传下载:
目前 Linux sshd 会自带的 sftp 协议日志,通过配置可以记录 sftp 的日志。
配置:#vi /etc/ssh/sshd_config
修改Subsystem sftp /usr/libexec/openssh/sftp-server
如下Subsystem sftp internal-sftp -l INFO -f local0
去掉下面一行的注释#LogLevel INFO
修改 syslog 配置vi /etc/rsyslog.conf
增加一行
local0.* @ip
6. 文件修改:
对文件修改的监控稍微麻烦点,可以通过轮询文件修改时间,通过实现对文件进行打标签对比。效果比较好的方式是利用 Linux 的 Inotify 机制来监控文件操作。
Inotify 是一个 Linux 特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。多用在主机防篡改,网页防篡改中,比较重要所以系统也集成了此功能。
安装 SeciInofify,这个版本支持 syslog 发送,安装好后,运行:
nohup ./inotifywait -c -rme create,modify,delete,move,attrib,delete_self /home /etc &
这样就对指定的目录 /home /etc 进行监控,这两个目录中文件的任何变化都会发送到日志服务器中。
说明:开源的 Inotify 并没有日志输出功能,本人改写了此代码,增加了 logger 输出功能,这样就可以实时的把文件变化情况同 syslog 发送出来,代码下载位置:
https://github.com/zhulinu/SeciInotify
总结
如果在日常运维中能构建深度防御体系,实时的分析主机中的网络,进程,操作命令,文件操作,系统操作,上传下载行为,能把这些环节都记录加以分析的话,应该大多数的情况下能第一时间发现***行为,这样就降低了很大的风险。
但这些东西如果都手工来做,效率还是比较低的,可以借助日志收集分析工具来进行分析,比如 splunk,arcsight,secilog,elk 等。这样就会达到事半功倍的效果。
相关分享: