Skip to content

Latest commit

 

History

History
672 lines (422 loc) · 41.7 KB

File metadata and controls

672 lines (422 loc) · 41.7 KB
aliases
AUR malware útoky analýza - paru a yay
moc [[_GNU+Linux]]
tags
title AUR malware útoky analýza - paru a yay
created 2025-08-05 16:46

AUR malware útoky analýza - paru a yay

Návrh issue (netechnické)

Title: RFC: Základní ochranné prvky proti AUR malware (uživatelské varování a bezpečnější build)

Context
V návaznosti na nedávné incidenty v AUR navrhujeme prozkoumat úpravy, které sníží riziko instalace škodlivých balíčků bez ruční kontroly. Cílem je posílit „bezpečné defaulty“ pro běžné uživatele, aniž by byl omezován pokročilý/CI provoz.

Problem statement
Uživatelé často provádějí rychlé instalace z AUR s minimální interakcí. Pokud balíček obsahuje neobvyklé nebo překvapivé kroky při buildu/instalaci, nemusí si jich všimnout. Chybí lehká, nenucená vrstva, která by je včas informovala a vedla k vědomému rozhodnutí.

Goals

  • Upozornit uživatele na potenciálně rizikové aspekty před sestavením/instalací.

  • Umožnit přísnější režim pro ty, kdo ho chtějí (volitelně).

  • Zachovat stávající workflow a přepínače pro zkušené uživatele a CI.

Non-goals

  • Zavádět těžkou bezpečnostní politiku nebo plošné blokace.

  • Mít konečné slovo nad „správností“ PKGBUILD; rozhodnutí má zůstat na uživateli.

High-level směry k úvaze (nepředepisující)

  • Upozornění před instalací: pokud helper zjistí, že balíček během buildu/instalace dělá něco neobvyklého (např. síťové akce mimo fázi stahování zdrojů, hooky měnící spouštění aplikace apod.), zobrazit stručné vysvětlení a nabídnout otevření diffu/PKGBUILD k ručnímu přezkoumání.

  • Režim „více potvrzení“ (volitelný): možnost zapnout přísnější tok, který u zjevně citlivých situací vyžádá explicitní potvrzení od uživatele.

  • Bezpečnější build prostředí (volitelné): poskytnout uživatelům přívětivou cestu, jak build provést v „bezpečnějším“ kontextu (např. existující nástroje systému, chroot apod.), pokud je na jejich stroji k dispozici.

  • Integrace s ověřováním zdrojů: podpořit/propagovat využití stávajících kontrol (checksumy/podpisy) s tím, že finální volba je na uživateli.

(Záměrně se vyhýbáme konkrétním implementačním detailům; jde o návrh směru a UX výsledku.)

User stories

  • „Jako běžný uživatel chci být předem upozorněn, že balíček může dělat něco neobvyklého, abych se mohl vědomě rozhodnout, zda pokračovat.“

  • „Jako pokročilý uživatel chci přísnější režim, který mi dá jasnou stopku u vybraných situací, ale současně chci mít možnost to vědomě obejít (např. v CI).“

Success criteria (měřitelné na úrovni UX)

  • Uživatel dostane srozumitelnou informaci před instalací, když nastanou rizikové vzorce.

  • Zkušený uživatel může stávající chování zachovat (opt-in/opt-out).

  • Minimální počet „falešných poplachů“: text upozornění je stručný a akční (odkaz na diff, otevření PKGBUILD).

Open questions

  • Jaké situace jsou natolik „citlivé“, aby si zasloužily výchozí upozornění?

  • Jak nastavit výchozí přísnost (např. pouze varování vs. možnost stricter režimu)?

  • Jak nejlépe komunikovat uživateli důvody upozornění bez zahlcení detailní technikálií?

Backward compatibility & rollout

  • Navrhujeme postupné zavedení: nejprve čistě informativní varování; přísnější režimy pouze volitelně.

  • Dokumentace s příklady typických scénářů, aby uživatel rozuměl, co a proč vidí.


Technical issues

1) Issue pro yay

Summary
Navrhuji přidat volitelnou ochranu „AUR Malware Guard“, která před instalací z AUR provede (a) statické ověření PKGBUILD/.install a (b) spustí build v izolovaném režimu. Cílem je zachytit běžné TTPs z nedávných incidentů (síť v build()/package(), pipe-to-shell, „launcher“ hooky) a předejít „one-click“ instalacím bez review.

Motivation
AUR je komunitní a bez předběžného auditu; AUR helpeři jsou fakticky UX vrstva, která může přidat bezpečnostní brzdy bez zásahu do AUR. Uživatelé často instalují s minimální interakcí – chceme přidat výchozí varování a jasnou červenou stopku pro zjevně rizikové vzory.

Scope (MVP – varování, žádné lámání workflow)

  1. Statický skener PKGBUILD + přiložených skriptů:

    • patterny:

      • curl|wget ... | (sh|bash|zsh) / bash -c "$(curl …)"

      • python -c "$(curl …)" / node -e "…require('https')…"

      • eval "$(curl …)", base64 -d | sh, socat|nc apod.

      • síťové volání v build()/package() (mimo source fázi),

      • přidávání autostartu/systemd jednotek, úpravy Exec= v .desktop souborech.

    • Skóre rizika (Low/Med/High) + stručný report s červeně zvýrazněnými řádky.

  2. Vynucené review při High-risk

    • zakázat --noconfirm při High; vyžadovat type-to-confirm („napiš název balíčku“) a otevřít diff/editor.
  3. Integrace ověřování zdrojů

    • automaticky zapnout makepkg --verifysource (respektovat uživatelské přepínače).
  4. SafeBuild (volitelně)

    • „měkká“ izolace: build v clean $BUILDDIR pod neprivilegovaným uživatelem + blokace egress sítě v build()/package() (povolit síť pouze pro -o/--downloadonly).

    • „tvrdá“ izolace (volitelná): podpora devtools/makechrootpkg pokud nainstalováno; fallback na měkkou variantu.

UX / CLI

  • Nový přepínač: --risk (vypíše skóre a report), --strict (High → stopka), --i-understand-the-risks (přeskočí stopku pro CI).

  • Výchozí chování: zapnuto varování (bez stopky), --strict lze zapnout v configu.

Konfigurace (~/.config/yay/config.json nebo odpovídající)

{
  "security": {
    "RiskScanner": "on",
    "RiskThreshold": "high",
    "BlockOn": ["NetworkInBuild", "PipeToShell", "LauncherHook"],
    "AllowDomains": ["github.com", "gitlab.com", "archive.org"],
    "DenyPatterns": [],
    "SafeBuild": "soft",       // off | soft | chroot
    "NoConfirmOnHigh": true,
    "PassMflags": ["--verifysource"]
  }
}

Implementace (návrh)

  • Go balíček internal/securityscan s pravidly (regex + kontextové validátory).

  • Hooky do existujících code paths před sestavením (Prepare()/Install()): načíst PKGBUILD, *.install, *.service, .desktop, provést scan, sestavit report.

  • Egress-block: unshare -n nebo bwrap --unshare-net pro fáze build/package (pokud dostupné).

  • Telemetrie opt-in: anonymní upload hashů detekovaných řádků → sdílený denylist.

Kompatibilita / false positives

  • Balíčky, které legitimně sahají do sítě při buildu (což AUR směrnice nedoporučují), budou varovány, ale ne blokovány (pokud není --strict).

  • Maintainer může přidat explicitní allow-comment do PKGBUILD, např. # yay:allow NetworkInBuild, který se vypíše v reportu.

Alternativy

  • Spoléhat pouze na diff review uživatele (neřeší „--noconfirm“ a sociální inženýrství).

  • Externí linter (mimo yay) – horší UX, bez záruky, že jej uživatel spustí.

Open questions

  • Formát sdíleného denylistu pravidel/signatur (JSON? URL?)

  • Výchozí úroveň přísnosti v první verzi (navrhuji warn-only).

Reference

  • Repo: Jguer/yay — AUR Helper in Go. (GitHub)

2) Issue pro paru

Summary
Navrhuji dvě nové bezpečnostní funkce: (1) Risk Scanner se skóre a povinným review při High-risk a (2) SafeBuild integrující existující LocalRepo + Chroot a doplňující blokaci sítě ve fázích build()/package().

Motivation
Paru už má skvělý základ (LocalRepo/Chroot). Přidáním lehkého statického skeneru a „červené stopky“ pro rizikové vzory posuneme baseline bezpečnost pro širší publikum bez zásadních změn UX.

Scope (MVP)

  1. Risk Scanner (stejná pravidla jako u yay, sdílený seznam – možno udržovat ve vlastním crate).

  2. Povinné review při High-risk (blokuje --noconfirm, vyžaduje potvrzení psaním názvu balíčku).

  3. makepkg --verifysource defaultně přeposílat přes MFlags (konfigurovatelné).

  4. SafeBuild

    • preferovat existující Chroot + LocalRepo (pokud nastaveno),

    • pokud není k dispozici, „soft“ izolace (omezení práv + blokace egress sítě během build/package).

  5. Post-install guard (rychlý check): prohledat nainstalované .desktop/launcher skripty změněné balíčkem a varovat, pokud obsahují volání vzdáleného kódu (neblokuje instalaci, jen upozorní).

UX / CLI

  • paru --risk → vytiskne skóre a report; --strict → High-risk = stopka; --i-know-what-im-doing pro CI.

  • Na první spuštění wizard: „Chcete zapnout SafeBuild (Chroot) a Risk Scanner?“.

Konfigurace (paru.conf) – nový blok [security]

[security]
RiskScanner = on
RiskThreshold = high
BlockOn = NetworkInBuild PipeToShell LauncherHook
NoConfirmOnHigh = true
SafeBuild = chroot     # off | soft | chroot
AllowDomains = github.com gitlab.com archive.org
DenyPatterns =
MFlags = --verifysource

Implementace (návrh)

  • Rust crate paru_security s pravidly a skórováním; zvýraznění podezřelých řádků v TTY.

  • Napojit před fází buildu po stažení source (tak aby checksumy už seděly).

  • Síťová izolace pro ne-chroot režim: unshare -n/bwrap --unshare-net pokud k dispozici; fallback = jen varování.

  • Volitelné opt-in sdílení anonymizovaných signatur (stejný protokol jako yay).

Kompatibilita / false positives

  • Stejná politika jako u yay: výchozí warn-only, --strict blokuje.

Alternativy

  • Nechat bezpečnost čistě na uživateli; nezachytí „rychlé“ instalace a sociální inženýrství.

Open questions

  • Default zapnutí Chroot při prvním spuštění? (wizard by to mohl nabídnout automaticky).

  • Přidat pravidla i pro heuristiky AUR RPC (NumVotes, čerstvě založené balíčky) a zvýšit skóre při splnění?

Reference


Sdílený seznam pravidel (nástřel)

  • NetworkInBuild: výskyty curl|wget|ftp|nc|socat|git clone uvnitř build()/package().

  • PipeToShell: | sh|bash|zsh, bash -c "$(curl …)", eval "$(curl …)", base64 -d | sh.

  • PythonNodeExecUrl: python -c ".*(urllib|requests).*" + URL, node -e ".*https?.*" → spouštění staženého kódu.

  • LauncherHook: změny v Exec= řádcích .desktop nebo wrapper skriptech, které spouštějí síť/interpret.

  • UnpinnedSource (varování): netagované tarbally z branch (/archive/refs/heads/), raw.githubusercontent.com bez checksumu; zvyšuje skóre, ale neblokuje.


Release plán (bezpečné zavedení)

  • v1 (MVP): skener + report + warn-only, --strict opt-in; config klíče.

  • v2: SafeBuild „soft“, type-to-confirm, zákaz --noconfirm při High.

  • v3: integrace chroot (yay) / výchozí chroot wizard (paru), volitelná blokace sítě.

Rozbor

Níže je stručný přehled aktuálních AUR útoků (červenec–srpen 2025), jak byly provedeny, a praktická obrana pro yay i paru.


Co se děje teď

  • 16.–18. července 2025: do AUR byly nahrány tři falešné balíčky – librewolf-fix-bin, firefox-patch-bin a zen-browser-patched-bin – které při instalaci stáhly a spustily CHAOS RAT. Arch tým incident potvrdil a 18. 7. balíčky smazal. (lists.archlinux.org)
    (Souhrny a varování publikovala i média.) (The Register, BleepingComputer)

  • 31. července 2025: objevila se další vlna – balíček vydávající se za google-chrome-stable spouštěl při startu prohlížeče python -c "$(curl …)", který stahoval a spouštěl RAT pokaždé, když uživatel spustil Chrome. Balíček nahrál nově vytvořený účet a byl po pár hodinách odstraněn. (Linuxiac)

Arch oficiálně připomíná, že AUR je komunitní a PKGBUILD skripty nejsou předem auditované – instalace je na vlastní riziko. (wiki.archlinux.org)


Jak útoky fungovaly (TTPs)

  1. Typosquatting / „fix/patch“ názvy: balíčky působily legitimně (např. -fix-bin, -patched-bin). (The Register)

  2. Zneužití PKGBUILD / pomocných souborů:

    • během build/instalace došlo ke stažení kódu z útočníkových repozitářů (GitHub) a jeho spuštění (CHAOS RAT). (lists.archlinux.org)

    • v druhé vlně byl do spouštěcího skriptu prohlížeče vložen řádek python -c "$(curl …)", takže se malware spouštěl při každém startu aplikace. (Linuxiac)


Obrana – konkrétně pro yay a paru

1) Vynutit ruční kontrolu PKGBUILDů a diffů

  • paru: diff zobrazuje pro AUR výchozím chováním; neskryvejte review (SkipReview nenechávejte zapnuté). (Linux Command Library)

  • yay: zapněte perma-review a diff menu:

    yay --save --editmenu --diffmenu

    (Možnosti --editmenu, --diffmenu a jejich uložení jsou dokumentované v manuálu.) (Linux Command Library, Linux Command Library)

Na co se dívat: síťové příkazy v prepare()/build()/package() a .install/start skriptech (curl|wget do shellu, python -c s curl, přidávání služeb, změny spouštěcích skriptů). Tento přesně použitý vzorec byl u google-chrome-stable. (Linuxiac)


2) Ověřování zdrojů a podpisů přes makepkg

Do helperů předejte makepkg flagy:

  • yay:

    yay --save --mflags "--verifysource"

    (Yay předává --mflags dál makepkg.) (Linux Command Library)

  • paru – do ~/.config/paru/paru.conf:

    [options]
    # ...
    [bin]
    MFlags = --verifysource
(Pole `MFlags` v paru.conf posílá argumenty do `makepkg`.) ([distro.tube](https://distro.tube/man-org/man5/paru.conf.5.html "Manpages - paru.conf.5"))

makepkg umí ověřovat podpisy a checksumy (pole validpgpkeys, *.sig). Nepoužívejte --skippgpcheck/--skipinteg, pokud to není nezbytné. (wiki.archlinux.org)


3) Izolovat build (čistý chroot)

  • paru: má podporu chroot buildu – zapněte lokální repozitář a Chroot v paru.conf:
    [options]
    LocalRepo
    Chroot
(Viz `paru.conf(5)` – „Build packages in a chroot… requires LocalRepo“.) ([distro.tube](https://distro.tube/man-org/man5/paru.conf.5.html "Manpages - paru.conf.5"))
  • Obecně: používejte devtools a clean chroot podle ArchWiki (lepší reprodukovatelnost, nižší riziko „úniku“ z buildu). (wiki.archlinux.org)

Pozn.: chroot není „dokonalé“ bezpečnostní opatření, ale výrazně snižuje dopady; cílem je, aby buildovací skripty neměly přístup k vašemu systému. (wiki.archlinux.org)


4) Neklikat bez potvrzení

  • Vyhněte se --noconfirm a u paru nenechávejte SkipReview. (Paru/Yay umí povolit rychlý režim, ale to je přesně to, co útočníci chtějí.) (Linux Command Library, GitHub)

5) Neinstalovat „citlivé“ aplikace z AUR, když existují oficiální zdroje

  • Prohlížeče (Firefox atd.) instalujte z oficiálních repozitářů Archu – v incidentu byly kompromitovány AUR varianty a Arch výslovně doporučil tyto instalace odstranit a nainstalovat čistě. (The Register)

6) Průběžné sledování a reakce


Rychlý „hardening“ checklist

  1. Yay: yay --save --editmenu --diffmenu --mflags "--verifysource" (Linux Command Library)

  2. Paru (~/.config/paru/paru.conf):

    [options]
    # nechci SkipReview ani --noconfirm
    [bin]
    MFlags = --verifysource
    # izolace buildu
    LocalRepo
    Chroot
    :contentReference[oaicite:20]{index=20}
  1. Před stavbou otevřít PKGBUILD + .install a hledat síťové příkazy / hooky měnící spouštěcí skripty (pattern viz útok s python -c "$(curl …)"). (Linuxiac)

  2. Pro prohlížeče a další klíčové aplikace preferovat oficiální repa. (The Register)

  3. Clean chroot přes devtools pro re-buildy (ideálně default). (wiki.archlinux.org)

Malwarové incidenty v AUR za poslední měsíc (červenec 2025)

V průběhu posledního měsíce (cca červenec 2025) byly v Arch User Repository (AUR) odhaleny malwarové balíčky, tedy uživatelské balíčky obsahující škodlivý kód. Níže přinášíme přehled zjištěných případů, jejich charakteristik, způsobu odhalení a doporučení pro postižené uživatele. Závěrem uvádíme odkazy na oficiální oznámení a diskuse komunity ohledně těchto incidentů.

Seznam škodlivých balíčků v AUR (červenec 2025)

V následující tabulce jsou uvedeny balíčky z AUR, u nichž byla potvrzena přítomnost malwaru (všechny byly mezitím z AUR odstraněny). U každého je uveden název balíčku, uživatelský účet, který jej nahrál, a odkaz na příslušnou stránku AUR (která již může být nedostupná vzhledem k odstranění balíčku):

Název balíčku Autor (AUR účet) AUR odkaz
librewolf-fix-bin danikpapas aur.archlinux.org/packages/librewolf-fix-bin (smazán)
firefox-patch-bin danikpapas aur.archlinux.org/packages/firefox-patch-bin (smazán)
zen-browser-patched-bin danikpapas aur.archlinux.org/packages/zen-browser-patched-bin (smazán)
minecraft-cracked Quobleggo aur.archlinux.org/packages/minecraft-cracked (smazán)
ttf-all-ms-fonts Quobleggo aur.archlinux.org/packages/ttf-all-ms-fonts (smazán)
ttf-ms-fonts-all Quobleggo aur.archlinux.org/packages/ttf-ms-fonts-all (smazán)
vesktop-bin-patched Quobleggo aur.archlinux.org/packages/vesktop-bin-patched (smazán)
google-chrome-stable forsenontop aur.archlinux.org/packages/google-chrome-stable (smazán)

Poznámka: Všechny výše uvedené balíčky byly nově nahrané a před odstraněním neměly žádnou historii či důvěryhodnost. Např. trojice balíčků librewolf-fix-bin, firefox-patch-bin a zen-browser-patched-bin byla nahrána 16. července 2025 jedním uživatelem (danikpapas) a krátce poté další uživatel (Quobleggo) nahrál čtveřici uvedených balíčků s fonty a „minecraft“ (opět nově založený účet, všechny balíčky měly velmi nízkou popularitu). Poslední v tabulce, falešný balíček google-chrome-stable, se v AUR objevil 31. července 2025 (uživatel forsenontop, účet vytvořený jen pár hodin předtím).

Povaha a typ škodlivého kódu

Všechny odhalené balíčky obsahovaly malware typu RAT (Remote Access Trojan) – tedy škodlivý kód, který útočníkovi umožňuje vzdáleně ovládat napadený systém. Konkrétně v případě prohlížečových balíčků (Firefox/LibreWolf/Zen) šlo o tzv. CHAOS RAT, což je otevřený RAT pro Windows i Linux. Tento malware po instalaci poskytuje útočníkům plný přístup k systému – umožňuje nahrávat a stahovat soubory, spouštět libovolné příkazy nebo otevřít reverzní shell. Prakticky tak funguje jako backdoor (zadní vrátka) pro vzdálené ovládnutí počítače. RAT může být zneužit k celé škále nekalých aktivit: od krádeže citlivých dat a přihlašovacích údajů přes špehování uživatele, až po zneužití výkonu PC pro těžbu kryptoměn či jiné formy kybernetické kriminality.

Škodlivý kód nebyl obsažen přímo v těle balíčku, ale byl do systému vpašován pomocí instalačního skriptu či patche staženého z internetu. V prvním incidentu (balíčky od danikpapas) obsahoval PKGBUILD záznam source odkazující na externí repozitář na GitHubu pod kontrolou útočníka. Při instalaci se tento repozitář klonoval a údajný „patch“ ve skutečnosti spustil škodlivý skript (instalující RAT) v průběhu buildu nebo instalace balíčku. Ve druhém případě (falešný google-chrome-stable) byl škodlivý kód ukryt v souboru .install – před spuštěním samotného prohlížeče spouštěl příkaz python -c "$(curl <URL>)", který stáhl a spustil Python skript z cizího serveru. Tento skript se tiše spouštěl na pozadí při každém spuštění prohlížeče, takže uživatel neměl šanci odhalit aktivitu běžným pozorováním.

U balíčků s RAT od danikpapas došlo při instalaci pravděpodobně i k vytvoření perzistence malwaru v systému. Podle analýzy komunity instaloval skript RAT binárku pojmenovanou jako systemd-initd (snaží se maskovat jako součást systemd) a tu umístil např. do /usr/local/share/systemd-initd (příp. do ~/.local/share/… při instalaci pod uživatelem). Zároveň přidal i škodlivou službu custom-initd.service do adresářů systemd. Tím se RAT spustil na pozadí a mohl zůstávat aktivní i po dokončení instalace. (Pokud byl skript spuštěn s root právy, instaloval se do systémových složek, pokud pod běžným uživatelem, pak do domovského adresáře daného uživatele.) Ve všech případech šlo o variaci CHAOS RAT, jak potvrdili uživatelé po analýze vzorku. U balíčku google-chrome-stable nebyl malware vložen trvale do systému (neinstaloval samostatnou službu), ale spoléhal na to, že se škodlivý kód stáhne a spustí při každém spuštění prohlížeče. I ten však fungoval jako RAT/backdoor – škodlivý Python skript měl plnou kontrolu nad počítačem.

Datum a způsob odhalení

První incident (balíčky firefox-patch-bin, librewolf-fix-bin, zen-browser-patched-bin) proběhl 16. července 2025 večer, kdy se tyto balíčky objevily v AUR. Útočník je propagoval na Redditu – z dormantního (dlouho neaktivního) účtu tam zveřejnil pochvalné komentáře ve vláknech o Archu, aby nalákal uživatele k instalaci těchto „upravených“ verzí prohlížečů. Členové archovské komunity však rychle pojali podezření (nově vytvořené či náhle aktivní účty propagující neznámé balíčky) a začali situaci prověřovat. Jeden z uživatelů nahrál podezřelý soubor z balíčku na VirusTotal, který ho identifikoval jako Linux malware CHAOS RAT. Nález byl obratem nahlášen Arch Linux týmu. Během 17.–18. července probíhala analýza a komunikace v rámci Arch komunity; Arch Linux bezpečnostní tým vydal varování na mailing listu a postižené balíčky byly 18. července kolem 18:00 UTC+2 odstraněny z AUR. Oficiální oznámení zdůraznilo, že všichni, kdo některý z těchto balíčků nainstalovali, mají ihned zakročit (viz další sekce).

Krátce poté, co se provalil první útok, došlo k odhalení dalších čtyř škodlivých balíčků (viz seznam výše: minecraft-cracked, ttf-all-ms-fonts, ttf-ms-fonts-all, vesktop-bin-patched). Tyto balíčky nahrál účet Quobleggo 18. července 2025 (účet vzniklý ten den, žádná předchozí aktivita) a opět obsahovaly úpravy stejného typu – v PKGBUILDu odkaz na externí patch repozitář, který při buildu instaloval RAT do systému. Uživatel musta_ruhtinas na Redditu upozornil, že tyto balíčky „jsou zjevně malware“ a záhy poté jiný člen komunity potvrdil, že balíčky byly obratem smazány z AUR administrátory. Díky pohotové reakci komunity se tedy i tato druhá vlna malwaru nestihla významněji rozšířit.

Třetí incident se odehrál na konci měsíce: 31. července 2025 byl do AUR nahrán balíček vydávající se za oficiální Chrome browser – google-chrome-stable (oficiálně přitom Google Chrome v AUR není, pouze Chromium). Balíček nahrál nově vytvořený účet forsenontop, který neměl žádnou jinou aktivitu. Velmi rychle (během několika hodin) si i tohoto balíčku všimli zkušení uživatelé – neuniklo jim, že .install skript balíčku stahuje z internetu cizí kód přes Python, což je krajně podezřelé. Balíček byl nahlášen správcům AUR a ti proti němu zakročili ještě tentýž den. Podle oficiálního logu byl zaslán požadavek na smazání balíčku a 31. července kolem 12:30 došlo ke smazání s odůvodněním „infikovaný balíček“. Arch Linux Trusted User, který zásah provedl, zároveň zamítl souběžný požadavek jiného uživatele na „sloučení“ balíčku s existujícím google-chrome – namísto toho balíček okamžitě smazal jako škodlivý. Díky tomu byl tento pokus o nákazu AUR odvrácen po pouhých pár hodinách dostupnosti. (I tak si ale balíček stihlo všimnout několik uživatelů a měl dokonce několik kladných hlasů, což naznačuje, že ho někteří mohli nainstalovat.)

Doporučené kroky pro uživatele, kteří balíčky nainstalovali

Pokud jste některý z uvedených škodlivých balíčků nainstalovali, je nezbytné neprodleně podniknout nápravná opatření. Arch Linux tým ve svém oznámení důrazně varoval, aby uživatelé takové balíčky okamžitě odstranili ze systému a učinili potřebné kroky k ověření a zajištění, že nedošlo ke kompromitaci jejich systému. Zde je přehled doporučených kroků:

  • Okamžitě odinstalovat závadné balíčky: Pomocí package manageru odstraňte daný balíček i se všemi jeho součástmi. Např. pro balíčky librewolf-fix-bin, firefox-patch-bin, zen-browser-patched-bin lze použít kontrolu a následné odstranění příkazem:

    pacman -Qs librewolf-fix-bin firefox-patch-bin zen-browser-patched-bin  # zjištění přítomnosti  
    sudo pacman -Rns <název-balíčku>   # odinstalování balíčku  

    (Obdobně pro google-chrome-stable či jiné jmenované balíčky.) Tím odstraníte samotný balíček z databáze systému.

  • Odstranit nebo zneškodnit spuštěný malware: Pouhé odstranění balíčku nezaručí odstranění samotného malwaru – pokud již byl RAT nainstalován a běží, je třeba ho eliminovat ručně. Zkontrolujte běžící procesy a přítomnost podezřelých souborů. Konkrétně hledejte binárku pojmenovanou „systemd-initd a případně službu custom-initd.service. Tyto by mohly být umístěny v /usr/local/share/ (případně ~/.local/share/) a v adresářích /etc/systemd/ (např. system/ či user/ units). Pokud je naleznete, okamžitě je smažte z disku a zrušte jejich běh (stopněte a zakázat službu přes systemctl, ukončete proces). Také adresář /tmp zkontrolujte na přítomnost neobvyklých spustitelných souborů – v původní zprávě Arch týmu se uvádí kontrola právě na systemd-initd v /tmp.

  • Izolovat stroj od sítě: Do doby, než systém vyčistíte, je vhodné odpojit napadený počítač od internetu/sítě (odpojit ethernet/Wi-Fi). Zabráníte tím případnému odesílání dat útočníkovi nebo stahování dalšího payloadu. Malwaru typu RAT se typicky připojují na řídicí server (C2) – v tomto případě byl u CHAOS RAT server na IP 130.162.225.47:8080. Odstřižení od sítě minimalizuje další škody.

  • Provést důkladnou bezpečnostní prověrku systému: Po odstranění zjevných stop malwaru doporučují experti detailně projet systém a hledat známky kompromitace. Např. zkontrolujte systémové logy (journald, auth.log apod.) na neobvyklé události či pokusy o neoprávněný přístup. Sledujte také síťový provoz (pomocí nástrojů jako ss, netstat, lsof -i atd.), zda nějaký proces neudržuje podezřelé spojení.

  • Změna/obnova citlivých údajů: Vycházejte z předpokladu, že váš systém mohl být plně ovládán útočníkem. Změňte všechna hesla, která jste na dotyčném stroji používali, zejména pokud šlo o správce hesel nebo prohlížeče – RAT mohl potenciálně odcizit uložená hesla či cookies. Zrušte a znovu vygenerujte SSH klíče nebo jiné klíče, které na systému byly (GPG, API tokeny apod.), protože mohly být kompromitovány. Totéž platí pro uložené kryptografické peněženky, certifikáty atd.

  • Zvážit přeinstalování systému: Někteří bezpečnostní odborníci i členové komunity zdůrazňují, že stoprocentní jistotu vyčištění systému dá jen čistá reinstalace OS. Malware může zanechat skryté zadní vrátka, které je těžké odhalit. Ideální postup je obnovit systém ze zálohy pořízené před instalací závadného balíčku, nebo kompletně přeinstalovat operační systém. To samozřejmě představuje radikální krok – pokud však jde o produkční či velmi citlivý systém, je to nejbezpečnější varianta. U domácího PC by mělo postačit důkladné manuální odstranění malwaru a změna hesel, ale opatrnosti není nikdy dost.

  • Poučení do budoucna – obezřetnost při používání AUR: Tyto incidenty znovu připomněly, že AUR je skvělý sluha, ale může být i zlý pán. Do budoucna Arch komunita doporučuje věnovat instalaci z AUR zvýšenou opatrnost: prostudujte PKGBUILD a instalační skripty každého balíčku, než jej nainstalujete – zejména si všímejte příkazů curl, wget nebo odkazů na neznámé repozitáře. Využívejte AUR pomocníky, které zobrazují diff a obsah PKGBUILDu před instalací (např. paru to dělá automaticky). Vyhýbejte se instalaci balíčků, které byly do AUR přidány teprve nedávno a nemají žádné hodnocení či reputaci. Raději počkejte, než je ověří ostatní, nebo si ověřte identitu maintainerů. Zvažte také použití nástrojů pro sandboxování buildu (např. makepkg v chrootu nebo systemd-nspawn kontejnerech), aby případný škodlivý skript nemohl snadno ovlivnit hostitelský systém. AUR je mocný nástroj, ale spoléhá na důvěru a bdělost uživatelů – buďte proto vždy opatrní.

Odkazy na oficiální oznámení a diskuse

  • [SECURITY] Upozornění na malware v AUR (arch-general mailing list) – Oficiální oznámení Arch Linux týmu z 18. 7. 2025 o nalezení malwaru v balíčcích firefox-patch-bin, librewolf-fix-bin a zen-browser-patched-bin, s výzvou k nápravě.

  • Vlákno na Redditu (r/archlinux) – Diskuse arch komunity k incidentu, obsahuje informace od uživatelů, nálezy z analýz a upozornění na další podezřelé balíčky (např. účet Quobleggo).

  • Arch AUR-requests log (mazání balíčku google-chrome-stable) – Záznam o smazání falešného balíčku google-chrome-stable ze dne 31. 7. 2025 s odůvodněním „infikovaný balíček“.

  • Články a zprávy z komunity – Podrobnosti a souvislosti k incidentům lze nalézt i na webech třetích stran, např. shrnutí na BleepingComputer, Linuxiac, zpráva na ItsFOSS News či souhrn na LinuxConfig. Tyto zdroje citujeme v textu výše a poskytují další pohled na celou záležitost.

Pozn.: Všechny postižené balíčky byly z AUR odstraněny a účty útočníků byly zablokovány. Uživatelům Arch Linuxu se doporučuje sledovat Arch Linux News a mailing listy pro aktuální bezpečnostní informace.

Malware-Removal Script Design - aur-malware-check.sh

#!/usr/bin/env bash
# aur-malware-check.sh
# Rychlá kontrola a základní náprava známých AUR malware incidentů (07/2025)

set -Eeuo pipefail

# --- Nastavení ---
MALICIOUS_PACKAGES=(
  # danikpapas
  "firefox-patch-bin"
  "librewolf-fix-bin"
  "zen-browser-patched-bin"
  # Quobleggo
  "minecraft-cracked"
  "ttf-all-ms-fonts"
  "ttf-ms-fonts-all"
  "vesktop-bin-patched"
  # forsenontop
  "google-chrome-stable"
)

# Typické artefakty z incidentů (CHAOS RAT varianta)
SUSPECT_BIN_SYSTEM="/usr/local/share/systemd-initd"
SUSPECT_BIN_TMP="/tmp/systemd-initd"
SUSPECT_SERVICE_SYS="/etc/systemd/system/custom-initd.service"

# uživatelské cesty pro případ uživatelské instalace
USER_BIN_REL=".local/share/systemd-initd"
USER_SERVICE_REL=".config/systemd/user/custom-initd.service"

DO_FIX=false
if [[ "${1:-}" == "--fix" ]]; then
  DO_FIX=true
fi

echo "==> Kontroluji známé škodlivé AUR balíčky…"
found_pkgs_current=()
for p in "${MALICIOUS_PACKAGES[@]}"; do
  if pacman -Qq "$p" &>/dev/null; then
    echo " [!] Nainstalováno: $p"
    found_pkgs_current+=("$p")
  fi
done
[[ ${#found_pkgs_current[@]} -eq 0 ]] && echo " [OK] Nejsou nalezené žádné z uvedených balíčků v systému."

echo
echo "==> Kontroluji v pacman logu, zda nebyly tyto balíčky instalovány dříve…"
if [[ -r /var/log/pacman.log ]]; then
  hit=false
  for p in "${MALICIOUS_PACKAGES[@]}"; do
    if grep -E "\binstalled $p\b" /var/log/pacman.log >/dev/null; then
      echo " [!] V minulosti se instaloval: $p  (viz /var/log/pacman.log)"
      hit=true
    fi
  done
  $hit || echo " [OK] V logu není zmínka o instalaci sledovaných balíčků."
else
  echo " [-] Nelze číst /var/log/pacman.log (spusť jako root, pokud chceš kontrolu logu)."
fi

echo
echo "==> Kontroluji typické artefakty malwaru…"
any_artifacts=false

check_path() {
  local path="$1"
  if [[ -e "$path" ]]; then
    echo " [!] Nalezen soubor: $path"
    any_artifacts=true
  fi
}

# systémové a /tmp
check_path "$SUSPECT_BIN_SYSTEM"
check_path "$SUSPECT_BIN_TMP"
check_path "$SUSPECT_SERVICE_SYS"

# uživatelské cesty ve všech /home/* a /root
for home in /home/* /root; do
  [[ -d "$home" ]] || continue
  check_path "$home/$USER_BIN_REL"
  check_path "$home/$USER_SERVICE_REL"
done

# běžící procesy s názvem 'systemd-initd'
if pgrep -x systemd-initd >/dev/null 2>&1; then
  echo " [!] Běží proces: systemd-initd (PID: $(pgrep -x systemd-initd | tr '\n' ' '))"
  any_artifacts=true
fi

$any_artifacts || echo " [OK] Nepodařilo se najít typické artefakty (soubor/služba/proces)."

if $DO_FIX; then
  echo
  echo "==> Spouštím základní nápravu (--fix)…"
  # 1) Odinstalace balíčků
  if [[ ${#found_pkgs_current[@]} -gt 0 ]]; then
    echo " -> Odinstalace: ${found_pkgs_current[*]}"
    pacman --noconfirm -Rns "${found_pkgs_current[@]}" || true
  else
    echo " -> Není co odinstalovat."
  fi

  # 2) Zastavit/zakázat službu (system)
  if [[ -f "$SUSPECT_SERVICE_SYS" ]]; then
    echo " -> Zastavuji a zakazuji systemd službu custom-initd.service"
    systemctl stop custom-initd.service || true
    systemctl disable custom-initd.service || true
    rm -f "$SUSPECT_SERVICE_SYS" || true
    systemctl daemon-reload || true
  fi

  # 3) Kill procesu
  if pgrep -x systemd-initd >/dev/null 2>&1; then
    echo " -> Ukončuji proces systemd-initd"
    pkill -x systemd-initd || true
  fi

  # 4) Smazání binárek a uživatelských unitů
  rm -f "$SUSPECT_BIN_SYSTEM" "$SUSPECT_BIN_TMP" 2>/dev/null || true
  for home in /home/* /root; do
    [[ -d "$home" ]] || continue
    rm -f "$home/$USER_BIN_REL" "$home/$USER_SERVICE_REL" 2>/dev/null || true
  done

  echo "==> Hotovo. Doporučení: změň hesla/klíče a zvaž reboot."
else
  echo
  echo "==> Režim pouze-kontrola. Pokud chceš provést nápravu, spusť:"
  echo "    sudo bash $0 --fix"
fi

echo
echo "Pozn.: Tento skript kontroluje pouze známé balíčky a běžné artefakty z července 2025."
echo "Pro maximální jistotu zvaž reinstalaci systému a změnu hesel/klíčů."