@EggGump
2019-04-09T20:05:05.000000Z
字数 4322
阅读 837
security
本文很不错,写得十分详细,很贴近实用,作者是精通OF协议的。
本文目的提出一种检测已知和未知网络攻击并可实时发出警告,自动学习新的网络行为。
OF无法阻止switch发包给Controller,且传统攻击手段对SDN也有作用,而防御手段却不管用,OvS也更容易受到攻击,某一个主机或switch可以恶意地使整个网络变慢
网络拓扑攻击
ARP,IGMP,LLDP攻击,例如,恶意switch可以发送随机LLDP信息从而欺骗网络的链路连接性。
数据交付攻击
DDoS攻击,TCAM是存放流表的内存,DDoS攻击可以使流表溢出
传统网攻击手段
传统网中LLDP攻击可通过加密解决,ARP攻击可通过主机运行arpwatch,DAI,或静态映射来解决,然而这些方法在SDN中都不能用。
目标是为了:找到攻击,验证policies
两个假设:Controller可信,大多数Switch可信,即:
SPHINX利用流图模拟拓扑和数据层,利用控制信息进行流图构造。流图的建立是利用FLOW_MOD信息进行的,因为Controller可信。流图例子可见图1,流图时刻与最新拓扑一致。
缺陷:如果大多数的信息被篡改,那么就会使将这些信息视为可信而不发出警报;如果拓扑经常变动,会出现更高的误报。
SP利用从Controller收集到的控制信息增量建流图。
如图2是SP工作流程
SP拦截flow_mod,stats_reply,packet_in,features_reply消息提取网络拓扑信息,路由交付状态来构建网络视图并维护该流图,然后利用该流图对网络流进行监控,主要通过:自学习信息和管理员的policies进行监控。当有不信任的实体触发改变流行为或当前流违返policies时发出警告。
检测假拓扑例子:SP利用抽取的信息时刻观察网络拓扑状态和连接状态以及switch端口装态,如果packet_in信息中有LLDP,就抽取元数据进行检测:每个端口只能有一个neighbor;连接就该是双向的。
但多个恶意switch可以构建假双向连接接,SP则通过流在switch的字节统计从而确定流是否连续。
架构如图3,首先:监控所有的控制信息,再验证这些信息,最后验证处理后的网络更新。
在图3中的架构可以看到,SP垫在Controller中,以便抽取所有的:PACKET_IN,STATS_REPLY,FEATURE_REPLY,FLOW_MOD消息
网络中有三类实体:host,switch,flow。SP抽取并记录实体相关的元数据以填充表1中的特征集。
IP/MAC 标记主机,MAC/port标记流,in/out和flow match标记流的waypoint,statistics统计流的字节,包统计。同时,SP还记录具体流的主机,拓扑信息,交付状态以检测潜在的威胁。
packet_in:决定流或拓扑的开始信息
flow_mod:流路径
stats_reply:流级统计
features_reply:收集swithc配置
SP就是收集这些信息来构建拓扑。
通过穿过流图来验证网络更新对流的影响和检测相关元数据是否与应用和管理员设定的安全属性一致进行验计,为了加快速度,SP通过缓存当前路径的waypoints来决定这个更新是否满足限制,如果更新修改了path的waypionts,SP缓存也作相应修改。
限制分两类:管理员声明的和SP对具体某个流学习的。管理员限制声明使用的是SP的policy language进行的,如表2,这里假设policies都是逻辑正确的。
subject:流标志
object:traffic 属性
opearation:关系,给定流如何到达object
trigger:when to check
SP把policy给verifier,verifier抽取流的相关特征进行check。图4是一个例子。
当SP发现有异常时就发出alarm,如:从路由来的流统计信息与流当前路径不符。同时,Controller利用本地算法确保计算出的路径可达,无环,无黑洞等。
Algorithm1说明了验证步骤:
验证 有三种:packet level,path level,flow level。
packet-level的元数据在具体的pcket_in包里,path-level元数据指网络的交付状态,packet-level和path-level信息在packet_in中获得时是分开的;flow-level指量化具体的数据层交付,定期从stats_reply中获得。表3列出三个元数据类的一些不变量,表4是SP的默认policies。
Topological state constraint verification:
拓扑限制可以使用packet_in中的元数据验证,不变量被验证后,就将元数据与应用policies进行比较,偏移的行为会被标记。
Forwarding state constraint verification
交付状态验证需要验证包和流级元数据,因为假设大多数switch是良性的,因此通过对流的包统计来确认是否出错,这里提出Similarity Index ,在t时刻的为:,这里的,是第s个交换机在时刻t的统计结果,当有坏s时它的会不一样,但也会造假,但其下游的s的又会异常。当坏s注入且移走相同的包时会检测不出来,这可以使用加密机制来解决.algorithm2是流的一致性检测算法。
算法解释:输入流和流图,计算该流的路径并找到所有该path上的switch,并计算,如果结果与平均值相差较大,就报告异常。同时也监视其它不活动的switch,以保证不会有流量被注入或吸走。为阈值,当时,计算结果要在之间就算正常。太小会误报,太大会不报。例如:当一个链路丢包率为的平均值为时,的情况为:,这时如果不在时就会出警告,而以上可解出:。
如果出现alarm就让管理员进行数据核对,对于确定性验证SP就给出相应的包,链路,waypoint,对于可能性验证,SP给出switch/out-port和流。正常就将其并入SP的元数据库存起来,可疑就将相应的包丢弃。
表5列出和各Controller的不足
ARP poisoning
SP使用MAC-IP绑定,或有不一样的ARP出现就发出警告,图5给出和该绑定的policy
Fake topology
switchs:X,Y,Z,Servers:A,B。x-A,z-B,A发送坏LLDP包说这是来自Z的,这就产生了一个Z到X的单向连接,这样从B PING A就得不到回应。SP会使用流图检测拓扑图阻止单向连接的产生,也可用policy,如图6
controller DoS,给controller发送大量的packet_in,使其忙不过来,这会弄慢整个网的速度
SP会计算packet_in的发送率,越过指定阈值发出警告,图7是pocicy
netword DoS
switch间的流量环会卡网速
SP通过flow_mod定其更新流图和验证统计字节的一致性。policy见图8
TCAM exhaustion
即插入大量规则使流表溢出
SP检测流插入率,如果超过一定的值并持续就会发出 警告,图9为一个例子policy
switch blackhole
SP检查字节一致性来找该错误,如果发生了,那它的下一个S的流统计为0
10 servers(IBM x3650 M3 ,2 Intel Xeon x5675 CPU 6 cores at 3.07GHz,128GB RAM)64bit ubuntu v12.04,14 switches(IBM Rack switch G8264) 土豪
host用mininet模拟出来。
这里根据经验设置k=1.034,
Attack detection:检测时间,结果
sencitiviuty of
太大太小都不好,不是误报就是不报,合适的值很重要。
无法处理ingress 或 egress switch的,缺少现实网络大范围实验,无法检测包的完整性。
HotSDN这个会议怎么样?