常用命令
处置进程\文件
netstat -anplt 查看网络连接状态
-a或–all 显示所有连线中的Socket
-n或–numeric 直接使用IP地址,而不通过域名服务器
-p或–programs 显示正在使用Socket的程序识别码和程序名称
-l或–listening 显示监控中的服务器的Socket
-t或–tcp 显示TCP传输协议的连线状况
-u或–udp 显示UDP传输协议的连线状况
top 查看进程的资源占用率
lsof -p PID 查看与某进程相关的文件
cd /proc/PID 查看与某进程相关的文件
stat 查看文件信息
kill -9 PID PID 结束进程(一个或多个)
kill -9 ~ & crontab -r 同时删除相互守护的进程和计划任务
./busybox cat /etc/ld.so.preload 利用busybox查看动态链接库
持久项排查
crontab -l 列出计划任务,-r 删除,-e 编辑
/etc/rc.d 文件夹,rc.local文件
/var/spool/cron 文件夹及其中内容
/etc/profile 及其内容指向的文件/文件夹(profile.d内脚本等)
~/.bashrc 及其内容指向(/etc/bashrc等)
溯源工作
last 查看历史登录记录
lastb 历史登录失败记录
cat /var/log/secure 查看安全日志
cat ~/.ssh/authorized_keys 查看免密认证证书
docker ps 查看docker信息
docker logs ID 查看docker日志
journalctl -u docker.service 查看docker服务日志
cat /PATH/logs/catalina.out 查看tomcat调试日志
cat /PATH/logs/localhost.DATE.log 查看tomcat登录日志
其他位置
一、Web服务
查找webshell:linux查找webshell_weixin_33709609的博客-CSDN博客
- D盾等工具
- 命令查找:
查找24小时内被修改的JSP文件:find ./ -mtime 0 -name "*.jsp"
与测试环境目录做对比:diff -r {生产dir} {测试dir}
find /www/ -name "*.php" |xargs egrep 'assert|phpspy|c99sh|milw0rm|eval|\\(gunerpress|\\(base64_decoolcode|spider_bc|shell_exec|passthru|\\(\\$\\_\\POST\\[|eval \\(str_rot13|\\.chr\\(|\\$\\{\\"\\_P|eval\\(\\$\\_R|file_put_contents\\(\\.\\*\\$\\_|base64_decode'
只查小马的可以
1.grep -r --include=*.php '[^a-z]eval($_POST' . > post.txt
2.grep -r --include=*.php '[^a-z]eval($_REQUEST' . > REQUEST.txt
Audit审计
创建Audit审计规则(Audit另学):vim /etc/audit/audit.rules
-a exclude,always -F msgtype=CONFIG_CHANGE
-a exit,always -F arch=b64 -F uid=48 -S execve -k webshell
Access Log
扫描特征:egrep '(select|script|acunetix|sqlmap)' /var/log/httpd/access_log
访问频次,重点关注POST请求:grep 'POST' /var/log/httpd/access_log | awk '{print $1}' | sort | uniq -c | sort -nr
过滤Content-Length大于5M的日志:awk '{if($10>5000000){print $0}}' /var/log/httpd/access_log
# 如果发现文件,不要直接用vim查看编辑文件内容,以防更改文件的mtime
二、ssh服务
登录信息
成功:
grep 'Accepted' /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr
或last命令,它会读取/var/log/wtmp,并显示该文件记录的登录系统的用户名单
失败
grep 'Failed' /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr
或lastb命令,它会读取/var/log/btmp,并显示该文件记录的登入系统失败的用户名单
检测ssh后门
1. 比对ssh的版本:ssh -V
2. 查看ssh配置文件和/usr/sbin/sshd的时间:stat /usr/sbin/sshd
3. 有些sshd后门会通过邮件发送登录信息,通过:strings /usr/sbin/sshd 查看是否有邮箱信息
4. 一般的sshd后门都会将账户密码记录到文件,可通过strace监控sshd进程读写文件的操作:
ps axu | grep sshd | grep -v grep
root 65530 0.0 0.1 48428 1260 ? Ss 13:43 0:00 /usr/sbin/sshd
strace -o aa -ff -p 65530
grep open aa* | grep -v -e No -e null -e denied| grep WR
aa.102586:open("/tmp/ilog", O_WRONLY|O_CREAT|O_APPEND, 0666) = 4
三、进程
**注:**如果攻击者获取到了Root权限,被植入内核或者系统层Rootkit的话,进程也会隐藏。
检查项
1)资源占用:Top然后找到CPU和MEM排序
2)启动时间:可疑与前面找到的Webshell时间点比对。
3)启动权限:这点很重要,发现木马进程以mysql权限执行,则排查mysql
4)父进程,如反弹shell父进程为apache,则可判断为web入侵
命令举例
ps -ef | grep '/dev/tcp' | grep -v grep 查看反弹shell进程
ps -ef | grep 1014 查看进程1014(若上条命令发现父进程为1014)
lsof -p PID 查看相关文件和路径(如可能发现可执行文件)
file .zl 获取文件类型
strings .zl 读取二进制文件中可读字符
例:strings /usr/bin/.sshd | egrep '[1-9]{1,3}\\.[1-9]{1,3}\\.' ,命令替换应急可查询大量ip地址
四、网络连接
netstat -antlp (| grep ESTABLISHED) 获取(已建立)连接
netstat -antlp | grep EST | grep bash 检查已建立反弹bash
netstat -antlp | grep LISTEN | grep 1080 检查可以监听端口
(例如攻击者在本地开启sock5代理,然后使用SSH反弹sock5)
五、敏感目录
/tmp, /var/tmp, /dev/shm,所有用户都可读,可写,可执行
ls -ald /PATH/ 查看目录内容
六、history查看历史命令
history 仅记录执行的命令
七、开机启动
CentOS 5
1)/etc/inittab
2)/etc/rc.d/rc.sysinit
3)/etc/rc.d/init.d
4)/etc/rc.d/rc.local
CentOS 6
1)/etc/init/*.conf
2)/etc/rc.d/rc.sysinit
3)/etc/rc.d/init.d
4)/etc/rc.d/rc.local
八、定时任务
1)/etc/crontab
2)/etc/cron.d
3)/var/spool/cron/{user}
4)/etc/anacrontab
5)/etc/cron.hourly,daily,weekly,monthly
九、Rootkit
1)检查命令替换:rpm -qaV(显示所有一以RPM安装的软件的完整性)
2)比对命令的大小(比对ps和netstat):ll /bin/ps & ll /bin/netstat
3)查看命令的修改时间,按修改时间排序:ls -alt /bin/ | head -n 5
4)利用busybox查看动态链接库:./busybox cat /etc/ld.so.preload
5)使用工具chkrootkit,rkhunter查看
十、病毒检测
十一、文件权限
本文由本人总结优化,参考原文: