Linux系统排查
1.找文件
//搜索目录下适配当前应用的网页文件,查看内容是否有Webshell特征
find ./ type f -name "*.jsp" | xargs grep "exec("
find ./ type f -name "*.php" | xargs grep "eval("
find ./ type f -name "*.asp" | xargs grep "execute("
find ./ type f -name "*.aspx" | xargs grep "eval("
//对于免杀Webshell,可以查看是否使用编码
find ./ type f -name "*.php" | xargs grep "base64_decode"
find ./ -type f -name "*.php" | xargs grep "base64_decode"
find ./ -type f -name "*.php" -exec grep -Hn '\^' {} +
find ./ -type f -name "*.php" -exec grep -Hn -E '\$.*\^.*\$|["'\'']\s*\^\s*["'\'']' {} +
2.查用户
//查看UID为0的用户
awk -F: '{if($3==0)print $1}' /etc/passwd
//查看能够登录的用户
cat /etc/passwd | grep -v "nologin" | grep -v "false"
//查看是否存在空口令用户
awk -F: 'length($2)==0 {print $1}' /etc/shadow
3、进程、服务、网络连接排查
ps aux 命令查看系统进程;
kill -9 PID 命令,可结束PID;
netstat -anp 命令,可查看网络连接、进程、端口及对应的PID等,排查时可优先关注对外连接的进程,或连接高危端口的进程;
ls -alh /proc/PID,可查看其对应的可执行程序;
rm -rf filename命令删除进程;
如果root用户都无法删除相关文件,那么可能是文件被加上了i属性(设定文件不能被删除、改名、设定连接关系,同时不能写入或新增内容)。可以使用lsatter filename命令查看文件属性,然后使用chattr -i filename命令移除i属性,然后执行删除命令。
lsof -p PID命令查看PID对应的可执行程序。
lsof -i:port命令查看指定端口对应的可执行程序。
top命令:可以根据CPU、内存占用率查看可疑进程。
查看隐藏进程。可以借助unhide工具排查隐藏进程。unhide是一个小巧的网络取证工具,能发现隐藏的进程和TCP/UDP端口。该工具在Linux、UNIX、MS-Windows等操作系统中都可用。
chkconfig --list命令,可查看系统运行的服务,核查是否存在异常服务。
4、开机自启动排查
在Linux系统中,系统启动内核挂载根文件系统 ,然后启动并运行一个init程序,init进程的任务就是运行开机启动的程序,init是非内核进程中第一个被启动运行的,因此它的PID的值总是1,init读取其配置文件来进行初始化工作。
5.定时任务排查
攻击者通常用定时任务 来进行持久化控制:
crontab -l命令是用户级别的,保存在/var/spool/cron/{user}中,每个用户都可以使用crontab -e命令编辑自己的定时任务列表。使用crontab -I命令,可查看当前用户的定时任务,检查是否有后门]木马程序启动相关信息。
/etc/crontab是系统级别的定时任务,只有root账户可以修改。另外,还需要注意的有/etc/cron.hourly、/etc/cron.daily、 /etc/cron.weekly、/etc/cron.monthly等周期性执行脚本的目录。
使用ls /etc/cron*命令,可查看etc目录系统级定时任务相关文件。例如,攻击者若想每小时执行一个脚本,则只需将脚本放到/etc/cron.hourly下,并且赋予执行权限即可。
6、rootkit排查
rootkit是种特殊的恶意软件,功能是在安装目标上隐藏自身及指定的文件、 进程和网络连接
等信息。rootkit一般会与木马、后门等其他恶意程序结合使用。
ls -alt /bin命令,可查看相关系统命令的修改时间,判断是否有更改。
ls -alh /bin 命令,可查看相关文件大小,若明显偏大,则很可能被替换。
rpm -Va命令,可查看发生过变化的软件包,若一切校验结果均正常,则不会产生任何输出。
第三方查杀工具,如chkrootkit、 rkhunter进行查杀 。
7、文件排查
通过对一些敏感文件及敏感目录的排查,可判断是否存在攻击者的攻击存留文件,以及修改访
问过的文件。
ls -al命令,可查看隐藏的文件。
find / mtime 0命令,可查看最近24小时内修改过的文件。
stat filename命令,可查看文件的修改、创建、访问时间。应重点关注与事件发生时间接近的文件的情况,或者修改、创建、访问时间存在逻辑错误的文件的情况。
ls -alh /tmp命令,可查看/tmp目录文件。
ls -alh /root/.ssh/命令,可查看是否存在恶意的ssh公钥,一旦发现非已知ssh公钥,则很可能是攻击者写入的。
8.Web日志分析
| Web中间件 | 默认路径 |
|---|---|
| Apache | /etc/httpd/logs/access_log、/var/log/httpd/access_log |
| Nginx | /usr/local/nginx/logs |
Linux系统日志一般位于/var/log目录下,几乎保存了系统所有的操作记录,包括用户认证时产生的日志、系统定期执行任务计划时产生的日志、系统某些守护进程产生的日志、系统邮件日志、内核信息等。
在Linux日志排查时,常用日志检索命令如下:
定位具体的IP地址或文件名:
find . access_log | grep xargs ip、
find . access_log | grep xargs filename |
查看页面访问排名前十的IP地址:
cat access.log | cut -f1 -d "" | sort | uniq -c | sort -k 1 -r | head -10
查看页面访问排名前十的URL地址:
cat access.log | cut -f4 -d "" | sort | uniq -c | sort -k 1 -r | head -10
9、数据库日志排查
MySQL日志:
Windows:MySQL的默认配置路径:C: Windows\my.ini C: Windows\mysql\my.ini
Linux:MySQL的默认配置路径:/etc/mysql/my.cnf
MySQL常见的日志记录格式:
windows系统:
log-error=E:/PROGRA1/EASYPH1.0B1/mysql/logs/error.log"、log="E:/PROGRA1/EASYPH1.0B1/mysql/logs/ mysql.log"、
long_query_time=2
log-slow-queries= "E:/PROGRA1/EASYPH1.0B1/mysql/logs/slowquery.log"
linux系统:
log-error=/usr/local/mysql/log/error.log
log=/usr/local/mysql/log/mysql.log
long_query_time=2
log-slow-queries= /usr/local/mysql/log/slowquery.log