Správa linuxového serveru: Pár slov o útocích na server
Ještě před tím, než se pustím do bezpečnosti systému a služeb, osvětlím, před čím vlastně server chráníte, tedy jaké jsou typy útoků na server, jejich charakter, cíle a motivy útočníků, ale také kudy a jak mohou útočníci na server proniknout a jak mohou škodit.
Z hlediska směru vedeného útoku uvažujeme o dvou typech útoků - vnějším a vnitřním. Většina potenciálních útočníků bude na server přistupovat z vnějšku, tedy nikoliv jako uživatel daného systému, ale pouze k veřejným, běžícím službám, ke kterým existuje z jejich IP adresy na daný server přístup, tedy např. k webovému serveru, poštovnímu serveru, ale také třeba SSH
serveru, pokud je na něj přístup odkudkoliv. Druhým typem útoků je vnitřní, který zahrnuje ostatní případy, tj. situaci, kdy útočník získá přístup třeba k Shellu nebo se probourá přes nějakou běžící službu.
V ideálním případě by k zamezení vnějších útoků měly stačit bezpečnostní mechanismy jednotlivých služeb, ovšem za dvou předpokladů, které jsou nesplnitelné. Prvním předpokladem by byl dokonalý administrátor s kompletní znalostí všech služeb a bez možnosti něco opomenout či udělat chybu, a druhým předpokladem je bezchybné fungování daných služeb. I kdybychom předpokládali neomylnost a stoprocentní znalosti správce, stále tu zůstane fakt, že v každém programu jsou chyby, a řada chyb v serverových službách je využitelná útočníky. Navíc některé služby využívají dalších aplikací či dodatečných modulů, ve kterých mohou být také chyby. Tohle je třeba případ webového serveru, který může být mistrně zabezpečen, ale sám o sobě většinou funguje spíše jako proxy, tj. zachytí požadavek a předá jej interpretu příslušného programovacího jazyka (PHP, Perl, Python, Java apod.), ve kterém běží vlastní webová aplikace, která příslušný požadavek zpracovává.
Řada vnějších útoků je tedy vedena nejenom na služby ve smyslu běžících démonů jako Apache, Postfix, OpenSSH apod., ale i na aplikace, ke kterým některé z daných služeb zprostředkovávají přístup. Tyto aplikace mohou být nakonfigurované buď samotnými správci (lepší případ), nebo také samotnými uživateli (případ webhostingu). To může působit problém - správce obvykle dohlíží na aktuálnost softwaru a záplatování bezpečnostních trhlin (je to v jeho zájmu), ale uživatelé webhostingu jsou různí - někteří na bezpečnost svých aplikací dbají, jiní nainstalují aplikaci a už se o ni nestarají. Vznikají tak nezáplatované, neaktualizované aplikace, které jsou pro daný server potenciální hrozbou.
Vnitřní útok je útok útočníka, který má k serveru jiný než vnější přístup. Může získat nebo uhodnout přihlašovací údaje některého uživatele, může to v některých případech být i samotný uživatel (nespokojený zákazník či zaměstnanec), může získat přístup využitím bezpečnostní trhliny v některé z veřejně přístupných aplikací atd. Vnitřní útoky se liší podle toho, kam se útočník dostal. Asi úplně nejhorší je, pokud využije zranitelnost v některé službě, která běží s právy roota, a získá root Shell. To je konec - v takovém případě si může útočník se serverem dělat, co se mu zlíbí. Má navíc široké možnosti svou přítomnost maskovat - nahráním speciálního jaderného modulu či podvržením nástrojů jako ls
, netstat
, ps
, top
, ale ibash
apod., zajistí, že některé procesy, soubory či uživatele neuvidí ani root.
Druhý nehorší případ nastane, pokud se útočník dostane k uživatelskému Shellu. Nemá sice práva roota, ale to mu obvykle vůbec nebrání škodit jinak nebo se pokoušet dostat dál. Může využít nějaké vnitřní zranitelnosti (nenastavené heslo pro správce databáze atd.) a získat přístup k citlivým datům nebo chráněné vnitřní službě, která není zvnějšku přístupná. Může zkoušet různé zranitelnosti jádra či pod rootem běžících démonů, aby získal root Shell. I uživatelský účet ovšem většině útočníků stačí - mohou na server nainstalovat, který jim umožní začlenit server do botnetu - častý je v takové situaci upravený IRC bot, který se připojí na specifikovaný IRC kanál a čeká na příkazy od útočníka, ale stejně tak může "robot" hledat příkazy od útočníka prostřednictvím protokolu HTTP a některých veřejných služeb jako Twitter apod.
Třetí možností je omezený přístup třeba k interpretu programovacího jazyka apod. - i to někdy stačí k začlenění serveru do botnetu nebo k možnosti postoupit dál k některému z horších scénářů. V této situaci se útočník patrně také dostane, byť třeba pouze omezeně, k datům (přístup k databázi apod.). Útočník samozřejmě může také získat přístup do administračního rozhraní webové aplikace apod. - to sice není až tak kritické z pohledu bezpečnosti serveru, ale z pohledu bezpečnosti služby, kterou server poskytuje, to problém samozřejmě je.
Obecně, vnitřní útoky jsou mnohem závažnější, protože uchránit vnitřek systému bývá obecně mnohem složitější než ochránit systém zvnějšku. Řada služeb nemusí být zvnějšku přístupná, ale zevnitř dané služby přístupné jsou - např. databázový server. Stejně tak má útočník přístup k podrobným informacím o systému, k řadě nástrojů, které jsou na serveru nainstalované, a co je horší, má možnost nainstalovat si na server své nástroje.
Většina útoků, se kterými se na serverech potkáte, budou automatizované. Jsou to roboti, kteří na povel útočníka skenují síť a hledají počítače s běžícími službami, přes které se pak snaží získat přístup k Shellu nebo takový přístup, který jim obvykle umožní nainstalovat program, pomocí kterého začlení daný počítač do botnetu. To se dá realizovat i bez přístupu k Shellu, třeba prostřednictvím zranitelnosti ve webové aplikaci. V rámci botnetu pak server rozesílá spam, skenuje nebo útočí na jiné počítače v síti, v horším případě skladuje nějaký ilegální materiál (popř. slouží jako prostředník pro distribuci takového materiálu).
Automatizované útoky jsou sice časté, ale představují relativně menší hrozbu - většina z nich se pokusí najít nějakou triviální zranitelnost, a pokud ji robot nenajde, jde „o dům dál“. Pravidelně aktualizovaný software a dobrá politika volby přístupových hesel jako obrana postačí. Horší jsou cílené útoky, kde sice může, ale také nemusí docházet k proniknutí útočníka do systému - pro tuto oblast jsou pak charakteristické DoS a DDoS útoky, a to buď na úrovni služby, kterou jeden nebo více počítačů zahltí požadavky, nebo na úrovni sítě (cílová IP adresa je zahlcena pakety). Cílený útok je nebezpečnější v tom, že za ním obvykle stojí konkrétní útočník nebo útočníci, tedy lidé, a ne automatizované nástroje. V případě napadení serveru zevnitř dokáže šikovný útočník buď získat roota (využitím nějaké zranitelnosti), nebo provést DoS útok na server zevnitř, třeba fork bombou.
Motivy útoků mohou být samozřejmě různé. Nejčastější je snaha začlenit server do botnetu, a prostřednictvím něj pak páchat různou činnost (rozesílání spamu, DDoS útoky na jiné počítače apod.). V některých případech jsou počítače napadány s cílem jejich „prodeje“, resp. prodeje získaného přístupu k danému počítači. Ostatní motivy mohou zahrnovat osobní důvody (msta bývalého zaměstnance či nespokojeného zákazníka, ale i útok nějakého nezúčastněného, kterému se váš server jen tak znelíbil), konkurenční boj, vydírání apod.
Cíle útoků mohou zahrnovat kromě zahlcení serveru (DoS) a začlenění serveru do botnetu i získání cenných dat, které server obsahuje, tzn. databáze zákazníků, osobních údajů, čísel kreditních karet apod. Destruktivní cíle (zničení serveru, smazání určitých dat apod.) jsou méně časté, ale mohou být součástí třeba konkurenčního boje nebo msty. Předpokládám nicméně, že většina čtenářů tohoto seriálu se bude potýkat výhradně s automatizovanými útoky.