通过系统运行状态、安全设备告警,主机异常现象来发现可疑现象
通常的可疑现象有
Linux因为其默认的进程权限分离,每个进程有不同的权限,所以从进程用户名上能给我们很多信息
top
ps -ef
lsof -p PID
ps -p PID -o lstart
对于一些异常的文件,初步判断,可以用strings显示里面的可读字符串,并进行grep
ls -la /proc/PID/exe
pstree
查找指定时间的文件
查找根目录下,修改时间小于1天的文件
find / -mtime -1
mtime也可以对应为mmin指修改分钟,m意为modify相应也可改为ctime,atime,分别意为create,access
find /var/www/html/ -mtime -1 -name *.php
find /etc/ /usr/bin/ /usr/sbin/ /bin/ /usr/local/bin/ /var/spool/cron/-type f -mtime -3 | xargs ls -al
入侵者通常会替换系统的内置命令达到隐藏的目的
查看系统命令是否存在异常,如大小、修改时间、创建时间等
ls -altS /usr/sbin | head -30
netstat -antulp | grep ESTABLISHED
netstat -antulp | grep bash
netstat -antulp
lsof -i:22
grep : /etc/passwd
stat /etc/passwd
cat /etc/passwd | awk -F:'{print $7}' | sort | uniq -c
cat /etc/passwd | grep bash
last
lastlog
more /etc/sudoers | egrep -v "^#|^$"
grep wheel /etc/group
Linux的持久化方式不如windows复杂,通常有以下四种方式
crontab -l
/var/spool/cron/*
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*
Linux开机有多种运行级别,不同级别下加载的启动文件也不同
查看当前启动级别,当前为5,即图形式模式
runlevel
不同启动级别会加载不同启动文件
检查下述文件或目录
/etc/rc.d/*
/etc/rc.local
/etc/rc[0-6].d
/etc/inittab
chkconfig --list
0-6依然是系统启动级别
Linux使用rsyslog管理日志
通常关注的日志有
/var/log/messages:内核及公共消息日志
/var/log/cron:计划任务日志
/var/log/dmesg:系统引导日志
/var/log/maillog:邮件系统日志
/var/log/lastlog:用户登录日志
/var/log/boot.log:记录系统在引导过程中发生的时间
/var/log/secure:用户验证相关的安全性事件
/var/log/wtmp:当前登录用户详细信息
/var/log/btmp:记录失败的的记录
/var/run/utmp:用户登录、注销及系统开、关等事件;
Linux因为有强大的文本处理工具,如sed、awk等,所以从日志中提取信息相对容易,但前提是熟悉sed,awk,正则表达式等应用,下面列出一些常用举例
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'