防御者需要了解数以千计的方式来入侵系统,而攻击者只需要攻击成功一次。
攻击者需要了解数以千计的方法来掩盖踪迹,而防御者只需要发现痕迹一次。
计算机不是自发的,首先需要关注那些引起你注意的事情。
伪装为合法进程名或奇怪的进程名
运行陌生的网络连接的进程
CPU/RAM高占比的进程
已删除的二进制文件但仍在运行的进程
以上的组合
CPU/RAM
top
进程树
ps -auxwf
网络连接情况
netstat -nalp
netstat -plant | grep ESTABLISHED
netstat -plant | grep -v TIME
ss -a -e -i
lsof -i
lsof -nPi | grep -v "127.0.0.1" | grep -v "::1"$
被删除二进制文件的正在运行的进程
ls -alR /proc/*/exe 2> /dev/null | grep deleted
进程命令行参数
strings /proc/<PID>/comm
strings /proc/<PID>/cmdline
进程的执行路径
ls -al /proc/<PID>/exe
进程中环境变量
strings /proc/<PID>/environ
进程的工作目录
ls -alR /proc/*/cwd
进程的工作目录为tmp或dev
ls -alR /proc/*/cwd 2> /dev/null | grep tmp
ls -alR /proc/*/cwd 2> /dev/null | grep dev
用于隐藏恶意二进制文件
用于隐藏被盗数据
用于保存暂存数据以备进一步入侵
用于持久化
需要关注的目录
/tmp
/var/tmp
/dev
/dev/shm
/bin
/sbin
/usr/bin
/usr/sbin
/lib
/lib64
/lib32
/usr/lib
/usr/lib64
/usr/lib32
/var
/var/log
/var/spool/cron
/etc/rc.local
/etc/initd
/etc/rc*.d
/etc/modules
/etc/cron*
Web服务器目录
用户目录
列出并分隔名称中的空格等:
ls -lap
列出以.为开头的隐藏目录
find / -type d -name ".*"
猎捕攻击留下的痕迹。
被修改或位于奇怪位置的二进制文件
列出以.为开头的隐藏文件或目录名称
ls -ar |grep "^\."
不可变文件和目录:
lsattr / -R 2> /dev/null | grep "\----i"
查找具备 SUID/SGID 权限的文件
find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -lg {} \;
find / -perm -007 -exec ls -l {} \;
查找没有用户或组的文件或目录
find / \( -nouser -o -nogroup \) -exec ls -lg {} \;
列出当前目录下文件的类型
file * -p
查找某目录下可执行文件
find / -type f -exec file -p '{}' \; | grep ELF
find /tmp -type f -exec file -p '{}' \; | grep ELF
查找一天前修改或创建的文件
find / -mtime -1
查找被篡改的命令文件
rpm -Va | grep ^..5.
debsums -c
查找全部authorized_keys文件
find / -name authorized_keys
awk '{print $1,$3}' /root/.ssh/authorized_keys
查找历史用户命令文件,检查可疑内容
find / -name .*history
history | grep -e wget -e curl
history | grep -e wget -e curl -e bash
history | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort | uniq -c
重定向到/dev/null的历史命令
ls -alR / 2> /dev/null | grep .*history | grep null
查找UID为0或GID为0的用户
grep ":0:" /etc/passwd
查找UID为0或大于500的用户
awk -F : '{if($3==0||$3>=500){print}}' /etc/passwd
检查sudoers文件
cat /etc/sudoers
cat /etc/group
查找所有用户的计划任务
for user in `cat /etc/passwd |awk -F: '{print $1}'`; do crontab -l -u $user; done
atq
systemctl list-timers --all
systemctl list-unit-files | grep enabled
检查大小为0的日志
ls -al /var/log/*
导出审计日志
utmpdump /var/log/wtmp
utmpdump /var/run/utmp
utmpdump /var/log/btmp
查找其中包含二进制文件的日志
grep [[:cntrl:]] /var/log/*.log
统计ssh登录成功的IP
cat /var/log/auth.log | grep 'Accepted' | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort | uniq -c
cat /var/log/secure | grep 'Accepted' | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort | uniq -c
统计用户IP的登录次数
last | awk '{print $3}' | grep -E "\." | grep -v "-" | sort | uniq -c
lastb | awk '{print $3}' | grep -E "\." | grep -v "-" | sort | uniq -c
查询审计守护进程日志
ausearch -i | grep curl
reference
https://sandflysecurity.com/blog/compromised-linux-cheat-sheet/