系统日志
/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
:记录邮件信息
访问日志
web服务器的种类很多,比如apache、tomcat、Nginx等。web访问日志需要根据配置获取,大部分在默认存储位置,比如nginx的在/var/log/nginx目录下。
主要关注两个文件,即access_log
和error_log
,一般在确定了可疑点之后通过find、grep、xargs、awk等组合命令进一步获取日志信息。
进程
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
:查看进程关联文件
用户
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
:查看是否存在空口令用户
系统命令
查看系统命令是否存在异常,比如文件大小、创建时间、修改时间等,比如:
1 | ls -alt /bin/ | head -n 10 |
rpm -Va
:查看系统命令是否被替换
显示S.5…T.表示是被修改过的,可以选择yum重新还原回去,也可以使用系统命令工具包busybox
计划任务
常见计划任务位置:
1 | /var/spool/cron/* |
开机启动项
1 | ls /etc/rc.d |
文件
文件的范围就比较大了,但是无非就是基于文件的创建时间、修改时间、所属组、所属用户、权限、文件大小、文件名称、md5信息、文件内容、suid等。
以查找具有SUID的文件为例
1 | find / -perm +4000 -ls |
端口
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.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 | ps -ef|grep "java" | grep -v grep|awk '{print $2}' |
10.8 隐藏进程查找:
进程都存在于内存中,而内存中的数据又都是写入到/proc/目录下,基于此可查找隐藏文件
1 | ps -ef | awk '{print}' | sort -n | uniq >1 |
另外,针对挖矿命令被劫持的情况下可以使用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 | echo $LD_PRELOAD |
也可使用strace、ldd、readefl等命令
10.14 利用iptables阻断通讯
1 | iptables -A INPUT -s xmr.crypto-pool.fr -j DROP |
10.15 文件监控
创建文件监控规则
1 | auditctl -w /etc/passwd -p war -k password_monitor |
监听日志
1 | 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创建子进程后,子进程运行直至其终止,它立即从内存中移除,但进程描述符仍然保留在内存中。
1 | ps -e -o stat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -9 |
10.19 扫描是否存在恶意驱动
10.20 黑帽seo关键词匹配
1 | sogou,so.com,google,youdao,yahoo,bing,118114,biso,gougou,ifeng,ivc,sooule,niuhu,biso,360,sm,uc |