Přeskočit na hlavní obsah

Virtuální záplatování

  • Vrstva vynucující zásady zabezpečení, která zabraňuje zneužití známé zranitelnosti
    • Řešení problémů mimo kód aplikace
  • Vrstva analyzuje a zachycuje útoky za běhu, takže se škodlivý kód nedostane do aplikace
  • Výsledný dopad je, že zdrojový kód aplikace nebyl změněn, ale pokus o zneužití zranitelnosti není úspěšný
  • Vhodné v situacích, kdy není možné nebo jednoduché okamžitě změnit kód
  • Výhody jsou následující
    • Škálovatelné řešení (implementováno na několika místech oproti instalaci na všechny hostitele)
    • Snižuje riziko do doby, než bude vydána záplata dodavatelem nebo než bude aplikována a testována
    • Menší pravděpodobnost vzniku konfliktů (nemění se knihovny)
    • Poskytuje ochranu kritických systémů
    • Snižuje čas a peníze vynaložené na nouzové záplatování
    • Umožňuje organizacím zachovat běžné cykly záplatování

Proč neopravit kód

  • Z čistě technického hlediska je číslo jedna oprava zjištěné zranitelnosti v kódu aplikace
  • V reálných situacích dochází k mnoha scénářům, kdy aktualizace kódu není snadná

Dostupnost záplaty

  • Pokud je zranitelnost identifikována v jiné aplikaci nebo knihovně, s největší pravděpodobností nebude možné zdrojový kód upravit
  • V takovém případě musí zákazník počkat na vydání oficiální opravy
  • Záplata nemusí být k dispozici delší dobu

Doba instalace

  • Ve většině organizací je proces záplatování časově náročný (způsobeno testováním)
    • Často se toto testování měří v měsících
    • Průměrná doba k opravě systémů činí 55 dní
    • Průměrná doba potřebná k opravě SQL injection je 138 dní
    • Průměrná doba zveřejnění exploitu je 6 dní
  • → tradiční procesy záplatování nejsou dostatečné

Oprava vlastního kódu je nákladově neúnosná

  • To platí v případech, kdy nejsou zranitelnosti nalezeny v rané fázi návrhu nebo testování
  • V takových případech je přepsání aplikace příliš nákladné

Legacy kód

  • Organizace může používat aplikaci nebo knihovnu, jejíž vývoj byl ukončen a není již podporována
  • V takovém případě není možné starý kód opravit
  • Dalším příkladem je, když organizace používá zastaralý kód, protože přidala vlastní funkce nad původní kód (upgrade není možný)

Outsourcovaný kód

  • Stále více podniků zadává vývoj aplikací externím dodavatelům
  • V mnoha případech oprava zranitelností vyžaduje zcela nový projekt
  • Organizace se potýkají se špatnými smlouvami, které nezahrnují “bezpečné kódování”

Nástroje

  • Zprostředkující zařízení - WAF, IPS
  • Web server pluginy - ModSecurity
  • Filtr aplikační vrstvy - ESAPI WAF

Robustní parsování HTTP a HTML

  • Parser musí být schopen porozumět specifickým vlastnostem protokolu včetně kódování obsahu (multipart/form-data, komprese)
  • Parser musí být flexibilní - mnoho hlaviček a prvků se nepoužívá podle RFC
    • V PHP se z názvů parametrů odstraňují počáteční a koncové mezery
  • Nástroj musí být alespoň stejně flexibilní jako web server
  • Systémy IDS/IPS, které toto nedokáží, mohou útočníci snadno obejít

Analýza protokolu

  • Nástroj musí HTTP stream rozdělit na logické entity (hlavičky, parametry, odesílané soubory)
  • Každý prvek se kontroluje samostatně (obsah, délka, počet)
  • Nástroj musí správně rozdělit síťový stream a porovnat požadavky a odpovědi

Proti-invazivní schopnosti

  • Moderní protokoly umožňují prezentovat stejné informace více způsoby
  • Detekce útoků musí být schopná prověřit vektor útoku v jakékoli podobě
  • Útočníci se vyhýbají detekčním systémům tím, že používají méně obvyklý vektor útoku (používání různých kódovacích znaků, nekanonizované názvy cest)
  • Nástroj musí před kontrolou požadavek normalizovat

Pravidla místo podpisů

  • Virtuální záplaty se nemohou spoléhat pouze na signatury (podpisy) - vyžadují robustnější pravidla
  • ModSecurity dokáže kombinovat a vytvářet složitější podmínky pomocí logických operátorů
  • Umožňuje používání transformačních funkcí a podmíněných provádění
  • Odhaluje útoky typu DoS, brute force, chyby v byznys logice

Metodologie

  1. Nepřistupujte k virtuálnímu záplatování nahodile
  2. Dodržujte konzistentní a opakovatelný postup

Příprava

  1. Připravte veškeré podklady k vytvoření záplaty ještě před tím, než dojde k nějakému incidentu (pak jste tlačeni časem)
  2. Zaregistrujte se do všech newsletterů s upozorněními dodavatele komerčního software nebo knihovny
    • Tím zajistíte, že budete informováni v případě, že dodavatel zveřejní zranitelnosti
  3. Předběžně autorizujte virtuální záplaty
    • Virtuální záplaty je potřeba implementovat rychle
    1. Urychlete procesy správy a autorizační kroky
    2. Zařaďte virtuální záplaty do stejné skupiny jako aktualizaci antivirů nebo IDS
  4. Nasaďte ModSecurity v předstihu
    • Během reakce na incident je čas kritický a je nevhodné získávat svolení s instalací nového softwaru
    • Je nejlepší jej mít minimálně nainstalovaný a připravený k aktivaci
  5. Auditujte logy

Identifikace

  • Fáze nastává, když se organizace dozví o zranitelnosti

Proaktivní metoda

  • Organizace sama vyhodnotí svou pozici a provede následující kroky
  1. Posouzení zranitelnosti a penetrační testy (interní nebo externí)
  2. Revize zdrojového kódu
  • Tyto úkoly jsou důležité pro aplikace vytvářené na zakázku
    • Nejspíš totiž existuje externí subjekt, který má stejný kód

Reaktivní metoda

  1. Kontakt s dodavatelem (dodavatel odhalí zranitelnost)
  2. Zveřejnění zranitelnosti
  3. Bezpečnostní incident (nejnaléhavější situace - útok je aktivní)
    • Náprava musí být okamžitá

Analýza

  1. Zjistěte název zranitelnosti (CVE)
  2. Zjistěte dopad zranitelnosti a pochopte úroveň kritičnosti
    • K úniku informací nemusí být přistupováno stejně jako k SQL injection
  3. Zjistěte, jakých verzí se zranitelnost týká
    • Tím určíte, zda se vás zranitelnost týká
    • Některé zranitelnosti se mohou projevit pouze při určité konfiguraci
  4. Zjistěte, zda je k dispozici zkušební kód pro zneužití zranitelnosti
    1. Pokud ano, stáhněte si ho a analyzujte
  5. Zjistěte, zda je k dispozici záplata nebo aktualizace
  6. Zahajte příslušné procesy, pokud je aktualizace nebo záplata k dispozici, případně zajistěte virtální záplatu

Vytváření virtuální záplaty

Žádné falešně pozitivní výsledky

  1. Neblokujte legitimní provoz za žádných okolností
  • Poskytuje lepší ochranu, ale často jde o manuální proces (nelze škálovat)

Žádné falešně negativní výsledky

  1. Nepřehlédněte útoky, ani když se útočník snaží vyhnout detekci
  • Rychlejší záplatování, ale častější úniky
  1. Mějte vždy na paměti výše uvedená pravidla
  2. Dodržujte pořadí výše zmíněných pravidel
  3. Vytvářejte virtuální záplaty tak, abyste zobecnili detekci a bylo důsledně splněno druhé pravidlo bez porušení prvního pravidla
  4. Vyhledejte všechny nezbytné podmínky pro úspěšný útok
    1. Získejte technická data
    2. Fuzzujte všechny “zajímavé” části útoku
    3. Veďte si poznámky a změny provádějte postupně
  5. Určete sadu proměnných, které jsou pro úspěch útoku důležité
  6. Proveďte analýzu pro každý vektor útoku zvlášť
  7. Definujte pravidla pro každý parametr na každé stránce

Implementace a testování

  • Pro testování je vhodné použít webové klienty s příkazovým řádkem (cURL, wget, Burp proxy)
  • Tyto nástroje umožní manipulovat s daty libovolným způsobem
  • Můžete selektivně zvýšit logování pro danou IP adresu

Zotavení

  1. Sledujte záplaty v rámci procesů správy záplat
  2. Vytvářejte příslušné change requesty, aby byla jejich existence a funkčnost zdokumentována
  3. Provádějte opakovaná pravidelná hodnocení
    1. Ověřte, zda můžete odstranit předchozí virtuální záplaty, pokud existuje aktualizace

Kam dál

Cheat sheety

Checklisty