Bezpečný návrh software, pokračování AI zranitelností a další
Naučte se, jak navrhnout bezpečný software nebo jak zařadit bezpečnost do vývojového cyklu. Znáte membership inference a další AI zranitelnosti? Závažná Sentry zranitelnost a tisíce leaknutých credentails z Dockeru.
🏆 Téma: Bezpečná architektura software
- Ne v každé firmě, která vytv áří software, je software architekt.
- Někteří software architekti nedbají na bezpečnost produktu.
- Je to časově náročné, nemají dostatečné znalosti nebo není dostatečný budget.
- Z těchto důvodů se stává neúčinný návrh architektury čtvrtou nejčastější zranitelností současných webových aplikací.
Secure by design
- Metodika vývoje software - software je od začátku vývoje navržený tak, aby byl bezpečný.
- Každá část vývojového cyklu software (SDLC) obsahuje kroky, které zajistí jeho bezpečnost:
- zapojení threat modelingu,
- zajištění dokumentace,
- neustálé ověřování a vyhodnocování hrozeb
- atd.
- Minimální požadavky:
- Každá user story by měla obsahovat požadavky na bezpečnost / zabezpečení.
- Každý projekt by měl mít aktuální projektovou a API dokumentaci, threat model.
- Software by měl být modulární, případně co nejvíce loosely coupled a cohesive.
- Funkcionalita by měla být dostatečně logována a monitorována.
Jak zařadit bezpečnost do SDLC?
- Automatizujte vše, co jde.
- Použijte statickou analýzu kódu pro testování zranitelností nebo lintery.
- Použijte např. Dependabot pro automatické upgradování závislostí.
- Pište automatické testy.
- Vytvořte pipeline, která bude spouštět testy, build a další kontroly.
- Použijte správce credentials a integrujte ho do pipeline.
- Použijte např. Terraform k tvorbě infrastruktury.
- atd.
- Zvyšte odhady při implementaci nové funkcionality - počítejte s bezpečnostními opatřeními.
- Postupně začněte psát technickou dokumentaci projektu a zaznamenávejte návrhová rozhodnutí a změny.
- Pravidelně na mítinku otevírejte téma zabezpečení a veďte si poznámky / úkoly jako výstup.
- Začněte se zajímat o OWASP top 10 (web, API, mobile…) a zabezpečte aplikaci proti těmto zranitelnostem.
- Vytvořte threat model pro každou novou funkcionalitu.
- Dělejte code review - nekontrolujte řádkování, case sensitivitu a další věci (to zvládne linter) - soustřeďte se na byznys logiku, návrhové vzory, výkon a zabezpečení.
- Tzn. reviewer musí projekt znát - bez dostatečného kontextu nedokáže udělat kvalitní code review.
- Napište mi, rád vám s tím pomůžu. 🙂
🎓 Učíme se společně
Co jsem se dozvěděl z přednášek, školení, čtení knih a dalších aktivit?
AI zranitelnosti
Manipulace se vstupem
- Představte si, že máme auto, které dokáže rozpoznávat dopravní značky a reaguje na ně.
- Když vidí stopku, tak zastaví, když vidí značku zpomal, tak zpomalí atd.
- Co stane v případě, kdy se bílá dopravní značka, která říká "Zpomal na 50 km/h" přestříká červenou barvou?
- Zastaví auto, protože si myslí, že jde o stopku? Může se to stát.
- Vstup je možné měnit takovým způsobem, že model začne reagovat jinak, než je běžné.
- Tato technika je často používaná v souvislosti se spamem a phishingem.
- Útočník experimuntuje se slovy v emailu tak, aby oklamal klasifikátor spamu.
- Nejlepším způsobem ochrany proti této zranitelnosti je mít co nejrobustnější model.
Membership inference
- Zranitelnost může mít velký dopad na soukromí nás všech.
- Týká se hlavně citlivých údajů a osobních informací.
- Je však poměrně složitá na vysvětlení, protože vyžaduje hlubší znalost problematiky a kombinuje několik dalších zranitelností, aby se docílilo kýženého výsledku.
- Představte si nemocniční software, jehož úkolem je na základě fotek pacientů určovat, zda mají rakovinu, nebo ne.
- Model byl vytrénován na velkém množství fotek a nemocnice nesmí zveřejňovat záznamy o pacientech.
- Útočník může ale chtít vědět, zda jeden konkrétní člověk (např. Jana) náhodou nebyl v trénovací sadě a nemá rakovinu.
- Útočník ví, že nemocniční AI byla vytrénována na lidech, kteří mají rakovinu, resp. na jejich fotkách.
- Útočník takové fotky nemá, ale má spoustu fotek zdravých lidí.
- Vytrénuje tedy inverzní model, který umí rozpoznávat zdravé lidi.
- Pokud chce zjistit, zda má Jana rakovinu, "stačí", aby jeho model řekl, že není zdravá.
- Příklad je velmi zjednodušený a samotný útok je složitější.
- Přesnost modelu útočníka se určuje porovnáním jeho odhadů se skutečnými štítky lékařských snímků.
- Pokud útočníkův model s velkou mírou pravděpodobnosti odhadne, zda byla konkrétní fotka použita k tréninku lékařského modelu, pak jde o úspěšný útok.
- Tento útok může mít vážné důsledky, protože daná osoba nemůže popřít, že je členem citlivé skupiny (ať už pacient s rakovinou nebo má určitou sexuální orientaci atd.).
- Čím víc se model učí rozpoznávat původní položky trénovací sady, tím větší vzniká problém.
- Tomu lze zabránit tím, že model bude malý a trénovací množina bude velká, nebo se do trénovací množiny přidá šum.
- Pokud vás zajímá AI bezpečnost a ochrana soukromí, přečtěte si můj článek, který se problematice věnuje.
📰 Co je nového
- Další #haxing videa, aneb hackněte a opravte své zranitelnosti
- Podívejte se, jak poslat zranitelnou zprávu přes formulář (Stored XSS).
- Podívejte se, jak si zobrazit zdroják backend aplikace (API).
- Podívejte se, jak vás někdo může hacknout zneužitím zranitelnosti třetí strany.
- Sledujte Bezpečný kód na YouTube, ať vám neuniknou další videa.
- API authentication bypass in Ivanti Sentry
- Zranitelnost umožňovala přístup k admin API endpointu bez nutnosti přihlášení.
- Endpoint umožňoval např. spouštění příkazů, změnu konfigurace nebo zápis do file systemu.
- Zranitelnost je považována za kritickou a dostala hodnocení 9.8 z 10.
- Společnost ji však považuje za málo pravděpodobnou, protože endpoint nebyl veřejně známý.
- Pomocí sady skriptu a nastavení však problém vyřešili.
- Jde o příklad druhé nejčastější API zranitelnosti “Selhání autentizace”.
- Docker images expose APIs and private keys
- report o rozšířenosti credentials a secrets uložených v docker obrazech
- Každý desátý obraz v sobě obsahuje credentials.
- 300.000 zkoumaných obrazů v sobě obsahuje:
- 52.107 privátních klíčů,
- 2.920 cloud credentials,
- 213 klíčů k sociálním sítím,
- 25 klíčů k finančním službám (Stripe, PayPal…).
- Vývojáři mylně předpokládají, že přihlašovací údaje vložené do nižší vrstvy obrazu kontejneru nejsou přístupné.
- Útočník může použít nástroj k rozbalení vrstev, nebo spustit shell v běžícím kontejneru, aby získal přístup k jakýmkoli secrets = kontejner není bezpečné paměťové médium.
- Použijte například Vault nebo jiný sytém pro správu credentials, o kterém píšu v předchozím newsletteru.
😂 Závěrečný ftípek: Jaké jsou dvě největší obavy CISO v oblasti kybernetické bezpečnosti? Každý, kdo ve firmě pracuje... a každý, kdo tam nepracuje.