Linux - 安全排查 2

发布于:2025-07-06 ⋅ 阅读:(13) ⋅ 点赞:(0)

安全日志详解

以下的大部分内容都会用到 安全日志(如Web服务器访问日志) 中的特定字段,推断攻击者的行为特征,所以先详细讲解日志的详细知识以便理解

这里以Apache日志为例

Apache 日志:全面解析安全运维的"黑匣子"
Apache 日志是Web服务器运行的完整记录,相当于服务器的"飞行数据记录器"。它详细记录了所有客户端请求、服务器响应及交互细节,是安全分析、性能优化和故障排查的核心依据

Apache 日志的核心作用
安全监控故障排查流量分析性能优化
可用于检测恶意扫描,暴力破解,注入攻击,服务中断,设备类型,识别慢请求等等

Apache日志类型详解

  1. 访问日志 (Access Log)
    文件路径:/var/log/httpd/access_log (CentOS)
    记录内容: 所有成功处理的客户端请求
    安全价值:
    检测扫描行为(高频404)
    识别暴力破解(密集POST /login)
    追踪数据泄露(异常大响应)

  2. 错误日志(Error Log)
    文件路径:/var/log/httpd/error_log
    记录内容: 服务器运行错误和警告
    关键信息:
    PHP致命错误(暴露路径信息)
    文件权限问题(Permission denied)
    模块加载失败
    拒绝连接攻击(Connection reset by peer)

  3. SSL/TLS 日志 (当启用HTTPS)
    文件路径:/var/log/httpd/ssl_access_log
    特有字段:
    加密套件(ECDHE-RSA-AES256-GCM-SHA384)
    客户端证书信息
    TLS协议版本(TLSv1.3)

Apache 日志字段详解 (CentOS 7 默认格式扩展版)

  1. 字段一:客户端IP地址 (Remote Host)
    作用: 记录发起请求的客户端 ip 地址
    示例: 192.168.1.1
  2. 字段二:远程逻辑用户名 (Remote Logname)
    作用: 记录客户端标识(RFC 1413标准)
    示例: -(几乎总是连字符)
    说明: 该字段已废弃,99%情况显示为 - (现代系统默认禁用ident服务)
  3. 字段三:认证用户名 (Remote User)
    作用: HTTP基础认证的用户名
    示例:
    -(未认证)
    admin(认证用户)
  4. 字段四:请求时间戳 (Time)
    格式: [日/月/年:时:分:秒 时区]
    示例: [26/Jun/2025:15:32:45 +0800]
  5. 字段五:请求行 (Request Line)
    格式: “请求方法 URI 协议版本”
    示例: “GET /wp-admin HTTP/1.1”
  6. 字段六:最终状态码 (Status Code)
    作用: 服务器返回的HTTP状态码
    常见值:
    200:成功
    301/302:重定向
    404:未找到
    403:禁止访问
    500:服务器错误
  7. 字段七:响应大小 (Bytes Sent)
    作用: 返回给客户端的字节数(不含响应头)
    示例:
    1234:返回1234字节
    -:空响应(如304)
  8. 字段八:来源页面 (Referer Header)
    作用: 记录请求来源的URL
    示例:“https://www.shodan.io/host/1.2.3.4”
  9. 字段九:用户代理 (User-Agent Header)
    作用: 客户端浏览器/工具标识
    结构解析:
    Mozilla/5.0 (操作系统; 平台信息) 引擎/版本 应用/版本


查询攻击者使用的操作系统

原理:

利用安全日志查找攻击者使用的操作系统

详细步骤(注:此日志文件是我自定义的,请以实际为准)

  1. 优先找到攻击者的 IP
awk '{print $1}' /var/log/httpd/access_log | sort |uniq -c | sort -nr

工作原理
查找攻击者IP详情

在这里插入图片描述

  1. 过滤 ip 查询日志
grep '192.168.42.205' /var/log/httpd/access_log | head -n 10

工作原理

  1. grep ‘192.168.42.205’ /var/log/httpd/access_log
    grep直接在文件 /var/log/httpd/access_log 中搜索包含字符串192.168.42.205的行(即该IP的访问记录)

  输出所有匹配的项

  1. | head -n 10
    通过管道 |grep 的输出传递给 head 命令

  head -n 10 截取前10行结果并显示

grep命令详解

在这里插入图片描述
由此可以得出攻击者操作系统为:X11; Linux x86_64; rv:68.0

注:因为User-Agent可以被伪造,不能直接作为攻击者操作系统的证据,只能作为间接参考,可以结合结合TCP指纹TTL值等网络层分析加以佐证,因为此篇涉及不到,以后有机会再讲



查找攻击者所使用的资产收集平台


核心思路
攻击者常使用自动化平台扫描互联网资产,这些平台会在服务器日志中留下特征痕迹(如 User-AgentReferer 字段)
注:
User-Agent 是 HTTP 请求头的一部分,用于标识发起请求的客户端软件信息
Referer 表示当前请求是从哪个网页链接过来的
也就是日志详解中的字段八字段九


常见的资产收集平台
ShodanZoomEyeCensysFofaIVRE

常见资产收集平台特征

  1. Shodan
    User-Agent 特征:ShodanShodan/1.0
    Referer 特征:http://shodan.io

  2. ZoomEye
    User-Agent 特征:ZoomeyeBotZoomeye
    Referer 特征:https://www.zoomeye.org

  3. Censys
    User-Agent 特征:CensysInspectCensys
    Referer 特征:https://search.censys.io

  4. Fofa
    User-Agent 特征:FOFAfofa.pro
    Referer 特征:https://fofa.info

  5. IVRE
    User-Agent 特征:IVRENmap 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 :忽略大小写(匹配ShodanSHODAN
  • -E :启用正则表达式( | 表示逻辑或)

在这里插入图片描述

方法二:
如果不知道资产收集平台可以使用
过滤 ip 查询日志命令:

grep '192.168.42.205' /var/log/httpd/access_log | head -n 10

在这里插入图片描述



查找攻击者所使用的目录扫描工具


查找目录扫描工具与前两个相比比较难以理解,所以我就以更加通俗易懂的方式讲解

核心思路
攻击者使用工具扫描网站目录时,会在日志中留下独特的指纹,就像不同的人会留下不同的脚印。我们通过分析这些“脚印”来推断使用了什么工具

理解核心原理(为什么能检测?)
每种扫描工具都有"身份证特征":

  1. User-Agent:相当于"工具名片"
    Dirb:dirb/v2.22
    FFuf:Fuzz Faster U Fool

  2. 扫描模式:相当于"作案手法"

扫描模式
Dirb
按字典顺序扫描
FFuf
超高频率爆破
Gobuster
专找敏感文件
  1. 特殊标记: 相当于"作案签名"
    FFuf/WFuzz:在URL中使用FUZZ占位符
    Dirsearch:可能添加X-Scanner: Dirsearch头部

通过 User-Agent扫描模式特殊标记 来判断使用的是什么目录扫描工具


常见的目录扫描工具有:
dirsearchdirbffufgobusterwfuzz

工具指纹特征详解
指纹在网络安全中特指能够唯一标识特定工具、软件或攻击行为的特征组合

  1. 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"
  1. 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)"
  1. 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"
  1. Gobuster
    指纹特征:
     User-Agent:gobuster/v3.x
     模式标识:-m 参数决定扫描模式(dir/dns/vhost
     路径格式:/ +字典项(如 /admin
    日志示例:
GET /.git/HEAD HTTP/1.1" 200 23 "-" "gobuster/v3.5"
  1. WFuzz
    指纹特征:
     User-Agent:Wfuzz/2.x
     请求头标识:Host: FUZZ.target.com(域名爆破模式)
     参数占位:?param=FUZZPOST数据爆破
    日志示例:
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

在这里插入图片描述