Portál AbcLinuxu, 4. května 2025 19:49
"Nějaký bezpečnostní klíče mi můžou bejt ukradený" řekne si průměrný uživatel počítače a zvesela odklikne firefoxí varování o neověřeném klíči a odešle nevědomky svá data prvnímu snifferovi na lince. Bylo to opravdu nutné? Stačilo pouze kliknout o jediné tlačítko vedle a jeho data by zůstala v bezpečí...
V tomto případě tkví problém v nevědomosti uživatelů, kteří většinou netuší, že připojení zabezpečené pomocí SSL je možné obejít několika docela jednoduchými triky. Ten nejjednodušší bych v modelové scéně popsal.
Mějme situaci, kdy se útočník dostane na router, firewall (či nějaký jiný průchozí stroj). Může pomocí sniffování získat veškerá data procházející počítačem, pokud nejsou zašifrována. Když ale vidí, že se někteří uživatelé připojují na služby zabezpečené pomocí SSL, má v zásadě dvě možnosti. A to vykašlat se na to, nebo 'přepojit' uživatele přes svůj vlastní rádoby SSL server. A jak teď na to? Více napoví následující vyobrazení (berme v potaz https připojení):
Nákres zpracoval Richard "Ricardo" Szlachta
Jak je vidět, uživatel si pouze myslí, že se připojuje k serveru, zatímco je napojen na záškodnické zařízení, kde je jsou jeho data rozšifrována, přečtena, znovu zašifrována a odeslána na server.
Nejdříve je tedy potřeba uživatelskou komunikaci přesměrovat někam, kde se s ní dá pracovat. Třeba na localhost routeru. To provedeme jednoduchou změnou netfilteru:
iptables -t nat -I PREROUTING -d server -p tcp --dport 443 \ -j DNAT --to 192.168.100.1:1111
Nyní pokaždé, když se uživatel připojí na server, bude cesta jeho dat končit na portu 1111 v routeru. Sem musíme připojit koncové zařízení SSL, ke kterému bychom napojili uživatele. To uděláme pomocí programu stunnel, který se používá k 'obalování' nešifrovaného toku dat SSL vrstvou. Vytváří něco jako tunel, jehož jedna strana je šifrovaná a druhá ne. Jeho použití:
stunnel [-d [ip:]port -r [ip:]port -c] -d [ip:]port port k naslouchání na localhostu. Parametr ip, pokud není uvedeno jinak, je localhost. -r [ip:]port port a ip, na které se má stunnel připojit, pokud mu přijde spojení na naslouchací port (uvedený parametrem -d). Ip, pokud není uvedeno jinak, je nastavena na localhost. -c stunnel se bude chovat jako klient. Určuje, na které straně bude spojení šifrované pomocí SSL. Pokud je uvedené, bude šifrovaná strana vzdálená (určená parametrem -r), výchozí je spojení šifrované na straně naslouchací (-d).
Pozn. Já používám verzi 3.26., protože nová verze používá místo klasického nastavení pomocí konfiguračních parametrů jakési soubory, které jsou podle mne zdlouhavé na tvorbu. Nicméně, pokud by někdo chtěl použít novou verzi, tak ho mohu odkázat na manuál k stunnel ;-).
Pro správné fungování stunnel jako serveru je ještě nutné vlastnit podepsaný certifikát. Je možné vytvořit vlastní, nicméně to má docela velkou chybu, o které ale až ke konci článku. Ať už někde certifikát seženeme, či si vytvoříme vlastní, je potřeba ho programu stunnel představit. A to buď nahrát do výchozího umístění (u mne /etc/ssl/certs/stunnel.pem) nebo určit pomocí parametru -p.
Pro naše účely tedy použijeme:
stunnel -d 1111 -r 1112
Nyní máme na portu 1112 nešifrovaná data. Ta je potřeba ale zase zašifrovat a poslat k serveru:
stunnel -c -d 1112 -r server:443
Toto lze použít pouze v případě, kdy má router stejnou IP adresu, jako by měla data před naším zásahem -> tzn. je routerem. Pokud to tak není, je třeba ještě správně nastavit zdrojovou adresu, aby to na serveru nevypadalo moc podezřele...:
iptables -t nat -I POSTROUTING -p tcp --dport 443 \ -d server -j SNAT --to client
Nyní už stačí jen spustit sniffer na portu 1112 a máme veškerá data uložena na disku.
Má to ale celé jeden háček. Pokud nepoužijeme v stunnel certifikát podepsaný nějakou autoritou, bude uživatel upozorněn a vybídnut k odmítnutí spojení a proto touto technikou nedokážeme ošálit pozorného uživatele, který nebude zbrkle klikat ve svém prohlížeči na "Přesto přijmout" a námi podvržený certifikát odmítne.
A jak se proti něčemu takovému bránit? Velice jednoduše. Ať už SSL používáme pro cokoli, je vždy vhodné si zkontrolovat informace o použitém certifikátu, nebo se alespoň nechat upozorňovat na změnu v certifikátu a cokoliv podezřelého odmítnout!
Doufám, že článek dal někomu potřebné informace k udržení svého soukromí v hlubokých vodách internetu plných zrádných mělčin a dravých žraloků. Důležitost SSL není vhodné opomíjet, pokud nám na našich datech záleží...
pokud někdo napíše, že je článek mizerný, objeví se pod tímto komentářem tvá reakce ve stylu "vítám konkrétní přípomínky, ale u tebe vidím jen plivnutí"Ano, pokud se skutečně jedná o pouhé plivnutí. Reaguji tak tehdy, když někdo vloží pod článek komentář, ve kterém není kritika, nýbrž pouhé odsouzení - aniž by připojil, co ho k takovému hodnocení vede. Kdyby sis přeci jen chtěl dát tu práci s prohledáváním diskuzí, objevil bys také spoustu kritických komentářů, ke kterým jsem se nijak nevyjadřoval. To proto, že v nich bylo řečeno, co je na článku špatného. Pak nemám důvod se autora zastávat, protože je na něm, aby svůj výtvor obhájil.
Koneckonců, jsi šéfredaktor (?), takže pokud chceš jen oslavné komentáře, tak mi administrativně zakaž přispívat, nebo diskuse moderuj a nevhodné příspěvky maž.Připadáš si ukřivděně, že jsem se ozval proti tvému komentáři, a proto teď vymýšlíš podobné nesmysly? Ty jsi plivl na článek, mně se to nelíbilo; tak nebuď ublížený a nepodsouvej mi nějakou administrátorskou zvůli.
Jaký je mezitím rozdíl ? Prakticky žádný ...To bohužel není příliš šťastný přístup, protože ačkoliv je v kontextu článku zřetelně patrné, co je tím myšleno, přesto nejde o synonyma.
Omlouvám se Vám, že jsem se snažil článek trochu zdramatizovat, příště se to rozhodně už nestane.Pokud narazis na ty hovorove vyrazy, smele v nich pokracuj.
Kódování a šifrování je naprosto stejná činnost, pouze se v různém kontextu pro tuto činnost používá různé označení, aby bylo zřejmé, za jakým účelem se tato činnost provádí. Kódování je převod symbolu na jiný symbol např. znak 'A' na 0x41. Stejně tak šifrování je převod symbolu na jiný symbol např. 'A' -> F#%.
pubescentůnení člověk mezi 15 a 18 rokem života adolescent? buď ty nebo já, jeden z nás dvou si plete pojmy a průjmy
Kdybych měl možnost zatrhnout - "přesto tomuto certifikátu věř, a zařvi teprve až se změní",To jako něco takového (Thunderbird 1.5.0.4, ale chovalo se to tak i v 1.0.x)?
localhost
si asi opravdu pro něj jako alias v hosts nenastavíte...PS: Sám ani mail server nastavit neumím, natož abych věděl, jak je možné nastavit jej tak, aby pro každou doménu posílal jiný certifikát (častý problém u hostingů)Nevím, já sice doma provozuju na jednom IMAP serveru více domén, ale všichni (tři
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.