Podle všeobecně přijímaného názoru připadá i v kvalitně napsaném softwaru jedna chyba na zhruba dva tisíce řádků kódu. Počet řádků ve složitých aplikacích přitom jde do milionů, v operačních systémech dokonce do desítek milionů. Počet chyb se tedy může pohybovat i v řádu desítek tisíc – a v tomto množství se samozřejmě mohou objevit i takové, které umožňují zneužití aplikace či OS.
Institut AV -Test, který se specializuje na antivirový výzkum a testování bezpečnostního softwaru, nedávno udělal test ochrany bezpečnostních řešení před zneužitím možných bezpečnostních děr v jejich programovém kódu. Princip zkoušek přitom spočíval právě v kontrole, zda výrobci důsledně používají metody ochrany ASLR a DEP (viz box). Jde o open source mechanismy, které se všeobecně doporučují jako standardní ochrana softwaru. Tady je názor Maria de Boera, research directora v Gartneru, na celou problematiku.
Domníváte se, že bezpečnostní software by měl být bezpečnější než běžné aplikace?
Samozřejmě ano. Především proto, že bezpečnostní aplikace, už ze samotné své podstaty, fungují s vysokými oprávněními a současně často pracují s neznámým a podezřelým obsahem. Navíc některé bezpečnostní aplikace běží na milionech počítačů. To dohromady z nich dělá lákavý terč. Nedělal jsem ale na toto téma žádný výzkum, takže porovnání nemůžu kvantifikovat. Je však známé, že bezpečnostní aplikace relativně běžně vykazují bezpečnostní díry. A je jisté, že se v nich budou objevovat další a další chyby. To je při rozsahu jejich kódu nevyhnutelné.
ASLR a DEP jsou důležité nástroje pro posílení zabezpečení aplikací. Zjednodušeně řečeno, tyto metody výrazně omezují možnost softwarového zneužití bezpečnostních děr v aplikacích. Samozřejmě ale nejde o nějaké zázračné řešení – ostatně objevují se další a další útoky, které se různými technikami pokoušejí ochranu pomocí ASLR a DEP obejít.
Měli by se uživatelé bezpečnostního softwaru zajímat, zda jejich výrobce využívá ASLR a DEP?
Určitě ano. Používání ASLR a DEP je standard, navíc je to open source, tedy bez jakýchkoli licenčních nákladů. Samozřejmě že existují i jiné metody, jak posílit zabezpečení aplikací před zneužitím bezpečnostních děr, ale žádná taková metoda se nevylučuje s těmito dvěma. Nevidím tedy vůbec žádný důvod, proč tyto ASLR a DEP nepoužívat.
Výrobci bezpečnostního softwaru, kteří nepoužívají technologie ASLR a DEP – nebo je aplikují nedůsledně – předkládají podle zjištění AV -Test různé důvody. Například tvrdí, že některé knihovny třetích stran ASLR a DEP nepoužívají…
To sice dává smysl, ale vzhledem k tomu, že máme rok 2014, není to úplně přesvědčivý argument. Vždyť DEP byl do kernelu systému Windows zavedený před deseti lety a ASLR jen krátce nato.
…nebo že jednotlivé soubory využívají proprietární technologie, které nejsou s ASLR a DEP kompatibilní…
Tady pozor: To jinými slovy znamená, že software se vytvořil způsobem, který neumožňuje implementovat běžné metody zabezpečení. Jistě, může jít o moderní techniky, které lze zabezpečit jinými metodami, ale spíše se obávám, že půjde o pozůstatky starých programovacích technik, jejichž používání by bylo vhodné co nejrychleji přehodnotit.
…nebo že soubory, které nejsou chráněné pomocí ASLR a DEP, se již aktivně nevyužívají, a proto nemá smysl uvažovat o nich jako o rizikovém faktoru.
No, to sice taky dává smysl, ale jen na první pohled. Proč však jsou takové soubory stále součástí aplikace? Upřímně, tomuto argumentu bych se vyhýbal. Vždyť je to vlastně přiznání, že software obsahuje historický balast… To není dobrá vizitka pro software ani pro jeho tvůrce.
…anebo že daný software využívá jiné metody ochrany jako CFI – Control Flow Integrity – či sandboxing.
Ano, to jsou pokročilé ochranné techniky a já jejich používání doporučuji. Nikoli však jako náhradu standardních metod, ale jako jejich doplněk. Opravdu platí, že ASLR a DEP jsou metody, jejichž využití nemá být možností, ale povinností.
ASLR – Address Space Layout Randomization (randomizace rozvržení paměťového prostoru jádra). Používá se náhodné rozmístění různých objektů místo užívání pevných adres, čímž významně komplikuje možnost zneužít bezpečnostní díry v aplikacích.
DEP – Data Execution Prevention (prevence spuštění dat). Slouží především k boji proti chybám typu buffer overflow. Spočívá v tom, že oblasti paměti se rozdělí na ty, v nichž lze spouštět programy, služby driverů apod., a na sféry, kde to je zakázané. Výsledkem je, že škodlivý kód nemůže zasahovat do oblastí paměti, kde pracují operační systém a jeho služby.
Karel Votruba
Poznámka: Článek vyšel v prosincovém vydání magazínu Security World