渗透痕迹分析随笔
2020-02-16 09:00:32 Author: www.freebuf.com(查看原文) 阅读量:253 收藏

网上,关于入侵痕迹分析的文章很多,在此将个人工作中常用的一些方法技巧(班门弄斧了),以及爬过的坑总结如下(当然,其中有些方法也是从各位前辈的经验中学习的)。入侵痕迹分析,不外乎正向推理,和逆向推理。当已经掌握部分线索时,可通过逆向推理,快速确定事发时间、影响范围、事发原因等;当没有明确的线索,可以入侵者的视角,通过正向思维进行推理,从而发现入侵行为;两种方法都可以以敏感文件、敏感命令、敏感IP、攻击特征关键字为线索,推理出事发时间、事发原因。

 一、针对.bash_history的分析

在对日志进行例行安全分析时,对文件.bash_history的分析必不可少,该文件记录了命令执行历史记录,通过该文件,可以分析入侵者执行了哪些恶意操作(反弹shell、提权、信息收集、修改文件隐藏后门、添加后门账号、挖矿木马特喜欢的添加计划任务、以当前shell为跳板进行横向渗透、删除日志文件)。

入侵者获得的命令shell是哑shell时,为了提高交互性,可能会执行以下python语句反弹一个交互shell

python -c 'import pty; pty.spawn("/bin/bash")',

入侵者获得反弹shell后,可能会执行相关的提权命令,比如尝试suid提权时,可能会通过find命令,查找设置了SUID位的可执行文件,或者尝试sudo提权时,先检查当前账号是否具有sudo权限

find / -perm -u=s -type f 2>/dev/null
sudo -i 或者 sudo -l

入侵者提权后,可能会通过cat、more等命令查看配置文件,收集各种敏感信息,通过useradd或者adduser命令添加后门账号;但是这几个命令也是运维人员常用的命令,因此要配合命令执行的时间来进一步分析,而.bash_history文件中记录的时间是以unix时间戳形式记录,可以直接转换;或者直接修改passwd添加账号,因此当passwd和shadow这两个文件发生修改时,需要重点关注。

挖矿木马特喜欢添加计划任务,每次碰到挖矿木马,通过计划任务排查,一查一个准,添加计划任务的命令如下:

crontab -e

入侵者为了干扰排查,可能会修改后门文件的时间,比如通过如下命令:

touch -d 或者 touch -t

横向渗透方面,可能关闭iptables、进行端口扫描、搭建各种隧道等命令,比如使用nc或者nmap:

nc -z -v ip port          使用系统自带的nc进行端口扫描
ssh -CfNg                 搭建ssh隧道
ew -s                     使用ew搭建隧道
service iptables stop     关闭iptables

当然很多入侵者干脆通过命令清空命令历史记录,或者直接将整个.bash_history文件删除,但最后一条清除历史记录的命令或者删除文件的命令会保留下来

history -c
rm .bash_history

上面针对.bash_history文件,进行安全分析时,列举了一些个人认为比较敏感的特征,总之对.bash_history进行安全审计时,要对敏感命令、敏感工具持有敏锐的嗅觉

部分人员日常工作中,因执行的终端命令太多,通过上下方向键查找历史命令,不方便,于是习惯性的使用history -c清除,其实这对溯源工作带来了很大的阻力,因此不建议使用history -c清除。

二、日志分析

1、系统日志

入侵痕迹分析,肯定少不了各种日志的分析。secure记录的是包括登录相关的安全日志,cron记录的计划任务日志。安全日志和计划任务日志文件名可能后面会接日期(日志归档原因),因此为防遗漏,可以使用如下命令进行搜索

ls /var/log/cron*        
ls /var/log/secure*

当尝试ssh暴力破解溯源时,可用如下命令,指定用户,对IP进行快速排查;lastb命令能列出登录失败的记录,整条命令的作用就是找出对root用户进行暴力破解的ip,并以次数从大到小输出

lastb root | awk'{print $3}' | sort |uniq -c |sort -rn |more

筛选出可疑IP后,可以通过secure日志,验证是否有被爆破成功,如果定位了IP,事发时间也相应的能定位,接下来就可根据IP和时间,对相关日志进行溯源分析

cat /var/log/secure* | grep Accepted | grep ip

2、数据库日志        

有时候找不知道日志文件的存放目录,可以通过查看配置文件(如mysql的配置文件文件my.inf,tomcat的配置文件tomcat-user.xml)。mysql数据库日志分析时,账号暴力破解这种,可以参考ssh爆破的思路进行排查。当mysql版本是5.6以上时,可以尝试看下是否有执行过如下sql命令,

set global general_log = on       开启日志记录(当outfile、dumpfile无法导出shell时,可配合日志文件getshell)
set global general_log_file = ''  设置日志文件保存路径(通常保存到web目录)

有时候通过mysql进行udf提权,可直接通过sql语句查看,添加了什么函数

select * from mysql.func

附带提一下:mssql的日志,可通过xp_cmdshell这个关键字,进行排查;因为当获取的数据权限为sa时,可利用xp_cmdshell进行提权操作;oracle日志,因为oracle数据库的特性,可以自定义函数,这个给入侵者提权带来了便利,因此对oracle数据库进行溯源时,可执行以下sql语句进行排查:

select * from USER_OBJECTS where OBJECT_TYPE = 'FUNCTION'     #排查自定义的函数
select * from USER_PROCEDURES                                 #排查用户自定义的资源,包括函数和对象
select * from USER_SOURCE where NAME = 'GETSHELL'             #获取前面排查出来的可疑对象的源代码

3、web应用日志         

关于web应用日志,像acc、中间件日志。当发生安全应急事件时,像后台暴力破解,同样可以参考ssh账号暴力破解的排查思路,进行快速排查。当入侵者使用其他手段时,一样可以先分析acc日志,将可疑IP筛选出来,筛选出IP后,再配合响应状态码,比如配合200状态码,分析入侵者成功访问了哪些地址,通过这个可以说不定可以发现webshell,当然很多系统都有自定义的报错页面,此时的状态码也是200;配合302,发现跳转到后台的日志;配合500,发现java反序列化攻击记录。总之要根据应用系统的实际情况,实际分析。

或者使用各种攻击特征,对日志进行快速排查,比如常见的sql注入攻击,使用select关键字;xss攻击,使用script关键字;任意文件读取、包含、下载,使用目录跳转特征“../”;也可根据当前系统用到的中间件如weblogic、fastjson,当前或以往出现的高危漏洞,进行快速排查;如weblogic可通过wls-wsat/CoordinatorPortType,fastjson可通过JdbcRowSetImpl等关键字进行快速排查。

其他特征包括:常用webshell文件名如菜刀、蚁剑、冰蝎等;部分工具user-agent有明显的特征,如awvs。对这些特征都有保持敏锐的嗅觉。

web应用日志分析,怎么少的的时下很火的业务风控安全,薅羊毛。这种行为都发生在特定的某个url地址,因此可以针对特定的url地址,快速筛选出IP,筛选出的IP肯定很多,同样先进行排序,但是时下的羊毛党也是很聪明且舍得投入,IP地址频繁切换,因此推荐对网段进行筛选,此外如果IP是云IP、国外IP(这得根据业务进行排查),再者就是IP访问时间异常,如下半夜。

三、流量进程分析

当日志分析,未排查出有价值的线索时,则从流量进程方向分析,也不失为另一个突破口;先使用netstat命令查看端口信息,ps查看进程信息,lsof查看进程和端口关联情况。

lsof -i :port            可用于检查那个进程使用了特定的端口
lsof -p pid              检查pid进程调用情况
strace -f -p pid         跟踪分析pid进程,可发现库文件劫持

查找隐藏进程

ps -ef | awk'{print $2}'|sort -n| uniq > tasklist1.txt
ls /proc | sort -n | uniq > tasklist2.txt
diff tasklist1.txt tasklist2.txt

流量分析,肯定会碰到wireshark和tcpdump这两款工具,网上都有详细的使用教程,不在此赘述。

四、隐藏后门排查

隐藏后门排查,可能会碰到库文件劫持,关于库文件劫持溯源,已有同学做了很详细的总结(学习了,多谢),地址是应急响应系列之Linux库文件劫持技术分析

另外可以使用diff命令,将整个web目录和备份目录进行对比,排查出被修改的文件

diff -urNA webdir webdir_bak

也可以使用find命令配合mtime、ctime参数,搜索事发时间时间段,指定格式的被修改文件

find /var/www/html -mtime +0 "*.jsp"       搜索web目录下24小时内被修改的jsp文件

部分计划任务可能会存在/var/spool/cron和/etc/cron.d目录下,并且部分日志并不是root添加的,而是其他具备root权限的用户添加的,可使用如下命令,查看指定用户的计划任务

crontab -l -u username

启动项排查

cat /etc/rc.local            排查rc.local文件中添加的启动项命令
ls /etc/init.d               排查init.d目录下添加的自启动脚本
ls /etc/profile.d            排查profile.d目录下添加的自启动脚本
chkconfig --list             centos系统列出自启动项

隐藏后门排查,肯定也有相关的工具可借助,如D盾、rkhunter、chkrootkit等。

五、后门处理

后门处理,有一个要注意的点是,需要做好备份,不能一股脑的直接删除,因为如果是在系统或应用的文件中插入恶意后门代码,直接删除,可能导致系统瘫痪。建议从备份或者官网下载,进行替换。有些后门文件,即便停掉了相关进程,仍然无法删除,可用chattr命令去除相关标识后再删除。

chattr -ia shell

六、其他

日志分析前,要确认日志记录时间使用是格林尼治时间,还是我们常用的东八区时间,否则会给入侵痕迹分析带来很大的误导。一定要保护好日志,根据网络安全法的要求来就行,否则巧妇难为无米之炊。

*本文原创作者:freebuf01,本文属于FreeBuf原创奖励计划,未经许可禁止转载


文章来源: https://www.freebuf.com/articles/others-articles/226423.html
如有侵权请联系:admin#unsafe.sh