安全日志详解
以下的大部分内容都会用到 安全日志(如Web服务器访问日志) 中的特定字段,推断攻击者的行为特征,所以先详细讲解日志的详细知识以便理解
这里以Apache日志为例
Apache 日志:全面解析安全运维的"黑匣子"
Apache 日志是Web服务器运行的完整记录,相当于服务器的"飞行数据记录器"。它详细记录了所有客户端请求、服务器响应及交互细节,是安全分析、性能优化和故障排查的核心依据
Apache 日志的核心作用:
安全监控,故障排查,流量分析,性能优化
可用于检测恶意扫描,暴力破解,注入攻击,服务中断,设备类型,识别慢请求等等
Apache日志类型详解
访问日志 (Access Log)
文件路径:/var/log/httpd/access_log (CentOS)
记录内容: 所有成功处理的客户端请求
安全价值:
检测扫描行为(高频404)
识别暴力破解(密集POST /login)
追踪数据泄露(异常大响应)错误日志(Error Log)
文件路径:/var/log/httpd/error_log
记录内容: 服务器运行错误和警告
关键信息:
PHP致命错误(暴露路径信息)
文件权限问题(Permission denied)
模块加载失败
拒绝连接攻击(Connection reset by peer)SSL/TLS 日志 (当启用HTTPS)
文件路径:/var/log/httpd/ssl_access_log
特有字段:
加密套件(ECDHE-RSA-AES256-GCM-SHA384)
客户端证书信息
TLS协议版本(TLSv1.3)
Apache 日志字段详解 (CentOS 7 默认格式扩展版)
- 字段一:客户端IP地址 (Remote Host)
作用: 记录发起请求的客户端 ip 地址
示例: 192.168.1.1 - 字段二:远程逻辑用户名 (Remote Logname)
作用: 记录客户端标识(RFC 1413标准)
示例: -(几乎总是连字符)
说明: 该字段已废弃,99%情况显示为 - (现代系统默认禁用ident服务) - 字段三:认证用户名 (Remote User)
作用: HTTP基础认证的用户名
示例:
-(未认证)
admin(认证用户) - 字段四:请求时间戳 (Time)
格式: [日/月/年:时:分:秒 时区]
示例: [26/Jun/2025:15:32:45 +0800] - 字段五:请求行 (Request Line)
格式: “请求方法 URI 协议版本”
示例: “GET /wp-admin HTTP/1.1” - 字段六:最终状态码 (Status Code)
作用: 服务器返回的HTTP状态码
常见值:
200:成功
301/302:重定向
404:未找到
403:禁止访问
500:服务器错误 - 字段七:响应大小 (Bytes Sent)
作用: 返回给客户端的字节数(不含响应头)
示例:
1234:返回1234字节
-:空响应(如304) - 字段八:来源页面 (Referer Header)
作用: 记录请求来源的URL
示例:“https://www.shodan.io/host/1.2.3.4” - 字段九:用户代理 (User-Agent Header)
作用: 客户端浏览器/工具标识
结构解析:
Mozilla/5.0 (操作系统; 平台信息) 引擎/版本 应用/版本
查询攻击者使用的操作系统
原理:
利用安全日志查找攻击者使用的操作系统
详细步骤(注:此日志文件是我自定义的,请以实际为准)
- 优先找到攻击者的 IP
awk '{print $1}' /var/log/httpd/access_log | sort |uniq -c | sort -nr
工作原理
查找攻击者IP详情
- 过滤 ip 查询日志
grep '192.168.42.205' /var/log/httpd/access_log | head -n 10
工作原理
- grep ‘192.168.42.205’ /var/log/httpd/access_log
grep直接在文件 /var/log/httpd/access_log 中搜索包含字符串192.168.42.205的行(即该IP的访问记录)
输出所有匹配的项
- | head -n 10
通过管道 | 将 grep 的输出传递给 head 命令
head -n 10 截取前10行结果并显示
由此可以得出攻击者操作系统为:X11; Linux x86_64; rv:68.0
注:因为User-Agent可以被伪造,不能直接作为攻击者操作系统的证据,只能作为间接参考,可以结合结合TCP指纹、TTL值等网络层分析加以佐证,因为此篇涉及不到,以后有机会再讲
查找攻击者所使用的资产收集平台
核心思路
攻击者常使用自动化平台扫描互联网资产,这些平台会在服务器日志中留下特征痕迹(如 User-Agent 或 Referer 字段)
注:
User-Agent 是 HTTP 请求头的一部分,用于标识发起请求的客户端软件信息
Referer 表示当前请求是从哪个网页链接过来的
也就是日志详解中的字段八,字段九
常见的资产收集平台
Shodan,ZoomEye,Censys,Fofa,IVRE
常见资产收集平台特征
Shodan
User-Agent 特征:Shodan,Shodan/1.0
Referer 特征:http://shodan.ioZoomEye
User-Agent 特征:ZoomeyeBot,Zoomeye
Referer 特征:https://www.zoomeye.orgCensys
User-Agent 特征:CensysInspect,Censys
Referer 特征:https://search.censys.ioFofa
User-Agent 特征:FOFA,fofa.pro
Referer 特征:https://fofa.infoIVRE
User-Agent 特征:IVRE,Nmap Scripting Engine
Referer 特征:通常无(IVRE基于 Namp/Zmap)
查寻命令
方法一:
适用于知道资产收集平台
grep '资产收集平台' 日志文件
例如:
grep 'shodan' /var/log/httpd/access_log
也可以直接查找所有平台
grep -i -E 'shodan|zoomeye|censys|fofa|ivre' /var/log/httpd/access_log
参数说明
- -i :忽略大小写(匹配Shodan或SHODAN)
- -E :启用正则表达式( | 表示逻辑或)
方法二:
如果不知道资产收集平台可以使用
过滤 ip 查询日志命令:
grep '192.168.42.205' /var/log/httpd/access_log | head -n 10
查找攻击者所使用的目录扫描工具
查找目录扫描工具与前两个相比比较难以理解,所以我就以更加通俗易懂的方式讲解
核心思路
攻击者使用工具扫描网站目录时,会在日志中留下独特的指纹,就像不同的人会留下不同的脚印。我们通过分析这些“脚印”来推断使用了什么工具
理解核心原理(为什么能检测?)
每种扫描工具都有"身份证特征":
User-Agent:相当于"工具名片"
Dirb:dirb/v2.22
FFuf:Fuzz Faster U Fool扫描模式:相当于"作案手法"
- 特殊标记: 相当于"作案签名"
FFuf/WFuzz:在URL中使用FUZZ占位符
Dirsearch:可能添加X-Scanner: Dirsearch头部
通过 User-Agent,扫描模式,特殊标记 来判断使用的是什么目录扫描工具
常见的目录扫描工具有:
dirsearch,dirb,ffuf,gobuster,wfuzz
工具指纹特征详解
指纹在网络安全中特指能够唯一标识特定工具、软件或攻击行为的特征组合
- dirsearch
指纹特征:
默认User-Agent:python-requests/2.x.x
路径爆破格式:/FUZZ 或自定义占位符
独特Header:部分版本带 X-Scanner: Dirsearch
请求规律:固定线程数+随机延迟(可通过 -t -delay 参数修改)
日志示例:
GET /admin/ HTTP/1.1" 404 153 "-" "python-requests/2.26.0"
- dirb
指纹特征:
默认User-Agent:dirb/v2.x (http://dirb.sourceforge.net)
扫描路径:优先尝试 /robots.txt 、/index.html
请求特征:顺序遍历字典,无随机延迟
日志示例:
GET /wp-login.php HTTP/1.1" 200 512 "-" "dirb/v2.22 (http://dirb.sourceforge.net)"
- FFuf (原fluf)
指纹特征:
默认User-Agent:Fuzz Faster U Fool v1.x
占位符标识:URL中必含 FUZZ (如 https://site.com/FUZZ)
高频并发:默认150线程,突发大量请求
日志示例:
GET /backup.zip HTTP/1.1" 200 10240 "-" "Fuzz Faster U Fool v1.3.1"
- Gobuster
指纹特征:
User-Agent:gobuster/v3.x
模式标识:-m 参数决定扫描模式(dir/dns/vhost)
路径格式:/ +字典项(如 /admin)
日志示例:
GET /.git/HEAD HTTP/1.1" 200 23 "-" "gobuster/v3.5"
- WFuzz
指纹特征:
User-Agent:Wfuzz/2.x
请求头标识:Host: FUZZ.target.com(域名爆破模式)
参数占位:?param=FUZZ 或 POST数据爆破
日志示例:
POST /login.php HTTP/1.1" 302 0 "username=FUZZ&password=test"
查询命令(注:此日志文件是我自定义的,请以实际为准)
方法一:搜索所有工具的特征UA
grep -E 'dirb|gobuster|Wfuzz|python-requests|"Fuzz Faster U Fool"' access.log | head -n 20
#命令解析
# grep 文本搜索工具
# -E 使用正则表达式
# 'dirb|gobuster...' 工具的特征UA
# access.log 要搜索的文件
# head -n 20 指定显示行数(可选)
方法二:查看日志前20行
head -20 access.log
方法三:检查特殊占位符 “FUZZ”
grep "FUZZ" access.log