S dotazi nás neváhejte kontaktovat: (420) 777 849 161 - Email info@vyroba-webu.cz

Statická analýza bezpečnosti aplikací

Statické testování zabezpečení aplikací – nebo SAST (Static application security testing) – je typ testování zranitelnosti softwarového zabezpečení. Při analýze SAST kontrolujeme a analyzujeme kód aplikace, abychom zjistily slabiny zabezpečení.

SAST best-practices

Dodržování doporučených postupů SAST je nezbytné pro bezpečný a zabezpečený kód, protože kontrola problémů přímo ve zdrojových souborech nám pomáhá detekovat bezpečnostní chyby v rané fázi vývoje, dříve než bude produkt spuštěn.

Z tohoto důvodu je nezbytné, abychom pomocí statické kontroly kódu zajistili, že kód je bezpečný. Spoléhat se ale pouze na manuální práci byť zkušeného bezpečnostního analytika samozřejmě nejde. I u projektu malého rozsahu je ruční kontrola možná maximálně jednorázově, těžko představitelné je procházet veškeré zdrojové soubory s každou verzí a u větších projektů. Na druhou stranu ani automatizované nástroje nejsou samospásné, mají určitou chybovost a vyžadují ruční kontrolu výsledků, tj. odstranění tzv. „falešných pozitiv“. Umožňují nám vyvarovat se „slepého“ procházení velkého množství kódu a minimalizovat čas potřebný na danou kontrolu. Krom toho, že nás bezpečně upozorní na chyby, které bychom mohli jednoduše přehlédnout, nás upozorní na místa se zvýšeným rizikem zranitelnosti dané použitými technologiemi, chybou programátora nebo nepřehledností kódu které můžeme následně prozkoumat ručně.

Automatizované nástroje

Nástroje SAST analyzují zdrojový kód nebo binární soubory vytvářených aplikací.

Přicházejí do hry v průběhu programování, abychom dostali bezpečnostní testy do dřívějších fází životního cyklu vývoje softwaru a mohli tak najít zranitelnosti v kódu co nejdříve.

Tím zabráníme nákladným opravám v pozdějších fázích vývoje.

Tyto nástroje provádí v principu 2 typy analýz:

  • Lokální analýzu
  • Analýzu toku dat

Lokální analýzou rozumíme hledání chyb v kontextu odpovídajícímu nejvýše jednomu zdrojovému souboru, maximálně do kontextu jednoho typu (třídy, struktury apod. dle typu programovacího jazyka), tj. bez hlubší znalosti vazeb mezi jednotlivými funkcemi/metodami a komponentami systému. Taková analýza je samozřejmě mnohem jednodušší a soutředí se na obvyklé chyby v daném programovacím jazyku, hledání slabých šifrovacích algoritmů, špatně/vůbec (ne)nakonfigurovaných bezpečnostních pravidel a ochran, hesla natvrdo uložená v kódu apod. Pro takovou analýzu je obvykle plně dostačující porozumět struktuře daného kódu na úrovni tokenizace vstupů a rozlišení základních stavebních bloků dle daného paradigmatu. To ve většině případů umí kompilátor daného jazyka, který lze často rozšířit o další kontroly, nebo jiné nástroje pro konkrétní jazyk. Například pro většinu i nekompilovaných jazyků je k dispozici tzv. „linter“, nástroj který kontroluje formátování kódu a nejjednodušší typy chyb. Tyto nástroje a nástroje primárně specializované pro hledání bugů v daném jazyce fungují na stejném principu jako tyto jednoduché bezpečnostní kontroly. Proto jsou typy základní bezpečnostní kontroly obvykle dostupné i pro volně dostupné nástroje pro kontrolu chyb v daném jazyce ve formě dodatečných pravidel.
Analýza toku dat se naproti tomu snaží pochopit celý životní cyklus dat získaných jakýmkoli způsobem jako vstup od uživatele, od jejich vstupu do systému až po jejich následné odeslání zpět uživateli nebo uložení do databáze, na souborový systém nebo do jiných externích systémů. Snaží se tedy hledat tok dat mezi hranicemi kontrolovaného systému, od vstupu do systému po opuštění daného systému a jejich vliv na další proměnné v průběhu pobytu.
Na základě těchto znalostí lze provádět pokročilé analýzy bezpečnostních chyb, z nichž základní a nejčastější je tzv. “taint (poskrvněný, zamořený, nakažený) analýza”, která vychází z předpokladu, že jakákoli proměnná kterou lze ovlivnit zvějšku externím uživatelem systému představuje potencionální bezpečnostní riziko. Pokud je takováto proměnná použita ve výrazu, který vytváří/modifikuje další proměnnou, je tato další rovněž brána jako podezřelá. Pokud je následně jakákoli z těchto proměnných použita v potencionálně nebezpečných operacích, které posílají data na výstup (například přímé dotazy do databáze, spuštění příkazu na operačním systému, generování výstupu pro uživatele apod.) analyzátor toto vyhodnotí jako potencionálně možný vektor útoku daného typu.
Takovouto analýzu obvykle provádějí pouze pokročilé SAST nástroje, z nichž většina je placených.

Kategorizace zranitelností

Při statické kontrole kódu narazíme na různé druhy zranitelností, ať už ručně nebo automatizovaným nástrojem. Pro většinu známých zranitelností existují obecně platná pojmenování daná zažitou praxí, proto většina kategorií je stejná napříč SAST nástroji, články na webu, výukovými materiály na školách i obecně uznávanými standardy jako je OWASP Top 10, PCI DSS apod. Dále je možné druhy zranitelností kategorizovat podle tříd závažnosti, které má každý produkt lehce odlišné, ale nejzávažnější zranitelnosti, které jsou zařazeny do dané nejvyšší hodnoty pro daný produkt, bývají až na drobné odchylky totožné.

Pokud se jedná o práci se statickými nástroji pro analýzu kódu a vyhodnocování výsledků, musíme vždy chápat, o jaký druh zranitelnosti se jedná, rozumět tomu jakým způsobem se docílí zneužití ve zdrojovém kódu, abychom mohli kvalifikovaně rozhodnout, zda je v daném místě tento nález skutečně relevantní a jedná se o potencionální možný vektor útoku, nebo nikoli. Proto jsme vypracovali katalog nejčastějších zranitelností společně s popisem:

  • Rizika, která daná zranitelnost představuje
  • Příčiny jakým způsobem se toto děje
  • Následným doporučením jak se tomuto problému vyhnout

Zejména doporučení ale nemusí být obecně platná pro daný programovací jazyk, dané konkrétní místo v kódu, použití konkrétní knihovny apod. Tyto doporučení lze ale chápat jako obecný příklad toho, jak se daný problém může v některých konkrétních výskytech řešit a může dále posloužit jako inspirace ke konkrétnímu doporučení v reálné situaci.

About fotodobias