Autor: Emkei | 25.3.2010 |
O bezpečnosti datových schránek bylo napsáno nespočet článků ze strany jak odborné, tak laické veřejnosti. Většina z nich si dovolím tvrdit nevyzněla příliš lichotivě a ani ten můj nebude výjimkou. Nebudu ovšem psát o certifikátech či doménách, nýbrž o přihlašovací proceduře, která je doslova výsměchem bezpečnosti, a to nemluvě o finančních nákladech na její nasazení.
O zabezpečení informačního systému datových schránek se zajímám již skoro půl roku a dodnes nezapomenu na moment, kdy programátoři zmiňovaného systému doplnili přihlašovací formulář o bezpečnostní prvek, jež vznešeně prezentovali jako Turingův test. Bylo to "shodou náhod" jen několik hodin před tiskovou konferencí, kde se mělo tristní zabezpečení ISDS (především díky nedůvěryhodným certifikátům) prezentovat. Ochrana vypadala hned na první pohled velmi primitivně a dokonce i počítačově negramotní novináři odhadli, že takový prvek nemůže představovat pro útočníka žádný problém. Měli pravdu. Ověření bylo založeno na řadě 12 čísel, ze kterého měl již přihlášený uživatel vypsat pouze určitá, například první, druhé, páté, osmé a desáté. Čtete správně, již přihlášený uživatel. Nejen že byl takový test naprosto neúčinný, neboť obtěžoval pouze reálné osoby a robot si s ním hravě poradil během zlomku vteřiny, ale i zbytečný, neboť již došlo k autentizaci uživatele. Když už programátor obtěžuje návštěvníky libovolným bezpečnostním prvkem, měl by jeho přítomnost využít co možná nejvíce a umístit jej ještě před proces autentizace, čímž by docílil nemožnosti strojového hádání hesel.
Pro překonání výše uvedené ochrany stačilo pouze několik málo řádků kódu, viz níže uvedený POC psaný v PHP:
Po uplynutí několika týdnů byla výše uvedená ochrana nahrazena klasickým captcha obrázkem, nutno dodat, že značně primitivním. Při představě, kolik uvedená implementace stála (lze snadno odhadnout z horentních sum, které jsou pravidelně vypláceny za provoz ISDS) to pravděpodobně málokterého programátora nechá chladným. Tento bezpečnostní prvek je používán dodnes a my si názorně ukážeme, jak snadné je ho překonat. Opět tedy obtěžuje pouze regulérní uživatele, boti jej překonají během okamžiku. Navíc se stále nachází až za procesem autentizace, jednoduše Kocourkov, jak má být.
K prolomení není potřeba nic víc než dvě open source utility, a to gocr (jocr) a balíček ImageMagick, konkrétně jeho část convert. Captcha implementovaná v ISDS vypadá následovně:
Použity jsou pastelové barvy na náhodně generovaném pozadí bez orámování. Obsah se skládá vždy z řady 5 číslic bezpatkového fontu, které jsou mírně zdeformované, ovšem dostatečně vzdálené jedna od druhé. Přestože se člověku takto světlý text špatně čte, pro stroj je jeho barva dostatečně kontrastní vzhledem k pozadí a lze jej tedy velmi snadno separovat. Použijeme příkaz convert s několika základními parametry:
convert captcha.gif -fuzz 5% -fill white -opaque \#c1c1c1 -median 1 captcha.png
Tímto příkazem jsme nahradili v obrázku captcha.gif pozadí šedé barvy (± 5 %) bílou barvou a odstranili vzniklý šum (-median 1). Upravený obrázek jsme následně uložili jako captcha.png.
Výsledek je nyní vhodný k předání OCR čtečce, spusťte proto utilitu gocr s následujícími parametry:
gocr -i captcha.png -e /dev/null -C 0-9
Za parametrem -i se nachází cesta k obrázku, -e zahodí chybový výstup a -C omezuje znaky, které jsou v textu obsaženy. Veškeré parametry vyjma prvního jsou nepovinné. Gocr nám nyní vypíše na standardní výstup 15864, což je skutečně řetězec obsažený v captcha. Jak sami vidíte, k prolomení postačí dva primitivní příkazy, není potřeba žádných sofistikovaných nástrojů či výjimečných vědomostí. Samozřejmě úprava obrázku není dokonalá, tudíž ani výstup utility gocr není vždy stoprocentní. To je ovšem pouze kosmetický problém, nevrátí-li OCR čtečka řadu 5 číslic, jednoduše si zažádáme o jiný obrázek, který bude čitelnější.
Datové schránky jsou dle mého názoru krok vpřed a v žádném případě nekritizuji jejich existenci, bohužel to samé nemohu říci o jejich návrhu z pohledu bezpečnosti. Těžko uvěřit, že se jedná o systém za miliony Korun, který navíc prošel bezpečnostním auditem…