IV. Podvedení uživatele
Sociální inženýrství
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é koně
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á.
V. Útok z lokálu
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.
BIOS
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).
VI. Útok zvenčí – Protokoly a služby
Cílem útočníka může být také lokální účet
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 – telnet (ssh)
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?
- řekněme, že náhodou zrovna na vašem počítači neběží keylogger (program
zaznamenávající stisk všech kláves)
- ssh port bude muset být otevřen pro všechny (útočník tak může zkoušet
hesla a s každým otevřeným portem vzrůstá riziko napadení právě přes otevřenou
službu)
- problémové bude vyřešit situaci s (bezpečným) zadáváním hesla
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.
Pošta – pop3, imap, smtp
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.
Přenos souborů – FTP
FTP má opět několik bezpečnostních problémů:
- komunikace není šifrovaná, dá se odposlouchávat včetně hesla
- FTP používá oproti jiným protokolům dva komunikační kanály – přes
jeden proudí příkazy a druhým vlastní data; tohle přináší řadu bezpečnostních
problémů, viz např. tento
článek od DJB.
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.
Word Wide Web – http
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í.
VII. Závěr
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.