RE:NODE

Zabezpečení12 min čtení

Škodlivé pluginy a mody na herních serverech

Čtyři cesty, kterými se pluginy s backdoorem dostávají na servery, jak takový kód vypadá v Minecraftu, Garry's Modu a FiveM, jak ho hledat a co dělat, když ho najdeš.

3 čtenáři

Většina pluginů s backdoorem se na herní server dostane jednou ze čtyř cest: uniklou nebo „nulled“ kopií placeného pluginu, falešným uploadem, který se tváří jako populární plugin, skutečným projektem, jehož autorovi někdo převzal účet, nebo vývojářem či pomocníkem, kterému jsi dal přístup k souborům. Samotný kód bývá jednoduchý - skrytá fráze v chatu, která dá operátorská práva, webový požadavek, jehož odpověď se spustí jako kód, druhý soubor odložený někam, kam se nedíváš - a na skriptovaných platformách jako Garry's Mod a FiveM většinu z toho najdeš obyčejným textovým hledáním. Obrana stojí hlavně na tom, odkud soubory pocházejí a kdo smí na server zapisovat, a jen z menší části na kontrole toho, co sis stáhl.

Tento článek ukazuje pohled útočníka: jak se zlý kód dostane dovnitř a jak vypadá, když už tam je. Běžná rutina bezpečné instalace modů - důvěryhodné zdroje, kontrolní součty, jedna změna naráz, backup před každou instalací - je v článku jak udržet modovaný server čistý a stojí za to číst je spolu.

Čtyři cesty na tvůj server#

CestaJak to vypadá z tvého pohleduCo ji zastaví
Uniklý nebo nulled pluginZdarma kopie něčeho, co jinak stojí penízeNestahovat ho
Falešný uploadPovědomý název, jiný uploaderKontrola autora a stránky projektu
Napadený autorBěžná aktualizace od skutečného projektuOdložit aktualizace, sledovat hlášení
Někdo s přístupem k souborům„Oprava“ nebo „pomocný“ pluginOmezit, kdo smí zapisovat soubory

První cesta je zdaleka nejběžnější. Odstranění kontroly licence z placeného pluginu znamená ho dekompilovat a znovu sestavit a ten, kdo to dělá, má spoustu příležitostí něco přidat. Navíc šíří ukradený software, což o jeho prioritách leccos říká. Weby s uniklými pluginy nemají důvod dát ti čistou kopii a mají hned několik důvodů to neudělat: admin backdoor na stovkách serverů se dá prodat.

Druhá cesta počítá s tím, že plugin hledáš, a ne že za ním jdeš přímo. Plugin s názvem „EssentialsX-Fix“, repozitář na GitHubu s skoro stejným jménem a jediným releasem, video na YouTube s odkazem na „mirror“ v popisku. Soubor vypadá věrohodně, název je podobný a autor je někdo, o kom jsi nikdy neslyšel.

Třetí cesta dostane i opatrné lidi, protože vede kanálem, kterému ti říkali věřit. Když někdo převezme účet známého autora modů, může další „aktualizace“ z oficiální stránky projektu obsahovat cokoli. Stalo se to na největších platformách.

Čtvrtá cesta jsou lidé. Vývojář najatý na vlastní funkci, dobrovolník, který „ví, jak opravit lagy“, bývalý člen týmu s přístupem přes SFTP, který nikdo nezrušil. Backdoor nemusí propašovat, může ho tam prostě dát.

Co payload obvykle dělá#

Backdoory na herních serverech málokdy bývají sofistikované. Nemusí být, protože většina serverů nemá žádný monitoring a většina majitelů nikdy nečte kód, který provozuje.

PayloadProč ho útočník chce
Tajná fráze v chatu nebo příkaz dává adminaKontrola nad serverem, kdykoli se připojí
Loader vzdáleného kóduMůže později měnit chování, aniž by sáhl na tvoje soubory
Sběrač přihlašovacích údajůHesla k RCON, databázi a panelu z konfiguračních souborů
DropperZapisuje další pluginy nebo soubory, přežije odstranění toho prvního
Crypto minerVyužívá tvůj přidělený CPU ve svůj prospěch
Zneužití vůči hráčůmOznámení, spawn itemů, griefing celého serveru na povel
Infekce klientůU her, které posílají obsah hráčům, útočí na jejich počítače

Nejvíc se bát je třeba vzdáleného loaderu, protože znamená, že backdoor, který najdeš dnes, nemusí být tím chováním, které dostaneš zítra. Kód na disku je malý a nudný - stáhni URL, spusť, co přijde - a všechno zajímavé leží na serveru útočníka, kde si to nepřečteš.

Sběrač přihlašovacích údajů je důležitý kvůli tomu, co obsahují konfigurační soubory pluginů. Hesla k databázi u pluginů s MySQL, tokeny webových panelů, URL webhooků, někdy heslo k RCON. Jakmile je někdo získá, odstranění pluginu problém neukončí.

Skutečný případ z dodavatelského řetězce: fractureiser#

V červnu 2023 uživatelé minecraftových modů a pluginů objevili malwarovou kampaň, které se později začalo říkat fractureiser. Útočníci získali přístup k účtům na CurseForge a dev.bukkit.org a nahráli infikované verze existujících projektů. Kdo si tyto soubory stáhl z oficiálních platforem, dostal jar s malým vloženým loaderem. Když se mod nebo plugin spustil, loader z internetu stáhl další fáze; ty pozdější kradly přihlašovací údaje - cookies z prohlížeče, tokeny Discordu, relace účtů Minecraft a Microsoft - a pokoušely se infikovat další soubory .jar na stejném počítači.

Z toho vyplynulo několik poučení platných pro jakoukoli hru:

  • „Oficiální zdroj“ riziko snižuje, ale neruší. Soubory pocházely přesně z míst, kam tě návody posílají.
  • Riziková je doba těsně po nahrání. Infikované verze byly dostupné omezenou dobu, než si jich někdo všiml a odstranil je. Servery, které s aktualizacemi modů počkaly pár dní, nebyly nikdy vystaveny.
  • Jar může infikovat další jary. Jakmile se spustí cokoli škodlivého, je podezřelý každý spustitelný soubor, do kterého uživatel serveru smí zapisovat. Proto je ruční čištění slabá strategie a obnova ze známého dobrého backupu strategie dobrá.
  • Reakce komunity byla rychlá. Detekční nástroje a rozbory se objevily během dní. Sledovat oznámení platformy má větší cenu než jakýkoli scanner, který pustíš sám.

Praktická obrana pro server je levná: neaktualizuj mody v den vydání, pokud aktualizace neopravuje něco, co potřebuješ, uschovej si předchozí funkční soubor a před každou aktualizací udělej backup.

Garry's Mod a FiveM: kód, který si opravdu přečteš#

Skriptované platformy mají jednu velkou výhodu: většina serverového kódu je obyčejné Lua nebo JavaScript, takže se v něm dá hledat. Backdoory jsou tu časté ze stejného důvodu - uniklé addony a resources se hojně šíří - a řídí se rozpoznatelnými vzory.

V Garry's Modu klasický backdoor stáhne text z URL a spustí ho přes RunString nebo CompileString, případně přidá skrytou zprávu net, která provede příkaz v konzoli pro každého, kdo ji pošle. Hledání funkcí, které spouštějí dynamický kód, v adresáři addonů najde většinu z nich:

bash
$ cd garrysmod/addons$ grep -rn --include='*.lua' -E 'RunString|CompileString|CompileFile' .$ grep -rn --include='*.lua' -E 'http\.Fetch|http\.Post|HTTP\(' .$ grep -rn --include='*.lua' -E 'game\.ConsoleCommand|RunConsoleCommand' .$ grep -rln --include='*.lua' -E '\\x[0-9a-fA-F]{2}.*\\x[0-9a-fA-F]{2}' .

Nálezy nejsou důkaz viny - spousta legitimních addonů stahuje aktualizace nebo spouští příkazy konzole - ale každý by měl dávat smysl vzhledem k tomu, co addon tvrdí, že dělá. Addon na spawnování propů, který stáhne URL a výsledek předá do RunString, nemá nevinné vysvětlení. Poslední hledání najde dlouhé řetězce znaků zapsaných hexadecimálními escape sekvencemi, což je běžný způsob, jak před nezkušeným čtenářem skrýt URL nebo název funkce. O tom, kde addony serveru skutečně leží, je článek Garry's Mod workshop a FastDL.

Ve FiveM je ekvivalentním vzorem PerformHttpRequest, jehož odpověď se předá do load, často zabalené jako assert(load(...))() a ukryté v jinak obyčejném resource. V roce 2023 se hodně probíral rodina takových backdoorů zvaná Cipher, která se šířila hlavně přes uniklé resources a dávala svým operátorům vzdálenou kontrolu nad infikovanými servery.

bash
$ cd resources$ grep -rn --include='*.lua' -E 'PerformHttpRequest' .$ grep -rn --include='*.lua' -E '(^|[^a-zA-Z_])load\(' .$ grep -rn --include='*.js' -E 'eval\(|new Function\(|https?\.get\(' .$ grep -rln -E '\\x[0-9a-fA-F]{2}.*\\x[0-9a-fA-F]{2}' .

Podívej se i na každý fxmanifest.lua. Resource, který uvádí serverový skript, jejž nepoznáváš, nebo soubor s náhodným názvem zahrabaný v podsložce, si zaslouží přečíst. Escrow (šifrované) resources z oficiálního systému assetů přečíst nejdou, což je jeden z kompromisů jejich nákupu - ale pocházejí od známého prodejce přes Cfx.re, a to je původ, který si můžeš ověřit. Tento systém rozebírá FiveM escrow a licencování assetů.

Minecraft a hry na Unity: zkompilovaný kód#

Pluginy pro Bukkit, mody pro Forge a Fabric i pluginy pro BepInEx jsou zkompilované. Zdroják nepročteš grepem a u placených pluginů je obfuskace normální, takže úplná kontrola většině majitelů reálná není. Zbývá užší sada kroků:

  • Rozbal a hledej řetězce. Jar je soubor zip; rozbalené soubory tříd stále obsahují čitelné řetězce jako URL a názvy tříd. Příkazy najdeš v článku o bezpečnosti modů.
  • Hledej metody, které backdoor potřebuje. V Javě mají URLClassLoader, defineClass, Runtime.getRuntime().exec a ProcessBuilder legitimní využití, ale třeba v pluginu na formátování chatu jsou vzácné. Plugin, který poslouchá události chatu a volá setOp, je v každém dekompilátoru červená vlajka.
  • Pusť komunitní scanner. Pro Minecraft existují open-source scannery, které ve složkách pluginů hledají podpisy známého malwaru; MCAntiMalware je jeden z hojně používaných příkladů. Čistý výsledek chápej jako „není to známý vzorek“, ne jako „je to bezpečné“.
  • Sleduj chování. Důležité jsou odchozí spojení procesu serveru na adresy, které neznáš, operátoři, které jsi nepřidal, a vytížení CPU, když na serveru nikdo není.

U her na Unity s BepInEx, například Valheimu, platí totéž pro soubory .dll v BepInEx/plugins: získávej je z Thunderstore, Nexus Mods nebo z vlastního repozitáře autora a na stránce projektu si ověř autora. Uspořádání popisuje Valheim mody s BepInEx.

Ověření, že zdroj je tím, za co se vydává#

Původ je obrana, která funguje na všech platformách. Pár kontrol zachytí většinu falešných souborů za méně než minutu:

  1. Naviguj, nehledej. Jdi na platformu s pluginy a stránku projektu otevři odtud, nebo použij odkaz z autorova vlastního webu či profilu na GitHubu.
  2. Porovnej uploadera s autorem. Na SpigotMC, Hangaru, Modrinthu, CurseForge, Thunderstore a ve Workshopu je uploader na stránce vidět. Populární plugin znovu nahraný jiným účtem je podvrh, dokud se neprokáže opak.
  3. Podívej se na historii. Skutečný projekt má verze několik měsíců či let zpátky, issues a changelog. Repozitář vytvořený minulý týden s jedním releasem a bez zdrojového kódu není místo, kde ten plugin žije.
  4. Porovnej release assety se zdrojem. Na GitHubu se binárka releasu nahrává odděleně od kódu. Účet, který zveřejní čistý zdroják a upravený jar, je možný; stahování z běžného kanálu projektu je bezpečnější než z forku.
  5. Přečti si komentáře u posledních aktualizací. Hlášení o podivném chování se obvykle objeví nejdřív tam.
  6. Na aktualizace, které nepotřebuješ, pár dní počkej. Poučení z fractureiseru v jedné větě.

Zapisuj si, odkud každý soubor pochází. Textový soubor v kořeni serveru s každým modem, verzí, zdrojovým URL a datem stojí minutu na instalaci a každé pozdější vyšetřování zrychlí.

Najatí vývojáři, pomocníci a přístup k souborům#

Dát někomu právo zápisu do souborů serveru znamená dát mu možnost spouštět na serveru kód. Je to v pořádku, když je to záměr; většina backdoorů od lidí vznikne proto, že se to nepromyslelo.

  • Přístup k souborům dej co nejméně lidem. V panelu moderátor potřebuje přístup ke konzoli, ne k souborům. Oprávnění subuserů umožňují dát jen konzoli, jen soubory nebo obojí, aniž bys sdílel svůj účet - viz subuseři a nejmenší oprávnění.
  • Pro dodavatele používej časově omezený přístup. Přístup, který vyprší sám, je přístup, na jehož odebrání nemůžeš zapomenout.
  • Žádej zdroják a porovnávej, co dodali. U skriptovaných platforem porovnej složku před jejich prací a po ní. U zkompilovaných pluginů žádej v rámci zakázky zdrojový kód a návod k sestavení.
  • Po skončení práce si přečti log aktivity serveru a porovnej časy změn souborů s daty, kdy pracovali.
  • Poté změň hesla. Databáze, RCON a všechny webové tokeny, které vývojář mohl číst v konfiguračních souborech.

Nic z toho neznamená, že najatí vývojáři jsou nedůvěryhodní. Znamená to, že důvěra má být konkrétní a dočasná a že backup udělaný před začátkem jejich práce umožní její vrácení.

Co dělat, když nějaký najdeš#

  1. Zastav server a udělej backup jeho aktuálního stavu jako důkaz, potom ho už tak, jak je, nespouštěj.
  2. Zjisti zdroj. Který soubor, které stažení, jaké datum. Pomůžou ti poznámky k instalacím.
  3. Změň každé tajemství, které server mohl přečíst: RCON, admin hesla, hesla k databázi, URL webhooků, tokeny v konfiguracích. Pokud jsi některé použil i jinde, změň je i tam.
  4. Obnov ze zálohy vytvořené před příchodem toho souboru, pak mody přidávej znovu z oficiálních zdrojů, jeden po druhém.
  5. Zkontroluj seznamy adminů, plánované úlohy a nastavení spouštění, jestli tam není něco, co jsi nenastavil.
  6. Řekni to hráčům, pokud hra posílá obsah klientům, aby si mohli zkontrolovat vlastní počítače.

Celý postup pro potvrzené napadení je v článku co dělat, když je tvůj server nabourán. Podstatné je tohle: vyčistit smazáním jednoho souboru nestačí, když mohl kód zapsat další.

Na RE:NODE se mody a pluginy nahrávají přes správce souborů nebo SFTP, případně přicházejí přes podporu workshopu v samotné hře, a při cestě dovnitř se nic nekontroluje - co na serveru běží, je tvoje rozhodnutí. Panel ti dává stranu obnovy: sloty pro backupy v každém tarifu, uložené mimo stroj, který chrání, obnovitelné jedním tlačítkem a zamykatelné, aby se známý dobrý backup během vyšetřování nepřepsal novějšími.

FAQ#

Jsou pluginy ze SpigotMC, Modrinthu nebo Workshopu vždy bezpečné?

Jsou mnohem bezpečnější než cokoli jiného, ale záruka to není. Platformy dělají určitou kontrolu a po nahlášení malware odstraňují, ale napadené účty autorů i nové škodlivé uploady se už staly. Dávej přednost zavedeným projektům a s aktualizacemi pár dní počkej.

Najde backdoor v pluginu antivirový sken?

Málokdy. Backdoory v Javě, .NET a Lue nevypadají jako malware pro Windows, takže univerzální antivirus je často hlásí jako čisté. Komunitní scannery pro konkrétní platformy si u známých vzorků vedou lépe a původ souboru ještě lépe.

Je bezpečné použít uniklý plugin, když zkontroluji kód?

Ne. Placené pluginy bývají obfuskované, takže je nelze pořádně zkontrolovat, a uniklé kopie jsou přesně místo, kde se backdoory koncentrují. Je to navíc cizí placená práce.

Může serverový mod infikovat moje hráče?

U her, které posílají klientům obsah nebo skripty, ano. Garry's Mod a FiveM posílají skripty na stranu klienta a minecraftové modpacky instalují kód na počítač každého hráče. Škodlivý mod tam ohrožuje tvou komunitu, ne jen server.

Jak poznám, že plugin „volá domů“?

Prohledej jeho rozbalené soubory kvůli URL a zkontroluj, jestli každé patří projektu, a sleduj odchozí spojení procesu serveru na neznámé adresy. Mnoho legitimních pluginů kontroluje aktualizace, takže posuzuj cíl, ne samotný fakt spojení.


Komentáře

Zcela anonymně: žádný účet, žádný e-mail, žádné cookie. Ukládáme jen jméno, které napíšeš, text a čas - nic dalšího. Počet odkazů je omezený a značkování se nevykresluje.

0/2000