36

渗透痕迹分析随笔

 4 years ago
source link: https://www.freebuf.com/articles/others-articles/226423.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK