一、攻击溯源技术总览:IP溯源、包标记、日志关联、机器学习溯源、基于图分析的溯源

各位好,我是老周。今天咱们聊聊核心网DDoS攻击溯源这件事。

说实话,溯源这个事,在安全圈里一直是个老大难。你想想看,攻击流量从四面八方涌过来,你看到了攻击,但你知道它从哪来的吗?很多时候,我们只能看到被攻击的目标,却抓不到攻击的源头。嗯,这就是我们今天要解决的问题。

1.1 为什么溯源这么难?

先说说难点在哪。核心网里,流量经过的节点太多了。攻击者随便用个IP伪造技术,就能把源地址改得面目全非。我记得有一次在项目中,客户说被攻击了,我一看流量特征,源IP全是随机生成的。这怎么追?

还有一个问题——数据量太大。核心网每秒几百万个包,你不可能全存下来。存下来也分析不过来。所以,溯源技术的关键,就是在海量数据里找到那根「线头」。

核心观点:溯源不是找到攻击者的真实IP,而是找到攻击流量的入口点。这个入口点,可能是某个边缘路由器,也可能是某个运营商的出口。

1.2 IP溯源——最基础的方法

IP溯源,说白了就是顺着IP地址往回找。但这里有个坑——IP地址是可以伪造的。攻击者发一个包,源IP写的是假的,你顺着这个IP去找,找到的可能是某个无辜的路由器。

那怎么办?我个人的习惯是,不要只看IP,要看路径。比如,你可以用反向路径转发(uRPF)技术。这个技术会检查:这个包进来的接口,是不是去往源IP的最佳路径?如果不是,那就说明源IP被伪造了。

我在项目中遇到过这样的情况:某运营商内部被DDoS攻击,流量从多个方向涌来。我们用uRPF一查,发现大部分流量都是从同一个上游接口进来的。这就锁定了攻击的入口点。

小技巧:uRPF有两种模式——严格模式和松散模式。严格模式要求源IP的路径必须和入接口匹配,松散模式只要求路由表中存在这个源IP。我建议在核心网边缘用严格模式,内部用松散模式。

1.3 包标记——给每个包打上「身份证」

包标记的思路很有意思。每个路由器在转发包的时候,在IP头里写一点信息。这样,当攻击包到达目标时,我们可以从这些标记里读出它经过的路径。

最经典的是概率包标记(PPM)。每个路由器以一定的概率(比如1/20000)在IP头的标识字段里写入自己的信息。攻击者发100万个包,大概有50个包会被标记。把这些标记拼起来,就能还原出路径。

嗯,这里要注意:包标记需要所有路由器都支持。我曾经在一个项目中部署PPM,结果发现有一台老旧的思科路由器不支持这个功能。那台路由器成了「黑洞」,所有经过它的包都没有标记。后来我们只能换设备。

// 概率包标记的简化逻辑
if (random() < MARK_PROBABILITY) {
    // 写入当前路由器的ID
    ip_header.fragment_id = router_id;
    // 记录跳数
    ip_header.flags = hop_count;
}

避坑指南:我曾经遇到过一个问题——包标记会修改IP头的标识字段。如果下游设备依赖这个字段做分片重组,就会出问题。所以,部署前一定要确认你的网络设备兼容性。

1.4 日志关联——把碎片拼成拼图

日志关联,说白了就是把各个设备的日志串起来。核心网里的路由器、防火墙、入侵检测系统,每个设备都在记录日志。但这些日志是孤立的。你需要把它们关联起来,才能看到攻击的全貌。

怎么做?我常用的方法是时间窗口关联。比如,防火墙在10:00:01记录了一个攻击包,路由器A在10:00:00记录了同一个包。这两个时间差就是传播延迟。通过这个延迟,可以推断出攻击路径。

还有一个方法——NetFlow关联。NetFlow记录了每个流的五元组信息(源IP、目的IP、源端口、目的端口、协议)。把多个设备的NetFlow数据关联起来,就能画出攻击流量的传播路径。

日志类型 关联方法 优点 缺点
Syslog 时间窗口 数据量小 时间同步要求高
NetFlow 五元组匹配 信息丰富 数据量大
PCAP 包特征匹配 最精确 存储成本高

个人经验:日志关联最怕时间不同步。我建议所有设备都用NTP同步时间,精度至少到毫秒级。否则,你关联出来的路径可能是错的。

1.5 机器学习溯源——让算法帮你找线索

传统方法搞不定的时候,就该机器学习上场了。你想想看,攻击流量和正常流量在行为模式上是有区别的。机器学习可以学习这些模式,然后自动识别攻击源。

我常用的方法有几种:

  • 聚类分析:把相似的流量聚在一起。攻击流量通常有相似的特征(比如相同的包大小、相同的TTL值),聚类后就能找到攻击源。
  • 异常检测:建立正常流量的基线,然后检测偏离基线的流量。比如,某个IP突然发了大量SYN包,那它可能就是攻击源。
  • 分类算法:用决策树或随机森林,把流量分成「正常」和「攻击」两类。训练好了,就能实时判断。

我记得有一次,客户被一种新型DDoS攻击,传统规则完全检测不到。我们用聚类分析,发现所有攻击流量的TTL值都是128。正常流量TTL值分布很广,128的很少。就凭这个特征,我们锁定了攻击源。

注意:机器学习不是万能的。它需要大量标注数据来训练。如果攻击模式变了,模型可能失效。我建议定期重新训练模型,至少一个月一次。

1.6 基于图分析的溯源——画出攻击的「关系网」

图分析,是我个人最喜欢的方法。为什么?因为网络本身就是一张图。路由器是节点,链路是边。攻击流量在这张图上流动,自然会留下痕迹。

怎么做?把每个网络设备、每个IP地址都看作一个节点。节点之间的通信就是边。然后,用图算法(比如PageRank、社区发现)来分析这张图。

举个例子:攻击者控制了一堆僵尸主机,这些主机都向同一个目标发起攻击。在图里,这些僵尸主机和目标之间有很多边。用社区发现算法,可以把这些僵尸主机聚成一个社区。这个社区的「中心」就是攻击者的控制服务器。

基于图分析的攻击溯源流程 攻击者 C2 Bot1 Bot2 Bot3 核心网 目标 图分析:社区发现 → 找到C2服务器 → 溯源到攻击者

图分析的好处是,它能发现隐藏的关系。比如,两个僵尸主机看起来没有直接联系,但它们都连接同一个C2服务器。在图里,这个关系一目了然。

实战技巧:图分析需要处理大量节点。我建议先用图数据库(比如Neo4j)来存储和查询。关系型数据库处理图数据太慢了。

1.7 五种技术的对比与选择

说了这么多,到底该用哪种?我个人的建议是:不要只用一种,要组合使用

技术 适用场景 精度 部署难度 实时性
IP溯源 简单攻击、IP未伪造
包标记 需要路径还原
日志关联 已有日志系统
机器学习 新型攻击、未知模式
图分析 复杂攻击、僵尸网络

举个例子:如果攻击流量很大,先用IP溯源快速定位入口点。然后,用包标记还原路径。如果攻击模式很复杂,再用机器学习或图分析做深度分析。

最后提醒一句:溯源不是终点,阻断才是。找到攻击源之后,要立刻在边界路由器上做ACL过滤,或者用BGP Flowspec把攻击流量引到清洗中心。我曾经见过一个团队,花了三天时间溯源,结果攻击还在继续。溯源和响应要同步进行。


专注资料整理