作者简介: 韩心慧(1969—), 男(汉), 河南, 高级工程师。E-mail:hanxinhui@pku.edu.cn
Sybil攻击通过恶意伪造大量虚假身份,破坏对等网络(P2P)网络中正常节点的寻路过程,是分布式Hash表网络(distributed Hash table, DHT)中主要的安全威胁。该文利用社交网络中社交关系的高可信度以及伪造难度大等特点,设计了Social-DHT方法以缓解DHT网络中Sybil攻击的影响。该方法采用基于社交关系的随机游走策略以构建相对可信的路由表,继而可以有效抵御Sybil恶意节点的影响,实现安全、高效的寻路过程。此外对该方法建立模型,对路由表的可信性和寻路阶段的成功概率进行了理论分析。仿真实验表明: 在有10 000条攻击边的情况下节点路由表中Sybil节点比例不超过3%, 搜索成功率则能够达到99%, 并且在搜索速度和带宽开销等方面优于已有的算法。
The Sybil attack, which creates a large amount of fake node identities to break the normal routing process in the peer-to-peer (P2P) networks, is the main threat faced by distributed networks. A Social-DHT protocol was developed using the properties of social relationships to mitigate Sybil attacks in distributed Hash table (DHT) networks using random walks over the social relationships. In addition, a model is given using a formalized definition to analyze the successful probability of searches. Simulations show that the Social-DHT routing table includes less than 3% of the Sybil nodes when there are 10000 attack edges and the successful search ratio reaches 99%, which is better than existing methods.
作为结构化对等(peer-to-peer, P2P)网络[1]的核心组网技术,分布式Hash表(distributed Hash table, DHT)[2,3,4,5]已得到学术界的广泛研究和工业界的大量应用,但其安全问题也日益突出。Sybil攻击就是目前P2P网络中最常见的威胁之一。Sybil攻击是指恶意者以大量不同身份创建虚拟节点(Sybil节点)加入系统,并利用这些Sybil节点发动后续攻击[6]。
在高度开放的P2P网络中,普通用户很难在众多节点中区分Sybil节点。目前对Sybil攻击虽然已经有了一些防范方法,如权威验证[7]、物理网络特性[8,9]、计算谜题[10,11]等,但是这些方法都存在一些缺点和不足。本文试图寻找某种节点及其连接关系中某些固有的、难以篡改的属性,用以区分正常节点和Sybil节点,从而消除Sybil攻击对P2P网络运行安全的威胁。
Sybil攻击自2002年由Douceur首次提出[6]后,逐渐成为众多其他攻击的基础,引起研究者广泛关注。目前已经存在几种典型的防范方法:
一种限制任意生成节点ID的方法就是引入可信的权威验证机构来负责ID的生成和分发[7],但中心化的验证机构增加了运行成本,并引入了单点故障隐患。Wang[8]以及Bazzi和Konjevod[9]则分别提出了一种基于物理网络特性的身份鉴别机制,他们利用IP、 MAC地址、 RTT值来防止身份劫持,或定义一种根据网络距离生成的网络坐标来检测节点的唯一性,从而扼制Sybil攻击。这种方法的缺点在于不能容忍网络环境的任何变化。而P2P网络的一个特点就是高动态性,因此难以在安全性与网络抖动容忍程度间做出权衡。此外,张韧[10]和Rowaihy[11]分别提出了一种基于谜题计算的机制,使攻击者生成ID的开销急剧增加,从而扼制计算资源有限的攻击者。但这类方法也不可避免地增加了正常节点加入网络时的开销。
随着社交网络的发展,也有很多研究者注意到了社交关系一定程度上反映出人与人之间的社会关系。由于建立社交关系需要高成本的社会工程工作,攻击者很难与正常用户建立大量关系,因此这种关系具备较好的可靠性和真实性,可以用于防御Sybil攻击。Prateek Mittal[12]提出了X-Vine方法,在一定条件下能够有效限制Sybil攻击,但通信效率会显著下降。Chris等提出了Whanau方法[13,14],采用随机游走的方式来填充节点路由表。这种方法的一个缺点是: 节点需要维护大量的路由表信息并实时更新,另外节点间还需频繁进行消息同步,实际操作极为复杂。Sergio等[15]提出的SPROUT方法也利用朋友节点进行路由,但该方法要求朋友必须在线,并且对于朋友关系较少的用户意义不大。
上述3种典型的基于社交网络的方法虽然在匿名性、可信性等方面得到了提高,但在系统开销、适用性等方面存在缺陷。本文提出一种基于社交关系的Social-DHT网络,以在较低的计算和网络开销下改进DHT网络的路由表构建和寻路过程,缓解Sybil攻击带来的影响,从源头上遏制各种依赖于Sybil攻击的恶意行为。
Social-DHT的基本定义与Chord[4]、 Kademlia[5]等已有的DHT协议相似。每个节点拥有一个160-bit的ID, 在加入系统时随机生成,并维护一个路由表记录邻居节点; 数据在Hash之后对应到一个160-bit的目标key, 和数据以键值对的形式存储于DHT网络中; 网络上的任意节点可以发布和搜索任意数据。
Social-DHT与现有的第三代结构化DHT网络具有很强的相似性,尤其是与Kademlia网络基本可以保持协议兼容; 而现有的结构化DHT网络按照本节所述方法进行少量修改,也可以将Social-DHT的特性引入到自己的网络中,增强抗Sybil攻击的能力。
节点在启动加入Social-DHT网络时,首先会获得一组其在社交网络中的朋友节点信息,通过与这些节点联系,形成一个在网络中的可信的在线朋友节点列表,辅助后续的操作。由于用户联网的IP和端口是随着时间和上下线动态变化的,系统需要提供一个初始化服务——BOOT服务,实时记录和更新节点地址信息,并且负责向服务商请求社交关系数据。
如图1所示,每个节点在启动客户端时,客户端首先要联系BOOT服务,并授权该服务可以获取自己在社交平台的信息,授权成功后方可通过该服务获得自己朋友节点的通信地址列表。
由于目前主流的社交平台都已经集成了OAuth 2.0开放授权标准[16],并提供相关AP[17,18,19], Social-DHT网络可以基于Oauth协议来获取社交网络中的社交关系。使用该协议,每个用户都只能获取自己的社交关系信息,且第三方应用只有在得到用户许可之后才能得到该用户的信息,而不能随意获取任意用户的信息。所以Social-DHT网络本身不会对用户隐私构成威胁。
在DHT网络中,数据的发布和搜索均依赖于对目标key的路由过程,即找到ID离目标key最近的若干节点。因此,在路由过程中抵抗Sybil攻击,保证安全和高效非常重要。
定义Social-DHT中Sybil攻击敌手模型:
1) 攻击者可以生成任意数量的Sybil节点;
2) Sybil节点与正常节点间的社交关系数量有限,但Sybil节点之间可以建立任意社交关系;
3) 攻击者不能窃取正常用户间的社交关系,也不能窃取或劫持正常用户的通信地址;
4) Sybil节点不必遵循Social-DHT协议,可向任何节点发送请求,可返回任何对自己有利的应答。
Social-DHT网络设计的SETUP过程和LOOKUP过程,可以抵御Sybil攻击造成的影响(图2)。
在SETUP阶段,节点通过长度为 ω的随机游走方法扩充路由表。一次随机游走是指从一个节点出发,随机地选择下一跳,行进多步后最终到达另一个节点。在Social-DHT中路由表分为2部分,其中buddy列表用于快速定位搜索目标所在的局部ID空间。ID空间会被划分成多个相对较小的子空间。设 k表示节点ID前缀相同的比特数,认为前缀相同的节点属于同一个子空间,则ID空间被划分成2 k个连续的区间。在每个区间里寻找若干节点,这些节点就组成了路由表中的buddy列表。路由表的另一部分称为sibling列表,保存离本节点较近的一些节点,使得每个节点都知道足够多的离自己较近的节点。
在LOOKUP阶段,搜索节点首先从buddy列表中选择目标key所在子空间中的节点,然后通过他们在目标子空间中进行基于sibling列表的随机游走,获得目标区域中的节点; 重复 m次,获得 m个节点; 迭代地向这 m个节点请求离目标key最近的若干节点,并根据与目标key的距离进行排序,选出最近的下一批节点; 最后向最接近目标的 d个节点发送请求消息(或发布消息), 查询(发布)它们是否拥有目标key对应的value。
对Social-DHT网络建立模型:
1) 系统有 n个遵循系统协议的正常节点;
2) 系统存在一些恶意的Sybil节点,其行为是任意的,例如拒绝应答、延迟应答或者应答虚假信息等,且Sybil节点间可能形成合谋;
3) 根据Social-DHT的定义,所有节点都必须拥有两重身份,即社交网络身份和DHT网络身份。
攻击者要参与到网络中,必须建立一定的社交关系。虽然Sybil节点间可以建立任意数量的社交关系,但是想要在Sybil节点与正常节点间建立一个社交关系需要许多持久频繁的人为互动,即社会工程的工作,因此Sybil节点并不能做到与大量正常用户建立起社交关系。
把节点间基于社交关系形成的网络结构看作一个连通的无向图G, 用户是图中的顶点,用户间的朋友关系是图中的边。把这个图分成2部分,正常节点组成的正常区域和Sybil节点组成的Sybil区域。Sybil节点与正常节点之间建立的边称为攻击边(attack edge)。由于社会工程工作量巨大,可以认为攻击边的数量 g相对整个网络中的正常节点的数量 n来说是非常小的,即 g≪ n。
对图G, 令
其中:
当 ω=O(log2 n)时,图被称为是快速混合(fast mixing)的,即从任意一点开始的如图3所示的一段随机游走的终点接近平稳分布[20]。
将从正常节点起始后经过一条攻击边的随机游走称为逃逸游走。逃逸概率 pv表示从节点 v开始的随机游走逃逸的概率,根据每个节点的逃逸概率来排序节点{ v1, v2,…, vn}, 使得
随机选择一个正常节点,进行一步随机游走,这一步经过攻击边的概率为 g/m( m代表正常边和攻击边的数量和), 经过正常边的概率为1 -g/m。经过多次重复此过程, ω步长的随机游走保留在正常区域中的概率为(1 -g/m) ω>1 -gω/m, 通过代数式变换:
得:
如果 g≪ n/ω, 则所有成功节点 v的逃逸概率为:
相反,如果成功节点的逃逸概率不大于 pv, 那么失败节点的数量不超过:
则将RANDOM-WALK分布重写成一个统一的部分加一个攻击者影响部分
换句话说, RANDOM-WALK( u)可以解释为1 /α的概率返回一个正常节点, 1 -1 /α的概率返回一个攻击者控制的节点。当 g≪ n时,在具有快速混合性质的社交关系图上的一次随机游走会大概率地返回一个正常节点而非Sybil节点[13],可知攻击者的影响微乎其微, α正向趋近于1。因此基于随机游走构建的路由表中大部分将是正常节点。
当一个攻击者拥有最多 g条攻击边时,如果至少(1 -ε) n的正常节点的搜索过程成功概率大于50%, 即可将其定义为抗Sybil攻击的[14],其中 ε代表拥有Sybil节点为朋友的节点比例。本节将证明Social-DHT网络满足这样的定义。
在SETUP阶段,节点需要在全网进行随机游走来扩充buddy列表。设一轮更新buddy列表后希望能够获得至少 rnb个正常节点,游走过程总共获得 rb个节点。设整个DHT网络ID空间平均划分成2 k个区域,由于节点ID是随机产生的,节点会均匀分布在ID空间中。获得的buddy节点也是均匀分布在整个ID空间中,平均每个子区域中正常buddy节点的数量至少为 rnb/2 k。设一轮更新sibling列表后希望能够获得至少 rns个正常节点,而获得sibling节点的总数量为 rs。由于sibling列表中节点近似于该子区域中的随机选取的节点,如果 rs足够大,那么基于sibling关系组成的该子区域内的网络结构依然具备快速混合的性质。
LOOKUP过程分为了2阶段,第一步依赖buddy节点定位到目标key所在的特定子区域中的节点。如果第一步询问的是恶意节点,那么整个LOOKUP过程就直接被恶意节点控制了,这种情况的概率为1- rnb/ rb。第一步找到了特定区域中的某个正常buddy节点后,需要在该子空间中进行随机游走,显而易见的是节点的搜索总是能成功,只要它一直在子区域中进行随机游走,直到找到保存目标key的节点位置。一次随机游走是有效的当且仅当这次随机游走到达的节点是一个成功节点且之前没有被询问过。
设发布冗余量为 d, 即目标key的信息会发布在节点ID离key最近的 d个节点上。每次随机游走相当于在 k-bit空间中随机选择一个节点,重复 m次,得到 m个随机的节点,其中正常节点的数量为 m/α, 每个节点提供询问者它们所知道的离key最近的 d个节点,就是 dm/α个离key附近的节点,最终要保证 dm/α个节点中至少有一个是目标key的 d个索引节点之一。
假设每个节点作为sibling的概率相同,即节点近似于等概率的随机选取所在区域中的节点加入sibling列表,因此一个节点没有被某个节点加入sibling列表的概率为:
一次LOOKUP到达的 m/α个正常节点的sibling列表都没有 d个索引节点的概率为:
因此LOOKUP过程能够找到索引节点的概率为:
当 rns≥100, 5≤ d≤10, 1≤ m≤5, α→1时, LOOKUP的搜索成功概率将大于50%。根据本节开头的定义可知, Social-DHT是一个抗Sybil攻击的网络。
根据前文对Social-DHT的设计,本研究在模拟实验工具OverSim的基础上实现了Social-DHT的仿真系统。首先添加了一个SocialTopology模块,可以将外部输入的社交关系信息导入DHT网络,并赋予每个节点自己的朋友关系; 其次在Overlay层提供了节点加入网络、初始化路由表、搜索和发布接口。而网络中的Sybil节点总是做出对自己有利的行为:
1) 在SETUP过程中,接收到随机游走消息时立即将自己返回给发起节点,使得发起节点将其加入路由表中; 接收到获取sibling节点的请求时,返回满足该子空间要求的Sybil兄弟节点;
2) 在LOOKUP过程中,接收到随机游走消息时立即将自己返回给发起节点,使得发起节点将其用于后续的步骤中; 接收到发布请求时,返回发布成功,但并不真正存储数据; 接收到搜索请求时,返回虚假的节点信息或value值。
为了测量LOOKUP成功率,每个节点将发布一对随机的key-value存储到网络上,然后从网络上随机挑选10个节点对该key进行搜索,检查是否能够获得正确的结果。
本文使用了Alan Mislove 2009年的工作[21]中使用的Facebook数据来作为本文后续实验所用的社交网络数据。为了保证与其他相关工作做对比,本文同样不考虑图中节点度数小于5的节点。最后该数据集包含节点43 404个,边778 219条,节点的平均度数为36.66。随机挑选一些节点作为随机游走的起点,统计多次游走的终点分布情况。
图4展示了不同步长情况下随机游走终点的分布概率累计图,可以看到该实验数据基本接近快速混合性质的理想情况。
本节将首先验证Social-DHT方法构建出的路由表在ID空间中分布较为均衡,经过更新操作后各表项填充率较高,可以满足后续搜索过程的要求。最后实验了在不同Sybil攻击强度下Social-DHT的搜索成功率。
图5显示了将ID空间进行7比特等分后的节点覆盖情况。可以看到,平均每个子空间都有77.65%的节点拥有属于该子空间的buddy节点。空间等分越细, buddy节点覆盖子空间的比例将会越小。为了满足节点buddy列表能够尽量覆盖各个子空间,等分程度不能过细,因此本文后续实验都采样7比特等分。
图6显示了每个节点利用自己的朋友关系进行一轮buddy节点更新后所获得的buddy节点数量。有24.6%的节点获得了128个不同的buddy节点,超过50%的节点获得了至少126个buddy节点, 97.3%的节点获得了至少90个不同子空间中的buddy节点。证明buddy节点更新过程是有效的。
图7显示了每个节点利用朋友关系进行一轮sibling节点更新后所获得的在自身子空间中的sibling节点数量。数据表明, 94.29%的节点获得了150~200个sibling节点,没有任何节点获得了少于100个sibling节点。证明sibling节点更新过程是有效的。
在LOOKUP阶段,定义每个针对目标key的搜索成功次数与总搜索次数之间的比例为搜索成功率。当攻击边分别是100、 500、 1 000条且随机分布在ID空间中时,图8展示了对所有key的搜索成功率的累积分布。可以观察到,只有极小比例的key搜索成功率低于90%, 而大部分高于99.5%。
现有的Whanau方法[13,14]与本文提出的Social-DHT具有一定的相似性,都利用了社交网络的快速混合性质作为抵御Sybil攻击的核心,都采用随机游走来辅助路由表的建立与寻路过程,但是Whanau的迭代过程过长,而Social-DHT借助其独特的路由表构造,在LOOKUP过程的第二阶段针对特定子空间持续进行随机游走,可以迅速绕过Sybil节点的干扰而找到目标节点,搜索过程收敛快,从而获得更优的性能以及抵御Sybil攻击的效果。本文选择Whanau方法作对照实验,且采用与论文[13]中相同的设置。主要系统参数如表1所示。
![]() | 表1 Social-DHT与Whanau对比实验参数 |
图9展示了在建立路由表阶段,经过一次更新操作后两种方法各自路由表中的Sybil节点数量占比。可以看出二者效果大致相当,当攻击边数量较大的时候, Social-DHT方法的sibling列表中Sybil节点增长较快。图10展示了两种方法在取得这样的路由表效果时各自的带宽开销情况,即考虑消息数量和消息大小等。可见Social-DHT以相对更小的代价获得了与Whanau几乎一样好的路由表结果。
![]() | 图10 Social-DHT与Whanau建立路由表带宽开销对比 |
图11展示了在不同攻击边数量下2种方法搜索到第一条数据与最后一条数据所需的消息量。可以看到, Social-DHT获得第一条消息的开销大体平稳,维持在16个左右,而且搜索过程不会拖得很长。而Whanau每一轮迭代都会向某些节点发送数据查询请求,延长了获得所有数据信息的时间跨度。
![]() | 图11 Social-DHT与Whanau获得数据所需消息量对比 |
本文设计了一种基于社交关系的缓解Sybil攻击的Social-DHT方法。该方法利用了攻击者难以在社交网络中建立大量社交关系这一事实,通过基于社交关系的随机游走来建立路由表,使得Sybil节点很难影响寻路过程。而且Social-DHT只在构建路由表阶段使用了社交关系,以较小容量的路由表、较低的计算和带宽开销就能抵御Sybil节点的干扰,优于现有方法采用的策略。
在此基础上,本文分析了Social-DHT的搜索成功概率,通过仿真系统进行模拟实验,从路由表恶意节点侵占比例、搜索成功率、搜索开销等不同方面对Social-DHT方法进行评估,证明其具备实际应用价值; 同时本文也将该方法与现有同类方法进行了对比实验,实验结果优于现有方法。
[1] |
|
[2] |
|
[3] |
|
[4] |
|
[5] |
|
[6] |
|
[7] |
|
[8] |
|
[9] |
|
[10] |
|
[11] |
|
[12] |
|
[13] |
|
[14] |
|
[15] |
|
[16] |
|
[17] |
|
[18] |
|
[19] |
|
[20] |
|
[21] |
|