网络安全 频道

使用漏洞扫描工具 评估网络系统安全

漏洞扫描是保证系统和网络安全必不可少的手段,本文将讲述Linux系统中,如何使用免费的远程安全扫描器Nessus进行漏洞扫描。   

  面对互联网入侵,如果我们能够根据具体的应用环境,尽可能早地通过网络扫描来发现安全漏洞,并及时采取适当的处理措施进行修补,就可以有效地阻止入侵事件的发生。因此,漏洞扫描非常重要和必要。漏洞扫描就是对计算机系统或者其他网络设备进行安全相关的检测,以找出安全隐患和可被黑客利用的漏洞。   

  漏洞扫描通常采用两种策略,第一种是被动式策略,第二种是主动式策略。所谓被动式策略就是基于主机之上,对系统中不合适的设置,脆弱的口令以及其他同安全规则抵触的对象进行检查; 而主动式策略是基于网络的,它通过执行一些脚本文件模拟对系统进行攻击的行为并记录系统的反应,从而发现其中的漏洞。   

  基于网络的检测技术,采用积极的,非破坏性的办法来检验系统是否有可能被攻击崩溃。它利用了一系列的脚本模拟对系统进行攻击的行为,然后对结果进行分析。它还针对已知的网络漏洞进行检验。网络检测技术常被用来进行穿透实验和安全审记。   

  网络漏洞扫描的实现   

  网络漏洞扫描方式通过远程检测目标主机TCP/IP不同端口的服务,记录目标给予的回答。通过这种方法,可以搜集到很多目标主机的各种信息,例如是否能用匿名登陆,是否有可写的FTP目录,是否能用Telnet等。在获得目标主机TCP/IP端口和其对应的网络访问服务的相关信息后,与网络漏洞扫描系统提供的漏洞库进行匹配,如果满足匹配条件,则视为漏洞存在。   

  漏洞扫描软件从最初的专门为Unix系统编写的一些只具有简单功能的小程序,发展到现在,已经出现了多个运行在各种操作系统平台上的、具有复杂功能的商业程序。对于用户来说,有如下几种实现方式:   

  ● 使用插件(plug-in)。每个插件都封装一个或者多个漏洞的测试手段,主扫描程序通过调用插件的方法来执行扫描。仅仅是添加新的插件就可以使软件增加新功能,扫描更多漏洞。在插件编写规范公布的情况下,用户或者第三方公司甚至可以自己编写插件来扩充软件的功能。同时这种技术使软件的升级维护都变得相对简单,并具有非常强的扩展性。   

  ● 使用专用脚本语言。这其实就是一种更高级的插件技术,用户可以使用专用脚本语言来扩充软件功能。脚本语言的使用,简化了编写新插件的编程工作,使扩充软件功能的工作变得更加容易和方便。   

  ● 由漏洞扫描程序过渡到安全评估专家系统。最早的漏洞扫描程序只是简单地把各个扫描测试项的执行结果罗列出来,直接提供给测试者而不对信息进行任何分析处理。而当前较成熟的扫描系统都能够将对单个主机的扫描结果整理,形成报表,能够对具体漏洞提出一些解决方法,但对网络的状况缺乏一个整体的评估。未来的安全扫描系统,应该不但能够扫描安全漏洞,还能够智能化的协助网络信息系统管理人员评估本网络的安全状况,给出安全建议,成为一个安全评估专家系统。

而Nessus是一个功能强大的远程安全扫描器(该软件可以从http://www.nessus.org/上下载),它不仅免费而且更新极快。安全扫描器的功能是对指定网络进行安全检查,找出该网络是否存在有导致对手攻击的安全漏洞。该系统被设计为Client/Sever模式,服务器端负责进行安全检查,客户端用来配置管理服务器端。在服务端还采用了插件的体系,允许用户加入执行特定功能的插件,以进行更快速和更复杂的安全检查。在Nessus中还采用了一个共享的信息接口,称为知识库,其中保存了前面进行检查的结果。检查的结果可以HTML、纯文本、LaTeX等几种格式保存。   

  用户可以指定运行Nessus服务的机器、使用的端口扫描器及测试的内容及测试的IP地址范围。Nessus本身是工作在多线程基础上的,所以用户还可以设置系统同时工作的线程数。这样用户在远端就可以设置Nessus的工作配置了。安全检测完成后,服务端将检测结果返回到客户端,客户端生成直观的报告。在这个过程当中,由于服务器向客户端传送的内容是系统的安全弱点,为了防止通信内容受到监听,其传输过程还可以选择加密。   

  在Nessus安全测试系统中,所有的安全测试都是由nessusd进程发动的。在测试过程中,Nessus会为每个主机维护一份由扫描测试插件获得的基本信息。各种其他的测试插件应该尽可能地利用这些信息,以提高测试效率。每个安全测试插件需要向Nessus服务器进行注册后,才能使用。注册信息包括名字、描述、作者等。   

  实例分析   

  下面通过编写一个简单的脚本来测试Web服务器。这里的WWW服务器采用的是Apache,要实现对其安全测试和模拟攻击首先要做的是搜集服务器的信息。因此,将先测试一下服务器是否存在泄露自身信息的漏洞。(如图1所示)   

  这个算法的思想就是: 构造一个URL: http://www.abc.com/server-info以及http://www.abc.com/server-status,并将其发送给Apache服务器,然后接收返回的服务器信息。这个脚本不具攻击性,属于收集信息类程序。   

  下面将介绍其具体的一些核心代码的构造和作用,以方便用户尽快上手编写:   

  script_dependencie("find_service.nes");   

  script_require_ports("Services/www", 80);   

  上面两行代码是属于注册部分,它设置了脚本的依赖关系。   

  port = get_kb_item("Services/www");  

  if(!port) port = 80;   

  这两行代码是获得服务器提供WWW服务的端口号,Nessus并不认为服务器一定在公认端口提供相应服务。其中get_kb_item()函数用来从KB库中返回对应参数所对应的值,在这里,如果服务器在其他端口提供WWW 服务的话,这个函数则返回其非80端口号。   

  string= "Apache Server Information";   

  if(get_port_state(port))   

  { soc = http_open_socket(port);   

   if(soc) {   

  buffer = http_get(item:"/server-   

  info", port:port);   

  send(socket:soc, data:buffer);   

  data = http_recv(socket:soc);   

  if( string >< data ) {  

  security_warning(port); }  

  http_close_socket(soc);}   

  }   

  上面这段代码实现的是构造URL,并将其发送到服务器,看返回的信息是否有我们预期的串,即“Apache Server Information”,若有的话,说明服务器存在这种泄露自身信息的漏洞。在执行前,先检测一下对应服务端口状态是否是打开,可避免在端口关闭的情况下进行扫描,占用带宽,提高扫描效率。函数http_get()用来构造一个 HTTP GET请求的格式,它可以自动处理HTTP版本认证。它返回一个规格的HTTP请求串。security_warning()则用来报告相应端口漏洞信息。在这里如果服务器存在这种泄露自身信息的漏洞的话,security_warning()将会报告这个端口存在漏洞,并可以在客户端显示脚本注册时script_description()函数提供的内容。   

  上面是一个简单的例子,读者还可以通过写脚本或者插件的方式对Linux网络系统中的各种Web服务器和各种网络应用进行安全测试。   

  安全评估及措施   

  在实现了对服务器的安全扫描后,便可根据扫描结果,对服务器的安全性能进行评估,给出服务器的安全状况。下面根据给出一个大致的评价标准。需要特别注意的是: 评价标准应该根据应用系统、应用背景的不同而有相应的改变,并不存在绝对的评估标准。  

  A级: 扫描结果显示没有漏洞。虽然这并不表明没有漏洞,因为有许多漏洞是尚未发现的,但我们只能针对已知的漏洞进行测试。   

  B级: 具有一些泄漏服务器版本信息之类的不是很重要的漏洞,或者提供容易造成被攻击的服务,如允许匿名登录,这种服务可能会造成许多其他漏洞。   

  C级: 具有危害级别较小的一些漏洞,如可以验证某账号的存在,可以造成列出一些页面目录,文件目录等,不会造成严重后果的漏洞。   

  D级: 具有一般危害程度的漏洞,如拒绝服务漏洞,造成服务器不能正常工作,可以让黑客获得重要文件的访问权的漏洞等。   

  E级: 具有严重危害程度的漏洞,如存在缓冲区溢出漏洞,存在木马后门,存在可以让黑客获得根用户权限或根用户的shell漏洞,根目录被设置一般用户可写等一些后果非常严重的漏洞。   

  通过安全评估后,用户则可以根据情况采取措施,包括给系统打补丁(从技术网站上下载)、关闭不需要的应用服务等来对系统进行加固。可以看出,漏洞扫描、安全评估、采取措施是一个循环迭带、前后相继的流程,用户可以在使用中多加揣摩,从而保证Linux网络系统的安全。   
0
相关文章