1、l在网络空间安全领域,黑客四处“点火”;红客则疲于奔命,忙于“救火”。由于始终被动,所以,红客笃信:远水救不了近火。但是,事实并非如此。l本章便从遥远的生物医学领域,带来传染病动力学之“远水”,试图来救病毒式恶意代码这盆“近火”。将医学传染性疾病防控的一些经典思想和理念,引入网络空间安全保障体系建设之中。1.计算机病毒与生物病毒2.死亡型病毒的动力学分析3.康复型病毒的动力学分析4.免疫型病毒的动力学分析5.开机和关机对免疫型病毒的影响6.预防措施的效果分析7.有潜伏期的恶意病毒态势8.它山石的启示人类一直与各类疾病(特别是瘟疫等)作斗争;300年前,徐光启就将数学手段引入了生物统计。如今,动
2、力学理论这一数学分支,已经催生了生物医学领域的多位诺贝尔奖。从外观和形态上看,网络空间安全与人体疾病很相似。安全界的很多名词,比如病毒、免疫力、传染等都是从医学中借用来的。但是,也许是因网络安全专家太忙,也许是因数学门槛太高,也许是因历史还不够久远等,总之,生物医学家和安全专家至今仍然是“各唱各的调,各吹各的号”。如果没有人牵线,也许他们永远都会“比邻若天涯”作者不才,愿做无偿媒婆,将生物医学(特别是生物数学)中的若干经典成果和思路,介绍给网络安全专家。若能促成医生和安全专家的此桩姻缘,也不枉丘比特借箭一回;若能吸引一批生物数学家进入网络安全领域,那就更好了。恶意代码的基础知识恶意代码是最头痛
3、的安全问题之一,它甚至是整个软件安全的核心。虽然单独对付某台设备上的指定恶意代码并不难,但是,网上各种各样的海量恶意代码,却像癌细胞一样,危害着安全,而且,既杀之不绝,又严重消耗正常体能。在过去,安全专家在对付恶意代码的微观手段方面,做了大量卓有成效的工作;可是,在宏观手段方面,成效甚少,这正是我们要向医生学习的这正是我们要向医生学习的地方。地方。狭义上说,恶意代码是指故意编制或设置的、会产生威胁或潜在威胁的计算机代码(软件)。最常见的恶意代码有计算机病毒、特洛伊木马、计算机蠕虫、后门、逻辑炸弹等。广义上说,恶意代码还指那些没有作用却会带来危险的代码,比如,流氓软件和广告推送等。本章重点考虑狭
4、义恶意代码。恶意代码的微观破坏行为,表现在许多不同的方面,比如,口令破解、嗅探器、键盘输入记录,远程特洛伊和间谍软件等等。黑客利用恶意代码便可能获取口令,侦察网络通信,记录私人通信,暗地接收和传递远程主机的非授权命令,在防火墙上打开漏洞等。恶意代码的入侵手段主要有三类:利用软件漏洞、利用用户的误操作、前两者的混合。有些恶意代码是自启动的蠕虫和嵌入脚本,本身就是软件,它们对人的活动没有要求。而像特洛伊木马、电子邮件蠕虫等恶意代码,则是利用受害者的心理,操纵他们执行不安全的代码,或者是哄骗用户关闭保护措施来安装恶意代码等。恶意代码的主要传播方式是病毒式传播,即,某台设备被恶意代码击中后,该受害设备
5、又将再去危害其它设备。恶意代码也像病菌一样,千变万化不断升级,其演化趋势表现在:种类更模糊、混合传播模式越来越常见、平台更加多样化、欺诈手段(包括销售技术等)更普遍、更加智能化、同时攻击服务器和客户端、对操作系统(特别是Windows)的杀伤力更大、类型变化越来越复杂等。幸好本文只关注宏观行为,所以,恶意代码的微观变种可以忽略不计。本章所说的恶意代码,都已经暗含病毒式传播的假设。本章的思路、方法和结果,对与病毒式恶意代码类似的所有破坏行为都是有效的。本章只关注宏观行为,所以,恶意代码的微观变种可以忽略不计。本章所有分析,都基于这样一个已知的数学事实:一切随空间和时间变化的量的数学,都属于偏微分
6、方程领域!考虑这样一类恶意代码:它给你造成不可挽回的损失后(比如,获取了你的银行卡密码并取走你的钱等),再以你的身份去诱骗你的亲朋好友;如此不断为害下去。由于它们造成的损失不可弥补,所以,称其为“死亡型”。这相当于某人染SARS病毒死亡后,会继续传染身边人员一样。有些“不转死全家”的谣言,也可看成这样的死亡型恶意代码设网络的用户数为N,在t时刻,已经受害的用户数为T(t),暂未受害的用户数为S(t),那么,有恒等式S(t)+T(t)=N。再令f(S,T)为在“已有T人受害,S人暂未受害”条件下,受害事件发生率,于是,有下面两个微分方程 dT(t)/dt=f(S,T)和 dS(t)/dt=-f(
7、S,T)在生物医学的流行病学中,有一个可借鉴的概念是传染力(T),它表示在已有T台设备中毒的情况下,暂未中毒的设备与中毒者相连接的概率,所以,f(S,T)=(T)S;另一个概念是传染率,它表示一个未中毒设备在连接到中毒者后,被传染的概率;所以,(T)=T。于是,f(S,T)=(T)S=TS,即,它是一个双线性函数。此种近似,已经过医学中的长期实际数据检验,准确度足够高;而对比病毒式恶意代码和人类疾病的传播,它们的传染特性并没有明显差别,所以,我们得到如下微分方程:dT(t)/dt=T(N-T)它的解析解为:T(t)=NT(0)/T(0)-T(0)-Ne-Nt这就是t时刻的受害者人数,其中T(0
8、)表示初始受害人数。结果显示:只要T(0)0(即,刚开始时至少有一个受害者),那么,当t时,就一定有T(t)N(全体用户数),所以,面对死亡型恶意代码,如果大家都旁观,不采取任何防护措施的话,最终将全体死亡,即全体受害。虽然现实中,大家不可能都只旁观。但这个理论结果也警告我们:网络安全,人人有责。一旦大家都重视安全,并采取了各种事前预防和事后抢救的措施后,将出现本章第三小节中的康复型恶意代码。图.初值=1,10,20;beta=0.00015;N=10000;pp310注:此小节和下面的许多分析中,我们在建立模型时都采用了诸如传染率、发生率等线性简单模型,对此我们的解释如下:1)由于在现实中,
9、根据真实的原始统计数据,人类本来就只习惯于给出这些简单且形象的各种比率,所以,在建立微分方程模型时,也只好利用这些比率(比如,此处就取f(S,T)=(T)S=TS),否则,就变成了“为数学而数学”的游戏了;2)线性(或双线性)微分方程组,相对来说,容易求出精确的解析解,并由此进行更深入的分析;3)已有大量医学数据,对此类模型的准确性进行了长期的正确性验证。与死亡型模型不同,在康复型模型中,受害用户在经过救治后,又可以康复成为暂未受害的用户,当然,该用户也可能再次受害。其实,绝大部分恶意代码,特别是诱骗类恶意代码,都是这种康复型的。比如,当你的电脑中毒崩溃后,你可以重新格式化,当然,随后有可能会
10、再次崩溃。实际上每个人的电脑可能都不止崩溃过一次。(绝大部分人对谣言的反应,也等同于这种康复型恶意代码,因为,辟谣后大部分人都会再次被谣言欺骗)在此,除了14.2节中的S、T、F(S,T)和N等概念外,我们再引入另一个概念,即g(T),它表示在T个受害者中,有g(T)个用户被康复成正常健康用户,从而,变成暂未受害用户。若用表示康复率(生物医学经验告诉我们:每个受害者,在下一小段时间t内,被康复的概率为t+0(t)2。并且受害者被康复的时间,服从均值为1/的指数分布。)那么:g(T)=T由此,我们可以得到微分方程组(见下图):dT(t)/dt=f(S,T)-g(T)=TS-T 和 dS(t)/d
11、t=-f(S,T)+g(T)=-TS+T若令u(t)=S(t)/N,v(t)=T(t)/N,t=t和R0=N/,那么,上面的两个微分方程就变为:du/dt=-(R0u-1)v 和dv/dt=(R0u-1)v其定义域为:D=0u1,0v1,u+v=1图.初值=0.1,0.9;beta=0.00015;gamma=0.0002;N=1;pp311注意:这里的R0是一个很重要的参数,其含义可以进一步解释为:R0=(N)/,它的分子部分表示一个中毒设备与N个健康设备之间的有效接触率;分母部分1/是受害者的平均染病周期,所以,R0是一个受害者在是一个受害者在一个染病周期内,平均传染的设备个数一个染病周期
12、内,平均传染的设备个数。根据R0的取值情况,可以得到如下重要结论:定理定理14.1:针对康复型恶意代码,如果R01,那么,康复型恶意代码就会在一定范围内长期为害,具体地说,受害者人数将长期徘徊在N(1-1/R0)附近。(见下图)上图.初值=0.2,0.8;beta=0.00015;gamma=0.0004;R01;N=1;pp312R01证明:由于dv/dt=(R0u-1)v(R0-1)v,所以,如果R01,那么就有dv/dt1,则由于u+v=1,所以,微分方程dv/dt=(R0u-1)v就可变为dv/dt=(R0(1-v)-1)v,其解析解为:v(t)=Kv0/v0-v0-Ke-rt。其中r
13、=R0-1,K=1-1/R0和v0=T(0)/N(初始被感染的用户比率)。于是,当t时,就有v(t)1-1/R0,或等价地说,受害者人数T(t)=Nv(t)N(1-1/R0)。证毕。定理14.1还隐含了另一个重要事实,由于最终受害者人数趋于:N(1-1/R0)=N-N/R0=N-/=N-(康复率/传染率)即,如果康复型恶意代码不能被消灭,那么,最终受害者人数将基本上由比率“康复率/传染率”决定,或者说:如果传染率大于康复率,那么,基本上会全体受害;反之,受害者人数将维持在一个较小的数目之内。简而言之,对待康复型恶意代码,只要做好安全维护工作,那么,整体局面是可控的。定理14.1还告诉我们:只要
14、控制住R0使得R00;暂未受害的用户数为S(0)=S00;还没有用户具有免疫力,即 R(0)=0。从第一个微分方程,有dS(t)/dt=-TS0,所以,随着时间t的增加,暂未受害的用户数始终减少,并且以0为下限,故极限limtS(t)=S肯定存在(已证明:S=-Lambert W-exp(-(T0+S0-lnS0)/)/)。从第二个微分方程dT(t)/dt=TS-T=T(S-),可以看出T(t)的增减性依赖于t时刻S(t)的大小。如果S0/,那么,S-S0-0,于是,dT(t)/dtT(t)0,此时,恶意代码将被最终消灭。虚线为受害终端数S0=0.45/=,那么,T(t)在某个时段内将会增加,
15、从而导致恶意代码的危害呈爆发现象。但是,随着时间的进一步推移和S(t)的递减,T(t)达到最大值后,又开始递减,并最终趋于0。由此可知,免疫型恶意代码一定存在着临界现象,即,如果S0,则受害用户数爆增;否则,如果S0/=0.1/0.4=0.25免疫型恶意代码存在着临界现象定义另一个参数F0=S0/,它刻画了一个受害者在平均染毒周期(1/)内,所传染的人数,它也给出了该种恶意代码是否爆发的阈值。即,当F01时,该恶意代码会在一定的时段内爆发,受害者人数达到一个最大值后,才开始递减,并最终消灭。F01说明一个受害者在平均传染周期内传染的人数大于1,故该恶意代码会在一定程度上爆发流行。归纳起来,可以
16、得到:定理定理14.2:针对免疫型恶意代码,当F01时,该恶意代码会在一定的时段内爆发,受害者人数达到一个最大值Tmax后,才开始递减,并最终消灭。更深入地,Tmax在总人数中所占的比例为 1-+ln(/S0)在这里S0表示刚开始时,暂未受害的人数比例。随着时间推移至无穷大,暂未受害和已有免疫力的人数的比例S和R分别为:S=-Lambert W-exp(-(T0+S0-lnS0)/)/和 R=N+Lambert W-exp(-(T0+S0-lnS0)/)/在这里,Lambert W(.)是一种特殊的数学函数。注:本定理的前半部分,是对安全界很有用的部分,已经在前面描述中给出证明;本定理的后半部
17、分,是生物医学中的已知结论。虚线为受害终端数 1-+ln(/S0)以上所有小节的分析,都假定活跃用户数固定为N。但是,在实际情况下,当然有例外。比如,某用户主动关机后,任何恶意代码对他都不构成威胁,此时活跃用户就减少一个;当某用户终端中毒后死机,这里活跃用户数也减少一个;当新用户开机(或进入网络)后,他又可能成为恶意代码的攻击对象,这时,活跃用户数又增加一个等。设是新用户开机率,g是用户主动关机率,c为被恶意代码攻击后的宕机概率,为简单计,都假定这些参数为常数。于是,在某个时刻,暂未受害的人数为S(t),那么,下一时刻,S(t)会因为用户主动关机而减少gS(t);会因恶意代码的攻击减少ST;会
18、因新用户开机增加N(t)等。在某个时刻,受害终端数为T(t),那么,下一时刻,T(t)会因为恶意代码的攻击而增加ST;会因为宕机和主动关机而减少(g+c)T(t);会因为康复而减少T(t)。在某个时刻,已有免疫力的用户数为R(t),那么,下一时刻,R(t)会因为康复而增加T(t);会因为主动关机而减少gR(t)。因此,下面可以考虑两种特殊情况。情况1:假如没有宕机(即,c=0)并且主动关机率与新用户开机率相同(即,=g),那么,各类终端数的变化情况,便可以用如下三个微分方程来描述:dS(t)/dt=N(t)-T(t)S(t)-S(t)dT(t)/dt=T(t)S(t)-T(t)-T(t)dR(
19、t)/dt=T(t)-R(t)对这三个微分方程的解进行分析后,得到如下的定理14.3。定理定理14.3:记P0=/(+),那么,在情况1之下,当P01时,该免疫型恶意代码一定会随着时间的推移,最终自动消灭;当P01时,该免疫型恶意代码一定会随着时间的推移,最终在S=1/P0、T=(P0-1)/、R=1-1/P0-(P0-1)/点处达到全局渐近稳定,即,最终健康终端的比例为S=1/P0,受害终端的比例为T=(P0-1)/,获得免疫力的终端比例为R=1-1/P0-(P0-1)/。=0.01,=0.03,=0.05.虚线为受害终端数P0=/(+)=1/8 1ST情况2:有宕机发生(即c0),新用户开
20、机率大于主动关机率(即g)那么,各类人数的变化情况,便可以用如下三个微分方程来描述:dS(t)/dt=N(t)-T(t)S(t)-gS(t)dT(t)/dt=T(t)S(t)-T(t)-cT(t)-gT(t)dR(t)/dt=T(t)-gR(t)这组微分方程的求解就不容易了!为了简化,我们把每台终端的平均开机率N(t)用一个常数B来代替,也粗略地称其为开机率。于是,上面三个微分方程就简化为:dS(t)/dt=B-T(t)S(t)-gS(t)dT(t)/dt=T(t)S(t)-T(t)-cT(t)-gT(t)dR(t)/dt=T(t)-gR(t)由于N(t)=S(t)+T(t)+R(t),所以,
21、将这三个方程相加,又得到第四个方程:dN(t)/dt=B-cT(t)-gN(t)与前面类似,分析这些微分方程的解后,可得到如下的定理14.4。定理定理14.4:记Q0=B/g(+c+g),那么,在情况2之下,当Q01时,该免疫型恶意代码一定会随着时间的推移,最终在S*=BgQ0、T*=(B-gS*)/(S*)、N*=(B-cT*)/g、R*=N*-S*-T*点处达到渐近稳定。即,最终的活跃用户数为N*,健康终端的比例为S*/N*,受害终端的比例为T*/N*,获得免疫力的终端比例为:R*=1-S*/N*-T*/N*虚线为受害终端数 P318Q01Q01S出现峰值并下降的趋势,T未出现峰值。Q01
22、S、T和N均出现峰值并下降的趋势对付恶意代码其实都有许多预防措施的,但是,由于用户懒惰或不懂技术,总会有一些用户没采取预防措施。比如,针对利用某已知漏洞的恶意代码,厂商一般都会在病毒未大规模爆发前,发布相关的补丁程序,用户只要及时安装了这些补丁,那么,他的终端就已具备了免疫力;但事实是:一定有许多用户没打补丁。我们虽然不能强求全体用户都采取预防措施,但是,如果有比例为p的用户采取了预防措施(比例为q的用户偷了懒,此处,p+q=1),那么,我们发现:只要当p足够大时,仍然能够消灭该恶意代码。为简单计,我们在14.5节的情况1基础上,继续考虑问题。暂未受害的人中,有比例为p的终端直接获得了免疫力,
23、于是,14.5节的那三个微分方程就变成了:dS(t)/dt=qN(t)-T(t)S(t)-S(t)dT(t)/dt=T(t)S(t)-T(t)-T(t)dR(t)/dt=pN(t)+T(t)-R(t)分析该方程组后,我们有如下定理14.5。定理定理14.5:在14.5节的情况1中,如果在暂未受害的终端中,采取了预防措施终端数的比例 p1-1/P0,这里P0=/(+),那么,该免疫型恶意代码一定会随着时间的推移,最终自动消灭。此定理告诉我们:对付恶意代码,虽然不能指望全体人员都及时采取预防措施,但是,只要有足够多的人重视安全(占总人数比例超过P0=/(+)),并及时采取了预防措施,那么,该恶意代
24、码就一定是可控的,甚至会最终被消灭。虚线为受害终端数 此解复杂,此时采取了预防措施终端数的比例满足 p p1=1-1/P0 虚线为受害终端数 此解复杂,此时采取了预防措施终端数的比例 p=0.05 0.1209=p1=1-1/P0 P319许多恶意代码(比如,逻辑炸弹),在潜入受害终端后,并不立即作恶,而是等待时机成熟后再行动。假设在14.5节的基础上来考虑问题,暂未受害的终端在变成受害终端前,先要经过一个潜伏阶段。用E(t)表示t时刻已经中毒,但仍然处于潜伏期的终端数;用表示潜伏终端变成受害终端的概率,于是,仿照14.5节,我们就有如下四个微分方程:dS(t)/dt=N(t)-T(t)S(t
25、)-S(t)dE(t)/dt=T(t)S(t)-E(t)-E(t)dT(t)/dt=E(t)-T(t)-T(t)dR(t)/dt=T(t)-R(t)分析此微分方程,我们可以知道:用生物数学的成果去研究网络安全,其实是有很多事情能做的。由于学科越分越细,肯定会出现这样的情况。即,不同学科的某些问题,其本质是一样的;于是,只要在一个学科中解决了相关问题,那么,另一个学科的同类问题也就迎刃而解了。但事实却是:不同学科的人们,越来越封闭于自身学科,从而,做了许多不必要的重复性工作。在第7章中,我们已经发现,甚至像著名的信息论和博弈论,都可以融合成一套理论;此处又发现,原来传染病学中的许多东西也是可以用
26、来研究计算机恶意代码的。我们相信生物学中一定还有其它成果和思路,我们相信生物学中一定还有其它成果和思路,可以借用来研究网络空间安全问题可以借用来研究网络空间安全问题。但愿有更多的人,前来挖这个金矿。在对付恶意代码方面,过去安全专家主要聚焦于如何从微观上战胜它,这就像医生研究某种具体的药物来医治传染病一样。但是,经过几百年来的实践,医生们已经发现:针对传染病,药物治疗重要,但是,更重要的是,要根据传染病的传播特征,从宏观上控制传染病。比如,若无隔离,那么,药物再好,也不能控制SARS的爆发。因此,现在已经到了安全专家该向医生学习的时候了,我们必须刷新自己的观念。记住:从微观上对付恶意代码个案(比如,研发漏洞补丁)虽然重要,但是,从宏观上控制恶意代码流行爆发更重要,只有搞清楚恶意代码扩散的动力学特性后,才能够稳准狠地对付流行趋势。希望安全专家们前往生物领域,挖掘医生们防流感的更多法宝;更希望有医生(特别是生物数学家)前来增援网络空间安全领域的相关研究。最后,再重复说明一下:恶意代码并非都以“病毒式”传播,比如,有些恶意代码只针对特定目标,它肯定以隐藏为主,不会再传播出去攻击别人。所以,本章的宏观行为对非病毒式恶意代码是无效的。