Menu

Jak si Balíkobot pomohl bezpečnostní kontrolou od BlueGhostu

Každý internetový podnikatel dnes musí počítat se slabinami v zabezpečení webu, které mohou mít dalekosáhlé následky. Podívejte se, jak Modrý duch díky bezpečnostní kontrole pomohl službě Balíkobot.

Audit bezpečnosti může zabránit úniku velkého množství dat
Audit bezpečnosti může zabránit úniku velkého množství dat

Znáte Balíkobot? Jedná se o technologickou službu, která umožňuje přímé napojení na 18 přepravců při zachování smluvních podmínek mezi přepravcem a klientem. Je určena všem podavatelům zásilek. Od internetových obchodů, kterým pomáhá odbavit zásilky, až po výrobní firmy, které posílají desítky palet každý den. Balíkobot nabízí integraci systémů přepravních služeb přímo do administrace ERP (Enterprise resource planning), WMS (Warehouse management system), eshopů nebo do vlastního řešení. Součástí integrace je tisk adresních štítků, odeslání dat přepravcům, sledování zásilek (Track & Trace) a další služby probíhající automaticky nebo na jeden klik. Služba je na trhu od srpna 2014 a měsíčně pomáhá vyexpedovat přes 750 tisíc zásilek a více než 180 tisíc palet.

Na bezpečnost nesmíte nikdy zapomínat

Balíkobotu přibývají klienti výrazným tempem. Tím roste i objem přenášených dat skrze API. Aby se firma ujistila, že je vše v pořádku, nechala si od BlueGhostu vypracovat bezpečnostní kontrolu služby. Z té vyplynulo několik podnětů k vylepšení. Kontrola probíhala formou penetračního testování (neboli White Hat) a nebyly k ní poskytnuty žádné speciální oprávnění ani přístupy ke zdrojovému kódu. Z toho důvodu testování probíhalo z pozice uživatele, jako je například skladník eshopu, který zasílá balíky přes Balíkobot.

„Velmi si vážíme profesionálního přístupu společnosti BlueGhost, zejména pana Borka Hanzla, který pro nás zpracovával bezpečnostní audit. Balíkobot roste velkým tempem, a právě proto jsme chtěli znát odborný názor na bezpečnost služby. I díky odhalení problému jsme se utvrdili v tom, že to bylo správné rozhodnutí. Ve zkvalitňování bezpečnosti budeme pokračovat,“ sdělil Martin Šauer, jednatel společnosti.

Modrý duch a tajná infiltrace

Účelem penetračního testování je vyzkoušet všemožné vektory útoku a pokusit se tak najít nějakou slabinu. Vektor útoku je jinými slovy způsob napadení daného systému. K tomuto testování existují jak automatizované nástroje, tak postupy, kterými lze systém ručně prověřit.

Dobrou inspirací pro testování může být například OWASP (Open Web Application Security Project), který v rozsáhlých materiálech popisuje časté bezpečnostní zranitelnosti a způsoby, jak je odhalit i jak jim zabránit. Průběžně monitoruje výskyty jednotlivých zranitelností a čas od času vydá TOP 10 (EN) seznam.

Oblíbeným evergreenem tohoto dokumentu je například slabina XSS. Do různých polí ve formuláři lze vložit kus javascriptu, který po zobrazení v prohlížeči vyvolá útočný kód. Naštěstí je tento typ útoku na webu Balíkobot eliminován velmi přísně nastavenou hlavičkou Content-Security-Policy, která říká, že se smí spouštět skripty pouze ze stejného webu. Pokud by tedy došlo ke vložení útočného kódu, jednoduše by se nespustil.

Jak může vypadat odhalený problém

Naposledy v roce 2013 se v seznamu OWASP TOP 10 objevila slabina Insecure direct object reference (IDOR). Jde o typ chyby kde změnou identifikátoru můžete získat přístup k cizím datům. Například dokončíte-li objednávku, skončíte na url http://example.com/objednavka/konec/?id=10116 a vidíte tam třeba údaje pro zaplacení a souhrn objednávky. Pokud ale změníte číslo 10116 na jiné, třeba o jedna menší, najednou vidíte souhrn cizí objednávky.

Přesně tento typ chyby jsme na Balíkobotu odhalili a bohužel s nemalým potenciálním dopadem. Klíčem byla funkcionalita, která umožňuje každému eshopu, aby měl pod sebou více poboček. Tyto pobočky lze v horním menu přepínat pomocí jednoduchého selectu.

Výběr expedičního místa

Takto vypadá výběr expedičního místa v horním menu. Může obsahovat i jedinou položku.

S trochou technické zručnosti není problém do selectu vložit možnost „Cizí obchod“ a nastavit jí nějaké náhodné ID. Po zvolení této možnosti skutečně došlo k částečnému přepnutí na cizí výdejní místo a zobrazení profilu tohoto místa. Správně by měl přepínač výdejního místa zkontrolovat existenci pobočky, na kterou chceme přepnout, a zároveň její příslušnost k našemu uživatelskému účtu. K tomu ale bohužel nedocházelo.

Částečné přepnutí znamená, že bylo možné v tomto stavu zobrazit pouze stránku „profil expedičního místa“. Systém si zároveň někde pamatoval původní pobočku, a proto se například na stránce seznamu zásilek nic nezobrazilo.

Profil expedičního místa by ale sám o sobě mohl napáchat obrovské škody a dopustit únik osobních údajů zásilek, neboť na této stránce jsou zobrazeny také přístupové klíče k API. Skrze tuto API je pak možné zjišťovat informace o zásilkách a například i vytvářet nové, objednávat svoz anebo zásilky rušit.

Profil výdejního místa

Takto může vypadat profil výdejního místa. Údaje na tomto obrázku jsou pouze ukázkové, žádný Obchod.cz neexistuje.

Bezpečnostní díra se musí ihned řešit

Nejhorším možným scénářem zneužití této chyby by bylo, kdyby kdosi tuto chybu odhalil dříve a dlouhodobě ji využíval k získávání údajů. Takový útočník by totiž mohl získat přístupové klíče do API všech registrovaných klientů a díky tomu každý den stahovat údaje o zásilkách – adresy, jména, emaily, telefonní čísla, časy doručení a další. Vzhledem k možné vysoké závažnosti jsme tak tuto chybu nahlásili obratem, ještě před dokončením běžného reportu z testování.

Balíkobot se v takové situaci zachoval profesionálně a v podstatě během 10 minut začal situaci řešit. Opravit samotnou chybu bylo programátorsky velmi jednoduché. Nejsložitější bylo prověření zda-li došlo ke zneužití. V tomto ohledu pomohly dva klíčové nástroje: verzovací systém zdrojového kódu a přístupové logy na serveru. Verzovací systém GIT umožňuje dohledat historii všech úprav ve zdrojovém kódu. Tedy kdo, kdy a co změnil. Díky tomu je možné zjistit, kdy přesně se tato chyba ve zdrojovém kódu poprvé objevila.

Další pomůckou jsou přístupové záznamy, které si zaznamenává každý webový server. Ukládá, kdo kdy zobrazil jakou stránku. Například čtete-li tento článek, v záznamu bude informace o tom, kdy jste tuto stránku načetli, jakou máte IP adresu nebo třeba webový prohlížeč. Takových záznamů se vytváří obrovské množství a nezachrání vás před nimi smazání historie ani anonymní režim. Vyhledávat v těchto záznamech je tedy nutné automatizovaně.

Poté, co Balíkobot tyto záznamy prověřil, došel k závěru že nedošlo k žádnému zneužití (uf). Takové zneužití by totiž bylo v záznamech velmi nápadné. Dále přijal jistá další preventivní opatření. Mezi nimi byla i vynucená změna přístupových klíčů do API všem klientům. Mimo jiné Balíkobot plánuje měnit přístupové klíče pravidelně v horizontu přibližně jednoho až dvou let. Třešničkou na dortu jsou pak pravidelné bezpečnostní kontroly, aby byly osobní údaje o zásilkách dobře chráněny.

„Borek Hanzl z BlueGhostu nečekal až do finální podoby auditu a hned po odhalení chyby nás informoval. Mohli jsme tak ihned učinit kroky pro nápravu. Díky tomu nedošlo k žádnému zneužití dat,“ komentuje Lukáš Florián, vedoucí vývoje Balikobot.cz.

7 dobrých rad

Máte-li špinavé ruce, musíte si je čas od času umýt. Stejně tak vaše webové aplikace nezůstanou věčně zabezpečené, ale musíte je pravidelně kontrolovat a zabezpečovat. Jak váš byznys roste, měla by růst i vaše potřeba chránit zákazníky. Nechcete přece, aby se o vás psalo jako o Mallu v roce 2017. Pokud tedy bezpečnost berete vážně, mám pro vás 7 dobrých rad:

  • Pravidelně si nechte prověřit aplikaci z hlediska bezpečnosti.
  • Nemažte přístupové logy, archivujte je aby vám později mohly krýt záda.
  • Nespoléhejte na jednu vrstvu ochrany. Každé hledisko zabezpečte vícenásobně. Když jedna ochrana selže, tak pomůže jiná.
  • Používejte HTTPS pro přenos veškerých osobních údajů.
  • Používejte co nejaktuálnější verze nástrojů a knihoven.
  • Neschraňujte údaje, které nepotřebujete, a mažte stará data, která už nebudou používána, nebo je archivujte na externí místo.
  • Vytvořte si na všech svých doménách (raději i subdoménách) soubor security.txt. O jeho významu psal Michal Špaček.