Linux安全检测常用方法
一. 系统状态备份
主要是网络、服务、端口、进程等状态信息的备份工作
系统服务备份: chkconfig --list > services.log 进程备份: ps -ef > ps.log 监听端口备份: netstat -utnpl > port-listen.log 系统所有端口情况: netstat -ano > port-all.log
二. 断开和限制对外连接
iptables -A OUTPUT -o lo -j ACCEPT 允许本机访问本机 iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT 允许主动访问本服务器的请求 iptables -A OUTPUT –p tcp –d <Your IP> -jACCEPT 允许服务器主动访问的IP白名单 iptables -A DROP 拒绝对外访问
三. 进程查看
定位导致高流量的进程, 然后通过它的行为, 分析是否是黑客挂的马
iftop -nP 查看流量情况
如先用iptraf-ng查下,如果UDP包发的很多,基本都被人装了后门
1.web后门查杀 2.top (ps -ef) 查看进程 lsof –c 可疑进程名 (查看关联文件,发现对外的 tcp 连接) 查看文件路径。并查看文件创建时间 whereis 可疑进程名 ls -al 可疑进程名 # ps -aux(注意UID是0的) # lsof -p pid(察看该进程所打开端口和文件) # cat /etc/inetd.conf | grep -v “^#”(检查守护进程) 检查隐藏进程 # ps -ef|awk ‘{print }’|sort -n|uniq >1 # ls /porc |sort -n|uniq >2 # diff 1 2
kill 终止进程
查端口对应的进程:lsof -i:PID
如: lsof -i:9001
一些常用的方法: kill -STOP [pid] 发送SIGSTOP (17,19,23)停止一个进程,而并不消灭这个进程。 kill -CONT [pid] 发送SIGCONT (19,18,25)重新开始一个停止的进程。 kill -KILL [pid] 发送SIGKILL (9)强迫进程立即停止,并且不实施清理操作。 kill -9 -1 终止你拥有的全部进程。 SIGKILL 和 SIGSTOP 信号不能被捕捉、封锁或者忽略,但是,其它的信号可以。
常用命令
lsof filename 显示打开指定文件的所有进程
lsof -a 表示两个参数都必须满足时才显示结果
lsof -c string 显示COMMAND列中包含指定字符的进程所有打开的文件
lsof -u username 显示所属user进程打开的文件
lsof -g gid 显示归属gid的进程情况
lsof +d /DIR/ 显示目录下被进程打开的文件
lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长
lsof -d FD 显示指定文件描述符的进程
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
lsof -i 用以显示符合条件的进程情况
lsof -Pnl +M -i4
-P :约束着网络文件的端口号到端口名称的转换,在端口名称的查找不能奏效时很有用的 -n : 约束着网络文件的端口号到主机名称的转换,在主机名称的查找不能奏效很有用 -l :约束着用户ID号到登录名的转换。在登录名的查找不正确或很慢时很有用。 +M :此选项支持本地TCP和UDP端口映射程序的注册报告。 -i4 :仅列示IPv4协议下的端口。 -i6 :仅列示IPv6协议下的端口。
批量中止进程
kill -9 $(ps -ef | grep 进程名 | grep -v grep | awk '{print $2}')
网络行为分析
抓取数据包进行分析,如wireshark,tcpdump等,例
1
|
tcpdump -i eth1 dst xxx.xxx.xxx.xxx |
四.后门扫描
后门账户查找
1. 检查帐户 # cat /etc/passwd # grep :0: /etc/passwd 检查是否产生了新用户,和UID、GID是0的用户 # ls -l /etc/passwd 查看文件修改日期 # awk -F: ‘$3= =0 {print $1}’ /etc/passwd 查看是否存在特权用户 # awk -F: ‘length($2)= =0 {print $1}’ /etc/shadow 查看是否存在空口令帐户
检查后门
cat /etc/crontab ls /var/spool/cron/ cat /etc/rc.d/rc.local ls /etc/rc.d ls /etc/rc3.d find / -type f -perm 4000
rookit检测
Rootkit Hunter:rkhunter --check chkrootkit:chkrootkit | grep INFECTED
查找指定的tty进程:ps aux | grep pts/0
rkhunter
rkhunter --check 检测。出现红色的警告信息,请仔细检测是否已经中招了。
查看产生的日志:cat /
var
/log/rkhunter.log | grep Warning
# ss -l 列出所有打开的网络连接端口
# ss -pl 查看进程使用的socket
自动发送报告
每天5点检测并发送通知邮件
crontab -e
* 5 * * * /usr/local/rkhunter/bin/rkhunter --cronjob -l --nomow --rwo | mail -s "[rkhunter] report `hostname` `date`" root@localhost
找出与 crypto 与 bash 这两个服务有关的 PID 号码
ps aux | egrep '(cron|syslog)'
检查计划任务
注意root和UID是0的schedule # crontab –u root –l # cat /etc/crontab # ls /etc/cron.*
# crontabs:crontab -l
,rm ... 清理计划认为
五. 查看系统、文件异常
主要针对文件的更改时间、属组属主信息问题,新增用户,文件最后修改时间等问题:
# find -type f -mtime -5 #查找最近5天内更改的文件 # find / -uid 0 –perm -4000 –print # find / -size +10000k –print # find / -name "..." –print # find / -name ".." –print # find / -name "." –print # find / -name " " –print 注意SUID文件,可疑大于10M和空格文件 # find / -name core -exec ls -l {} ; (检查系统中的core文件) 检查系统文件完整性 # md5sum –b 文件名 # md5sum –t 文件名
检查网络
# ip link | grep PROMISC(正常网卡不该在promisc模式,可能存在sniffer) # lsof –i # netstat –nap(察看不正常打开的TCP/UDP端口) # arp –a
检查内核模块
# lsmod
检查系统服务
# chkconfig
# rpcinfo -p(查看RPC服务)
六. 查看关键日志
/var/log/faillog --登陆失败日志
/var/log/auth.log --验证日志
例:grep 'sshd' /var/log/auth.log
还有/var/log/messages、/var/log/secure
secure日志可以查看Accept关键字;last可以查看登录信息;bash_history可以查看命令执行信息等,
例:查看登录情况
cat secure-20150317 | grep 'Failed password' | cut -d " " -f 9,10,11 | sort | uniq
# last(查看正常情况下登录到本机的所有用户的历史记录)
注意”entered promiscuous mode”
注意错误信息如:
Remote Procedure Call (rpc) programs with a log entry that includes a large number (> 20) strange characters(-^PM-^PM-^PM-^PM-^PM-^PM-^PM-^PM)
补充:
通过syslog协议通过udp进行传输日志,以下是两种方式:
1) Logger方式:cat localhost_access_log.2016-11-22.txt | logger -t graylog2 -n 127.0.0.1 -P 端口
2)nc方式:cat localhost_access_log.2016-11-22.txt | nc -w 1 -u 127.0.0.1 端口
辅助
用Shell Script编写一段脚本,通过这个脚本让chkrootkit的监测自动化。如有rootkit被发现的时候,发送邮件通知root用户,并且将运行结果保存在/var/log/messages文件中。
[root@localhost ~]# vi mychkrootkit ← 建立chkrootkit自动运行脚本
#!/bin/bash PATH=/usr/bin:/bin TMPLOG=`mktemp` # Run the chkrootkit /usr/local/chkrootkit/chkrootkit > $TMPLOG # Output the log cat $TMPLOG | logger -t chkrootkit # bindshe of SMTPSllHow to do some wrongs if [ ! -z "$(grep 465 $TMPLOG)" ] && \ [ -z $(/usr/sbin/lsof -i:465|grep bindshell) ]; then sed -i '/465/d' $TMPLOG fi # If the rootkit have been found,mail root [ ! -z "$(grep INFECTED $TMPLOG)" ] && \ grep INFECTED $TMPLOG | mail -s "chkrootkit report in `hostname`" root rm -f $TMPLOG
一些小工具:
IPTraf-实时局域网IP监控
Htop – Linux进程监控
VnStat PHP – 网络流量监控
Suricata – 网络安全监控
iotop – 简单的类似top的I/O监控器
Vnstat
#初始化,绑定要监测的网卡的名称,比如eth0 vnstat -u -i eth0 vnstat
相关链接
监控 Linux 性能的 18 个命令行工具: http://os.51cto.com/art/201402/429890.htm
Linux下10个使用lsof命令的例子: http://www.tecmint.com/10-lsof-command-examples-in-linux/
Linux 性能监控之命令行工具: http://m.2cto.com/os/201606/517821.html
用Linux肉鸡渗透一个小型内网的思路: http://www.91ri.org/12362.html
高手对决 -- 博客服务器被黑的故事: http://ruby-china.org/topics/23848
作者:ssooking 联系邮箱:c3Nvb2tpbmdAeWVhaC5uZXQ=
若无特殊说明,所发博文皆为原创,转载请务必注明出处、保留原文地址。欢迎交流分享!如果您有任何问题,请联系我!