六面防御:教你如何打造一套深度防护体系

做者简介

朱林
资深开发人员,《Elasticsearch技术解析与实战》做者。有16年开发经验,11年安全产品开发经验,对安全技术、日志分析有较深的研究。于2013年创立南京赛克蓝德网络科技有限公司,公司专一于安全产品的开发,目前主要开发的产品是赛克蓝德日志分析软件。git

导读github

因为篇幅所限,遂将此文分为上下两篇,上篇侧重讲原理,下篇会结合原理讲述若干实际案例。安全

概述

从 Google 的 BeyondCorp 计划提及。服务器

Google 的这项行动计划名为 BeyondCorp ,目的是为了完全打破内外网之别。其基本假设是——内部网络实际上跟互联网同样危险,缘由有两点:网络

  1. 一旦内网边界被突破,***者就很容易访问到企业内部应用。session

  2. 如今的企业愈来愈多采用移动和云技术,边界保护变得愈来愈难。因此干脆一视同仁,不外区份内外网,用一致的手段去对待。架构

本文不深刻阐述 Google 的这个方案是如何作的,从这个案例只想说明一个问题,随着信息安全漏洞层出不穷,并且利用手法也日益精妙,内部网络也会面临极大的风险(除非是彻底物理隔离的内网)。因此须要同时关注内部网络和边界网络的安全。app

1、原理篇

有段时间常常看中央一套的《今日说法》,其中有一个案件寻找破案线索的过程令我印象很是深入。当时大概的案情是在一段没有监控的路上,有个女的被绑架了,这个时候寻找绑架做案的车辆就很是重要。运维

因为事发路段没有监控,寻找做案车辆就陷入了困难,后面公安干警想出了一个很是简单的办法找到了做案的车辆。ssh

在绑架的现场是没有监控的,但在路的两头是有监控的,干警用给每辆车计时的方法来查找做案的车辆。若是要做案,必需要有做案的时间,也就是说这辆车的经过时间要比其余车辆时间要长。这就是最简单的逻辑推理破案。

同理,网络安全事件的发生也会有相似的逻辑,不少时候经过直接的手段很难发现***行为,但若是用推理的方式,***必定会存在某些不一样寻常的行为。就像刚才的案件,没有直接监控发现,但车辆经过的时间会比其余时间长。

若是咱们拥有多样化的纵深防护能力,对进攻行为体系化防护,就带来了更多的防护点和监测点,这样就能够极大的下降安全的风险。

60c0a0d297ca16c70440c64569e296df.jpeg

防护具备排兵布阵的的先发优点,在精心策划下,能够经过深度防护防止单点突破形成的***。咱们以主机***为例来讲明深度防护的架构。对于主机来讲,主要有几个层面的内容,网络,进程,文件,操做命令,文件操做,系统事件大概几个方面。经过这几个方面的综合分析,就能够发现绝大多数的***行为。

c2c1f62b1dbb37ee721009c7e550a033.jpeg

咱们从一些假设的***开始分析,大多数的***都是从弱点开始,包括一些漏洞、弱口令、0day 等等,由其是 0day,大多数基于规则的安全防御都是失效的。

***的第一步是踩点,踩点的行为有多种多样,最经常使用的是扫描,包括主机扫描,端口扫描,漏洞扫描等,扫描的发现能够从两个方面来发现:

  1. 一是从网络上发现流量的异常行为,好比端口扫描就会发现一台主机在短期内容会有大量的不一样端口请求。

  2. 一是从主机上能够发现,好比密码猜想扫描就会发现大量的登陆失败的日志等。

当发现主机有漏洞的时候,下一步要作的事情是漏洞利用,漏洞的利用过程有时候很难被感知,好比缓冲区溢出等,但利用后的结果仍是从系统中能够发现。好比若是有弱口令就会发现有异常登陆行为,包括时间异常,登陆源 IP 异常等等。

好比文件的上传行为,用户操做行为,大多数******成功后会到服务器上上传一些***等文件,会作一些操做行为,好比建立一些隐蔽帐号等。

当一台主机被***控制后,每每这台机器机会沦为***的肉鸡,这个时候也会产生一些异常的行为,好比在网络上,会有非法外联,不论是***主动发起仍是***被动监听,都会在网络上产生这些异常信息。

在进程层面,不少时候会产生异常进程,不少进程会经过假装成系统进程名,可是只要留意依然可以被发现。

2、技术篇

对 Linux 系统而言,这些参数和指标都是比较容易的。下面是我常常用的一些脚本能够参考下。

1. 进程:adbda06ed0c88b6bf7e36acc13c30455.jpeg返回值示例:

521693236e963f6e65002d58969d69f7.jpeg

说明:此脚本主要是根据ps aux的进程信息进行再次分析,进行格式化处理,排序,去重复,而后过滤掉一些系统进程。

2. 端口:

d552d86ed0f0c1101a341424e494222f.jpeg
返回值示例:

4fb03632c264fde73f4a4aeb296b22de.jpeg

说明:此脚本主要是根据ss -ntu获取ip端口信息,排除掉本机到本机的IP,而后进行格式化输出。

3. 操做命令审计:

8e76572a1c13badf3e8f2e23b15fe202.jpeg

说明:此脚本主要获取的是 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 等。这样就会达到事半功倍的效果。