Nessus插件开发及实例

Nessus插件开发及实例
Nessus插件开发及实例

—241—

Nessus 插件开发及实例

肖 晖,张玉清

(中国科学院研究生院国家计算机网络入侵防范中心,北京 100049)

摘 要:Nessus 是当前较先进的漏洞扫描软件,它以插件的形式完成漏洞检查。该文在分析了其插件开发语言的基础上,提出了Nessus 插件开发的基本流程,通过一类弱口令探测插件的实例来说明Nessus 插件的开发。 关键词:Nessus ;漏洞;扫描

Development and Implementation of Nessus Plug-in

XIAO Hui, ZHANG Yuqing

(National Computer Network Intrusion Protection Center, Graduate School, Chinese Academy of Sciences, Beijing 100049)

【Abstract 】Nessus is an advanced vulnerability scanner, which checks the vulnerability by the plugins. The paper analyses the advantage of the Nessus attack scripting language. It gives the steps of developing a Nessus plug-in. An example of weak password is presented to show the progress of developing a Nessus plugin.

【Key words 】Nessus; Vulnerability; Scan

计 算 机 工 程 Computer Engineering 第33卷 第2期

Vol.33 No.2 2007年1月

January 2007

·开发研究与设计技术· 文章编号:1000—3428(2007)02—0241—03

文献标识码:A 中图分类号:TP311

1 概述

网络漏洞扫描也称为脆弱性评估(vulnerability assessment),其基本原理是采用模拟黑客攻击的方式对目标可能存在的已知安全漏洞进行逐项检测,以便对工作站、服务器等各种对象进行安全漏洞检测。网络漏洞扫描在保障网络安全方面起到越来越重要的作用。借助网络漏洞扫描,人们可以发现网络和主机存在的对外开放的端口、提供的服务、某些系统信息、错误的配置、已知的安全漏洞等。面对互联网入侵,如果根据具体的应用环境,尽可能早地通过网络扫描来发现安全漏洞,并及时采取适当的处理措施进行修补,就可以有效地阻止入侵事件的发生。

Nessus 是法国人Renaud Derasion 编写的。它是第1个使用插件的漏洞扫描工具,支持实时的插件升级,具有检测漏洞多、准确、速度快的特点使其在众多漏洞扫描器中脱颖而出。Nessus 的强大的功能是依赖于其丰富的插件来实现的,目前Nessus 插件均由https://www.360docs.net/doc/1016306597.html, 网站维护。虽然官方网站提供的插件很全面,但在许多时候,仍需自主编写Nessus 插件。例如:公司统一要求安装了某种杀毒软件,网络管理员需要手工检查是不是所有员工的机器都安装了该软件,这将是一个异常繁杂的工作。针对这一情况,可编写相应插件来检查软件在机器中的安装情况;而当公司使用的某个国产软件或是仅在公司内部使用的软件发现可能导致远程利用的漏洞时,也必须自己写插件来检测这些存在漏洞的机器。目前当新的漏洞公布时,用户都必须等Nessus 官方网站公布了插件后才能下载使用,这中间的时间差,增加了服务器和主机被入侵的可能性,如果能自行开发插件,及时添加到Nessus 的插件库中,就可弥补这一缺陷。

本文在分析比较了Nessus 插件的几种开发语言的优缺点后,针对使用NASL 脚本开发Nessus 插件进行了详细的介绍,给出了插件的基本结构,提出了开发插件的基本流程,并对插件的测试方法进行了相关的介绍,最后结合插件开发

流程给出了一个Nessus 插件开发的实例。

2 Nessus 及其插件开发语言

2.1 Nessus 简介

Nessus 是一款可以运行在Linux 、BSD 、Solaris 以及其他一些系统上的远程安全扫描软件。它是多线程、基于插件的扫描器,拥有很好的GTK 界面,能完成超过9 000项的远程安全检查,具有强大的报告输出能力,并为每一个发现的安全问题提供安全建议[1]。

系统管理员可以很方便地使用它对单台主机或整个子网进行安全漏洞测试。该系统被设计为client/sever 模式,客户端程序(nessus)用来配置管理服务器端,服务器端程序(nessusd)则负责进行安全检查。在服务器端使用了plugin 的体系,允许用户加入执行特定功能的插件。

Nessus 的安全检查由插件(plugin)完成。

Nessus 的体系结构如图1所示。

图1显示了一次完整的漏洞扫描过程,服务端程序安装于一台Linux 主机上,随时等待客户端的连接,当客户端发起一个连接后,流程按照以下步骤进行。

(1)客户端程序向服务端程序发送详细的扫描任务的参数(遵循nessus 传输协议);

(2)服务端程序接收到客户端程序的请求后,加载完成任务所需要的插件,并合理安排插件的执行顺序;

(3)NASL 语言解释器执行插件,在执行插件扫描过程中会与扫描目标之间有一些数据交互;

(4)NASL 解释器判断扫描结果,并报告给服务端程序;

基金项目:国家自然科学基金资助项目(60373040);国家自然科学基金资助项目(60573048);中国科学院研究生院科研启动经费项目 作者简介:肖 晖(1984-),男,硕士生,主研方向:网络安全; 张玉清,副研究员

收稿日期:2006-04-05 E-mail :xiaoh@https://www.360docs.net/doc/1016306597.html,

(5)服务端程序归纳从NASL解释器收到的扫描结果,生成漏洞报告反馈给客户端程序。

综上可以看到,插件在Nessus扫描过程中发挥了重要作用。对每一个漏洞的扫描都由一个插件来支持,要及时地扫描到主机或网络上最新的漏洞信息,就要及时更新插件来扩充相应的功能。

图1 Nessus体系结构

2.2 Nessus插件开发语言

在Nessus的最初测试版本中,Nessus仅能够检测50个漏洞[3],那时的插件是C语言编写的,需要编译运行。在Nessus正式版发布后不久,C语言编写插件的弊端显现出来:为了支持插件的升级,用户每次都要重新编译整个程序才能完成插件的升级。

NASL是专门用于编写Nessus漏洞测试插件的语言。与其它插件编写语言相比,NASL具有以下优点。

(1)NASL为Nessus做过专门的优化,利用NASL可以迅速开发出高效的Nessus插件;

(2)即使几百个NASL插件同时运行,占用的内存也非常小;

(3)NASL与C有许多共同点,易于学习和掌握;

(4)NASL对测试的主机更加安全,易于同其他用户直接分享插件;

(5)NASL提供很多网络函数,易于编写漏洞测试插件,且移植性好,Windows版本的NASL解释器发布后,不需要对已经编写的插件做任何修改就能使用。

综上,在分析了各种语言开发Nessus插件的优缺点后,我们选择NASL语言来进行Nessus插件的开发。

3 Nessus插件的基本结构

一个完整的Nessus插件由注册部分和攻击部分组成。注册部分包含加载该插件时所需要的描述信息;攻击部分包含用于攻击测试的代码。攻击完成后,可使用security_warning()和security_hole()函数报告是否存在相应安全漏洞。Nessus 插件的基本结构如图2所示。

脚本的注册部分,一般由以下相对固定的条目组成,必需的部分在图2中用*进行了标注。

(1)script_id设置脚本的唯一标识,如果编写供自己使用的插件,ID号可以使用90 000~99 000;

(2)script_version设置脚本的版本号;

(3)script_name设置脚本的名称;

(4)script_description设置漏洞的详细描述信息,以及漏洞的解决办法和漏洞的风险等级;

(5)script_summary设置总结信息,必须在一行之内总结描述信息;

(6)script_category设置脚本的类别,必须是ACT_GATH ER_INFO(信息采集类脚本)、ACT_ATTACK(尝试获取远程主机权限脚本)、ACT_DENIAL(拒绝服务攻击脚本)和ACT_SC ANNER(端口扫描脚本)之一,这个字段决定了nessusd加载插件时的先后顺序;

(7)script_copyright设置脚本的版权信息;

(8)script_family设置脚本所属的族(family)。NASL对此没有明确的规定,插件作者可以任意定义脚本所属的族,但不建议这样做。当前使用的族有Backdoors、CGI abuses、Denial of Service、FTP、Finger abuses、Firewalls、Gain a shell remotely、Gain root remotely、Misc、NIS、RPC、Remote file access、SMTP problems、Useless services;

(9)script_cve_id如果该漏洞有CVE(Common Vulnerabi-lities and Exposure)编号,可以在这个字段给出;

(10)script_bugtraq_id如果该漏洞有bugtraq编号,可在这个字段给出;

(11)script_require_ports设置使用该脚本所依赖的远程主机开启的服务和端口;

(12)script_dependencie设置使用该脚本前所要执行的其它脚本;

(13)script_timeout设置脚本的超时时间。

脚本的攻击部分灵活性较强,需要根据扫描的漏洞的特征来具体分析。

图2 Nessus插件结构

4 Nessus漏洞插件的开发流程

通过大量Nessus漏洞插件的分析以及在Nessus插件过程中积累的一些经验,Nessus漏洞测试插件基本开发流程可总结如图3所示。

通常,开发插件用于扫描网络漏洞,这些漏洞都是针对某一个特定的网络服务,因此首先需要确认远程主机在哪个端口运行该服务;在确定该端口打开的基础上,与该端口建立连接;然后根据漏洞的特征来构造数据,发送到该端口;分析返回信息,判断是否需要继续构造数据发送,若此时可判定漏洞存在,则报告漏洞,并给出相应的解决办法;否则仍需要构造信息,继续发送数据进行测试,直到可以判定漏洞是否存在。以上就是一次完整的漏洞测试。

针对图3所示的步骤中,简单介绍NASL中几个主要的网络函数如下,具体的使用方法,可见文献[2]。

(1)判断服务监听端口,使用get_kb_item(services),

—242—

services参数根据需要具体的服务来确定;

(2)判断端口状态,使用get_port_state(port),port参数根据需要具体的端口来确定;

(3)连接远程的端口,无论是进行TCP连接还是UDP连接首先都必须打开套接字。NASL提供了一系列的函数,利用它们可以很容易完成这些操作。在NASL中打开一个TCP 套接字是使用open_sock_tcp( port ),打开一个UDP套接字是使用open_sock_udp( port )。如果无法与远程主机建立连接,这两个函数都返回0。通常由于无法判断远程主机的UDP端口是否开放,对于open_sock_udp( port )通常不会失败;

(4)构造特定的数据,在NASL中,可以非常方便地构造一个新的IP、TCP、UDP、ICMP和IGMP原始报文,用到的函数分别是forge_ip_packet()、forge_tcp_packet()、forge_udp _packet()、forge_icmp_packet()、forge_igmp_packet()。在实际使用中需要构造哪种数据包,如何构造均由待测试的漏洞决定,这部分是开发漏洞测试插件的核心部分;

(5)发送构造的数据包,发送原始报文的函数是send_pac ket( ),如果是通过套接字发送数据,则使用send( )函数;

(6)接收服务器返回信息,与发送函数对应,如果接收原始报文则使用函数pcap_next ( ),如果通过套接字接收数据,则使用recv ( )和recv_line ( )。

图3 Nessus插件开发流程

5 实例

许多服务器或者主机被入侵,并非因为其存在未打补丁的重大漏洞,问题往往出在弱口令上。例如:许多Windows NT/2000/XP机器administrator密码为空,很容易被恶意用户完全控制,也极易感染某些蠕虫;MsSQL数据库的功能非常强大,它的管理员用户sa具有的权限也是非常大的,拥有了这个账户的密码就等于控制了这台机器;Serv-U是一个应用很广的FTP服务器,由于存在一个本地管理的内置账户(默认用户名和密码),致使其在许多版本中都存在本地提升权限的漏洞;此外弱口令对telnet服务器,ssh服务器的危害也是非常严重的。但由于它们并不属于软件本身的漏洞,因此官方网站没有提供相关的NASL插件,为此我们开发了这类弱口令检测插件。

通过NASL基本语法以及大量的NASL插件代码的阅读,开发了一组针对FTP、ssh、MsSQL、telnet弱口令猜解

的插件,通过其中一个简单的插件ftp_weak_password.nasl

来讲解攻击代码的编写。根据图3的流程图,按照下面的步

骤来实现。

(1)判断服务监听端口:port=get_kb_item(“Services/ftp”);

(2)判断端口状态:get_port_state(port);

(3)连接远程的端口:soc=open_sock_tcp(port);

(4)发送构造的数据:ftp_log_in(socket:soc,user:username, pass:password);该函数是NASL提供的一个高层的函数,用

指定的用户名和密码来完成一次FTP登录过程;

(5)判断返回数据:ftp_log_in函数如果返回TRUE,则表

示登录成功,FALSE表示登录失败;

(6)是否需要继续发送数据:如果所有的用户名和密码都

已经尝试登录,则不需再发送,如果有未尝试的,则继续发

送登录数据;

(7)报告漏洞:security_hole(port:port, data:report)。

插件编写完成后需进行插件测试。首先将待测试插件复

制到/usr/local/lib/nessus/plugins/目录下,Nessus提供了一个NASL语言的解释器nasl,可通过如下命令运行:

nasl –t 目标主机ip 插件名

在IP地址为192.168.1.230的机器上架设了一个serv-U

的FTP server,默认是匿名用户可以访问的,现在以它为目标,用ftp_weak_password.nasl测试进行测试,结果如图4 所示。

图4 ftp_weak_password.nasl测试结果

测试结果显示用户名为FTP,anonymous使用空密码均

可登录该FTP服务器。

6 结束语

安全漏洞层出不穷,如果能及时编写漏洞扫描插件进行

检测,并及时采取适当的处理措施进行修补,就可以有效地

阻止入侵事件的发生。本文详细介绍了Nessus插件的结构,并分析给出了Nessus插件开发流程,流程较为准确地反映了Nessus插件在扫描过程中所必需完成的几个步骤,使得插件

编写过程更为清晰、直观、规范。最后结合该流程介绍了一

类弱口令插件的编写测试过程。插件开发流程的总结与分析,可以为安全管理员及时开发出针对最新漏洞的插件提供强有

力的支持。

参考文献

1 Renaud D, Ron G. A Complete Analysis of Your Security Level[Z]. 2005. https://www.360docs.net/doc/1016306597.html,/features/index.php.

2 Renaud D. The Nessus Attack Scripting Language Reference Guide[Z]. 2005-01-03. http://ftp.intevation.de/boss/doc/nasl_guide-20 050103.pdf.

3 Jay B, Haroon M, Roelof T, et al. Nessus Network Auditing[M]. Syngress Publishing, 2004.

—243—

Nessus插件开发及实例

作者:肖晖, 张玉清, XIAO Hui, ZHANG Yuqing

作者单位:中国科学院研究生院国家计算机网络入侵防范中心,北京,100049

刊名:

计算机工程

英文刊名:COMPUTER ENGINEERING

年,卷(期):2007,33(2)

被引用次数:2次

参考文献(3条)

1.Renaud D.Ron G A Complete Analysis of Your Security Level 2005

2.Renaud D The Nessus Attack Scripting Language Reference Guide 2005

3.Jay B.Haroon M.Roelof T Nessus Network Auditing 2004

相似文献(10条)

1.期刊论文王猛.刘必雄.许榕生.丁天昌从OVAL漏洞信息转换到Nessus扫描插件的研究与实现-计算机系统应用2007,""(11)

网络安全漏洞扫描应充分考虑执行的效率和信息的共享.本文通过对OVAL和Nessus的介绍,分析OVAL Definition与Nessus plugin之间的异同,提出并实现了一种将OVAL公布的漏洞信息转换成Nessus扫描插件的方法,共享了漏洞信息,并提升了漏洞检测的品质.最后经过实验说明该方法的可行性.

2.学位论文王博Nessus网络漏洞扫描器的管理与研究2008

随着信息技术的迅速发展,Internet已经成为人们日常生活不可缺少的一部分。然而,随着互联网的广泛普及,互联网安全问题已成为人们关注的焦点。网络管理员或用户需要通过漏洞扫描进行安全风险评估保障网络安全。

本文首先论述了漏洞的含义、成因、漏洞的危害等级以及漏洞扫描器的含义。漏洞扫描器是一种自动检测远程或本地主机安全性弱点的程序。系统管理员通过漏洞扫描器扫描分析,能及时发现服务器或主机存在的危险。

然后在详细分析Nessus漏洞扫描器工作原理以及传统网络扫描系统缺陷的基础上,本文设计了一个基于多台Nessus扫描服务器的分布式网络漏洞扫描系统,改变了传统使用单一扫描器构建扫描系统的模式。该系统由扫描服务器,Web管理中心,以及后台数据库等几部分组成。

本文为扫描系统设计了独立数据库,实现了系统扫描任务的均衡分配以及扫描任务的自动排队等待。系统借助Web管理中心的管理能够完成对扫描用户的权限管理以及对扫描服务器状态的实时监测。同时系统实现了对目标网络或主机的定时检测功能,并且能够将检测信息即时自动发送给管理员。该系统能够通过对扫描结果的分析处理判断目标系统的安全运行状况,并将安全状态以曲线图或饼图的方式显现出来。同时,扫描系统可以通过Web管理中心将漏洞处理建议及安全状态分析图提供给用户。

最后,本文制定了详细的测试方案,对网络扫描系统进行了测试分析,测试结果表明系统运行状况良好基本达到设计要求。

3.期刊论文邢丹.李艺.XING Dan.LI Yi插件在Nessus中的实现-装备指挥技术学院学报2005,16(1)

Nessus是一种功能强大的漏洞扫描器.因其基本上涵盖了各种漏洞检查程序,且允许用户编写自己的漏洞检查程序并嵌入其中,因此它具有很强的功能扩展能力,值得我们学习借鉴.首先,介绍了Nessus的结构和Nessus的扫描过程;然后,重点阐述了插件在Nessus中的实现机制;最后,说明如何编写自己的插件程序.

4.学位论文张志龙网络漏洞扫描器Nessus的分析与研究2009

本文对网络漏洞扫描器作了一定程度的概述,给出了安全漏洞的定义,并介绍了漏洞扫描器基本概念及其工作原理以及扫描工具的衡量因素。然后本文以Nessus这款免费的开源软件为研究对象,重点分析和研究了它内部工作过程,特别是分析了它的内部结构以及内部模块间进行调用的关系,从而我们可以得出一款漏洞扫描器应该具备哪些基本模块,以及这些模块间是如何调用工作的,对读者设计一款网络漏洞扫描器有一定的参考价值;另外本文还介绍了编写NASL插件的一般流程以及需要注意的地方,方便读者根据自己的需要编写NASL插件。

基于对漏洞扫描器Nessus的深入分析和研究,本文设计了一款网络漏洞扫描系统,对安全漏洞扫描系统的总体设计进行了详细说明。首先提出了该系统的设计目标和设计原则,然后给出了系统的总体设计模型并详细介绍了各个功能模块。本系统主要包括以下几个模块:系统配置和控制模块、端口扫描模块、漏洞扫描、扫描结果模块。

最后,本文选择了两款比较知名的漏洞扫描器软件Nessus和X-Scan,利用学校局域网的环境进行测试,通过试验数据得出它们各自的性能特点,并且进行了深入的性能分析比较。

5.期刊论文张志龙.贺思德.杨令省.岳建龙网络主机漏洞扫描Nessus与X-Scan的性能分析比较-科技信息2009,""(7)

本文主要对Nessus和X-Scan这两款软件的性能进行了深入的分析比较,利用学校局网的实体环境进行了具体的试验,通过试验数据得出它们各自的性能特点,最后总结了Nessus和X-Scan各自的优点和不足.

6.学位论文杨忠仪网络安全扫描系统关键技术的研究与实现2007

随着信息网络技术的发展,网络信息安全已成为维护国家安全和社会稳定的焦点。安全扫描技术是一种极为有效的主动防御技术,成为网络安全研究中的热点之一。目前漏洞的广泛存在己成为网络系统的直接安全威胁,研究针对发现漏洞的网络安全扫描技术具有重要的意义。本文从管理员的角度出发,围绕网络安全扫描技术和工具开展研究与实现工作。 本文在深入分析现有网络安全扫描技术、特别是被广泛使用的漏洞扫描工具Nessus的结构及工作原理的基础上,为适应目前多子网环境的网络漏洞扫描的需求,提出了一种由浏览器端、扫描控制端和扫描服务器端组成的分布式网络安全扫描系统体系结构。多个扫描服务器作为扫描任务执行者部署到分布的子网络,由扫描控制器集中管理,实现对大规模网络的分布式漏洞扫描。针对网络安全扫描系统中服务器和目标主机位置关系对扫描结果和扫描速度地影响,提出了相应的扫描服务器部署策略和分布式扫描任务分配算法,在保证准确率的基础上来提高扫描速度,缩短扫描时间;实现了该分布式网络安全扫描系统原型。该系统具有分布扫描、多用户分级管理和计划扫描等特点。测试结果表明该网络安全扫描系统不仅具有分布式扫描的功能,并具有较高的扫描效率和可扩展性。

7.期刊论文张静媛.黄丹丹.杨晓彦.王若欣.张玉清.Zhang Jingyuan.Huang Dandan.Yang Xiaoyan.Wang Ruoxin.Zhang Yuqing

NESSUS基本原理及其关键技术分析-电子科技2006,""(11)

主要介绍了网络漏洞扫描系统的结构以及工作原理,并介绍了一种典型的网络漏洞扫描器--Nessus.重点讨论了Nessus的结构、具体扫描过程、服务器端的模块结构以及插件的下载过程等关键问题,并对各部分的代码给出了相应的分析描述.文章最后对网络漏洞扫描器的发展现状和评价标准进行了总结.

8.会议论文高静峰.林柏钢.倪一涛基于Nessus漏洞扫描系统模型的研究2006

分析了现有漏洞扫描工具在网络安全领域的重要作用,主要介绍了开源软件Nessus漏洞扫描器的优缺点并提出改进方案,在此基础上设计了一个IDS与漏洞扫描相结合的新型漏洞扫描应用系统模型,并对它的工作原理和主要特点作一简要介绍.

9.学位论文韩冬网络安全信息检测与管理2008

随着网络技术的飞速发展,网络安全越来越受到重视。通过研究漏洞扫描,我们能够尽早地发现网络或系统中存在的安全漏洞,并及时采取适当的措施进行修补,从而有效地阻止入侵事件的发生。网络拓扑发现在故障检测和网络升级方面具有重要的意义。漏洞扫描和网络拓扑发现是入侵检测报警管理与入侵响应系统的一部分。

一方面,本文在研究漏洞扫描的基础上,深入分析了网络漏洞扫描器Nessus。主要内容如下:

1.分析了漏洞扫描的原理,介绍了CVE(Common Vulnerabilities and Exposures)标准。

2.介绍了Nessus的体系结构和基于插件技术的扫描策略,包括Nessus的安装和配置。

3.研究了Nessus漏洞扫描脚本语言NASL,Nessus插件的基本结构和开发流程,并给出了一个NASL脚本的例子。

4.对Nessus的.nsr格式的扫描报告进行信息检索与提取,将漏洞和操作系统信息自动写入数据库中。

另一方面,本文讨论了几种常用的网络拓扑结构搜索方法,详细分析了简单网络管理协议(SNMP)的体系结构:管理信息结构(SMI),管理信息库(MIB)和SNMP协议。接着本文提出了基于SNMP和ICMP的两级拓扑发现算法。

一级拓扑主要发现路由器和与之直接相连的子网;二级拓扑主要是搜索子网内的活动主机。另外,一级拓扑发现主要采用WinSNMPAPI访问管理信息库(MIB)的方法来获取路由器的各种信息,而二级拓扑发现通过调用动态链接库ICMP.dll来实现ping操作。最后对网络拓扑结构图进行了动态绘制,并把拓扑信息存储到数据库中。

10.期刊论文耿哲.王秀美.王继龙.于洪奎基于Web的漏洞扫描系统的设计与实现-计算机与现代化2004,""(11)

分析了网络漏洞扫描器在网络安全领域的重要作用及其工作原理,介绍了漏洞扫描器开源软件Nessus的优点,介绍了一个在Nessus的基础上开发的基于Web的网络漏洞扫描系统的

设计与实现.

引证文献(2条)

1.周亮.刘开培.李俊娥.陈勇强电力调度管理信息系统安全风险评估研究[期刊论文]-电气应用 2008(20)

2.王猛.刘必雄.许榕生.丁天昌从OVAL漏洞信息转换到Nessus扫描插件的研究与实现[期刊论文]-计算机系统应用 2007(11)

本文链接:https://www.360docs.net/doc/1016306597.html,/Periodical_jsjgc200702085.aspx

授权使用:国防科技大学(gfkjdx),授权号:26ff7016-ebbc-4cc3-9c04-9e1a00a066f2

下载时间:2010年10月25日

相关主题
相关文档
最新文档