[tor-relays] My VPS relay has just been hacked

Nick Sheppard nshep at attglobal.net
Sun Oct 26 18:53:07 UTC 2014


First, many thanks for all the advice.  I will do some serious homework.

To the question What kind of virtualisation?  It's OpenVZ. In fact it's 
the OVZ Starter option from here:

http://www.edis.at/en/server/linux-vps-solusvm-openvz/zurich

and the OS option I chose is what Edis describe as "Debian 7 amd64 
minimal (64bit)"

I've restarted the VPS for 5-10 minutes at a time, long enough to watch 
the malware at work but not long enough for it to ramp up its flood of 
output.  It seems to live here, in /boot:

root at xxxxx:/boot# ls -al
total 128
drwxr-xr-x  2 root root   4096 Oct 26 14:19 .
drwxr-xr-x 23 root root   4096 Oct 26 13:58 ..
-rwxr-xr-x  1 root root 122698 Oct 24 17:19 hxyqbutesc

and it's started in a straightforward way from /etc and /etc/init.d ; 
rc1.d, rc2.d and so on have links to /etc/init.d/hxyqbutesc :

root at xxxxx:/etc# ls -l rc1.d
total 4
1 root root  18 Sep 13 20:21 K01quotarpc -> ../init.d/quotarpc
1 root root  13 Sep 14 22:41 K01tor -> ../init.d/tor
1 root root  17 Sep 13 20:21 K04rsyslog -> ../init.d/rsyslog
1 root root 369 Aug  5 07:47 README
1 root root  18 Sep 13 20:21 S01bootlogs -> ../init.d/bootlogs
1 root root  20 Oct 24 17:19 S01hxyqbutesc -> ../init.d/hxyqbutesc
...

root at xxxxx:/etc# ls -l rc2.d
total 4
1 root root 677 Aug  5 07:47 README
1 root root  18 Sep 13 20:21 S01bootlogs -> ../init.d/bootlogs
1 root root  20 Oct 24 17:19 S01hxyqbutesc -> ../init.d/hxyqbutesc
...

and in /etc/init.d is a short script:

root at xxxxx:/etc/init.d# ls -l
total 196
-rw-r--r-- 1 root root 2427 Aug  5 07:47 README
-rwxr-xr-x 1 root root 1276 Aug  5 07:47 bootlogs
-rwxr-xr-x 1 root root 1281 Aug  5 07:47 bootmisc.sh
-rwxr-xr-x 1 root root 3816 Aug  5 07:47 checkfs.sh
-rwxr-xr-x 1 root root 1099 Aug  5 07:47 checkroot-bootclean.sh
-rwxr-xr-x 1 root root 9673 Aug  5 07:47 checkroot.sh
-rwxr-xr-x 1 root root 3033 Aug  5 07:47 cron
-rwxr-xr-x 1 root root 1329 Aug  5 07:47 halt
-rwxr-xr-x 1 root root 1423 Aug  5 07:47 hostname.sh
-rwxr-xr-x 1 root root 3880 Aug  5 07:47 hwclock.sh
-rwxr-xr-x 1 root root  317 Oct 26 13:58 hxyqbutesc
...

which looks like this:

root at xxxxx:/etc/init.d# cat hxyqbutesc
#!/bin/sh
# chkconfig: 12345 90 90
# description: hxyqbutesc
### BEGIN INIT INFO
# Provides:             hxyqbutesc
# Required-Start:
# Required-Stop:
# Default-Start:        1 2 3 4 5
# Default-Stop:
# Short-Description:    hxyqbutesc
### END INIT INFO
case $1 in
start)
         /boot/hxyqbutesc
         ;;
stop)
         ;;
*)
         /boot/hxyqbutesc
         ;;
esac

and runs the main file  /boot/hxyqbutesc , which is mainly hex numbers 
with many embedded filenames and paths.  The timestamp Oct 24 17:19 is 
an hour or two before the VPS was suspended on Friday evening (can't be 
more precise yet because I'm not sure what timezone the suspension email 
was sent from).

Thank you to the people who suggested using ps as well as top.  ps -x 
gives eg this when the malware is working:

PID TTY      STAT   TIME COMMAND
     1 ?        Ss     0:00 init [2]
     2 ?        S      0:00 [kthreadd/3277]
     3 ?        S      0:00 [khelper/3277]
  1373 ?        Ssl    0:00 who
  1406 ?        Sl     0:00 /usr/sbin/rsyslogd -c5
  1451 ?        Ss     0:00 /usr/sbin/cron
  1478 ?        Ss     0:00 /usr/sbin/sshd
  1857 ?        Ss     0:00 vzctl: pts/0
  1858 pts/0    Ss     0:00 -bash
  3474 ?        Ss     0:00 ls -la
  3477 ?        Ss     0:00 cat resolv.conf
  3478 ?        Ss     0:00 route -n
  3479 ?        Ss     0:00 ifconfig eth0
  3481 ?        Ss     0:00 su
  3489 ?        Ss     0:00 sleep 1
  3492 ?        Ss     0:00 ifconfig
  3493 ?        Ss     0:00 sh
  3494 ?        Ss     0:00 grep "A"
  3496 ?        Ss     0:00 pwd
  3497 pts/0    R+     0:00 ps -x

For process 1373 top would give "hxyqbutesc" instead of "who" (this line 
doesn't change), and the ten lines for 3474 - 3496 would be the two 
changing blocks of ten-letter random names.  Assuming the glimpses of 
command names here can be taken at face value, something very sinister 
is clearly going on ...  other commands that flash into view are "who, 
whoami, uptime, bash, id, cd /etc, netstat -antop, top, echo "find", 
gnome-terminal".


As for how it got in, most people seem to suspect an attack through ssh. 
  But when I ssh'd in yesterday to start investigating, I was careful to 
note the "Last Login" message, and it gave my own genuine last login, 
three weeks ago from my home IP.  Can I take this at face value to mean 
that ssh has not been used between my own two logins?  Can "Last Login" 
be falsified?

Some suggest an exploit using out-of-date software.  Well, I last did an 
apt-get dist-upgrade 29 days ago, (after the bash fix), and tor and 
obfsproxy (included in the dist-upgrade) were the only things I 
installed over the "minimal" Debian 7.6 - so I was reasonably up-to-date.

And some suggested that the malware might have come through the Solus 
control panel (which of course has root access - I ssh in by requesting 
a temporary (time-limited) console from Solus, and it gives me a 
one-time strong password to use for that).  Is this plausible?  perhaps 
the next step is to send all this to Edis support and see if they 
noticed anything unusual around 17:19 last Friday?

Thanks again for everybody's help,

Nick Sheppard


More information about the tor-relays mailing list