Linux - 安全排查 3
文章目录
- 查找攻击者写入的后门文件
- 查找攻击者首次攻击成功的时间
- find命令详解
查找攻击者写入的后门文件
思路分析
-
后门文件特征:
常见扩展名:.php,.jsp,.jspx,.py
包含危险函数:system( ),exec( ),shell_exec( ),passthru( )
常位于:网站根目录,上传目录,临时目录
文件名可能伪装:index.php.old,.theme.css.php -
检测策略
查找步骤
递归搜索危险函数
# 扫描所有PHP文件中的系统命令执行函数
grep -r --include='*.php*' \
-e 'system(' \
-e 'exec(' \
-e 'shell_exec(' \
-e 'passthru(' \
/var/www/html
核心字段解析
-
-r
递归搜索:检查 /var/www/html 及其所有子目录中的文件 -
–include=*.php
文件过滤:仅搜索扩展名为 .php 的文件(其他文件如 .js,.txt 会被忽略) -
-e ‘pattern’
指定匹配模式:这里使用 4个 -e 参数 定义多个搜索模式(逻辑关系为 OR,匹配任意一个即命中)
搜索路径
- /var/www/html :典型的 Linux Web 根目录 (Apache/Nginx 默认站点路径)
注意事项
- 误报可能:可能匹配到注释或无害代码(如 // system())。需人工验证结果
- 不完整检测:其他危险函数如 popen()、proc_open()、反引号 ` 未被包含(可追加 -e 参数)
- 正则优化:更精确的匹配可使用正则(例如 -e '\bsystem\s('* 避免匹配 custom_system())
查找攻击者首次攻击成功的时间
思路分析:
-
攻击成功标志:
系统入侵:成功登录(SSH/RDP)
Web入侵:文件上传/代码执行
持久化:后门安装 -
日志分析策略:
详细操作命令与解释
- 分析认证日志(SSH登录)
# 查看所有成功登录记录(按时间排序)
grep "Accepted password" /var/log/secure | sort -k 1M -k 2n -k 3# 查找特定IP的首次成功登录
grep "Accepted.*192.168.1.11" /var/log/secure | head -1
关键字段:
- Jul 12 14:30:00:攻击时间
- root:被入侵账户
- 192.168.1.11:攻击源IP
- 分析Web服务器日志(Apache)
# 查找文件上传请求
grep 'POST.*config.inc.php' /var/log/httpd/access_log# 查找Webshell执行痕迹
grep 'cmd=' /var/log/httpd/access_log | awk '{print $4}'# 按时间排序查看所有请求
awk '{print $4, $7, $8}' /var/log/httpd/access_log | sort | uniq
关键特征:
- POST /upload.php:文件上传请求
- GET /includes/config.inc.php?cmd=:Webshell执行
- HTTP 200:成功响应
- 文件系统时间戳分析
# 查找最近修改的Web文件
find /var/www/html -mtime -1 -ls | sort -k 10# 检查恶意文件创建时间
stat /var/www/html/includes/config.inc.php# 输出示例:
# Access: 2025-07-12 14:35:00
# Modify: 2025-07-12 14:35:00 <-- 文件修改时间
# Change: 2025-07-12 14:35:00
- 进程创建分析
# 查看进程启动历史(需auditd)
ausearch -sc execve -i | grep '/var/tmp/.httpd'# 检查cron任务添加时间
grep CRON /var/log/cron | grep 'curl.*mal.sh'
find命令详解
find 命令是 Linux/Unix 系统中功能最强大的文件搜索工具,支持按名称、类型、大小、时间等条件递归查找文件,并能对结果执行操作
一. 基本语法
find [搜索路径] [匹配条件] [操作]
- 搜索路径:默认为当前目录( . )
- 匹配条件:如文件名,类型,时间等(可组合)
- 操作:如打印,删除等(默认为**-print**)
二. 核心匹配条件
1. 按名称查找
- -name “模式”:区分大小写(支持通配符 ? , [ ] , 等)
find /etc -name "*.php" #查找 /etc 下所有 .php 文件
- -iname:不区分大小写
find . -iname "readme*" #查找 README.md,readme.txt 等
2. 按类型查找(-type)
- f:普通文件
- d:目录
- l:符号链接
- s:套接字文件
- b:块设备文件
find /var/log -type d # 查找所有目录
find ~ -type f -name "*.php" # 查找家目录下的 php 文件
3.按大小查找(-size)
- +n: 大于 n
- -n: 小于 n
- n: 等于n
- 单位:c(字节)、k(KB)、M(MB)、G(GB)
find / -size +100M # 查找大于 100MB 的文件
find . -size -10k # 查找小于 10KB 的文件
三. 对结果执行操作
1. 默认操作
- -print:打印完整路径(默认操作)
2. 删除文件(delete)
find /tmp -name "*.temp" -delete #删除所有 .temp 文件
3. 执行命令(-exec)
- {} 代表文件名,\ ; 表示命令结束(注:\ 和 ; 之间无空格,因为显示问题这里不能连在一起)
# 将查找到的 .txt 文件复制到 backup 目录
find . -name "*.txt" -exec cp {} ./backup/ \;