V druhé a poslední části se podíváme na možnosti útoku.
30.4.2004 08:00 | Ondřej Čečák | přečteno 10234×
Obyčejný uživatel Linuxu se od uživatele Windows v podstatě vůbec neliší, protože se moc nezatěžuje čtením chybových hlášení a přemýšlením. Pokud mu přijde email s přílohou "já_nejsem_virus" nerozpakuje se ho spustit.
V sociálním inženýrství jde o to zmást uživatele tak, aby se choval jinak než normálně a ve prospěch útočníka ("nejobávanější hacker" Kevin Mitnick by mohl vyprávět ;-). Ať to je přímo telefonát nebo email s falešným odesílatelem – jediné co by uživatel měl dělat je přemýšlet.
Trojský kůň je program nebo funkce programu, který se skrývá v legitimním programu a nenápadně pronikne do cílového systému a ve správnou dobu poslouží útočníkovi.
Jak se takový program může do systému dostat? Nejčastěji právě s normálním programem (nebo v něm), buďto v binární podobě a nebo drze ve zdrojácích. Možnost bránit se podobným věcem je poměrně omezená – obvykle stačí mít důvěru v distributora, který vytváří vaší distribuci. Problém nastává právě v případě, kdy do své distribuce potřebujete dostat program, který v ní není nebo jinou verzi, než která je aktuálně v distribuci.
Pak vám nezbývá, než důvěřovat zdroji, ze kterého software stahujete. Vyplatí se přemýšlet, než bezhlavě stahovat a instalovat ze nějakého podezřelého archivu, který našel Google.
Autoři softwaru se obvykle snaží hotový software nějakým způsobem zdůvěryhodnit. A to buďto prostřednictvím kontrolních součtu (md5 sumy), které zajistí, že v daném balíku nebyly provedeny žádné změny (problém je ale v tom, jak zjistit, že vygenerované kontrolní součty jsou ty správné a ne vygenerované útočníkem). Další možností je digitálně podepsat balík (PGP/GPG se budu věnovat později), nicméně problém je stejný – jak zjistit, že daný veřejný klíč opravdu patří autorovi programu. Ale i když to je jeho klíč, v okamžiku kdy instalujete jeho software mu stejně musíte věřit, protože má moc buď rovnou nad celým systémem nebo alespoň nad daty uživatele – jediným řešením je projít si zdrojové kódy, ale to je náročné a pro uživatele skoro nemožné.
Pokud bych to měl shrnout, cokoli co instaluje z nějakého externího zdroje znamená potencionální nebezpečí, pokud si nezanalyzujete zdrojové kódy. Samotné ověřování kontrolních součtů md5 nebo PGP podpisů nestačí, naopak, někdy vytváří iluzi bezpečnosti, která je opravdu velmi nebezpečná.
Další způsob napadení je většinou nejméně technicky náročný. Zlý uživatel prostě k vašemu počítači přijde a může si dělat téměř vše, co se mu zlíbí.
Pokud přijde k vašemu PC a překvapí ho zaheslovaný BIOS (a nepůjde mu nabootovat jeho systém), možná se trochu naštve a vyzkouší pár univerzálních hesel a nebo prostě CMOS BIOSu resetuje. Pokud ho překvapí zaheslovaný zavaděč, obejde ho. Pokud ho opravdu naštve, vezme šroubovák a ukradne klidně celý disk ...
Jestli nemůžete zabezpečit, aby k vašemu počítači chodili pouze důvěryhodní lidé, máte problém. Řešením pak je pořídit si nedobytnou a neodnesitelnou case nebo šifrovat data na disku.
Obecně – proti útok z lokálu je velice těžká obrana, obvykle můžete jenom útočníkovi znepříjemnit a zkomplikovat situaci.
První věcí, se kterou se zlý uživatel nejdříve setká je BIOS. Základní program, který inicializuje a otestuje hardware a pak předá řízení operačnímu systému. Pro útočníka je důležitý proto, že se v něm dá nastavit, jak se má bootovat (zavádět OS). Pokud si přinese svůj systém (např. live cd), nabootuje a pokud nejsou data šifrována zcela obejde zabezpečení – bude mu stačit připojit si váš disk a dělat, co se mu zlíbí (získání dat, hesel, získání přístupu do systému, ...).
Jedinou cestou, jak postup útočníkovi znepříjemnit je nastavit heslo pro změnu v CMOSu (případně spouštění počítače). Toto zabezpečení se ale dá poměrně snadno obejít – výrobci obvykle implementují do BIOSu několik univerzálních hesel (útočník si prostě stáhne seznam pro různé BIOSy a zkouší) nebo dokonce stačí při startu stisknout určitou kombinaci kláves. Pokud první metoda selže, nezbývá než otevřít case a resetovat CMOS (k tomu tam je obvykle switch nebo jumper, ale protože to je relativně složité je obvyklejší na pár sekund vyjmout baterii, která paměť CMOS udržuje, ale pokud je baterie nepřístupná, zlému uživateli nebude bránit nic v ohnutí běžné kancelářské sponky a zkratování několika nožiček CMOSu). Pozor si dávejte v případě, že máte v počítači nějakou (pseudo)RAIDovou kartu nebo nějakou síťovku s EEPROM. Takové karty totiž mohou BIOS obcházet a bootovat podle vlastního nastavení.
Další nepříjemností, kterou můžete útočníkovi zkomplikovat život, je zaheslovat zavaděč operačního systému (grub, lilo, ...). Útočník mít jinak možnost nabootovat do jednouživatelského režimu (naštěstí už obvykle potřebuje heslo superuživatele) nebo bude moci zadat jádru cestu k programu init tak, aby se místo initu spustil třeba bash (samozřejmě s právy superuživatele). Řešením je nastavit zavaděči heslo (u lila v /etc/lilo.conf díky parametrům password a restricted).
Cílem crackera nemusí být pouze získání superuživatelského přístupu (třeba účet root). Zlému uživateli obvykle stačí získat přístup k účtu obyčejného uživatele. Proč? Chyby v softwaru se dají dělit na dva způsoby – vzdálené a lokální. Vzdálené chyby se dají logicky zneužít vzdáleně (po síti), kdežto pro zneužití lokální chyby potřebuje cracker účet uživatele.
Mimo to, už jen prosté získání účtu uživatele dává útočníkovi možnost normální uživatele systému dost potrápit, protože může systém různě zpomalovat, zabírat místo na disku a systémové prostředky a podobně. Obvykle ale získání lokálního účtu vede k získání superuživatelkých práv právě přes nějakou slabinu, která jde využít pouze lokálně.
Proto je důležité, aby na vašem stroji nebyly žádné testovací účty s jednoduchým heslem (jméno test, heslo test apod.), aby žádný z uživatelů neměl nastaveno triviální heslo (např. účet josef a heslo pepa). Čím více uživatelů, tím se toto riziko zvyšuje. Popřemýšlejte, jestli nemáte nějaký podobný účet s jednoduchým heslem ...
Remote shell umožňuje vzdálené přihlášení k počítači. Možných využití je řada, především vzdálené přihlášení :o). To zprostředkovával v minulosti protokol telnet, ten byl ale právě kvůli bezpečnosti (spojení nebylo šifrované) nahrazen protokolem ssh.
Pokud je to možné, doporučuji zakázat na firewallu a (nebo) v tcpwrapperu všechny spojení na ssh krom počítačů, ze kterých se chcete přihlašovat. Problém ale nastává v okamžiku, kdy se potřebujete přihlásit třeba z nějaké internetové kavárny a podobně. Proč je to problém?
Navíc, pokaždé, když se přihlašujete k počítači, je nutné ověřit tzv. fingerprint. Tím si totiž ověříte, že ten, s kým budete šifrovaně komunikovat, je skutečně váš počítač. Toto ověřování je důležité proto, že mezi vás a váš počítač se může dostat útočník a použít metody "Man in the Middle" (zkráceně MITM), všechna komunikace půjde přes něj a bude se předávat od vás vašemu počítači a obráceně.
Nicméně, nějak řešit podobný problém se dá; použití jednorázových hesel (viz např. projekt otpw) znemožní útočníkovi použít odchycené heslo. Nebo můžete používat vzdálenou službu tak, že pro svět bude otevřena na požádání nebo po nějaké další speciální autorizaci, která povede k zpřístupnění služby. Na lupě vyšel nedávno článek na toto téma – Port Knocking.
Nebudu zde rozebírat, jak posílání pošty funguje, jenom že se zde používají protokoly pop3 a imap (stažení pošty) a smtp (odeslání). Problém je, že pop3 ani imap samy šifrování nepodporují, takže opět vaše heslo (a zpráva) letí až na server v nešifrované podobě. Ale i to, že se váš email se dostane bezpečně až na server neznamená, že se bezpečně dostane i k adresátovi, protože mu zbývá ještě projít strastiplnou cestou internetem až na server, kde má adresát emailovou schránku (pokud vás zajímá, které servery nějaký konkrétní email zpracovávaly, podívejte se do hlavičky emailu – zajímají vás konkrétně informace za "Received:").
Protokoly pop3 i imap lze vhodně rozšířit tak, aby bylo možné zašifrovat zprávu a zabezpečit autentizaci, ale jak jsem už naznačil, ani to není vše. Nezapomeňte na ověření certifikátů serveru!
Protože emaily (obvykle) kolují internetem v čitelné podobě, je nutné se k emailu patřičně chovat. Obecně se email přirovnává k pohlednici, protože na rozdíl od dopisu, každý kdo má pohled v ruce si ho může přečíst, pozměnit a nebo stejně jako dopis zahodit do koše. Mimo to také k pohledu nebývá přiložen žádný balík, takže si prosím uvědomte a zapamatujte, že email není vhodný k posílání velkých příloh (navíc některé servery mohou takovou zprávu odmítnout doručit).
Možností, jak zabezpečit emailovou komunikaci je používat elektronický podpis. A tím je velice populární PGP (Pretty Good Privacy), který umožňuje podepisovat emailové zprávy (tím zajistíte dvě věci – jednak podepsaná zpráva naznačuje, že jste skutečným autorem vy a pak také znemožňuje změnu těla zprávy cestou k příjemci) nebo šifrovat (za použití asymetrické kryptografie – pro zašifrování potřebujete veřejný klíč příjemce a výslednou zprávu půjde dešifrovat pouze soukromým klíčem příjemce, který musíte chránit jako oko v hlavě). Trochu problém je získání veřejných klíčů, protože veřejný klíč si na libovolný email může vytvořit kdokoli. Buďto si můžete přes nějaký bezpečný kanál ověřit kontrolní součet veřejného klíče (tzv. fingerprint) přímo s danou osobou nebo ho může podepsat někdo, komu věříte (tzv. Web of Trust; za předpokladu, že on bude mít ověřené, že je takový klíč pravý) a konečně takový klíč může být podepsaný certifikační autoritou (CA), které věříte (a ona např. přímo ověřuje totožnost žadatele).
V Linuxu se obvykle používá ekvivalent PGP – GPG (GNU Privacy Guard) a většina emailových klientů s ním umí komunikovat a velice jednoduše pracovat. GPG lze navíc použít pro symetrické šifrování apod. Také pro něj existují i poměrně zdařilé grafické frontendy.
FTP má opět několik bezpečnostních problémů:
Jediným univerzálně rozumným řešením je používat tzv. pasivní režim FTP (FTP klient požaduje po serveru otevření portu pro přenos dat), protože jinak existuje mnoho bezpečnostních rizik.
WWW je poměrně hodně používaná služba, která částečně může za rozvoj internetu do podoby, jakou ji známe dnes. To ale nic nemění na tom, že i web je poměrně nebezpečné místo.
Pokud tomu není jinak, všechna komunikace je nešifrovaná (prohlížeč obvykle dává vědět uživateli, že je komunikace bezpečná, krom všemožných upozornění a ikon, URL těchto serverů obvykle začíná https://), takže opět – pokud budete vyplňovat kterékoli formuláře (dotazníky, přihlašování k emailu, ...), pamatujte, že kdokoli mezi vámi a serverem (včetně) může vaše data odchytávat a dělat si s nimi, co se mu zlíbí.
Jak už jsem naznačil výše, webová komunikace se dá zabezpečit, nejčastěji pomocí SSL (Secure Sockets Layer, blíže ve článku na root.cz. Jedná se o technologii (zjednodušeně), která provádí šifrovanou komunikaci mezi serverem a prohlížečem pomocí symetrické šifry. velice důležité je, aby došlo před vlastní komunikací k ověření, s kým to vlastně komunikujeme. K tomu slouží certifikáty, díky nim je možné poznat, jestli je druhá strana opravdu tím, za koho se vydává. Aby byl certifikát důvěryhodný a ověřitelný, je podepsán certifikační autoritou, které uživatel prostě musí věřit.
Mimochodem, když už se bavíme v SSL, toto šifrování se dá použít nejenom pro web, ale používá se například pro stahování emailů, šifrování FTP relace apod. Opět zdůrazňuji, že opravdu důležité vědět, kdo je na druhé straně spojení.
Co říct na závěr? Snažte si zapamatovat a používat co nejvíce věcí, na které upozorňuji – věřte – mají svůj smysl. I když většinou stačí používat mozek a číst co se píše na monitoru :o).
Za konzultace bych chtěl poděkovat Honzovi Houšťkovi.