通过入侵行为分析IDS应用

安全
本文通过利用一个简单的Perl程序来跟urlsnarf一起监测一些基本的网络入侵行为,并介绍制作两个快速简易的IDS应用软件,从而体现IDS系统在企业安全中的应用。

IDS,即入侵检测系统其关键就在于检测能力。简单的说,设立IDS的目的就是当场检测到网络入侵事件的发生。本篇文章将通过监测恶性入侵性网页浏览行为,分析在企业安全防护中的IDS应用。

IDS就是一个网络上的系统,这个系统包含了下面三个组件:

(1)网络监测组件,用以捕捉在网络线上传递的封包。

(2)接口组件,用以决定监测中的资料传递是否属于恶意行为或恶意的使用。在网络传递时,用来比较的资料样式 (pattern),以监测恶意网络活动。

(3)响应组件,针对当时的事件予以适当的响应。这个响应可以是简单的,例如寄发一个电子邮件讯息给系统管理者,或者是复杂的,例如暂时将违规者的IP地址过滤掉,不要让他连到这个网络来。

IDS如何通过网页监测网络入侵事件

IDS系统不只必须监测各式各样,从大到小,以及各种系列的系统上的网络攻击事件,它还必须能够快速及时地的在第一时间内监测到入侵事件的发生。因此,IDS的数据库以及式样比对(pattern-matching)机制是复杂到令人难以置信的。

要使IDS能够监测通过网页的入侵事件,其中的网络监测组件就必须要能够捕捉所有通过网页通讯端口上,借着HTTP 通讯协议传递的网络资料往来。(注意,SSL的网络交通是完全绕过IDS的网络监测的,因为这些网络交换资料都是经过加密的。)式样比对组件在这里,主要是用于比较URL解析的结果,看看是否符合数据库中的恶意的HTTP回询(request)。

接下来,我介绍如何制作两个快速而简易的IDS应用软件,用来监测可疑的网页回询活动。这些解决方案的目的是在于提供系统管理者,让他们拥有一个特别针对他们网络而设计的监测/响应系统。

制作快速而简易的IDS应用软件

(1)Network Grep 工具

我们先从一个简单的网络监视程序开始,这个程序是用来监测 HTTP 通讯协议的网络资料往来。HTTP回询的特色是,它使用以下的语法:

〈HTTP-Request-Method〉 〈URL〉 HTTP/〈version〉

这个可在Packetfactory入口网站寻获的程序ngrep针对在网络上传递往来的资料,执行正则表示法(regular expression)式样比对。我们可以用以下的指令来利用ngrep拦截并显示所有纯文字形式的 HTTP 资料往来:

#ngrep-iqt“^GET|^HEAD|^TRACE|^POST|^PUT and HTTP”

以上指令中,-iqt 选项是指示ngrep不要区分资料中的大小写,并且只有显示封包中有符合式样比对的资料,以及在显示资料时加上日期以及时间的标题。(注:比对的式样,是基于 GET,HEAD,TRACE,POST,PUT,以及 HTTP 等关键词。欲知更多有关如何在ngrep使用正则表示法,你可以到http://www.packetfactory.net/Projects/Ngrep/查看相关资料。)

以上面我们建议的方式使用ngrep再加上运行越来越受欢迎的 Whisker程序,监测地址为 10.1.1.2 的IIS5.0 服务器平台,我们得到了以下的结果:

T 03:37:30.041739 10.1.1.21:2425 -> 10.1.1.2:80 [AP]
HEAD / HTTP/1.0..User-Agent: Mozilla/5.0 [en] (Win95; U)..Referer: http://10.1.1.2/..Connection: close....

T 2001/01/16 03:37:30.108630 10.1.1.21:2426 -> 10.1.1.2:80 [AP]
GET /cfdocs/ HTTP/1.0..User-Agent: Mozilla/5.0 [en] (Win95; U)..Cookie: ASPSESSIONIDGQGQGLAC=HDJNBOGBIPOCPNCKOJOPBCFD;path=
/..Referer:http://10.1.1.2/..Connection: close....

T 2001/01/16 03:37:31.842452 10.1.1.21:2427 -> 10.1.1.2:80 [AP]
GET /scripts/ HTTP/1.0..User-Agent: Mozilla/5.0 [en] (Win95; U)..Cookie: ASPSESSIONIDGQGQGLAC=HDJNBOGBIPOCPNCKOJOPBCFD;path=
/..Referer:http://10.1.1.2/..Connection: close....

T 2001/01/16 03:37:31.854206 10.1.1.21:2428 -> 10.1.1.2:80 [AP]
GET /scripts/cfcache.map HTTP/1.0..User-Agent: Mozilla/5.0 [en]
(Win95; U)..Cookie: ASPSESSIONIDGQGQGLAC=HDJNBOGBIPOCPNCKOJOPBCFD;
path=/..Referer: http://10.1.1.2/..Connection: close....

T 2001/01/16 03:37:33.644534 10.1.1.21:2429 -> 10.1.1.2:80 [AP]
GET /cfcache.map HTTP/1.0..User-Agent: Mozilla/5.0 [en] (Win95; U)..Cookie: ASPSESSIONIDGQGQGLAC=HDJNBOGBIPOCPNCKOJOPBCFD;path=
/..Referer:http://10.1.1.2/..Connection: close.... 

(2)执行式样比对

使用ngrep拦截网络资料往来很简单。然而,分析捕捉到的资料并从中抽取URL则略具难度。因为ngrep将资料输出拆成一行一行的,所以我们必须额外耗费很多精力,去重组输出的资料,并将该资料中的URL与已知的网络攻击行为模式做比对。

此时,我向大家介绍另一个用来监测网页传送的犀利工具软件了。这个软件就叫做urlsnarf,它是由Dug Song写成的dsniff工具软件套件的一部份。urlsnarf 从所拦截的网络资料传送中,捕捉所有的 HTTP 回询,并且将结果以共享日记文件格式(Common Log Format ,CLF)显示出来,这种格式就跟市面上的网页服务器,诸如Apache或者是IIS所用的格式一样。

跟当初我们用ngrep的方式一样,我们使用urlsnarf并且在 10.1.1.2 的服务器上执行Whisker,所得到的结果如下:

# urlsnarf
urlsnarf: listening on eth0
10.1.1.21 - - [16/02/2001:03:58:43 +0530] "HEAD http://10.1.1.2/ HTTP/1.0" - - "http://10.1.1.2/" "Mozilla/5.0 [en] (Win95; U)"


10.1.1.21 - - [16/02/2001:03:58:43 +0530] "GET http://10.1.1.2/cfdocs/ HTTP/1.0" - - "http://10.1.1.2/" "Mozilla/5.0 [en] (Win95; U)"

10.1.1.21 - - [16/02/2001:03:58:45 +0530] "GET http://10.1.1.2/scripts/ HTTP/1.0" - - "http://10.1.1.2/" "Mozilla/5.0 [en] (Win95; U)"

10.1.1.21 - - [16/02/2001:03:58:45 +0530] "GET http://10.1.1.2/scripts/cfcache.map HTTP/1.0" - - "http://10.1.1.2/" "Mozilla/5.0 [en] (Win95; U)"

10.1.1.21 - - [16/02/2001:03:58:48 +0530] "GET http://10.1.1.2/cfcache.map HTTP/1.0" - - "http://10.1.1.2/" "Mozilla/5.0 [en] (Win95; U)"

10.1.1.21 - - [16/02/2001:03:58:50+0530]"GET
http://10.1.1.2/cfide/Administrator/startstop.html HTTP/1.0" - - "http://10.1.1.2/" "Mozilla/5.0 [en] (Win95; U)"

10.1.1.21 - - [16/02/2001:03:58:52 +0530] "GET http://10.1.1.2/cfappman/index.cfm HTTP/1.0" - - "http://10.1.1.2/" "Mozilla/5.0 [en] (Win95; U)"

使用urlsnarf唯一的缺点是,它现在的程序是写死的,只监听TCP通讯端口80(纯文字HTTP),3128(MS-proxy)以及8080(generic/squid proxy)。从其它通讯端口传输的HTTP协议资料则完全被忽略。要想改变这种限制,你必须在urlsnarf的原始程序代码中做一些小小的改变。然而,光是urlsnarf所提供的功能,就已经远远的超过它所给我们的限制了。

因为urlsnarf以CLF格式产生日记,我们可以将它的输出结果,转送到任何在网页服务器上使用CLF格式分析日记的日记分析软件。

监测恶性入侵性网页浏览行为

通过urlsnarf的输出,我们可以开始建立式样比对程序,以寻找网络入侵事件。在这里我利用一个简单的Perl程序来跟urlsnarf一起监测一些基本的网络入侵行为,假想体验一下在企业防护中的IDS应用。我们会把urlsnarf的执行结果转传给这个式样比对程序,通过式样比对的方法监测网络入侵行为。

式样比对程序的第一步是,定义一连串入侵性的URL查询。为了简单起见,我们只列出某些URL如下:

%cgis = ("/msadc/msadcs.dll" => "mdac",
"/msadc/Samples/selector/showcode.asp" => "showcode",
"/cgi-bin/guestbook.cgi" => "guestbook",
"/cgi-bin/test-cgi" => "test-cgi",
"/cgi-bin/finger" => "finger",
"/cfdocs/expelval/exprcalc.cfm" => "exprcalc",
"/cgi-bin/phf" => "phf",
"/scripts/samples/search/webhits.exe" => "webhits",
"/scripts/iisadmin/ism.dll" => "ism",
"/scripts/tools/newdsn.exe" => "newdsn",
"/scripts/perl.exe" => "perl_exe",
"/scripts/proxy/w3proxy.dll" => "w3proxy"
);

我们使用了%cg集中储存所有我们需要的恶意URL查询式样。在这里,我们也可以从一个含有这些“特征”的档案,动态建立这个查询式样库。 注意,以上的URL本身并无害;然而,它们通常被黑客利用来做恶意的网页攻击的基础。(例如:msdacs.dll就可以被用来破坏 MDAC/RDS)。

下一步,是设定容忍的最低程度,即:如果某个访客查询某个URL超过三次的话,这个访客的IP地址就会被列在黑名单中。在我们的程序里,定义如下:

$threshold = 3;

下一段重要的程序代码,是一个以while叙述开始的循环,这个循环会从urlsnarf读取每一个CLF纪录,并且做分析。为了避免谈到太多Perl程序语言的细节,有关 while 循环的说明就像以下这样:

while(〈 〉) {
 # # parse incoming log line
 # $logline = $_;

 # # pick out the IP,timestamp andURLfrom theCLFline
 # $logline =~ /(S+).+?([.+]).+?(".+?").+/;
 # $ip = $1;
 # $time = $2;
 # $url = $3;

 # # select the resource from the URL
 # $url =~ /w+s+.*//.+?(/.*)s+.*/;
 # $resource = $1;

 # check if there is a match with theURL

变量$resource的值为URL回询中的resource字符串。例如,如果URL为 http://10.1.1.2/msadc/msadcs.dll,那么 resource 字符串的值就是 /msadcs/msadcs.dll。

接着是,寻找我们的URL“特征”库,看看所查询的URL字符串是否符合其中的一个特征。如果式样符合,我们找出这个查询出处的IP地址, 然后将它的访客指数加一。如果访客观存在指数超过了我们的容忍底线,那么我们将这个IP地址标为黑客地址。

下面是式样比对部分的程序代码:

# check if there is a match with the URL
if($cgis{$resource} ne "") {
push(@{ $offender_list{$ip} }, $cgis{$resource});
# check if the threshold count is crossed
if($offence_count{$ip}++ > $threshold) {
# response to intrusion detected
print STDERR "** $ip " . join(" ",@{ $offender_list{$ip} }) . "n";
} }

将这个程序取名为pattern_match.pl。开始使用urlsnarf以及 pattern_match.pl,urlsnarf 以及pattern_match.pl 得出来的结果应该是如下所示:

#urlsnarf| pattern_match.pl

一个Whisker扫描范例,执行urlsnarf以及pattern_match.pl,监测地址为 10.1.1.2 的IIS5.0 服务器平台,我们得到了以下的结果:

** 10.1.1.21 webhits ism showcode newdsn
** 10.1.1.21 webhits ism showcode newdsn mdac
** 10.1.1.21 webhits ism showcode newdsn mdac w3proxy
** 10.1.1.21 webhits ism showcode newdsn mdac w3proxy perl_exe

这些结果告诉我们,来自IP地址 10.1.1.21 的访客为恶意访客,并且也列出了一连串针对 10.1.1.2 的相关可疑的URL回询。黑客回报系统是在“特征 URL”已经被查询三次了以后,第四次类似的查询又发生(newdsn)才被激活的。


 

【编辑推荐】

  1. 如何构建入门级IDS
  2. IDS漏洞分析与黑客入侵手法
  3. 测试评估IDS的性能指标
  4. 正确评估IDS性能的标准与步骤
  5. 企业测试IDS的四条重要标准

 

责任编辑:张启峰 来源: 网盾
相关推荐

2020-08-07 06:54:50

网络安全黑客技术

2010-09-08 12:29:52

2010-08-24 15:39:59

2010-03-30 20:52:50

2011-10-28 16:03:06

2010-08-25 13:13:04

2012-11-26 13:32:14

2017-10-13 18:33:57

静态代码分析SCAIDS

2009-02-01 11:44:00

2009-06-03 14:15:34

2011-07-18 13:33:35

入侵检测系统IDSIPS

2010-08-25 13:46:28

入侵检测IDS

2009-05-24 20:47:08

2012-02-08 14:36:14

2009-12-17 17:31:10

2013-05-16 10:56:52

2010-09-08 14:48:27

2013-03-13 16:41:00

2023-06-28 07:54:44

数据治理数据分析

2011-11-21 13:31:23

iPhone 4S
点赞
收藏

51CTO技术栈公众号