Každý z týmu ][ má své vlastní preference týkající se softwaru a utilit pro
pentest. Po konzultaci jsme zjistili: výběr se liší natolik, že můžeme udělat
opravdová gentlemanská sada osvědčených programů. Tak jsme se rozhodli. Na
Nedělejte z toho mišmeška, celý seznam je rozdělen do témat. Dnes se podíváme
analyzátory statického kódu
vyhledávat zranitelná místa v aplikacích, když
ruce - jejich zdroje.

Dostupnost zdrojových kódů programů výrazně zjednodušuje vyhledávání zranitelností.
Místo slepé manipulace s různými parametry, které
jsou přeneseny do aplikace, díky čemuž je mnohem snazší vidět ve zdrojích, jak to
procesy. Například pokud jsou data od uživatele přenášena bez kontrol a
transformace dosáhnou SQL dotazu – máme zranitelnost typu SQL injection.
Pokud se dostanou na výstup v HTML kódu, dostaneme klasické XSS. Z
statický skener musí takové situace jasně detekovat, ale aby
Bohužel to není vždy tak snadné, jak se zdá.

Moderní kompilátory

Může se zdát vtipné, ale jedna z nejúčinnějších analyzátory
kód
jsou sami kompilátoři. Samozřejmě jsou určeny výhradně pro
další, ale jako bonus každý z nich nabízí dobrý ověřovač
zdrojové kódy, schopné odhalit velké množství chyb. Proč ne?
šetří? Zpočátku je nastavení pro takové ověření kódu nastaveno dostatečně
loajální: v důsledku toho se spustí kompilátor, aby se programátor nezmátl
nadávat jen v případě nejzávažnějších chyb. Ale marně - když dáte
úroveň varování je vyšší, je docela možné vykopat mnoho pochybných míst
v kódu. Vypadá to asi takhle. Řekněme, že v kódu chybí
kontrola délky řetězce před zkopírováním do vyrovnávací paměti. Skener najde funkci,
kopírování řetězce (nebo jeho fragmentu) do vyrovnávací paměti pevné velikosti bez
předběžná kontrola jeho délky. Sleduje trajektorii přenosu
argumenty: od vstupních dat po zranitelnou funkci a vzhled: je to možné
zvolte délku řetězce, která by způsobila přetečení ve zranitelném místě
funkce a nebyl by přerušen kontrolami, které tomu předcházejí. V případě takové
Žádná kontrola není, najdeme téměř 100% přetečení bufferu. Hlavní obtíž je
slouží k testování kompilátoru – přimět jej, aby „spolknul“ kód někoho jiného.
Pokud jste někdy zkoušeli zkompilovat aplikaci ze zdroje, pak víte
jak obtížné je uspokojit všechny závislosti, zejména ve velkých projektech. Ale
výsledek stojí za to! Kromě kompilátoru jsou navíc vestavěna výkonná IDE
nějaké jiné prostředky pro analýza kódu. Například na další
části kódu ve Visual Studiu vydá varování o použití v
smyčka funkce _alloca, která může rychle přetéct zásobník:

char *b;
dělat (
b = (char*)_alloca(9)
) zatímco (1)

Je to díky statickému analyzátoru PREfast. Stejně jako FxCop,
PREfast je nativně navržen pro analýzu spravovaného kódu
distribuován jako samostatná utilita a teprve později se stal součástí Visual Studia.

RATS - Rough Auditing Tool for Security

Webové stránky: www.securesoftware.com
Licence: GNU GPL
Platforma: Unix, Windows
Jazyky: C++, PHP, Python, Ruby

Chyba k chybě - nesoulad. Některé z chyb, které programátoři dělají, jsou
je nekritická a ohrožuje pouze nestabilitu programu. Jiní naopak
umožňují vkládat kód shellu a provádět libovolné příkazy na dálku
server. Obzvláště riskantní v kódu jsou příkazy, které umožňují spouštět buffer
přetečení a další podobné typy útoků. Takových příkazů je v případě C/C++ spousta
to jsou funkce pro práci s řetězci (xstrcpy(), strcat(), gets(), sprintf(),
printf(), snprintf(), syslog()), systémové příkazy (access(), chown(), chgrp(),
chmod(), tmpfile(), tmpnam(), tempnam(), mktemp()) a také systémové příkazy
volání (exec(), system(), popen()). Ručně zkontrolujte veškerý kód (zejména
pokud se skládá z několika tisíc řádků) je docela únavné. Což znamená, že je to možné
Je snadné přehlédnout předávání nekontrolovaných parametrů nějaké funkci.
Speciální nástroje auditu mohou úkol značně usnadnit, včetně
slavný nástroj KRYSY (Hrubý auditní nástroj pro bezpečnost) z
známá společnost Fortify. Nejen, že úspěšně zvládne zpracování kódu,
napsaný v C/C++, ale umí zpracovávat i skripty v Perlu, PHP a Pythonu.
Databáze nástrojů obsahuje působivý výběr s podrobným popisem problému
místa v kódu. S pomocí analyzátoru zpracuje jí krmený šťovík a
se pokusí identifikovat chyby, načež poskytne informace o nalezených závadách.
KRYSY
funguje přes příkazový řádek, a to jak pod systémy Windows, tak *nix.

Yasca

Webové stránky: www.yasca.org
Licence: Open Source
Platforma: Unix, Windows
Jazyky: C++, Java, .NET, ASP, Perl, PHP, Python a další.

Yasca stejně jako RATS nepotřebuje instalaci a nemá žádnou
pouze konzolové rozhraní, ale také jednoduché GUI. Vývojáři doporučují
spustit utilitu přes konzoli - říkají, že tímto způsobem je více možností. Je to legrační co
Engine Yasca je napsán v PHP 5.2.5 a interpret (ve své nejořezanější verzi)
volba) leží v jedné z podsložek archivu s programem. Celý program je logicky
sestává z front-endu, sady zásuvných modulů pro skenování, generátoru sestav a
samotný motor, díky kterému se všechna ozubená kola otáčejí společně. Pluginy
vyhozené do adresáře pluginů – tam je také potřeba nainstalovat další
doplňky. Důležitý bod! Zahrnuty tři standardní pluginy
Yasca
, mají nepříjemné závislosti. JLint, který skenuje Java
.class, vyžaduje jlint.exe v adresáři resource/utility. Druhý
plugin - antiC, používaný k analýze zdrojů Java a C/C++, vyžaduje antic.exe
ve stejném adresáři. A aby PMD, které zpracovává kód Java, fungovalo, potřebujete
nainstalované v systému Java JRE 1.4 nebo vyšším. Zkontrolujte správnost instalace
můžete zadáním příkazu "yasca ./resources/test/". Jak skenování vypadá?
Po zpracování odrůd přidávaných do programu Yasca dává výsledek jako
speciální zpráva. Umožňuje vám to například jeden ze standardních pluginů GREP
pomocí vzorů popsaných v souborech .grep označte zranitelné struktury a
Snadno identifikujte řadu zranitelností. Sada takových vzorů je již zahrnuta
program: hledání slabého šifrování, autorizace pomocí „heslo se rovná přihlášení“,
možné SQL injekce a mnoho dalšího. Kdy budete chtít vidět v reportáži
Chcete-li získat podrobnější informace, nebuďte líní nainstalovat další pluginy. Co
Jedna věc, která stojí za zmínku, je, že s jejich pomocí můžete navíc naskenovat kód
.NET (VB.NET, C#, ASP.NET), PHP, ColdFusion, COBOL, HTML, JavaScript, CSS,
Visual Basic, ASP, Python, Perl.

Cppcheck

Webová stránka:
Licence: Open Source
Platforma: Unix, Windows
Jazyky: C++

Vývojáři Cppcheck rozhodl se neztrácet čas maličkostmi, a proto
Chytají pouze přísně definované kategorie chyb a pouze v kódu C++.
Nečekejte, že program bude duplikovat varování kompilátoru – obejde se bez něj
nápověda. Nebuďte proto líní nastavit kompilátor na maximální úroveň
varování a pomocí Cppcheck zkontrolujte úniky paměti a porušení
alokační-dealokační operace, různé přetečení bufferu, využití
zastaralé funkce a mnoho dalšího. Důležitý detail: Vývojáři Cppcheck
Snažili jsme se snížit počet falešných poplachů na minimum. Proto pokud
program zaznamená chybu, můžete s největší pravděpodobností říci: „Ona opravdu
ano!" Analýzu můžete spustit buď z konzole, nebo pomocí nice
GUI rozhraní napsané v Qt a běžící na jakékoli platformě.

gradit

Webová stránka:
www.justanotherhacker.com/projects/graudit.html
Licence: Open Source
Platforma: Unix, Windows
Jazyky: C++, PHP, Python, Perl

Tento jednoduchý skript v kombinaci se sadou podpisů vám umožní najít řadu
kritické zranitelnosti v kódu a vyhledávání se provádí pomocí všech
známý nástroj grep. Je nevhodné zde dokonce zmiňovat rozhraní GUI: to je vše
provádí přes konzolu. Existuje několik kláves pro spuštění, ale většina
V jednoduchém případě stačí jako parametr zadat cestu ke zdrojům:

gradit /cesta/k/skenování

Odměnou za vaše úsilí vám bude pestrá zpráva o potenciálně zneužitých
místa v kódu. Musím říci, že kromě samotného skriptu (a to je pouze 100 řádků
kód v Bash), hodnota pochází z databází podpisů, ve kterých
regulární výrazy a názvy potenciálně zranitelných funkcí v různých jazycích. Výchozí
jsou zahrnuty základy pro Python, Perl, PHP, C++ - můžete si vzít soubory ze složky podpisy
a použít ji ve svém vlastním vývoji.

SWAAT

Webové stránky: www.owasp.org
Licence: Open Source
Platforma: Unix, Windows
Jazyky: Java, JSP, ASP .Net, PHP

Pokud graudit používá k nastavení podpisu zranitelnosti textové soubory,
pak dovnitř SWAAT– progresivnější přístup využívající soubory XML. Takhle
Typický podpis vypadá takto:

vuln match - regulární výraz pro vyhledávání;
typ – označuje typ zranitelnosti:
závažnost – označuje úroveň rizika (vysoká, střední nebo nízká)
alt - alternativní kód k vyřešení problému

SWAATčte databázi podpisů a pomocí ní se snaží najít problematické
sekce kódu ve zdrojových kódech v Javě, JSP, ASP .Net a PHP. Základ je neustále
roste a kromě seznamu „nebezpečných“ funkcí obsahuje typické chyby v
pomocí formátování řetězců a psaní SQL dotazů. Je pozoruhodné, že
že program je napsaný v C#, ale funguje dobře pod niks, díky
k projektu Mono - otevřená implementace platformy .Net.

PHP skener chyb

Webová stránka:
raz0r.name/releases/php-bug-scanner
Licence: Freeware
Platforma: Windows
Jazyky: PHP

Pokud potřebujete provést statickou analýzu PHP aplikace, doporučuji
Snaž se PHP skener chyb, kterou napsal náš autor - raz0r. Práce
Program je založen na skenování různých funkcí a proměnných v PHP skriptech,
které lze použít při webových útocích. Popis takových
situace je formalizována ve formě tzv. presetů a program již je
Obsahuje 7 speciálních předvoleb seskupených podle kategorií:

  • provádění kódu;
  • provedení příkazu;
  • procházení adresářů;
  • globals přepsat;
  • zahrnout;
  • SQL injekce;
  • smíšený.

Je vtipné, že je program napsaný
PHP/WinBinder a zkompilován
bamcompile , takže vypadá jako běžná aplikace pro Windows. Přes
pohodlné rozhraní, může pentester povolit nebo zakázat analýzu kódu na přítomnost
určité zranitelnosti.

Skřítek

Webová stránka:
pixybox.seclab.tuwien.ac.at
Licence: Freeware
Platforma: Unix, Windows
Jazyky: PHP

Nástroj je založen na skenování zdrojového kódu a vytváření grafů
datové toky. Tento graf sleduje cestu dat, která přicházejí
z vnějšku programu - od uživatele, z databáze, z nějakého externího
plugin atd. Tímto způsobem se vytvoří seznam zranitelných bodů (nebo vchodů) do
aplikací. Pomocí vzorů, které popisují zranitelnosti, Pixy takové kontroluje
bodů a umožňuje identifikovat zranitelnosti XSS a SQL. Navíc samotné grafy, které
vytvořené během analýzy, lze zobrazit ve složce grafů (např.
xss_file.php_1_dep.dot) - to je velmi užitečné, abyste pochopili proč
ta či ona část kódu je považována za zranitelnou Pixy. Obecně samotný vývoj
extrémně vzdělávací a ukazuje, jak fungují pokročilé nástroje
statická analýza kódu. Na stránce

dokumentace, vývojář jasně hovoří o různých fázích práce
program, vysvětluje logiku a algoritmus toho, jak by měl být program analyzován
ten či onen kus kódu. Samotný program je napsán v Javě a distribuován v
open source a na domovské stránce je dokonce jednoduchá online služba
abyste zkontrolovali, zda váš kód neobsahuje chyby zabezpečení XSS.

Unce 6

Webové stránky: www.ouncelabs.com/products
Licence: Shareware
Platforma: Windows

Stávající bezplatná řešení jsou bohužel stále pod úrovní komerčních
analogy. Stačí si prostudovat kvalitu a podrobnost zprávy, která je
Unce 6
– a pochopit proč. Program je založen na speciální
Modul analýzy jádra Unce, který kontroluje soulad kódu s pravidly
a zásady sestavené týmem profesionálních pentesterů,
nashromáždil zkušenosti známých bezpečnostních společností, hackerské komunity a také
bezpečnostní normy. Program detekuje různé zranitelnosti v kódu: from
Přetečení vyrovnávací paměti před injekcemi SQL. V případě potřeby se může Unce snadno integrovat
populární IDE pro implementaci automatické kontroly kódu během sestavování
každé nové sestavení vyvíjené aplikace. Mimochodem,
Vývojářskou společnost Ounce Labs letos v létě koupila samotná IBM. Tak
že produkt se bude s největší pravděpodobností nadále vyvíjet jako součást jednoho z
Komerční aplikace IBM.

Klocwork Insight

Webové stránky: www.klocwork.com
Licence: Shareware
Platforma: Windows
Jazyky: C++, Java, C#

Po dlouhou dobu tento opět komerční produkt implementoval statiku
Skenování kódu pouze pro C, C+ a Java. Ale jakmile vyšlo Visual Studio
2008 a .NET Framework 3.5, vývojáři oznámili podporu pro C#. Odjel jsem pryč
program na dvou svých pomocných projektech, které napsal ve spěchu
na Sharpe a program identifikoval 7 kritických zranitelností. Je dobře, že oni
psáno pouze pro interní použití :). Klocwork Insight
původně nakonfigurován primárně pro práci ve spojení s integrovanými prostředími
rozvoj. Integrace se stejným Visual Studiem nebo Eclipse je mimořádně dobrá
úspěšné - začnete si vážně myslet, že by taková funkce měla existovat
implementováno v nich standardně :). Pokud neberete v úvahu problémy s logikou
potom problémy s výkonem aplikací a výkonem Klocwork Insight
dělá skvělou práci při hledání přetečení vyrovnávací paměti a chybějícího filtrování
vlastní kód, schopnosti SQL/Path/Cross-site injection, slabé
šifrování atd. Další zajímavou možností je vybudování popravčího stromu
aplikace, která vám umožní rychle pochopit obecný princip aplikace a
samostatně sledovat například zpracování jakéhokoli uživatele
vstup. A pro rychlé vytvoření pravidel pro kontrolu kódu je to dokonce navrženo
speciální nástroj - Klocwork Checker Studio.

Statická analýza zabránění krytí

Webové stránky: www.coverity.com/products
Licence: Shareware
Platforma: Windows
Jazyky: C++, Java, C#

Jeden z nejznámějších analyzátorů statického kódu v C/C++, Java a C#.
Řešení podle jeho tvůrců využívá více než 100 tisíc
vývojáři z celého světa. Dobře promyšlené mechanismy umožňují automatizaci
hledat úniky paměti, nezachycené výjimky, problémy s výkonem a
bezpečnostní zranitelnosti, samozřejmě. Produkt podporuje různé platformy,
kompilátory (gcc, Microsoft Visual C++ a mnoho dalších) a také se integruje s
různá vývojová prostředí, především Eclipse a Visual Studio. V jádru
code traversal nepoužívá hloupé traversal algoritmy od začátku do konce, ale něco
jako debugger, který analyzuje, jak se program bude chovat v různých
situace po poradě pobočky. Tímto způsobem je dosaženo 100% pokrytí kódem.
Tak komplexní přístup bylo potřeba mimo jiné plně analyzovat
vícevláknové aplikace speciálně optimalizované pro běh na více jádrech
procesory. Centrum integrity krytí umožňuje najít takové chyby
jako race condition (chyba návrhu v multitaskingovém systému, ve kterém
chod systému závisí na pořadí, ve kterém jsou části kódu vykonávány), uváznutí
a mnohem víc. Proč to obraceče potřebují? Zeptejte se na to vývojářů 0day
exploity pro Firefox a IE :).

OWASP Code Crawler

Webové stránky: www.owasp.org
Licence: GNU GPL
Platforma: Windows
Jazyky: Java, C#, VB

Tvůrce tohoto nástroje, Alessio Marziali, je autorem dvou knih o ASP.NET,
renomovaný kodér vysoce zátěžových aplikací pro finanční sektor, stejně jako
pentester. V roce 2007 zveřejnil informace o kritických zranitelnostech v 27
webové stránky italské vlády. Jeho duchovní dítě - OWASP Code Crawler
navržený pro statickou analýzu kódu .NET a J2EE/JAVA, volně dostupný
na internetu a koncem roku autor slibuje vydání nové verze programu s
mnohem více funkcí. Ale to nejdůležitější již bylo implementováno -
analýza zdrojových kódů v C#, Visual Basic a Java. Jsou vybrány soubory ke skenování
přes rozhraní GUI a skenování se spustí automaticky. Pro každého
problémová část kódu, popis zranitelnosti se zobrazí v části Hrozba
Popis. Pravda, pole Směrnice OWASP pravděpodobně ukazuje cestu
Bohužel řešení problému zatím není k dispozici. Ale můžete použít
experimentální funkce skenování kódu na vzdáleném počítači, přístupná
na záložce Remote Scan. Autor slibuje vážně upgradovat tuto funkci a in
včetně agregace aplikačních zdrojů pro analýzu přímo ze systému
kontrola verzí.

VAROVÁNÍ

Informace jsou prezentovány pro informační účely a především pro zobrazení
jak se vývojáři mohou vyhnout kritickým chybám během vývoje
aplikací. Za použití získaných znalostí k nelegálním účelům autor ani
redakce nenese odpovědnost.

Lidé dělají chyby při psaní kódu v C a C++. Mnoho z těchto chyb je nalezeno díky -Wall, asercím, testům, pečlivým kontrolám kódu, varováním od IDE, vytváření projektu s různými kompilátory pro různé OS běžící na různém hardwaru a tak dále. Ale i přes všechna tato opatření zůstávají chyby často neodhaleny. Statická analýza kódu může situaci trochu zlepšit. V této poznámce se seznámíme s některými nástroji pro provádění této velmi statické analýzy.

CppCheck

CppCheck je bezplatný, open source (GPLv3) multiplatformní statický analyzátor. Je k dispozici v balíčcích mnoha *nix systémů ihned po vybalení. CppCheck lze také integrovat s mnoha IDE. V době psaní tohoto článku je CppCheck živý, rozvíjející se projekt.

Příklad použití:

cppcheck ./src/

Příklad výstupu:

: (chyba) Běžná chyba realloc: "numarr" zrušeno, ale ne
osvobozen po neúspěchu

: (chyba) Nebezpečné použití "n" (strncpy ne vždy
null-ukončit to)

CppCheck je dobrý, protože funguje docela rychle. Není důvod nepřidat jeho běh do systému průběžné integrace, aby se opravila všechna, všechna, všechna varování, která zobrazuje. I když se mnoho z nich v praxi ukáže jako falešně pozitivní.

Clang statický analyzátor

Další bezplatný, open-source, multiplatformní statický analyzátor. Je součástí tzv. LLVM stacku. Na rozdíl od CppChecku funguje výrazně pomaleji, ale najde i mnohem závažnější chyby.

Příklad vytváření sestavy pro PostgreSQL:

CC =/ usr/ local/ bin/ clang38 CFLAGS ="-O0 -g" \
./ configure --enable-cassert --enable-debug
gmake vyčistit
mkdir../report-201604/
/ usr/ local/ bin/ scan-build38 -o ../ report-201604 / gmake -j2

Příklad generování sestavy pro jádro FreeBSD:

# pomocí vlastního MAKEOBJDIR vám umožní sestavit jádro bez roota
mkdir/tmp/freebsd-obj
# samotná montáž
COMPILER_TYPE =clang / usr/ local/ bin/ scan-build38 -o ../ report-201604 / \
make buildkernel KERNCONF =GENERIC MAKEOBJDIPREFIX =/ tmp/ freebsd-obj

Myšlenka, jak asi tušíte, je provést vyčištění a poté spustit sestavení pod skenováním-build.

Výstupem je velmi pěkná HTML sestava s podrobným vysvětlením, možností filtrovat chyby podle typu a podobně. Určitě se podívejte na web, jak to vypadá.

V této souvislosti mi nedá nepoznamenat, že ve světě Clang/LLVM existují i ​​nástroje dynamický analýzy, tzv. „sanitizery“. Existuje mnoho z nich, nacházejí velmi skvělé chyby a pracují rychleji než Valgrind (i když pouze na Linuxu). Diskuse o dezinfekčních prostředcích je bohužel nad rámec této poznámky, proto si je přečtěte sami.

PVS-Studio

Uzavřený statický analyzátor distribuovaný za peníze. PVS-Studio funguje pouze pod Windows a pouze s Visual Studio. Existuje mnoho informací o existenci linuxové verze, ale nejsou dostupné na oficiálních stránkách. Pokud jsem pochopil, cena licence je projednávána individuálně s každým klientem. Zkušební verze k dispozici.

Testoval jsem PVS-Studio 6.02 na Windows 7 SP1 běžícím pod KVM s nainstalovaným Visual Studio 2013 Express Edition. Během instalace PVS-Studio bylo také staženo .NET Framework 4.6. Vypadá to asi takhle. Otevřete projekt (testoval jsem na PostgreSQL) ve Visual Studiu, v PVS-Studio klikněte na „teď začnu budovat projekt“, poté ve Visual Studiu klikněte na Build, po dokončení sestavení v PVS-Studio klikněte na „I“ m hotovo“ a podívejte se na zprávu.

PVS-Studio opravdu najde velmi skvělé chyby, které Clang Static Analyzer nevidí (například). Velmi se mi líbilo i rozhraní, které umožňuje třídit a filtrovat chyby podle jejich typu, závažnosti, souboru, ve kterém byly nalezeny a podobně.

Na jednu stranu je smutné, že pro použití PVS-Studio musí být projekt schopen kompilovat pod Windows. Na druhou stranu použití CMake v projektu a jeho budování a testování pod různými operačními systémy, včetně Windows, je v každém případě velmi dobrý nápad. Takže to možná není tak velká nevýhoda. Kromě toho na následujících odkazech můžete najít několik rad ohledně toho, jak se lidem podařilo spustit PVS-Studio na projektech, které nejsou vytvořeny pro Windows: jedna, dvě, tři, čtyři.

Přidání: Vyzkoušel jsem beta verzi PVS-Studio pro Linux. Ukázalo se, že použití je velmi snadné. Vytváříme pvs.conf s přibližně následujícím obsahem:

lic-file=/home/asiskon/PVS-Studio.lic
output-file=/home/asiskon/postgresql/pvs-output.log

Pak říkáme:

vyčistit
./ konfigurovat...
pvs-studio-analyzer trace -- make
# bude vytvořen velký (pro mě ~40 MB) soubor strace_out
pvs-studio-analyzer analysis --cfg ./ pvs.conf
plog-converter -t tasklist -o result.task pvs-output.log

Přidání: PVS-Studio pro Linux opustilo beta verzi a je nyní dostupné všem.

Coverity Scan

Coverity je považován za jeden z nejsofistikovanějších (a tedy drahých) statických analyzátorů. Bohužel není možné stáhnout ani jeho zkušební verzi na oficiálních stránkách. Můžete vyplnit formulář a pokud jste osoba IBM, můžete být kontaktováni. Na Velmi Silnou touhu Coverity po nějaké prehistorické verzi lze nalézt prostřednictvím neoficiálních kanálů. Je k dispozici pro Windows a Linux a funguje přibližně na stejném principu jako PVS-Studio. Ale bez sériového čísla nebo léků vám Coverity nebude zobrazovat zprávy. A abyste našli sériové číslo nebo lék, musíte mít nejen velmi silnou touhu, ale velmi, velmi... Velmi silný.

Naštěstí má Coverity verzi SaaS - Coverity Scan. Coverity Scan je nejen přístupný pro obyčejné smrtelníky, ale je také zcela zdarma. Neexistuje žádné připojení ke konkrétní platformě. Pomocí Coverity Scan však lze analyzovat pouze otevřené projekty.

Zde je návod, jak to funguje. Svůj projekt registrujete přes webové rozhraní (nebo se připojíte k existujícímu, ale to je méně zajímavý případ). Chcete-li zobrazit přehledy, musíte projít moderováním, které trvá 1–2 pracovní dny.

Takto se sestavují přehledy. Nejprve vytvoříte svůj projekt lokálně pomocí speciálního nástroje s názvem Coverity Build Tool. Tento nástroj je podobný scan-build z Clang Static Analyzer a je dostupný pro všechny představitelné platformy, včetně všech exotických, jako je FreeBSD nebo dokonce NetBSD.

Instalace nástroje Coverity Build Tool:

tar -xvzf cov-analysis-linux64-7.7.0.4.tar.gz
export PATH =/ home/ eax/ temp/ cov-analysis-linux64-7.7.0.4/ bin:$PATH

Připravme si testovací projekt (použil jsem kód z příspěvku Pojďme se dál učit OpenGL: jednoduchý textový výstup):

git clone git @ github.com:aviskon/ c-opengl-text.git
cd c-opengl-text
git submodul init
aktualizace submodulu git
sestavení mkdir
sestavení cd
cmake..

Poté sestavíme projekt pod cov-build:

cov-build --dir cov-int make -j2 demo emdconv

Důležité! Neměňte název adresáře cov-int.

Archivujte adresář cov-int:

tar -cvzf c-opengl-text.tgz cov-int

Nahrajte archiv prostřednictvím formuláře Nahrát sestavení projektu. Na webu Coverity Scan jsou také pokyny pro automatizaci tohoto kroku pomocí curl. Chvíli počkáme a můžeme vidět výsledky analýzy. Vezměte prosím na vědomí, že abyste mohli projít moderováním, musíte odeslat alespoň jedno sestavení k analýze.

Coverity Scan velmi dobře vyhledává chyby. Určitě lepší než Clang Static Analyzer. Zároveň existují falešně pozitivní, ale jsou mnohem menší. Pohodlně má webové rozhraní něco jako vestavěný bug tracker, který umožňuje přiřadit chybám závažnost, kdo je zodpovědný za jejich opravu a podobné věci. Můžete vidět, které chyby jsou nové a které již byly v předchozích sestaveních. Falešné poplachy lze jako takové označit a skrýt.

Vezměte prosím na vědomí, že k analýze projektu v Coverity Scan nemusíte být vlastníkem. Osobně jsem byl docela úspěšný v analýze kódu PostgreSQL, aniž bych se připojil k existujícímu projektu. Zdá se také, že pokud opravdu chcete (například pomocí submodulů Git), můžete vložit malý a nepříliš otevřený zdrojový kód ke kontrole.

Závěr

Zde je několik dalších statických analyzátorů, které nebyly zahrnuty do recenze:

Každý z analyzovaných analyzátorů najde chyby, které ostatní nenajdou. Proto je v ideálním případě lepší použít je všechny najednou. Dělat to pořád přímo nebude s největší pravděpodobností objektivně fungovat. Ale udělat před každým vydáním alespoň jeden běh rozhodně nebude špatný nápad. Clang Static Analyzer se zároveň jeví jako nejuniverzálnější a zároveň docela výkonný. Pokud máte zájem o jeden analyzátor, který musíte mít pro jakýkoli projekt, použijte tento. Ale přesto bych doporučil dodatečně použít alespoň PVS-Studio nebo Coverity Scan.

Jaké statické analyzátory jste vyzkoušeli a/nebo používali pravidelně a jaké máte z nich dojmy?

Statická analýza kódu Jedná se o proces identifikace chyb a nedostatků ve zdrojovém kódu programů. Statická analýza může být chápána jako automatizovaný proces kontroly kódu. Podívejme se blíže na recenzi kódu.

Kontrola kódu je jednou z nejstarších a nejspolehlivějších metod pro identifikaci závad. Spočívá ve společném pečlivém čtení zdrojového kódu a doporučení pro jeho vylepšení. Proces čtení kódu odhalí chyby nebo části kódu, které se mohou v budoucnu stát chybnými. Také se má za to, že autor kódu by během recenze neměl vysvětlovat, jak ta či ona část programu funguje. Operační algoritmus by měl být jasný přímo z textu programu a komentářů. Pokud tato podmínka není splněna, je nutné kód upravit.

Kontroly kódu obvykle fungují dobře, protože programátoři mnohem pravděpodobněji odhalí chyby v kódu jiných lidí. Více o technikách kontroly kódu se můžete dozvědět ve vynikající knize Steva McConnella Code Complete.

Jedinou významnou nevýhodou metodologie kolaborativní kontroly kódu je její extrémně vysoká cena. Několik programátorů by se mělo pravidelně scházet, aby přezkoumali nový kód nebo znovu přezkoumali kód poté, co byla učiněna doporučení. Zároveň musí programátoři pravidelně odpočívat. Pokud se pokusíte zkontrolovat velké kusy kódu najednou, vaše pozornost rychle otupí a výhody kontroly kódu rychle zmizí.

Ukazuje se, že na jedné straně chcete pravidelně kontrolovat kód. Na druhou stranu je to příliš drahé. Kompromisním řešením jsou nástroje pro analýzu statického kódu. Neúnavně zpracovávají zdrojové kódy programů a vydávají doporučení programátorovi, aby věnoval zvláštní pozornost určitým částem kódu. Program samozřejmě nenahradí úplnou kontrolu kódu provedenou týmem programátorů. Poměr přínosů a nákladů však činí použití statické analýzy velmi užitečným postupem používaným mnoha společnostmi.

Problémy řešené programy pro analýzu statického kódu lze rozdělit do 3 kategorií:

  1. Identifikace chyb v programech. To bude podrobněji probráno níže.
  2. Doporučení pro formátování kódu. Některé statické analyzátory umožňují zkontrolovat, zda zdrojový kód odpovídá standardu formátování kódu společnosti. To se týká ovládání množství odsazení v různých vzorech, používání mezer/tabulátorů atd.
  3. Metrické počítání. Softwarová metrika je míra, která poskytuje číselnou hodnotu pro některé vlastnosti softwaru nebo jeho specifikace. Existuje velké množství různých metrik, které lze vypočítat pomocí různých nástrojů.

Další výhody analýzy statického kódu:

  1. Kompletní pokrytí kódem. Statické analyzátory kontrolují i ​​ty fragmenty kódu, které dostávají kontrolu extrémně zřídka. Takové části kódu zpravidla nelze testovat jinými metodami. To vám umožní najít chyby v obslužných rutinách vzácných událostí, obslužných rutinách chyb nebo systému protokolování.
  2. Statická analýza je nezávislá na použitém kompilátoru a prostředí, ve kterém bude kompilovaný program spuštěn. To vám umožní najít skryté chyby, které se mohou objevit až po několika letech. Jedná se například o chyby nedefinovaného chování. Takové chyby se mohou objevit při změně verze kompilátoru nebo při použití jiných přepínačů k optimalizaci kódu. Další zajímavý příklad skrytých chyb je uveden v článku „Přepsat paměť – proč?“.
  3. Překlepy a důsledky používání funkce Copy-Paste snadno a rychle odhalíte. Hledání těchto chyb jinými způsoby je zpravidla neefektivní ztrátou času a úsilí. Je škoda po hodině ladění zjistit, že chyba je ve výrazu jako "strcmp(A, A)". Při diskuzi o typických chybách se takové chyby obvykle nezmiňují. V praxi se však jejich identifikaci stráví značný čas.

Nevýhody statické analýzy kódu

  1. Statická analýza je obecně slabá v diagnostice úniků paměti a souběžných chyb. Abyste takové chyby odhalili, musíte ve skutečnosti virtuálně spustit část programu. To je extrémně obtížné implementovat. Takové algoritmy také vyžadují hodně paměti a CPU. Statické analyzátory jsou zpravidla omezeny na diagnostiku jednoduchých případů. Efektivnějším způsobem, jak identifikovat úniky paměti a souběžné chyby, je použití nástrojů dynamické analýzy.
  2. Program statické analýzy upozorňuje na podezřelá místa. To znamená, že ve skutečnosti může být kód zcela správný. Tyto se nazývají falešně pozitivní. Pouze programátor může pochopit, zda analyzátor indikuje chybu nebo vygeneroval falešně pozitivní výsledek. Potřeba kontrolovat falešné poplachy zabírá pracovní čas a snižuje pozornost k těm částem kódu, které skutečně obsahují chyby.

Chyby detekované statickými analyzátory jsou velmi různorodé. Zde je například seznam diagnostik, které jsou implementovány v nástroji PVS-Studio. Některé analyzátory se specializují na konkrétní oblast nebo typ defektu. Jiné podporují určité standardy kódování, například MISRA-C:1998, MISRA-C:2004, Sutter-Alexandrescu Rules, Meyers-Klaus Rules a tak dále.

Oblast statické analýzy se aktivně rozvíjí, objevují se nová diagnostická pravidla a standardy a některá pravidla zastarávají. Proto nemá smysl pokoušet se porovnávat analyzátory na základě seznamů zjištěných závad. Jediný způsob, jak porovnat nástroje, je projít je sadou projektů a spočítat počet skutečných chyb, které najdou. Toto téma je podrobněji popsáno v článku "

Úvod

Standardní možnosti softwarových produktů a různých řídicích systémů jsou pro většinu zákazníků nedostatečné. Systémy pro správu webových stránek (například WordPress, Joomla nebo Bitrix), účetní programy, systémy pro správu zákazníků (CRM), podnikové a výrobní (například 1C a SAP) poskytují dostatek příležitostí k rozšíření funkčnosti a přizpůsobení se potřebám konkrétních zákazníků. Tyto schopnosti jsou implementovány pomocí modulů třetích stran vyrobených na zakázku nebo přizpůsobením stávajících. Tyto moduly jsou programový kód napsaný v jednom z vestavěných programovacích jazyků, který spolupracuje se systémem a implementuje funkce požadované zákazníky.

Ne všechny organizace si uvědomují, že na zakázku vyrobený vložený kód nebo webové stránky mohou obsahovat závažná zranitelnost, jejichž zneužití útočníkem může vést k úniku důvěrných informací, a softwarové záložky jsou speciální sekce kódu určené k provádění jakýchkoli operací pomocí tajných příkazů. známé vývojáři kódu. Kromě toho může vlastní kód obsahovat chyby, které mohou zničit nebo poškodit databáze nebo narušit hladké obchodní procesy.

Společnosti, které jsou obeznámeny s výše popsanými riziky, se snaží zapojit auditory a specialisty do analýzy zdrojových kódů programů pro přijetí hotových modulů, aby odborníci mohli určit bezpečnost vyvíjeného řešení a ujistit se, že neexistují žádná zranitelná místa, chyby nebo softwarové chyby v nich. Tento způsob ovládání má ale řadu nevýhod. Za prvé, tato služba vážně zvyšuje rozpočet na vývoj; za druhé, provedení auditu a analýzy trvá dlouho - od týdne do několika měsíců; a za třetí, tento přístup nezaručuje úplnou absenci problémů s analyzovaným kódem - existuje možnost lidské chyby a odhalení dříve neznámých útočných vektorů poté, co byl kód přijat a uveden do provozu.

Existuje bezpečná metodika vývoje, která zajišťuje integraci procesů auditu a kontroly kódu ve fázi tvorby softwarového produktu - SDL (Security Development Lifecycle, secure development life cycle). Tuto metodologii však může použít pouze vývojář softwaru; pokud mluvíme o zákaznících, pak pro ně SDL není použitelný, protože proces zahrnuje restrukturalizaci algoritmů tvorby kódu a na jeho použití při akceptaci je příliš pozdě. Navíc mnoho vývojů zahrnuje malou část stávajícího kódu, v takovém případě SDL také nelze použít.

Pro vyřešení problému auditování zdrojového kódu a zajištění ochrany proti zneužití zranitelností ve vestavěných kódech a webových aplikacích existují analyzátory zdrojového kódu.

Klasifikace analyzátorů zdrojového kódu

Analyzátory zdrojového kódu jsou třídou softwarových produktů vytvořených k identifikaci a prevenci zneužití softwarových chyb ve zdrojových kódech. Všechny produkty zaměřené na analýzu zdrojového kódu lze rozdělit do tří typů:

  • První skupina zahrnuje analyzátory kódu webových aplikací a nástroje, které zabraňují zneužití zranitelností webových stránek.
  • Druhou skupinou jsou vestavěné analyzátory kódu, které umožňují detekovat problémové oblasti ve zdrojovém kódu modulů určených k rozšíření funkčnosti podnikových a produkčních systémů. Mezi takové moduly patří programy pro produktovou řadu 1C, rozšíření systémů CRM, systémy řízení podniku a systémy SAP.
  • Poslední skupina je určena k analýze zdrojového kódu v různých programovacích jazycích, které nesouvisejí s obchodními aplikacemi a webovými aplikacemi. Tyto analyzátory jsou určeny pro zákazníky a vývojáře softwaru. Tato skupina analyzátorů se také používá k použití metodiky pro bezpečný vývoj softwaru. Analyzátory statického kódu nacházejí problémy a potenciální zranitelnosti ve zdrojových kódech a poskytují doporučení k jejich odstranění.

Stojí za zmínku, že většina analyzátorů je smíšených typů a plní funkce pro analýzu široké škály softwarových produktů - webových aplikací, vestavěného kódu a běžného softwaru. Tato recenze se však zaměřuje na použití analyzátorů vývojovými zákazníky, takže větší pozornost je věnována analyzátorům pro webové aplikace a vestavěný kód.

Analyzátory mohou obsahovat různé analytické mechanismy, ale nejběžnější a nejuniverzálnější je statická analýza zdrojového kódu - SAST (Static Application Security Testing), existují i ​​dynamické analytické metody - DAST (Dynamic Application Security Testing), které provádějí kontroly kódu při jeho provádění. a různé hybridní možnosti kombinující různé typy analýz. Dynamická analýza je nezávislá verifikační metoda, která může rozšířit možnosti statické analýzy nebo být použita samostatně v případech, kdy není dostupný přístup ke zdrojovým kódům. Tento přehled zahrnuje pouze statické analyzátory.

Analyzátory pro vestavěný kód a webové aplikace se liší v sadě vlastností. Zahrnuje nejen kvalitu analýzy a seznam podporovaných softwarových produktů a programovacích jazyků, ale také další mechanismy: schopnost automaticky opravovat chyby, přítomnost funkcí zabraňujících zneužití chyb beze změn kódu, schopnost aktualizovat vestavěná databáze zranitelností a programových chyb, dostupnost certifikátů shody a schopnost plnit požadavky různých regulátorů.

Principy činnosti analyzátorů zdrojového kódu

Obecné principy činnosti jsou podobné pro všechny třídy analyzátorů: jak analyzátory zdrojového kódu webových aplikací, tak analyzátory vestavěného kódu. Rozdíl mezi těmito typy produktů je pouze ve schopnosti určit vlastnosti provádění a interakce kódu s vnějším světem, což se odráží v databázích zranitelnosti analyzátorů. Většina analyzátorů na trhu plní funkce obou tříd a stejně dobře kontroluje jak kód vložený do podnikových aplikací, tak kód webových aplikací.

Vstupními daty pro analyzátor zdrojového kódu je pole zdrojových textů programu a jeho závislostí (načítatelné moduly, použitý software třetích stran atd.). Všechny analyzátory jako výsledek své práce vytvářejí zprávu o zjištěných zranitelnostech a programových chybách, některé analyzátory navíc poskytují funkce pro automatickou opravu chyb.

Za zmínku stojí, že automatická oprava chyb nefunguje vždy správně, proto je tato funkcionalita určena pouze pro vývojáře webových aplikací a embedded modulů.Zákazník produktu by se měl spolehnout pouze na závěrečnou zprávu analyzátoru a získaná data použít k učinit rozhodnutí o přijetí a implementaci vytvořeného kódu nebo jeho odeslání k revizi.

Obrázek 1. Algoritmus analyzátoru zdrojového kódu

Při posuzování zdrojových kódů využívají analyzátoři různé databáze obsahující popisy zranitelností a programových chyb:

  • Vlastní databáze zranitelností a programátorských chyb – každý vývojář analyzátorů zdrojového kódu má svá vlastní analytická a výzkumná oddělení, která připravují specializované databáze pro analýzu zdrojových kódů programů. Kvalita vlastní databáze je jedním z klíčových kritérií ovlivňujících celkovou kvalitu produktu. Kromě toho musí být vaše vlastní databáze dynamická a neustále aktualizovaná – nové vektory útoků a zneužívání zranitelností, stejně jako změny v programovacích jazycích a metodách vývoje vyžadují, aby vývojáři analyzátorů neustále aktualizovali databázi, aby byla zachována vysoká kvalita skenování. Produkty se statickou, neaktualizující se databází nejčastěji prohrávají ve srovnávacích testech.
  • Státní databáze programátorských chyb – existuje řada státních databází zranitelností, jejichž sestavování a podpora je prováděna regulátory v různých zemích. Například v USA se používá databáze CWE - Common Weakness Enumeration, kterou spravuje organizace MITER, která je podporována mimo jiné i ministerstvem obrany USA. Rusko zatím podobnou databázi nemá, ale v budoucnu plánuje FSTEC Ruska doplnit své databáze zranitelnosti a hrozeb o databázi programových chyb. Analyzátory zranitelnosti implementují podporu pro databázi CWE tím, že ji integrují do své vlastní databáze zranitelnosti nebo ji používají jako samostatný ověřovací mechanismus.
  • Standardní požadavky a doporučení pro bezpečné programování – existuje řada vládních a průmyslových standardů, které popisují požadavky na bezpečný vývoj aplikací, a také řada doporučení a „best practices“ od světových odborníků v oblasti vývoje a bezpečnosti softwaru. Tyto dokumenty přímo nepopisují chyby programování, na rozdíl od CWE, ale obsahují seznam metod, které lze převést pro použití ve statickém analyzátoru zdrojového kódu.

Kvalita analýzy, počet falešně pozitivních výsledků a vynechaných chyb přímo závisí na tom, které databáze jsou v analyzátoru použity. Kromě toho analýza souladu s regulačními požadavky umožňuje usnadnit a zjednodušit postup externího auditu infrastruktury a informačních systémů, pokud jsou požadavky povinné. Například požadavky PCI DSS jsou povinné pro webové aplikace a vestavěný kód, který pracuje s platebními informacemi pro bankovní karty, zatímco je prováděn externí audit dodržování PCI DSS, včetně analýzy používaných softwarových produktů.

Světový trh

Na globálním trhu existuje mnoho různých analyzátorů – jak od známých výrobců zabezpečení, tak od specializovaných hráčů zabývajících se pouze touto třídou produktů. Analytické centrum Gartner klasifikuje a vyhodnocuje analyzátory zdrojového kódu již více než pět let, zatímco do roku 2011 společnost Gartner samostatně identifikovala statické analyzátory popsané v tomto článku a později je spojila do vyšší třídy - Testování zabezpečení aplikací ).

V roce 2015 Gartner Magic Quadrant jsou lídry na trhu bezpečnostních testů HP, Veracode a IBM. Veracode je zároveň jedinou přední společností, která nemá analyzátor jako softwarový produkt a funkčnost je poskytována pouze jako služba v cloudu Veracode. Zbytek předních společností nabízí buď výhradně produkty, které provádějí kontroly na počítačích uživatelů, nebo možnost volby mezi produktem a cloudovou službou. HP a IBM zůstaly v posledních pěti letech lídry světového trhu, přehled jejich produktů je uveden níže. Nejblíže k přední pozici je produkt společnosti Checkmarx, který se specializuje pouze na tuto třídu produktů, proto je také zařazen do recenze.

Obrázek 2. Magický kvadrant pro analytikyGartner o hráčích na trhu analýzy zabezpečení aplikací v srpnu 2015

Podle zprávy analytiků ReportsnReports ve Spojených státech dosáhla velikost trhu analyzátorů zdrojového kódu v roce 2014 2,5 miliardy USD; do roku 2019 se předpokládá dvojnásobný nárůst na 5 miliard USD s ročním růstem 14,9 %. Více než 50 % organizací dotazovaných kvůli zprávě plánuje přidělit a zvýšit rozpočty na analýzu zdrojového kódu pro vlastní vývoj a pouze 3 % se vyjádřila negativně o používání těchto produktů.

Velký počet produktů v oblasti challengers potvrzuje popularitu této třídy produktů a rychlý rozvoj tohoto odvětví. Za posledních pět let se celkový počet výrobců v tomto kvadrantu téměř ztrojnásobil a od zprávy z roku 2014 přibyly tři produkty.

ruský trh

Ruský trh s analyzátory zdrojového kódu je poměrně mladý – první veřejné produkty se na trhu začaly objevovat před méně než pěti lety. Trh se přitom formoval ze dvou směrů – na jedné straně společnosti vyvíjející produkty pro testování k identifikaci nedeklarovaných schopností v laboratořích FSTEC, FSB a Ministerstva obrany Ruské federace; na druhé straně jsou společnosti zabývající se různými oblastmi bezpečnosti, které se rozhodly přidat do svého portfolia novou třídu produktů.

Nejvýznamnějšími hráči na novém trhu jsou Positive Technologies, InfoWatch a Solar Security. Positive Technologies se již dlouho specializuje na vyhledávání a analýzu zranitelností; Do jejich portfolia patří produkt MaxPatrol, jeden z lídrů na tuzemském trhu v externím bezpečnostním monitoringu, a tak není divu, že se společnost rozhodla věnovat interní analýze a vyvinout vlastní analyzátor zdrojového kódu. InfoWatch se vyvinul jako vývojář systémů DLP a nakonec se stal skupinou společností hledajících nové mezery na trhu. V roce 2012 se Appercut stal součástí InfoWatch a přidal do portfolia InfoWatch nástroj pro analýzu zdrojového kódu. Investice a zkušenosti společnosti InfoWatch nám umožnily rychle vyvinout produkt na vysokou úroveň. Solar Security oficiálně představil svůj produkt Solar inCode teprve koncem října 2015, ale již v době vydání měl čtyři oficiální nasazení v Rusku.

Společnosti, které již desítky let vyvíjejí analyzátory zdrojového kódu pro certifikační testování, obecně s nabídkou analyzátorů pro podnikání nespěchají, takže naše recenze obsahuje pouze jeden takový produkt – od společnosti Echelon. Snad se mu v budoucnu podaří vytěsnit další hráče na trhu, a to především díky rozsáhlým teoretickým i praktickým zkušenostem vývojářů tohoto produktu v oblasti vyhledávání zranitelností a nedeklarovaných schopností.

Dalším specializovaným hráčem na ruském trhu je Digital Security, konzultační společnost v oblasti informační bezpečnosti. Po rozsáhlých zkušenostech s auditem a implementací ERP systémů našla neobsazené místo a začala vyvíjet produkt pro analýzu bezpečnosti ERP systémů, který mimo jiné obsahoval mechanismy pro analýzu zdrojových kódů pro embedded programy.

Stručný přehled analyzátorů

Prvním nástrojem pro analýzu zdrojového kódu v naší recenzi je produkt od společnosti Fortify, kterou od roku 2010 vlastní společnost Hewlett-Packard. Řada HP Fortify obsahuje různé produkty pro analýzu programových kódů: existuje služba SaaS Fortify On-Demand, která zahrnuje nahrání zdrojového kódu do cloudu HP, a plnohodnotná aplikace HP Fortify Static Code Analyzer nainstalovaná v infrastruktuře zákazníka.

HP Fortify Static Code Analyzer podporuje širokou škálu programovacích jazyků a platforem, včetně webových aplikací napsaných v PHP, Pythonu, Java/JSP, ASP.Net a JavaScriptu a vloženého kódu v ABAP (SAP), Action Script a VBScript.

Obrázek 3. Rozhraní HP Fortify Static Code Analyzer

Mezi funkcemi produktu stojí za zmínku přítomnost v HP Fortify Static Code Analyzer podporu integrace s různými systémy pro správu vývoje a sledování chyb. Pokud vývojář kódu poskytne zákazníkovi přístup k přímému hlášení chyb do Bugzilla, HP Quality Center nebo Microsoft TFS, může analyzátor automaticky generovat hlášení o chybách v těchto systémech bez nutnosti ručního zásahu.

Fungování produktu je založeno na vlastních znalostních bázích HP Fortify vytvořených adaptací CWE databáze. Produkt implementuje analýzu, která splňuje požadavky doporučení DISA STIG, FISMA, PCI DSS a OWASP.

Mezi nevýhody HP Fortify Static Code Analyzer je třeba poznamenat nedostatek lokalizace produktu pro ruský trh - rozhraní a zprávy jsou v angličtině, nedostatek materiálů a dokumentace k produktu v ruštině, analýza vestavěných kód pro 1C a další domácí produkty na podnikové úrovni není podporován.

Výhody analyzátoru statického kódu HP Fortify:

  • slavná značka, vysoce kvalitní řešení;
  • velký seznam analyzovaných programovacích jazyků a podporovaných vývojových prostředí;
  • dostupnost integrace se systémy řízení vývoje a dalšími produkty HP Fortify;
  • podpora mezinárodních standardů, doporučení a „best practices“.

Checkmarx CxSAST je nástroj americko-izraelské společnosti Checkmarx, specializující se na vývoj analyzátorů zdrojového kódu. Tento produkt je určen především pro analýzu konvenčního softwaru, ale díky podpoře programovacích jazyků PHP, Python, JavaScript, Perl a Ruby je vynikající pro analýzu webových aplikací. Checkmarx CxSAST je univerzální analyzátor, který nemá žádná zřetelná specifika, a je proto vhodný pro použití v jakékoli fázi životního cyklu softwarového produktu – od vývoje až po aplikaci.

Obrázek 4. Rozhraní Checkmarx CxSAST

Checkmarx CxSAST implementuje podporu databáze chyb kódu CWE, podporuje kontroly souladu s doporučeními OWASP a SANS 25, standardy PCI DSS, HIPAA, MISRA, FISMA a BSIMM. Všechny problémy zjištěné Checkmarx CxSAST jsou rozděleny podle úrovně rizika – od méně závažných po kritické. Mezi vlastnosti produktu patří přítomnost funkcí pro vizualizaci kódu s konstrukcí blokových diagramů tras provádění a doporučení pro nápravu problémů s vazbou na grafický diagram.

Nevýhody produktu zahrnují nedostatek podpory pro analýzu kódu vloženého do podnikových aplikací, nedostatek lokalizace a obtížnost použití produktu pro zákazníky softwarového kódu, protože řešení je určeno především pro vývojáře a je úzce integrováno s vývojovými prostředími.

Výhody Checkmarx CxSAST:

  • velké množství podporovaných programovacích jazyků;
  • vysoká rychlost produktu, schopnost skenovat pouze pojmenované části kódu;
  • schopnost vizualizovat grafy provádění analyzovaného kódu;
  • vizuální reporty a graficky navržené metriky zdrojových kódů.

Dalším produktem od známého dodavatele je analyzátor zdrojového kódu IBM Security AppScan. Řada AppScan zahrnuje mnoho produktů souvisejících s bezpečným vývojem softwaru, ale zbývající produkty nejsou vhodné pro použití softwarového kódu u zákazníků, protože mají mnoho zbytečných funkcí. IBM Security AppScan Source, stejně jako Checkmarx CxSAST, je primárně určen pro vývojové organizace, přičemž podporuje ještě méně jazyků pro vývoj webových aplikací – pouze PHP, Perl a JavaScript. Programovací jazyky pro kód vložený do podnikových aplikací nejsou podporovány.

Obrázek 5. Rozhraní zdroje IBM Security AppScan

IBM Security AppScan Source se těsně integruje s vývojovou platformou IBM Rational, takže produkt se nejčastěji používá ve fázi vývoje a testování softwarových produktů a není vhodný pro provádění akceptace nebo ověřování vlastní aplikace.

Speciální funkcí IBM Security AppScan Source je, že podporuje analýzu programů pro IBM Worklight, platformu pro mobilní podnikové aplikace. Seznam podporovaných standardů a požadavků je mizivý - PCI DSS a doporučení DISA a OWASP, databáze zranitelností porovnává nalezené problémy s CWE.

Žádné zvláštní výhody tohoto řešení pro vývojové zákazníky nebyly identifikovány.

AppChecker od tuzemské společnosti NPO Eshelon CJSC je řešení, které se na trhu objevilo poměrně nedávno. První verze produktu byla vydána teprve před rokem, ale je třeba vzít v úvahu zkušenosti společnosti Echelon s analýzou programového kódu. "NPO Eshelon" je zkušební laboratoř FSTEC, FSB a Ministerstva obrany Ruské federace a má rozsáhlé zkušenosti v oblasti statické a dynamické analýzy zdrojových kódů programů.

Obrázek 6. Rozhraní AppChecker „Echelon“.

AppChecker je navržen tak, aby analyzoval různé softwarové a webové aplikace napsané v PHP, Java a C/C++. Plně podporuje klasifikaci zranitelnosti CWE a zohledňuje doporučení OWASP, CERT a NISP. Produkt lze použít k provádění auditů shody s požadavky PCI DSS a standardem Bank of Russia IBBS-2.6-2014.

Nedostatky produktu jsou způsobeny ranou fází vývoje řešení - chybí dostatečná podpora populárních jazyků pro vývoj webových aplikací a schopnost analyzovat vložený kód.

výhody:

  • schopnost provádět audit podle domácích požadavků a PCI DSS;
  • zohlednění vlivu funkcí programovacího jazyka díky flexibilní konfiguraci analyzovaných projektů;
  • nízké náklady.

PT Application Inspector je produktem ruského vývojáře Positive Technologies, který se vyznačuje přístupem k řešení problému analýzy zdrojového kódu. PT Application Inspector je zaměřen především na hledání zranitelností v kódu, spíše než na identifikaci běžných softwarových chyb.

Na rozdíl od všech ostatních produktů v této recenzi má PT Application Inspector nejen schopnost generovat zprávu a demonstrovat zranitelnosti, ale také schopnost automaticky vytvářet exploity pro určité kategorie a typy zranitelností – malé spustitelné moduly, které využívají nalezené zranitelnosti. Pomocí vytvořených exploitů můžete prakticky zkontrolovat nebezpečnost nalezených zranitelností a také ovládat vývojáře kontrolou fungování exploitu po deklarovaném uzavření zranitelnosti.

Obrázek 7. Rozhraní PT Application Inspector

PT Application Inspector podporuje jak jazyky pro vývoj webových aplikací (PHP, JavaScript), tak vestavěný kód pro podnikové aplikace - SAP ABAP, SAP Java, Oracle EBS Java, Oracle EBS PL/SQL. PT Application Inspector také podporuje vizualizaci cest provádění programu.

PT Application Inspector je komplexní řešení pro vývojáře i zákazníky provozující vlastní webové aplikace a zásuvné moduly pro obchodní aplikace. Databáze zranitelností a chyb v kódu programu obsahuje vlastní vývoj společnosti Positive Technologies, databázi CWE a WASC (databáze zranitelností webového konsorcia, obdoba CWE pro webové aplikace).

Použití PT Application Inspector vám umožňuje splnit požadavky standardů PCI DSS, STO BR IBBS, stejně jako 17. řádu FSTEC a požadavky na absenci nedeklarovaných schopností (relevantní pro certifikaci kódu).

výhody:

  • podpora analýzy webových aplikací a široké škály vývojových systémů pro obchodní aplikace;
  • domácí, lokalizovaný produkt;
  • široká škála podporovaných státních norem;
  • pomocí databáze zranitelností webových aplikací WASC a klasifikátoru CWE;
  • schopnost vizualizovat programový kód a vyhledávat záložky programu.

InfoWatch Appercut byl vyvinut ruskou společností InfoWatch. Hlavním rozdílem mezi tímto produktem a všemi ostatními v této kolekci je jeho specializace na poskytování služeb pro zákazníky podnikových aplikací.

InfoWatch Appercut podporuje téměř všechny programovací jazyky, ve kterých jsou vytvářeny webové aplikace (JavaScript, Python, PHP, Ruby) a vestavěné moduly pro obchodní návrhy - 1C, ABAP, X++ (ERP Microsoft Axapta), Java, Lotus Script. InfoWatch Appercut má schopnost přizpůsobit se specifikům konkrétní aplikace a jedinečnosti obchodních procesů každé společnosti.

Obrázek 8. Rozhraní InfoWatch Appercut

InfoWatch Appercut podporuje mnoho požadavků na efektivní a bezpečné programování, včetně obecných požadavků PCI DSS a HIPPA, doporučení a „best practices“ CERT a OWAST, stejně jako doporučení výrobců platforem podnikových procesů – 1C, SAP, Oracle, Microsoft.

výhody:

  • domácí, lokalizovaný produkt, certifikovaný FSTEC Ruska;
  • jediný produkt, který podporuje všechny populární obchodní platformy v Rusku, včetně 1C, SAP, Oracle EBS, IBM Collaboration Solutions (Lotus) a Microsoft Axapta;
  • Rychlý skener, který provádí kontroly během několika sekund a může kontrolovat pouze změněný kód a fragmenty kódu.

Digital Security ERPScan je specializovaný produkt pro analýzu a monitorování bezpečnosti podnikových systémů postavený na produktech SAP, první verze byla vydána v roce 2010. Kromě modulu pro analýzu konfigurací, zranitelností a řízení přístupu (SOD) obsahuje ERPScan modul pro hodnocení bezpečnosti zdrojového kódu, který implementuje funkce vyhledávání záložek, kritických volání, zranitelností a programovacích chyb v kódu v ABAP. a programovací jazyky Java. Produkt zároveň zohledňuje specifika platformy SAP, koreluje zjištěné zranitelnosti v kódu s konfiguračním nastavením a přístupovými právy a provádí analýzu lépe než nespecializované produkty, které pracují se stejnými programovacími jazyky.

Obrázek 9. Rozhraní Digital Security ERPScan

Mezi další funkce ERPScan patří schopnost automaticky generovat záplaty pro zjištěná zranitelnost, stejně jako generovat signatury pro možné útoky a nahrávat tyto signatury do systémů detekce a prevence narušení (ve spolupráci s CISCO). Systém navíc obsahuje mechanismy pro vyhodnocování výkonu vestavěného kódu, který je pro podnikové aplikace kritický, protože pomalý provoz dalších modulů může vážně ovlivnit obchodní procesy v organizaci. Systém také podporuje analýzu v souladu se specifickými doporučeními pro analýzu kódu podnikových aplikací, jako jsou EAS-SEC a BIZEC, a také obecnými doporučeními PCI DSS a OWASP.

výhody:

  • hluboká specializace na jednu obchodní aplikační platformu s korelací analýzy s nastavením konfigurace a přístupovými právy;
  • testy výkonu vestavěného kódu;
  • automatické vytváření oprav nalezených zranitelností a virtuálních záplat;
  • hledat zero-day zranitelnosti.

Solar inCode je nástroj pro analýzu statického kódu určený k identifikaci slabých míst zabezpečení informací a nedeklarovaných schopností ve zdrojových kódech softwaru. Hlavním rozlišovacím znakem produktu je schopnost obnovit zdrojový kód aplikace z pracovního souboru pomocí technologie dekompilace (reverzní inženýrství).

Solar inCode umožňuje analyzovat zdrojový kód napsaný v programovacích jazycích Java, Scala, Java pro Android, PHP a Objective C. Na rozdíl od většiny konkurentů seznam podporovaných programovacích jazyků zahrnuje vývojové nástroje pro mobilní platformy Android a iOS .

Obrázek 10. Rozhraní

V případech, kdy zdrojový kód není k dispozici, Solar inCode umožňuje analýzu hotových aplikací, tato funkcionalita podporuje webové aplikace a mobilní aplikace. Zejména u mobilních aplikací stačí do skeneru zkopírovat odkaz na aplikaci z Google Play nebo Apple Store, aplikace se automaticky stáhne, dekompiluje a zkontroluje.

Používání Solar inCode vám umožňuje splnit požadavky standardů PCI DSS, STO BR IBBS, stejně jako 17. příkaz FSTEC a požadavky na absenci nedeklarovaných schopností (relevantní pro certifikaci kódu).

výhody:

  • Podpora pro analýzu aplikací pro mobilní zařízení se systémem Android a iOS;
  • podporuje analýzu webových aplikací a mobilních aplikací bez použití zdrojového kódu programů;
  • poskytuje výsledky analýzy ve formě konkrétních doporučení pro eliminaci zranitelností;
  • generuje podrobná doporučení pro nastavení bezpečnostních nástrojů: SIEM, WAF, FW, NGFW;
  • snadno integrovatelné do procesu bezpečného vývoje softwaru podporou práce s repozitáři zdrojového kódu.

závěry

Přítomnost softwarových chyb, zranitelností a zadních vrátek v softwaru vyvinutém na zakázku, ať už jde o webové aplikace nebo zásuvné moduly pro podnikové aplikace, představuje vážné riziko pro bezpečnost podnikových dat. Použití analyzátorů zdrojového kódu může tato rizika výrazně snížit a udržet pod kontrolou kvalitu práce prováděné tvůrci programového kódu bez nutnosti dalšího vynaložení času a peněz na služby odborníků a externích auditorů. Současně použití analyzátorů zdrojového kódu nejčastěji nevyžaduje speciální školení, přidělení samostatných zaměstnanců a nezavádí další nepříjemnosti, pokud je produkt používán pouze pro akceptaci a opravu chyb provádí vývojář. To vše činí tento nástroj povinným pro použití při použití vlastního vývoje.

Při výběru analyzátoru zdrojového kódu byste měli vzít v úvahu funkčnost produktů a kvalitu jejich práce. Nejprve byste měli věnovat pozornost schopnosti produktu provádět kontroly pro programovací jazyky, ve kterých jsou implementovány kontrolované zdrojové kódy. Dalším kritériem při výběru produktu by měla být kvalita testování, která může být určena kompetencemi vývojové společnosti a při předváděcím provozu produktu. Dalším faktorem pro výběr produktu může být dostupnost auditu na shodu s požadavky státních a mezinárodních standardů, pokud je jejich implementace vyžadována pro podnikové podnikové procesy.

V této recenzi je jednoznačným lídrem mezi zahraničními produkty z hlediska podpory programovacích jazyků a kvality skenování řešení HP Fortify Static Code Analyzer. Checkmarx CxSAST je také dobrý produkt, ale dokáže analyzovat pouze běžné aplikace a webové aplikace, produkt nepodporuje zásuvné moduly pro podnikové aplikace. Řešení IBM Security AppScan Source vypadá ve srovnání se svými konkurenty nudně a neliší se ani funkčností, ani kvalitou kontrol. Tento produkt však není určen pro firemní uživatele a je zaměřen na použití ve vývojářských společnostech, kde může být efektivnější než jeho konkurenti.

Mezi ruskými produkty je těžké vyčlenit jasného lídra, trh představují tři hlavní produkty - InfoWatch Appercut, PT Application Inspector a Solar inCode. Tyto produkty se zároveň výrazně technologicky liší a jsou určeny pro různé cílové skupiny – první podporuje více platforem podnikových aplikací a je rychlejší díky vyhledávání zranitelností výhradně pomocí metod statické analýzy. Druhý kombinuje statickou a dynamickou analýzu a také jejich kombinaci, což spolu se zkvalitněním skenování vede k prodloužení doby kontroly zdrojového kódu. Třetí je zaměřen na řešení problémů podnikových uživatelů a specialistů na informační bezpečnost a také umožňuje testovat aplikace bez přístupu ke zdrojovému kódu.

AppChecker „echelon“ zatím neodpovídá svým konkurentům a má malou sadu funkcí, ale vzhledem k rané fázi vývoje produktu je docela možné, že v blízké budoucnosti může získat přední pozice v hodnocení zdrojů. analyzátory kódu.

Digital Security ERPScan je vynikající produkt pro řešení vysoce specializovaného úkolu analýzy podnikových aplikací pro platformu SAP. Společnost Digital Security se soustředí pouze na tento trh a vyvinula produkt, který je jedinečný svou funkcionalitou, který nejen analyzuje zdrojový kód, ale také zohledňuje všechna specifika platformy SAP, specifická nastavení konfigurace a přístupová práva podnikových aplikací, a má také schopnost automaticky vytvářet záplaty pro zjištěné zranitelnosti.

anotace

V současné době bylo vyvinuto velké množství nástrojů pro automatizaci vyhledávání zranitelností programu. Tento článek se bude zabývat některými z nich.

Úvod

Statická analýza kódu je softwarová analýza, která se provádí na zdrojovém kódu programů a je implementována bez skutečného spuštění studovaného programu.

Software často obsahuje různé zranitelnosti kvůli chybám v kódu programu. Chyby vzniklé při vývoji programu v některých situacích vedou k selhání programu a následně k narušení normální činnosti programu: to často vede ke změnám a poškození dat, zastavení programu nebo dokonce systému. Většina zranitelností je spojena s nesprávným zpracováním dat přijatých zvenčí nebo jejich nedostatečně přísným ověřováním.

K identifikaci zranitelností se používají různé nástroje, například statické analyzátory zdrojového kódu programu, jejichž přehled je uveden v tomto článku.

Klasifikace bezpečnostních zranitelností

Když je porušen požadavek, aby program správně fungoval se všemi možnými vstupními daty, je možný výskyt takzvaných bezpečnostních zranitelností. Chyby zabezpečení mohou znamenat, že jeden program lze použít k překonání bezpečnostních omezení celého systému.

Klasifikace bezpečnostních zranitelností v závislosti na softwarových chybách:

  1. Přetečení zásobníku. K této chybě zabezpečení dochází v důsledku nedostatečné kontroly nad polem mimo hranice paměti během provádění programu. Když paket dat, který je příliš velký, přeteče vyrovnávací paměť s omezenou velikostí, dojde k přepsání obsahu nadbytečných paměťových míst, což způsobí zhroucení a ukončení programu. Podle umístění vyrovnávací paměti v paměti procesu se rozlišují přetečení vyrovnávací paměti na zásobníku (přetečení zásobníku zásobníku), haldě (přetečení zásobníku haldy) a oblasti statických dat (přetečení zásobníku bss).
  2. Zranitelnosti (zranitelnost poskvrněných vstupů). Zranitelnosti mohou nastat v případech, kdy je uživatelský vstup předán bez dostatečné kontroly interpretu nějakého externího jazyka (obvykle unixového shellu nebo jazyka SQL). V tomto případě může uživatel zadat vstupní data tak, že spuštěný interpret provede zcela jiný příkaz, než zamýšleli autoři zranitelného programu.
  3. Chyba zabezpečení formátovacího řetězce. Tento typ zranitelnosti zabezpečení je podtřídou zranitelnosti. Dochází k němu z důvodu nedostatečné kontroly parametrů při použití formátových I/O funkcí printf, fprintf, scanf atd. standardní knihovny C. Tyto funkce berou jako jeden ze svých parametrů znakový řetězec, který určuje vstupní nebo výstupní formát následujících argumentů funkce. Pokud může uživatel určit typ formátování, může tato chyba zabezpečení vyplývat z neúspěšného použití funkcí formátování řetězců.
  4. Chyby zabezpečení v důsledku chyb synchronizace (současné podmínky). Problémy spojené s multitaskingem vedou k situacím, které se nazývají: program, který není navržen pro běh v prostředí multitaskingu, se může domnívat, že například soubory, které používá při své práci, nemohou být změněny jiným programem. V důsledku toho může útočník, který včas nahradí obsah těchto pracovních souborů, přinutit program provést určité akce.

Kromě uvedených samozřejmě existují další třídy bezpečnostních zranitelností.

Přehled stávajících analyzátorů

K detekci bezpečnostních slabin v programech se používají následující nástroje:

  • Dynamické debuggery. Nástroje, které umožňují ladit program během jeho provádění.
  • Statické analyzátory (statické debuggery). Nástroje, které využívají informace nashromážděné během statické analýzy programu.

Statické analyzátory ukazují na ta místa v programu, kde může být chyba. Tyto podezřelé části kódu mohou buď obsahovat chybu, nebo být zcela neškodné.

Tento článek poskytuje přehled několika existujících statických analyzátorů. Pojďme se na každou z nich podívat blíže.

1.BOON

Nástroj, který na základě hluboké sémantické analýzy automatizuje proces skenování zdrojových textů C při hledání zranitelností, které mohou vést k přetečení vyrovnávací paměti. Identifikuje možné defekty za předpokladu, že některé hodnoty jsou součástí implicitního typu se specifickou velikostí vyrovnávací paměti.

2.CQual

Analytický nástroj pro detekci chyb v programech C. Program rozšiřuje jazyk C o další uživatelsky definované specifikátory typu. Programátor okomentuje svůj program příslušnými specifikátory a cqual kontroluje chyby. Nesprávné poznámky označují potenciální chyby. Cqual lze použít k detekci potenciálních chyb zabezpečení formátovacího řetězce.

3. MOPS

(MOdel checking Programs for Security) - nástroj pro vyhledávání bezpečnostních zranitelností v C programech. Jeho účel: dynamické přizpůsobení, zajištění souladu programu C se statickým modelem. MOPS používá model softwarového auditu, který je navržen tak, aby pomohl určit, zda program vyhovuje sadě pravidel definovaných pro vytváření zabezpečených programů.

4. ITS4, RATS, PScan, Flawfinder

K vyhledávání chyb přetečení vyrovnávací paměti a chyb formátovacího řetězce se používají následující statické analyzátory:

  1. . Jednoduchý nástroj, který staticky skenuje zdrojový kód C/C++ a odhaluje potenciální bezpečnostní slabiny. Označuje volání potenciálně nebezpečných funkcí, jako je strcpy/memcpy, a provádí povrchní sémantickou analýzu, ve které se snaží vyhodnotit, jak nebezpečný je takový kód, a také poskytuje rady, jak jej vylepšit.
  2. . Obslužný program RATS (Rough Auditing Tool for Security) zpracovává kód napsaný v C/C++ a umí také zpracovávat skripty v Perlu, PHP a Pythonu. RATS skenuje zdrojový kód a hledá potenciálně nebezpečná volání funkcí. Účelem tohoto nástroje není definitivně najít chyby, ale poskytnout rozumné závěry, na základě kterých může specialista kód ručně zkontrolovat. RATS používá kombinaci bezpečnostních kontrol od sémantických kontrol v ITS4 po hloubkovou sémantickou analýzu k hledání defektů přetečení vyrovnávací paměti získaných z MOPS.
  3. . Skenuje zdrojový kód jazyka C pro potenciálně nesprávné použití funkcí podobných printf a identifikuje zranitelná místa ve formátovacích řetězcích.
  4. . Stejně jako RATS je to statický skener zdrojového kódu pro programy napsané v C/C++. Vyhledává nejčastěji zneužívané funkce, přiřazuje jim rizikové skóre (na základě informací, jako jsou předané parametry) a sestavuje seznam potenciálních zranitelností a řadí je podle rizika.

Všechny tyto nástroje jsou podobné a používají pouze lexikální a základní analýzu. Proto výsledky vytvořené těmito programy mohou obsahovat až 100 % falešných zpráv.

5. Parta

Nástroj pro analýzu a vizualizaci programů v jazyce C, který vytváří graf závislosti, který auditorovi pomáhá porozumět modulární struktuře programu.

6. OSN

Jednoduchý analyzátor zdrojového kódu. Byl navržen tak, aby našel chyby, jako jsou neinicializované proměnné, nulové ukazatele a pole mimo hranice. UNO vám umožňuje provádět jednoduchý řídicí tok a analýzu toku dat, provádět intra- i interprocedurální analýzu a specifikovat uživatelské vlastnosti. Tento nástroj však nebyl vyvinut pro analýzu skutečných aplikací, nepodporuje mnoho standardních knihoven a v této fázi vývoje neumožňuje analyzovat žádné seriózní programy.

7. FlexeLint (PC-Lint)

Tento analyzátor je určen k analýze zdrojového kódu za účelem identifikace chyb různých typů. Program provádí sémantickou analýzu zdrojového kódu, datový tok a kontrolní analýzu.

Na konci práce jsou vydány zprávy několika hlavních typů:

  • Je možný nulový ukazatel;
  • Problémy s alokací paměti (například po malloc() není free());
  • Problematický tok ovládání (například nedostupný kód);
  • Možné přetečení vyrovnávací paměti, aritmetické přetečení;
  • Upozornění na špatný a potenciálně nebezpečný styl kódu.

8. Viva64

Nástroj, který pomáhá specialistům sledovat potenciálně nebezpečné fragmenty ve zdrojovém kódu programů C/C++ spojené s přechodem z 32bitových systémů na 64bitové. Viva64 je zabudován do prostředí Microsoft Visual Studio 2005/2008, což usnadňuje pohodlnou práci s tímto nástrojem. Analyzátor vám pomůže napsat správný a optimalizovaný kód pro 64bitové systémy.

9. Parasoft C++ Test

Specializovaný nástroj pro Windows, který umožňuje automatizovat analýzu kvality kódu C++. Balíček C++Test analyzuje projekt a generuje kód pro testování komponent obsažených v projektu. Balíček C++Test dělá velmi důležitou práci při analýze tříd C++. Po načtení projektu je potřeba nastavit testovací metody. Software prozkoumá každý argument metody a vrátí typy odpovídajících hodnot. U těchto jednoduchých typů jsou nahrazeny výchozí hodnoty argumentů; Můžete definovat testovací data pro uživatelem definované typy a třídy. Můžete přepsat výchozí argumenty C++ Test a vrátit hodnoty získané z testování. Za zmínku stojí zejména schopnost C++Test testovat nedokončený kód. Software generuje útržkový kód pro jakoukoli metodu a funkci, která ještě neexistuje. Je podporována simulace externích zařízení a uživatelsky definovaná vstupní data. Obě funkce umožňují opakované testování. Po definování parametrů testu pro všechny metody je balíček C++Test připraven ke spuštění spustitelného kódu. Balíček generuje testovací kód voláním kompilátoru Visual C++, aby jej připravil. Je možné generovat testy na úrovni metody, třídy, souboru a projektu.

10. Krytí

Nástroje se používají k identifikaci a nápravě bezpečnostních a kvalitativních závad v kritických aplikacích. Technologie Coverity odstraňuje překážky při psaní a implementaci složitého softwaru tím, že automatizuje detekci a řešení kritických softwarových chyb a bezpečnostních nedostatků během procesu vývoje. Nástroj Coverity je schopen zpracovat desítky milionů řádků kódu s minimální pozitivní chybou a poskytuje 100% pokrytí sledováním.

11. KlocWork K7

Produkty společnosti jsou navrženy pro automatizovanou analýzu statického kódu, identifikaci a prevenci softwarových defektů a bezpečnostních problémů. Nástroje společnosti pomáhají identifikovat základní příčiny nedostatků v kvalitě softwaru a zabezpečení a sledovat a předcházet těmto nedostatkům během procesu vývoje.

12. Frama-C

Otevřená, integrovaná sada nástrojů pro analýzu zdrojového kódu v jazyce C. Sada obsahuje ACSL (ANSI/ISO C Specification Language) - speciální jazyk, který umožňuje podrobně popsat specifikace funkcí C, například specifikovat rozsah platných vstupních hodnot funkce a rozsah normálního výstupu. hodnoty.

Tato sada nástrojů vám pomůže provést následující:

  • Proveďte formální kontrolu kódu;
  • Hledejte potenciální chyby při provádění;
  • Proveďte audit nebo kontrolu kódu;
  • Proveďte reverzní inženýrství kódu, abyste zlepšili pochopení struktury;
  • Vytvářejte formální dokumentaci.

13. CodeSurfer

Nástroj pro analýzu programů, který není speciálně navržen pro vyhledávání slabých míst zabezpečení. Jeho hlavní výhody jsou:

  • Analýza ukazatele;
  • Různé analýzy datových toků (použití a definice proměnných, závislost na datech, konstrukce volacího grafu);
  • Skriptovací jazyk.

CodeSurfer lze použít k nalezení chyb ve zdrojovém kódu, zlepšení porozumění zdrojovému kódu a zpětnému inženýrství programů. V rámci prostředí CodeSurfer byl vyvinut prototyp nástroje pro detekci bezpečnostních zranitelností, ale vyvinutý nástroj se používá pouze v rámci vývojové organizace.

14. FxCop

Poskytuje prostředky pro automatickou kontrolu sestavení .NET z hlediska souladu s pokyny pro návrh rozhraní Microsoft .NET Framework. Kompilovaný kód je kontrolován pomocí reflexních mechanismů, analýzy MSIL a analýzy grafu volání. Výsledkem je, že FxCop je schopen detekovat více než 200 defektů (nebo chyb) v následujících oblastech:

  • Architektura knihoven;
  • lokalizace;
  • Pravidla pojmenování;
  • Výkon;
  • Bezpečnost.

FxCop poskytuje možnost vytvářet vlastní pravidla pomocí speciální sady SDK. FxCop může běžet buď v GUI nebo na příkazovém řádku.

15. JavaChecker

Toto je statický programový analyzátor Java založený na technologii TermWare.

Tento nástroj vám umožňuje identifikovat chyby kódu, jako jsou:

  • neopatrné zacházení s výjimkami (prázdné bloky catch, házení generických výjimek atd.);
  • skrytí jmen (například když je jméno člena třídy stejné jako jméno formálního parametru metody);
  • porušení stylů (programovací styl můžete nastavit pomocí sady regulárních výrazů);
  • porušení standardních smluv o používání (například když je přepsána metoda rovná se, ale ne hashCode);
  • porušení synchronizace (například když je přístup k synchronizované proměnné mimo synchronizovaný blok).

Sadu kontrol lze ovládat pomocí kontrolních komentářů.

JavaChecker lze volat ze skriptu ANT.

16. Opičí

Analyzátor podobnosti, který hledá opakovanou syntaxi ve více souborech najednou. Program rozumí syntaxi různých programovacích jazyků včetně C#, T-SQL, JavaScriptu a Visual BasicR a umí také vyhledávat opakované fragmenty v textových souborech. Více možností přizpůsobení vám umožní vyladit pravidla pro vyhledávání duplicitních kódů. Například parametr prahové hodnoty určuje, kolik opakovaných řádků kódu je považováno za duplikáty.

Simian je malý nástroj určený k efektivnímu nalezení duplicitního kódu. Nemá grafické rozhraní, ale lze jej spustit z příkazového řádku nebo k němu přistupovat programově. Výsledky jsou zobrazeny v textové podobě a mohou být prezentovány v jednom ze zabudovaných formátů (například XML). Zatímco řídké rozhraní Simian a omezené výstupní možnosti vyžadují trochu křivky učení, pomáhá udržovat integritu a efektivitu produktu. Simian je vhodný pro hledání duplicitního kódu ve velkých i malých projektech.

Duplicitní kód snižuje udržovatelnost a upgradovatelnost projektu. Simian můžete použít k rychlému nalezení duplicitních úryvků kódu v mnoha souborech najednou. Vzhledem k tomu, že Simian lze spustit z příkazového řádku, lze jej zahrnout do procesu sestavení, aby obdržel varování nebo zastavil proces v případě opakování kódu.

Závěr

Tento článek tedy zkoumal statické analyzátory zdrojového kódu, což jsou pomocné nástroje pro programátora. Každý nástroj je jiný a pomáhá monitorovat širokou škálu tříd bezpečnostních zranitelností v programech. Můžeme dojít k závěru, že statické analyzátory musí být přesné a citlivé. Ale bohužel nástroje statického ladění nemohou poskytnout absolutně spolehlivé výsledky.