基于图查询的攻击溯源方法
字数 1450 2025-08-29 08:32:18
基于图查询的攻击溯源方法教学文档
1. 概述
本文档详细介绍了如何利用图数据库技术进行网络安全攻击溯源分析的方法。该方法通过构建访问日志图谱,利用图查询技术追踪攻击路径,有效解决了传统日志分析中存在的多IP干扰、shell转手贩卖等问题。
2. 背景与原理
2.1 传统溯源方法的局限性
传统攻击溯源方法通常:
- 从后门文件开始分析
- 追踪攻击者IP
- 排查该IP的所有攻击日志
- 发现其他后门文件
- 最终定位初始攻击点
这种方法在遇到shell转手贩卖时,会面临多个IP访问的干扰问题,难以区分真实攻击者和黑灰产从业者。
2.2 图数据库的优势
图数据库通过:
- 建立节点和关系模型
- 可视化展示数据关联
- 支持高效的图遍历查询
- 能够发现隐藏的模式和关系
特别适合用于分析复杂的网络攻击路径。
3. 图谱构建方法
3.1 数据来源
主要使用Apache的access.log文件,典型日志格式如下:
39.98.124.123 - - [25/Apr/2020:00:15:07 +0800] "GET /data/admin/allowurl.txt HTTP/1.1" 404 1706 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0"
3.2 数据抽取
从日志中提取以下关键信息:
- 访问IP
- 访问时间
- 访问方法(GET/POST等)
- 访问URL
- 返回状态码
- 返回页面长度
- User-Agent
Python处理代码示例:
line = line.strip().split(' ')
ip, time, method, url, status, res_length, ua = line[0], line[3].strip("["), line[5].strip('"'), line[6].replace('//', '/'), line[8], line[9], ' '.join(line[11:-1]).strip('"').replace(',', '')
3.3 图谱模型设计
采用三类CSV文件构建图谱:
- IP节点文件(ipItem.csv)
:ID,ip,:LABEL
ef7c4963c93ddac508eef1025ce5922a,46.229.168.163,IPITEM
- URL节点文件(urlItem.csv)
:ID,url,:LABEL
e624da5a6e37b271147c2d59cfb90ed8,"/robots.txt",URLITEM
- 关系文件(relationship_ip_url.csv)
:START_ID,time,method,query,res_length,ua,:END_ID,:TYPE
ef7c4963c93ddac508eef1025ce5922a,29/Jun/2020:00:11:51,GET,"",1706,"Mozilla/5.0 (compatible; SemrushBot/6~bl;",e624da5a6e37b271147c2d59cfb90ed8,404
3.4 数据导入
使用neo4j-import工具导入数据:
./neo4j-import --nodes ~/Desktop/data/ipItem.csv --nodes ~/Desktop/data/urlItem.csv --relationships ~/Desktop/data/relationship_ip_url.csv --into ../data/databases/graph.db
4. 图谱查询与分析
4.1 基本查询方法
查询特定后门的访问IP
MATCH path=(p:IPITEM)-[r:`200`]->(q:URLITEM)
WHERE q.url = "/plugins/layer/mobile/need/wwConapp.php"
RETURN path
查询目录下所有文件的访问记录
MATCH path=(p:IPITEM)-[r:`200`]->(q:URLITEM)
WHERE q.url CONTAINS "/plugins/layer/mobile/need"
RETURN path
4.2 进阶溯源方法
可疑IP的所有访问路径
MATCH path=(p:IPITEM)-[r:`200`]->(q:URLITEM)
WHERE q.url CONTAINS "Conapp.php"
WITH DISTINCT p AS m
MATCH path1=(m)-[r:`200`]->(n:URLITEM)
WHERE SIZE((m)--(n)) > 1
RETURN path1
LIMIT 500
可疑URL的所有访问路径
MATCH path=(p:IPITEM)-[r:`200`]->(q:URLITEM)
WHERE q.url CONTAINS "Conapp.php"
WITH DISTINCT p AS m
MATCH path=(m)-[r:`200`]->(n:URLITEM)
WHERE SIZE((m)--(n)) > 1
WITH DISTINCT n AS y
MATCH path=(x:IPITEM)-[r:`200`]->(y:URLITEM)
WHERE SIZE((x)--(y)) > 1 AND y.url <> '/'
RETURN path
LIMIT 500
深度溯源查询
MATCH path=(p:IPITEM)-[r:`200`]->(q:URLITEM)
WHERE q.url CONTAINS "Conapp.php"
WITH DISTINCT p AS m
MATCH path=(m)-[r:`200`]->(n:URLITEM)
WHERE SIZE((m)--(n)) > 1
WITH DISTINCT n AS y
MATCH path=(x:IPITEM)-[r:`200`]->(y:URLITEM)
WHERE SIZE((x)--(y)) > 1 AND y.url <> '/'
WITH DISTINCT x AS a
MATCH path=(a:IPITEM)-[r:`200`]->(b:URLITEM)
WHERE SIZE((a)--(b)) > 1
RETURN path
LIMIT 300
5. 实战案例分析
5.1 案例背景
从后门文件"plugins/layer/mobile/need/wwConapp.php"开始溯源,发现攻击者IP为115.238.195.188。对该IP的攻击日志排查发现攻击者是从另一个后门文件"/search/2.php"进入。
5.2 溯源步骤
- 通过图查询发现115.238.195.188曾对同目录下的Conapp.php进行大量操作
- 排查该IP的所有访问记录,发现其访问过/search/2.php
- 溯源/search/2.php的访问记录,发现112.114.100.152曾大量操作该文件
- 进一步溯源发现180.126.246.121和58.219.159.109尝试过模板注入攻击
- 确认这两个IP为同一团伙,均为盐城东台电信IP
5.3 发现的关键点
- 攻击时间线清晰可见
- 多个攻击者之间的关系明确
- 攻击路径可视化展示
- 攻击手法(模板注入)可识别
6. 优化与扩展
6.1 现有方法的不足
- 图数据库可视化功能有限
- 复杂查询需要编写较长的Cypher语句
- 对攻击类型的识别不够自动化
6.2 改进方向
-
增强可视化
- 开发专门的JS可视化界面
- 支持时间轴展示
- 添加攻击类型标记
-
智能分析
- 自动识别攻击特征(如模板注入{if:}{endif})
- 攻击模式学习
- 异常行为检测
-
节点细化
- 将URL节点拆分为目录和文件节点
- 添加攻击类型节点
- 建立更丰富的关联关系
7. 总结
基于图查询的攻击溯源方法相比传统方法具有明显优势:
- 能够处理复杂的多IP攻击场景
- 可视化展示攻击路径
- 支持高效的关联查询
- 便于发现隐藏的攻击模式
随着图数据库技术的不断发展,这种方法在网络安全领域的应用前景广阔,特别是在APT攻击溯源、威胁情报分析等方面具有巨大潜力。