[计算机科学与技术 ]Web服务缓冲区溢出渗透测试的设计与实现
摘 要
缓冲区溢出漏洞是安全漏洞中最为常见的一种形式。更为严重的是缓冲区溢出漏洞占了远程网络攻击的绝大多数,这种攻击可以使的一个匿名的Internet用户有机会获得一台主机的部分或全部的控制权。由于这类攻击使任何人都有可能取得主机的控制权,所以它代表了一类极其严重的安全威胁。因此,以缓冲区溢出作为一种渗透测试的手段是非常有意义的。
缓冲区溢出是渗透测试中的重要手段。现在大多数缓冲区溢出程序都是基于C/S架构的,所以其使用的便捷性受到一定限制。本课题采用现在最流行的B/S架构,并且最终实现了将缓冲区溢出作为Web服务来检测远程主机有无溢出漏洞并提醒用户尽快修补此漏洞的目的。本文深入介绍了缓冲区溢出的原理,以及三种常见的缓冲区溢出漏洞;实例化地介绍了缓冲区溢出程序的执行流程;shellcode的编写技术;Java网络编程技术。
在对原理研究的基础之上,本文主要给出了缓冲区溢出作为Web服务的设计和实现过程以及Web服务的其他辅助功能块(网络安全新闻管理、网络安全论坛)的设计和实现。其中缓冲区溢出模块和监听模块采用JavaBean技术实现,其他部分均采用JSP技术加以实现。
总的来说,本渗透测试平台实现了缓冲区溢出的方便性和广范性以及安全性,并且可以加载任意的已经编译成可执行文件的溢出程序。比起传统的C/S架构下的测试平台前进了一大步。
关键字:渗透测试、缓冲区溢出、JSP
目 录
摘要 1
Abstract 2
第一章 绪论 5
1.1 课题背景 5
1.2渗透测试概述 5
1.2.1渗透测试的的专业性 6
1.2.2 渗透测试的三个阶段 6
1.3 论文安排 8
第二章 缓冲区溢出攻击技术 9
2.1 缓冲区溢出基本原理 9
2.2 常见的缓冲区溢出形式 11
2.2.1 栈溢出 11
2.2.2 堆溢出 12
2.2.3 格式化字符串溢出 13
2.3 缓冲区溢出执行流程 16
2.4 shellcode技术 19
2.4.1 shellcode的编写语言 19
2.4.2 shellcode本身代码的重定位 20
2.4.3 shellcode编码 21
第三章 Java网络编程技术介绍.23
3.1 JavaBean技术 23
3.1.1 JavaBean的概念 23
3.1.2 JavaBean的特性 23
3.1.3 JavaBean的属性23
3.1.4 JavaBean在JSP页面里的部署24
3.2 socket网络编程技术 .24
3.3 Java数据流 25
3.3.1 数据流的基本概念 25
3.3.2 数据流的分类介绍 25
第四章 缓冲区溢出渗透测试平台的设计与实现 27
4.1 测试平台框架设计27
4.1.1整体框架设计 27
4.1.2网络安全新闻发布模块设计 28
4.1.3网络安全论坛模块设计 29
4.1.4缓冲区溢出渗透测试模块设计 31
4.2 缓冲区溢出渗透测试编码实现 34
4.2.1缓冲区溢出漏洞选择 34
4.2.2溢出模块实现 34
4.2.3监听模块实现 34
4.2.4本地执行命令实现 36
4.2.5缓冲区溢出状态实现 39
第五章 实验设计和实验数据 42
5.1实验准备 42
5.2 SqlServer2000打sp3补丁前 43
5.2.1实验数据 43
5.3 SqlServer2000打sp3补丁后 45
5.3.1实验数据 45
结束语 47
参考文献 48
致 谢 49
周中1 傅鹤林1 刘宝琛1 谭捍华2 龙万学2 罗强2
(1.中南大学土木建筑学院 湖南 长沙 410075
2.贵州省交通规划勘察设计研究院 贵州 贵阳 550001)
摘要 土石混合体属于典型的多孔介质,其渗透特性与砾石的百分含量关系密切。通过自制的常水头渗透仪,测定了不同含砾量时土石混合体渗透系数值,研究发现含砾量与土石混合体渗透系数之间存在指数关系;基于幂平均法,提出了土石混合体复合渗透系数的计算公式,并通过试验结果验证了该式的正确性,为土石混合体渗透系数的理论计算提供了一个简明有用的计算工具。
关键词 土石混合体 多孔介质 渗透性能 复合渗透系数 经验公式
土石混合体一般是由作为骨料的砾石或块石与作为充填料的粘土或砂组成,它是介于土体与岩体之间的一种特殊的地质体,是土和石块的介质耦合体[1]。因为土石混合体具有物质组成的复杂性、结构分布的不规则性以及试样的难以采集性等特殊的性质,从而给研究带来极大的困难,目前人们对于它的研究仍处于探索之中[2]。渗透与强度和变形特性都是土力学中所要研究的主要力学性质,其在土木工程的各个领域都有重要的作用[3]。土石混合体属于典型的非均质多孔介质[4],其渗透系数是由高渗透性的砾石和低渗透性的土体复合而成的。土的渗透系数可以通过室内试验由达西定理计算得出,然而土石混合体的渗透系数却难以确定,主要原因是:取样困难;难以进行常规的渗透试验;大尺度的渗透试验不仅造价高、准确性差,而且试验结果离散度大,难以掌握其规律性。因此能够求出土石混合体复合渗透系数的计算公式具有重要的理论意义和工程应用价值。
土石混合体中土与砾石粒径的界限值为5mm,即将粒径小于5mm的颗粒称为土、大于5mm的颗粒称为石,砾石含量用P5表示[1]。利用自制的常水头渗透仪,研究砾石体积百分含量P5从0%逐步过渡到100%(间隔10%)时土石混合体的渗透系数,每种配比作平行试验3次,共33次渗透试验。
1 土石混合体渗透性能试验
1.1 试样的基本物理力学性质
试验所取土样为正在修建的上瑞高速公路贵州段晴隆隧道出口处典型性土石混合体,其天然状态土的物理指标及颗粒级配曲线见表1和图1。由图1可知现场取回土样的不均匀系数Cu为12.31,说明土样中包含的粒径级数较多,粗细粒径之间差别较大,颗粒级配曲线的曲率系数Cc为1.59,级配优良。
表1 天然状态土的基本物理指标
图1 天然状态土的颗粒级配曲线
1.2 大型渗透仪的研制
《土工试验规程》(SL237—1999)规定粗粒土的室内渗透系数需由常水头渗透仪测试,国内常用的常水头渗透仪是70型渗透仪。70型渗透仪的筒身内径为9.44cm,试验材料的最大粒径为2cm,规范[5]要求筒身内径应为最大粒径的8~10倍,因此70型渗透仪的筒身内径过小,有必要研制大尺寸的渗透仪。自制渗透仪的内径和试样高度至少应为最大颗粒粒径的8倍,即至少应为16cm,另外,考虑到边界效应,试样的上下两头分别增加2cm,因此,自制渗透仪的内径和试样高分别取为16cm和20cm。考虑到土石混合体的渗透性较强,选取进排水管的口径为2cm。自制的大型常水头渗透仪如图2和图3所示。
图2 自行研制的渗透仪
图3 常水头渗透仪示意图
数据单位为cm
1.3 试验步骤
首先,将由现场取回的土样烘干、过筛,并根据粒径的大小分为0~5 mm的土和5~20mm的砾石两部分。然后,按照试验要求的砾石体积百分含量P5,以10%的初始含水量配制试样,静置24 h。试验时,将配制好的试样分层装入圆桶中,每层装料厚度30mm左右,分层压实,记录每层的击实数。按上述步骤逐层装样,至试样顶部高出测压孔约3cm为止。测出装样高度,准确至0.1cm。在试样顶部铺一层2cm厚的细砾石作缓冲层。之后,由进水管注入蒸馏水,直至出水孔有水流出,静置24 h使试样充分饱和。用量筒从渗透水出口测定渗透量,同时用温度计测量水温,用秒表测记经一定时间的渗水量,共测读6次,取其平均值,6次结果相差不得超过7%,否则需重新测定。
1.4 试验数据
按照试验设计的各种砾石体积百分含量P5共需作11组试验,每组试验作平行试验三次,取3次测量的平均值,并乘以温度校正系数 ,即可求出每组试验20℃时的渗透系数,渗透系数的测量结果见表2。
表2 渗透系数测定结果
2 试验结果分析
2.1 渗透系数与砾石含量的关系
不同含砾量的颗粒级配曲线如图4所示,由图4可以求出各曲线的粒径特征系数及不均匀系数Cu和曲率系数Cc。
图4 试样的颗粒级配曲线
图5为土石混合体砾石含量P5与20℃时渗透系数的关系曲线。从图5可以看出,随着含砾量的增加,渗透系数急剧增加,可见,在设计中可以通过调节砾石的含量来控制土石混合体的宏观渗透性能。
图5 粗粒含量与渗透系数的关系
从图5还可以发现,土石混合体中砾石的含量P5与渗透系数k之间存在指数关系,与文献[6]的研究成果相似,即
土石混合体
式中:k0为P5=0时土的初始渗透系数;n为与土石混合体本身性质相关的常数。对于文中试验值,k0与n分别为0.0006cm/s和8.82。在工程中可以通过少量试验来确定k0,n值,以此来预测不同级配土石混合体的渗透性。
2.2 土石混合体的复合渗透系数
近几十年来,许多学者在揭示影响和决定土的渗透系数内在因素及其相互关系方面进行了大量工作,并取得了有益的成果[7~12],被认为依然有效且目前常用的确定渗透系数的半经验、半理论公式有:
(1)水利水电科学研究院公式[7]:
土石混合体
式中:k10,k20分别为温度为10℃和20℃时的渗透系数(cm/s);η10/η20为温度为10℃和20℃的粘滞系数比;n为孔隙率;d20为等效粒径(mm)。
(2)泰勒(Taylor)[9]用毛管流的哈根-伯努力(Hange-Poiseuille)方程导出渗透系数的表达式:
土石混合体
式中:ds为当量圆球直径,可以用等效粒径d20代替;γw为液体容重;μ为液体粘滞度;e为孔隙比;C为形状系数,通常取C=0.2。
式(2)和式(3)均是针对土体的渗透特性提出的半经验、半理论公式,然而对于非均质性更强、粒径差别更大的土石混合体来说,其适用性不是很强。土石混合体中砾石形成骨架,细颗粒充填孔隙,其渗透系数是由低渗透介质土体的渗透系数kS和高渗透性介质砾石的渗透系数kG复合而成。土石混合体复合渗透系数不是按体积百分含量的简单复合,而是高低渗透性介质的耦合。在参考相关文献[10~12]的基础上,基于幂平均法,本文提出的土石混合体复合渗透系数k复合的表达式为
土石混合体
式中:P5为砾石的体积百分含量,%;kG为砾石的渗透系数,cm/s;kS为土的渗透系数,cm/s;f为系数。
砾石的体积百分含量P5可以由筛分法求出;土的渗透系数kS和砾石的渗透系数kG可以由室内试验直接求出或参考相关资料确定;系数f可以通过少量试验回归分析确定,因此可以说(4)式是一个简明实用的土石混合体复合渗透系数计算公式。
图6 不同计算方法结果比较
为进一步验证(4)式,我们将试验测得的k值与用(2),(3),(4)式计算得到的k值进行对比分析。结果见图6,具体数值见表3。由图6和表3可知据水利水电科学研究院公式和泰勒公式计算结果均高于实测值,尤其是当P5≤30%时,(2)式计算结果和(3)式计算结果比实测值大2~3个数量级,与实测值相差较大。而用本文方法得到的土石混合体的渗透系数最接近实测值,平均相对误差仅为0.6%,能够作为土石混合体渗透系数定量预测的有效工具。在工程设计中,可以根据工程对土石混合体渗透性的要求,依据本文提供的经验公式,调整土石混合体中砾石的含量,达到控制土石混合体渗透能力的目的。
表3 土石混合体渗透系数及相关参数
3 结论
(1)利用自制的常水头渗透仪,测定了不同含砾量时土石混合体的渗透系数值,并指出含砾量与土石混合体渗透系数之间存在指数关系。在工程设计中可以通过合理调整土石混合体中砾石的含量,达到控制其渗透性能的目的。
(2)指出土石混合体的渗透系数是一种由高渗透性的砾石和低渗透性的土体复合而成的,给出了土石混合体复合渗透系数的计算公式,并通过试验结果验证了计算公式的正确性,为土石混合体渗透系数的定量预测提供了一个简明有用的计算工具。
参考文献
[1]油新华.土石混合体随机结构模型及其应用研究.北方交通大学博士论文.2001:1~18
[2]油新华,汤劲松.土石混合体野外水平推剪试验研究.岩石力学与工程学报.2002,21(10):1537~1540,60~129
[3]黄文熙.土的工程性质.北京:水利电力出版社.1984:60~129
[4]薛定谔 A E.多孔介质中的渗流物理.北京:石油工业出版社.1984:141~173
[5]中华人民共和国水利部.土工试验规程(SL237—1999).北京:中国水利水电出版社,1999:114~120
[6]邱贤德,阎宗岭,刘立等.堆石体粒径特征对其渗透性的影响.岩土力学,2004,25(6):950~954
[7]刘杰.土的渗透稳定与渗流控制.北京:水利电力出版社,1992:1~20
[8] Wen X H,Gomez-Hernandez J J.Upscaling hydraulic conductivities in heterogeneous media:An overview.Journal of Hydrology,1996,183:ix~xxxii
[9] Taylor D W.Fundamentals of soil mechanics.John Wiley & SONS,Inc.,1948
[10] Brown W F.Solid mixture permitivities.Journal of Chemical Physic,1955,23(8):1514~1517
[11] Dagan G.Analysis of flow through heterogeneous random aquifers by the method of embedding matrix—1:Steady flow.Water Resources Research,1981,17(1):107~122
[12] Noetinger B.The effective permeability of a heterogeneous porous medium.Transport in Porous Media,1994,15:99~127
周中1 傅鹤林1 刘宝琛1 谭捍华2 龙万学2 罗强2
(1.中南大学土木建筑学院 湖南 长沙 410075
2.贵州省交通规划勘察设计研究院 贵州 贵阳 550001)
摘要 土石混合体作为土和石块的介质耦合体,具有非均质性、非连续性及试样的难以采集性等独特的性质,从而给研究带来极大的困难。土石混合体属于典型的多孔介质,其渗透特性与颗粒的大小、孔隙比及颗粒形状关系密切。本文采用室内正交实验,利用自制的常水头渗透仪,研究了砾石含量、孔隙比和颗粒形状三个因素在不同水平下对土石混合体渗透系数的影响。通过正交试验确定了三种因素对土石混合体渗透系数的影响顺序及各因素的显著性水平。提出了土石混合体渗透系数计算公式,并通过试验结果验证了计算公式的正确性,为土石混合体渗透系数的理论计算提供了一个简明有用的计算工具。
关键词 土石混合体 多孔介质 渗透性能 计算公式 正交试验
土石混合体一般由作为骨料的砾石或块石与作为充填料的粘土或砂组成,是介于土体与岩体之间的一种特殊的地质体,是土和石块的介质耦合体[1]。因为土石混合体具有物质组成的复杂性、结构分布的不规则性以及试样的难以采集性等独特的性质,从而给研究带来极大的困难,目前人们对于它的研究仍处于探索之中[2]。渗透与强度和变形特性,都是土力学中所要研究的主要力学性质,其在土木工程的各个领域中都有重要的作用[3]。土石混合体属于典型的非均质多孔介质[4],其渗透特性与颗粒的大小、颗粒组成、孔隙比及颗粒形状关系密切。土的渗透系数可以通过室内试验由达西定理计算得出,然而土石混合体的渗透系数却难以确定,主要原因是:取样困难;难以进行常规的渗透试验;大尺度的渗透试验不仅造价高准确性差,而且试验结果离散度大,难以掌握其规律性。迄今为止,国内还没有对土石混合体渗透性能进行研究的资料,现有研究成果局限于利用物理和数值模拟试验对其变形和力学性质进行研究,而对渗透性还未涉及。因此,能够求出土石混合体渗透系数的计算公式具有重要的理论意义和工程应用价值。
本文研究土石混合体中砾石含量、孔隙比(压实度)和颗粒形状三个因素在不同水平下对土石混合体的渗透系数的影响,找出三因素与土石混合体渗透系数之间的关系,并提出土石混合体渗透系数计算公式。
1 土石混合体渗透性能的正交试验
1.1 正交试验方案设计
在室内试验中考虑砾石含量、孔隙比(压实度)和颗粒形状三个因素对土石混合体渗透系数的影响,就每种因素拟考虑3个水平。对于这种3因素3水平的试验,如果考虑每一个因素的不同水平对基材的影响,则根据组合可得有33组试验,这对人力、物力与时间来说都是一种浪费,因此采用正交试验设计来研究这一问题更为合理。本试验所选取的正交表为L9(34),考虑试验误差的影响,但不考虑各因素间的交互作用(即假定他们之间相互没有影响)。共需9组试验,每组作平行试验3次,共27次渗透试验。本试验中采用的因素与对应的水平数如表1所示,其中粗粒形状分为球形体、六面体和三棱锥3个水平,分别由卵石、强风化石块和新打碎的碎石来近似替代。
表1 正交试验的因素水平
1.2 试样的基本物理力学性质
试验所取土样为正在修建的上瑞高速公路贵州段晴隆隧道出口处典型性土石混合体,其天然状态土的物理指标及颗粒级配曲线见表2和图1。由图1可知现场取回土样的不均匀系数Cu为12.31,说明土样中包含的粒径级数较多,粗细粒径之间差别较大,颗粒级配曲线的曲率系数Cc为1.59,级配优良。
表2 天然状态土的基本物理指标
图1 天然状态土的颗粒级配曲线
1.3 大型渗透仪的研制
《土工试验规程》(SL237—1999)规定粗粒土的室内渗透系数需由常水头渗透仪测试,国内常用的常水头渗透仪是70型渗透仪。70型渗透仪的筒身内径为9.44cm,试验材料的最大粒径为2cm,规范[5]要求筒身内径应为最大粒径的8~10倍,因此70型渗透仪的筒身内径过小,有必要研制大尺寸的渗透仪。自制渗透仪的内径和试样高度至少应为最大颗粒粒径的8倍,即至少应为16cm,另外,考虑到边界效应,试样的上下两头分别增加2cm,因此,自制渗透仪的内径和试样高分别取为16cm和20cm。考虑到土石混合体的渗透性较强,选取进排水管的口径为2cm。自制的大型常水头渗透仪的如图2 和图3所示。
图2 常水头渗透仪示意图
数据单位为cm
图3 自制渗透仪
2 试验结果分析
2.1 试验结果
按正交试验表L9(34)的安排,共需作9组试验,每组试验作平行试验3次,取3次测量的平均值,并乘以温度校正系数 ,即可求出每组试验20℃时的渗透系数,渗透系数的测量结果见表3。
表3 渗透试验测定结果
续表
2.2 试验分析
运用正交试验的直观分析法和方差分析法,分析各因素对土石混合体渗透系数影响的主次顺序,绘出因素水平影响趋势图,求出各因素的显著性水平。
2.2.1 直观分析
对试验所得的土石混合体的渗透系数进行正交试验的极差分析,并画出各因素的水平影响趋势图。正交试验的极差分析表见表4,3个因素与渗透系数的关系见图4。
表4 极差分析表
图4 各因素与渗透系数的关系
A—砾石含量;B—孔隙比;C—粗粒形状
由正交试验的极差分析表可以看出,对土石混合体渗透系数影响的主次顺序为A→B→C,即砾石含量→孔隙比→颗粒形状。由各因素与渗透系数的关系图可以看出砾石含量越多渗透系数越大,孔隙比越大渗透系数越大,颗粒磨圆度越大渗透系数越小。在路基工程及大坝工程中,可以通过调节粗颗粒的含量、压实度及颗粒形状以获得工程所需的渗透系数。
2.2.2 方差分析
为了确定因素各水平对应的试验结果的差异是由因素水平不同引起的,还是由试验误差引起的,并对影响土石混合体渗透系数的各因素的显著性水平给予精确的数量评估,需采用正交试验的方差分析法对试验数据进行分析,分析结果如表5所示。
表5 方差分析结果
方差分析结果表明:
(1)因素各水平对应的试验结果的差异是由因素水平不同引起的,而不是由试验误差引起的;
(2)砾石含量对土石混合体渗透系数的影响高度显著,孔隙比对土石混合体渗透系数的影响显著,颗粒形状土石混合体渗透系数的影响不显著。
3 土石混合体渗透系数
3.1 渗透系数与砾石含量之间的关系
众所周知,土石混合体的渗透系数与颗粒的大小及级配有关,本文选择等效粒径d20和曲率系数Cc来表示土的颗粒大小和颗粒级配,原因是文献[3]认为等效粒径d20比其他粒径特征系数更能准确地表示颗粒的大小,而与颗粒级配有关的系数是不均匀系数Cu和曲率系数Cc,不均匀系数Cu只反映土粒组成的离散程度,曲率系数Cc能在一定程度上反映颗粒组成曲线的特性,因而曲率系数Cc更适合于评价土的颗粒级配。不同砾石含量的颗粒级配曲线如图5所示。由图5可以求出各曲线的粒径特征系数,见表6。
图5 试样的颗粒级配曲线
表6 不同粗粒含量时的粒径特征
由图6可知,其他条件相同时,土石混合体的渗透系数k与函数f(d20,Cc)呈线性关系,其中 。
图6 k20-f(d20,Cc)关系曲线
3.2 渗透系数与密实度之间的关系
由正交试验的方差分析可知,孔隙率e对渗透系数的影响虽不如粗粒含量大,但也是很显著的。在其他条件相同时,k与 呈线性关系,如图7所示。
土石混合体
3.3 渗透系数与颗粒形状之间的关系
狄凯尔与海阿特(Tikell and Hiatt)于1938年探讨了颗粒的“棱角性”与“圆度”对渗透系数的影响,并指出颗粒的棱角性越大,渗透系数越大[6]。由正交试验分析表可知Cs1∶Cs2∶Cs3=0.9∶1∶1.2,并且将试验数据进行回归分析,当形状系数Cs1=0.18,Cs2=0.2,Cs3=0.24时与试验结果最为接近,此结论与卡门(Carmen)的研究成果[7]相近。
3.4 土石混合体的渗透系数
由以上分析可知土石混合体的渗透系数与颗粒大小、颗粒级配、颗粒形状及孔隙比有关,同时渗透流体对渗透性也有一定的影响,主要是受液体的动力粘滞度η的影响,大量研究成果表明渗透系数k 与g/η 成正比[3,4,7]。因此,土石混合体的渗透系数计算公式为
土石混合体
式中:k为土石混合体的渗透系数,cm/s;Cs为颗粒的形状系数,m-3;d20为等效粒径,小于该粒径的土重占总土重的20%,m;Cc为颗粒级配曲率系数, ;e为孔隙比;g为重力加速度,9.8 N;η 为液体的动力粘滞度,kPa · s(10-6),η20=1.01×10-6kPa·s。
由公式(1)计算出20℃时土石混合体的渗透系数k20列于表7。与其他物理力学参数相比,土石混合体的渗透性变化范围要大得多。同时,受宏观构造和微观结构复杂性的影响,其渗透性具有高度的不均匀性[8]。为进一步验证公式(1)的正确性,将实测值与由公式(1)得出的计算值进行对比分析,见图8。由图8可知由公式(1)计算出的渗透系数值与实测值基本吻合,9组试样的平均相对误差为21%,这对于离散性很强的土石混合体的渗透系数来说已经具有足够的精确性。
表7 计算值与实测值对应关系
图8 计算值与实测值关系
4 结论
(1)通过正交试验获取了砾石含量、孔隙比和颗粒形状对土石混合体渗透系数影响的主次顺序,并得出各因素的显著性水平,工程设计中可以通过合理调整土石混合体的砾石含量、孔隙比(压实度)和颗粒形状,以达到控制其渗透能力的目的。
(2)土石混合体的渗透系数与等效粒径d20和曲率系数Cc组成的函数 成正比,并与孔隙比函数 成正比。
(3)提出了土石混合体渗透系数的计算公式,并通过试验结果验证了计算公式的正确性,为土石混合体渗透系数的定量预测提供了一个简明有用的计算工具。
参考文献
[1]油新华.土石混合体随机结构模型及其应用研究.北方交通大学博士论文,2001:1~18
[2]油新华,汤劲松.土石混合体野外水平推剪试验研究.岩石力学与工程学报,2002,21(10):1537~1540,60~129
[3]刘杰.土的渗透稳定与渗流控制.北京:水利电力出版社,1992:1~20
[4]薛定谔A E.多孔介质中的渗流物理.北京:石油工业出版社,1984:141~173
[5]中华人民共和国水利部.土工试验规程(SL237—1999).北京:中国水利水电出版社,1999:114~120
[6] Tickell FG,Hiatt WN.Effect of angularity of grains on porosity and permeability of unconsolidated sands.AAPG Bulletin,1938,22(9):1272~1274
[7]黄文熙.土的工程性质.北京:水利电力出版社,1984:60~129
[8]邱贤德,阎宗岭,刘立等.堆石体粒径特征对其渗透性的影响.岩土力学,2004,25(6):950~954
当你连续奋战了好几天,终于合上了笔记本,想要出去透透风时,一个熟悉的问句传来:“你好,请问什么时候可以交付报告?”
有成千上万的书籍讲解什么是信息安全,什么是渗透测试,也有数不清的培训课程视频。但是,我敢打赌,在这些材料中,只有不到10%是在讲写报告的事情。在一个完整的渗透测试过程中,有将近一半的时间都用在了编写报告上,这听起来很让人吃惊,但是也并不奇怪。
教会某人写报告不像教会某人制作一个完美的缓冲区溢出那么有意思,大部分的渗透测试人员情愿复习19次TCP数据包结构的工作原理,也不愿意写一份报告。
不管我们的渗透测试水平多么高,想要把一个很深的技术点解释的很通俗易懂,即使是完全不懂安全的人也可以理解,这是一件异常艰难的挑战。不但得学会简单明了的解释渗透测试的结果,还得控制好时间。这样做的好处很多,关系到客户会不会不断的采购你的服务。有一次,我开车到350英里以外的一家客户那里做售前,当面重新解释了渗透测试报告的本内容;如果能把测试报告写的简单明了,我就不用跑这么一趟,相当于节省了一整天的时间和一整箱汽油。
举个例子:
一个模糊不清的解释:“SSH版本应该被禁用,因为它含有高危漏洞,可能允许攻击者在网络上拦截和解密通信,虽然攻击者控制网络的风险很低,这减少了严重性。”
清楚的解释:“建议在这些设备上禁用SSH,如果不这样做,就有可能允许攻击者在当地网络解密和拦截通讯。”
为什么渗透测试报告如此重要?
请谨记:渗透测试是一个科学的过程,像所有科学流程一样,应该是独立可重复的。当客户不满意测试结果时,他有权要求另外一名测试人员进行复现。如果第一个测试人员没有在报告中详细说明是如何得出结论的话,第二个测试人员将会不知从何入手,得出的结论也极有可能不一样。更糟糕的是,可能会有潜在漏洞暴露于外部没有被发现。
举个例子:
模糊不清的描述:“我使用端口扫描器检测到了一个开放的TCP端口。“
清晰明了的描述:“我使用Nmap 5.50,对一段端口进行SYN扫描,发现了一个开放的TCP端口。
命令是:nmap –sS –p 7000-8000“
报告是实实在在的测试过程的输出,且是真实测试结果的证据。对客户高层管理人员(批准用于测试的资金的人)可能对报告的内容没有什么兴趣,但这份报告是他们唯一一份证明测试费用的证据。渗透测试不像其他类型的合同项目。合同结束了,没有搭建新的系统,也没有往应用程序添加新的代码。没有报告,很难向别人解释他们刚买的什么东西。
报告给谁看?
至少有三种类型的人会阅读你的报告:高级管理人员,IT管理和IT技术人员。
高级管理人员根本不关心,或者压根不明白它的意思,如果支付服务器使用SSL v2加密连接。他们想知道的答案是“我们现在到底安不安全?”
IT管理对该组织的整体安全性感兴趣,同时也希望确保其特定的部门在测试过程中都没有发现任何重大问题。我记得给三个IT经理一份特别详细的报告。阅读这份报告后有两个人脸色变得苍白,而第三个人笑着说“太好了,没有数据库的安全问题”。
IT人员是负责修复测试过程中发现的问题的人。他们想知道三件事:受影响系统的名称,该漏洞的严重程度以及如何解决它。他们也希望这些信息以一种清晰而且有组织的方式呈现给他们。最好的方法是将这些信息以资产和严重程度来进行划分。例如“服务器A”存在“漏洞X,Y和Z,漏洞Y是最关键的。这样IT人员就可以快速的找到问题的关键,及时修复。
当然,你可以问你的客户是否愿意对漏洞分组。毕竟测试是为了他们的利益,他们是付钱的人!一些客户喜欢有个详细说明每个漏洞的页面,并表明受漏洞影响的资产有哪些。
虽然我已经提到了渗透测试报告三种最常见的读者,但这并不是一个详尽的清单。一旦报告交付给客户,取决于他们用它干什么。它可能最终被提交给审计人员作为审计的证据。它可以通过销售团队呈现给潜在客户。“任何人都可以说自己的产品是安全的,但他们可以证明这一点?我们可以看看这里的渗透测试报告。“
报告甚至可能最终共享给整个组织。这听起来很疯狂,但它确实发生过。我执行一次社会工程学测试,其结果低于客户的期望。被触怒的CEO将报告传递给整个组织,作为提高防范社会工程攻击意识的一种方式。更有趣的是,几周后当我访问同一个公司做一些安全意识的培训。我在自我介绍时说,我就是之前那个负责社工测试的人。愤怒的目光,嘲讽的语气,埋怨我给他们所有人带来多少麻烦。我的内心毫无波动,答道:“把密码给我总比给真正的黑客好。”
报告应该包含什么?
有时候你会很幸运的看到,客户在项目计划之初就表明他们想要的报告内容。甚至有一些更为细小的要求,比如,字体大小和线间距等。但是这只是少数,大部分客户还是不知道最终要什么结果,所以下面给出一般报告的撰写程序。
封面
封面是报告的第一面窗户,封面页上包含的细节可以不那么明显。但是测试公司的名称、标志以及客户的名称应该突出显示。诸如“内部网络扫描”或“DMZ测试”测试标题也应该在那里,对于相同的客户执行多个测试时,可以避免混淆。测试时间也要写上,随着时间的推移,用户可以清楚的得知他们的安全状况是否得到了改善。另外该封面还应包含文档的密级,并与客户商定如何保密好这份商业上的敏感文件。
内容提要
我见过一些简直像短篇小说一样的内容提要,其实这部分一般要限制在一页纸以内。不要提及任何特定的工具、技术,因为客户根本不在乎,他们只需要知道的是你做了什么,发现了什么,接下来要发生什么,为什么,执行摘要的最后一行应该是一个结论,即明确指出是该系统是安全还是不安全。
举个例子:
一个糟糕的总结:“总之,我们发现一些地方的安全策略运作良好,但有些地方并未遵从。这导致了一定风险,但并不是致命风险。”
一个优秀的总结:“总之,我们发现了某些地方没有遵守安全策略,这给组织带来了一个风险,因此我们必须声明该系统是不安全的。”
漏洞总结
将漏洞列表放在一个页面上,这样,IT经理便可以一目了然的知道接下来要做什么。具体怎样表现出来,形式多样,你可以使用花哨的图形(像表格或图表),只要清晰明了就行。漏洞可以按类别(例如软件问题,网络设备配置,密码策略)进行分组,严重程度或CVSS评分——方法很多,只要工作做得好,很容易理解。
测试团队的详细信息
记录测试过程中所涉及的每一个测试人员的名字,这是一个基本的礼节问题,让客户知道是谁在测试他们的网络,并提供联系方式,以便后续报告中问题讨论。一些客户和测试公司也喜欢依据测试的内容向不同的测试小组分配任务。多一双眼睛,可以从不同的角度查看系统的问题。
工具列表
包括版本和功能的简要描述。这点会涉及到可重复性。如果有人要准确复现您的测试,他们需要确切地知道您使用的工具。
工作范围
事先已经同意,转载作为参考是有用的。
报告主体
这部分才是报告的精华,报告的正文应包括所有检测到的漏洞细节,如何发现漏洞,如何利用漏洞,以及漏洞利用的可能性。无论你做的是什么,都要保证给出一个清晰的解释。我看过无数份报告,都是简单的复制粘贴漏洞扫描的结果,这是不对的。另外报告中还应包括切实贴合的修复建议。
最终交付
在任何情况下任何一份报告应该加密传输。这虽然是常识,但往往大家就会摔倒在最后的这环上。