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
- Nepřistupujte k virtuálnímu záplatování nahodile
- Dodržujte konzistentní a opakovatelný postup
Příprava
- 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)
- 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
- Předběžně autorizujte virtuální záplaty
- Virtuální záplaty je potřeba implementovat rychle
- Urychlete procesy správy a autorizační kroky
- Zařaďte virtuální záplaty do stejné skupiny jako aktualizaci antivirů nebo IDS
- 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
- 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
- Posouzení zranitelnosti a penetrační testy (interní nebo externí)
- 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
- Kontakt s dodavatelem (dodavatel odhalí zranitelnost)
- Zveřejnění zranitelnosti
- Bezpečnostní incident (nejnaléhavější situace - útok je aktivní)
- Náprava musí být okamžitá
Analýza
- Zjistěte název zranitelnosti (CVE)
- Zjistěte dopad zranitelnosti a pochopte úroveň kritičnosti
- K úniku informací nemusí být přistupováno stejně jako k SQL injection
- 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
- Zjistěte, zda je k dispozici zkušební kód pro zneužití zranitelnosti
- Pokud ano, stáhněte si ho a analyzujte
- Zjistěte, zda je k dispozici záplata nebo aktualizace
- 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
- 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
- Nepřehlédněte útoky, ani když se útočník snaží vyhnout detekci
- Rychlejší záplatování, ale častější úniky
- Mějte vždy na paměti výše uvedená pravidla
- Dodržujte pořadí výše zmíněných pravidel
- Vytvářejte virtuální záplaty tak, abyste zobecnili detekci a bylo důsledně splněno druhé pravidlo bez porušení prvního pravidla
- Vyhledejte všechny nezbytné podmínky pro úspěšný útok
- Získejte technická data
- Fuzzujte všechny “zajímavé” části útoku
- Veďte si poznámky a změny provádějte postupně
- Určete sadu proměnných, které jsou pro úspěch útoku důležité
- Proveďte analýzu pro každý vektor útoku zvlášť
- 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í
- Sledujte záplaty v rámci procesů správy záplat
- Vytvářejte příslušné change requesty, aby byla jejich existence a funkčnost zdokumentována
- Provádějte opakovaná pravidelná hodnocení
- Ověřte, zda můžete odstranit předchozí virtuální záplaty, pokud existuje aktualizace