logo资料库

NESSUS基本原理及其关键技术分析.pdf

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
电子科技 2006 年第 11 期(总第 206 期) NESSUS 基本原理及其关键技术分析 张静媛 1,2,黄丹丹 1,2,杨晓彦 1,2,王若欣 1,2,张玉清 2 (1. 西安电子科技大学 通信工程学院,陕西 西安 710071; 2. 中国科学院研究生院 国家计算机网络入侵防范中心,北京 100049) 摘 要 主要介绍了网络漏洞扫描系统的结构以及工作原理,并介绍了一种典型的网络漏洞扫描器—— Nessus。重点讨论了Nessus的结构、具体扫描过程、服务器端的模块结构以及插件的下载过程等关键问题,并对 各部分的代码给出了相应的分析描述。文章最后对网络漏洞扫描器的发展现状和评价标准进行了总结。 关键词 Nessus;漏洞扫描;插件;网络安全 中图分类号 TN915.08 Analysis of the Basic Theory and the Key Technology of Nessus Zhang Jingyuan, Huang Dandan, Yang Xiaoyan, Wang Ruoxin, Zhang Yuqing (National Computer Network Intrusion Protection Center, GUCAS, Beijing 100049, China) Abstract This paper discusses the frame and the working principles of the network vulnerability scanner system and introduces a typical network vulnerability scanner—Nessus, with the emphasis on its frame, the scanning process, the server module structure and the plugin download process. The description and analysis of the corresponding codes is given. The paper concludes with a review of the development of network vulnerability scanner and its evaluation criteria. Keywords Nessus; vulnerabilities scan; plugin; network security 1 引 言 随着网络的普及,网络安全已成为Internet上的 焦点,它关系着Internet的进一步发展和普及,甚至 关系着Internet的生存。研究表明,70% 以上的网络 都是很脆弱的,这就要求人们采取适当的措施来维 护所使用的网络,确保其安全。当前的安全机制主 要是通过访问控制,如信息加密、安全路由器和防 火墙技术来保护计算机和网络不受非法入侵和未经 授权的使用。但是仅仅通过访问控制来保障安全是 不够的,因为一旦突破访问控制将使网络容易受到 入侵。因此必须从本质出发,即从系统以及网络中 存在的漏洞出发来解决安全问题。本文中所研究的 漏洞扫描系统Nessus[1]就是根据这一出发点设计的。 漏洞扫描技术可分为两类:主机漏洞扫描技术 收稿日期:2006-03-21 基金项目:国家自然科学基金(60373040,60573048)和中 国科学院研究生院科研启动经费项目资助 作者简介:张静媛(1982—),女,硕士研究生。研究方向: 网络安全。 和网络漏洞扫描技术。主机漏洞扫描技术主要针对 系统的配置缺陷,而网络漏洞扫描技术不仅可以检 测系统漏洞,也可以对网络设备、整个网段进行检 测,克服了主机漏洞扫描技术只能针对主机的缺 点。Nessus就属于网络漏洞扫描系统。 2 网络漏洞扫描系统 基于网络的漏洞扫描,就是通过远程检测目标 主机TCP/IP不同端口的服务,记录目标主机给予的 回答。用这种方法来了解目标主机的各种信息,获 得相关信息后,与网络漏洞扫描系统提供的漏洞库 进行匹配,如果满足匹配条件则视为漏洞存在。还 有一种方法就是通过模拟黑客的进攻手法,对目标 主机系统进行攻击性的安全漏洞扫描,如测试弱势 口令等,如果模拟攻击成功则视为漏洞存在。 网络漏洞扫描系统一般由以下几部分组成[2]: (1)扫描引擎:扫描引擎是扫描器的主要部件。 如果采用匹配检测方法,则扫描引擎根据用户的配 置组装好相应的数据包并发送到目标系统,目标系 1
NESSUS 基本原理及其关键技术分析 统进行应答,再将应答数据包与漏洞数据库中的漏 洞特征进行比较,以之来判断所选择的漏洞是否存 在。如果采用的是插件技术,则扫描引擎根据用户 的配置调用扫描方法库里的模拟攻击代码对目标 主机系统进行攻击,若攻击成功,则表明主机系统 存在安全漏洞。 (2)用户配置控制台:用户配置控制台用来设 置要扫描的目标系统,以及要扫描哪些漏洞。他通 常可以是客户端或者浏览器。 (3)扫描知识库:扫描知识库监控当前活动的 扫描,将要扫描的漏洞的相关信息提供给扫描引 擎,同时还接收扫描引擎返回的扫描结果。 (4)结果存储器和报告生成工具:根据扫描知 识库中的扫描结果生成扫描报告,并存储。 (5)漏洞数据库(扫描方法库):漏洞数据库 包含了各种操作系统的各种漏洞信息,以及如何检 测漏洞的指令,网络系统漏洞数据库是根据安全专 家对网络系统安全漏洞、黑客攻击案例的分析和系 统管理员对网络系统安全配置的实际经验而形成 的。扫描方法库包含了针对各种漏洞的模拟攻击方 法。具体使用哪一种数据库是根据要采用哪一种漏 洞检测技术。若采用匹配检测法则使用漏洞数据 库,若使用模拟攻击方法(即插件技术)则使用扫 描方法库。 网络漏洞扫描系统的总体结构如图1所示。 漏洞库/ 扫描方法库 用户配置 控制台 扫描引擎 扫描知识库 结果存储器和报告生 成工具 目标 主机1 目标 主机2 目标 主机3 图 1 网络漏洞扫描系统的总体结构 网络漏洞扫描系统的工作原理是:首先,用户 通过用户配置控制台模块向扫描引擎发出扫描命 令,然后,用户配置控制台模块向扫描引擎模块发 出相应的扫描请求,扫描引擎模块在接到请求之后 2 IT Age/ Nov. 15, 2006 启动相应的子功能模块,若扫描方法采用的是匹配 检测法,则对被扫描主机进行扫描,通过对从被扫 描主机返回的信息进行分析判断,若采用的是模拟 攻击法,则在扫描方法库中调用模拟攻击代码,并 扫描目标主机,最后,利用当前活动扫描知识库中 存储的扫描结果生成扫描报告,再由用户配置控制 台模块最终呈现给用户。 下面将要重点介绍一种典型的网络漏洞扫描 软件:Nessus。Nessus是一款开源代码的性能优良 的漏洞扫描软件,有研究对国外现有的各种商业和 共享的漏洞扫描软件进行了综合评估,结果表明 Nessus的综合性能是最好的。 3 NESSUS 的结构和扫描过程 3.1 Nessus 的结构 Nessus是一种典型的基于客户/服务器结构的 网络扫描系统。Nessus服务器程序可以运行在各种 类UNIX平台上包括FreeBSD,Linux,Solaris以及 Windows9x 和WindowsNT/2000上。客户端包括用 户配置工具和结果存储/报告生成工具。服务器端包 括一个扫描方法库(由插件组成)、当前活动扫描 知识库和一个扫描引擎,Nessus的结构如图2所示。 客户端 服务器端 Internet 扫描方法库(插 件库) 用户配置 工具 扫描引擎 结果存储/报告 生成工具 当前活动扫描知 识库 目标 主机1 目标 主机2 目标 主机3 图 2 Nessus 的结构 Nessus的扫描方法采用的是插件技术。插件是 用脚本语言编写的子程序,通常系统先制定扫描策 略,然后扫描程序根据策略调用一系列插件来执行 漏洞扫描,检测出系统中存在的一个或多个漏洞。 通常一个插件负责扫描一个或一类漏洞,不同的漏 洞扫描插件对应不同的漏洞,添加新的插件就可以 使漏洞扫描软件增加新的功能,扫描出更多的漏 洞。插件编写规范化后,用户自己就可以用Perl、C
创建一个证书 添加新用户 启动nessus服务器,等 待客户端发送扫描请求 打开客户端界面 填入服务器IP地址、用 户名、密码 连接服务器 等待证书 接收证书 选择插件 攻击目标 发出扫描请求 等待扫描结果 对初步结果进行安全级 别分析 启动插件 auth.c,主要是对用户名和密码的管理。 这一模块包含的文件有users.c 、plugs_req.c、 或自行设计的脚本语言来编写插件以扩充漏洞扫 描软件的功能。这种技术使漏洞扫描软件的升级维 护变得相对简单,而专用脚本语言的使用也简化了 编写新插件的编程工作,使漏洞扫描软件具有很强 的扩展性。 3.2 Nessus 的扫描过程 Nessus的扫描过程需要客户端与服务器端相互 配合,共同完成。客户端与服务器端每一步的执行 及它们彼此之间的通信过程如图3所示。 客户端 服务器端 将分析结果输出 得到扫描初步结果 图 3 Nessus 的扫描过程 Nessus的服务器端和客户端的通信过程中, Nessus 遵 循 传 输 协 议 NTP ( 即 Nessus Transfer Protocol)。NTP协议是基于TCP协议的,和另一个 协议(NTP,network time protocol)没有任何关系。 为促进开发更好的客户端,这个协议已经作了很多 扩展。具体的信息可以参看NTP协议的相关文献。 4 NESSUS 各部分代码分析 从Nessus的官方网站可得到Nessus的源代码,源 代码主要包括了4部分的内容:服务器端的内核代码 (Nessus-core);服务器端插件库的代码(Nessus- plugins);功能函数库代码(Nessus- libraries)和客 户端的代码。下面对各部分代码进行分析、介绍: 4.1 Nessus-core 部分代码分析 Nessus-core是服务器端的核心代码。Nessus的 NESSUS 基本原理及其关键技术分析 服务器端的工作流程主要分成两个部分:一部分是 nessusd.c文件,这个文件里的主程序主要是负责解 读接收客户端发送过来的字段,然后根据客户发送 的 请 求 作 出 相 应 的 操 作 ; 而 另 一 部 分 主 要 是 nessus-check-signature.c文件,这一文件里的主程序 主要是管理加密,签名方面的信息。这里重点分析 一下服务器端的模块结构以及各模块对应的代码。 Nessus 服务器端采用了模块结构,它们可以分 成以下几部分,如图4所示。 (1)主控模块:控制各个模块的调用日志模块, 记录日志文件; 这一模块包含的主要文件有nessusd.c 。在这个 文件里包含了侦听的主程序main_loop()和主要处 理程序main()。main_loop()主要是负责等待客 户端的信息;而main()程序则主要是通过信息argc, argv[], envp[]来对消息进行不同的处理,还有版本 的检查等等。 (2)认证模块:对客户提交用户名和密码进行 认证; (3)日志模块:记录日志文件; 这一模块是管理服务器的日志文件。主要包含 的文件有tached.c _detached_send_mail:测试ail内容 是否为空,若为空,则返回。建立以新进程,成功 则返回,否则则等待。 (4)通信模块:按NTP协议处理收到的消息并 向客户端发出消息。 这一模块包涵的文件有comm.c、ntp_10.c、和 ntp_11.c。 (5)扫描模块:按用户的要求进行扫描; 这一模块包含的主要的文件有attack.c等等。 (6)加密模块:对客户和服务器之间的通信进 行加密。 4.2 Nessus-plugins 部分代码分析 4.2.1 插件的数据结构 通过对Nessus-plugins部分代码的分析、总结得 出编写插件的常用数据结构如下[3]: strnct arglist { char * NAME;//plugin的名称 电子科技/2006 年 11 月 15 日 3
NESSUS 基本原理及其关键技术分析 主控模块 控制各个子模块的 调用 认证模块 对用户名和密码进 行认证 日志模块 记录日志文件 扫描模块 按照用户的要求进 行扫描 通信模块 处理ntp协议,处 理收到的消息,发 送消息 加密模块 对客户和服务器之 间的通信进行加密 图 4 Nessus 服务器端的结构 (图 4 中实线表示模块的调用关系,虚线表示模块之间的信息传递)。 char * SUMM;//plugin的概述 char * DESC;//plugin对应的文字描述 char * COPYRIGHT; char * FAMILY;//plugin所属的类别 char * LEVEL;//风险等级 char * FILENAME;//plugin对应的文件名 char * ADVICE;//提供的一些建议 } 4.2.2 插件的下载过程 Nessus 服 务 器 端 插 件 的 更 新 可 以 从 www.nessus.org 网站上定期的下载,该部分代码中 的nessus-plugin目录下的nessus-update-plugins.in文 件完成了通过nessus.fetch从www.nessus.org网站上 获得最新的nessus插件的功能。在与www.nessus.org 通信过程中,通过不断的条件检测,最终获得新的 插件。插件的具体下载过程如图5所示。 判断用户权限 是否是root 否 终止 是 是否存在 .fetch文件 是 是否有 解压功能 是 否 终止 否 终止 创建临时文件夹tmpdir 存放插件 下载新的插件包 对新插件包解压缩,得 到新插件和新插件的 MD5值 比较新插件的MD5值 与本地的已存在的插 件的MD5值是否相同 是 终止 是否存在配 置文件.conf 否 终止 是 否 得到新的插件,将新插 件加入插件文件夹中 图 5 插件的下载过程 4.3 其余部分代码的分析 部分代码所包含的文件的功能: 除了上面介绍的各部分代码外,Nessus还包含 (1)include:这个文件夹中的文件都是用来进 了Nessus-libraries部分代码和客户端部分代码。 行定义操作的头文件; 在Nessus软件中,提供各种功能的实现的函数, 都封装在了Nessus- libraries中,也就是说, Nessus- libraries部分是一个功能函数库,它从不同层次和角 度提供了不同的功能函数,将一些常用和繁复的过 程函数封装起来供其他程序调用。这里简要介绍这 (2)libhosts_gatherer:此文夹中包含对主机进 行操作的程序的集合; (3)libnessus:这一文件夹中的文件,定义具 体实现的功能,如插件,网络等; (4)libpcap-nessus:此文件夹是数据包捕获函 4 IT Age/ Nov. 15, 2006
数库。提供的接口函数主要实现和封装了与数据包 截获有关的过程。 客户端代码中所涉及的一些主要的数据结构 的作用: (1)DIFF_PARAMS:这个数据结构是用来比 较两个扫描结果用的; (2)PLUGIN_SEARCH_STRUCT:这个数据 结构存储的是插件的基本信息; (3)SCAN_PARAMS:这个数据结构存储的是 数据库扫描的参数; (4)SEARCH_STRUCT:这个数据结构是用来 搜索主机和其使用的插件的对应关系的; (5)SERVER_HISTORY:这个数据结构是存 储服务器历史信息的; (6)DBINIT:这个数据结构存放的是数据库初 始化文件信息; (7)EXEC_OPTS:这个数据结构存放的是执 行扫描时的一些选项参数; (8)HOSTINFO 和 HOSTINFO_pre143:这两 个数据结构存放的是主机信息; (9)MYSQL_SETTINGS:这个数据结构存放 的是MYSQL的连接参数。 5 网络漏洞扫描器的发展现状和评价标准 在现阶段,网络漏洞扫描器存在许多主流的产 品,文中所介绍的Nessus就是其中一个典型的代表, 除此之外还存在一些其他的产品,例如:X-Scan、 SATAN。 X-Scan是Windows平台上的一个很不错的国产 安全漏洞扫描工具,它采用多线程方式对指定IP地 址段进行安全漏洞扫描,支持插件功能,提供了图 形界面和命令行两种操作方式。其扫描内容比较多, 包括:标准端口状态及端口banner信息、远程操作系 统类型及版本、CGI漏洞、RPC漏洞、SQL-SERVER 默认帐户、FTP弱口令等。对于一些已知漏洞,给出 了相应的漏洞描述和修补解决方案[4]。 SATAN在Unix环境下运行,它对大多数已知的 漏洞进行扫描,扫描的目标系统是Unix系统,发现 漏洞便提交报告给用户,说明该如何利用漏洞以及 如何对漏洞进行修补。SATAN为用户提供了一个 NESSUS 基本原理及其关键技术分析 HTML界面,是第一个把扫描结果以用户友好的格 式来显示的扫描工具。 评价一个网络漏洞扫描器有很多的标准,如扫 描速度的快慢;发现漏洞数量的多少;覆盖范围是 否广泛;是否有较强的可扩展性、可移植性和可配 置性;扫描的结果是否详细;能否提供完整的关于 漏洞的信息等。但如果在一个大的网络之中,对网 络漏洞扫描器就有了更高的要求,即要能够对整个 网络进行安全漏洞扫描。目前的网络漏洞扫描器也 可用于发现网络漏洞,但是难以分辨漏洞的真伪以 及产生的地点和原因,因此对其评价时就有了更高 的标准,即要有对安全漏洞的真伪识别和诊断能 力。除此之外,还有一些其他评价标准,如对安全 漏洞的深层发掘能力,对主流的操作系统进行扫描 的能力,对TCP/IP等协议进行扫描的能力等[5]。 6 结束语 简要地介绍了网络漏洞扫描系统,并对它的典 型代表软件Nessus进行了研究,重点讨论了Nessus 的结构、具体扫描过程、服务器端的模块结构以及 插件的下载过程等关键问题,并对各部分的代码给 出了相应的分析描述。 Nessus是一款优秀的网络漏洞扫描软件,它有 许多的优点,例如:扫描速度块,采用模块化扫描 插件结构,提供了完整的漏洞信息,会为每一个发 现的安全问题提出解决建议等。但是它也存在很多 不足之处,例如:使用起来不是很灵活,不利于共 享使用,不利于扫描结果的统计分析等。这些缺陷 都需要进一步的研究解决。 参考文献 1 Nessus的官方网站: http://www.nessus.org/,nessus 2.2.4版本 [OL].2005-3-22[2005-7-1]. 2 龚 静. 论计算机网络安全与漏洞扫描技术[J]. 株洲工学 院学报, 2005, 19(4): 46~49. 3 刘宇东. 基于plug-in的网络漏洞扫描系统[J]. 信息网络安 全, 2003(12): 49~50. 4 张玉清, 戴祖锋, 谢崇斌. 安全扫描技术[M]. 北京: 清华 大学出版社: 174~175. 5 沈 阳, 黄厚宽. 网络安全漏洞扫描器[J]. 电脑与信息技 术, 2004 (4): 35~39. 电子科技/2006 年 11 月 15 日 5
分享到:
收藏