News Manipulierte Hosts: NAS-Systeme von QNAP mit unbekannter Malware infiziert

Frank

Chefredakteur
Teammitglied
Dabei seit
März 2001
Beiträge
5.603
Zahlreiche Nutzer von NAS-Systemen von QNAP haben sich in den letzten Wochen mit Problemen bei Softwareupdates auf ihren NAS zu Wort gemeldet. Diese ließen sich ebensowenig wie die Installation von Anti-Malware-Apps durchführen. Schuld ist eine Malware, die die Hosts-Datei editiert und mit rund 700 Einträgen umleitet.

Zur News: Manipulierte Hosts: NAS-Systeme von QNAP mit unbekannter Malware infiziert
 

neo243

Lt. Junior Grade
Dabei seit
Apr. 2012
Beiträge
384
Und wie infizieren sich die Systeme? Wir haben hier eins stehen :<.
 

kamanu

Lt. Junior Grade
Dabei seit
März 2012
Beiträge
468
@WeisheitsTroll Wenn ich das richtig verstanden habe, dann leitet es vor allem die Update-URLs für Virenscanner und das Gesamtsystem um. Damit eben keine Updates gefahren werden können, die dann die Malware erkennen können.
 

neo243

Lt. Junior Grade
Dabei seit
Apr. 2012
Beiträge
384
ty
 

Fliz

Lt. Commander
Dabei seit
Juli 2015
Beiträge
1.549
Das wirft aber kein gutes Licht auf QNAP...
 

Andreas_

Lt. Commander
Dabei seit
Jan. 2017
Beiträge
1.169
Wenn man den verschiedenen Postings im QNAP-Forum glauben mag, dann gab es wohl eine verwundbare Version der Music-Station, die vor 4 Monaten seitens QNAP behoben wurde. Wer sein NAS damit offen ins Internet gestellt hat, konnte anscheinend gehackt werden ...
 

Helge01

Lt. Commander
Dabei seit
Nov. 2008
Beiträge
1.280
Wer sein NAS ins www hängt, hat es nicht anders verdient. Mögen eure Dateien in der Kryptohölle landen! Trotzdem starkes Stück von QNAP :kotz:
Meine Rede, ein NAS gehört nicht in das Internet. Es gibt auch hier im Forum immer wieder anfragen von Usern, die Null Plan haben, aber die Kiste soll unbedingt aus dem Internet erreichbar sein.

Kannst ja gleich sagen, wer sein PC ins WWW hängt... solches Denken ist einfach falsch. Eine Sperre ist nie die Lösung.
Es ist ein riesiger Unterschied, ob ich einen Service anbiete, oder ob ich mit dem PC eine Internetverbindung habe.

Naja wenn die Kiste nicht aus dem Internet erreichbar ist, kann sie selbst ja trotzdem ins Internet.
Das ist aber kein Problem. Wenn das NAS eine Internetverbindung hat, um z.B. Updates zu laden, dann wird die Kiste nie gekapert. Das passiert nur wenn man einen Dienst vom NAS aus dem Internet aus erreichbar macht.
 
Zuletzt bearbeitet:

Fard Dwalling

Lieutenant
Dabei seit
Juli 2007
Beiträge
865
Naja wenn die Kiste nicht aus dem Internet erreichbar ist, kann sie selbst ja trotzdem ins Internet. Und darum geht es ja. Es reicht ja wenn die QNAP zu einem botnetz zusammen gefasst werden können.

Und das man einzelnen Geräten den Zugriff auf das Internet unterbindet, ist zumindest bei den meisten Usern eben auch nicht üblich.
 

Wilhelm14

Fleet Admiral
Dabei seit
Juli 2008
Beiträge
16.485
Details wären schon interessant. Wie findet man heraus, ob man betroffen ist? Wenn in /etc/hosts mit einem Editor beäugt 700 Domain-Umleitungen auf 0.0.0.0 sind?
Einfach ein *.sh aus einem Forum auf Gutdünken auszuführen ist auch nicht so meins.
 

Hansdampf12345

Captain
Dabei seit
Nov. 2005
Beiträge
3.622

Reese

Ensign
Dabei seit
Mai 2006
Beiträge
138

DeusoftheWired

Admiral
Dabei seit
Juni 2009
Beiträge
8.195
Wen’s interessiert, hier der Inhalt des Entfernungs-Shellskripts:

Bash:
#!/bin/sh

######################
# Derek Be Gone v1.1 #
# Author: qnapd      #
######################

set_mutable() {
    if [ ! -e "$1" ]; then
        return 0
    fi
    if [ -e /etc/IS_64BITS ]; then
        # 64bit set mutable
        SET_M_64="$1"
        echo " [*] Setting mutable 64bit on $SET_M_64"
        python -c "import os,fcntl,sys,struct;fd = os.open('${SET_M_64}', os.O_RDONLY); rec = struct.pack('L', 0); x = fcntl.ioctl(fd, 0x80086601, rec); flags = struct.unpack('L',x)[0]; was_immutable = flags & 0x00000010; flags = flags & ~0x00000010; f = struct.pack('i', flags); fcntl.ioctl(fd, 0x40086602, f); os.close(fd)"
    else
        # 32bit set mutable
        SET_M_32="$1"
        echo " [*] Setting mutable 32bit on $SET_M_32"
        python -c "import os,fcntl,sys,struct;fd = os.open('${SET_M_32}', os.O_RDONLY); rec = struct.pack('L', 0); x = fcntl.ioctl(fd, 0x80046601, rec); flags = struct.unpack('L',x)[0]; was_immutable = flags & 0x00000010; flags = flags & ~0x00000010; f = struct.pack('i', flags); fcntl.ioctl(fd, 0x40046602, f); os.close(fd)"
    fi
}

remove_bad_thing() {
    badpath="$1"
    if [ -e "$badpath" ]; then
        echo " [*] Removing $badpath"
        rm -rf "$badpath"
        if [ $? -eq 0 ]; then
            echo "  [+] Success!"
        else
            echo "  [-] Failed"
        fi
    fi
}

# clear fake qpkg
bdir=
test -f "${confdir}/smb.conf" && for i in homes Public Download Multimedia Web Recordings; do bdir=`getcfg "$i" path -f "${confdir}/smb.conf"` && test ! -z "$bdir" && bdir=`dirname "$bdir"` && test -d "$bdir" && testwriteable=$(mktemp "${bdir}/.tmp.XXXXXX") && rm "${testwriteable}" && break; bdir=''; done
test -z "${bdir}" || test ! -d "${bdir}" && { command -v readlink >/dev/null 2>&1 || ln -sf /bin/busybox /usr/bin/readlink; for i in Public Download Multimedia Web Recordings homes; do bdir=`readlink "/share/${i}" 2>/dev/null` && test ! -z "$bdir" && bdir=`dirname "$bdir"` && bdir=/share/${bdir##*/} && test -d "$bdir" && break; done;
test -z "${bdir}" || test ! -d "${bdir}"; } && { bdir=`getcfg SHARE_DEF defVolMP -f "${confdir}/def_share.info"`
test -z "${bdir}" || test ! -d "${bdir}"; } && { bdir=`mount | sed -n "s/.*\(\/share\/[^ /]\+\) .*/\1/gp" | head -n 1`
test -z "${bdir}" || test ! -d "${bdir}"; } && { for i in CACHEDEV3_DATA CACHEDEV2_DATA CACHEDEV1_DATA MD0_DATA; do test -d "/share/${i}" && bdir="/share/${i}" && break; done;
test -z "${bdir}" || test ! -d "${bdir}" && bdir=/mnt/HDA_ROOT; }

echo "[o] System path: ${bdir}"
echo "[o] Removing fake qpkg"
remove_bad_thing "${bdir}/.qpkg/.liveupdate/"
remove_bad_thing "${bdir}/.qpkg/.config/"
echo "---"

# clear dom
mdir=/tmp/config
__BOOT_DEV=
__model=`getcfg System "Internal Model"`
CONFIG_DEV_NODE=`getcfg "CONFIG STORAGE" DEVICE_NODE -f /etc/platform.conf`
CONFIG_DEV_PART=`getcfg "CONFIG STORAGE" FS_ACTIVE_PARTITION -f /etc/platform.conf`
CONFIG_DEV_FS=`getcfg "CONFIG STORAGE" FS_TYPE -f /etc/platform.conf`
__BOOT_CONF=`test -f /etc/default_config/BOOT.conf && cat /etc/default_config/BOOT.conf 2>/dev/null || cat "${confdir}/BOOT.conf"` || { test "$arch_o" = arm && __BOOT_CONF=TS-NASARM; }
command -v hal_app > /dev/null 2>&1 && { __BOOT_DEV=$(hal_app --get_boot_pd port_id=0); }
test "${__BOOT_CONF}" = TS-NASARM || test "$arch_o" = arm && { test -f /etc/IS_TAS && __BOOT_DEV="${__BOOT_DEV:-/dev/mtdblock}7" || __BOOT_DEV="${__BOOT_DEV:-/dev/mtdblock}5"; } || __BOOT_DEV="${__BOOT_DEV:-/dev/sdx}6"
test "x${CONFIG_DEV_NODE}" != "x" && { ubiattach -m "${CONFIG_DEV_PART}" -d 2; mount -t ubifs ubi2:config "${mdir}" > /dev/null 2>&1 || { test -f /etc/IS_TAS && mount -t ext4 /dev/mmcblk0p7 "${mdir}"; } } || mount ${__BOOT_DEV} -t ext2 ${mdir} || { test "${__model}" = "TS-201" && mount -t ext2 /dev/mtdblock4 ${mdir}; } || { ubiattach -m "${CONFIG_DEV_PART}" -d 2; mount -t ubifs ubi2:config "${mdir}"; mount -t ext4 /dev/mmcblk0p7 "${mdir}"; } || { test "${__model}" = "TS-269L" && mount -t ext2 /dev/sdc6 ${mdir}; } || { test "${__model}" = "TS-869" && mount -t ext2 /dev/sdi6 ${mdir}; } || { test "$arch_o" = arm || ${__BOOT_CONF} = "TS-NASARM" && { for i in 5 7 4 6 3 8; do mount -t ext2 "/dev/mtdblock${i}" ${mdir} && break; done; }; } || { test "$arch_o" = x86 && for n in /dev/sdc /dev/sdx /dev/sdi $__BOOT_DEV; do for i in 6 $CONFIG_DEV_PART; do mount -t ext2 ${n}${i} ${mdir} && break 2; done; done; } || { mount -t ext2 $(/sbin/hal_app --get_boot_pd port_id=0)6 ${mdir}; }

echo "[o] Cleaning DOM"
remove_bad_thing "$mdir/autorun.sh"
for i in $mdir/K0*.sh; do
    remove_bad_thing "$i"
done
umount "$mdir"
echo "---"

# reinstall MR
echo "[o] Remove old MR"
mrpath="${bdir}/.qpkg/MalwareRemover/"
set_mutable "$mrpath"
set_mutable "$mrpath/modules/10_derek_3.pyc"
set_mutable "$mrpath/modules/12_derek_3.pyc"
remove_bad_thing "$mrpath"
rmcfg MalwareRemover -f /etc/config/qpkg.conf
echo "---"

echo "[o] Install new MR"
mrpkg=MalwareRemover_3.4.0_20190121_173849.qpkg
wget -nv "https://download.qnap.com/Storage/tsd/utility/$mrpkg"
sh "$mrpkg" > /dev/null 2>&1
getcfg MalwareRemover Enable -f /etc/config/qpkg.conf > /dev/null
if [ $? -eq 0 ]; then
    echo " [+] Success!"
else
    echo " [-] Failed"
fi
rm -f "$mrpkg"
echo "---"
echo "Finished!"
rm -f "$0"
 

Envoy

Lt. Commander
Dabei seit
Apr. 2008
Beiträge
1.543
Mich würde interessieren wie so eine Malware installiert werden kann auf dem NAS? Dazu müssten doch Admin Accounts gehackt worden sein? Oder nicht?
 
Top