Author: sm0nk@猎户攻防实验室

行文仓促,不足之处,还望大牛指正。

1 事件分类

常见的安全事件:

  1. Web入侵:挂马、篡改、Webshell
  2. 系统入侵:系统异常、RDP爆破、SSH爆破、主机漏洞
  3. 病毒木马:远控、后门、勒索软件
  4. 信息泄漏:脱裤、数据库登录(弱口令)
  5. 网络流量:频繁发包、批量请求、DDOS攻击

2 排查思路

一个常规的入侵事件后的系统排查思路:

  1. 文件分析

    ​a) 文件日期、新增文件、可疑/异常文件、最近使用文件、浏览器下载文件

    ​b) Webshell 排查与分析

    ​c) 核心应用关联目录文件分析

  2. 进程分析

    ​a) 当前活动进程 & 远程连接

    ​b) 启动进程&计划任务

    ​c) 进程工具分析

    ​ i. Windows:Pchunter

    ​ ii. Linux: Chkrootkit&Rkhunter

  3. 系统信息

    ​a) 环境变量

    ​b) 帐号信息

    ​c) History

    ​d) 系统配置文件

  4. 日志分析

    ​a) 操作系统日志

    ​ i. Windows: 事件查看器(eventvwr)

    ​ ii. Linux: /var/log/

    ​b) 应用日志分析

    ​ i. Access.log

    ​ ii. Error.log

3 分析排查

3.1 Linux系列分析排查

3.1.1 文件分析

  1. 敏感目录的文件分析(类/tmp目录,命令目录/usr/bin /usr/sbin)

    ​例如:

    ​查看tmp目录下的文件: ls –alt /tmp/

    ​查看开机启动项内容:ls -alt /etc/init.d/

    ​查看指定目录下文件时间的排序:ls -alt | head -n 10

    ​针对可疑文件可以使用stat进行创建修改时间、访问时间的详细查看,若修改时间距离事件日期接近,有线性关联,说明可能被篡改或者其他。

  1. 新增文件分析

    ​例如要查找24小时内被修改的JSP文件: find ./ -mtime 0 -name "*.jsp"

    ​(最后一次修改发生在距离当前时间n24小时至(n+1)24 小时)

    ​查找72小时内新增的文件find / -ctime -2

    ​PS:-ctime 内容未改变权限改变时候也可以查出

    根据确定时间去反推变更的文件

    ​ls -al /tmp | grep "Feb 27"

  2. 特殊权限的文件

    ​查找777的权限的文件 find / *.jsp -perm 4777

  3. 隐藏的文件(以 "."开头的具有隐藏属性的文件)

  4. 在文件分析过程中,手工排查频率较高的命令是 find grep ls 核心目的是为了关联推理出可疑文件。

3.1.2 进程命令

  1. 使用netstat 网络连接命令,分析可疑端口、可疑IP、可疑PID及程序进程

    netstat –antlp | more

  1. 使用ps命令,分析进程

ps aux | grep pid | grep –v grep

将netstat与ps 结合,可参考vinc牛的案例:

(可以使用lsof -i:1677 查看指定端口对应的程序)

  1. 使用ls 以及 stat 查看系统命令是否被替换。

    ​两种思路:第一种查看命令目录最近的时间排序,第二种根据确定时间去匹配。

    ​ls -alt /usr/bin | head -10

    ​ls -al /bin /usr/bin /usr/sbin/ /sbin/ | grep "Jan 15"

PS:如果日期数字<10,中间需要两个空格。比如1月1日,grep “Jan 1”

  1. 隐藏进程查看
ps -ef | awk '{print}' | sort -n | uniq >1
ls /proc | sort -n |uniq >2
diff 1 2

3.1.3 系统信息

history (cat /root/.bash_history)
/etc/passwd
crontab  /etc/cron*
rc.local  /etc/init.d chkconfig
last
$PATH
strings
  1. 查看分析history (cat /root/.bash_history),曾经的命令操作痕迹,以便进一步排查溯源。运气好有可能通过记录关联到如下信息:

    a) wget 远程某主机(域名&IP)的远控文件;

    b) 尝试连接内网某主机(ssh scp),便于分析攻击者意图;

    c) 打包某敏感数据或代码,tar zip 类命令

    d) 对系统进行配置,包括命令修改、远控木马类,可找到攻击者关联信息…

  2. 查看分析用户相关分析

    ​a) useradd userdel 的命令时间变化(stat),以及是否包含可疑信息

    b) cat /etc/passwd 分析可疑帐号,可登录帐号

    查看UID为0的帐号:awk -F: '{if($3==0)print $1}' /etc/passwd

    查看能够登录的帐号:cat /etc/passwd | grep -E "/bin/bash$"

    PS:UID为0的帐号也不一定都是可疑帐号,Freebsd默认存在toor帐号,且uid为0.(toor 在BSD官网解释为root替代帐号,属于可信帐号)

  1. 查看分析任务计划

    a) 通过crontabl –l 查看当前的任务计划有哪些,是否有后门木马程序启动相关信息;

    b) 查看etc目录任务计划相关文件,ls /etc/cron*

  2. 查看linux 开机启动程序

    a) 查看rc.local文件(/etc/init.d/rc.local /etc/rc.local)

    b) ls –alt /etc/init.d/

    c) chkconfig

  3. 查看系统用户登录信息

    a) 使用lastlog命令,系统中所有用户最近一次登录信息。

    b) 使用lastb命令,用于显示用户错误的登录列表

    c) 使用last命令,用于显示用户最近登录信息(数据源为/var/log/wtmp,var/log/btmp)

    ​ utmp文件中保存的是当前正在本系统中的用户的信息。

    ​ wtmp文件中保存的是登录过本系统的用户的信息。

    ​ /var/log/wtmp 文件结构和/var/run/utmp 文件结构一样,都是引用/usr/include/bits/utmp.h 中的struct utmp

  1. 系统路径分析

    a) echo $PATH 分析有无敏感可疑信息

  2. 指定信息检索

    a) strings命令在对象文件或二进制文件中查找可打印的字符串

    b) 分析sshd 文件,是否包括IP信息strings /usr/bin/.sshd | egrep '[1-9]{1,3}.[1-9]{1,3}.'

    PS:此正则不严谨,但匹配IP已够用

    c) 根据关键字匹配命令内是否包含信息(如IP地址、时间信息、远控信息、木马特征、代号名称)

  3. 查看ssh相关目录有无可疑的公钥存在。

    a) Redis(6379) 未授权恶意入侵,即可直接通过redis到目标主机导入公钥。

    b) 目录: /etc/ssh ./.ssh/

3.1.4 后门排查

除以上文件、进程、系统 分析外,推荐工具:

​ chkrootkit rkhunter(www.chkrootkit.org rkhunter.sourceforge.net)

Ø chkrootkit

(迭代更新了20年)主要功能:

  1. 检测是否被植入后门、木马、rootkit

  2. 检测系统命令是否正常

  3. 检测登录日志

  4. 详细参考README

Ø rkhunter主要功能:

  1. 系统命令(Binary)检测,包括Md5 校验

  2. Rootkit检测

  3. 本机敏感目录、系统配置、服务及套间异常检测

  4. 三方应用版本检测

Ø RPM check检查

系统完整性也可以通过rpm自带的-Va来校验检查所有的rpm软件包,有哪些被篡改了,防止rpm也被替换,上传一个安全干净稳定版本rpm二进制到服务器上进行检查

./rpm -Va > rpm.log

如果一切均校验正常将不会产生任何输出。如果有不一致的地方,就会显示出来。输出格式是8位长字符串, c 用以指配置文件, 接着是文件名. 8位字符的每一个 用以表示文件与RPM数据库中一种属性的比较结果 。 . (点) 表示测试通过。.下面的字符表示对RPM软件包进行的某种测试失败:

5 MD5 校验码
S 文件尺寸
L 符号连接
T 文件修改日期
D 设备
U 用户
G 用户组
M 模式e (包括权限和文件类型)

借用sobug文章案例:如下图可知ps, pstree, netstat, sshd等等系统关键进程被篡改了

Ø Webshell查找

​ Webshell的排查可以通过文件、流量、日志三种方式进行分析,基于文件的命名特征和内容特征,相对操作性较高,在入侵后应急过程中频率也比较高。

可根据webshell特征进行命令查找,简单的可使用(当然会存在漏报和误报)

find /var/www/ -name "*.php" |xargs egrep 'assert|phpspy|c99sh|milw0rm|eval|\(gunerpress|\(base64_decoolcode|spider_bc|shell_exec|passthru|\(\$\_\POST\[|eval \(str_rot13|\.chr\(|\$\{\"\_P|eval\(\$\_R|file_put_contents\(\.\*\$\_|base64_decode'
  1. Webshell的排查可以通过

  2. Github上存在各种版本的webshell查杀脚本,当然都有自己的特点,可使用河马shell查杀(shellpub.com)

综上所述,通过chkrootkit 、rkhunter、RPM check、Webshell Check 等手段得出以下应对措施:

  1. 根据进程、连接等信息关联的程序,查看木马活动信息。

  2. 假如系统的命令(例如netstat ls 等)被替换,为了进一步排查,需要下载一新的或者从其他未感染的主机拷贝新的命令。

  3. 发现可疑可执行的木马文件,不要急于删除,先打包备份一份。

  4. 发现可疑的文本木马文件,使用文本工具对其内容进行分析,包括回连IP地址、加密方式、关键字(以便扩大整个目录的文件特征提取)等。

3.1.5 日志分析

日志文件
/var/log/message       包括整体系统信息
/var/log/auth.log        包含系统授权信息,包括用户登录和使用的权限机制等
/var/log/userlog         记录所有等级用户信息的日志。
/var/log/cron           记录crontab命令是否被正确的执行
/var/log/xferlog(vsftpd.log)记录Linux FTP日志
/var/log/lastlog         记录登录的用户,可以使用命令lastlog查看
/var/log/secure         记录大多数应用输入的账号与密码,登录成功与否
var/log/wtmp        记录登录系统成功的账户信息,等同于命令last
var/log/faillog        记录登录系统不成功的账号信息,一般会被黑客删除
  1. 日志查看分析,grep,sed,sort,awk综合运用

  2. 基于时间的日志管理:

    /var/log/wtmp

    /var/run/utmp

    /var/log/lastlog(lastlog)

    /var/log/btmp(lastb)

  3. 登录日志可以关注Accepted、Failed password 、invalid特殊关键字

  4. 登录相关命令

    lastlog 记录最近几次成功登录的事件和最后一次不成功的登录
    who 命令查询utmp文件并报告当前登录的每个用户。Who的缺省输出包括用户名、终端类型、登录日期及远程主机
    w 命令查询utmp文件并显示当前系统中每个用户和它所运行的进程信息
    users 用单独的一行打印出当前登录的用户,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名把显示相同的次数
    last 命令往回搜索wtmp来显示自从文件第一次创建以来登录过的用户
    finger 命令用来查找并显示用户信息,系统管理员通过使用该命令可以知道某个时候到底有多少用户在使用这台Linux主机。
  5. 几个语句

    定位有多少IP在爆破主机的root帐号
    grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more
    登录成功的IP有哪些
    grep "Accepted " /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more  
    tail -400f demo.log #监控最后400行日志文件的变化 等价与 tail -n 400 -f (-f参数是实时)  
    less demo.log #查看日志文件,支持上下滚屏,查找功能  
    uniq -c demo.log  #标记该行重复的数量,不重复值为1 
    grep -c 'ERROR' demo.log   #输出文件demo.log中查找所有包行ERROR的行的数量

3.1.6 相关处置

kill -9

chattr –i

rm

setfacl

ssh

chmod

3.2 Windows系列分析排查

3.2.1 文件分析

  1. 开机启动有无异常文件

  2. 各个盘下的temp(tmp)相关目录下查看有无异常文件

  3. 浏览器浏览痕迹、浏览器下载文件、浏览器cookie信息

  4. 查看文件时间,创建时间、修改时间、访问时间。对应linux的ctime mtime atime,通过对文件右键属性即可看到详细的时间(也可以通过dir /tc 1.aspx 来查看创建时间),黑客通过菜刀类工具改变的是修改时间。所以如果修改时间在创建时间之前明显是可疑文件。

  5. 查看用户recent相关文件,通过分析最近打开分析可疑文件

    a) C:\Documents and Settings\Administrator\Recent

    b) C:\Documents and Settings\Default User\Recent

    c) 开始,运行 %UserProfile%\Recent

  6. 根据文件夹内文件列表时间进行排序,查找可疑文件。当然也可以搜索指定日期范围的文件及文件件

Server 2008 R2系列

Win10 系列

  1. 关键字匹配,通过确定后的入侵时间,以及webshell或js文件的关键字(比如博彩类),可以在IIS 日志中进行过滤匹配,比如经常使用:

  2. 知道是上传目录,在web log 中查看指定时间范围包括上传文件夹的访问请求
    findstr /s /m /I “UploadFiles” *.log
    某次博彩事件中的六合彩信息是six.js
    findstr /s /m /I “six.js” *.aspx
    根据shell名关键字去搜索D盘spy相关的文件有哪些
    for /r d:\ %i in (*spy*.aspx) do @echo %i

3.2.2 进程命令

  1. netstat -ano 查看目前的网络连接,定位可疑的ESTABLISHED

  2. 根据netstat 定位出的pid,再通过tasklist命令进行进程定位

  1. 通过tasklist命令查看可疑程序

3.2.3 系统信息

  1. 使用set命令查看变量的设置

  2. Windows 的计划任务;

  3. Windows 的帐号信息,如隐藏帐号等

  4. 配套的注册表信息检索查看,SAM文件以及远控软件类

  5. 查看systeminfo 信息,系统版本以及补丁信息

    例如系统的远程命令执行漏洞MS08-067、MS09-001、MS17-010(永恒之蓝)…

    若进行漏洞比对,建议使用Windows-Exploit-Suggester

    https://github.com/GDSSecurity/Windows-Exploit-Suggester/

3.2.4 后门排查

PC Hunter是一个Windows系统信息查看软件

http://www.xuetr.com/

功能列表如下:

1.进程、线程、进程模块、进程窗口、进程内存信息查看,杀进程、杀线程、卸载模块等功能
2.内核驱动模块查看,支持内核驱动模块的内存拷贝
3.SSDT、Shadow SSDT、FSD、KBD、TCPIP、Classpnp、Atapi、Acpi、SCSI、IDT、GDT信息查看,并能检测和恢复ssdt hook和inline hook
4.CreateProcess、CreateThread、LoadImage、CmpCallback、BugCheckCallback、Shutdown、Lego等Notify Routine信息查看,并支持对这些Notify Routine的删除
5.端口信息查看,目前不支持2000系统
6.查看消息钩子
7.内核模块的iat、eat、inline hook、patches检测和恢复
8.磁盘、卷、键盘、网络层等过滤驱动检测,并支持删除
9.注册表编辑
10.进程iat、eat、inline hook、patches检测和恢复
11.文件系统查看,支持基本的文件操作
12.查看(编辑)IE插件、SPI、启动项、服务、Host文件、映像劫持、文件关联、系统防火墙规则、IME
13.ObjectType Hook检测和恢复
14.DPC定时器检测和删除
15.MBR Rootkit检测和修复
16.内核对象劫持检测
17.WorkerThread枚举
18.Ndis中一些回调信息枚举
19.硬件调试寄存器、调试相关API检测
20.枚举SFilter/Fltmgr的回调

PS:最简单的使用方法,根据颜色去辨识——可疑进程,隐藏服务、被挂钩函数:红色,然后根据程序右键功能去定位具体的程序和移除功能。根据可疑的进程名等进行互联网信息检索然后统一清除并关联注册表。

Webshell 排查

  1. 可以使用hm

  1. 也可以使用盾类(D盾、暗组盾),如果可以把web目录导出,可以在自己虚拟机进行分析

3.2.5 日志分析

  1. 打开事件管理器(开始—管理工具—事件查看/开始运行eventvwr)

  2. 主要分析安全日志,可以借助自带的筛选功能

  1. 可以把日志导出为文本格式,然后使用notepad++ 打开,使用正则模式去匹配远程登录过的IP地址,在界定事件日期范围的基础,可以提高效率正则是:

  2. ((?:(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))).){3}(?:25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d))))

  1. 强大的日志分析工具Log Parser

#分析IIS日志
LogParser.exe "select top 10 time, c-ip,cs-uri-stem, sc-status, time-taken from C:\Users\sm0nk\Desktop\iis.log" -o:datagrid

有了这些我们就可以对windows日志进行分析了 比如我们分析域控日志的时候,想要查询账户登陆过程中,用户正确,密码错误的情况,我们需要统计出源IP,时间,用户名时,我们可以这么写(当然也可以结合一些统计函数,分组统计等等):
LogParser.exe -i:EVT "SELECT TimeGenerated,EXTRACT\_TOKEN(Strings,0,'|') AS USERNAME,EXTRACT\_TOKEN(Strings,2,'|') AS SERVICE\_NAME,EXTRACT\_TOKEN(Strings,5,'|') AS Client_IP FROM 'e:\logparser\xx.evtx' WHERE EventID=675"

事件ID是很好的索引

Windows server 2008系列参考event ID:
4624 - 帐户已成功登录
4625 - 帐户登录失败
4648 - 试图使用明确的凭证登录(例如远程桌面)

3.2.6 相关处置

  1. 通过网络连接锁定的可疑进程,进行定位恶意程序后删除(taskkill)

  2. 木马查杀,可配合pchunter 进行进一步专业分析,使用工具功能进行强制停止以及删除

  3. 最后清理后,统一查看网络连接、进程、内核钩子等是否正常。

3.3 应用类

Apache、tomcat、Nginx、IIS

无论任何web服务器其实日志需要关注的东西是一致的,即access_log和error_log。一般在确定ip地址后,通过:

find . access_log |grep xargs ip攻击地址

find . access_log| grep xargs 木马文件名

页面访问排名前十的IP
cat access.log | cut -f1 -d " " | sort | uniq -c | sort -k 1 -r | head -10
页面访问排名前十的URL
cat access.log | cut -f4 -d " " | sort | uniq -c | sort -k 1 -r | head -10
查看最耗时的页面
cat access.log | sort -k 2 -n -r | head 10

在对WEB日志进行安全分析时,可以按照下面两种思路展开,逐步深入,还原整个攻击过程。

  1. 首先确定受到攻击、入侵的时间范围,以此为线索,查找这个时间范围内可疑的日志,进一步排查,最终确定攻击者,还原攻击过程。

  1. 一般攻击者在入侵网站后,通常会上传一个后门文件,以方便自己以后访问。我们也可以以该文件为线索来展开分析。

4 应急总结

  1. 核心思路是“顺藤摸瓜”

  2. 碎片信息的关联分析

  3. 时间范围的界定以及关键操作时间点串联

  4. Web入侵类,shell定位很重要

  5. 假设与求证

  6. 攻击画像与路线确认

5 渗透反辅

  1. 密码读取

    a) Windows: Mimikatz

    b) Linux: mimipenguin

  2. 帐号信息

    a) 操作系统帐号

    b) 数据库帐号

    c) 应用帐号信息

  3. 敏感信息

    a) 配置信息

    b) 数据库信息

    c) 服务端口信息

    d) 指纹信息

  4. 滚雪球式线性拓展

    a) 密码口令类拓展(远控)

    b) 典型漏洞批量利用

  5. 常见的入侵方式Getshell方法

    a) WEB入侵

    ​ i. 典型漏洞:注入Getshell , 上传Getshell,命令执行Getshell,文件包含Getshell,代码执行Getshell,编辑器getshell,后台管理Getshell,数据库操作Getshell

    ​ ii. 容器相关:Tomcat、Axis2、WebLogic等中间件弱口令上传war包等,Websphere、weblogic、jboss反序列化,Struts2代码执行漏洞,Spring命令执行漏洞

    b) 系统入侵

    ​ i. SSH 破解后登录操作

    ​ ii. RDP 破解后登录操作

    ​ iii. MSSQL破解后远控操作

    ​ iv. SMB远程命令执行(MS08-067、MS17-010、CVE-2017-7494)

    c) 典型应用

    ​ i. Mail暴力破解后信息挖掘及漏洞利用

    ​ ii. VPN暴力破解后绕过边界

    ​ iii. Redis 未授权访问或弱口令可导ssh公钥或命令执行

    ​ iv. Rsync 未授权访问类

    ​ v. Mongodb未授权访问类

    ​ vi. Elasticsearch命令执行漏洞

    ​ vii. Memcache未授权访问漏洞

    ​ viii. 服务相关口令(mysql ldap zebra squid vnc smb)

6 资源参考

https://www.waitalone.cn/linux-find-webshell.html

http://vinc.top/category/yjxy/

http://www.shellpub.com/

http://linux.vbird.org/linux_security/0420rkhunter.php

https://cisofy.com/download/lynis/

https://sobug.com/article/detail/27?from=message&isappinstalled=1

http://www.freebuf.com/articles/web/23358.html

https://www.microsoft.com/en-us/download/details.aspx?id=24659

http://www.cnblogs.com/downmoon/archive/2009/09/02/1558409.html

http://wooyun.jozxing.cc/static/drops/tips-7462.html

http://bobao.360.cn/learning/detail/3830.html

https://yq.aliyun.com/ziliao/65679

http://secsky.sinaapp.com/188.html

http://blog.sina.com.cn/s/blog_d7058b150102wu07.html

http://www.sleuthkit.org/autopsy/

7 FAQ

  1. 应急需求有哪些分类:

    a) 被谁入侵了? 关联 攻击IP 攻击者信息

    b) 怎么入侵的? 关联 入侵时间轴、漏洞信息

    c) 为什么被入侵? 关联 行业特性、数据信息、漏洞信息

    d) 数据是否被窃取? 关联 日志审计

    e) 怎么办? 关联 隔离、排查分析、删马(解密)、加固、新运营

  2. 关于windows的日志工具(log parser)有无图形界面版?

    Log Parser Lizard 是一款用Vc++.net写的logParser增强工具。主要有以下特点:

    a) 封装了logParser命令,带图形界面,大大降低了LogParser的使用难度。

    b) 集成了几个开源工具,如log4net等。可以对IIS logs\EventLogs\active directory\log4net\File Systems\T-SQL进行方便的查询。

    c) 集成了Infragistics.UltraChart.Core.v4.3、Infragistics.Excel.v4.3.dll等,使查询结果可以方便的以图表或EXCEL格式展示。

    d) 集成了常见的查询命令,范围包含六大模块:IIS

    e) 可以将查询过的命令保存下来,方便再次使用。


PS:软件是比较老的,对新系统兼容性不好,还是建议微软原生态log parser

  1. 在linux日志中,有无黑客入侵后的操作命令的统计**

    a) 可以根据history信息进行溯源分析,但一般可能会被清除

    b) 还有方法是需要结合accton 和 lastcomm

  1. 3.2.3 提到了Windows-Exploit-Suggester,有无linux版?

    Linux_Exploit_Suggester https://github.com/PenturaLabs/Linux_Exploit_Suggester

  1. 有无linux自动化信息收集的脚本工具?

    LinEnum https://github.com/rebootuser/LinEnum

  2. 有无综合的取证分析工具

    Autopsy 是sleuthkit提供的平台工具,Windows 和 Linux磁盘映像静态分析、恢复被删文件、时间线分析,网络浏览历史,关键字搜索和邮件分析等功能

http://www.sleuthkit.org/autopsy/

  1. 关于业务逻辑的排查方法说明

新型业务安全中安全事件,例如撞库、薅羊毛、支付、逻辑校验等敏感环节,未在本文体现,所以后续有必要针对业务侧的应急排查方法归纳。

源链接

Hacking more

...