Autentizace a identifikace - vylepšete si bezpečnost vlastními silami

1. 4. 2003

Sdílet

Každý, kdo používá počítač připojený k sítí, se téměř neustále hlásí k různýmsíťovým službám a využívá cizí zdroje, jinak by ostatně ani počítačové sítě neměly s...

Každý, kdo používá počítač připojený k sítí, se téměř neustále hlásí k různým
síťovým službám a využívá cizí zdroje, jinak by ostatně ani počítačové sítě

neměly smysl. Většina služeb v dnešní době využívá jistou formu autentizace

uživatele, a to různými metodami. Málokdo se však zamýšlí nad tím, jak taková

autentizace vlastně funguje a jak je bezpečná. Toto malé zamyšlení je cílem

dnešního článku.





Šifrované versus nešifrované přenosy



Mnoho síťových autentizačních metod používá různé kryptografické algoritmy k

šifrování vzájemné komunikace. Bohužel jsou i takové, které tak nečiní. Nyní se

podíváme na ty protokoly, které k autentizaci šifrování nepoužívají.



Každý z vás již jistě dobře ví, že protokoly jako je FTP, POP, Telnet nebo HTTP

šifrování téměř nevyužívají. Většina uživatelů ale nad tímto faktem mávne rukou

a řekne si, že s tím nemůže osobně nic udělat, a dále se problémem netrápí.

Situace však není tak růžová a jednoduchá, jak by se na první pohled mohlo

zdát. Zejména v komerční sféře může mít takové ignorování faktů kritické

následky, nemluvě o narušení soukromí, které není jistě příjemné nikomu. Na

následujících několika řádcích si ukážeme, jaké může mít používání

nešifrovaných protokolů následky, a co vše lze s trochou šikovnosti zjistit.

Nakonec se podíváme na některé bezpečné alternativy nešifrovaných služeb a

povíme si, jak pomocí nich řešit stávající situaci.





Identifikace serveru a služeb



První věcí, kterou je třeba zjistit, je, jakou vlastně verzi a typ služby

provozujete nebo využíváte. Pokusíme se identifikovat různé služby a jak jistě

uvidíte, pokud nejsou správně nastaveny, prozradí tyto služby o sobě velmi

mnoho. Prvním krokem by měla být identifikace cílového systému, který službu

nabízí. Může jít o poštovní server, FTP server nebo webový server. Jako příklad

jsem vybral systémy, které nabízejí mnoho služeb (což mimochodem není příliš

šťastné a bezpečné řešení). V praxi se můžete setkat (je to velmi

pravděpodobné) s tím, že služby budou nainstalovány na různých systémech.

Uvedené služby běžely pod těmito operačními systémy: Linux RedHat 7.3 a Windows

2000 Professional. Na systémech byly spuštěny tyto služby: SMTP server, FTP

server a HTTP server. Na systému Linux ještě SSH server a na systému Windows

telnet server. Nyní se podíváme, jak vypadal portscan každého systému a jaké

služby identifikoval. Ke skenování portů byl použit nástroj nmap

(www.insecure.org/nmap), který platí za jeden z nejlepších produktů své třídy.



Jak vidíme na obrázcích na vedlejší straně, nabízí každý systém podobné služby.

Nyní se pomocí nástroje telnet podíváme na to, jak se jednotlivé služby

identifikují. Alternativně lze použít i nástroj netcat, který je součástí

většiny linuxových distribucí a je k dispozici i pro operační systém Windows.







Z pohledu správce



Nyní uděláme malou odbočku a podíváme se na problém ze strany správce systému.

Z výpisu je vidět, že se většina služeb identifikuje celkem obsáhle, což ale

nemusí být vždy dobře. Pokud útočník zná druh a verzi dané služby, může

zjistit, byla-li v té které konkrétní verzi dané služby objevena nějaká chyba,

a případně takovou chybu zneužít. S tím souvisí sledování změn a pravidelná

aktualizace softwaru. Jak můžete vidět z výpisů, testované systémy jsou

zprovozněny v základní konfiguraci a ke všemu ještě neaktualizované, což by se

u systémů připojených k síti (a nejen u nich) stávat nemělo.



Nyní si tedy povíme, jak znesnadnit útočníkovi identifikaci běžících služeb.

První a základní věcí je vůbec nespouštět služby, které nepotřebujeme. Proč mít

na své lokální stanici spuštěnu službu telnet, když nechceme, aby náš počítač

využíval někdo jiný? Další věcí je oddělení služeb, které slouží uživatelům

vnitřní sítě, a služeb, jež chceme nabídnout veřejnosti. Zde přicházejí ke

slovu firewally a směrovače. Rovněž není od věci uvažovat o implementaci

takzvané DMZ neboli demilitarizované zóny, do které jsou umístěny služby

nabízené veřejnosti, jež chceme oddělit od naší vnitřní sítě. Do DMZ můžeme

umístit poštovní servery, FTP server nebo webové servery. Konfigurace a

strategie firewallu však není tématem tohoto článku, a tak se raději vrátíme k

našemu tématu a povíme si, jak znesnadnit identifikaci běžících služeb.



Jako první si ukážeme, jak odstranit hlavičku poštovního serveru Sendmail. Tuto

změnu můžete provést pomocí konfiguračních maker m4 nebo přímou editací souboru

sendmail.cf, což je jednodušší, neboť jde o změnu jednoho řádku, a to konkrétně

o změnu řádku obsahujícího direktivu SMTPGreetingMessage=j Sendmail $v/$Z; $b.

Tuto direktivu můžete libovolně měnit, můžete se dokonce vydávat za jiný

poštovní server. Možností je mnoho a rozhodnutí leží jen na vás. Pozor ale na

situaci, kdy se o poštovní server stará více správců a nastavení se provádí

pomocí maker m4. Potom je důležité, aby změna byla provedena i v makru, aby

nedošlo k situaci, kdy druhý správce změní nějaké konfigurační direktivy, znovu

vygeneruje a zavede konfigurační soubor, a všechny změny pak přijdou nazmar.

Dalším velice často používaným poštovní serverem je Postfix. I u něj si

ukážeme, jak změnit jeho hlavičku. Změnu provedete v konfiguračním souboru

Postfixu main.cf, kde je třeba upravit direktivu smtpd_banner. Další službou,

kde je žádoucí změnit hlavičku, je FTP. Povíme si, jak to udělat u

nejrozšířenějšího FTP serveru wu-ftpd. V konfiguračním souboru ftpaccess

editujte direktivy greeting full, greeting brief, greeting terse, greeting

test, banner a hostname. Pokuste se s těmito direktivami experimentovat a

zvolte tu, která vám bude nejvíce vyhovovat. U HTTP serveru, což je v unixovém

světě nejčastěji server Apache a ve světě Microsoftu nejčastěji IIS, je situace

poněkud obtížnější. Například u serveru Apache se při změně hlavičky nevyhneme

editaci zdrojového kódu a následné kompilaci. Změnu hlavičky provedete v

hlavičkovém souboru httpd.h, který je uložen v adresáři apachesource/include,

kde apachesource je adresář, v němž máte uloženy zdrojové kódy serveru. V tomto

souboru změňte hodnotu makra SERVER_BASEPRODUCT a SERVER_BASEVERSION. Verzi

HTTP serveru zjistíte velice snadno zasláním následujícího požadavku na port,

na kterém HTTP server běží: HEAD /HTTP/1.0. Nyní se vraťme do pozice uživatele,

jenž se snaží identifikovat běžící služby a zjišťuje jejich vlastnosti.







Z pohledu uživatele



Dejme tomu, že se vám podařilo více či méně úspěšně identifikovat služby, které

využíváte, a z dostupných informací, jimiž bývají nejčastěji domovské stránky

jednotlivých produktů, jste zjistili, zda služba šifruje komunikaci a na jakém

principu provádí autentizaci. Nyní se budeme zabývat postupem pro případ, kdy

zjistíte, že služba šifrování nevyužívá. Abyste pochopili význam nebezpečí,

které vám hrozí, uděláte nejlépe, když si sami zkusíte, čeho je potenciální

útočník schopen. Nejjednodušším způsobem, jak obejít síťovou autentizaci, je

použití snifferu a odchycení hesla právoplatného uživatele. To je mnohem

snazší, než by se mohlo zdát. Jako sniffer je použit produkt ettercap

(sourceforge.net/ettercap), který nabízí špičkový výkon, mnoho standardních

funkcí, další užitečné plug-iny, a navíc využívá GTK interface pro uživatele,

kteří mají rádi grafické prostředí. Pro konzolové uživatele je vedle klasického

rozhraní přichystáno i rozhraní využívající ncurses. Program umí různé druhy

sniffu, ať již jde o ARP sniffing užitečný zejména na přepínaných sítích, IP

sniffing nebo MAC sniffing. V případě, že na vaší síti běží služba arpwatch,

která sleduje změny na síti, a vy se pokusíte o ARP sniffing, bude arpwatch

hlásit spoustu nestandardních situací, zejména flip-flop sniffovaného stroje.

Proto raději na své aktivity předem upozorněte správce sítě.



Nyní již tedy k samotnému testování nešifrovaných služeb. Myslíte si, že je

vaše pošta v bezpečí před cizími zraky? Zkuste zapnout sniffer, a jako source

adresu vyberte poštovní server a jako destination vyberte svůj systém a zapněte

sniffování (typ zvolte podle požadavků sítě). Nyní na svém stroji zkuste

přijmout/odeslat poštu. Vidíte výsledky? To, co vidíte, může vidět kdokoliv na

vaší sítí, případně každý, kdo má do vaší sítě přistup. Situace však může být

ještě horší. Podívejte se na obrázek vlevo dole. Zde jsme spuštěním příslušného

plug-inu zaznamenali celou komunikaci mezi serverem a klientem, jinými slovy

udělali jsme si kopii e-mailu. Co se stane v případě, kdy poštou posíláte

citlivé informace, mající zásadní vliv na fungování vaší firmy?



Nyní se podíváme na protokol ftp. Opět si zapněte sniffer a pokuste se připojit

k libovolnému ftp serveru. Vidíte vaše jméno a heslo? Pokud ano, může ho vidět

i kdokoliv ve vaší síti, případně na cestě mezi vámi a serverem, ale tuto

situaci již opravdu asi neovlivníte. Co se stane v případě, kdy stahujete

citlivá data z firemního ftp serveru, o kterém si myslíte nebo o němž vám bylo

tvrzeno, že je zabezpečen?



Dobře, řeknou si někteří lidé, a co když omezím přístup jen na povolené IP

adresy? I proti tomuto lze vznést námitku, neboť IP adresa může být velice

snadno zfalšována či podvržena. Nyní se ještě podíváme na HTTP komunikaci,

abychom si ukázali, že ani tento druh přenosu není příliš bezpečný. V prostředí

webu se používá mnoho autentizačních metod. Některé jsou založené na funkcích

serveru, některé na skriptovacích jazycích, jež na serveru fungují. Velice

často se však používá HTTP autentizace, nejčastěji pak typu basic. S tímto

druhem autentizace se jistě každý již někdy setkal.



Bohužel i tento typ autentizace lze velice snadno obejít a překonat. Opět

spustíme náš oblíbený ettercap a budeme chytat veškerý provoz mezi webovým

serverem a klientem. V okně prohlížeče otevřeme stránku a pokusíme se vstoupit

do nějaké autorizované oblasti, která je chráněna HTTP autentizací. Pokud

nemáme takový komfortní nástroj jako je ettercap, jenž nám naservíruje všechna

hesla jako na podnose, ale máme k dispozici „pouze“ starý dobrý sniffer,

dostaneme výstup podobný tomuto:



GET /adresar1/adresar2 HTTP/1.0

Autorization: Basic upravena podoba hesla



Jelikož heslo není šifrované, ale pouze upravené pro přenos po síti, je získání

jeho podoby otázkou několika sekund. Stačí nám k tomu například skriptovací

jazyk PHP, Perl atd. Zkuste Perl a base_decode64 nebo její obdobu v PHP. Další

perličkou (slovo nemá souvislost se skriptovacím jazykem Perl ) programu

ettercap je plug-in, který umožňuje zachytávat všechny kopírované soubory přes

protokol HTTP.



Existují také různé autentizační metody, jež využívají sessions, cookies nebo

například hashů md5 algoritmu. Všechny uvedené metody jsou více či méně

bezpečné, ale nemá cenu je zde podrobně rozebírat. Za malou chvilku se podíváme

na metodu, která je při správné implementaci ze všech uvedených nejbezpečnější.







Alternativy



Jestli vás předchozí řádky dostaly do deprese a zoufáte kvůli tomu, že žádná

data nejsou v bezpečí, tak buďte v klidu. Existují metody, jak svá data chránit

a jak nahradit stávající nebezpečné služby jejich bezpečnější alternativou.

Nyní si uvedeme krátký přehled alternativních služeb.





POP, IMAP



Většina poštovních klientů ani POP nebo IMAP serverů šifrování nepodporuje.

Řešením jsou servery APOP a KPOP, které fungují na trochu odlišném principu než

klasický POP server. Princip komunikace spočívá v tom, že server pošle

klientovi požadavek, tento požadavek klient zpracuje tak, že pomocí hesla

vygeneruje odpověď, kterou odešle zpět serveru. K přenosu hesla přes síť tak

vůbec nedochází. Nasazení těchto serverů je bohužel velmi malé. Pokud však máte

vliv a zájem na bezpečnosti dat, nebude pro vás problém daný systém prosadit.

To jsme však řešili pouze otázku autorizace serveru a ne samotného obsahu

elektronické pošty. Pokud si chcete být jisti, že vaši poštu nikdo číst nebude,

sáhněte po kryptografickém nástroji GPG nebo PGP.





FTP



V dnešní době existuje bezpečná náhrada k FTP, a tou je například SCP. SCP

využívá šifrovaného protokolu SSH, a je tudíž daleko bezpečnější než klasické

FTP. Implementace SCP jako náhrada za FTP nese svá rizika. Pokud o tom

uvažujete v prostředí lokální sítě, kterou znáte a ovládáte, není to takový

problém. Pokud uvažujete o náhradě FTP na serveru, jenž je veřejně přístupný,

nese to určitá rizika, zejména v oblasti klientů, které neznáte a neznáte ani

jejich požadavky. Ještě lze říci, že náhrada FTP serveru je vhodnější tam, kde

jsou k dispozici citlivá data, než na serverech, které nenabízejí nic tajného a

mají vysoký bandwidth.





HTTP



Protokol HTTP má svou bezpečnou náhradu v protokolu HTTPS. Ten využívá pro

šifrování dat SSL a celou komunikaci tak činí mnohem bezpečnější. Implementace

SSL je celkem snadná a výrazně zlepší, zkvalitní a učiní důvěryhodnějším vaše

webové sídlo.







„Bezpečné protokoly“



Nyní se podíváme na protokoly, které využívají při přenosu dat šifrování a

další bezpečné metody, a můžeme je tudíž označit jako bezpečné. Půjde zejména o

SSH, SSL a Kerberos. Popíšeme si, na jakém principu fungují, kde se s nimi

můžeme setkat, na co si je třeba při jejich používání dávat pozor. Začneme

protokolem SSH.





SSH



Secure Shell alias SSH je založen na principu šifrování veřejným klíčem. To v

praxi znamená, že pracuje s dvojicí klíčů soukromým a veřejným. V praxi se

nejčastěji setkáme s volnou implementací SSH protokolu OpenSSH, vyvíjenou v

rámci projektu OpenBSD. OpenSSH je dnes standardem ke komunikaci mezi unixovými

systémy. Najdete jej v instalaci všech(?) linuxových distribucí, v xBSD

implementacích a dalších mnoha unix-like systémech. Ve Windows, a to ani ve

verzi 2000 a XP, není žádný šifrovaný protokol standardně implementován a

implicitním nástrojem pro vzdálenou správu (hned po vašem autě) je klasický

telnet, se všemi jeho nevýhodami.



Instalace a práce s SSH je velmi snadná. Nejprve musíme nainstalovat serverovou

část. Záleží na tom, jak program instalujete. Pokud například používáte Linux

RedHat, nabídnou se vám ze standardní instalace k nainstalovaní soubory

openssh-client, openssh-server a openssh. Pokud používáte jinou distribuci nebo

instalujete ze zdrojového kódu, pravděpodobně si stáhnete jen jeden balíček a

ten vám nainstaluje všechny potřebné součásti. Po nainstalování máte jako

klient k dispozici tyto tři nástroje: slogin, scp a ssh. Více o jednotlivých

nástrojích se dozvíte z jejich manuálových stránek.



Další věcí, kterou by měl každý uživatel počítače udělat, je vygenerování svého

privátního a veřejného klíče. To lze učinit pomocí příkazu ssh-keygen. Globální

konfigurační soubor pro klienty se nachází typicky v adresáři /

etc/ssh/ssh_config a konfigurační soubor pro server v souboru

/etc/ssh/sshd_config. Doporučuji řádně přečíst dokumentaci předtím, než začnete

ssh používat, a dát si pozor na změny klíčů, které často svědčí o něčem

nestandardním. Pokud se vám zobrazí hláška o změně klíče, nepište slepě, že si

přejete klíč přijmout, ale raději si zkontrolujte systém fyzicky, pokud k němu

máte přístup, případně kontaktujte svého systémového administrátora a na

případnou změnu ho upozorněte.





SSL



SSL (Secure Socket Layer) je podobně jako SSH založeno na kryptografii s

použitím veřejných klíčů. SSL můžete stejně dobře (stejně nejspíš ne )

implementovat do webového serveru Apache, stejně jako do serveru IIS. Pokud

používáte webový server Apache z nějaké standardní distribuce, budete mít

pravděpodobně zabudovánu podporu SSL přímo do kódu programu. Stačí ji pak pouze

aktivovat v konfiguračním souboru httpd.conf a nechat takto změněný

konfigurační soubor serverem načíst. Většina direktiv je velmi dobře

okomentována a vysvětlena. Pokud instalujete Apache ze zdrojového kódu, budete

muset pomocí direktiv přidat podporu SSL. Více vám napoví příkaz ./configure

-help. Po nainstalování budete muset ještě vygenerovat certifikáty pro váš

server. Tyto certifikáty musí být podepsány certifikační autoritou. Pokud

nechcete platit za podpis certifikátu, který jste si vytvořili jen pro vlastní

testovací účely, můžete si jej sami podepsat. Počítejte ale s tím, že prohlížeč

vás bude při každém otevření certifikátu upozorňovat na to, že jde o

samopodepsaný certifikát.



Stejně jako u SSH, se i zde můžete stát obětí útoku. Aby byl útočník v napadení

systému úspěšný, bude potřebovat vaši spolupráci. Pokud se vám tedy někdy

zobrazí varovná hláška o tom, že byl certifikát změněn, okamžitě věc prošetřete

a neklikejte bezhlavě na OK.





Kerberos



Kerberos je velmi zajímavý projekt, který je určen ke zvýšení bezpečnosti, a

proto se na něj podíváme podrobněji a vysvětlíme si jeho princip a funkce.



Počátky systému Kerberos sahají až do roku 1983, kdy se na MIT (Massachussets

Institute of Technolgy) ve spolupráci s firmami IBM a Digital začalo pracovat

na projektu Athena, jehož cílem bylo zapojení počítačů do sítě a jejich

následné využití k výuce. Vývojáři systému narazili během vývoje na mnoho

problémů, zejména s bezpečností dat a autentizací. Výsledek byl systém

Kerberos, který pracuje jako síťový autentifikační systém. V současné době je

Kerberos k dispozici ve dvou hlavních verzích, a to ve verzi 4 a 5 (přesněji IV

a V). My si nejdříve popíšeme, na jakém principu Kerberos pracuje, a pak se

podíváme na rozdíly mezi verzemi.



Autentifikace je v systému Kerberos založena na znalosti hesel. Tato hesla jsou

uložena na serveru Kerberos a kryptována standardním algoritmem DES, takže

mohou být v případě potřeby dešifrována. Z toho logicky plyne, že server musí

být nejen fyzicky, ale i programově naprosto bezpečný. Na serveru by neměly

běžet žádné jiné služby, a rovněž by měl být umístěn na místě, kde k němu

nebudou mít přístup nepovolané osoby. A jak tedy vypadá následná autentizace v

případě, že používáte server Kerberos? Pro uživatele se naprosto nic nemění.

Těm se zobrazí standardní přihlašovací dialog typu login: a password:. Důležité

je, jak vnitřně Kerberos pracuje, a co z toho pro uživatele plyne. Zde rovněž

vyvstávají rozdíly mezi verzemi IV a V. Podíváme se na obě varianty.





Kerberos IV.



Po zadání jména (login: ) odešle stanice serveru Kerberos zprávu s vaším

uživatelským jménem a informací o tom, že se chcete přihlásit do systému.

Server, jelikož zná vaše heslo a jméno, ověří vaše uživatelské jméno ve své

databázi, a pokud je v pořádku, odešle vám tiket, jejž zašifruje vaším heslem,

které také zná. Když tento tiket dorazí do vašeho systému, požádá vás systém o

zadání hesla. Pokud zadáte správné heslo, dešifruje jím systém tiket a přihlásí

vás do systému. V momentě, kdy vám systém povolí přihlášení, zlikviduje

informaci o vašem heslu a dále výhradně pracuje s tiketem.





Kerberos V.



V této verzi serveru Kerberos čeká stanice až do doby, kdy zadáte své heslo. Až

poté kontaktuje server a odešle mu zprávu s vaším uživatelským jménem a

aktuálním časem, který je šifrován vaším heslem. Server po obdržení této zprávy

zjistí ve své databázi vaše jméno a heslo, a pokusí se dešifrovat časový údaj.

Pokud vše proběhne v pořádku, pošle vám server tiket zašifrovaný vaším heslem.



Z informací tedy v praxi plyne následující:



- Hesla nejsou uložena na žádné stanici v síti kromě serveru Kerberos



- Hesla se při procesu autentizace nepřenáší po síti, pracuje se výhradně s

tikety.





Implementace Kerbera do stávající sítě



Implementace systému Kerberos není jednoduchou záležitostí. Je třeba si

rozmyslet všechny potřeby sítě, vzít v potaz každý detail. Ne pro každého je

použití systému Kerberos vhodným řešením. Samotná instalace již tak složitá

není.





Závěrem



Na závěr lze říci, že používání autentizačních mechanismů není snadná věc.

Pokud to s bezpečností myslíte vážně, musíte začít uvažovat o nahrazení

standardních mechanismů jejich bezpečnějšími alternativami. Proces přechodu na

bezpečnější alternativy není jednoduchou záležitostí a vyžaduje mnoho změn

současného systému. Tento přechod se vám však bohatě vyplatí a nakonec bude

sloužit ke spokojenosti správců sítě a uživatelů.







Nápady, dotazy, návrhy témat, jež vás zajímají a připomínky zasílejte na adresu

igm@centrum.cz. Na vaše dotazy k této problematice se pokusíme najít odpovědi.