CN1623140A - 网络弱点检测和报告的系统和方法 - Google Patents

网络弱点检测和报告的系统和方法 Download PDF

Info

Publication number
CN1623140A
CN1623140A CNA028285425A CN02828542A CN1623140A CN 1623140 A CN1623140 A CN 1623140A CN A028285425 A CNA028285425 A CN A028285425A CN 02828542 A CN02828542 A CN 02828542A CN 1623140 A CN1623140 A CN 1623140A
Authority
CN
China
Prior art keywords
network
group
object computer
packet
computer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CNA028285425A
Other languages
English (en)
Inventor
斯图尔特·C·麦克卢尔
乔治·库尔茨
罗宾·基尔
马歇尔·A·贝多
迈克尔·J·莫顿
克里斯托弗·M·普罗塞斯
戴维·M·科尔
克里斯托弗·阿巴德
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Foundstone Inc
Original Assignee
Foundstone Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Foundstone Inc filed Critical Foundstone Inc
Publication of CN1623140A publication Critical patent/CN1623140A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/14Network architectures or network communication protocols for network security for detecting or protecting against malicious traffic
    • H04L63/1433Vulnerability analysis
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/50Testing arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L63/00Network architectures or network communication protocols for network security
    • H04L63/02Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
    • H04L63/0227Filtering policies

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer And Data Communications (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

一种系统和方法,提供了对在目标网络(310)上易受攻击的弱点的综合和高度自动的测试,包括操作系统的识别,目标网络拓扑和目标计算机的识别,开放目标端口的识别,对目标端口的弱点(364)的评估,根据从目标计算机(344)中所获得的信息对弱点的有效评估,目标网络安全性和弱点的定量评估,以及测试报告中的目标网络、目标计算机和弱点的分级图形表示。所述系统和方法最低限度地采用了强迫技术以避免在测试期间或之后对目标网络的干扰、或对目标网络的损坏。

Description

网络弱点检测和报告的系统和方法
技术领域
本发明涉及网络系统安全性,更具体地,涉及网络弱点的自动检测、监控和报告的系统和方法。
背景技术
在计算机网络是实体内和实体间通信和事务的关键元素的领域中,网络可靠性和安全性是必须的。网络管理者、政府、安全顾问和黑客已经使用了各种工具来测试目标网络的弱点,例如,是否能够未授权地远程访问和控制网络上的任何计算机。通过该增强测试,可以使目标网络“坚强”对抗共同弱点和秘密攻击。然而,现有测试系统产生了不一致的结果,使用了未经证明或损坏目标网络的技术,无法响应发生变化的网络环境,或者检测新弱点,以及,报告了难以理解、基于文本的报告的结果。
现在存在公知的网络安全工具来测试可能侵入的网络路径。从测试点,可以使用诸如跟踪路由和乒命令(“是否可达”测试)之类的简单命令来手动映射网络拓扑,并且粗略地确定哪些网络地址由于计算机在网络上处于“唤醒”状态而“激活”(即,确定哪些计算机是开放的,并且对网络分组进行响应)。可以使用诸如端口扫描仪之类的工具来测试在目标网络上的各个目标计算机,以确定网络端口是否开放。如果找到了开放端口,则这些端口可以提供用于可能的侵入的访问,并且可能会表示能够由恶意黑客利用的弱点。
组合各种网络工具的一些配套组件尝试遵循半自动的处理来测试目标网络上的目标计算机。这些配套组件提供在上述工具上的变化,并且根据该测试的结果来提供长形式(long-form)的基于文本的输出。这些安全性测试的输出是及其需要技术的,并且需要网络通信的扩展知识,以便根据这些结果来解译和提供建议。由此,这些局部自动化的配套组件未给需求使其网络“坚固”的实体提供综合安全性。
此外,一些安全配套组件实际上冒着损坏目标网络的危险。例如,尽管使用不良网络分组来测试目标计算机可以提供来自目标的扩展信息和对目标安全性的反馈,这些不良分组可能以不可预测的方式使目标计算机变得不稳定。有时,这导致了去往目标计算机的信息的短期丢失,或者,在最严重的情况下,导致了目标计算机操作系统或硬件的完全崩溃。
在其他情况下,由现有的配套组件所使用的检测方法并不可靠。如果在目标计算机上所采用的网络端口扫描方法在时间上具有诸如80%的精度,则在单个计算机上的所有216个端口上的完整测试可能会导致大约13000个端口被不正确地识别为可能正在运行的易受攻击服务。在整个目标网络上,这样的“错误肯定”使得几乎不能确定目标网络的真实安全等级。
现有测试方法缺乏标准、量化方法来客观地比较目标网络或目标计算机相对于其他系统的安全性。典型地,仅将目标网络或目标计算机分级为“高危险”、“中等危险”或“低危险”。然而,这样的三层系统单独地提供了非常少的关于在时间上的网络变化的实质反馈或比较信息、在确定产生的危险等级时不同弱点的相对比重、或者对不同异类网络环境中的网络安全性的客观评估。
发明内容
本发明通过综合网络弱点测试和报告方法及系统解决了这些问题和更多的问题。具体地讲,所述测试系统的特征包括以下各项的选择的组合:(1)目标计算机操作系统的无损识别;(2)多层端口扫描方法,用于确定哪些网络地址是激活的,并且在这些地址处哪些端口是激活的;(3)将所收集到的与目标网络有关的信息与已知弱点的数据库进行比较;(4)对已识别目标计算机的已识别端口上的一些弱点的弱点评估;(5)从先前所发现的目标计算机中发现的弱点重用数据的有效评估;(6)应用定量分数以客观地且比较性地对目标网络的安全进行分级;以及,(7)将所接收的信息的详细结果简化为目标网络、目标计算机和其中所发现的弱点的分级、动态和图形表示。这里,还预见并公开了其他特征。
在其优选实施例中,测试系统操作于诸如团体内联网或因特网的中等多层分组网络上。典型地,该网络包括一个或多个计算机,其中计算机包括运行任意操作系统的桌面站点、路由器、服务器和/或任何其他联网设备,能够通过诸如TCP/IP(传输控制协议/因特网协议)、UDP(用户数据报协议)等标准因特网协议来发送和接收分组。可以从目标计算机外部的监控计算机中远程地运行该系统和方法,或者可以通过监控在目标网络内所包括的监控计算机来运行该系统和方法。典型地,将目标网络自身定义为计算机的互连组,由特别预先指定的子网地址、IP地址或子地址的范围、物理网络边界、计算机名或唯一标识符、通过预定网络协议的连接的存在等来界定。这些目标计算机包括在目标网络内所发现的计算机的全部或部分。例如,可以远程地测试具有与WAN(广域网)的简单连接的目标计算机,作为单个对等目标网络。在更为复杂的实例中,分布式网络提供商可以具有在整个世界上地理分布但通过内部协议互连的多个子网,作为具有几千个目标计算机的WAN目标网络。
典型地,目标网络运行在一个或多个基于IP的网络协议上。更一般地,协议将是TCP/IP和UDP。类似地,所述测试系统通常不同于目标网络的物理层结构和拓扑。只有阻塞、重新路由或改变分组的诸如防火墙或路由器之类的结构元素将会影响测试系统。然而,所述测试系统尝试适合于这些结构元素,并且通常提供了精确的结果,而与物理实现无关。
TCP/IP是用于局域网、广域网和诸如因特网的全球通信网络上的基于分组的网络通信的基本协议。表1中示出了TCP/IP SYN(同步)分组的简单结构。
源端口 目的地端口
                                      序列号
                                      确认号
数据偏移 保留数据 标记 窗口
                  校验和 紧急指针
                           选项 填充
                                       数据
表1:典型的TCP SYN分组
典型地,计算机运行在一个或多个操作系统上。更一般地,这些操作系统包括由Microsoft_所提供的操作系统,例如,MicrosoftWindows_的操作系统族,来自Apple_的MacOS_、各种类型的UNIX,包括Linux_、NetBSD、FreeBSD、Solaris_等。此外,在目标网络上的设备可以包括路由器操作系统、移动通信设备操作系统、掌上型或手持型操作系统、设备操作系统、机顶盒操作系统、赌博操作系统、数字权利管理系统、监督系统、智能卡交易系统、运输管理系统等,赋予了唯一或临时的网络地址,并且能够从目标网络发送和/或接收业务量。
在一个实施例中,由典型地呈A.B.C.D形式的唯一或临时唯一IP(因特网协议)地址来识别目标计算机,其中A、B、C和D中的每一个表示A类、B类、C类和D类子网,并且每一个均具有0和255之间的值。典型地,由目标网络所控制的一个或多个IP地址范围来定义目标网络,但是,可以包含拓扑上与目标网络相连的附加目标计算机或目标子网,但是并非预定IP范围的一部分。
UDP(用户数据报协议)是在IP(因特网协议)上运行的可选的“无连接”通信协议。UDP缺少错误连接,并且接收诸如TCP的基于连接的协议的确认特征。ICMP(因特网控制消息协议)是允许控制IP网络上的主机之间的通信(大多数情况下,通常通过ICMP PING测试请求)的IP的另一扩展。
本发明的另一方面包括对目标计算机的目标操作系统的无损和相对无侵入识别。
本发明的另一方面包括在目标网络上的多个目标计算机的并行测试。
本发明的另一方面包括一种改进的测试方法,以便确定在目标网络上的特定目标计算机是否是激活的。
本发明的另一目的包括一种改进的方法,用于确定一组通用端口在目标计算机上是否是开放的。
本发明的另一方面包括一种改进方法,用于可靠地确定一组通用的UDP端口在目标计算机上是开放的还是关闭的。
本发明的另一方面包括一种使在目标计算机发现的开放的端口与已知的一组弱点相关联的方法。
本发明的另一方面包括同时对多个端口和多个目标计算机进行并行测试。
本发明的另一方面包括对目标计算机处的一些已知组的弱点的有效评估。
本发明的另一方面包括将客观的定量分数应用于在目标网络上所发现的弱点。
本发明的另一方面包括对表示在同时包括概述文件和细节文件的分级报告中的网络拓扑、网络计算机和网络弱点的动态、图形报告的编辑。
在一个实施例中,本发明是一种确定可操作地与网络相连的目标计算机的操作系统的系统。所述系统包括:(1)第一和第二数据分组,所述第一和第二数据分组符合由所述网络所支持的协议,将所述第一和第二数据分组通过所述网络传送到所述目标计算机;(2)第一和第二操作系统指纹,包括在计算机可读介质中所存储的数据位,所述第一和第二操作系统指纹与第一操作系统相关;(3)第一目标计算机指纹,包括在计算机可读介质中所存储的数据位,所述第一目标计算机指纹包括响应所述第一数据分组的传输所接收到的数据的至少一部分的表示;(4)第二目标计算机指纹,包括在计算机可读介质中所存储的数据位,所述第二目标计算机指纹包括响应所述第二数据分组的传输所接收到的数据的至少一部分的表示;以及(5)可由计算机执行的指纹比较指令,将所述第一操作系统指纹和所述第一目标计算机指纹进行比较,将所述第二操作系统指纹和所述第二目标计算机指纹进行比较,并且产生表示所述第一操作系统是否正运行于所述目标计算机上的结果。在优选的方面中,本发明还包括:(6)第三数据分组,所述第三数据分组符合所述协议,所述第三数据分组的所述第一比特范围表示与所述第一和第二参数值不同的第三参数值,将所述第三数据通过所述网络传送到所述目标计算机;(7)第三操作系统指纹,包括在计算机可读介质中所存储的数据位,所述第三操作系统指纹与所述第一操作系统相关,所述第三操作系统指纹与所述第一和第二操作系统指纹不同;以及(8)第三目标计算机指纹,包括在计算机可读介质中所存储的数据位,所述第三目标计算机指纹包括响应所述第一数据分组的所述传输接收到的数据的至少一部分的表示,可由计算机执行的所述比较指令在产生所述结果之前,将所述第三操作系统指纹和所述第三目标计算机指纹进行比较。在另外的优选方面中,本发明还包括:(9)第四、第五和第六操作系统指纹,包括在计算机可读介质中所存储的数据位,所述第四、第五和第六操作系统指纹与第二操作系统相关,所述第四、第五和第六操作系统指纹中的至少一个与所述第一、第二和第三操作系统指纹中的相应一个不同;可由计算机执行的所述比较指令将所述第四操作系统指纹和所述第一目标计算机指纹进行比较,将所述第五操作系统指纹和所述第二目标计算机指纹进行比较,将所述第六操作系统指纹和所述第三目标计算机指纹进行比较,并且产生表示在所述目标计算机上是否正在运行所述第二操作系统的第二结果。该实施例的优选方面在于:(10)通过不设置任何比特来获得所述第一参数值,通过设置一个比特来获得所述第二参数值,而通过设置两个比特来获得所述第三参数值,或者(11)其中所述第一参数值是0,所述第二参数值是128,而所述第三参数值是128与256的倍数相加。
在另一实施例中,本发明是一种用于确定可通过网络访问的目标计算机的操作系统的系统。所述系统包括:(1)符合由所述网络支持的协议的多个数据分组,将所述多个数据分组通过所述网络传送到所述目标计算机;(2)多个第一操作系统指纹,每一个均包括在计算机可读介质中所存储的数据位,每一个均与第一操作系统相关;(3)多个目标计算机指纹,每一个均包括在计算机可读介质中所存储的数据位,每一个包括响应所述多个数据分组的传输接收到的数据的至少一部分的表示;以及(4)可由计算机执行的指纹比较指令,将所述多个第一操作系统指纹和所述多个目标计算机指纹进行比较,并且产生表示所述第一操作系统是否正在所述目标计算机上运行的结果。该实施例的优选方面在于所述协议是TCP/IP。该实施例的另一优选方面还包括(5)多个第二操作系统指纹,每一个均包括在计算机可读介质中所存储的数据位,每一个与第二操作系统相关,所述指纹比较指令将所述多个第二操作系统指纹和所述多个目标计算机指纹进行比较,以产生表示所述第二操作系统是否正在所述目标计算机上运行的第二结果。
本发明的另一实施例是一种用于确定可通过网络访问的目标计算机的操作系统的方法。所述方法包括步骤:(1)向数据目标计算机传送符合由所述网络所支持的协议的多个数据分组;(2)产生多个目标计算机指纹,每一个包括响应所述多个数据分组的传输经由所述网络接收到的至少一部分数据;(3)将所述多个目标计算机指纹与第一组预定操作系统指纹进行比较,每一个所述第一组的预定操作系统指纹与第一操作系统相关;以及(4)产生表示所述第一操作系统是否正在所述目标计算机上运行的结果。在优选方面中,该实施例还包括步骤:(5)将所述多个目标计算机指纹与第二组预定操作系统指纹进行比较,每一个所述第二组预定操作系统指纹与第二操作系统相关;以及(6)产生表示所述第二操作系统是否正在所述目标计算机上运行的结果。该实施例的一个优选方面在于:所述协议是TCP/IP,并且所述多个数据分组中的两个数据分组的MSS选项的值可被128除尽。该实施例的另一优选方面在于:所述多个第一数据分组具有0的最大分段尺寸选项,所述多个第二数据分组具有128的最大分段尺寸选项;而所述多个第三数据分组具有384的最大分段尺寸选项。
本发明的另一实施例是一种通过网络识别目标计算机的操作系统的方法,所述方法包括步骤:(1)通过所述网络向所述目标计算机发送第一数据分组,所述第一数据分组符合所述网络的协议,并且具有在第一比特范围内的第一比特模式;(2)产生第一响应值,表示响应所述第一数据分组的发送通过所述网络接收到的数据的至少一部分;(3)通过所述网络向所述目标计算机发送第二数据分组,所述第二数据分组符合所述协议,并且具有在第一比特范围内的第二比特模式,所述第二比特模式不同于所述第一模式;(4)产生第二响应值,表示响应所述第二数据分组的发送通过所述网络接收到的至少一部分数据;(5)通过所述网络向所述目标计算机发送第三数据分组,所述第三数据分组符合所述协议,并且具有在第一比特范围内的第二比特模式,所述第三比特模式不同于所述第一或第二模式;(6)产生第三响应值,表示响应所述第三数据分组的发送通过所述网络接收到的至少一部分数据;(7)将所述第一响应值与和第一操作系统相关的第一预定值进行比较;(8)将所述第二响应值与和第一操作系统相关的第二预定值进行比较;(9)将所述第三响应值与和第一操作系统相关的第三预定值进行比较;以及(10)产生表示所述第一操作系统和所述目标计算机之间的关系的值。该实施例的优选方面还包括步骤:(11)将所述第一响应值与和第二操作系统相关的第四预定值进行比较;(12)将所述第二响应值与和第二操作系统相关的第五预定值进行比较;以及(13)将所述第三响应值与和第二操作系统相关的第六预定值进行比较。该实施例的优选方面在于:在所述第一比特模式中未设置任何比特,在所述第二比特模式中设置了一个比特,而在所述第三比特模式中设置了两个比特。该实施例的另一优选方面在于:在具有所设置的至少一个比特的所述第二比特模式中的字节数量大于在具有所设置的至少一个比特的所述第一比特模式中的字节数量,并且在具有所设置的至少一个比特的所述第三比特模式中的字节数量大于在具有所设置的至少一个比特的所述第二比特模式中的字节数量。
本发明的另一实施例是一种确定目标计算机是否处于网络上的系统,所述系统包括:(1)存储在计算机可读介质中的第一组端口标识符,每一个所述第一组端口标识符表示用于接收符合所述网络的第一协议的数据分组的计算机所使用的端口,每一个所述第一组端口标识符表示与已知网络服务相关的端口;(2)第一组数据分组,每一个去往由所述第一组端口标识符中的至少一个所表示的端口,所述第一组数据分组中的每一个符合所述第一协议,并且通过所述网络将其传送到所述目标计算机;(3)响应所述第一组数据分组的传输,通过所述网络接收到的第一组确认分组;以及(4)主机标识符的列表,每一个主机标识符表示在响应发送到所述相应计算机上的分组而传送数据的所述网络上的计算机,如果所述第一组确认分组表示所述目标计算机作出了响应,则将表示所述目标计算机的主机标识符添加到所述主机标识符的列表中。该实施例的可选优选方面还包括:(5a)存储在计算机可读介质上的第二组端口标识符,每一个所述第二组端口标识符表示用于接收符合所述网络的第二协议的数据分组的计算机所使用的端口,每一个所述第二组端口标识符表示与已知网络服务相关的端口;(6a)第二组数据分组,每一个去往由所述第二组端口标识符中的至少一个所表示的端口,所述第二组数据分组中的每一个符合所述第二协议,并且通过所述网络将其传送到所述目标计算机,所述第二组数据分组中的至少一个包括与所述已知网络服务相关的数据;(7a)响应所述所述第二组数据分组的所述传输,通过所述网络接收到的第二组确认分组;以及(8a)如果所述第二组确认分组表示所述目标计算机作出了响应,则将表示所述目标计算机的主机标识符添加到所述主机标识符的列表中。该实施例的优选方面在于:所述第一协议是TCP,所述第二协议是UDP,所述第二组确认分组是UDP数据响应分组的非零组。该实施例的另一可选优选方面还包括:(5b)存储在计算机可读介质上的第二组端口标识符,每一个所述第二组端口标识符表示用于接收符合所述网络的第二协议的数据分组的计算机所使用的端口,每一个所述第二组端口标识符表示与已知网络相关的端口;(6b)第二组数据分组,每一个去往由所述第二组端口标识符中的至少一个所表示的端口,所述第二组数据分组的每一个符合所述第二协议,并且通过所述网络将其传送到所述目标计算机,所述第二组数据分组中的至少一个包括与所述已知网络服务相关的数据;(7b)响应所述第二组数据分组的所述传输,通过所述网络接收到的第二组确认分组;以及(8b)如果所述第二组确认分组并未表示所述目标计算机没有作出响应,则将表示所述目标计算机的主机标识符添加到所述主机标识符的的第二列表中,每一个所述第二列表中的主机标识符表示未知为没有响应的计算机。该实施例的优选方面在于:所述第一协议是TCP,所述第二协议是UDP,所述第二组确认分组是IMCP错误分组的空白组。任意可选实施例的另一优选方面还包括:(9)第三组数据分组,每一个去往由所述第二组端口标识符中的至少一个所表示的端口,每一个符合所述第二协议,在整个预定最大等待时间段内,将所述第三组数据分组传送到所述目标计算机;(10)响应所述第三组数据分组的传输,在时间上第一个接收到的第一响应;(11)响应所述第三组数据分组的所述传输,在时间上第二个接收到的第二响应,在所述第一响应的接收和所述第二响应的接收之间的持续时间定义了目标计算机的等待时间段。该实施例的另一优选方面在于:在所述目标计算机等待时间段的持续时间内,将所述第二组数据分组的每一个连续地传送到所述目标计算机。
本发明的另一实施例是一种通过网络测试目标计算机的可访问性的系统,所述系统包括:(1)存储在计算机可读介质中的一组端口标识符,所述一组端口标识符的每一个均表示符合UDP的端口,所述端口标识符的至少一个表示与已知网络服务相关的端口;(2)一组符合UDP的数据分组,每一个均与由所述一组端口标识符中的至少一个所表示的端口相关,在大致与所述目标计算机的等待时间段相等的持续时间内,将每一个所述符合UDP的数据分组连续地传送到所述目标计算机,所述符合UDP的数据分组的至少一个包括与所述已知网络服务相关的数据;(3)表示可通过网络访问的计算机的第一列表,如果响应所述数据分组的传输接收到UDP数据响应分组的非零组,则所述第一列表包括所述目标计算机;以及(4)表示不能通过所述网络访问的未知计算机的第二列表,如果响应所述数据分组的传输,接收到ICMP错误分组的空白组,则所述第二列表包括所述目标计算机。
本发明的另一实施例是一种确定目标计算机是否可通过网络访问的方法,所述方法包括步骤:(1)识别TCP端口;(2)向所述目标计算机的所述TCP端口发送第一数据分组,每一个所述第一数据分组符合TCP;(3)响应所述第一数据分组的所述发送,接收第一确认分组;以及(4)如果所述第一确认分组是非零的,则将所述目标计算机的表示添加到表示可访问计算机的列表中。该实施例的优选方面还包括步骤:(5)识别与网络服务相关的UDP端口;(6)向所述目标计算机的所述UDP端口发送第二数据分组,在整个所述目标计算机的等待时间段内,将至少一个所述第二数据分组连续地发送到所述目标计算机;(7)响应所述第二数据分组的所述发送,接收第二确认分组;以及(8)如果所述第二确认分组是非零UDP数据响应分组,则将所述目标计算机的表示添加到表示可访问计算机的列表中。该实施例的另一优选方面还包括步骤:(9)通过测量响应传送到所述目标计算机的分组而接收到的响应之间的时间,确定所述目标计算机的等待时间段。该实施例的另一优选方面还包括步骤:(10)将所述目标计算机的表示添加到表示不能通过所述网络访问的未知计算机的列表,如果所述第二确认分组包括ICMP错误分组的空白组,则进行所述添加。
本发明的另一实施例是一种通过网络来评估目标计算机的弱点的方法。所述方法包括步骤:(1)通过向网络上的一组计算机传送一组ICMP分组、一组TCP分组和一组UDP分组,发现在网络上的一组响应计算机;(2)通过向每一个所述一组响应计算机的第一端口传送TCP分组,并且向每一个所述一组响应计算机的第二端口传送UDP分组,检测在所述一组响应计算机的每一个上的服务,所述第一和第二端口通常由计算机用来接收网络上的数据分组,所述TCP分组包括与已知使用所述第一端口之一的至少一个基于计算机的服务相关的数据,所述UDP分组包括与已知使用所述第二端口之一的至少一个基于计算机的服务相关的数据;以及(3)利用响应所述TCP分组和所述UDP分组的传输而接收到的响应,产生响应端口的列表。该实施例的优选方面还包括步骤:(4)通过将预定值与响应对一组响应计算机中的每一个的多个符合TCP分组的传输而从所述一组响应计算机的每一个接收到的响应的部分进行比较,确定由所述一组响应计算机的每一个所使用的操作系统。该实施例的另一优选方面还包括步骤:(5)通过将自动弱点脚本施加到在所述响应端口的列表中所表示的每一个响应端口,确认在所述网络上的弱点的存在,每一个所述自动弱点脚本测试已知与包括多个特定响应端口和特定操作系统的计算机配置相关的弱点。该实施例的另一优选方面还包括步骤:(6)计算所述网络的安全性的客观标记,所述计算基于所确认弱点的加权求和。该实施例的另一优选方面还包括步骤:(7)确定该网络的拓扑,通过利用针对生存(TTL)设置的变化时间来传送一组ICMP分组,并且通过变化的TTL设置来传送一组TCP分组,来进行所述拓扑确定。该实施例的另一优选方面还包括步骤:(8)产生所述网络的图形表示,所述表示包括所述网络的拓扑图、加权确认弱点的基于颜色的表示、以及所述图形表示和描述在所述网络上的所确认的弱点和计算机的信息之间的关联。
本发明的另一实施例是一种创建网络的拓扑表示的方法。所述方法包括步骤:(1)识别所述网络上的响应计算机;(2)通过向每一个响应计算机发送具有对生存(TTL)值的增加时间的分组序列,获得多个IP地址的序列,每一个IP地址的序列表示在源计算机和所述响应计算机之一之间的所述网络中的节点,在每一个序列中的相邻IP地址表示相连的节点,每一个所述节点包括计算机或路由器,(3)产生节点结构的列表,每一个所述节点结构包括表示节点的数据和表示其直接相连的其他节点的数据,所述列表示出了在所述多个序列中的所有IP地址;(4)针对每一个IP地址确定距离计数,所述距离计数表示在具有所述IP地址的节点和源节点之间的节点数量;(5)创建表示包括路由器的节点的每一个节点结构的路由器结构;(6)使每一个所述路由器结构与表示不与除了由所述各个路由器结构所表示的路由器之外的其他节点相连的每一个连接节点的连接数据关联;(7)对于每一个路由器结构,可视地绘制与由所述各个路由器结构的所述连接数据所表示的连接节点相对应的一个或多个图形形状空间相关的图形形状;以及(8)对于每一个路由器结构,当距离计数使所述IP地址与由所述各个路由器结构所表示的路由器关联,并且不同路由器结构表示直接连接时,可视地绘制与各个路由器结构相关的图形形状和与所述不同路由器结构相关的另一图形形状之间的连接。该实施例的优选方面还包括步骤:(9)测试由路由器结构所表示的路由器和在连接数据中所表示的连接节点是否包括一个节点的两个网络连接。该实施例的另一优选方面在于:表示路由器的所述图形形状是球形,并且每一个所述空间相关的图形形状是以表示所述路由器的所述球为轨道的球。
本发明的另一实施例一种计算网络的客观安全分数的方法。所述方法包括步骤:(1)确定用数值表示网络上的已知弱点的组合的弱点值;(2)确定用数值表示在所述网络上的计算机的可访问端口的组合的暴露值;以及(3)通过组合所述弱点值和所述暴露值来得到分数。该实施例的优选方面在于:已知弱点的所述组合为特定弱点的加权数值表达式的求和,所述加权基于利用等级的容易度和针对每一个弱点的访问准予等级。
本发明的另一实施例是一种进行自动网络弱点攻击的方法,所述方法包括步骤:(1)针对网络上的每一个相应计算机,选择一组弱点攻击,针对每一个响应计算机的每一个所选的弱点攻击设计用于暴露与已知为可访问的所述相应计算机的端口相关、并且还与由所述相应计算机所使用的操作系统相关的弱点;(2)对所述一组弱点攻击进行编码,从而将每一个弱点攻击以唯一标识符表示在数据库中;(3)利用自动脚本语言的指令来表示所述一组弱点攻击的每一个;以及(4)通过利用计算机来处理所述指令来执行所述弱点攻击。
本发明的另一实施例是一种分级网络弱点报告。所述报告包括:(1)第一端口级,包括:(a)表示所述网络的安全性的客观分数;以及(b)网络拓扑的图形表示,包括可通过所述网络访问的计算机的图形表示、以及至少一些所述计算机的弱点的基于颜色的图形表示;以及(2)第二端口级,包括:(a)文字列表,描述了所述计算机及其相关的弱点;以及(b)暴露报告,描述了所述计算机的可访问端口和服务。
本发明的另一实施例是一种弱点评估语言。所述弱点评估语言包括:(1)一组编程语言语句,用于创建可执行脚本,所述脚本在线程安全的执行结构中执行,其中,所有变量为栈变量,而分析树作为只读数据结构来处理;(2)一组特殊标量数据类型,可与表达式中的整型数据类型互换,每一个所述一组特殊标量数据类型具有一组常数值,配置用于执行在脚本中具体实现的弱点评估操作;(3)在元范围内所声明的一组本地对象,所述元范围拥有脚本范围以使所述本地对象可用于可执行脚本,所述本地对象便于网络通信,提供了可调用的成员函数,用于建立独特端口列表,并且将脚本执行指向特定主机,并且提供了用于脚本的IP地址;以及(4)弱点对象,进行操作以将其自身拷贝到其他脚本可以访问其信息的全局数据区,以便与另一机器协商,便于由不同脚本所发现的弱点数据的一个脚本使用。
本发明的另一实施例是一种将已知弱点自动施加到目标计算机上的方法。所述方法包括步骤:(1)提供已知弱点数据库,所述数据库包括数据对象;(2)提供可执行脚本,所述可执行脚本与数据对象相关;(3)将可执行脚本施加到目标计算机上,所述脚本形成了在目标计算机的端口上的已知弱点;以及(4)返回表示可执行脚本的成功、失败或其他结果中的至少一个的值。
本发明的另一实施例是一种将已知弱点自动施加到网络上的目标计算机的方法。所述方法包括步骤:(1)提供已知弱点数据库;(2)提供一组可执行脚本,每一个可执行脚本将已知弱点施加到所指定的目标计算机;(3)执行第一可执行脚本,以便将弱点施加到所指定的目标计算机上;(4)监控表示所述第一可执行脚本的每一个的成功、失败或其他结果的返回值;以及(5)利用所述返回值产生报告,所述报告表示所述网络的安全等级。该实施例的一个优选方面还包括步骤:(6)识别执行时间间隔,其中,所述第一可执行的脚本执行在每一个所述时间间隔的开始处开始,并且在每一个所述时间间隔的结束处暂停,直到已经执行了所有所述的第一可执行脚本为止。该实施例的优选实施例还包括步骤:(7)当完成了所述第一可执行脚本的所述执行时,自动地重复所述第一可执行脚本的执行。该实施例的另一优选方面还包括步骤:(8)在所述第一可执行脚本的每一次完整执行时,产生报告;以及(9)通过比较多个所述报告来计算所述网络的安全趋势。该实施例的可选优选方面还包括步骤:(10)执行第二可执行脚本,以便在所述第一可执行脚本的执行期间,将弱点施加到第二计算机网络。该实施例的另一优选方面在于:所述第二网络是所述网络的子集。该实施例的另一优选方面在于:配置所述第一可执行脚本,以便在将弱点施加到所有所述目标计算机的第二端口之前,将弱点施加到所有所述目标计算机的第一端口。该实施例的另一优选方面还包括步骤:分配多个分组时隙,每一个分组时隙允许由所述可执行脚本之一对分组的异步传输。
附图说明
下面结合附图来描述本发明的优选实施例,其中,
图1示出了目标网络的一个实施例;
图2示出了在目标网络上的一个目标计算机的一个实施例;
图3示出了比较测试方法的一个实施例;
图4示出了操作系统识别方法的一个实施例;
图5示出了在图3的操作系统识别方法中所使用的TCP SYN分组的一个示例实施例;
图6示出了确定哪些目标网络为激活的第一阶段扫描的一个实施例;
图7示出了确定哪些端口在目标计算机上是开放的第二阶段扫描的一个实施例;
图8示出了在目标网络上的目标计算机的弱点的有效评估的一个实施例;
图9示出了用于确定目标网络的安全性分数的方法的一个实施例;
图10示出了分级安全性报告的一个实施例,包括网络拓扑和网络弱点的图形表示;以及
图11更详细地示出了分级安全性报告的第二实施例;
图12示出了综合测试方法的第二实施例。
具体实施方式
I.基本实现、结构和控制语言
图1示出了目标网络的一个实施例。在一个实施例中,本发明的网络安全系统100是在Windows 2000操作系统上运行的至少一个基于英特尔的服务器,尽管可以使用能够处理IP网络和能够进行大规模数据处理的任何计算机系统或操作系统。网络安全系统100可以位于网络102的外部或目标网络的内部(未示出)。在任一情况下,系统100经由一个或多个节点104,通过诸如因特网之类的网络与目标网络102相连。在一个示例中,目标网络102由具有中央内联网集线器106的内联网组成。目标网络102还包括防火墙108,用于阻止一些输入业务量或离开目标网络102的输出网络业务量。该目标网络还包括多个主机110,定义为处于因特网协议(IP)地址的预定范围内。在一些情况下,外部主机112可以位于目标网络的外部,但是尽管如此,也与目标网络102相连。
图2示出了在目标网络上的目标计算机的一个实施例。通常,如以下更为一般地定义的那样,如果地址正在由目标网络使用,则主机IP地址表示目标计算机。在主机110处的目标计算机200的简化表示中,目标计算机200在操作系统202上运行。优选地,操作系统包含用于提供分组传输的至少一个网络TCP/IP栈204,并且优选地,包含用于在目标计算机200和网络之间提供原套接字(socket)206连接的结构。在一个实施例中,由网络接口卡(NIC)210提供了对网络208的物理连接。在IP网络上,可以在目标网络200处的65536个逻辑端口212中的任何一个接收分组。类似地,可以提供任意数量的网络服务214。
图3示出了根据本发明的实施例的综合测试方法的一个实施例。图3示出了该方法的概况。以下将结合附图4-11来描述该方法的另外的细节。
在图3的第一步骤或子程序310中,测试方法定义目标网络并创建IP地址的扫描列表。将该扫描列表存储在扫描列表数据库312中。然后,在程序314中,该方法获得来自扫描列表数据库312中的第一批IP地址,并且通过进行在块320中开始的主机发现程序,开始对目标网络的详细分析。
主机发现程序包括ICMP主机发现子程序322,以下将对其进行更详细地描述。在ICMP主机发现子程序322期间,该方法乒测试由当前批的IP地址所识别的目标计算机。根据响应或不响应,ICMP主机发现子程序322能够确定特定的目标计算机是“激活的”或者“可能激活的”,并且相应地,将各个IP地址添加到相应的激活数据库324中或可能激活数据库326中。
在完成了ICMP主机发现子程序322时,该方法进行确定子程序328,其中,该方法确定是否已经发现了在当前批的IP地址中的所有IP地址(即,是否已经将所有的IP地址已经分配给了激活数据库324或可能激活数据库326)。如果还未发现任一IP地址,则该方法进行到TCP主机发现子程序330,以下将对其进行更详细地描述。在TCP主机发现子程序330中,该方法将TCP分组发送到由当前一批IP地址所识别的剩余目标计算机。根据响应或不响应,TCP主机发现子程序330能够确定特定的多个剩余目标计算机是“激活”的或“可能激活的”,并且将相关的IP地址相应地添加到各自的激活数据库324或可能激活数据库326。
在完成了TCP主机发现子程序330时,该方法进行确定子程序332,其中,该方法确定是否已经发现了在当前批的IP地址中的所有IP地址(即,是否已经将所有的IP地址已经分配给了激活数据库324或可能激活数据库326)。如果还未发现任一IP地址,则该方法进行到智能UDP主机发现子程序334,以下将对其进行更详细地描述。在智能UDP主机发现子程序334期间,该方法将UDP分组发送到由当前批的IP地址所识别的剩余目标计算机。根据响应或不响,智能UDP主机发现子程序334够确定特定的多个剩余目标计算机是“激活”的或“可能激活的”,并且将相关的IP地址相应地添加到各自的激活数据库324或可能激活数据库326。
在完成了智能UDP主机发现子程序334时,该方法进行确定子程序336,其中,该方法确定是否已经发现了在当前批的IP地址中的所有IP地址(即,是否已经将所有的IP地址已经分配给了激活数据库324或可能激活数据库326)。如果还未发现任一IP地址,则在一个实施例中,该方法进行到集中UDP主机发现子程序338,以下将对其进行更详细地描述。在集中UDP主机发现子程序338期间,该方法将UDP分组发送到由当前一批IP地址所识别的剩余目标计算机。根据响应或不响应,集中UDP主机发现子程序338能够确定特定的多个剩余目标计算机是“激活”的或“可能激活的”,并且将相关的IP地址相应地添加到各自的激活数据库324或可能激活数据库326。该集中UDP主机发现子程序338是可选的,并且可以不包括在所有实施例中。
在完成了集中UDP主机发现子程序338之后,优选地,该方法进行到在块340中开始的服务发现子程序。可选地,在特定实施例中,有利地,重复前述的主机发现子程序322、330、334、338,以确定是否可以将与目标计算机相对应的附加IP地址赋予激活数据库324和可能激活数据库336。在这样的可选实施例中,在继续服务发现子程序340之前,该方法将主机发现子程序重复最大的预定次数。在一个实施例中,将任一方法未接收到的响应的那些IP地址添加到主机的静寂列表(dead list)339中。
在服务发现子程序中,该方法进行TCP服务发现子程序342,以下将对其进行更详细地描述。在TCP服务发现子程序342中,该方法将TCP分组发送到在激活列表324和可能激活列表326中的所发现目标计算机中的所选端口,并且监控响应。根据响应或不响应,TCP发现子程序342将与目标计算机的开放端口有关的信息添加到目标计算机数据库344中。
在进行TCP服务发现子程序342之后,该方法进行UDP服务发现子程序346,以下将对其进行更详细地描述。在UDP服务发现子程序346中,该方法将UDP分组发送到在激活列表324和可能激活列表326中的所发现目标计算机中的所选端口,并且监控响应。根据响应或不响应,UDP服务发现子程序346将与目标计算机的开放端口有关的信息添加到目标计算机数据库344中。在可选实施例中,有利地,将TCP服务发现子程序342和UDP服务发现子程序346重复有限次数,以确定是否发现了另外的开放端口。
在完成了UDP服务发现子程序346之后(或者在完成该子程序有限次数之后),该方法进行到操作系统(OS)识别子程序350,其中,该方法确定在具有开放端口的每一个激活计算机上所存在的操作系统的类型和版本。如以下将更详细地描述的那样,该方法向目标计算机发送两个或更多(优选地,三个)符合RFC的TCP分组。这些TCP分组在至少一个所选字段中具有预定数据。每一个目标计算机对每一个TCP分组进行响应。将来自每一个计算机的响应信息作为每一个计算机的“指纹”对待。将来自每一个计算机的指纹与指纹数据库352中的指纹进行比较,并且使用比较结果来以较高的精度识别目标计算机。
在完成了针对目标系统的操作系统识别子程序350之后,该方法进行到在块354中开始的跟踪路由子程序。在该跟踪路由子程序中,该方法首先进行ICMP跟踪路由子程序356,其中,该方法使用了ICMP跟踪路由技术,以下将对其进行更详细地描述。特别地,该方法利用TCP/IP报头中的变化TTL(生存时间),向目标计算机发送多个ICMP回应请求分组。该方法根据已知的TTL值、系统和目标计算机之间的“跳(hop)”数、以及每一“跳”的路由器/主机,来创建网络拓扑。将来自ICMP跟踪路由子程序356的信息添加到网络映射数据库358。当所发送的所有分组已经到达、未能到达或超时时,针对该目标计算机完成该路由跟踪步骤。重复ICMP路由跟踪步骤,直到接收到完全跟踪或完成了所选的预定最大的通过数为止。
在完成了预定数量的ICMP路由跟踪通过之后,该方法进行到确定子程序360,其中,该方法确定目标计算机的跟踪已完成还是未完成。如果跟踪未完成,则该方法进行到TCP跟踪路由子程序362。否则,该方法绕过TCP跟踪路由子程序,并且直接进行到弱点评估子程序364。
如以下将更详细描述的那样,除了将TCP SYN分组发送到目标计算机之外,TCP跟踪路由子程序362与ICMP跟踪路由子程序354类似地工作。对于ICMP路由跟踪,递增地增加每一个SYN分组的TTL值,并且针对在扫描系统和目标主机之间的所有“跳”,监控ICMP不可到达分组和SYN ACK分组的返回。通过ICMP跟踪路由和TCP跟踪路由的组合,有利地,创建对每一个目标计算机的完整映射和总体上相对完整的目标网络拓扑的映射,并且将其存储在网络映射数据库358中。
在完成了TCP跟踪路由子程序362之后,该方法进行到弱点评估子程序364。如以下将更详细地描述的那样,在弱点评估子程序364中,该方法执行将公知的弱点施加到激活目标计算机的开放端口的弱点脚本,以确定目标计算机的这些端口是否表现出可能的弱点。该方法使用了在公知弱点数据库366中所存储的信息,以选择针对每一个激活端口所执行的弱点脚本。有利地,将从易受攻击的目标计算机中收集到的信息存储到目标计算机数据库344中。
在一个实施例中,优选地,弱点评估子程序364仅进行与由操作系统识别子程序350和服务发现子程序340所确定的目标计算机的已识别操作系统和开放端口相关联的弱点检查。如果最后未识别操作系统,典型地,该子程序针对目标计算机的开放端口,运行所有公知的弱点。
在一个实施例中,该方法进行到有效评估子程序365。如以下进一步详细描述的那样,有效评估子程序365使用在弱点评估子程序364中从目标计算机中收集到的信息,对激活目标计算机中的开放端口执行进一步的弱点脚本。具体地,有效评估子程序365重新使用从目标计算机所收集到的已知弱点和信息,以便利用来自已知弱点数据库366中的信息和在目标计算机数据库344中所收集的信息,继续确定目标计算机的这些端口是否表现出了可能的弱点。
在完成了有效评估子程序365之后,该方法进行到确定子程序368,以确定该方法是否已经分析了所有可能的目标计算机。特别地,在确定子程序368中,该方法确定是否已经分析了最后一批IP地址。如果还留有另外的几批目标计算机需要分析,则该方法进行到子程序314,以便获得下一批的IP地址。否则,该方法进行到评分子程序370。
在以下将更详细地描述的评分子程序中,该方法根据有效评估的结果和根据在已知弱点数据库366中的弱点信息,针对每一个目标计算机和网络,建立弱点分数。然后,该方法进行到报告子程序372,以下将对其更详细地进行描述,其中,该方法报告扫描、有效评估和评分的结果。
有利地,可以在目标网络上连续地重复该方法,并且可以将其调度到用于在时间上执行该方法的预定扫描窗时间段。例如,在优选实施例中,当网络很少可能被不重地使用时,调度该方法以便在非高峰小时内进行扫描。在特定的优选实施例中,在非峰值(off-peak)小时的窗口的结束处可中断该方法,并且在其暂停在下一个非峰值窗的开始处的位置处恢复该方法。在特定的优选实施例中,通过进行对共享网络资源的线程,该方法同时操作于多个目标网络上。
II.非损操作系统识别
通过知道哪一个特定的操作系统正在计算机上运行,可以突出目标计算机的弱点和对目标计算机的访问。通过对检查其在网络上所接收到的数据分组的操作系统响应,可以实现对目标计算机的操作系统的识别。根据网络协议来产生分组的形式和对这些分组的响应。在因特网请求注解(RFC)文档中阐明了用于因特网上通信的协议的书面定义。例如,在RFC 793中部分地定义了TCP/IP协议,将其并入在此作为参考,并且所述TCP/IP协议包含针对网络上的TCP分组通信的标准模型。尽管几乎每一个操作系统都包括TCP/IP栈,但是按照略微不同的方式来实现每一个TCP/IP栈。由此,来自对特定的操作系统唯一的TCP/IP栈的已知响应可以充当“指纹”以确定目标计算机的实际操作系统。
传统上,已经通过发出符合RFC和不符合RFC的TCP分组的组合,来进行操作系统的检测。然后,传统系统从目标计算机中收集唯一、非标准响应,并且将该响应映射到TCP/IP栈的已知数据库和相关操作系统。然而,该方法趋向于为非精确的,高度依赖于特定的分组形状和目标计算机的TCP/IP栈,并且需要大量的分组来以任意可靠度识别目标操作系统。该方法可以触发在目标计算机处的安全或防火墙警告,更严重地,该方法可能会干扰目标计算机或实际上使计算机崩溃,这大部分是由于将不符合RFC的分组发送到该目标。
典型地,当前系统采用了单独的新特征组,以便使操作系统检测的精度最大,同时使对目标计算机的侵入和干扰最小。在一个实施例中,本发明向目标计算机发送符合RFC的TCP“SYN”(同步)分组。有利地,使用符合RFC的TCP分组减小了路由器或防火墙阻塞了检测分组的可能性,并且极大地减小了检测分组将引起目标计算机处的损坏或崩溃的可能性。在一个特定的优选实施例中,本发明刚好使用了三个符合RFC的TCP分组。由此,在对目标网络上的大量目标计算机的操作系统的检测期间,显著地减小了网络压力。
在一个实施例中,所发送的分组是去往目标计算机上的开放端口的完整标准TCP SYN。将第一分组的选项字段中的MSS(最大分段尺寸)选项设置为0(即,在MSS选项中设置为无比特)。见图5,当由检测系统从目标计算机接收到确认分组,即,SYNACK分组时,由该系统保存来自该分组的特定比特。在一个实施例中,例如,将TCP通告窗、TTL(生存时间)、选项、标记和DF(未打碎)字段保存到第一指纹。
然后,在该实施例中,发送第二分组。第二TCP SYN分组也是标准TCP SYN分组;然而,在第二分组中,将MSS选项设置为128(与MSS选项中的单个比特的设置相对应)。将来自目标计算机的响应SYNACK的部分(优选地,TCP通告窗、TTL和DF比特)再次保存到第二指纹。最后,发送第三TCP SYN分组。该第三TCP SYN也是标准TCPSYN分组;而,在第三分组中,将MSS形状设置为384(与在MSS选项中的两比特设置相对应)。此外,再一次将来自目标计算机的响应SYNACK的部分(优选地,TCP通告窗、TTL和DF比特)保存到第三指纹。
在一个实施例中,按照以下的格式来保存指纹:
AWMSS=0:AWMSS=128:AWMSS=384:TTL:DF:OS其中,例如,
AW=TCP通告窗
MSS=TCP选项最大分段尺寸
TTL=TCP选项生存时间
DF=TCP选项 未打碎分段;以及
OS=操作系统标识。
在另一实施例中,按照以下格式来保存指纹:
AWMSS=0:AWMSS=128:AWMSS=384:OPTMSS=384:OPTMSS=0:OPTMSS=128:TTL:DF:FL:OS
其中,例如,
OPT=TCP选项字节,以及
FL=TCP标记。
然后,将这些指纹与各种操作系统和操作系统版本相关的指纹的已知数据库进行比较。通过将上述方法应用于在测试前具有特定操作系统的已知的各种目标计算机上,可以对已知的指纹进行编辑。例如,运行了Solaris_操作系统的各种版本的已知计算机的测试提供了以下操作系统指纹:
AW0   AW128 AW384  OPT0      OPT128    OPT384     TTL   DF   标记    OS
83E8   8380   8400    02040218   02040080   02040180   FF    0     SA--   Solaris2.6
6050   6000   6000    02040564   02040564   02040564   40    0     SA--   Solaris2.7
6050   6000   6000    020405B4   020405B4   020405B4   40    0     SA--   Solaris8
4000   4000   4080    -          -          -          64    0     -      OpenBSD
                                                                          2.x
4000   4000   4000    -          -          -          64     0    -      NetBSD
                                                                          1.4.2
表2:针对Solaris和BSD操作系统的样本OS指纹
尽管多于一个OS指纹可以与每一个操作系统相关联,已经发现了在不同操作系统的指纹之间的碰撞是极为不可能的。与表2所示类似,可以针对其他操作系统来编辑表格。随着操作系统版本和普及随时间而发生改变,有利地,有规律地对指纹数据库进行更新,以考虑补丁、版本变化和新操作系统。上述的指纹方式仅是这样的数据库的一个实施例,而可以根据所变更的TCP选项、典型地发送到目标计算机的分组数量、存储以进行识别的其他TCP字段、以及用于表示特定操作系统和版本等的标识字段等,使用用于存储操作系统指纹的任何有效方法。在一个实施例中,利用诸如MD5等摘要(digest)算法来压缩和存储针对特定操作系统的唯一数据串。对于另外的示例,并不需要精确的匹配:例如,系统可以采用百分比匹配,诸如在两个指纹之间的90%的相似度,这足以将目标计算机识别为具有特定的操作系统、至少处于特定的操作系统族内。
以下是当进行OS识别时分组的示例交换。将三个标准的TCP SYN分组发送到远程主机。第一分组是无数据并且无IP或TCP选项的SYN分组。分组2也是TCP SYN分组,但是,设置了在TCP选项字段中等于128的TCP最大分段尺寸。此外,第三和最后分组是TCP SYN分组,但是,在TCP选项字段中设置了等于384的TCP最大分段尺寸。
如以上所提到的,通过分析来自3个分组的应答,按照以下的文本格式来组装指纹:
窗口1:窗口2:窗口3:选项1:选项2:选项3:tt1:未打碎:标记
其中,
窗口1=从第一响应接收到的TCP窗口尺寸
窗口2=从第二响应接收到的TCP窗口尺寸
窗口3=从第三响应接收到的TCP窗口尺寸
选项1=选项从第一响应中接收到的字节
选项2=选项从第二响应中接收到的字节
选项3=选项从第三响应中接收到的字节
tt1=来自第一响应的IP TTL字段
未打碎=来自第一响应的IP未打碎比特;以及
标记=来自第一响应的TCP标记的单字符表示。
在以下所示的示例TCP分组中,所得到的指纹如下所示:
40E8:4000:4080:020405B4:020405B4:020405B4:80:1:SA---
据此,将该指纹与已知操作系统指纹的数据库进行比较,以便找到将识别该远程操作系统的最接近的匹配。在该示例中,所发送的三个示例TCP分组和返回的三个示例TCP分组如下所示:------
分组1发送
TCP
原端口:272
目的地端口:80
序列号:0x01100000(17825792)
确认:0x00000000(0)
报头长度:0x05(5)20个字节
标记:SYN
URG:0
ACK:0
PSH:0
RST:0
SYN:1
FIN:0
窗口:0x0040(64)
检验和:0X4518(17688)-正确
紧急指针:Ox0000(0)
TCP选项:无
数据长度:OxO(0)------
分组1应答
TCP
源端口:80
目的地端口:272
序列号:0x659A2C81(1704602753)
确认:0x01100001(17825793)
报头长度:0x06(6)-24字节
标记:STh ACK
URG:0
ACK:1
PSH:0
RST:0
SYN:1
FIN:0
窗口:0xE840(59456)
校验和:0x9A47(39495)-正确
紧急指针:0x0000(0)
TCP选项
最大分段尺寸:0x5B4(1460)
数据长度:0x0(0)
分组2发送
TCP
源端口:528
目的地端口:80
序列号:0x03100000(51380224)
确认:0x00000000(0)
报头长度:0x07(7)-28字节
标记:SYN
URG:0
ACK:0
PSH:0
RST:0
SYN:1
FIN:0
窗口:0x0040(64)
检验和:Ox1E8A(7818)  正确
紧急指针:Ox0000(0)
TCP选项
最大分段尺寸:0x80(128)
数据长度:0x0(0)
分组2应答
TCP
源端口:80
目的地端口:528
序列号:0x659A1BB23(1704639267)
确认:0x03100001(51380225)
报头长度:0x06(6)-24字节
标记:SYN ACK
URG:0
ACK:1
PSH:0
RST:0
SYN:1
FIN:0
Window:0x0040(64)
检验和:0x098D(2445)-正确
紧急指针:0x0000(0)
TCP选项
最大分段尺寸:0x5B4(1460)
数据长度:0x0(0)
分组3发送
TCP
源端口:784
目的地端口:80
序列号:0x05100000(84934656)
确认:0x00000000(0)
报头长度:0x07(7)-28个字节
标记:SYN
      URG:0
      ACK:0
      PSH:0
      RST:0
      SYN:1
      FIN:0
窗口:0x0040(64)
校验和:0x1A8A(6794)-正确
紧急指针:0x0000(0)
TCP选项
最大分段尺寸:0x180(384)
数据长度:0x0(0)
分组3应答
TCP
源端口:80
目的地端口:784
序列号:0x659B732B(1704686379)
确认:0x05100001(84934657)
报头长度:0x06(6)-24个字节
标记:SYNACK
URG:0
ACK:1
PSH:0
RST:0
SYN:1
FIN:0
窗口:0x8040(32832)
校验和:0x4E04(19972)-正确
紧急指针:0x0000(0)
TCP选项
最大分段尺寸:0x5B4(1460)
数据长度:0x0(0)
---------
尽管可以针对目标计算机得到上述的指纹的任意数量的迭代,但是,已经确定了三个指纹提供操作系统最精确地识别,而没有不适当的重复。类似地,尽管可以变更其他TCP选项标记来检测目标操作系统,但是已经发现了变更在多个测试SYN分组上的TCP通告窗最为有效,优选地,利用分别具有等于0,128和384的TCP选项MSS值的三个测试SYN分组。此外,与变更分组中的其他值相比,变更TCP通告窗中的MSS值也几乎不可能干扰目标计算机操作。
在图4中总结了前述的操作系统识别方法。如上所述,根据图4中的方法,网络安全系统410首先通过由线420所表示的第一分组传输,向目标计算机412发送第一符合RFC的TCP SYN分组的。第一TCP SYN分组具有设置为0值(即,清除了所有比特)的TCP选项最大分段尺寸(MSS)。目标计算机412利用由线422所表示的第一SYN ACK分组对第一TCP SYN进行响应。如上所述,根据目标计算机412内的TCP/IP栈中的数据来确定在从目标计算机412中接收到的第一SYN ACK分组中所包括的信息的至少一部分,并且至少部分地由在目标计算机412上正在运行的特定操作系统来确定该数据。
接下来,网络安全系统410通过由线430所表示的第二分组传输,向目标计算机412发送第二符合RFC的TCP SYN分组。第一TCP SYN分组具有设置为128值(即,设置了比特7)的TCP选项最大分段尺寸(MSS)。目标计算机412利用由线432所表示的第二SYN ACK分组对第二TCP SYN分组进行响应。如以上所讨论的,同样根据在目标计算机412内的TCP/IP栈来确定在从目标计算机412中所接收到的第二SYNACK分组中所包括的信息的至少一部分,并且至少部分地由在目标计算机412上正在运行的特定操作系统来确定该数据。
优选地,接下来,网络安全系统410通过由线440所表示的第三分组传输,向目标计算机412发送第三符合RFC的TCP SYN分组。第一TCP SYN分组具有设置为384值(即,设置了比特7和8)的TCP选项最大分段尺寸(MSS)。目标计算机412利用由线442所表示的第三SYNACK分组对第三TCP SYN分组进行响应。如以上所讨论的,同样根据在目标计算机412内的TCP/IP栈来确定在从目标计算机412中所接收到的第三SYN ACK分组中所包括的信息的至少一部分,并且至少部分地由在目标计算机412上正在运行的特定操作系统来确定该数据。
共同地,由网络安全系统410响应TCP SYN分组从目标计算机412中接收到的三个SYN ACK分组中的信息包括以上结合图3所示的、与指纹数据库352进行比较的指纹。
图5示出了在图3的操作系统识别方法中所使用的TCP SYN分组500的一个示例实施例。在更高的(IP)层次上,典型地,该分组提供了源和目的地因特网协议地址和唯一网络地址(未示出)。在TCP层次上,该分组包括从中发送了该分组的源端口510;以及该分组将去往其的目标计算机上的目的地端口512。32比特的序列号514描述了在数据窗中的分组中所包含的数据的起始点,并且32比特的确认号516包括由目标计算机所接收到的最后字节。数据偏移量518和保留部分520也是该分组的一部分。
TCP标记522表示与该分组有关的重要信息。特别地,SYN表示在新流中的第一分组,而典型地,除了在TCP标记区域522中的单一比特之外,针对SYN标记保留在序列号514和516中的空间。窗口524描述了可以将多少数据传送到TCP分组通信中的末端计算机之一处的缓存器中。其中包括校验和626和紧急指针528。典型地,TCP选项530包括最大分段尺寸。在分组填充532之后,添加了由分组所携带的实际数据534。
III.用于目标计算机识别和目标端口识别的多层端口扫描
端口扫描是确保网络安全的必要工具。典型地,将会出现的入侵者将端口扫描程序应用于所选的目标计算机以尝试找到开放端口。通过这些开放端口,该入侵者可能会期望通过已知或未知的弱点获得对目标计算机的访问。在网络安全环境下,将普通端口扫描程序应用于在目标网络上的每一个目标计算机上的所有216(65536)个端口可以显著地消耗网络资源,花费不切实际数量的时间,并且未提供对目标网络的实际弱点的精确计算。
在一个实施例中,当前系统采用了具有至少两个阶段的操作的迭代端口扫描系统:主机发现和服务发现。对于在目标网络中的IP地址范围的特定组(“扫描列表”),主机发现确定了哪些IP地址表示激活目标计算机(即,对网络分组进行响应的计算机)并且将每一个这样的地址添加到“激活列表”中,确定哪些IP地址表示部分响应的计算机,如以下所讨论的那样,并且将每一个这样的地址添加到“可能激活列表”,以及确定哪些IP地址表示未响应的计算机,并且将每一个这样的地址添加到“静寂列表”。在服务扫描中,在主机发现阶段报告为激活的每一个目标计算机经受到可能对业务量开放的已知端口组的扫描。
A.主机发现
如以下更详细地描述的那样,主机发现阶段将一个、两个或三个不同的测试应用于在扫描列表上的每一个IP地址。优选地,分批扫描该扫描列表,其中,并行扫描每一批IP地址(如以下将更详细描述的),以便识别主计算机(即,激活目标计算机)。
i.第一测试(ICMP乒测试请求)
在第一主机发现测试中,将标准ICMP乒测试请求发送到每一个目标计算机。如果接收到响应,则从扫描列表中消除该目标计算机,并且将其放置在激活列表中。在一个实施例,这需要向每一个主机发出ICMP回应请求分组。有利地,可以并行地分批地向多于一个IP地址发出多个ICMP分组。典型地,系统等待,直到分批从所有IP地址中接收到ICMP回应应答,或者ICMP回应请求超时。作为该处理的结果,对于扫描列表上的每一批IP地址,从扫描列表中消除对ICMP回应请求作出响应的IP地址的列表,并且将其放置在激活列表上。
ii.第二测试(第二TCP分组)
如果在第一测试中,未从列表上的一个或多个IP地址中接收到响应,则将一组TCP分组(或者单个的SYN分组,或者全TCP连接序列号(“TCP全连接”))发送到扫描列表中的剩余目标计算机,作为第二主机发现测试。具体地讲,在一个实施例中,选择“TCP发现端口”的列表。根据最可能开放的TCP端口来进行选择。有利地,TCP发现端口列表相对较短,优选地,该列表包括诸如HTTP(超文本传输协议)、SMTP(简单邮件传输协议)等公知的服务端口。表3中示出了TCP主机发现列表的一个非专有的示例实施例。
服务                        端口
FTP                         21
SSH                         22
Telnet                      23
SMTP                        25
HTTP                        80,81,8000
POP3                        110
NetBIOS                     139
SSL/HTTPS                   443
PPTP                        1723
表3:样本TCP发现列表
可以从列表中添加或删除其他通用端口,并且例如,可以针对特定的网络环境来定制该列表,其中,与其他端口相比,特定的端口更可能得到使用。在该示例中,有利地,使用文件传输协议(FTP)、安全外壳协议(SSH)、Telnet、简单邮件传输协议(SMTP)、超文本传输协议(HTTP)和邮局协议(POP3)、NetBios、安全套接字层(SSL)和点到点隧道协议(PPTP)。
在一个实施例中,将标准TCP SYN分组发送到针对每一个目标IP地址(目标计算机)的TCP主机发现列表上的一些或所有端口。对于现有的ICMP乒测试,有利地,在优选实施例中,并行地(即,分批)测试多个IP地址。如果目标计算机利用TCP SYN ACK进行响应,则将该目标计算机添加到激活列表中。否则,对目标的TCP SYN请求超时(即,通过了最大的时间段而不存在来自目标计算机的响应)。
在TCP扫描测试的可选实施例中,利用标准Window_Winsock接口发起标准TCP全连接请求。如果操作系统确认已经完成了TCP三步握手,则将目标计算机添加到激活列表中。如果该目标利用TCP RSTACK,即不明确的响应来进行响应,则将目标计算机添加到“可能激活”列表中。否则,对该目标的TCP请求超时。
前述的测试产生了在激活列表上的激活目标计算机(IP地址)的列表。从扫描列表中删除激活列表上的目标计算机。如果存在还未确认为在“激活列表”或“可能激活列表”上的任何IP地址,则针对在扫描列表中剩余的IP地址,进行扫描目标计算机上的所选UDP端口的第三步骤。
iii.第三测试(智能UDP端口扫描)
如果在前两个测试之后,在扫描列表上剩余有任何IP地址(即,目标计算机),则对剩余地址进行智能UDP端口扫描的第三测试。如以下所描述的,智能UDP端口扫描不同于声名狼藉的不精确的UDP端口的传统扫描。当扫描TCP端口时,来自目标计算机的响应发出信号,表示目标计算机上的目标端口是开放的。相反,尽管对UDP端口进行扫描,但是没有来自目标计算机的任何响应信号表示该目标计算机是开放的,并且仅当所扫描的UDP端口关闭时,将发送响应(ICMP错误消息)。因此,扫描UDP端口的传统方法导致了显著数量的“错误肯定”,其中,UDP扫描导致了无任何响应(表明开放的端口),但是所扫描的UDP端口实际上是关闭的。例如,当防火墙或路由器阻塞了ICMP错误消息从目标计算机返回时,或者当在从目标计算机返回的同时,ICMP错误消息简单地丢失时,可能会发生这种情况。在几千次测试中,这样的错误变得可能。
有时,为了“强制”来自目标计算机的响应,入侵者可能会向目标端口发送不良分组。尽管该已知技术增加了能够识别目标计算机上的开放UDP端口的可能性,但是,该技术实质上也增加了不良分组可能会损坏目标计算机的可能性。此外,防火墙或路由器可以检测和滤出不良分组,并且这样的分组可能会改变具有所尝试的安全漏洞的目标网络。
根据本发明的该实施例的智能UDP端口扫描测试采用了有效的,极少侵入和更精确的方法,以便扫描目标计算机上的UDP端口。对于TCP扫描,创建了通用UDP端口的UDP主机发现列表。
表4中示出了UDP发现列表的一个示例。
服务                             扫描
DNS                              53
DHCP                             67
BootP                            69
NTP                              123
NetBIOS
文件/打印机共享
RPC                              137
管道
WINS代理
SNMP                             161
IKE                              500
表4:样本UDP主机发现列表
与传统UDP端口检测分组中不同,特别地对在根据本发明发送的UDP分组内所包含的数据进行设计,以便根据典型地与UDP端口相关的服务的知识,提示来自所扫描的主机(即,目标计算机)的应答。如果无任何与UDP端口有关的信息可用,将标准数据(例如,表示简单ASCII字符的数据返回或控制字符)放置在UDP分组中。在一个实施例中,典型的UDP数据探查分组设计用于请求来自典型地运行于端口137处的UDP协议上的NetBIOS名服务的响应。图5中示出了针对UDP端口137的典型UDP数据探查。在这种情况下,有利地,该探查是NetBIOS节点状态请求,典型地产生了来自UDP端口的已知响应。
服务       端口                                    数据探查(hex)
                A2   48   00   00  00   01   00   00   00   00   00    00   20   43   4B   41   41   41
                41   41   41   41  41   41   41   41   41   41   41    41   41   41   41   41   41   41
NetBIOS    137  41   41   41   41  41   41   41   41   41   00   00    21   00   01   --   --   --   --
表5:样本UDP数据探查
根据在因特网请求注解(RFC)中的公知信息、专用标准上所公布的规范、对已知端口的业务量的监控、或者较好建立的逆向工程技术,针对已知与特定服务相关联的其他UDP端口,创建类似的UDP数据探查分组。由于标准、技术、操作系统等的改变,特定协议和特定UDP端口经受到时间上的实质变化。优选地,当来自已知协议的数据探查不可用于特定的UDP端口时,发送具有表示至少一个简单ASCII承载返回的数据的标准UDP分组。
对于TCP端口扫描,有利地,并行地扫描多个UDP端口。典型地,该系统将UDP数据探查分组发送到在每一个目标计算机上的UDP端口组。该系统等待,直到从一个或多个目标计算机上接收到UDP数据应答为止,或者所发送的分组已经“超时”为止。如果接收到ICMP不可到达应答,则将主机添加到“可能激活”列表。只有在采用ICMP、TCP和UDP扫描之后还未确定为与激活或可能激活目标计算机相对应的那些目标计算机IP地址留在扫描列表上。
可选地,多次应用采用了ICMP、TCP和UDP扫描步骤的三步骤发现阶段,以便增加在目标网络上的激活目标计算机的识别精度。在一个实施例中,在最初通过所有这些步骤之后,如果存在任何还未识别为在“激活列表”上或者在“可能激活列表上的、扫描列表上的剩余目标计算机IP地址,则针对那些剩余的扫描列表目标计算机,至少将ICMP和TCP步骤重复预定次数。可选地,还可以重复UDP步骤。在特定的优选实施例中,可以将采用了更多端口、不同数据探查分组或更多数据分组的更集中的UDP探查技术应用于在扫描列表上剩余的目标计算机,以便提供在网络上的激活目标计算机的更明确的列表。可选地,可以尝试利用不良分组的传统UDP扫描。
对UDP扫描的益处的一个阻碍在于:一些目标计算机将限制在范围从250微秒到大约1秒内的预定“响应等待时间”时间段内发送的ICMP响应的数量。因此,如果在一个响应等待时间内,向目标计算机发送了对各个端口的二十个UDP请求,则其可能仅会发送表示这些端口已关闭的一个或多个ICMP错误响应,即使所测试的所有二十个端口已关闭。这导致了关于UDP端口状态的实质上的不明确。特别地,当应用传统UDP扫描技术时,可能存在许多“错误肯定”(即,错误报告的开放端口)。
有利地,本发明通过以下方式克服了前述问题:(1)动态地确定目标计算机的等待时间段,以及(2)在至少一个完整的等待时间段内(或者直到接收到ICMP错误响应或UDP数据响应为止),继续对每一个目标端口的UDP端口扫描,以确保未响应UDP端口实际上是开放的,并且不会由于响应等待时间而被掩蔽。通过选择UDP端口,优选为已关闭的端口,并且在预定最大响应等待时间段(即,至少与目标计算机的静寂时间段同样大的时间(在特定实施例中大约为2秒))内发送UDP数据报请求,来确定等待时间段。在响应的ICMP错误消息之间的时间或在UDP响应分组之间的时间表示标准等待时间段。可以重复该测试已确认等待时间段(静寂时间)。
一旦确定了等待时间段,通过在至少预定的等待时间内,或者直到接收到ICMP错误响应或UDP数据响应为止,向目标端口连续地发送UDP请求,来确保响应有效性。如果接收到ICMP错误响应,则可以认为与正在提出的UDP请求相关的端口是关闭的。如果接收到UDP数据响应,则可以认为该相关端口是开放的。如果在整个等待时间段内未接收到响应,则如果路由器、防火墙或分组丢失还未干扰UDP端口响应,则可以认为该相关端口是开放的。
由图6中的处理流程图示出了前述的三步发现阶段和可选集中UDP扫描步骤。如以上所讨论的并且如图6所示的,发现阶段以扫描列表610开始,有利地,将该扫描列表610解析为多批的IP地址612。在步骤620中,获得一批IP地址来进行处理。在步骤630中,如以上所讨论的,进行ICMP乒测试。根据测试的结果,将每一个IP地址添加到激活列表632中,或者保留在当前一批IP地址612中。如图所示,该处理还利用可能激活列表634和静寂列表636进行操作。
在进行ICMP乒测试之后,在确定步骤638,该处理确定在当前一批中的任何IP地址是否还未添加到激活列表。如果未剩下任何IP地址,则该处理进行到确定步骤640,其中,该处理确定所有这些批的IP地址是否已经被扫描。如果还剩下了几批IP地址,则该处理返回到步骤620,并且获得新一批的IP地址。否则,该处理结束。
如果在确定步骤638中,处理确定了一个或多个IP地址还未被添加到激活列表中,则该处理进行到步骤650,其中,利用TCP发现端口列表652来进行上述的TCP发现扫描。根据该扫描的结果,将IP地址添加到激活列表632或添加到可能激活列表634中。然后,在确定步骤654,该处理确定在当前一批中的任意IP地址是否已经被添加到激活列表或可能激活列表。如果未剩下IP地址,则该处理进行到以上所讨论的确定步骤640。
如果在确定步骤654,该处理确定了一个或多个IP地址还未被添加到激活列表或可能激活列表,则该处理进行到步骤660,其中,利用UDP发现端口列表662来进行上述的智能UDP发现扫描。根据该扫描的结果,将IP地址添加到激活列表632、可能激活列表634或静寂列表636。然后,在确定步骤664,该处理确定在当前一批中的任意IP地址是否已经被添加到激活列表、可能激活列表或静寂列表中。如果还剩下了IP地址,则该处理进行上述的确定步骤640。
如果在确定步骤662,该处理确定了一个或多个IP地址还未被添加到激活列表或可能激活列表,则该处理进行到步骤670,其中,利用第二UDP发现端口列表662来进行上述的集中UDP发现扫描,有利地,其中包括要扫描的附加端口。在一个实施例中,有利地,第二UDP端口列表672是以下所描述的UDP服务端口列表,但是可以使用UDP端口的任意组合。根据集中扫描的结果,将IP地址再次添加到激活列表632、可能激活列表634和静寂列表636中。然后,在确定步骤674,该处理确定是否需要重复该发现测试。如果已经将所有IP地址添加到三个列表之一,并且未剩下任何IP地址,则处理进行到以上所讨论的确定步骤640。如果剩下了还未被添加到这些列表之一中的任意剩余的IP地址,则该处理确定针对当前一批IP地址,是否已经将这些扫描步骤进行了预定次数。如果已经将这些步骤执行了预定次数,则该处理进行到确定步骤640。否则,该处理返回到ICMP乒测试630,以便再次处理剩余IP地址。
如以上所讨论的,集中UDP发现扫描670是可选的。如果并未包括集中UDP发现扫描670,则有利地,跟在智能UDP发现扫描660之后的确定步骤664包括附加确定,以根据是否已经将扫描处理进行了预定次数,来确定是否重复该扫描处理。
B.服务发现
在一个实施例中,然后,本发明进行到利用激活列表、并可选地还利用可能激活列表来更详细地检查每一个主机(即,目标计算机)。在服务发现中,对一组通用TCP服务端口和一组通用UDP服务端口进行扫描。典型地,TCP服务发现列表和UDP服务发现列表实质上大于TCP主机发现列表和UDP主机发现列表。典型地,每一个列表包括通用于通信的一些端口的子组。例如,每一个列表可以包括几个到几百个端口中的任何位置。典型地,每一个列表包括如表6所示的端口(由Microsoft_针对Windows_2000所公开报告的默认端口的典型列表)。该列表并不是完全彻底的,并且在技术、协议、网络基础设施和操作系统中的变化经常会改变端口要求。
服务               UDP端口    TCP端口
NetBIQS            138,137
Client/Server                 135
CIIFS              445        139,445
DCOM               135        135
DHCP                          67,68,135
DNS                53         53,139
Exchange 5.0                  135
IMAP                          143,993
LDAP                             389,636
POP3                             110,995
RPC                              135,1500,2500
SMTP                             25
NNTP                             119,563
文件共享             137         139
FTP                              20,21
HTTP                             80,443,8000,8080
IIS                              80
IKE                  500
IRC                              531
ISPMOD                           1234
Kerberos             88,464     88,464,543,544,2053
WinNT Login          137,138    139
Macintosh文件服务                548
MSN Chat/Messaging   1801,3527  135,569,1801,2101,
                                 2103,2105,6665,6667
NetMeeting                       389,522,1503,1720,1731,
PPTP                             1723
打印机共享                       137
SNTP                 162
SQL/Pipes/RPC        137         139,1024-5000,1433
Telnet/终端                      23,3389
UNIX打印                         515
WINS                 137         42,102,135,137
表6:用于服务发现的UDP和TCP端口的示例组
由于在每一个目标计算机上存在216个(65536)个可能端口,由此,优选对端口子组的选择,这是由于时间限制通常排除了对每一个目标计算机上的所有端口的扫描,特别是在大型网络上。类似地,在每一个目标计算机上随机选择端口不可能有结果,这是由于一般目标计算机将运行小于十几个,并且在极少情况下运行几十个或几百个的服务,从而会使通过端口的随机选择命中开放端口的可能性效率低下和不准确。
根据本发明的优选实施例,TCP服务发现使用了较大的TCP服务扫描端口的列表,以上示出了其中几个,并且尝试与每一个目标计算机上的每一个目标端口相连。对于上述的主机发现,标准的TCP SYN扫描需要等待来自每一个目标端口的SYN ACK响应,或者TCP“全连接”扫描需要等待表示目标计算机和扫描系统之间的三步握手已经完成的操作系统消息。将对这些攻击的任一个肯定地作出响应的目标计算机添加到易受攻击计算机的列表,以经过对找到的每一个开放目标端口的弱点评估。
根据本发明的优选实施例,UDP服务发现使用了较大的TCP服务扫描端口的列表,以上示出了其中几个,并且尝试与每一个目标计算机上的每一个目标端口相连。对于上述的主机发现,有利地,本发明可以将改进的UDP数据探查分组用于识别为通常与特定服务相关的任意端口。可选地,可以使用其中包括表示诸如一个或多个ASCII字符返回的数据的分组。将对该攻击肯定地作出响应的目标计算机添加到易受攻击计算机的列表中,以经过对所找到的每一个开放目标端口的弱点评估。典型地,所使用的弱点局限于与如操作系统识别系统所发现的目标计算机的操作系统相关的那些弱点,如先前所描述的,以及与在目标计算机上所找到的开放端口相关的那些弱点。如果最后不能够识别目标计算机的操作系统,则典型地,针对目标计算机,测试在这里所描述的服务发现系统期间与在目标计算机上所找到的开放端口相关的所有弱点。
对于主机发现,可以将更集中的UDP扫描机制应用于未对简单UDP数据探查分组作出响应的目标计算机。有利地,例如,更集中的UDP扫描机制使用与上述的可选等待时间解析组合的传统UDP端口扫描。
在弱点评估之后,发生了对目标计算机的可选有效评估。有效评估将目标计算机操作系统、开放端口、以及在弱点评估期间中目标网络中所恢复的信息的知识应用于针对每一个目标计算机、进一步测试知道的弱点。
多端口的并行处理
在一个优选实施例中,有利地,本发明“分批”地进行端口扫描,而不是逐一地完成各个端口的串行扫描。这使大扫描的几个小的部分得以完成,并且将其保存到数据库中,不同时需要在存储器中保存大扫描的整个结果。例如,如果对A类网络进行测试,则仅针对主机发现,就需要扫描几亿个端口。有利地,该系统可以适合于旧的网络设备中的技术限制,以便扫描在具有多个相当大的IP地址范围的非常大型的目标网络中的计算机端口。在网络或系统故障的情况下,该系统恢复跟在最近已知的成功完成的一批扫描之后的特定的大型扫描。
在端口扫描处理期间,本发明的优选实施例识别整个IP地址的扫描范围的小部分或“批”,例如,包括表示在扫描范围中的64个目标计算机。主机发现利用第一批目标计算机而开始。当已经发现了在第一批中的所有激活主机时,与诸如这里所描述的操作系统识别、网络拓扑的跟踪路由、以及弱点的有效评估的其他测试服务一起,对第一批中的激活主机进行TCP和UDP服务的服务发现。当完成了一批时,将结果存储在弱点数据库中。然后,类似地,处理下一批的64个目标计算机,依此类推,直到已经针对目标网络处理了整个扫描列表为止。
优选地,在一个或少量的端口上并行地测试大量的目标计算机,而不是在单个或少量的目标计算机上并行地测试大量的端口。典型地,前一种方法防止了在任何单个的目标计算机上的不适当负荷,防止了网络超负荷,并且减小了触发目标网络安全警告的危险。有时,例如,如果针对扫描有选择地选出了几个目标计算机,则优选后一种方法。
更具体地,在一个典型实施例中,本发明同时使用640个分组时隙。有利地,将分组时隙分配到存储器中的空间,在等待响应或等待所发送的分组超时的同时,跟踪所发送的分组。由此,当处理一批目标计算机时,可以同时处理多达640个ICMP请求分组,但是将会意识到,可以同时分配和使用不同数量的时隙,大于或小于640个。当针对所发送的分组之一接收到ICMP响应时,或在分组已超时之后,然后,将为该分组分配的时隙发信分配,以便发送新的分组并监控任意响应或超时。由此,分组包括保持快速率的运动,这是由于在发送一个分组和接收响应以及/或者另一分组超时之间,存在较小的平均延迟。更为可能地,例如,到已经发送了第640个ICMP请求分组时,才将会接收到对一个所发送分组的响应,从而释放了相关的时隙,以便处理另一分组。通常,将类似方法应用于TCP SYN分组的处理、UDP主机发现和服务发现。如本领域的技术人员将会意识到的,操作系统识别和跟踪路由可以使用类似分批的并行端口监控。对于这些处理,所使用的时隙数量并不局限于640个时隙,并且可以针对编程或扫描效率而改变。
作为示例,本发明的一个实施例使用了一百个目标计算机的批量尺寸,用于同时扫描。对于主机发现,ICMP扫描处理发送100个ICMP回应请求,并且监控响应和超时。由于这小于该实施例中的640个分组时隙,可以发出所有ICMP请求分组,并且同时可以监控针对所有分组的响应或超时。假定10个TCP端口的TCP主机发现列表,TCP主机发现扫描程序将最终发出1000个分组(100个目标计算机×10个端口=1000个分组)以探查所有列出的计算机的所有列出端口。在该实施例中,最初,扫描程序将利用所有640个分组时隙,在顺序的突发中发出640个分组。然而,如以上所讨论的,到发送了第640个分组时,可探查到(根据超时设置和该系统接收到多少响应)先前所发送的640个分组中的至少一个将已经产生了响应或超时,释放该分组时隙,以便发送剩余的360个分组之一。通过持续地监控响应分组和超时的接收,可以测试目标计算机的整个列表,而几乎没有浪费的时间。
可以使用更大的批量尺寸和更多的分组时隙,但是这样的使用的效率取决于目标网络包括激活主机、超时值、网络响应时间、存储器和其他系统资源等中的多少。通常,在主机发现阶段中,非常大批量尺寸相应地花费更长时间,从而到系统开始在服务扫描阶段中扫描所发现的主机时,存在这些目标计算机可能已经在某些方面发生了改变的更大可能性。
图7中的处理流程图示出了上述服务发现阶段。该处理以激活列表710开始,有利地,对应于由图6所示的主机发现处理所产生的激活列表632。该处理还可以包括在图6中所产生的可能激活列表634;然而,为了便于解释,图7中未示出可能激活列表。有利地,将激活列表710中的IP地址解析为批量的IP地址712。如以下所描述的,图7中的处理对目标计算机弱点数据库714和已知弱点数据库716进行操作。
在图7的第一确定步骤720中,该处理确定是否正在进行TCP SYN扫描或者TCP“全连接”扫描。如上所述,TCP全连接扫描处理需要该处理等待表示在目标计算机和扫描系统之间的三步握手已经建立的操作系统消息。在TCP SYN扫描处理中,该处理等待来自每一个目标端口的SYN ACK响应,在该情况下,如上所述,可以并行地处理这些目标计算机。在两种情况下,处理均进行到步骤722以获得表示第一批激活(或可能激活)目标计算机的第一批IP地址。如果正在进行TCP全连接扫描,则该处理一次性在目标计算机上的更少量的端口上操作。然后,该处理进行到确定步骤730。
在确定步骤730中,该处理确定在TCP全连接扫描中是否已经处理了所有激活目标计算机,或者在TCP SYN扫描中是否已经处理了所有批量的激活目标计算机。如果已经处理了所有目标计算机或所有批量的目标计算机,则处理结束。否则,处理进行到TCP分组扫描子程序740,其中,处理使用TCP服务发现列表720来识别要针对每一个目标计算机检查的TCP服务端口。如上所述,将TCP发送到每一个目标计算机中的已识别TCP服务端口,并且根据接收到响应还是未从每一个所扫描的TCP服务端口的每一个目标计算机接收到响应,并且利用已知弱点数据库来获得针对确定为开放的特定TCP服务端口的弱点信息,针对每一个目标计算机更新目标计算机弱点数据库714。
在进行了TCP服务扫描子程序740之后,该处理进行到可选的UDP等待时间测试750,其中,确定每一个目标计算机的等待时间,并且将其存储在等待时间数据库752中。该处理从等待测试750或直接从TCP服务扫描子程序740进行到UDP服务扫描760,其中,该处理使用UDP服务发现列表762来识别要针对每一个目标计算机检查的UDP服务端口。如上所述,将UDP分组发送到每一个目标计算机中的已识别UDP服务端口,并且根据接收到响应还是未从每一个所扫描的UDP服务端口的每一个目标计算机接收到响应,并且利用已知弱点数据库来获得针对确定为开放的特定UDP服务端口的弱点信息,针对每一个目标计算机更新目标计算机弱点数据库714。
在完成了UDP服务扫描子程序760之后,该处理进行到确定步骤770,其中,该处理确定是否已经从所有扫描的服务端口中接收到响应。如果没有,则该处理确定是否已经将当前目标计算机或一批目标计算机的扫描进行了预定次数。如果所有扫描的服务端口已经作出了响应,或者如果已经将该扫描进行了预定次数,则处理返回到步骤720。否则,该处理返回到TCP服务扫描子程序740,以扫描还未作出响应的服务端口。
C.标志旗抓取
“标志旗抓取”是从目标计算机中接收到的分组中剥离相关信息的方法。在一个实施例中,针对激活列表中的每一个目标计算机,针对在服务扫描阶段期间所发现的每一个开放TCP端口和每一个开放UDP端口,尝试进行标志旗抓取。如果从响应的TCP或UDP分组中成功地获得了信息,则将该信息存储在与从中获得了该信息的目标计算机相关的数据库中。随后,使用所存储的信息来收集在目标计算机上的弱点信息,并且还将该弱点信息存储在数据库中。
对于在服务发现阶段期间所定位的每一个开放TCP端口,如果已知该端口典型地与特定服务相关,则向该端口发送TCP数据探查。由此,例如,当向目标计算机上的目标TCP端口80发送TCP数据探查时,其中TCP端口80公知为HTTP的通用服务端口,该系统发送符合HTTP的GET请求,并且从目标计算机发送回的任何TCP响应分组中剥离有用信息。如在上述表格中所提到的,可以将类似命令用于其上运行了公知服务的其他端口。有利地,可以将所获得的有用信息变换或解译为可读或可处理形式(例如,文本),并且进行存储以便以后进行报告。
对于在服务发现阶段期间的每一个UDP端口,将类似的UDP数据探查发送到已知为典型地与服务相关的目标计算机上的每一个UDP端口。由此,例如,从前述的表格中,已知UDP端口137与NetBIOS服务相关。在一个实施例中,该系统发送诸如NetBIO节点状态命令,并且从由目标计算机所发送的任何响应分组中剥离和存储有用信息。此外,有利地,可以将按照该方式所获得的信息变换或解译为可读或可处理形式(例如文本),并且存储以便以后进行报告。
IV.跟踪路由
在一个实施例中,针对激活列表中的每一个目标计算机,尝试在系统和目标计算机之间进行ICMP跟踪路由。如果ICMP跟踪路由不完全,则尝试在系统和目标计算机之间进行TCP跟踪路由。根据针对每一个目标计算机的跟踪路由结果,创建目标网络拓扑的映射,并将其存储在数据库中。
最初,进行传统的ICMP跟踪路由。利用TCP/IP报头中的可变TTL(生存时间)值,将大量分组发送到目标计算机,以等于1的TTL开始。如果ICMP回应请求分组未能到达目的地目标计算机,则其将返回包含该分组从中返回的路由器/主机的IP地址的ICMP目的地不可到达分组。到达目标计算机的分组自身返回ICMP回应应答分组。根据已知的TTL值,可以映射出系统和目标计算机之间的“跳”数、以及在每一个“跳”的路由器/主机。当所有分组已经到达或超时时,如果存在与系统和目标计算机之间的每一“跳”相关联的路由器/主机和IP地址,则针对该目标计算机完成了跟踪路由步骤。针对多个预定的通过,继续该ICMP跟踪路由,直到接收到完全跟踪或完成了最大数量的通过位置。如果在预定次数的通过之后,目标计算机的跟踪路由不完全,则尝试TCP跟踪路由。
TCP跟踪路由与ICMP跟踪路由类似地工作,除了使用了TCP SYN分组之外。在一些情况下,由于诸如ICMP分组有时会由防火墙或路由器阻塞,由此,在完成另外的不完全跟踪时TCP分组更为可靠。典型地,从针对作为跟踪路由的对象的目标计算机而发现的开放端口列表中获取所选的TCP端口。对于ICMP跟踪路由,递增地增加在每一个SYN分组中的TTL值,并且针对在扫描系统和目标主机之间的每一个“跳”,监控ICMP不可到达分组和SYN ACK分组的返回。通过ICMP跟踪路由和TCP跟踪路由的组合,有利地,创建了对每一个目标计算机的完全映射,并且集中地创建了相对完全的目标网络拓扑的映射。
尝试这些网络映射,以便按照最简明的方式来表示由跟踪路由方法所发现的可能的网络拓扑。基本上,利用针对在其上由远离扫描机许多跳的机器将发送表示由于跳数而无法传输的分组的跳数,所设置的生存时间字段,向在扫描的网络中每一个所发现的主机发送分组。通过增加TTL并存储作为响应的这些机器的IP,直到从所讨论的主机中得到响应为止,建立表示这些机器将通向该主机的一串IP。该过程远非最佳的。在给定跳处的机器可以不在跟踪路由算法所期望的时间内作出响应,或者如果防火墙阻塞了跟踪路由分组,则其可能根本不作出响应。可能存在的任何方法必须处理在某些方面的该不确定性。在一个实施例中,假定任何未知IP为防火墙。
利用一组已发现的主机来提出通常采用的算法,并且每一个主机包括表示跟踪路由算法最初确定了哪些机器通向其的IP地址。该串可以包括由0xFFFFFFFF或255.255.255.255表示的未知机器。该算法按照以下方式操作:
- 压缩未知机器:利用未知IP地址(0xFFFFFFFF)将连续的未知机器压缩到单个的跳中。如果将跟踪路由进行到给定跳,并且接收未知机器,可能的是,由于第一未知跳是阻塞分组的防火墙,因此,在该跳之后的每一跳也将是未知的。
- 未知机器解析:通过检查其他路由以查看是否存在具有在由所有已知机器连接的、该路由中的未知机器的任一侧上的IP地址的路由,来尝试解析未知机器。如果找到了该路由,则利用这些机器来替代未知机器。这尝试了去除了虚假的未知机器,从而使其不会被错误标记为防火墙。这将不会去除实际防火墙,由于防火墙通常是未知的。
- 节点设置的建立:建立类型路由节点的结构列表。这是其中确保这些IP地址唯一(除了如稍后所描述的未知机器之外)、并且这些IP地址表示在网络中所发现的所有IP地址的设置(即,由扫描处理所发现的主机以及由路由跟踪处理所发现的通向其的跳)的列表。如果该IP地址不是在扫描处理中所发现的主机中的一个,并且另外将指向由该处理所发现的主机数据,则每一个路由节点(ROUTENODE)结构中的m_pHost成员将为“空”(NULL)。如所提到的,利用IP地址,已知的机器是唯一的。由紧挨在其前面的IP地址来识别未知机器。结果,在其之前具有相同IP地址的未知机器典型地被认为是相同的防火墙,由此,由列表中的单个路由节点来表示。
- 填充连接:每一个路由节点结构在其中具有路由节点指针的列表,其中表示了路由节点直接与其相连的机器。该算法接下来填充该列表,以确保在每一个连接的列表中,IP地址是唯一的。注意,这些指针指向在列表中的其他路由节点结构(即,典型地,该列表是自持的数据群。)
- 计算离因特网的距离:针对每一个主机和针对每一个IP地址,再一次截取跟踪路由信息。在列表中查询相应的路由节点结构,并且根据路由中的跳数来设置该结构的m_nDistFromInternet。典型地,这样做来表示最大跳数。换句话说,将m_nDistFromInternet初始化为0,然后,如果在跟踪路由IP串中的跳数更大,则将m_nDistFromInternet设置为该跳数。例如,IP地址(例如,将其称为“d”)在一个路由中可以作为a-b-d出现,而在某一另外的路由中可以作为a-b-c-d出现,其中“a”、“b”和“c”是在去往IP地址c的路由上的其他IP地址。当该部分算法完成时,d将具有m_nDistFromInternet=4。由该算法使用该信息以知道一个机器是否在另一机器之前。注意,出于使问题得到合理计算的原因,所发现跳的长度的该最大值是试探性的。如果特定机器应该被绘制为与另一机器相连(由于其直接与另一机器相连)并且在一个路由器上在该另一机器之前,但是由于该机器处于使其m_nDistFromInternet与在另一路由中与其相连的该机器的相同m_nDistFromInternet或更多m_nDistFromInternet发生碰撞的某另外路径中,而未绘制出前述方式,则可能会出错。这种情况是极少的,并且典型地,该启发方式是可接受的。
- 建立路由器列表:然后,该算法截取该路由节点列表,以便建立路由器结构的列表。路由器结构包含指向据信为路由器的路由器节点的指针、以及与其相连的叶(路由末端)机器的路由节点指针的列表。叶节点是仅与一个机器(除其自身之外)直接相连的任意路由节点。出于该算法的目的,路由器是该机器。此算法的该节点建立了路由器结构的列表,并且在每一个路由器内,建立了与该路由器相连的叶路由节点的列表。由于其将变得需要知道在路由节点列表中的哪些机器是路由器而不想查询路由器列表,由此,该算法还标记了正在被指定为路由器的路由节点内的布尔型字段。
接下来将讨论对该算法的改进,但是首先,有用的是,需要讨论如果算法在这里完成,则需要如何得出映射(map)。此刻,该算法具有一组路由器,并且在每一个路由器内,具有与该路由器相连的叶节点的组。在将要详细描述改进之前,映射再现器(renderer)将每一个路由器绘制为球体,并且将其所有的叶节点画作侵入的围绕路由器球周围的轨道上的环中的小球体。然后,该算法寻找其m_nDistFromInternet字段小于该m_nDistFromInternet字段的其他路由器(即,寻找直接与该路由器相连并在该路由器之前的路由器)。该算法采用其所找到的最大m_nDistFromInternet的路由器,并且将该路由器与其可见地相连。如果其未找到任何前面的路由器,则其将该路由器与映射中间的因特网“云”相连。该改进的算法仍然会进行以上所述的过程,但是典型地,在之前并不进行更多一点的处理。
- 路由器提升:存在以下情况:到目前为止所详细描述的该算法将会产生一映射,其中,路由器具有围绕其的具有相同子网的叶节点,例如,其可以全为149.17.1.xxx。前面的1个、2个或3个数字(每一个数字8个比特)将是相同的。该路由器具有与其直接相连的、拥有较小m_nDistFromInternet的路由器,其具有刚好1个叶节点,并且该叶节点通常具有与第一路由器叶节点列表中的所有叶节点相同的IP地址数字。在这种情况下,尽管跟踪路由数据表明第一路由器和该单个的叶节点是不同的机器,但是其可能是在相同机器上的两个NIC(网络接口卡)。由此,该算法通过将其IP地址添加到第一路由器的路由器节点的m_lnOtherNics成员上,然后从其他叶节点的路由器列表中删除该IP地址,并且标记出该路由器的路由节点不再是路由器,“提升”了该路由节点。还从路由器列表中删除该路由器。然后,在映射上,将路由器的基本IP地址按照通常的方式表示,但是现在,在其下方存在灰度条和其他IP地址。该算法支持处理多穴(home)路由器,并且将表示得到提升的所有IP。通过将对这里所讨论的双穴示例进行扩展,可以容易地想到多穴的情况。
- 其他类型的路由器提升:该优选的算法还进行另一类型的路由器提升。如果在某路由器周围的更好一个叶节点实现为启发式的,则将该叶节点提升为路由器上的另一NIC。为了对启发性进行测试,该机器需要是在扫描处理期间所发现的主机,这是由于该主机是信息来源的位置。值得注意的是,最多的叶节点将成为所发现的主机。尽管该算法并不要求这一点,并且跟踪路由信息可能会产生未发现主机的跳,这些跳首先仅与其相连,从而成为了其中的叶节点,由于正在对所发现的主机进行跟踪路由,由此,这些叶节点将趋向于成为所发现的主机。在一个实施例中,该启发如下:如果发现了TCP 2001、4001、6001或9001,或者如果发现了UDP 520或同时发现了UDP 23和79,或者如果所发现的操作系统是Cisco,则将路由节点假定为路由器IP地址,并且对其进行提升(添加到从其叶节点中删除的路由器的m_lnOtherNics和路由器节点指针上的IP地址)。
- 防火墙提升:防火墙提升类似于上述的试探性的路由器提升。在一个实施例中,如果在防火墙周围的刚好一个叶节点满足为试探性的,则将其提升到防火墙的另一NIC列表中,产生了映射打印“防火墙”,但是现在,由在其下方的灰度条分隔了该已知IP地址。在一个实施例中,启发在于:如果在机器上找到了TCP 256,257,264,265,则认为其是防火墙。
- 对防火墙进行编号:这是该算法的最后一个步骤。按照在其前面的IP地址的顺序对该防火墙进行排序,然后对其进行编号,从而该映射可以在报告上打印“防火墙-1、防火墙-2、……等”。
按照该方式,可以相对精确地内部存储整个网络映射,并且将其转换为用于报告的可视表示。
V.弱点识别和有效评估
对于每一个已知的TCP端口、UDP端口和操作系统,根据弱点识别码,将用于该结构的已知弱点存储在弱点数据库中。有利地,对于在弱点识别数据库中的许多弱点,可以将用于测试弱点的方法写入到自动脚本中,该自动脚本将针对所怀疑的弱点,评估目标系统的实际弱点。在一个实施例中,按照评估安全脚本语言来准备这些脚本,并且优选地,按照FASL来准备这些脚本。在一个实施例中,FASL是基于C++和Java实现的脚本语言。FASL提供了用于安全检测各种弱点的可调、自动语言。有利地,可以并行地运行多个FASL脚本。例如,在一个示例中,可以运行多达8个的同时脚本。例如,每一个FASL脚本将以成功或失败结果进行响应,表示该目标计算机对于给定的弱点识别码而言是否为易受攻击的。将由FASL从目标计算机中所收集到的信息、以及尝试的成功或失败存储在与目标计算机相关的数据库中,用于以后的报告、用于另外的弱点检测、或者用于重复附加测试。
VI.FASL脚本语言
FASL语言的实现在结构上与C++类似。在一个实施例中,FASL包括结构对象中的成员函数、结构对象中的构造函数和析构(destructor)函数、结构对象中的继承、标量型的阵列、新标量类型“二进制”和相关函数、支持包括嵌入的零字节的嵌入的16进制代码的串常数、用于RPC和Netbios检查的RPCCheck()和SMBCheck()函数、对二进制类型产生16进制输出的所有标量类型的debugMessage()、递归、函数超载、参考参数、以及对有效评估的支持。
在FASL的一个特定实现中,所有变量均是栈变量。除了允许的递归之外,还允许建立分析树一次,然后使用其由多个线程来进行相同的脚本。在FASL中的执行结构将分析树处理为只读数据结构。由此,除了考虑诸如相同脚本的两个实例尝试在相同的目标计算机IP和端口(实际上不应该发生)对套接字(Socket)进行实例化的情况之外,FASL完全是线程安全的。
A.标量数据类型
标量数据类型是在语言中占用执行栈上的一个时隙的那些本地类型。基本上,可能声明的任何变量是标量类型的、标量类型的阵列、或结构的实例。以下示出了该标量类型:
标量类型             定义
空(void)             函数返回类型
整型(int)            64比特的有符号整数
字符串(string)          任何长度的可打印字符的串,以“空”终止
二进制型(Binary)        任意长度的任意字节的串,以“空”终止。类型跟踪其长度
字符型(char)            8比特有符号整数(可与整型互换)
布尔型(Boolean)         真或假(不可与整型互换)
                     表7:FASL数据类型
典型地,以“空”来终止所述“串”。这表示在内部,所述串表示为以零标记末尾的字符串。然而,零的存在总是不明确的。换句话说,不存在将向你返回零的串函数。通过对字符的数量进行计数直到零但不包括零为止,对所述串的长度进行计算。如果将常数分配给诸如“this is a string\xO with stuff beyond the zero”的串时,也可以对其进行这样的处理。该串的值将是“this is a string”,并且其长度将为16。通常,类型二进制在其内部表示中将不会使用零或任何其他定界字符。具有嵌入零的串常数的示例将具有也在二进制中的零之后的任何内容。
例如,
binary b=“1234”;//长度=4.
string s=“1234”;//长度=4.
binary b=“zzzz\xOssss”;//值=“zzzz\xOssss”,长度=9.
string s=“zzzz\xOssss”;//值=“zzzz”,长度=4.
以下示出了与int等价(在表达式中可与int互换)的类型:
类型                            描述
攻击(Attack)                    指定了攻击类型
操作系统                        指定了脚本的目标操作系统
(Operatingsystem)
协议(Protocol)                  指定了由套接字所使用的协议
返回值(Retumvalue)              指定了脚本的状态(脚本返回值)
IP服务(Ipservice)               服务的IP类型
IP选项(Ipoptions)               IP选项
IP偏移量(Ipoffset)              IP偏移量
                           表8:附加int类FASL类型
表示给定类型的常数值的关键字如下:
常数关键字               值
空(null)                 0(整型、字符型、布尔型)
真(true)                 1(布尔型)
假(false)                0(布尔型)
表9:附加FASL常数
等价于int的上述类型也具有表示这些类型的常数值的关键字。其(与以上相对应)如下所示,例如:
类型           描述
攻击         ATTACK_UNKNOWN,ATTACK_INTRUSIVE,ATTACK
             _DOS,ATTACK NONINTRUSIVE
操作系统     OS_UNIX,OS_MAC,OS_WINDOWS,
             OS_UNKNOWN,OS ROUTER
协议         TCP,UDP,ICMIP,IGMP
返回值       RETURN_SUCCESS,RETURN_FAILURE,RETURN_TI
             MEOUT
IP服务       LOWDELAY,THROUGHPUT,RELIABILITY,MINCOST,
             CONEXP,ECTCAP
IP选项       EOL,NOP,RR,TS,SECURITY,LSRR,SATID,SSRR,RA
IP偏移量     RESERVED,DONT,MORE
表10:“假”类型常数
B.语句
典型地,FASL脚本是语句的列表。这些语句通常由分号分隔。对此规则的例外在于:涉及块(由{and}包括在内的其他语句列表)的语句通常不需要符号来对其进行分隔。符号构成了有效(empty)语句,由此,将符号放在涉及块的语句之后并不会危害任何事情,但是其未实现任何功能。新块表示新的范围。在该范围内所声明的任何变量将仅在该范围内能够被访问,并且如果其具有析构函数,则将在该范围的末尾调用这些析构函数。可以利用封闭声明其的范围的范围中的变量相同的名称来声明变量。其将抑制(override)在另外可对封闭的范围进行访问的外部范围内的变量。然而,与相同范围内的其他变量相同名称的变量将产生错误。语句可以是以下语句之一,下面将对每一个进行详细地描述:
- 函数声明:具有作为在其范围内的声明变量的出现在语句列表上的参数的语句的命名列表,但是从表达式中拷贝参数的值,或者引用通过作为表达式类型的函数调用所提供的变量。函数声明可以仅发生在脚本的最顶级范围内。
- 结构声明:可以同时具有数据成员和成员函数的实体的声明。成员函数全都具有隐含的第一参数,该参数是对在其上正在调用函数的对象实例的引用。
- 变量声明:对其因存在于对其进行声明的范围内的变量的声明。可以简单地对变量进行声明,或者作为其声明的部分,通过将其赋予表达式对其进行实例化,或者通过将构造函数参数提供给变量之后的括号对其进行构造。注意,标量类型没有构造函数。在具有构造函数的类型上,该参数列表必须与针对该类型所存在的构造函数相匹配。
- 表达式:这可以是函数调用、常数值、变量、成员选择(或者是成员变量或者是成员函数)、以及对变量、参数等的算术和逻辑运算等。
- 当型(While)循环:这是具有只要给定条件(表达式)解析为真、则需要执行的块/语句/范围的控制结构。
- 重复(Repeat)循环:这是对其中的块执行表达式所解出的给定整数的次数大小的控制结构;
- 如果(If)语句:这是在表达式计算为真时执行块,而如果其为假则执行可选的别的块的控制结构。
- For循环:该控制结构具有由括号括住的符号所分隔的三个表达式的列表。在列表内(其可以为空、具有一个表达式、或具有多于一个的表达式),如果存在多于一个的表达式,则其由逗号分隔。最初执行第一列表。接下来是针对要执行的块必须为真的条件(在表达式的列表中,全部必须为真),并且最后是每一个通过循环得到执行的表达式的迭代程序列表。
- :注意许多声明拥有块。块还可以存在于其自身上,而不必由控制语句或函数声明所拥有。在需要在无法在任何“正常”范围内实现的给定点发生某些事情的构建和析构的情况下,可以对无拥有者的块进行编码。
C.函数声明
利用“function”关键字来声明函数。对其的声明如下:
function[<scalar-return-type]<functionname>(<argument-list>)
{
       <body>
}
当未指定返回类型时,隐含地将其假定为整形。参量列表可以为空(即,“function<functionname>()...”.)。典型地,每一个脚本需要“function faslmain()”,并且如果未找到该函数,则将会出错。可以从脚本中的任何位置显性地调用函数faslmain(),但是如果在最顶级的范围内未找到对faslmain()的任何调用,则调用被隐含地插入在脚本的末尾。可以对函数进行重载,从而假如其参量列表不同,则可以存在具有相同函数名的多个函数。参量列表具有形式“<argument>,<argument>,...,<argument>”。参量可以是以下形式的:
- 通过拷贝。<scalar-type><distinct-variable-name>:函数对该变量所作的任何事情将不会反映在调用中所提供的相应表达式中。该表达式可以是常数。
- 通过引用。<scalar-type>&<distinct-variable-name>:函数对该变量所作的任何事情反映在调用中所提供的相应变量中。该调用必须提供简化为与该参量相对应的变量的表达式(即,仅为变量或简化为变量的结构成员选择)。
(可能为空的)<body>(函数体)由语句的列表组成。如果在函数体中的任何位置遇到了语句“return<expression>”,则该函数的执行停止在该点处,并且利用作为该函数提供给其所参与的表达式的值而返回的值,将控制返回到函数的调用者。还可以调用函数,而不使用其所返回的值。
例如,
-----------

      function faslmain()

      {

      int  X;

      x=5;

      }

      function string DoStringStuff(int x)

      {

      return intTo String(x);

      }

      function void DoStringThing(string &amp; s)

      {

           s=“the string”;

           //DoStringThing(szThing)will set

           //szThing to“the string”

              }
---------------------
变量声明
按照如下方式对变量声明进行声明:
<typename><var>[,<var>...];
在结构的情况下,将<typename>典型地表达为“structure<typename>”,或者可选地,可以将类型为“OBJECT”的结构变量声明为“OBJECTo;”。
<var>是以下之一:
- <identifier>:这是简单的声明。如果<typename>是结构,并且存在默认(无参量)的构造函数,则对其进行调用。
- <identifier>=<initializer expression>:对该表达式进行计算,并且在声明处将结果赋予变量。注意,由表达式所返回的类型必须与<typename>兼容。
- <identifier>(<params>):<params>是逗号分隔的表达式列表。调用与<typename>中的签名相匹配的构造函数。注意,<typename>需要是结构。
- <identifier>[<array-dimension-expression>]:<typename>必须表示标量(非结构)类型。必须将表达式解析为常整数(即,其中无变量或函数调用)。这将<identifier>声明为<typename>的具有给定维数的阵列变量。
例如,-----------
       OBJECTo;
       structure OBJECTo;OBJECTo(5,6,“something”);
       int x=8,y,z[6+7];-----------
D.结构声明
利用“structure”关键字来声明结构。按照如下方式来声明结构:
structure<structurename>[extends<parentstructurename>]
{
         <member-list>
};
参数<member-list>是<member>的可能的空列表。典型地,<member>或者是函数声明或者是变量声明。当在结构声明中使用时与没有在结构声明中使用时的这些事情的仅有的语法差别在于:成员变量不能够具有初始化函数表达式或构造函数参数。然而,成员变量可以是阵列。
当使用“扩展”时,该结构“继承”了父结构的所有成员。具有与父结构中相同的名称和签名的该结构中任何成员函数将会覆盖(override)父结构的函数。
“构造函数”是当声明结构变量时得到调用的成员函数,而“析构函数”是当变量离开范围时得到调用的成员函数。
其名称为<structurename>的任何成员函数是构造函数,并且可以具有任意参数或不具有任何参数。存在其名称为~<structurename>、并且不具有任何参数的零个或一个成员函数,并且这是析构函数。一些没有立即显而易见的微妙之处如下:如果扩展了具有构造函数和/或析构函数、或者具有作为具有构造函数和/或析构函数的结构的成员函数的对象时,则该对象中的每一个构造函数将隐含地包含对父对象和/或自身拥有对象(owned object)的默认构造函数的调用,并且类似地,针对该对象的析构函数将具有对父对象/自身拥有对象的析构函数的调用。此外,如果父对象或自身拥有对象具有构造函数和/或析构函数,并且该对象没有构造函数和/或析构函数,则为了调用父对象/自身拥有对象的所有构造函数/析构函数,将在该对象中创建一个构造函数和/或析构函数。应该将构造函数和析构函数声明为“<structurename>...”或“function~<structurename>...”(即,没有返回类型)。
根据利用“.”字符的成员选择来实现已声明结构变量的使用。例如:
-------------
OBJECT o;
o.m_intmember=5;
o.m_ownedstructuremember.m_x=8;
o.DoSomething(5,6,“stuff”);-------------
E.表达式
表达式是变量、函数调用、常数、成员选择、以及利用充当连接符的运算符对这些项目的组合。为了讨论的目的,可以递归地定义表达式,从而例如<expression>+<expression>是一个表达式。在涉及运算符(赋值、算术、逻辑等)的表达式中,习惯上将左侧的表达式称为“lvalue”,而将右侧的表达式称为“rvalue”。在作为大多数语言的FASL,在任何表达式中的lvalue和rvalue必须返回兼容类型(通常,这些类型必须是相同的,但是有时,对于FASL中的整型和字符型,不同类型可以是兼容的)。此外,一些运算符仅工作于一些类型上。还存在运算符优先的概念,表示在不存在叠置括号的情况下,将向一些运算符提供超过其他符号的优先。这样,例如,将从左向右计算3-5+7,但是3-5*7将首先用5乘以7,然后从3中减去该结果。以下是按照优先次序的所有运算符的列表:
函数和常数
- 函数调用:<function-name>([<argument-list>];<argument-list>可能是空的、逗号分隔的表达式的列表。在脚本中的某处必须存在其中采用了按照其出现的次序与这些表达式的返回类型相匹配的参数的函数。在其中采取了引用的函数的情况下,必须将函数调用的<argument-list>中的相应表达式解析为变量(不是常数或多个变量的算术/逻辑/关系表达式)。函数调用表达式的类型是其相应函数声明的返回类型。
- 串常数:“sample string\x3f”;这些是在其中大多数表示包括该串的文字字符的引号所引用的串值。对此的例外是换码符:“\t”是制表符,“\n”是换行符,“\r”是回车符,而“\x[0-9a-fA-F][0-9a-fA-F]*”是向下解析为一个字符的嵌入十六进制码。注意,正规表达式简单地表示例如“\x3F-sample”将向下解析为47(0x3F),之后为‘-’,再之后为‘s’,等等。当在串表达式中使用常数时,任何嵌入的零(“\x0”)将终止该串,而当在二进制表达式中使用时,整个串将得到处理以解析换码序列,然后将其转换为二进制型。典型地,串常数具有与函数相同的优先。
- 字符常数:例如,‘A’。与串常数相同地对这些字符常数进行处理,除了其是单引号和单字符(可以利用换码序列来表示)之外。
- 整型常数:这些常数是如在“1048576”中那样的十进制数字或如在“0x100F”中那样的十六进制数。
单运算符(unitary operator)
++<variable>:递增变量的值,然后返回该值。工作于整型和字符型上。
--<variable>:递减变量的值,然后返回该值。工作于整型和字符型上。
<variable>++:返回变量的值,然后对其进行递增。工作于整型和字符型上。
<variable>--:返回变量的值,然后对其进行递减。工作于整型和字符型上。
-<expression>:无论<expression>返回何值,对其进行取反,并且返回该值,工作于整型和字符型上。
~<expression>:无论<expression>返回何值,对其比特进行翻转,并且返回该值。工作在整型和字符型上。
!<expression>:对<expression>进行逻辑取反。工作在布尔型上。
sizeof(<typename>or<variable>):返回<typename>或者<variable>占用了多少堆栈单元的整数。
成员选择运算符
<structurevariable>.<member>[.<rnember>...]:返回最右侧的<member>的任何类型/任何值。
幂运算符
<expression>power<expression>:lvalue和rvalue必须为整型或字符型。如果整型和字符型混合,则将字符型提升为整型。
乘法运算符
<expression>*<expression>:相乘...lvalue和rvalue必须为整型或字符型。如果整型和字符型混合,则将字符型提升为整型。
<expression>/<expression>:相除...lvalue和rvalue必须为整型或字符型。如果整型和字符型混合,则将字符型提升为整型。
<expression>%<expression>:取模...lvalue和rvalue必须为整型或字符型。如果整型和字符型混合,则将字符型提升为整型。
加法运算符
<expression>+<expression>:相加...与乘法运算符相同类型的规则,但是还串联两个串(返回串)或两个二进制(返回二进制)。如果表达式之一是串函数,而另一个是二进制变量,则串常数将被看为二进制常数。
<expression>-<expression>:相减....与乘法运算符相同类型的规则,但是工作于串(没有如运算符+中那样的二进制)上。在串的情况下,相减从lvalue中去除与rvalue相匹配的所有子串,并且返回所得到的串。
按位运算符
<expression><<<expression>:左移一位(有效地,乘以2)。与乘法运算符相同类型的规则。
<expression>>><expression>:右移一位(有效地,除以2并丢弃余数)。与乘法运算符相同类型的规则。在接下来的比特上重复最高有效位(符号位)。
<expression>&<expression>:按位与,与乘法运算符相同类型的规则。
<expression>|<expression>:按位或,与乘法运算符相同类型的规则。
<expression>^<expression>:按位异或,与乘法运算符相同类型的规则。
关系运算符
典型地,所有这些运算符返回布尔型,而与其所运算的类型无关(与返回与其运算相同类型的大多数运算符相反)。如果没有其他提示,则lvalue和rvalue可以是整型/字符型和整型/字符型、或者串型和串型。如果其是串型,则比较是对字符大小写敏感的。
<expression><<expression>:如果lvalue小于rvalue,则返回真。
<expression><=<expression>:如果lvalue小于或等于rvalue,则返回真。
<expression>><expression>:如果lvalue大于rvalue,则返回真。
<expression>><expression>:如果lvalue大于或等于rvalue,则返回真。
<expression>==<expression>:如果lvalue等于rvalue,则返回真。
<expression>!=<expression>:如果lvalue不等于rvalue,则返回真。
<expression>in<expression>:这仅工作于串和二进制表达式。如果lvalue作为子串/子二进制模式出现在rvalue中,则返回真。
逻辑运算符
这些运算符期望lvalue和rvalue返回布尔型,并且这些运算符返回布尔型。
<expression>||<expression>:“or else”...如果lvalue的值为真,则返回真而不计算rvalue,否则,返回rvalue所返回的任何值。
<expression>&&<expression>:“and then”...如果lvalue为假,则返回假而不计算rvalue,否则,返回rvalue所返回的任何值。
赋值运算符
这些运算符坚决要求类型兼容,这表示大多数时候类型相等。例外的是:当混合整型和字符型时,lvalue类型优先,而当将串常数赋予二进制变量时,串常数变为二进制常数。lvalue和rvalue必须解析为标量型,并且lvalue必须解析为变量。
<expression>=<expression>:简单赋值:将rvalue拷贝到lvalue中。
<expression>*=<expression>:
<expression>/=<expression>:
<expression>%=<expression>:
<expression>+=<expression>:
<expression>-=<expression>:
<expression>>>=<expression>:
<expression><<=<expression>:
<expression>&=<expression>:
<expression>|=<expression>:
<expression>^=<expression>:所有上述的表达式根据以上所指定的运算符的规则,对rvalue执行在“=”之前的运算符,然后,将结果放置在lvalue中。
条件表达式
还存在原理上和语法上与C/C++相同的结构。其语法是:
(<expression>)?<expression-eval-if-true>
<expression-eval-if-false>;
如果在标号内的表达式计算为真,则执行在问号之后的表达式,否则,执行在冒号之后的表达式。在括号内的表达式必须解析为布尔型,并且其他两个表达式必须是兼容类型的。条件表达式的返回类型/值是在计算条件表达式之后所执行的表达式的返回类型/值。
F.控制结构
当型循环
    A while loop is expresses as:
    while(_<expression>)
    {
        <statement-list>
    }or,
    while(<expression>)
          <statement>;
这计算了必须返回布尔型的<expression>,并且执行<statement-list>或<statement>,然后重新计算<expression>,直到<expression>返回真。如果<expression>第一次返回假,则决不执行<statement-list>或<statement>。
重复循环
    repeat(<expression>)
    {
        <statement_list>
    }or,
    repeat(<expression>)
           <statement>;
计算<expression>一次(与其中每一次在执行块之前执行其“迭代”表达式的大多数循环结构相反),并且必须返回表示执行该块多少次的整型或字符型。然后,对该块执行该许多次。在其隐含并不清楚的情况下,注意,在当型循环的情况下,例如,循环体必须做一些事情,最终使<expression>计算为假,否则,循环会永远进行下去。但是,如果重复循环块做了将使<expression>不同地计算的一些事情,则这与在执行块之前仅执行<expression>一次没有不同。由此,将“v=2;repeat(v){v=5;}”将不会引起无穷循环。此外,其将5赋予v两次。
如果语句
     if(<expression>)

       {

              <statement-list>

       }
or,

       if(<expression>)  

       {

         <statement-list>

       }

         else
				
				<dp n="d63"/>
  {

           <statement-list>

  }
为了简明,已经枚举了使用单一<statement>而不是<statement-list>的所有可能选项,但是存在这些选项。如果必须解析为布尔型的<expression>计算为真,则执行第一块。如果其计算为假并且存在else块,则执行,否则不执行任何块。
For循环
for(<expression-list>;<expression-list>;<expression-list>)
{
     <statement_list>
}or,
for(<expression-list>;<expression-list>;<expression-list>)
     <statement>;
<expression-list>可以什么也没有,其可以是单个<expression>,或者其可以是逗号分隔的表达式列表。最初,第一<expression-list>得到调用,并且由于忽略了这些返回值,因此,其可以表达式的任意混合。中间的<expression-list>是确定是否将执行该块、并且该循环是否将继续被迭代的条件。在该列表中的所有表达式必须返回布尔型,并且为了使块得以执行,所有表达式均必须返回真。最后的<expression-list>可以是表达式的任意混合,并且在每一次执行了该块之后,其得到执行。
经典示例是“for(x=0;x<8;x++){<statement-list>}”。这将把x设置为零,测试x是否小于8,发现其为真,则执行该块,将x递增1,测试x是否小于8,发现其为真,则执行该块,等等,直到x是使该条件为假的8,并且循环执行终止。
G.本地对象(native object)
以上已经指定了FASL语言的一个实施例的文法/语法元素。注意,这些元素足以进行计算并实现算法,但是不存在与其有关的任何事物来允许诸如通过网络发送和接收数据的事情,并且存在对标量类型的特定运算,其是最好能够具有的运算,但是不能够由到目前为止指定的语法来表达。出于这一理由,存在拥有允许对该功能进行访问的脚本范围(如果将是这样,被称为“元范围”)的、在范围内所声明的结构和函数。如这里所使用的,“故障线”表示整个网络安全系统。
FASL对象
每一个脚本能够访问名为“FASL”的变量,其类型为“FASL_OBJECT”。该变量的类型规定如下:
------------------

  structure FASL_OBJECT

  {

  private:

    string m_szName,

           m_szDescription,

           m_szSummary,

           m_szReturnString;

  RETURN_VALUE  m_eReturnCode;

  int  m_nDefaultPort,

       m_nIPAddress;

  ATTACK   m_eAttackType;

  OPERATINGSYSTEM

      m_eOSMajor,

      m_eOSMinor;

  PROTOCOL  m_eDefaultProtocol;
public:

  function FASL_OBJECT()

  {

  m_nDefaultPort=0;
				
				<dp n="d65"/>
   m_nIPAddress=0;

   m_szReturnString=“Return string not set.”

   }

   function void setScriptName(string s)

   {

        m_szName=s;

   }

   function void setScriptVulnerabilityCode(int nFaultlinelD)

   {

   //Thissets the vulnerability id as it exists in the Faultline database
that uniquely

   //identifies the vulnerability being sought by the script.

     m_nFaultlineID=nFaultlineID;

   }

   function void setScriptDesc(string s)

   {

     m_szDescription=s;

   }

   function void setScriptSummary(string s)

   {

     m_szSummary=s;

   }

   function void setScriptAttackType(ATTACK e)

   {

     m_eAttackType=e;

   }

   function void setScriptReturn(string szReturnString,
RETURNVALUE eReturnCode)

   {

   m_szReturnString=szReturnString;
				
				<dp n="d66"/>
  m_eReturnCode=eReturnCode;

  }

  function void addValidPort(int n)

  {

      //When a script successfully compiles,it will execute all these
that it finds

      //in the main scope.It builds a list of ports on which to run the
script.

      m_nValidPort=n;

  }

  function void setScriptPort(int n)

  {

      m_nDefaultPort=n;

  }

  function void setScriptOS(OPERATINGSYSTEM eMajor,
OPERATINGSYSTEM eMinor)

  {

      //When a script successfully compiles,it will execute all these
that it finds

      //in the main scope.It will use this information to decide
whether this script

      //needs to be run on a given host.

      m_eOSMajor=eMajor;

      m_eOSMinor=eMinor;

  }

  function void setScriptProtocol(PROTOCOL e)

  {

      m_eDefaultProtocol=e;

  }

  function int getIPAddress()
				
				<dp n="d67"/>
  {

     return m_nIPAddress;

  }

  function int getScriptPort()

  {

     retum m_nDefaultPort;

  }

  function string strTok(string &amp; s,string szDelimiters)

  {

     //Like strtok in UNIX,this skips past any characters at the
beginning of the string

     //that are in szDelimiters.Return the substring that includes all
the leftmost

     //characters up to but not including the next instance of a
character in

     //szDelimiters,or the end of the string whichever comes first.
Remove the

     //returned string from s(note it is a reference).

     return STRTOK(s,szDelimiters);

  }
};
-----------------
当成功地编译了脚本时,执行在主要范围内的形式“FASL.memberfunction”的所有语句(并且在此时不执行脚本中的其他语句)。所设置的这些成员函数的信息进入脚本对象的数据,所述数据允许系统进行一些智能决定来确定什么时候和如何来运行脚本。FASL.addValidPort(nPort)可以被调用任意次数,并且将产生正在建立的独特端口的列表。当运行该系统时,将还会发现未在脚本的主要范围内调用FASL.addValidPort(nPort),在这种情况下,该脚本将被运行每一个主机一次,并且FASL.getScriptPort()将在该脚本内返回0。如果FASL.addValidPort(nPort)出现在该脚本的主要范围内,系统将针对在给定主机上的每一个独特端口执行该脚本一次,并且FASL.getScriptPort()将返回系统针对该执行所通过的任何端口。FASL.setScriptOS()按照类似的原理操作(即,通过调用其,可以请求脚本仅在已经明确地确定了其OS的主机上执行该脚本,而不调用其暗含着将要调用该脚本,而与OS无关)。注意,调用这样多次不会像addValidPort形成端口列表那样形成OS的列表。对setScriptOS的最近的调用是得到使用的一个调用。
在进入脚本的范围内时,已经将FASL变量的m_nIPAddress成员设置为在其上将运行FASL脚本的目标机器的IP地址。在FASL脚本中发生的所有网络活动使用该IP地址作为其目的地,因而在将要指定的函数和对象中,IP地址决不是参数。调用FASL.setScriptReturn(string,RETURNVALUE)设置了m_szReturnString成员,然后,在完成了脚本的执行时,由脚本执行器命令行应用程序“fasl.exe”来打印该成员。其他调用,最为值得注意的setScriptOS(),设置了由Faultline.exe所使用的信息,以确定是否在给定的主机上运行该脚本。也就是,该系统将仅执行脚本中的“FASL.xxx()”语句,然后,系统检查成员数据,并且将确定是否在该IP地址上运行整个脚本。在一个实施例中,实际上,并不在FASL变量上调用FASL_OBJECT的构造函数。由此,有时,除了m_nIPAddress之外的其他任何变量最初并不设置为任何值。可以从FASL_OBJECT中得到结构,并且可以对类型为FASL_OBJECT的变量进行初始化,在这种情况下,将调用构造函数。还应该注意,不能由脚本代码(声明为专有)直接访问FASL的成员变量。
套接字对象
这是在元范围内所声明的结构,但是由于存在FASL_OBJECT,由此,不存在在元范围内所声明的任何实例。其很可能是正常的FASL结构,但是构造函数根据构造函数的参量所通过的内容,创建视窗TCP或UDP套接字,并且析构函数清除所对象。假定其适当地连接,则成员函数允许数据在该套接字上对数据进行发送或接收。该结构如下(由于不必知道这些数据成员,因此省略了这些成员数据):
-----------------

  structure Socket

  {

       function Socket(PROTOCOL eprotocol,int nPort)

       {

          //eProtocol is either TCP or UDP and the port is the IP port.

          //Creates a windows socket obj ect.

       }

       function~Socket()

       {    

          //Cleans up the Windows socket object associated with this
socket.

       }

       function boolean socketOpen()

       {

          //Typically must be called before sending or receiving data
for either protocol.

          //if returns false then it could not open the socket and
communication

          //will fail.

       }

       function boolean socketClose()

       {

          //Close the socket.destructor will do this if not done here.

       }

       function void B indport(int nPort)

       {

          //Use when you want specify the source port explicitly.
				
				<dp n="d70"/>
         BIND_PORT(nPort);

      }

      function string socketRead(int nBytes,int nTimeout)

      {

         //Read nBytes from Socket...returns empty string if fail.

      }

      function string socketReadLine(int nBytes,int nTimeout)

      {

         //Read nBytes or up to end of line whichever comes first.

         //retum empty string on fail.

      }

      function binary socketReadBinary(int nBytes,int nTimeout)

      {

         //Read nBytes of raw binary data.empty binary on fail.

      }

      function int socketWrite(string szButfer,int nLength)

      {

         //Write nLength characters out of szBuffer.return 0 on fail

         //or number of bytes written on success.

      }

      function int socketWrite(string szBuffer)

      {

         //Write the entire string(length implicit)otherwise same as
above.

      }

      function int socketWrite(binary bBuffer)

      {

         //Write the binary raw data...length implicit,otherwise same
as above.
       }
				
				<dp n="d71"/>
  };
------------------
用于有效评估的弱点对象
该对象用于有效评估,并且其通常的行为,即通用FASL脚本的非典型行为,在于其知道如何将自身和其以后发现自身的所需要的所有数据拷贝到其他脚本能够访问该数据的全局数据区,并且使用该信息以尝试与另一机器协商。该对象如下:
-------------------

  structure Vulnerability

  {

  Private:

      int m_nFaultlineID,

          m_nIPAddress,

          m_nExploitIPAddress;

      string m_szDescription;

  public:

      function Vulnerability()

      {

         m_nFaultlineID=0;

         m_nIPAddress=OxFFFFFFFF;

         m_szDescription=\“Vulnerability

  uninitialized.\”;

      }

      function void addToExploitableData(

         int nFaultlineID,

         int nIPAddress,

         int nExploitIPAddress,

         string szDescription)

      {

         //This sets all the member variables of this This function
				
				<dp n="d72"/>
may be

          //called from a derived structure and this will know that.It
stores the

          //entire contents of the obj ect as well as the typename and
size in the

          //global vulnerability data area.

      }

      function boolean getExploitableData(int nIndex)

      {

          //thisfunction searches the global vulnerability

          //data area for the nIndex-the instance of a variable of the
same type as this(this

          //could be and probably will be a derived structure from
Vulnerability)and copies

          //its contents into this object.If there is no nIndex_th object,
return false and

          //no change to this object’s data will have occurred.

      }

          //Accessor functions.the members of this structure need to
be read only once they

          //have been stored with addToExploitableData().

      function int getFaultlineID()

      {

          return m_nFaultlineID;

      }

      function int getlPAddress()

      {

          return m_nIPAddress;

      }

      function int qetExploitIPAddress()
				
				<dp n="d73"/>
     {

       return m_nExploitIPAddress;

     }

     function string getDescription()

     {

       return m_szDescription;

     }

  };

  -----------------
在该对象之后是一个脚本可以发现另一脚本可以用来与另一机器协商的一些内容。在该实施例中,任何弱点需要在该基类中所包含的信息。m_nFaultlineID是所发现的弱点的弱点ID。m_nIPAddress是其所发现的机器。m_nExploitIPAddress是在其上发现了证明有助于找到该弱点的数据的机器。m_szDescription是希望出现在有效评估报告中的内容。典型地,当未使用其他弱点来发现该弱点时,应该将m_nExploitIPAddress设置为-1。当使用了另一弱点时,将其m_nIPAddress输入到该弱点的m_nExploitIPAddress(典型地,使用othervuln.getIPAddress())。这将建立报告可以用图形表示的审查跟踪。
通常使用该方法来从弱点中获得结构(即,“structureUnicodeVulnerability{//extra info specific to unicode vulnthat can be used by otherscripts};”)。当知道了单代码(unicode)的弱点时,作为一个示例,创建诸如“UnicodeVulnerability uv”的变量,并且设置其额外数据,并且通过对“uv.AddToExploitableData(…)”的调用来将其添加。在该调用之后,寻求利用该特定弱点的另一脚本具有与以下类似的代码:
----------

  int  i;

  UnicodeVulnerability uv;

  for(i=0;uv.getExploitableData(i);i++)
				
				<dp n="d74"/>
  {

        //Attempt to use this data to compromise this host.

        if(succeed at compromising this host)

        {

            //create a vulnerability representing this host’s
vulnerability that was

            //found using the UnicodeVulnerability.Note that this
vulnerability

            //may or may not be a UnicodeVulnerability...it could be
some other

            //vulnerability.When you have populated it with its
specific datal call:

            newvuln.addToExploitableData{

               nNewVulnFaultlineID,

               FASL.getIPAddress(),

               uv.getIPAddress().

               “we got this vuln by exploiting Unicode on another
machine”);

       }
}
------------
调试消息
存在针对所有标量类型超载的,被称为“debugMessage(<scalar>e)”的函数。大多数情况下,其打印从调试系统中所期望的内容。整型和字符型打印为数字,布尔型打印为“真”或“假”,串打印其内容。二进制型通过debugMessage(binary b)产生了16进制的堆输出,其非常类似于MS-DOS DEBUG.EXE“d”选项所产生的内容。即,其输出每行16个字节的输出行,并且行格式为<4数字十六进制偏移>:<由空格分隔的8个2数字十六进制数>-<另外的8个><16个字符,其中照原样表示可打印字符,而将不可打印字符表示为周期(period)>。例如:
“0060:67 65 6C 73 20 6C 6F 6F-6B 20 6C 69 6B 65 20 74 gelslook like t”
利用将要指定的函数,容易将其他类型转换为串,从而可以debugMessage整个表达式...即,debugMessage(“here is what xequals:”+intToString(hex));。通常,不需要在得到“停止”的脚本中去除或注释debugMessage调用,最终,执行该脚本的系统将典型地忽略调试输出。
串函数
-------------

  function string leftTrim(string s)

  {

     //Lops off whitespace up to the first non-whitespace character.

  }

  function string rightTrim(string s)

  {

     //Lops off all trailing whitespace.

  }

  function int stringLength(string s)

  {

     //self-explanatory.

  }

  function strinq toLower(string s)

  {

     //Makes any characters that are upper-case lower-case.

  }

  function string toUpper(strinq s)

  {

     //Makes any characters that are lower-case upper-case.

  }
				
				<dp n="d76"/>
  function int string Tolnt(string s)

  {

     //similar to atoi in C.

  }

  function string intTo String(int n)

  {

     //i.e 1048576 becomes string_1048576_

  }

  function string intToString(char c)

  {

     //Similar to intToString(int).

  )

  function string intToHexString(int n)

  {

     //i.e.16383 becomes“3FFF”

  }

  function int hexStringToInt(string s)

  {

     //i.e.“3FFF-blahblahblah”becomes 16383.

  }

  function string intToBinaryString(int n)

  {

     //i.e.85 becomes“1010101”

  }

  function int binaryStringToInt(string s)

  {

     //i.e.“1010101blahblahblah”becomes 85.

  }

  function string intToIp String(int n)

  {
				
				<dp n="d77"/>
       i.e.16777215 becomes“0.255.255.255”

  }

  function string grep(string s1,string s2)

  {

       return\“to be implemented\”;

  }

  function int locate(string s1,string s2)

  {

       //return 0-based position of s1 in s2 or-1 if s1 not in s2.

  }

  function string subString(string s,int nStart,int nNumChars)

  {

       //i.e.subString(“one law for the lion and ox is oppression”,4,
3)=“law”

       //it is smart about boundries...if you ask for more characters
than exist

       //you only get the ones that exist.

  }

  function string garbaqestring(char c,int nLength)

  {

       //i.e.garbageString(“A”,7)=“AAAAAAA”

  }

  function string garbageString(int nLength)

  {

       //return string of nLength length whose characters are
random
       //upper and lower case alphanumerics.

  }

  -----------
二进制函数:
-----------

  function int binaryLength(binary b)

  {

       //self-explanatory.

  }

  function char binaryNthByte(binary b,int n)

  {

       //return nth byte numbered from 0.If out of bounds,

       //return-1.

  }

  function boolean binaryChangeByte(binary &amp; b,int n,char c)

  {

       //Change byte#n in binary b to c.If out ofbounds,

       //do nothing to b and return false.

  }

  function binary binaryRight(binary b,int n)

  {

       //return a binary which is the rightmost n bytes of b.If there

       //are not n bytes in b,you get all of b(not padded to n).

  }

  function binary binaryLeft(binary b,int n)

  {

       //same like binaryRight except from left.

  }

  function binary binaryMid(binary b,int nStart,int nLength)

  {

       //nStart is 0-based...return binary which is the nLength bytes
starting

       //at nStart.If there are not nLength bytes,return however many
there are.
				
				<dp n="d79"/>
  }

  --------------
一般全局函数:
--------------

  function string getLocalHostIP()

  {

       //retum string“xxx.xxx.xxx.xxx”representing the IP of the
machine

       //on which the FASL script is running.

  }

  function string getTargetHostIP()

  {

       //This is in here for compatibility reasons...you can get the
same

       //effect by doing:

       intToIPString(FASL.getlPAddress());

  }

  function int getTargetPort()

  {

       return FASLm_nDefaultPort;

  }

  function boolean RPCCheck(int nRPCProgNum)

  {

       //Attempt to make an RPC call on the given nRPCProgNum to
see ifit exists

       //on the target machine.Return true if it does.

  }

  function boolean SMBCheck(string szUserName,string szPass Word,
string szShare)

  {
				
				<dp n="d80"/>
       //Attempt to do a_net use_sort of thing on the given share...
i.e._IPC$_,

       //“\\HOSTNAME\C$”,“\\xxx.xxx.xxx.xxx\C$”,etc.Ifit
succeeds then

       //promptly delete the share and return true,otherwise return
false.

  }

  ----------------
FASL脚本语言的实现允许对具有已知开放端口的已知目标计算机执行可能弱点的有效评估。例如,测试单代码的FASL脚本具有以下形式:
--------------

  structure UnicodeVulnerability extends Vulnerability

  {

       string m_szUnicodeString;

  }

  function faslmain()

  {

       UnicodeVulnerability uv;

       uv.m_szUnicodeString=“The unicode string”;

       uv.addToExploitableData(1,FASL.m_nIPAddress,“the string
for reporting purposes”);

       debugMessage(“vulnfind executed.”);

  }

  structure UnicodeVulnerability extends Vulnerability

  {

       string m_szUnicodeStrinq;

  }

  function faslmain()

  {
				
				<dp n="d81"/>
      Unicode V ulnerability uv;

      if(uv.getExploitableData(0))

      {

         debuqMessage(“getExploitableData()...

  m_nFaultlineID=“+intToString(uv.m_nFaultlineID)+”,

  m_nIPAddress=“+intToIPString(uv.m_nIPAddress)+”,

  m_szDescription=“+uv.m_szDescription+”,

  m_szUnicodeString=“+uv.m szunicodeString);

      }

  else

  {

  debugMessage(“getExploitableData()failed.”);

  }
  }
---------------
注意,在一个实施例中,从成功的弱点测试中所收集的信息用于进一步有利地测试目标网络和各个目标计算机的弱点。特别地,在成功弱点测试的情况下,典型地,在目标计算机上可获得附加端口或帐户访问的等级。由此,即使其他先前的弱点测试已失败,在成功的弱点测试之后有利于重新尝试弱点检测。
图8示出了在目标网络上的目标计算机的弱点的有效评估的一个实施例。为了简化起见,将该网络显示为具有目标1计算机800和目标2计算机02。为了简化起见,假定将单个的弱点施加到两个计算机的所有TCP和UDP端口。对两个目标计算机的各个TCP和UDP端口来测试单个的弱点“TEST”。先前的主机发现和端口发现已经提供了目标1数据804和目标2数据806,其中包括在每一个目标计算机上找到的开放端口的标识。具体地,在图8所示的实例中,在目标1计算机800上发现了TCP端口80和UDP端口5000和53是开放的,并且在目标2计算机802上发现了TCP端口23和80以及UDP端口500、53和1721是开放的。在步骤806中开始有效评估处理,并且通过执行TEST子程序808来开始,所述TEST子程序808将TEST弱点施加到目标1计算机800的每一个端口上。在图8的示例中,在测试目标1计算机800的第一轮810中,端口80、5000和53的测试导致了不成功的弱点施加。然后,系统转入测试目标2计算机的第一轮812,其中,测试端口80和53是不成功的,而测试端口23、5000和1721是成功的。在成功测试的情况下,尝试从目标计算机中剥离有用信息,并且将所获得的任何信息存储在目标2数据806中。根据所获得的新信息,尝试测试目标1计算机的第二轮814。在该尝试中,测试端口80仍然不成功,但是现在,测试端口5000和53是成功的,其中暗含从目标2数据806中所收集到的附加信息。按照该方式,尝试测试目标2计算机的第二轮816。重复这些轮的测试,直到针对整个目标网络完成了弱点评估为止。
通常,将已知弱点存储在数据库中,以便将其包含在弱点评估测试、激活测试和报告中。在一个实施例中,“Vulns”不被称为“静态数据”,仅当采用包括新弱点的新的补丁时才发生改变。例如,当发现了新的弱点,并且该新弱点存在于需要了解其的本领域系统安装中时,发生了这一情况。在一个示例中,当前系统使用了以下VulnsFound表来表示在特定的扫描上已经发生了哪些弱点。VulnsFound仅是进入Vulns表的索引,用于防止我们另外重复相同的数据非常多次和浪费空间。
--------------
TABLE:Vulns

  COLUMN:BID,TYPE:varchar(10)

  COLUMN:CVE,TYPE:varchar(20)

    //“Common Vulnerabilities and Exposures”number.

  COLUMN:CyberID,TYPE:int(10)

  COLUMN:Description,TYPE:text(2147483647)

  COLUMN:ExploitDataType,TYPE:varchar(64)

    //Name of the FASL type,where applicable,that contains extra
data for this vulnerability.

  COLUMN:ExploitDate,TYPE:smalldatetime(16)
				
				<dp n="d83"/>
  COLUMN:ExploitLink,TYPE:varchar(255)

    //Site where you can download the exploit/patch.

  COLUMN:FaultlineID,TYPE:int(10)

    //Primary key field...linked to VulnsFound table.

  COLUMN:Impact,TYPE:tinyint(3)

  COLUNN:ISSID,TYPE:int(10)

  COLUMN:LHF,TYPE:bit(1)

    //short term intrusion opportunity..,true or false.

  COLUMN:Name,TYPE:varchar(128)

  COLUMN:NID,TYPE:int(10)

  COLUMN:Observation,TYPE:text(2147483647)

  COLUMN:Person,TYPE:varchar(50)

  COLUMN:Popularity,TYPE:tinyint(3)

  COLUMN:Recommendation,TYPE:text(2147483647)

  COLUMN:Risk,TYPE:tinyint(3)

  COLUMN:RiskText,TYPE:text(2147483647)

  COLUMN:Simplicity,TYPE:tinyint(3)

  COLUMN:Type,TYPE:varchar(50)

    //web,router,unix,trojan,etc.

  TABLE:VulnsFound

  COLUMN:ConfigurationID,TYPE:int.(10)

  COLUMN:CustomerID,TYPE:int(10)

  COLUMN:FaultlineID,TYPE:int(10)

  COLUNN:HostID,TYPE:int(10)

  COLUMN:JobID,TYPE:int(10)

  COLUMN:VulnFoundlD,TYPE:int identity(10)
------------------
VII.目标网络弱点的量化评分
传统上,将网络弱点分级为“低危险”、“中等危险”和“高危险”等级。该主观规模基于对由弱点所确保的目标网络的访问等级、检测和利用弱点的容易度、弱点的公共了解、经受了该弱点的计算机的百分比等。然而,该主观等级缺乏能够比较另外的异类网络以便比较相对安全性的客观标记。另外,该主观的三级等级几乎未提供与安全性提升或随时间所增加的危险有关的任何信息。
在一个实施例中,当前系统提供了目标网络的整个安全性的客观的量化标记。有利地,该量化标记可以是充分粒度的任何量化规模,以提供由于在1-10、1-100等范围内网络弱点随时间的改变而产生的有意义的判别。另外,该客观标记将标准公式应用于在目标网络和网络配置上所发现的各种弱点,从而可以在另外的异类网络配置、操作系统和计算机的安全性之间进行有效比较。
例如,客观标记是危险测量算法,例如,FoundScoreF。在由图9的流程图所示的一个实施例中,FoundScoreF定义如下:
F=100-V-E(等式1)
其中,F=发现分数(FoundScore)
      V=弱点损失(Vulnerability Loss)
      E=暴露损失(Exposure Loss)
更具体地,在一个优选实施例中,将弱点损失V定义为赋予在目标网络上发现的每一个弱点的值的和。对于在目标网络上所发现的n个弱点中的每一个,给该弱点赋予权重。
由此,对于特定的弱点Vx,其中1≤x≤n,将弱点权重Vw,x定义为:
V w , x = { 50 | PEA ( V x ) &GreaterEqual; 2 } { 10 | 2 > PEA ( V x ) &GreaterEqual; 1 } { 5 | 1 > PEA ( V x ) } (等式2)
其中:
PEA(Vx)=floor({P(Vx)+E(Vx)+A(Vx)}/3)  (等式3)
以及:
floor(x)是标准的“地板”函数,
P(Vx)是在1-3等级上的弱点的普及度,
E(Vx)是利用在1-3等级上的弱点的容易度,
A(Vx)是由1-3等级上的弱点所准予的访问/特权等级,
其中,在等级分数越高,则危险越大。
可选地,可以简单地将弱点定义为与弱点相关的弱点等级,例如:
PEA(Vx)=R(Vx)    (等式3a)
其中,
R(Vx)是与1-3等级的弱点相关的危险。
通常,从先前所讨论的弱点数据库中提供用于确定特定弱点的PEA(V)的因数。在其他实施例中,可以根据多个不同的变量,例如,包括弱点分布的容易度、防止弱点的容易度等,来定义弱点基函数(例如,PEA(V))。由此,在一个实施例中,总弱点分数V等于:
V=min(50,∑(x=l→n){Vw,x})    (等式4)
其中:
n=在目标网络上所发现的弱点数量,
∑=求和符号,
Vw,x=以上所定义的弱点权重,以及
min(x,y)=标准最小值函数,
在一个实施例中,总暴露分数E定义为:
E=min(50,∑(y=l→q){10×Uy+5×Iy+Ny+2×My})    (等式5)
其中:
q=在目标网络上所发现的激活目标计算机的数量,
Uy=除了DNS之外,在第y个目标计算机上发现的开放UDP端口,
Iy=在第y目标计算机上发现的开放ICMP端口,
Ny=在第y目标计算机上发现的非必要服务,
My=对于具有不必要服务的目标计算机的罚分,
∑=求和符号,
min(x,y)是标准最小值函数。
特别是,通常根据上述的主机发现处理来得到激活目标计算机q的数量。通常根据上述的服务发现和有效评估处理来得到在第y目标计算机上发现的开放UDP端口Uy的数量。典型地,根据TCP和UDP端口的发现服务来得到在第y目标计算机上发现的非必要服务Ny的数量,并且在一个优选实施例中,对在每一个目标计算机上所发现的所有开放端口进行计数,除了某些预定服务之外。表11列出了根据本发明的一个实施例,未包括在非必要服务Ny的计数中的预定服务的示例。
必要服务                   端口
HTTP                       80,8000,8080
SSL/HTTPS                  443
FTP                        21
DNS                        53
SMTP                       25
表11:未包括在Ny计数中的示例必要服务
根据操作系统、协议等的变化,必要服务的其他组合也是可能的。最后,针对具有Ny>0,并且具有如表7所示运行的非必要服务的每一个目标计算机,将非必要服务罚分标记My设置为1。否则,将My设置为0。
结果,FoundScore F=100-V-E提供了在0和100之间的定量分数,表示目标网络的相对安全性的客观标记。通常,FoundScore越高(F越高),则目标网络的相对安全性越大。其他实施例也是可行的,例如:
Ealt=[∑(y=l→q){(5×Uy+2×Iy+2×Ny+2×My)2}]1/2/q(等式7)
Valt=[∑(x=l→n){(Vw,x)2}]1/2/n  (等式8)
Falt=Ealt+Valt  (等式9)
在该可选评分机制中,Falt的分数越高,则目标网络的安全性越差。
图9示出了用于确定目标网络的安全性分数方法的一个实施例。在第一确定步骤900中,该方法确定是否已经对在目标网络中发现的所有弱点进行了计数。如果还没有,则该方法针对基于在弱点数据库904中所存储的预定值的弱点数x,在步骤902中,计算上述的PEA(Vx)(等式3)或者其变化。PEA(Vx)的值用于在步骤906中,针对弱点x来计算加权的弱点Vw,x(等式2)。然后,通常针对特定的实施例,如果需要,在步骤908中递增弱点计数器。之后,该方法返回到确定步骤900,并且再次确定是否已经对所有的弱点进行了计数。
在已经对所有弱点进行了计数之后,在一个优选实施例中,此后在步骤910中计算总弱点V。如以上所讨论的,在该实施例中,总弱点V或者小于50,或者是所有加权的弱点分数Vw,x的总和。可选地,其他分数也是可能的,或者可以将总分数V的制表与先前的环组合在一起。
然后,在确定步骤912,该方法确定是否已经对目标网络中所发现的所有目标计算机进行了计数。如果还没有,则在步骤914中确定暴露值。在优选实施例中,所述暴露值包括Uy(在第y个目标计算机上发现的开放UDP端口,除了在端口53上的DNS之外)、Iy(在第y个目标计算机上所发现的开放ICMP端口)、以及Ny(在第y个目标计算机上发现的非必要服务),并且确定这些值。根据网络安全性测试来动态地确定这些暴露值,并且在一个实施例中,将这些值存储在目标计算机弱点数据库904中或在另一数据库中。在步骤916中,针对存在不必要服务的目标计算机,确定罚分My。优选的是,然后在步骤918中递增该暴露计数器,并且该方法返回到确定步骤912以确定是否已经对所有目标计算机进行了计数。
当对所有目标计算机进行了计数时,按照或是小于50,或是所发现的暴露值的加权和的总和,在步骤920中,计算总暴露E。然后,在优选实施例中,按照100减总弱点和暴露分数,在步骤992中计算分数F,以产生网络安全性分数的表示。在优选实施例中,F值越大表示网络安全性在客观等级上越大。
其他典型实施例应用了与弱点评分和暴露评分有关的因素的各种变换,并且与这里所公开的内容类似地对其进行预测。
VIII.目标网络拓扑和弱点的图形分级报告
通常,传统网络安全系统提供了按照文本堆格式的报告信息。将所收集到的与网络拓扑、目标计算机、弱点等有关的数据记录堆入需要相当大的努力来进行解译的ASCII文件中。传统上,使用这样的数据堆,这是由于除了向网络安全用户警告高度危险的弱点存在之外,现有系统未提供表示网络、目标计算机和所发现弱点的数据的交互、分级和图形表示,以帮助用户识别和校正特定的弱点。
当前系统将在安全性测试期间所发现的数据编译为图形、信息分级和交互的文件集合,以便在各种细节和文件级对其进行重新查看。由此,在本发明的一个实施例中,报告引擎产生了(1)动态图形显示,表示网络拓扑、所发现的目标计算机、以及在整个目标网络中所发现的弱点;(2)目标计算机、所发现的弱点和弱点解释的综合列表;(3)客观评分报告,描述了目标网络的大致安全性分级;(4)暴露报告,描述了报告服务,以及(5)阐明在每一个机器、每一个端口或每一个弱点上的测试结果的详细信息。在组织内的特定个人可能需要不同等级的细节。例如,上层管理可能仅想要描述了目标网络的大致安全性分级的客观评分报告(3)。相反,网络管理者想要接收所有报告,特别是信息报告(5),使管理者能够识别在需要校正的机器和机器上的端口。
例如,通常由报告引擎所产生的报告的功能表示包括定量的分数表示,包括(1)实际分数,(2)分数暴露的颜色表示;以及(3)定量分数的图形表示。实际分数是F分数,或者在可选实施例中,例如,如先前所述的1到100的数字分级。颜色表示显示了分数的整个弱点范围。由此,在一个实施例中,在1和33之间的分数将具有表示高等弱点的红色,在34和66之间的分数将具有表示中等弱点的黄色,而在66以上的分数将具有表示低等弱点的绿色。可以预见其他颜色、范围和表示,例如利用图标或图片来表示弱点等级。
例如,图10示出了在由用户所观看的显示器上所呈现的分级安全报告1000的实施例。该分级安全报告包括Foundstone分数的表示1010,示出了与相对较高的危险相对应的值15。安全报告还包括所映射的网络拓扑的图形表示1020,包括激活目标计算机和位于目标计算机上的服务。安全报告还包括所发现的主机的列表1030、以及所发现的服务的列表1040。
用户可以选择图10所示的报告中的任一个(或未示出的其他报告),并且请求另外的细节。例如,图11示出了分级安全报告1100的实施例,提供了与两个目标计算机的弱点有关的更详细的细节。例如,显示的上部识别了具有由窗口1110表示的第一开放端口和由窗口1120表示的第二开放端口的第一目标计算机(在IP地址255.255.255.255处的“localhost.local.net”)。第一目标计算机的每一个开放端口均具有各自的弱点,并且可以识别弱点补丁以将其安装在目标计算机上来减小弱点。作为另外的实施例,安全报告1100的下部识别了具有由窗口1130表示的单个开放端口的第二目标计算机(在IP地址254.255.255.255处的“localhost2.local.net”)。在窗口1130中的该信息表示在端口上的服务已过期,表明应该去除该端口,并且如果要保留该服务,则有利于识别弱点补丁以便安装。
存在在表示出系统所处理的数据对象的分级结构的C++中所实现的“对象层”,如以上针对FASL脚本语言所描述的那样。所有对象遵循具有以下特征的模型,所述特征为1)包含与作为数据成员的对象直接相关的数据(在数据库中存在与行之间的一一对应),以及2)可能包含也遵循该惯例的其他对象的列表。每一个对象具有Load()和Save()成员,通过从数据库中将其加载或保存,处理由该对象所直接负责的数据。对于“子”对象列表,使用了UpdateToDatabase()和UpdateFromDatabase()成员函数。这些成员函数分别调用对象的Save()或Load()。然后,迭代地调用对象列表的UpdateToDatabase()和UpdateFromDatabase()成员。按照该方式,可以从分级结构中的任意点,选择性地加载对象及其子对象。这样操作是由于对象通常太难以处理以致无法建立处理。
一旦加载了数据,则表示单个扫描的对象具有GenerateReport成员函数,其可编程地产生构成了该报告的所有html、gif、jpg和png文件。通过加载包含样板文件源和关键字的“模板”html文件,并且用表示报告数据的html源来替代关键字,来产生html文件。gif和jpg简单地为背景图形,不会根据报告而发生改变,从而照原样对该文件进行写操作,而报告机制不必知道gif和jpg编码的细节。对于需要动态计算的图像,使用png图形格式。这是公用的(不经许可的)格式,其存在正在链接到系统可执行文件中的公用程序库。将这些图像绘制到视窗HDC(表示显示设备的视窗软件对象),然后,通过按照适当的格式来包装对象的客户类别来将其转换为png。
在以下的附录A中阐明了典型的扫描汇总报告。在以下的附录B中阐明了相应的典型发现分数报告。在以下的附录C中阐明了相应的网络拓扑报告。
尽管本发明的以上描述包括该系统的至少一个实施例,但是应该理解,在不脱离所附权利要求所定义的本发明的精神和范围的情况下,可以对该系统进行各种改变、替换和变更。例如,在图12中例示了上述方法的一个可选实施例。
FoundScan for Acme Company:扫描汇总报告
Report Generated:10-11-200115:10:07 Pacific Standard Time
Acme Company
Scan Name:Daily Scan
Scan Duration:13 Minute(s),23 Second(s)
Start Time:19:00:00,July 20,2001  Stop Time:19:13:24,July 20,2001
FoundScan results are driven by the  Foundstone Assessment Methodology.
Figure A0282854201083
FoundScore is a numerical representation of your security exposure.For a detailed explanationof FoundScore,click  here.
FoundScan for Acme Company:扫描汇总报告
Figure A0282854201091
                              Potentially                Total IP
                       Active IP                Inactive IP
IP Address Range                  Active IP                  Addresses in
                       Addresses                Addresses
                                  Addresses                  Range
10.1.0.0-1            1          0             1            2
10.2.0.0-7            5          2             1            8
10.3.0.0-62           23         2             38           63
10.4.0.0-7            3          0             5            8
10.5.0.0-125          72         0             54           126
10.6.0.0-7            1          2             5            8
10.7.0.0-13           10         0             4            14
10.8.0.0-31           7          0             25           32
10.9.0.0-125          2          0             124          126
10.10.0.0-61          14         1             47           62
10.11.0.0-29          8          0             22           30
FourdScan for Acme Company:扫描汇总报告
Total           146          7           326           479
Figure A0282854201101
Operating Systems
FoundScar for Acme Company:扫描汇总报告
Figure A0282854201112
Vulnerabilities By Severity Percent of Vulnerabilities By Severity
Summary Comparison           7-19-2001    7-20-2001    Change
FoundScore Risk Rating:     11           6            -5
Total Vulnerabilities:      23           23           0
FoundScan for Acme Company:扫描汇总报告
Total Discovered Hosts:        42      146     104
Total Network Services:        196     274     78
Total Web Servers:             7       58      51
Total SSL Web Servers:         5       9       4
Total SMTP Servers:            10      14      4
Total FTP Servers:             10      18      8
Number of Telnet Servers:      14      14      0
                                          (c)2000-2001  Foundstone Inc.
FoundScan for Acme Company:发现分数报告
Report Generated:10-11-200115:10:08 Pacific Standard Time
Acme Company
Scan Name:Daily Scan
Figure A0282854201133
You scored a total of 6 out of a possible 100 points.Your FoundScore places you in the Poorcategory.Thus,reiative to other organizations,your risk rating is poor.Please review theFoundScore Results graph and FoundScore Categories table below for details.
Full Explanation of the FoundScore scoring methodology is also available.
FoundScan for Acme Company:发现分数报告
                                                                     Running
FoundScore:Vulnerabilities             Your Results    Deductions
                                                                     Score
High Risk Vulnerabilities              13             50           50
Medium Risk Vulnerabilities            7              0            50
Low Risk Vulnerabilities               3              0            50
Score after Vulnerability Deductions:                               50
                                                                     Running
FoundScore:Exposure                    Your Results    Deductions
                                                                     Score
Number of Non-Essential Services       150            20           30
Number of Machines with No Essential   9              9            21
Services
UDP Permitted                          Yes            10           11
ICMP Permitted                         Yes            5            6
                                                    Total Score  6
                                                                 Poor
To understand what systems and ports affected your Foundscore,click on the specific item of interest in the″Your Results″column in the above table.
FoundScan for Acme Company:发现分数报告
(c)2000-2001  Foundstone Inc.
FoundScan for Acme Company:网络拓扑报告
Report Generated:10-11-2001 15:10:08 Pacific Standard Time
Figure A0282854201162
Acme Company
Scan Name:Daily Scan
The network map below is a graphkcal representation of the scanned environment.FoundScancreated it by issuing a series of ICMP and TCP traceroute commands,analyzing the results,then mapping devices based on their subnet membership and distance from one another.Themap provides a high-level overview of your environment sothatyou can easily identify alldiscovered subnets and devices.A detailed  report of discovered hosts is also available.NOTE:The traceroute procedure does not aiways return an IP at each hop.This is almostalways due to a firewall blocking responses to the traceroute commands,and so we representunknowns as firewalls on the map.It is possible,however,due to varying load conditions onthe network and other factors out of our control that spurious unknowns might creep into thedata.Our data gathering methods minimize this,but when it does happen,some machinesmay be connected to a firewall in the map that are in fact connected to a known router in thenetwork.
FoundScan for Acme Company:网络拓扑报告
FoundScan for Acme Company:网络拓扑报告
(c)2000-2001  Foundstone Inc.
Figure A0282854201181
FoundScan for Acme Company:网络拓扑报告
FoundScan for Acme Company:网络拓扑报告

Claims (66)

1.一种确定可操作地与网络相连的目标计算机的操作系统的系统,所述系统包括:
第一和第二数据分组,所述第一和第二数据分组符合由所述网络支持的协议,将所述第一和第二数据分组通过所述网络传送到所述目标计算机;
第一和第二操作系统指纹,包括在计算机可读介质中存储的数据位,所述第一和第二操作系统指纹与第一操作系统相关;
第一目标计算机指纹,包括在计算机可读介质中存储的数据位,所述第一目标计算机指纹包括响应所述第一数据分组的传输而接收的至少一部分数据的表示;
第二目标计算机指纹,包括在计算机可读介质中存储的数据位,所述第二目标计算机指纹包括响应所述第二数据分组的传输而接收的至少一部分数据的表示;以及
可由计算机执行的指纹比较指令,将所述第一操作系统指纹和所述第一目标计算机指纹进行比较,将所述第二操作系统指纹和所述第二目标计算机指纹进行比较,并且产生表示所述第一操作系统是否正运行于所述目标计算机上的结果。
2.根据权利要求1所述的系统,其特征在于:所述第一数据分组的第一比特范围表示第一参数值,所述第二数据分组的所述第一比特范围表示与所述第一参数值不同的第二参数值。
3.根据权利要求2所述的系统,其特征在于:通过改变在所述第一数据分组的所述第一比特范围中的一个比特,来得到所述第二参数值。
4.根据权利要求2所述的系统,其特征在于:所述第一和第二操作系统指纹是不同的。
5.根据权利要求4所述的系统,其特征在于还包括:
第三数据分组,所述第三数据分组符合所述协议,所述第三数据分组的所述第一比特范围表示与所述第一和第二参数值不同的第三参数值,将所述第三数据通过所述网络传送到所述目标计算机;
第三操作系统指纹,包括在计算机可读介质中存储的数据位,所述第三操作系统指纹与所述第一操作系统相关,所述第三操作系统指纹与所述第一和第二操作系统指纹不同;以及
第三目标计算机指纹,包括在计算机可读介质中存储的数据位,所述第三目标计算机指纹包括响应所述第一数据分组的所述传输接收的至少一部分数据的表示,可由计算机执行的所述比较指令在产生所述结果之前,将所述第三操作系统指纹和所述第三目标计算机指纹进行比较。
6.根据权利要求5所述的系统,其特征在于还包括:
第四、第五和第六操作系统指纹,包括在计算机可读介质中存储的数据位,所述第四、第五和第六操作系统指纹与第二操作系统相关,所述第四、第五和第六操作系统指纹中的至少一个与所述第一、第二和第三操作系统指纹中的相应一个不同;可由计算机执行的所述比较指令将所述第四操作系统指纹和所述第一目标计算机指纹进行比较,将所述第五操作系统指纹和所述第二目标计算机指纹进行比较,将所述第六操作系统指纹和所述第三目标计算机指纹进行比较,并且产生表示在所述目标计算机上是否正在运行所述第二操作系统的第二结果。
7.根据权利要求5所述的系统,其特征在于:所述协议是TCP/IP,并且所述第一比特范围对应于表示最大分段尺寸的分组字段。
8.根据权利要求5所述的系统,其特征在于:通过不设置任何比特来获得所述第一参数值,通过设置一个比特来获得所述第二参数值,而通过设置两个比特来获得所述第三参数值。
9.根据权利要求5所述的系统,其特征在于:所述第一参数值为0,所述第二参数值为128,而所述第三参数值为128与256的倍数相加。
10.根据权利要求5所述的系统,其特征在于:所述第一比特范围表示至少两个字节,并且通过设置字节中的最后比特来获得所述第二参数的值,并且通过设置字节中的最后比特来获得所述第三参数的值。
11.根据权利要求10所述的系统,其特征在于:通过设置在所述第一比特范围中的相邻比特,来获得所述第三参数。
12.根据权利要求5所述的系统,其特征在于:按照最低参数值优先的方式来传送所述第一、第二和第三数据分组。
13.一种用于确定可通过网络访问的目标计算机的操作系统的系统,所述系统包括:
符合由所述网络支持的协议的多个数据分组,将所述多个数据分组通过所述网络传送到所述目标计算机;
多个第一操作系统指纹,每一个均包括在计算机可读介质中存储的数据位,每一个均与第一操作系统相关;
多个目标计算机指纹,每一个均包括在计算机可读介质中存储的数据位,每一个包括响应所述多个数据分组的传输而接收的至少一部分数据的表示;
可由计算机执行的指纹比较指令,将所述多个第一操作系统指纹和所述多个目标计算机指纹进行比较,并且产生表示所述第一操作系统是否正在所述目标计算机上运行的结果。
14.根据权利要求13所述的系统,其特征在于:所述协议是TCP/IP,并且每一个所述多个数据分组具有在各个分组字段中表示的不同值。
15.根据权利要求14所述的系统,其特征在于所述分组字段是最大分段尺寸字段。
16.根据权利要求13所述的系统,其特征在于还包括:
多个第二操作系统指纹,每一个均包括在计算机可读介质中存储的数据位,每一个与第二操作系统相关,所述指纹比较指令将所述多个第二操作系统指纹和所述多个目标计算机指纹进行比较,以产生表示所述第二操作系统是否正在所述目标计算机上运行的第二结果。
17.一种用于确定可通过网络访问的目标计算机的操作系统的方法,所述方法包括步骤:
向所述目标计算机传送符合由所述网络支持的协议的多个数据分组;
产生多个目标计算机指纹,每一个包括响应所述多个数据分组的传输经由所述网络接收的数据的一部分;
将所述多个目标计算机指纹与第一组预定操作系统指纹进行比较,每一个所述第一组的预定操作系统指纹与第一操作系统相关;以及
产生表示所述第一操作系统是否正在所述目标计算机上运行的结果。
18.根据权利要求17所述的方法,其特征在于还包括步骤:
将所述多个目标计算机指纹与第二组预定操作系统指纹进行比较,每一个所述第二组预定操作系统指纹与第二操作系统相关;以及
产生表示所述第二操作系统是否正在所述目标计算机上运行的结果。
19.根据权利要求17所述的方法,其特征在于所述协议是TCP/IP,并且所述多个数据分组的一些在相同的分组字段中具有不同的值。
20.根据权利要求17所述的方法,其特征在于所述协议是TCP/IP,并且所述多个数据分组中的两个数据分组的MSS选项的值可以被128除尽。
21.根据权利要求17所述的方法,其特征在于所述多个第一数据分组数据具有等于0的最大分段尺寸选项,所述多个第二数据分组具有等于128的最大分段尺寸选项;而所述多个第三数据分组具有等于384的最大分段尺寸选项。
22.一种通过网络识别目标计算机的操作系统的方法,所述方法包括步骤:
通过所述网络向所述目标计算机发送第一数据分组,所述第一数据分组符合所述网络的协议,并且具有在第一比特范围内的第一比特模式;
产生第一响应值,表示响应所述第一数据分组的所述发送通过所述网络接收到的数据的至少一部分;
通过所述网络向所述目标计算机发送第二数据分组,所述第二数据分组符合所述协议,并且具有在第一比特范围内的第二比特模式,所述第二比特模式不同于所述第一模式;
产生第二响应值,表示响应所述第二数据分组的所述发送通过所述网络接收到的数据的至少一部分;
通过所述网络向所述目标计算机发送第三数据分组,所述第三数据分组符合所述协议,并且具有在第一比特范围内的第二比特模式,所述第三比特模式不同于所述第一或第二模式;
产生第三响应值,表示响应所述第三数据分组的所述发送通过所述网络接收的数据的至少一部分;
将所述第一响应值与和第一操作系统相关的第一预定值进行比较;
将所述第二响应值与和第一操作系统相关的第二预定值进行比较;
将所述第三响应值与和第一操作系统相关的第三预定值进行比较;
产生表示所述第一操作系统和所述目标计算机之间的关系的值。
23.根据权利要求22所述的方法,其特征在于所述方法还包括步骤:
将所述第一响应值与和第二操作系统相关的第四预定值进行比较;
将所述第二响应值与和第二操作系统相关的第五预定值进行比较;
将所述第三响应值与和第二操作系统相关的第六预定值进行比较。
24.根据权利要求22所述的方法,其特征在于在所述第一比特模式中未设置任何比特,在所述第二比特模式中设置了一个比特,而在所述第三比特模式中设置了两个比特。
25.根据权利要求22所述的方法,其特征在于在具有所设置的至少一个比特的所述第二比特模式中的字节数量大于在具有所设置的至少一个比特的所述第一比特模式中的字节数量,并且在具有所设置的至少一个比特的所述第三比特模式中的字节数量大于在具有所设置的至少一个比特的所述第二比特模式中的字节数量。
26.根据权利要求22所述的方法,其特征在于在所述第一比特模式中没有任何字节具有所设置的最低有效位或最高有效位,所述第二比特模式中的至少一个字节具有所设置的最高有效位,而所述第三比特模式中的至少一个字节具有所设置的最低有效位。
27.一种确定目标计算机是否处于网络上的系统,所述系统包括:
存储在计算机可读介质中的第一组端口标识符,每一个所述第一组端口标识符表示用于接收符合所述网络的第一协议的数据分组的计算机所使用的端口,每一个所述第一组端口标识符表示与已知网络服务相关的端口;
第一组数据分组,每一个去往由所述第一组端口标识符中的至少一个所表示的端口,所述第一组数据分组的每一个符合所述第一协议,并且通过所述网络将其传送到所述目标计算机;
响应所述第一组数据分组的所述传输,通过所述网络接收的第一组确认分组;以及
主机标识符的列表,每一个主机标识符表示在响应发送到所述相应计算机的分组而传送数据的所述网络上的计算机,如果所述第一组确认分组表示所述目标计算机作出了响应,则将表示所述目标计算机的主机标识符添加到所述主机标识符的列表中。
28.根据权利要求27所述的系统,所述系统还包括:
存储在计算机可读介质中的第二组端口标识符,每一个所述第二组端口标识符表示用于接收符合所述网络的第二协议的数据分组的计算机所使用的端口,每一个所述第二组端口标识符表示与已知网络服务相关的端口;
第二组数据分组,每一个去往由所述第二组端口标识符中的至少一个所表示的端口,所述第二组数据分组的每一个符合所述第二协议,并且通过所述网络将其传送到所述目标计算机,所述第二组数据分组中的至少一个包括与所述已知网络服务相关的数据;
响应所述所述第二组数据分组的所述传输,通过所述网络接收的第二组确认分组;以及
如果所述第二组确认分组表示所述目标计算机作出了响应,则将表示所述目标计算机的主机标识符添加到所述主机标识符的列表中。
29.根据权利要求28所述的系统,其特征在于所述第一协议是TCP,所述第二协议是UDP,所述第二组确认绕组是UDP数据响应分组的非零组。
30.根据权利要求27所述的系统,其特征在于所述系统还包括:
存储在计算机可读介质中的第二组端口标识符,每一个所述第二组端口标识符表示用于接收符合所述网络的第二协议的数据分组的计算机所使用的端口,每一个所述第二组端口标识符表示与已知网络服务相关的端口;
第二组数据分组,每一个去往由所述第二组端口标识符中的至少一个所表示的端口,所述第二组数据分组中的每一个符合所述第二协议,并且通过所述网络将其传送到所述目标计算机,所述第二组数据分组中的至少一个包括与所述已知网络服务相关的数据;
响应所述第二组数据分组的所述传输,通过所述网络接收的第二组确认分组;以及
如果所述第二组确认分组并未表示所述目标计算机没有作出响应,则将表示所述目标计算机的主机标识符添加到所述主机标识符的的第二列表中,每一个所述主机标识符的第二列表表示未知未做出响应的计算机。
31.根据权利要求30所述的系统,其特征在于所述第一协议是TCP所述第二协议是UDP,所述第二组确认分组是IMCP错误分组的空白组。
32.根据权利要求30所述的系统,其特征在于所述系统还包括:
第三组数据分组,每一个去往由所述第二组端口标识符中的至少一个所表示的端口,每一个符合所述第二协议,在整个预定最大等待时间段内,将所述第三组数据分组传送到所述目标计算机;
响应所述第三组数据分组的所述传输,在时间上第一个接收到的第一响应;以及
响应所述第三组数据分组的所述传输,在时间上第二个接收到的第二响应,在所述第一响应的接收和所述第二响应的接收之间的持续时间定义了目标计算机的等待时间段。
33.根据权利要求32所述的系统,其特征在于在所述目标计算机等待时间段的持续时间内,将所述第二组数据分组中的每一个连续地传送到所述目标计算机。
34.根据权利要求28所述的系统,其特征在于所述系统还包括:
第三组数据分组,每一个去往由所述第二组端口标识符中的至少一个所表示的端口,每一个所述第三组数据分组符合所述第二协议,在整个预定的最大等待时间段内将所述第二组数据分组传送到所述目标计算机中;
响应所述第三组数据分组的所述传输,在时间上第一个接收到的第一响应;以及
响应所述第三组数据分组的所述传输,在时间上第二个接收到的第二响应,在所述第一响应的接收和所述第二响应的接收之间的持续时间定义了目标计算机的等待时间段。
35.根据权利要求34所述的系统,其特征在于在所述目标计算机等待时间段内,将每一个所述第二组数据分组连续地传送到所述目标计算机。
36.一种通过网络测试目标计算机的可访问性的系统,所述系统包括:
存储在计算机可读介质中的一组端口标识符,所述一组端口标识符中的每一个均表示符合UDP的端口,所述端口标识符中的至少一个表示与已知网络服务相关的端口;
一组符合UDP的数据分组,每一个均与由所述一组端口标识符中的至少一个所表示的端口相关,在大致与所述目标计算机的等待时间段相等的持续时间内,将每一个所述符合UDP的数据分组连续地传送到所述目标计算机,所述符合UDP的数据分组中的至少一个包括与所述已知网络服务相关的数据;
表示可通过网络访问的计算机的第一列表,如果响应所述数据分组的所述传输接收到UDP数据响应分组的非零组,则所述第一列表包括所述目标计算机;以及
表示未知不能通过所述网络访问的计算机的第二列表,如果响应所述数据分组的所述传输接收到ICMP错误分组的空白组,则所述第二列表包括所述目标计算机。
37.一种确定是否可通过网络访问目标计算机的方法,所述方法包括步骤:
识别TCP端口;
向所述目标计算机的所述TCP端口发送第一数据分组,每一个所述第一数据分组符合TCP;
响应所述第一数据分组的所述发送,接收第一确认分组;以及
如果所述第一确认分组是非零的,则将所述目标计算机的表示添加到表示可访问计算机的列表中。
38.根据权利要求37所述的方法,其特征在于所述方法还包括步骤:
识别与网络服务相关的UDP端口;
向所述目标计算机的所述UDP端口发送第二数据分组,在所述目标计算机的整个等待时间段内,将所述第二数据分组中的至少一个连续地发送到所述目标计算机;
响应所述第二数据分组的所述发送,接收第二确认分组;以及
如果所述第二确认分组是非零UDP数据响应分组,则将所述目标计算机的表示添加到表示可访问计算机的列表中。
39.根据权利要求38所述的方法,其特征在于所述方法还包括步骤:
通过测量响应传送到所述目标计算机的分组而接收的响应之间的时间,确定所述目标计算机的所述等待时间段。
40.根据权利要求38所述的方法,其特征在于所述方法还包括步骤:
将所述目标计算机的表示添加到表示未知的通过所述网络不能访问的计算机的列表,如果所述第二确认分组包括ICMP错误分组的空白组,则进行所述添加。
41.一种通过网络评估目标计算机的弱点的方法,所述方法包括步骤:
通过向网络上的一组计算机传送一组ICMP分组、一组TCP分组和一组UDP分组,发现在网络上的一组响应计算机;
通过向每一个所述一组响应计算机的第一端口传送TCP分组,并且向每一个所述一组响应计算机的第二端口传送UDP分组,检测在所述一组响应计算机中的每一个上的服务,所述第一和第二端口由计算机共同使用以通过网络接收数据分组,所述TCP分组包括与已知使用所述第一端口之一的至少一个基于计算机的服务相关的数据,所述UDP分组包括与已知使用所述第二端口之一的至少一个基于计算机的服务相关的数据;以及
利用响应所述TCP分组和所述UDP分组的所述传输而接收的响应,产生响应端口的列表。
42.根据权利要求41所述的方法,其特征在于所述方法还包括步骤:
通过将预定值与响应对所述一组响应计算机中的每一个的多个符合TCP分组的传输而从所述一组响应计算机的每一个接收的响应的部分进行比较,确定由所述一组响应计算机中的每一个所使用的操作系统。
43.根据权利要求42所述的方法,其特征在于所述方法还包括步骤:
通过将自动弱点脚本施加到在所述响应端口的列表中所表示的每一个响应端口,确认在所述网络上存在的弱点,每一个所述自动弱点脚本测试已知与包括多个特定响应端口和特定操作系统的计算机配置相关的弱点。
44.根据权利要求43所述的方法,其特征在于所述方法还包括步骤:
计算所述网络的安全性的客观标记,所述计算基于所确认弱点的加权求和。
45.根据权利要求44所述的方法,其特征在于所述方法还包括步骤:
确定所述网络的拓扑,通过利用针对生存(TTL)设置的变化时间来传送一组ICMP分组,并且通过变化的TTL设置来传送一组TCP分组进行所述拓扑确定。
46.根据权利要求45所述的方法,其特征在于所述方法还包括步骤:
产生所述网络的图形表示,所述表示包括所述网络的拓扑图、加权确认弱点的基于颜色的表示、以及所述图形表示和描述所述网络上的所确认弱点和计算机的信息之间的关联。
47.一种创建网络的图形表示的方法,所述方法包括步骤:
获得网络上的节点的IP地址;
获得所述节点之间的节点距离和连接关系;
将一些节点识别为路由器;
将其他节点识别为与所述路由器之一相连的叶节点;
产生路由器节点的图形表示;
对于每一个路由器,通过描绘与所述各个路由器的所述图形表示具有空间关系的所述直接相连的叶节点的图形表示,产生直接相连的叶节点的图形表示;以及
描绘没有插入路由器的路由器之间的链接。
48.根据权利要求47所述的方法,其特征在于还包括步骤:
对于每一个路由器,将所述各个路由器的IP地址和每一个所述直接相连的叶节点的IP地址进行比较,以解析其中直接相连叶节点和所述相应路由器表示相同节点的两个网络连接的情况。
49.一种创建网络的拓扑表示的方法,所述方法包括步骤:
识别所述网络上的响应计算机;
通过向每一个响应计算机发送具有对生存(TTL)值的增加时间的分组序列,获得多个IP地址的序列,每一个IP地址的序列表示在源计算机和所述响应计算机之一之间的所述网络中的节点,在每一个序列中的相邻IP地址表示相连的节点,每一个所述节点包括计算机或路由器,
产生节点结构的列表,每一个所述节点结构包括表示节点的数据和表示其直接相连的其他节点的数据,所述列表示出了在所述多个序列中的所有IP地址;
针对每一个IP地址确定距离计数,所述距离计数表示在具有所述IP地址的节点和源节点之间的节点数量;
创建表示包括路由器的节点的每一个节点结构的路由器结构;
使每一个所述路由器结构与表示不与除了由所述各个路由器结构所表示的路由器之外的其他节点相连的每一个连接节点的连接数据关联;
对于每一个路由器结构,可视地绘制与由所述各个路由器结构的所述连接数据所表示的连接节点相对应的一个或多个图形形状空间相关的图形形状;以及
对于每一个路由器结构,当与由所述各个路由器结构和所述不同路由器结构所表示的路由器的所述IP地址相关联的距离计数表示直接连接时,可视地绘制与各个路由器结构相关的图形形状和与所述不同路由器结构相关的另一图形形状之间的连接。
50.根据权利要求49所述的方法,其特征在于所述方法还包括步骤:
测试由路由器结构所表示的路由器和在连接数据中所表示的连接节点是否包括一个节点的两个网络连接。
51.根据权利要求49所述的方法,其特征在于:表示路由器的所述图形形状是球形,并且每一个所述空间相关的图形形状是以表示所述路由器的所述球为轨道的球。
52.一种计算客观安全分数的方法,所述方法包括步骤:
识别网络的已知弱点;
根据使用的容易度或者所准予访问的等级,对所述已知弱点进行加权;以及
确定数值地表示网络的已加权已知弱点的组合的弱点值。
53.一种计算网络的客观安全分数的方法,所述方法包括步骤:
确定数值地表示网络的已知弱点的组合的弱点值;
确定表示在所述网络上的计算机的可访问端口的组合的暴露值;以及
通过组合所述弱点值和所述暴露值来得到分数。
54.根据权利要求53所述的方法,其特征在于已知弱点的所述组合是特定弱点的加权数值表达式的求和,所述加权基于利用等级的容易度和针对每一个弱点的访问准予等级。
55.一种进行自动网络弱点攻击的方法,所述方法包括步骤:
针对网络上的每一个响应计算机,选择一组弱点攻击,针对每一个响应计算机的每一个所选的弱点攻击设计用于暴露与已知为可访问的所述响应计算机的端口相关、并且还与由所述相应计算机所使用的操作系统相关的弱点;
对所述一组弱点攻击进行编码,从而将每一个弱点攻击以唯一标识符表示在数据库中;
利用自动脚本语言的指令来表示所述一组弱点攻击中的每一个;以及
通过利用计算机来处理所述指令来执行所述弱点攻击。
56.一种分级网络弱点报告,包括:
第一端口级包括:
表示所述网络的安全性的客观分数;以及
网络拓扑的图形表示,包括可通过所述网络访问的计算机的图形表示、以及至少一些所述计算机的弱点的基于颜色的图形表示;以及
第二端口级包括:
文字列表,描述了所述计算机及其相关的弱点;以及
暴露报告,描述了所述计算机的可访问端口和服务。
57.一种弱点评估语言,包括:
一组编程语言语句,用于创建可执行脚本,所述脚本在线程安全的执行结构中执行,其中,所有变量为栈变量,而分析树作为只读数据结构来处理;
一组特殊标量数据类型,可与表达式中的整型数据类型互换,每一个所述一组特殊标量数据类型具有一组常数值,配置所述常数值用于执行在脚本中体现的弱点评估操作;
在元范围内所声明的一组本地对象,所述元范围拥有脚本范围,以使所述本地对象可用于可执行脚本,所述本地对象便于网络通信,提供了可调用的成员函数,用于建立独特端口列表,并且将脚本执行指向特定主机,并且提供了用于脚本的IP地址;以及
弱点对象,进行操作以将其自身拷贝到其他脚本可以访问其信息的全局数据区,以便与另一机器协商,便于由不同脚本所发现的弱点数据的一个脚本使用。
58.一种将已知弱点自动施加到目标计算机上的方法,所述方法包括步骤:
提供已知弱点数据库,所述数据库包括数据对象;
提供可执行脚本,所述可执行脚本与数据对象相关联;
将可执行脚本施加到目标计算机上,所述脚本对目标计算机的端口执行的已知弱点;以及
返回表示可执行脚本的成功、失败或其他结果中的至少一个的值。
59.一种将已知弱点自动施加到网络上的目标计算机的方法,所述方法包括步骤:
提供已知弱点数据库;
提供一组可执行脚本,每一个可执行脚本将已知弱点施加到所指定的目标计算机;
执行第一可执行脚本,以便将弱点施加到所指定的目标计算机;
监控表示所述第一可执行脚本的每一个的成功、失败或其他结果的返回值;以及
利用所述返回值产生报告,所述报告表示所述网络的安全等级。
60.根据权利要求59所述的方法,其特征在于所述方法还包括步骤:
识别执行时间间隔,其中,所述第一可执行脚本的执行在每一个所述时间间隔的开始处开始,并且在每一个所述时间间隔的结束处暂停,直到已经执行了所有所述的第一可执行脚本为止。
61.根据权利要求60所述的方法,其特征在于还包括步骤:
当完成了所述第一可执行脚本的所述执行时,自动地重复所述第一可执行脚本的执行。
62.根据权利要求61所述的方法,其特征在于还包括步骤:
在所述第一可执行脚本的每一次完整执行时,产生报告;以及
通过比较多个所述报告来计算所述网络的安全趋势。
63.根据权利要求59所述的方法,其特征在于还包括步骤:
执行第二可执行脚本,以便在所述第一可执行脚本的执行期间,将弱点施加到第二计算机网络。
64.根据权利要求63所述的方法,其特征在于所述第二网络是所述网络的子集。
65.根据权利要求59所述的方法,其特征在于配置所述第一可执行脚本,以便在将弱点施加到所有所述目标计算机的第二端口之前,将弱点施加到所有所述目标计算机的第一端口。
66.根据权利要求57所述的方法,其特征在于所述方法还包括步骤:
分配多个分组时隙,每一个分组时隙允许由所述可执行脚本之一对分组的异步传输。
CNA028285425A 2002-01-15 2002-01-15 网络弱点检测和报告的系统和方法 Pending CN1623140A (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2002/001093 WO2003060717A1 (en) 2002-01-15 2002-01-15 System and method for network vulnerability detection and reporting

Publications (1)

Publication Number Publication Date
CN1623140A true CN1623140A (zh) 2005-06-01

Family

ID=21743216

Family Applications (1)

Application Number Title Priority Date Filing Date
CNA028285425A Pending CN1623140A (zh) 2002-01-15 2002-01-15 网络弱点检测和报告的系统和方法

Country Status (6)

Country Link
EP (1) EP1466248A1 (zh)
JP (1) JP2005515541A (zh)
CN (1) CN1623140A (zh)
AU (1) AU2002245262B2 (zh)
CA (1) CA2473444C (zh)
WO (1) WO2003060717A1 (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100429890C (zh) * 2005-09-05 2008-10-29 北京启明星辰信息技术有限公司 网络安全事件的可视化定位方法及系统
CN104852921A (zh) * 2015-05-25 2015-08-19 烽火通信科技股份有限公司 网络设备防开放端口攻击测试系统及方法
CN112334901A (zh) * 2018-06-27 2021-02-05 亚马逊科技公司 自动化无分组网络可达性分析
CN113595823A (zh) * 2021-07-26 2021-11-02 哈尔滨工业大学(威海) 基于解析行为的开放域名解析器节能程度评估的方法

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7664845B2 (en) 2002-01-15 2010-02-16 Mcafee, Inc. System and method for network vulnerability detection and reporting
US7243148B2 (en) 2002-01-15 2007-07-10 Mcafee, Inc. System and method for network vulnerability detection and reporting
EP1593228B8 (en) 2003-02-14 2017-09-20 McAfee, LLC Network audit policy assurance system
US9100431B2 (en) 2003-07-01 2015-08-04 Securityprofiling, Llc Computer program product and apparatus for multi-path remediation
US8984644B2 (en) 2003-07-01 2015-03-17 Securityprofiling, Llc Anti-vulnerability system, method, and computer program product
US20070113272A2 (en) 2003-07-01 2007-05-17 Securityprofiling, Inc. Real-time vulnerability monitoring
EP2372954B1 (en) * 2003-11-28 2014-01-08 Insightix Ltd Method and system for collecting information relating to a communication network
US7796529B2 (en) * 2004-08-28 2010-09-14 Streamaware, Llc Link analysis method and system
US7793338B1 (en) 2004-10-21 2010-09-07 Mcafee, Inc. System and method of network endpoint security
US7748042B2 (en) * 2006-09-14 2010-06-29 Genpact Limited Security vulnerability determination in a computer system
GB2443459A (en) * 2006-10-31 2008-05-07 Hewlett Packard Development Co Data packet incuding computing platform indication
US8484729B2 (en) 2007-09-20 2013-07-09 Nec Corporation Security operation management system, security operation management method, and security operation management program
CN101447898B (zh) * 2008-11-19 2012-12-05 中国人民解放军信息安全测评认证中心 一种用于网络安全产品的测试系统及测试方法
CN101447991B (zh) * 2008-11-19 2012-10-24 中国人民解放军信息安全测评认证中心 用于测试入侵检测系统的测试装置及测试方法
JP5598112B2 (ja) * 2009-06-22 2014-10-01 横河電機株式会社 プラントにおけるセキュリティ脅威レポートを作成する方法及びシステム
WO2012001667A1 (en) 2010-07-01 2012-01-05 Nunez Di Croce Mariano Automated security assessment of business-critical systems and applications
CN102104605B (zh) * 2011-02-28 2013-06-26 中国人民解放军国防科学技术大学 一种面向大规模网络脆弱性关联分析的梯度化并行方法
JP2011155706A (ja) * 2011-05-16 2011-08-11 Fujitsu Ltd オペレーティングシステムの判定が可能な装置及び方法
US8819818B2 (en) 2012-02-09 2014-08-26 Harris Corporation Dynamic computer network with variable identity parameters
CN104426850A (zh) * 2013-08-23 2015-03-18 南京理工大学常熟研究院有限公司 基于插件的漏洞检测方法
US10162969B2 (en) * 2014-09-10 2018-12-25 Honeywell International Inc. Dynamic quantification of cyber-security risks in a control system
US9349246B1 (en) * 2014-09-15 2016-05-24 Skillz Inc. Integrations portal for a peer-to-peer game platform
JP6515597B2 (ja) 2015-03-09 2019-05-22 富士通株式会社 管理プログラム、管理方法、管理装置
JP2016177371A (ja) * 2015-03-18 2016-10-06 株式会社富士通エフサス 監視装置、監視プログラムおよび監視方法
WO2018031951A1 (en) 2016-08-11 2018-02-15 Hopzero, Inc. Method and system for limiting the range of data transmissions
US11962610B2 (en) 2018-03-05 2024-04-16 EzoTech Inc. Automated security testing system and method
JP2020201533A (ja) * 2019-06-05 2020-12-17 富士通株式会社 不正中継監査プログラム、不正中継監査方法および不正中継監査システム
CN110377518B (zh) * 2019-07-17 2023-07-25 招商银行股份有限公司 全流程扫描方法、装置、设备及可读存储介质
US11716343B2 (en) 2020-08-11 2023-08-01 Cisco Technology, Inc. Secure neighborhoods assessment in enterprise networks
CN112364355B (zh) * 2020-11-12 2024-03-29 中国石油天然气集团有限公司 主动发现分布式自建系统与扫描安全漏洞的方法
US11848956B2 (en) 2021-04-26 2023-12-19 Orca Security LTD. Systems and methods for disparate risk information aggregation
CN116520882B (zh) * 2023-04-28 2024-02-06 北京交通大学 一种面向无人机系统的配置缺陷分析方法和系统
CN116866055B (zh) * 2023-07-26 2024-02-27 中科驭数(北京)科技有限公司 数据泛洪攻击的防御方法、装置、设备及介质

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09214493A (ja) * 1996-02-08 1997-08-15 Hitachi Ltd ネットワークシステム
US5892903A (en) * 1996-09-12 1999-04-06 Internet Security Systems, Inc. Method and apparatus for detecting and identifying security vulnerabilities in an open network computer communication system
US6298445B1 (en) * 1998-04-30 2001-10-02 Netect, Ltd. Computer security
US6282546B1 (en) * 1998-06-30 2001-08-28 Cisco Technology, Inc. System and method for real-time insertion of data into a multi-dimensional database for network intrusion detection and vulnerability assessment

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100429890C (zh) * 2005-09-05 2008-10-29 北京启明星辰信息技术有限公司 网络安全事件的可视化定位方法及系统
CN104852921A (zh) * 2015-05-25 2015-08-19 烽火通信科技股份有限公司 网络设备防开放端口攻击测试系统及方法
CN112334901A (zh) * 2018-06-27 2021-02-05 亚马逊科技公司 自动化无分组网络可达性分析
CN113595823A (zh) * 2021-07-26 2021-11-02 哈尔滨工业大学(威海) 基于解析行为的开放域名解析器节能程度评估的方法
CN113595823B (zh) * 2021-07-26 2024-02-13 哈尔滨工业大学(威海) 基于解析行为的开放域名解析器节能程度评估的方法

Also Published As

Publication number Publication date
AU2002245262B2 (en) 2007-03-15
JP2005515541A (ja) 2005-05-26
AU2002245262A1 (en) 2003-07-30
CA2473444C (en) 2009-09-08
WO2003060717A1 (en) 2003-07-24
CA2473444A1 (en) 2003-07-24
EP1466248A1 (en) 2004-10-13

Similar Documents

Publication Publication Date Title
CN1623140A (zh) 网络弱点检测和报告的系统和方法
CN100346610C (zh) 基于安全策略的网络安全管理系统和方法
CN1518823A (zh) 使用会话追踪的动态分组过滤器
CN1694419A (zh) 核查web服务配置的安全性
CN1678993A (zh) Web服务设备和方法
CN1592230A (zh) 受控资源的授权管理
CN1488115A (zh) 用于提供服务和虚拟编程接口的系统
CN1749997A (zh) 嵌入装置及其控制方法、实现该控制方法的程序和存储媒体
CN1781087A (zh) 安全访问带有客户端接收的专用网的方法和系统
CN1645336A (zh) 基于模板的异构日志信息自动提取与分析方法
CN1666205A (zh) 在线接收的个人标识的验证
CN1428033A (zh) 语义信息网络
CN1791871A (zh) 企业控制台
CN1961525A (zh) 由动态数据报转换和要求的认证和加密方案通过移动式智能数据载体启动的普适的以用户为中心的网络安全
CN1918865A (zh) 生成和处理可任意处理的电子邮件地址的方法、系统以及计算机程序产品
CN1650572A (zh) 群组判定设备
CN1624657A (zh) 安全相关的编程接口
CN1655145A (zh) 最优化行级别数据库安全的系统和方法
CN1574792A (zh) 用于执行网络防火墙的基于多层的方法
CN1677277A (zh) 服务提供方法、服务提供商设备、信息处理方法和设备
CN1656773A (zh) 用于对服务供应商的服务验证用户的方法
CN1574764A (zh) 用于管理基于网络过滤器的策略的方法
CN1818823A (zh) 基于程序行为分析的计算机防护方法
CN101052934A (zh) 用于检测网络上未经授权的扫描的方法、系统和计算机程序
CN1703921A (zh) 使用短消息服务的电子商务消息的方法与装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication