应急响应笔记之Linux篇

整理下自己之前做的应急响应相关的碎片笔记,太多了,没办法全部列出来,先整理一些常用的。

1. 系统日志

/var/log/cron :crontab命令日志

/var/log/lastlog:登录用户日志

/var/log/secure:记录登录成功与否(有次在这个文件里面找到了一些关键性的web访问日志。。。)

/var/log/wtmp:记录登录系统成功的账户信息,等同于last

/var/log/utmp:查看当前登录系统的情况,等同于who

/var/log/faillog:记录登录系统不成功的账号信息

history:查看所有历史命令记录

~/.bash_history:黑客可能会使用history -c清除日志,使用cat ~/.bash_history仍可查看相关的记录

/var/log/cups:记录打印信息的日志

/var/log/dmesg:记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息

/var/log/mailog:记录邮件信息

2. 访问日志

web服务器的种类很多,比如apache、tomcat、Nginx等。web访问日志需要根据配置获取,大部分在默认存储位置,比如nginx的在/var/log/nginx目录下。

主要关注两个文件,即access_logerror_log,一般在确定了可疑点之后通过find、grep、xargs、awk等组合命令进一步获取日志信息。

3. 进程

ps -ef:查看可疑进程

top -c:查看资源占有情况,并显示文件路径

lsof -g $GID:通常能找到恶意文件进程关联的lib文件

lsof -p $PID:查看进程详细信息

netstat -anltp | grep $PID:查看进程端口情况

ls -la /proc/$PID/exe:查看进程可执行文件

strace -tt -T -e trace=all -p $PID:跟踪异常进程运行情况

lsof -c $PID:查看进程关联文件

4. 用户

Linux所有用户都会在/etc/passwd/etc/shadow/etc/group文件中记录

cat /etc/passwd :查看是否有其他uid,gid为0的情况

less /etc/passwd:查看是否有新增用户

grep :0 /etc/passwd:查看是否有特权用户

ls -l /etc/passwd:查看passwd最后修改时间

awk -F: 'length($2)==0 {print $1}' /etc/shadow:查看是否存在空口令用户

5. 系统命令

查看系统命令是否存在异常,比如文件大小、创建时间、修改时间等,比如:

1
2
3
4
5
ls -alt /bin/ | head -n 10
ls -alt /usr/sbin/ | head -n 10
ls -alt /usr/bin/ | head -n 10
find /etc/ /usr/bin/ /usr/sbin/ /bin/ /usr/local/bin/ /var/spool/cron/ -type f -mtime -3 | xargs ls -al

rpm -Va:查看系统命令是否被替换

显示S.5…T.表示是被修改过的,可以选择yum重新还原回去,也可以使用系统命令工具包busybox

6. 计划任务

常见计划任务位置:

1
2
3
4
5
6
7
/var/spool/cron/*
/var/spool/anacron/*
/etc/crontab
/etc/anacrontab
/etc/cron.*
/etc/anacrontab
/etc/rc.d/init.d/

7. 开机启动项

1
2
3
ls /etc/rc.d
systemctl list-unit-files
chkconfig --list [service_name]

8. 文件

文件的范围就比较大了,但是无非就是基于文件的创建时间、修改时间、所属组、所属用户、权限、文件大小、文件名称、md5信息、文件内容、suid等。

以查找具有SUID的文件为例

1
2
3
4
find / -perm +4000 -ls
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -print 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;

9. 端口

netstat -anltp | grep $PID:查看进程端口情况

lsof -i:5000:查看5000端口的占用情况

netstat -alntp:查看端口

1
netstat -an | grep tcp | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more #查看所有tcp连接

netstat -antlp| grep ESTABLISHED:查看所有建立连接的详细记录

netstat -antlp | grep LISTEN:检查监听的端口

netstat -antlp | grep 80 | awk '{print $7}' | cut -d/ -f1:根据端口列进程

10. 技巧

10.1 日志如果被软链接到/dev/null

  1. 删除log
  2. 重启rsyslog

10.2 如果文件/目录无法删除,可使用lsattr查看文件/目录属性,如果有-i属性可使用chattr -i去除

10.3 查找777的权限的文件:find / *.php -perm 777,因为大部分黑客普遍喜欢直接赋于文件/目录777的权限

10.4 搜集SSH爆破字典:grep "Failed password" /var/log/secure | awk {'print $9'} | sort | uniq -c | sort -nr

10.5 查看恶意文件里面的IP:strings /usr/bin/.sshd | egrep '[1-9]{1,3}\.[1-9]{1,3}\.'

10.6 根据特征删除指定进程:ps aux|grep -v grep|grep "mysqlc"|awk '{print $2}'|xargs kill -9

10.7 获取进程id数组,并循环杀死所有进程

1
2
3
4
5
6
ps -ef|grep "java" | grep -v grep|awk '{print $2}'
kill -9 `ps -ef|grep "java" | grep -v grep|awk '{print $2}'`
for pid in $(ps -ef|grep "java" | grep -v grep|awk '{print $2}'); do
echo $pid
kill -9 $pid
done

10.8 隐藏进程查找:

1
2
3
4
5
进程都存在于内存中,而内存中的数据又都是写入到/proc/目录下,基于此可查找隐藏文件
ps -ef | awk '{print}' | sort -n | uniq >1
ls /proc | sort -n |uniq >2
diff 1 2
另外,针对挖矿命令被劫持的情况下可以使用perf top -s pid,comm,dso,symbol来看到挖矿进程

10.9 SEO文件搜索:grep -ri baiduspider web_root_master

10.10 netstat被替换,可使用ss、lsof来替换

10.11 arp -a:查看arp记录是否正常

10.12 关注Content-Length值:awk '{if($10>5000000){print $0}}' /var/log/httpd/access_log

10.13 查看动态库是否被修改

1
2
3
echo $LD_PRELOAD
busybox cat /etc/ld.so.preload
也可使用strace、ldd、readefl等命令

10.14 利用iptables阻断通讯

1
2
iptables -A INPUT -s xmr.crypto-pool.fr -j DROP
iptables -A OUTPUT -d xmr.crypto-pool.fr -j DROP

10.15 文件监控

1
2
3
4
创建文件监控规则
auditctl -w /etc/passwd -p war -k password_monitor
监听日志
tail -f /var/log/audit/audit.log|grep password_monitor

10.16 网页挖矿多数都是加载conhive.min.js,script标签里有miner.start关键字,全局查找即可

10.17 检查SSH后门

  • 对比ssh版本:ssh -V
  • 查看ssh配置文件和/usr/sbin/sshd的时间:stat /usr/sbin/sshd
  • strings检查/usr/sbin/sshd,看是否有邮箱、IP等信息:strings /usr/bin/.sshd | egrep '[1-9]{1,3}\.[1-9]{1,3}\.'
  • 通过strace监控sshd进程读写文件的操作,一般的sshd后门都会将账户密码记录到文件,可以通过strace进程跟踪到ssh登录密码文件。

10.18 清除僵尸进程

父进程调用fork创建子进程后,子进程运行直至其终止,它立即从内存中移除,但进程描述符仍然保留在内存中。

ps -e -o stat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -9

10.19 扫描是否存在恶意驱动

10.20 黑帽seo关键词匹配

1
2
3
sogou,so.com,google,youdao,yahoo,bing,118114,biso,gougou,ifeng,ivc,sooule,niuhu,biso,360sm,uc
老虎机、澳门银行、万博亚洲官网、狗万app、新万博官网、ylg9999、九州娱乐、澳门威尼斯人、威尼斯人、大红鹰葡京会、振动盘、澳门银河、永利娱乐场、太阳城集团、金沙娱乐、Bet365、钱柜娱乐、永利娱乐、百家乐、博必发、商务模特、会所推荐、洗浴休闲、找鸡上门、外围女、按摩服务、大保健

大爷,赏个铜板呗!