【TechTarget中国原创】之前的Nessus指南中包括了如何安装和配置Nessus,以及如何运行基本的安全扫描。之前的特征都是来自可维持网络安全(Tenable Network Security)订阅提供的大型数据库。这些特征都是最新漏洞信息的来源,而且他们提供了对大部分已知存在的威胁的防御。尽管如此,还有一种情况不能通过数据库的方法解决:公司内部编写的自定义应用和已知的漏洞。
从实例开始
假设你拥有一个名为KillerApp的自定义的Web监控程序,而该程序中的文件"killerapp.asp"存在已知漏洞。在你发现该程序包含这个严重漏洞之前,它会一直在本地网络中所有的Web服务器上运行。而该漏洞将允许匿名用户关闭服务器。因此应该立即卸载该程序,但是你怀疑仍有一些服务器安装有该程序。还好这时我们可以采用Nessus攻击脚本语言(NASL)来编写一个用户Nessus“攻击”,或者一个检测程序以找到"killerapp.asp"。
首先介绍完整的NASL脚本。接着,分解这段脚本进一步分析NASL结构。下面是完整的脚本代码:
# # KillerApp check # if (description) { script_id(50000); script_name(english:"Check for KillerApp"); script_description(english:"KillerApp is a high-risk application and should be removed."); script_summary(english:"Checks for KillerApp"); script_copyright(english:"Copyright 2008, Mike Chapple"); script_category(ACT_ATTACK); script_family(english:"Denial of Service"); script_require_ports("Services/www",80); } include("http_func.inc"); include("http_keepalive.inc"); port = get_http_port(default:80); if (get_port_state(port)) { if (is_cgi_installed_ka(item:"/killerapp.asp",port:port)) { security_hole(port); } } |
NASL 脚本结构
NASL脚本可以明显地分为两部分:一部分是对项目的描述,另一部分是对攻击内容的规划。描述部分以“if(description)”语句开始,并包括之后的大括号(“{}”)间的所有内容。从名字就可以了解该部分的很多项的作用。较为重要的有:
- script_id(50000):设置脚本标识号,该标识号必须是1至99999间的唯一整数。推荐选择一个较大的数字以避免与其他Nessus检测脚本(包括用户创建以及从Nessus订阅下载的脚本)的冲突。
- script_category(ACT_ATTACK):设置检测的类别。在本例中,检测漏洞的脚本将允许黑客进行一次攻击,所以我们将其设置为ACT_ATTACK类别。再举一个例子,当NASL脚本发现可能的探测的可能性时,需要将其设置为ACT_GATHER_INFO。
- script_require_ports("Services/www",80):明确了进行成功攻击所要求的端口号。本例中,攻击只能在Web服务器运行于80端口的目标系统上进行。
脚本的其他部分定义了攻击代码。下面将逐行进行分析:
- port = get_http_port(default:80):检测Web服务器是否运行在80端口。
- if (get_port_state(port)):这是一个开始的if语句,它规定包含在大括号中的代码只在端口开放时运行。
- if (is_cgi_installed_ka(item:"/killerapp.asp",port:port)):‘is_cgi_installed_ka’函数检测某个项是否存在于Web服务器中。本例中,我们检测文件killerapp.asp是否存在于服务器的根目录下。
- security_hole(port):如果文件不存在,则报告一个安全漏洞。
使用自定义脚本
执行自定义脚本有两种方法:从命令行运行nasl.exe独立工具,或者把它包括到Nessus扫描中。
在命令行运行的语法是:
例如,如果想对位于192.168.1.1的Web服务器运行killerapp.nasl,可以执行:
| nasl.exe -t 192.168.1.1 "C:\Program Files\Tenable\Nessus\plugins\killerapp.nasl" |
如果这个脚本返回一个漏洞,就会输出如下的“成功”数据:
[Wed Jun 11 19:08:58 2008][5832] Only Ethernet is supported for now (type of {07 061642-1076-44D2-9D72-6C7BC3022BCF} = 71) C:\Program Files\Tenable\Nessus\plugins\killerapp.nasl: Success |
或者,NASL检测脚本可以包含在一个标准的Nessus扫描中,只需要在Nessus文件夹的‘插件程序(plug-ins)’目录中加入这个文件。然后你就会发现当配置Nessus扫描时,你就可以在检测脚本中使用。
了解更多NASl
NASL是一种相当简单的脚本语言,但是它确实包含一些内置功能,可以帮助你定义自己的脚本。如果要了解更权威的NASL的参考资料,请查看Nessus网站上的NASL参考指南。