Mindegyik ][ csapatnak megvannak a saját preferenciái a szoftverrel és a segédprogramokkal kapcsolatban
pentest. Konzultáció után megtudtuk: a választék annyira változó, hogy meg tudjuk tenni
egy igazi úriember bevált programkészlet. Így döntöttünk. Nak nek
Ne csinálj hobbit, az egész lista témákra van felosztva. Ma megnézzük
statikus kódelemzők
hogy keressen sebezhetőségeket az alkalmazásokban, amikor
kezek – forrásaik.

A programok forráskódjainak elérhetősége nagyban leegyszerűsíti a sebezhetőségek keresését.
Ahelyett, hogy vakon manipulálnánk a különféle paramétereket, hogy
átkerülnek az alkalmazásba, ami sokkal könnyebben áttekinthető a forrásokban, hogyan
folyamatokat. Például, ha a felhasználótól származó adatokat ellenőrzések nélkül továbbítják és
transzformációk elérik az SQL-lekérdezést – van egy SQL injekció típusú sebezhetőségünk.
Ha HTML kódban jutnak el a kimenethez, akkor klasszikus XSS-t kapunk. Tól től
egy statikus szkennernek egyértelműen észlelnie kell az ilyen helyzeteket, de ahhoz
Sajnos ez nem mindig olyan egyszerű, mint amilyennek látszik.

Modern fordítók

Viccesnek tűnhet, de az egyik leghatékonyabb elemzők
kód
maguk a fordítók. Természetesen teljes egészében arra szolgálnak
egy másik, de bónuszként mindegyik kínál egy jó hitelesítőt
forráskódok, amelyek nagyszámú hiba észlelésére képesek. Miért nem ő
menti? Kezdetben az ilyen kódellenőrzés beállításai megfelelően be vannak állítva
lojális: ennek eredményeként, hogy ne zavarja meg a programozót, a fordító elindul
csak a legsúlyosabb hibák esetén esküdj. De hiába – ha teszed
a figyelmeztetések szintje magasabb, nagyon sok kétes helyet lehet kiásni
a kódban. Valahogy így néz ki. Tegyük fel, hogy hiányzik a kód
egy karakterlánc hosszának ellenőrzése a pufferbe másolás előtt. A szkenner megtalálja a funkciót,
karakterlánc (vagy töredékének) másolása egy fix méretű pufferbe anélkül
hosszának előzetes ellenőrzése. Nyomon követi az átviteli pályát
argumentumok: a bemeneti adatoktól a sebezhető függvényig és kinézetig: lehetséges-e
válasszon olyan karakterlánchosszt, amely túlcsordulást okozna a sebezhetőben
funkciót, és az azt megelőző ellenőrzések nem szakítanák meg. Ilyen esetben
Ellenőrzés nincs, majdnem 100%-os puffertúlcsordulást találunk. A fő nehézség az
a fordító tesztelésére szolgál – „lenyeli” valaki más kódját.
Ha valaha is próbált már forrásból lefordítani egy alkalmazást, akkor tudja
milyen nehéz minden függőséget kielégíteni, különösen nagy projekteknél. De
az eredmény megéri! Sőt, a fordító mellett a nagy teljesítményű IDE-k is be vannak építve
valamilyen más eszközt kódelemzés. Például a következőnél
kód szakasza a Visual Studioban figyelmeztetést ad a használatról
az _alloca függvény ciklusa, amely gyorsan túlcsordulhat a veremen:

char *b;
csinálni (
b = (char*)_alloca(9)
) míg(1)

Ez a PREfast statikus analizátornak köszönhető. Mint az FxCop,
A felügyelt kódelemzésre tervezett PREfast natív
külön segédprogramként terjesztették, és csak később vált a Visual Studio részévé.

RATS – durva biztonsági ellenőrzési eszköz

Weboldal: www.securesoftware.com
Licenc: GNU GPL
Platform: Unix, Windows
Nyelvek: C++, PHP, Python, Ruby

Hibából hibába – viszály. Néhány hiba, amit a programozók elkövetnek
kritikátlan, és csak a program instabilitását fenyegeti. Mások éppen ellenkezőleg,
lehetővé teszi shellkód beszúrását és tetszőleges parancsok távoli végrehajtását
szerver. A kódban különösen kockázatosak azok a parancsok, amelyek lehetővé teszik a puffer végrehajtását
túlcsordulás és más hasonló típusú támadások. Nagyon sok ilyen parancs létezik, a C/C++ esetében
ezek a karakterláncokkal való munkavégzésre szolgáló függvények (xstrcpy(), strcat(), gets(), sprintf(),
printf(), snprintf(), syslog()), rendszerparancsok (access(), chown(), chgrp(),
chmod(), tmpfile(), tmpnam(), tempnam(), mktemp()), valamint a rendszerparancsok
meghívja (exec(), system(), popen()). Manuálisan ellenőrizze az összes kódot (különösen
ha több ezer sorból áll) elég unalmas. Ami azt jelenti, hogy lehetséges
Könnyű figyelmen kívül hagyni, hogy egyes funkcióknak ellenőrizetlen paramétereket adjunk át.
A speciális ellenőrzési eszközök nagyban megkönnyíthetik a feladatot, többek között
híres segédprogram PATKÁNYOK (Durva auditáló eszköz a biztonság érdekében) tól től
híres Fortify cég. Nemcsak sikeresen kezeli a kódfeldolgozást,
C/C++ nyelven íródott, de képes Perl, PHP és Python nyelven is feldolgozni szkripteket.
A segédprogram-adatbázis lenyűgöző válogatást tartalmaz a problémák részletes leírásával
helyek a kódban. Analizátor segítségével feldolgozza a neki etetett sóskát és
megpróbálja azonosítani a hibákat, majd tájékoztatást ad a talált hibákról.
PATKÁNYOK
parancssoron keresztül működik, mind Windows, mind *nix rendszereken.

Yasca

Weboldal: www.yasca.org
Licenc: nyílt forráskódú
Platform: Unix, Windows
Nyelvek: C++, Java, .NET, ASP, Perl, PHP, Python és mások.

Yasca csakúgy, mint a RATS-nek nincs szüksége telepítésre, és nincs is
csak egy konzolfelület, hanem egy egyszerű grafikus felület is. A fejlesztők ajánlják
futtassa a segédprogramot a konzolon keresztül - azt mondják, így több lehetőség van. Vicces mi
A Yasca motor PHP 5.2.5-ben íródott, és az értelmező (a legcsupaszítottabb verziójában)
opció) a programot tartalmazó archívum egyik almappájában található. Az egész program logikus
előtérből, szkennelő beépülő modulokból, jelentéskészítőből és egy jelentéskészítőből áll
maga a motor, amitől az összes sebességfokozat együtt forog. Beépülő modulok
bekerül a plugins könyvtárba – ott is továbbiakat kell telepíteni
kiegészítéseket. Fontos pont! Három szabványos bővítményt tartalmaz
Yasca
, kellemetlen függőségei vannak. JLint, amely a Java-t vizsgálja
.class fájlokat, a jlint.exe fájl szükséges az erőforrás/segédprogram könyvtárban. Második
A Java és C/C++ források elemzésére használt antiC bővítmény antic.exe fájlt igényel
ugyanabban a könyvtárban. A Java kódot feldolgozó PMD működéséhez pedig szükség van rá
Java JRE 1.4 vagy újabb rendszerre telepítve. Ellenőrizze a telepítés helyességét
ezt a "yasca ./resources/test/" parancs beírásával teheti meg. Hogyan néz ki a szkennelés?
A programba betáplált fajták feldolgozása után, Yasca ként adja meg az eredményt
különleges jelentés. Például az egyik szabványos GREP bővítmény lehetővé teszi
a .grep fájlokban leírt minták segítségével jelezze a sebezhető struktúrákat és
Könnyen azonosíthatja a sebezhetőségek körét. Az ilyen minták egy készlete már szerepel
program: gyenge titkosítás keresése, engedélyezés a „jelszó egyenlő a bejelentkezéssel”,
lehetséges SQL injekciók és még sok más. Mikor szeretnéd látni a riportban
Részletesebb információkért ne legyen lusta további bővítmények telepítésére. Mit
Egy dolog, amit érdemes megemlíteni, az az, hogy a segítségükkel emellett beolvashatja a kódot
.NET (VB.NET, C#, ASP.NET), PHP, ColdFusion, COBOL, HTML, JavaScript, CSS,
Visual Basic, ASP, Python, Perl.

Cppcheck

Weboldal:
Licenc: nyílt forráskódú
Platform: Unix, Windows
Nyelvek: C++

Fejlesztők Cppcheckúgy döntött, hogy nem vesztegeti az időt apróságokra, és ezért
Csak szigorúan meghatározott kategóriájú hibákat észlelnek, és csak C++ kódban.
Ne várja el, hogy a program megismételje a fordító figyelmeztetéseit – megteszi anélkül
súgó. Ezért ne legyen lusta a fordítóprogramot a maximális szintre állítani
figyelmeztetéseket, és a Cppcheck segítségével ellenőrizze a memóriaszivárgást és a jogsértéseket
kiosztás-felosztás műveletek, különféle puffertúlcsordulás, használat
elavult funkciók és még sok más. Fontos részlet: Cppcheck fejlesztők
Igyekeztünk minimálisra csökkenteni a hamis pozitívumok számát. Ezért ha
program hibát rögzít, akkor valószínűleg azt mondhatja: „Tényleg
igen!" Az elemzést akár a konzolról, akár egy szép eszközzel futtathatja
Qt nyelven írt grafikus felület, amely bármilyen platformon fut.

gradit

Weboldal:
www.justanotherhacker.com/projects/gaudit.html
Licenc: nyílt forráskódú
Platform: Unix, Windows
Nyelvek: C++, PHP, Python, Perl

Ez az egyszerű szkript, egy sor aláírással kombinálva, lehetővé teszi számos megtalálását
kritikus biztonsági rések a kódban, és a keresés az összes használatával történik
a jól ismert grep segédprogram. Nem helyénvaló itt még megemlíteni a grafikus felületet: ez minden
a konzolon keresztül hajtják végre. Számos kulcs van az indításhoz, de a legtöbb
Egyszerű esetben elegendő paraméterként megadni a források elérési útját:

gradit /path/to/scan

Erőfeszítéseid jutalma egy színes jelentés lesz a potenciálisan kizsákmányolt esetekről
helyek a kódban. Azt kell mondanom, hogy magán a szkripten kívül (és ez csak 100 sor
kód Bash-ban), az érték azokból az aláírási adatbázisokból származik, amelyekben
reguláris kifejezések és a potenciálisan sebezhető függvények nevei különböző nyelveken. Alapértelmezett
a Python, Perl, PHP, C++ alapok benne vannak - az aláírások mappájából vehet fájlokat
és használja fel saját fejlesztései során.

SWAAT

Weboldal: www.owasp.org
Licenc: nyílt forráskódú
Platform: Unix, Windows
Nyelvek: Java, JSP, ASP .Net, PHP

Ha a graudit szöveges fájlokat használ a sebezhetőségi aláírás beállításához,
majd be SWAAT– progresszívebb megközelítés XML-fájlok használatával. Mint ez
Egy tipikus aláírás így néz ki:

vuln match - reguláris kifejezés a kereséshez;
típus - jelzi a sebezhetőség típusát:
súlyosság – jelzi a kockázati szintet (magas, közepes vagy alacsony)
alt - alternatív kód a probléma megoldására

SWAAT beolvassa az aláírás-adatbázist, és annak segítségével próbálja megtalálni a problémásakat
kódrészek a forráskódokban Java, JSP, ASP .Net és PHP nyelven. Az alap folyamatosan
növekszik, és a „veszélyes” funkciók listája mellett tipikus hibákat is tartalmaz
karakterlánc formázással és SQL lekérdezések írásával. Figyelemre méltó, hogy
hogy a program C#-ban van írva, de niks alatt jól működik, köszi
a Mono projekthez - a .Net platform nyílt megvalósítása.

PHP hibakereső

Weboldal:
raz0r.name/releases/php-bug-scanner
Licenc: Freeware
Platform: Windows
Nyelvek: PHP

Ha statikus elemzést kell végeznie egy PHP-alkalmazáson, azt javaslom
próbáld ki PHP hibakereső, amelyet szerzőnk - raz0r írt. Munka
A program PHP szkriptekben lévő különféle függvények és változók vizsgálatán alapul,
amelyek webes támadásokban használhatók. Az ilyenek leírása
szituációk úgynevezett presetek formájában formalizálódnak, és máris a program
7 speciális előbeállítást tartalmaz, kategóriák szerint csoportosítva:

  • kód végrehajtása;
  • parancs végrehajtása;
  • címtár bejárás;
  • a globálisok felülírják;
  • tartalmazza;
  • SQL injekció;
  • vegyes.

Vicces, hogy be van írva a program
PHP/WinBinder és lefordítva
bamcompile , így úgy néz ki, mint egy normál Windows-alkalmazás. Keresztül
kényelmes interfész, a pentester engedélyezheti vagy letilthatja a kódelemzést a jelenlétére vonatkozóan
bizonyos sebezhetőségek.

Tündér

Weboldal:
pixybox.seclab.tuwien.ac.at
Licenc: Freeware
Platform: Unix, Windows
Nyelvek: PHP

Az eszköz forráskód beolvasásán és grafikonok készítésén alapul
adatfolyamok. Ez a grafikon nyomon követi a beérkező adatok útvonalát
programon kívülről - a felhasználótól, az adatbázisból, valamilyen külső felől
plugin stb. Ily módon a sebezhető pontok (vagy bejáratok) listája a
alkalmazások. A sebezhetőségeket leíró minták segítségével a Pixy ellenőrzi az ilyeneket
pontokat, és lehetővé teszi az XSS és SQL biztonsági rések azonosítását. Sőt, maguk a grafikonok, amelyek
az elemzés során felépült, a grafikonok mappában megtekinthető (pl.
xss_file.php_1_dep.dot) – ez nagyon hasznos a miértek megértéséhez
ez vagy az a kódrészlet Pixy-sebezhetőnek minősül. Általában maga a fejlesztés
rendkívül tanulságos, és bemutatja a fejlett segédprogramok működését
statikus kódelemzés. Az oldalon

dokumentációt, a fejlesztő egyértelműen beszél a munka különböző szakaszairól
program, elmagyarázza a program elemzésének logikáját és algoritmusát
ez vagy az a kódrészlet. Maga a program Java nyelven íródott és terjesztve
nyílt forráskódú, és a kezdőlapon még egy egyszerű online szolgáltatás is található
hogy ellenőrizze a kódot XSS-sebezhetőségek szempontjából.

6 uncia

Weboldal: www.ouncelabs.com/products
Licenc: Shareware
Platform: Windows

Sajnos a meglévő ingyenes megoldások még mindig a kereskedelmi megoldások alatt vannak
analógok. Elég a jelentés minőségét és részletességét tanulmányozni, ami igen
6 uncia
– és megérti, miért. A program egy speciális
Unce Core elemzőmotor, amely ellenőrzi, hogy a kód megfelel-e a szabályoknak
és a professzionális behatolók csapata által összeállított irányelvek,
felhalmozódott a neves biztonsági cégek, a hacker közösség, valamint a tapasztalata
biztonsági szabványok. A program számos biztonsági rést észlel a kódban: tól
Puffertúlcsordulás SQL-befecskendezések előtt. Ha szükséges, az uncia könnyen integrálható
népszerű IDE-k az automatikus kódellenőrzés megvalósításához a felépítés során
a fejlesztés alatt álló alkalmazás minden új buildjét. Apropó,
A fejlesztő céget, az Ounce Labs-t maga az IBM vásárolta fel ezen a nyáron. Így
hogy a termék nagy valószínűséggel tovább fog fejlődni valamelyik részeként
IBM kereskedelmi alkalmazások.

Klocwork Insight

Weboldal: www.klocwork.com
Licenc: Shareware
Platform: Windows
Nyelvek: C++, Java, C#

Ez az ismét kereskedelmi termék hosszú ideig statikus volt
Kódbeolvasás csak C, C+ és Java esetén. De amint megjelent a Visual Studio
2008 és .NET Framework 3.5, a fejlesztők bejelentették a C# támogatását. elhajtottam
program két segédprojektjéről, amelyeket sietve írt
a Sharpe-on, és a program 7 kritikus biztonsági rést azonosított. Még jó, hogy ők
csak belső használatra írva :). Klocwork Insight
kezdetben elsősorban integrált környezetekkel való együttműködésre lett beállítva
fejlesztés. Az integráció ugyanazzal a Visual Studióval vagy Eclipse-szel rendkívül jó
sikeres - elkezdi komolyan gondolni, hogy ilyen funkciónak léteznie kell
alapból megvalósítva bennük :). Ha nem veszed figyelembe a logikai problémákat
az alkalmazás teljesítményét és a teljesítményproblémákat Klocwork Insight
nagyszerű munkát végez a puffertúlcsordulás és a hiányzó szűrés megtalálásában
egyéni kód, SQL/Path/Cross-site injektálási képességek, gyenge
titkosítás stb. Egy másik érdekes lehetőség a végrehajtási fa építése
alkalmazás, amely lehetővé teszi az alkalmazás általános elvének gyors megértését és
külön figyelemmel kíséri például bármely felhasználó feldolgozását
bemenet. A kód-ellenőrzési szabályok gyors felépítéséhez pedig még ez is javasolt
speciális szerszám - Klocwork Checker Studio.

Coverity Prevent statikus elemzés

Weboldal: www.coverity.com/products
Licenc: Shareware
Platform: Windows
Nyelvek: C++, Java, C#

Az egyik leghíresebb statikus kódelemző C/C++, Java és C# nyelven.
A megoldást készítői szerint több mint 100 ezren használják
fejlesztők a világ minden tájáról. A jól átgondolt mechanizmusok lehetővé teszik az automatizálást
keressen memóriaszivárgást, fel nem fogott kivételeket, teljesítményproblémákat és
biztonsági réseket természetesen. A termék különböző platformokat támogat,
fordítóprogramok (gcc, Microsoft Visual C++ és még sok más), és integrálható is
különféle fejlesztői környezetek, elsősorban az Eclipse és a Visual Studio. A magban
a kódbejárás nem hülye bejárási algoritmusokat használ az elejétől a végéig, hanem valamit
mint egy hibakereső, amely elemzi, hogy egy program hogyan fog másképpen viselkedni
fiókgyűlést követő helyzetekben. Így 100%-os kódlefedettség érhető el.
Ilyen komplex megközelítésre volt szükség többek között a teljes körű elemzéshez
többszálú alkalmazások, amelyeket kifejezetten többmagos futtatásra optimalizáltak
processzorok. Coverity Integrity Center lehetővé teszi az ilyen hibák megtalálását
versenyfeltételként (tervezési hiba egy többfeladatos rendszerben, amelyben
a rendszer működése a kód egyes részei végrehajtási sorrendjétől függ), holtpontok
és még sok más. Miért van erre szükség a visszafordítóknak? Kérdezd meg a 0day fejlesztőit erről
exploit Firefox és IE számára :).

OWASP Code Crawler

Weboldal: www.owasp.org
Licenc: GNU GPL
Platform: Windows
Nyelvek: Java, C#, VB

Az eszköz megalkotója, Alessio Marziali két könyv szerzője az ASP.NET-ről,
a nagy terhelésű alkalmazások jó hírű kódolója a pénzügyi szektor számára, valamint
pentester. 2007-ben a 27 kritikus sebezhetőségeiről tett közzé információkat
Olasz kormány weboldalai. Az agyszüleménye - OWASP Code Crawler
.NET és J2EE/JAVA kód statikus elemzésére tervezték, nyíltan elérhető
az interneten, és az év végén a szerző azt ígéri, hogy kiadja a program új verzióját a
sokkal több funkcionalitás. De a legfontosabb dolog már megvalósult -
forráskódok elemzése C#, Visual Basic és Java nyelven. A beolvasni kívánt fájlok kiválasztásra kerülnek
a GUI felületen keresztül, és a szkennelés automatikusan elindul. Az egyes
A kód probléma szakaszában a biztonsági rés leírása megjelenik a Fenyegetés részben
Leírás. Igaz, mező OWASP irányelvek valószínűleg az utat jelzi
Sajnos a problémára még nem létezik megoldás. De használhatod
a kód beolvasásának kísérleti funkciója egy távoli gépen, elérhető
a Távoli szkennelés lapon. A szerző megígéri, hogy komolyan frissíti ezt a funkciót, és be
beleértve az alkalmazási források összesítését az elemzéshez közvetlenül a rendszerből
verzióvezérlés.

FIGYELEM

Az információkat tájékoztató jellegűek, és mindenekelőtt megmutatják
hogyan kerülhetik el a fejlesztők a kritikus hibákat a fejlesztés során
alkalmazások. A megszerzett tudás illegális célú felhasználásáért sem a szerző, sem
a szerkesztők nem vállalnak felelősséget.

Az emberek hibáznak, amikor C és C++ nyelven írnak kódot. A hibák közül sok a -Wallnak, állításoknak, teszteknek, aprólékos kód-ellenőrzéseknek, az IDE figyelmeztetéseinek, a projekt különböző fordítókkal való felépítésének köszönhetően a különböző hardvereken futó, különböző operációs rendszerekhez és így tovább. De még mindezen intézkedések mellett is gyakran nem veszik észre a hibákat. A statikus kódelemzés némileg javíthat a helyzeten. Ebben a jegyzetben megismerkedünk néhány eszközzel ennek a nagyon statikus elemzésnek az elvégzéséhez.

CppCheck

A CppCheck egy ingyenes, nyílt forráskódú (GPLv3) platformfüggetlen statikus elemző. Számos *nix rendszer kiszerelésében kapható. A CppCheck számos IDE-vel is integrálható. Az írás idején a CppCheck egy élő, fejlődő projekt.

Használati példa:

cppcheck ./src/

Példa kimenet:

: (hiba) Gyakori realloc hiba: "numarr" nullázva, de nem
felszabadult kudarc esetén

: (hiba) Az "n" veszélyes használata (az strncpy nem mindig
null-szüntesse meg)

A CppCheck jó, mert elég gyorsan működik. Nincs ok arra, hogy ne adja hozzá a futtatását a folyamatos integrációs rendszerhez, hogy kijavítsa az összes, minden, minden általa megjelenített figyelmeztetést. Annak ellenére, hogy sok közülük a gyakorlatban hamis pozitívnak bizonyul.

Clang statikus elemző

Egy másik ingyenes, nyílt forráskódú, többplatformos statikus elemző. Az úgynevezett LLVM verem része. A CppCheck-kel ellentétben lényegesen lassabban működik, de sokkal komolyabb hibákat is talál.

Példa a PostgreSQL jelentés elkészítésére:

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

Példa a FreeBSD rendszermag jelentésének előállítására:

# a saját MAKEOBJDIR használatával lehetővé teszi a kernelt root nélkül
mkdir/tmp/freebsd-obj
# magát a szerelvényt
COMPILER_TYPE =clang / usr/ local/ bin/ scan-build38 -o ../ report-201604 / \
make buildkernel KERNCONF =GENERIC MAKEOBJDIRPREFIX =/ tmp/ freebsd-obj

Az ötlet, ahogy sejthető, az, hogy meg kell tisztítani, majd futtatni a buildet scan-build alatt.

A kimenet egy nagyon szép HTML jelentés, részletes magyarázatokkal, a hibák típus szerinti szűrésének lehetőségével stb. Feltétlenül nézze meg a weboldalt, hogy lássa, hogyan néz ki.

Ebben az összefüggésben nem tudom nem megjegyezni, hogy a Clang/LLVM világában is vannak eszközök dinamikus az úgynevezett „fertőtlenítők”. Sok van belőlük, nagyon klassz hibákat találnak, és gyorsabban működnek, mint a Valgrind (bár csak Linuxon). Sajnos a fertőtlenítőszerek megvitatása túlmutat ennek a jegyzetnek a keretein, ezért olvassa el Ön is.

PVS-stúdió

Zárt statikus analizátor, pénzért forgalmazva. A PVS-Studio csak Windows alatt és csak a Visual Studióval működik. Számos információ létezik a Linux verzió létezéséről, de ez nem érhető el a hivatalos webhelyen. Ha jól értem, a licenc árát minden ügyféllel egyénileg megbeszéljük. Kipróbálható.

A PVS-Studio 6.02-t teszteltem Windows 7 SP1 rendszeren, amely KVM alatt fut, és telepítve van a Visual Studio 2013 Express Edition. A PVS-Studio telepítése során a .NET Framework 4.6 is letöltődött. Valahogy így néz ki. Megnyitja a projektet (PostgreSQL-en teszteltem) a Visual Studióban, a PVS-Studio-ban kattintson a „most elkezdem a projekt felépítésére”, majd a Visual Studio-ban kattintson a Build gombra, amikor a PVS-Studio-ban az összeépítés befejeződött, kattintson az „I” gombra. m kész” és tekintse meg a jelentést.

A PVS-Studio valóban nagyon klassz hibákat talál, amelyeket a Clang Static Analyzer nem lát (például). Nagyon tetszett az a felület is, amely lehetővé teszi a hibák rendezését és szűrését típusuk, súlyosságuk, fájl, amelyben megtalálták stb.

Egyrészt szomorú, hogy a PVS-Studio használatához a projektnek képesnek kell lennie a Windows alatti fordításra. Másrészt a CMake használata egy projektben, valamint annak elkészítése és tesztelése különböző operációs rendszereken, beleértve a Windowst is, mindenesetre nagyon jó ötlet. Szóval ez talán nem is olyan nagy hátrány. Ezenkívül a következő linkeken találhat néhány tippet arra vonatkozóan, hogy az emberek hogyan tudták futtatni a PVS-Studio-t olyan projekteken, amelyek nem Windowsra készültek: egy, kettő, három, négy.

Kiegészítés: Kipróbáltam a PVS-Studio for Linux béta verzióját. Kiderült, hogy nagyon könnyen használható. A pvs.conf fájlt körülbelül a következő tartalommal hozzuk létre:

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

Akkor azt mondjuk:

tisztává tenni
./ Beállítás ...
pvs-studio-analyzer trace -- gyártmány
# egy nagy (számomra ~40 MB) strace_out fájl jön létre
pvs-studio-analyzer elemzés --cfg ./ pvs.conf
plog-converter -t feladatlista -o result.task pvs-output.log

Kiegészítés: A PVS-Studio for Linux kilépett a bétaverzióból, és mostantól mindenki számára elérhető.

Coverity Scan

A Coverity az egyik legkifinomultabb (és ezért drága) statikus analizátornak számít. Sajnos még a próbaverzióját sem lehet letölteni a hivatalos webhelyről. Ki tudja tölteni az űrlapot, és ha Ön IBM személy, felvehetjük Önnel a kapcsolatot. Nál nél Nagyon A Coverity erős vágya valamilyen őskori változat iránt nem hivatalos csatornákon keresztül is megtalálható. Elérhető Windowsra és Linuxra, és körülbelül ugyanazon az elven működik, mint a PVS-Studio. De sorozatszám vagy gyógyszer nélkül a Coverity nem jelenít meg jelentéseket. És ahhoz, hogy egy sorozatszámot vagy egy gyógyszert találjon, nemcsak nagyon erős vágyra van szüksége, hanem nagyon-nagyon... Nagyon erős.

Szerencsére a Coverity rendelkezik SaaS-verzióval - Coverity Scan. A Coverity Scan nemcsak halandók számára érhető el, hanem teljesen ingyenes is. Nincs kapcsolat egy adott platformhoz. A Coverity Scan segítségével azonban csak a nyitott projektek elemezhetők.

Íme, hogyan működik. A webes felületen keresztül regisztrálja projektjét (vagy csatlakozik egy meglévőhöz, de ez kevésbé érdekes eset). A jelentések megtekintéséhez moderáláson kell keresztülmennie, ami 1-2 munkanapot vesz igénybe.

A jelentések így készülnek. Először helyileg készítse el a projektet a Coverity Build Tool nevű speciális segédprogram segítségével. Ez a segédprogram hasonló a Clang Static Analyzer scan-build-jához, és minden elképzelhető platformon elérhető, beleértve az összes egzotikumot, mint például a FreeBSD vagy akár a NetBSD.

A Coverity Build Tool telepítése:

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

Készítsünk egy tesztprojektet (a kódot használtam a következő bejegyzésből: Tanuljuk tovább az OpenGL-t: egyszerű szöveges kimenet):

git klón git @ github.com:afiskon/c-opengl-text.git
cd c-opengl-text
git almodul init
git almodul frissítés
mkdir build
cd build
cmake..

Ezután összeállítjuk a projektet cov-build alatt:

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

Fontos! Ne változtassa meg a cov-int könyvtár nevét.

A cov-int könyvtár archiválása:

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

Töltse fel az archívumot a Project Build feltöltése űrlapon keresztül. A Coverity Scan webhelyen is találhatók utasítások ennek a lépésnek a curl használatával történő automatizálásához. Várunk egy kicsit, és láthatjuk az elemzés eredményét. Kérjük, vegye figyelembe, hogy a moderálás átadásához legalább egy buildet el kell küldenie elemzésre.

A Coverity Scan nagyon jól keresi a hibákat. Természetesen jobb, mint a Clang Static Analyzer. Ugyanakkor vannak téves pozitívumok, de ezek sokkal kisebbek. Kényelmes, hogy a webes felületen van valami beépített hibakövető, amely lehetővé teszi a hibák súlyosságának, kijavításuk felelősségének és hasonló dolgoknak a meghatározását. Megtekintheti, hogy mely hibák újak, és melyek voltak már a korábbi buildekben. A hamis pozitívumok megjelölhetők és elrejthetők.

Kérjük, vegye figyelembe, hogy nem kell tulajdonosnak lennie ahhoz, hogy egy projektet a Coverity Scanben elemezzen. Én személy szerint nagyon sikeres voltam a PostgreSQL kód elemzésében anélkül, hogy csatlakoztam volna egy meglévő projekthez. Az is látszik, hogy ha nagyon akarod (például Git almodulokat használva), becsúsztathatsz egy kis és nem túl nyílt forráskódot az áttekintéshez.

Következtetés

Íme néhány további statikus elemző, amelyek nem szerepeltek a felülvizsgálatban:

Az elemzett analizátorok mindegyike talál olyan hibákat, amelyeket mások nem. Ezért ideális esetben érdemes egyszerre használni őket. Ha ezt állandóan közvetlenül csinálod, az valószínűleg nem fog objektíven működni. De minden kiadás előtt legalább egy futtatás biztosan nem lesz rossz ötlet. Ugyanakkor a Clang Static Analyzer tűnik a legsokoldalúbbnak és egyben elég erősnek is. Ha érdekli egy elemző, amely minden projekthez elengedhetetlen, használja ezt. Ennek ellenére azt javaslom, hogy legalább a PVS-Studio vagy a Coverity Scan használatát használja.

Milyen statikus analizátorokat próbált ki és/vagy használt rendszeresen, és mi a benyomása róluk?

Statikus kódelemzés Ez a programok forráskódjában található hibák és hiányosságok azonosításának folyamata. A statikus elemzés felfogható egy automatizált kódellenőrzési folyamatnak. Nézzük meg közelebbről a kód áttekintését.

A kódellenőrzés az egyik legrégebbi és legmegbízhatóbb módszer a hibák azonosítására. Ez abból áll, hogy közösen gondosan elolvassák a forráskódot, és javaslatokat tesznek annak javítására. A kódolvasási folyamat felfedi azokat a hibákat vagy a kód részeit, amelyek a jövőben hibássá válhatnak. Úgy gondolják, hogy a kód szerzőjének nem szabad elmagyaráznia, hogyan működik a program egy vagy másik része a felülvizsgálat során. A működési algoritmusnak közvetlenül a programszövegből és a megjegyzésekből világosnak kell lennie. Ha ez a feltétel nem teljesül, akkor a kódot módosítani kell.

A kódellenőrzések általában jól működnek, mert a programozók sokkal nagyobb valószínűséggel észlelnek hibákat mások kódjában. A kódellenőrzési technikákról többet megtudhat Steve McConnell kiváló könyvéből, a Code Complete-ből.

Az együttműködési kódellenőrzési módszer egyetlen jelentős hátránya a rendkívül magas költség. Több programozót rendszeresen össze kell hívni, hogy az új kódot felülvizsgálják, vagy az ajánlások megfogalmazása után újra áttekintsék a kódot. Ugyanakkor a programozóknak rendszeres pihenőt kell tartaniuk. Ha egyszerre nagy kódrészletet próbál átnézni, figyelme hamar elhomályosul, és a kódellenőrzés előnyei gyorsan eltűnnek.

Kiderült, hogy egyrészt rendszeresen szeretné felülvizsgálni a kódot. Másrészt túl drága. Kompromisszumos megoldás a statikus kódelemző eszközök. Fáradhatatlanul feldolgozzák a programok forráskódját, és ajánlásokat adnak a programozónak, hogy fordítson különös figyelmet a kód egyes szakaszaira. Természetesen a program nem helyettesíti a programozók csapata által végzett teljes kódellenőrzést. A haszon/költség arány azonban nagyon hasznos gyakorlattá teszi a statikus elemzés alkalmazását sok vállalatnál.

A statikus kódelemző programokkal megoldott problémák 3 kategóriába sorolhatók:

  1. A programok hibáinak azonosítása. Erről az alábbiakban részletesebben lesz szó.
  2. Javaslatok a kód formázásához. Egyes statikus elemzők lehetővé teszik annak ellenőrzését, hogy a forráskód megfelel-e a vállalat kódformázási szabványának. Ez a különböző tervek behúzásának mértékének szabályozására vonatkozik, szóközök/tabulátor karakterek használatára stb.
  3. Metrikus számolás. A szoftvermetrika egy olyan mérőszám, amely számértéket ad a szoftver vagy annak specifikációinak bizonyos tulajdonságaihoz. Számos különböző mérőszám létezik, amelyeket különféle eszközökkel lehet kiszámítani.

A statikus kódelemzés további előnyei:

  1. Teljes kód lefedettség. A statikus analizátorok még azokat a kódrészleteket is ellenőrzik, amelyek rendkívül ritkán kapnak vezérlést. Az ilyen kódszakaszok általában nem tesztelhetők más módszerekkel. Ez lehetővé teszi a ritka eseménykezelők, hibakezelők vagy a naplózó rendszer hibáinak megtalálását.
  2. A statikus elemzés független a használt fordítótól és a környezettől, amelyben a lefordított program végrehajtásra kerül. Ez lehetővé teszi, hogy megtalálja azokat a rejtett hibákat, amelyek csak néhány év múlva jelennek meg. Például ezek nem meghatározott viselkedésű hibák. Ilyen hibák megjelenhetnek a fordító verziójának módosításakor vagy más kapcsolók használatakor a kód optimalizálására. A rejtett hibák másik érdekes példája a „Memória felülírása - miért?” című cikkben található.
  3. Könnyen és gyorsan észreveheti az elírási hibákat és a Copy-Paste használatának következményeit. Általános szabály, hogy ezeket a hibákat más módon találni nem hatékony idő- és erőfeszítéspazarlás. Kár, hogy egy óra hibakeresés után felfedezzük, hogy a hiba egy olyan kifejezésben van, mint a "strcmp(A, A)". A tipikus hibák megbeszélésekor az ilyen baklövéseket általában nem említik. A gyakorlatban azonban jelentős időt vesz igénybe azonosításuk.

A statikus kódelemzés hátrányai

  1. A statikus elemzés általában gyenge a memóriaszivárgás és a párhuzamossági hibák diagnosztizálásában. Az ilyen hibák észleléséhez gyakorlatilag végre kell hajtani a program egy részét. Ezt rendkívül nehéz megvalósítani. Ezenkívül az ilyen algoritmusok sok memóriát és CPU-időt igényelnek. A statikus analizátorok általában az egyszerű esetek diagnosztizálására korlátozódnak. A memóriaszivárgások és az egyidejű hibák azonosításának hatékonyabb módja a dinamikus elemző eszközök használata.
  2. A statikus elemző program figyelmeztet a gyanús helyekre. Ez azt jelenti, hogy valójában a kód teljesen helyes lehet. Ezeket hamis pozitívnak nevezzük. Csak a programozó értheti meg, hogy az analizátor hibát jelez-e, vagy hamis pozitívat generált. A hamis pozitívumok felülvizsgálatának szükségessége munkaidőt vesz igénybe, és csökkenti a figyelmet a kód azon részeire, amelyek valóban hibákat tartalmaznak.

A statikus analizátorok által észlelt hibák nagyon változatosak. Itt található például a PVS-Studio eszközben megvalósított diagnosztikák listája. Egyes analizátorok egy adott területre vagy hibatípusra specializálódtak. Mások támogatnak bizonyos kódolási szabványokat, például MISRA-C:1998, MISRA-C:2004, Sutter-Alexandrescu szabályok, Meyers-Klaus szabályok és így tovább.

A statikus elemzés területe aktívan fejlődik, új diagnosztikai szabályok és szabványok jelennek meg, és néhány szabály elavulttá válik. Ezért nincs értelme az analizátorokat az észlelt hibák listája alapján összehasonlítani. Az eszközök összehasonlításának egyetlen módja, ha végigfuttatjuk őket egy sor projekten, és megszámoljuk az általuk talált valódi hibák számát. Ezt a témát a cikk részletesebben tárgyalja "

Bevezetés

A szoftvertermékek és a különféle vezérlőrendszerek szabványos képességei a legtöbb ügyfél számára nem elegendőek. Weboldal-kezelő rendszerek (például WordPress, Joomla vagy Bitrix), számviteli programok, ügyfélkezelési rendszerek (CRM), vállalati és termelési rendszerek (például 1C és SAP) bőséges lehetőséget kínálnak a funkcionalitás bővítésére és az egyes ügyfelek igényeihez való alkalmazkodásra. Az ilyen képességek megvalósítása harmadik féltől származó egyedi modulok vagy a meglévő modulok testreszabása segítségével történik. Ezek a modulok a beépített programozási nyelvek egyikén írt programkódok, amelyek kölcsönhatásba lépnek a rendszerrel és megvalósítják az ügyfelek által igényelt funkcionalitást.

Nem minden szervezet ismeri fel, hogy a testre szabott beágyazott kódok vagy webhelyek súlyos sebezhetőségeket tartalmazhatnak, amelyek támadó általi kihasználása bizalmas információk kiszivárgásához vezethet, a szoftveres könyvjelzők pedig a kód speciális részei, amelyeket titkos parancsokkal végzett műveletek végrehajtására terveztek. ismeri a kódfejlesztő . Ezenkívül az egyéni kód olyan hibákat is tartalmazhat, amelyek tönkretehetik vagy megsérthetik az adatbázisokat, vagy megzavarhatják a gördülékeny üzleti folyamatokat.

A fent ismertetett kockázatokat ismerő cégek a kész modulok elfogadásához próbálnak auditorokat, szakembereket bevonni a programok forráskódjainak elemzésébe, hogy a szakértők meg tudják állapítani a kifejlesztett megoldás biztonságát és megbizonyosodjanak arról, hogy nincsenek sebezhetőségei, hibák vagy szoftverhibák bennük. Ennek az ellenőrzési módszernek azonban számos hátránya van. Először is, ez a szolgáltatás komolyan megnöveli a fejlesztési költségvetést; másodszor, az audit és elemzés lefolytatása hosszú időt vesz igénybe - egy héttől több hónapig; és harmadszor, ez a megközelítés nem garantálja az elemzett kóddal kapcsolatos problémák teljes hiányát - a kód elfogadása és üzembe helyezése után fennáll az emberi hiba és a korábban ismeretlen támadási vektorok felfedezésének lehetősége.

Létezik egy biztonságos fejlesztési módszertan, amely biztosítja az audit és a kódvezérlési folyamatok integrációját a szoftvertermék - SDL (Security Development Lifecycle, biztonságos fejlesztési életciklus) - létrehozásának szakaszában. Ezt a módszert azonban csak szoftverfejlesztő tudja alkalmazni, ha már vásárlókról beszélünk, akkor az SDL számukra nem alkalmazható, mivel a folyamat a kódkészítő algoritmusok átstrukturálásával jár, és az elfogadáskor már késő használni. Ezenkívül sok fejlesztés a meglévő kód egy kis részét érinti, amely esetben az SDL szintén nem alkalmazható.

A forráskód-auditálás problémájának megoldására és a beágyazott kódok és webalkalmazások sebezhetőségeinek kiaknázása elleni védelem biztosítására forráskód-elemzők állnak rendelkezésre.

A forráskód-elemzők osztályozása

A forráskód-elemzők a szoftvertermékek egy osztálya, amelyet a forráskódokban előforduló szoftverhibák azonosítására és kiaknázásának megakadályozására hoztak létre. A forráskód elemzésére szolgáló összes termék három típusra osztható:

  • Az első csoportba tartoznak a webalkalmazás-kódelemzők és a webhelyek sebezhetőségeinek kihasználását megakadályozó eszközök.
  • A második csoport a beágyazott kódelemzők, amelyek lehetővé teszik a problémás területek észlelését a vállalati és termelési rendszerek funkcionalitásának bővítésére tervezett modulok forráskódjában. Az ilyen modulok közé tartoznak az 1C termékcsalád programjai, a CRM-rendszerek bővítései, a vállalatirányítási rendszerek és az SAP-rendszerek.
  • Az utolsó csoport célja a forráskód elemzése különböző programozási nyelveken, amelyek nem kapcsolódnak az üzleti alkalmazásokhoz és a webes alkalmazásokhoz. Az ilyen analizátorok az ügyfelek és a szoftverfejlesztők számára készültek. Az analizátorok ezen csoportja a biztonságos szoftverfejlesztés módszertanának használatára is szolgál. A statikus kódelemzők megtalálják a problémákat és a lehetséges sebezhetőségeket a forráskódokban, és javaslatokat tesznek ezek kiküszöbölésére.

Érdemes megjegyezni, hogy az analizátorok többsége vegyes típusú, és számos szoftvertermék - webes alkalmazások, beágyazott kód és normál szoftver - elemzésére szolgál. Ez az áttekintés azonban a fejlesztő ügyfelek által használt analizátorokra összpontosít, így nagyobb figyelmet fordítanak a webalkalmazásokhoz és a beágyazott kódokhoz készült analizátorokra.

Az elemzők különféle elemzési mechanizmusokat tartalmazhatnak, de a leggyakoribb és univerzális a forráskód statikus elemzése - SAST (Static Application Security Testing), vannak dinamikus elemzési módszerek is - DAST (Dynamic Application Security Testing), amelyek végrehajtása során kódellenőrzést végeznek. és különféle hibrid opciók, amelyek különböző típusú elemzéseket kombinálnak. A dinamikus elemzés egy független ellenőrzési módszer, amely bővítheti a statikus elemzés lehetőségeit, vagy önállóan használható olyan esetekben, amikor a forráskódokhoz nem érhető el. Ez az áttekintés csak a statikus elemzőkre vonatkozik.

A beágyazott kódhoz és webalkalmazásokhoz használt elemzők jellemzőikben különböznek egymástól. Nemcsak az elemzés minőségét és a támogatott szoftvertermékek és programozási nyelvek listáját tartalmazza, hanem további mechanizmusokat is: a hibák automatikus kijavításának képességét, olyan funkciók meglétét, amelyek megakadályozzák a hibák kódmódosítás nélküli kihasználását, frissítési képességet. a sebezhetőségek és programozási hibák beépített adatbázisa, a megfelelőségi tanúsítványok elérhetősége és a különféle szabályozók követelményeinek való megfelelés.

A forráskód-elemzők működési elvei

Az általános működési elvek az elemzők minden osztályánál hasonlóak: a webalkalmazások forráskódelemzőinek és a beágyazott kódelemzőknek egyaránt. Az ilyen típusú termékek közötti különbség csak abban rejlik, hogy képesek meghatározni a kód végrehajtásának és a külvilággal való interakciójának jellemzőit, ami tükröződik az elemzők sebezhetőségi adatbázisaiban. A piacon lévő analizátorok többsége mindkét osztály funkcióját ellátja, egyformán jól ellenőrzi az üzleti alkalmazásokba beágyazott kódokat és a webalkalmazások kódját.

A forráskód-elemző bemeneti adatai a programok forrásszövegei és azok függőségei (betölthető modulok, harmadik féltől származó szoftverek stb.) találhatók. Munkájuk eredményeként minden analizátor jelentést készít az észlelt sebezhetőségekről és programozási hibákról, emellett egyes analizátorok automatikus hibajavítási funkciókat is biztosítanak.

Érdemes megjegyezni, hogy az automatikus hibajavítás nem mindig működik megfelelően, ezért ezt a funkciót csak webes alkalmazások és beágyazott modulok fejlesztőinek szánjuk.A termék vásárlója csak az analizátor zárójelentésére hagyatkozzon, és a kapott adatokat használja fel döntést hoz a kidolgozott kód elfogadásáról és bevezetéséről, illetve felülvizsgálatra küldéséről.

1. ábra: A forráskód-elemző algoritmusa

A forráskódok értékelése során az elemzők különféle adatbázisokat használnak, amelyek a sebezhetőségek és programozási hibák leírását tartalmazzák:

  • Saját adatbázis a sebezhetőségekről és programozási hibákról – minden forráskód-elemző fejlesztő saját analitikai és kutatási részleggel rendelkezik, amelyek speciális adatbázisokat készítenek a programok forráskódjainak elemzésére. A saját adatbázis minősége az egyik legfontosabb kritérium, amely befolyásolja a termék általános minőségét. Ezenkívül a saját adatbázisának dinamikusnak és folyamatosan frissítettnek kell lennie - a támadások új vektorai és a sebezhetőségek kihasználása, valamint a programozási nyelvek és a fejlesztési módszerek változásai megkövetelik az elemző fejlesztőitől, hogy folyamatosan frissítsék az adatbázist a magas színvonalú vizsgálat fenntartása érdekében. A statikus, nem frissülő adatbázissal rendelkező termékek leggyakrabban veszítenek az összehasonlító tesztekben.
  • Programozási hibák állami adatbázisai - számos biztonsági rést tartalmazó állami adatbázis létezik, amelyek összeállítását és támogatását a különböző országok szabályozói végzik. Például az USA-ban a CWE - Common Weakness Enumeration adatbázist használják, amelyet a MITER szervezet tart fenn, amelyet többek között az Egyesült Államok Védelmi Minisztériuma is támogat. Oroszország még nem rendelkezik hasonló adatbázissal, de a jövőben az orosz FSTEC azt tervezi, hogy a sebezhetőségi és fenyegetési adatbázisait kiegészíti egy programozási hibákkal foglalkozó adatbázissal. A sebezhetőségelemzők úgy valósítják meg a CWE adatbázis támogatását, hogy integrálják azt saját sebezhetőségi adatbázisukba, vagy külön ellenőrző mechanizmusként használják.
  • Szabványkövetelmények és ajánlások a biztonságos programozáshoz – számos kormányzati és iparági szabvány leírja a biztonságos alkalmazásfejlesztés követelményeit, valamint számos ajánlás és „legjobb gyakorlat” a világ szoftverfejlesztési és -biztonsági szakértőitől. Ezek a dokumentumok nem írják le közvetlenül a programozási hibákat, ellentétben a CWE-vel, de tartalmazzák azoknak a metódusoknak a listáját, amelyek átalakíthatók statikus forráskód-elemzőben.

Az elemzés minősége, a hamis pozitív eredmények és a kihagyott hibák száma közvetlenül függ attól, hogy az analizátor milyen adatbázisokat használ. Ezenkívül a szabályozási követelményeknek való megfelelés elemzése lehetővé teszi az infrastruktúra és információs rendszerek külső auditálási eljárásának megkönnyítését és egyszerűsítését, amennyiben a követelmények kötelezőek. Például a PCI DSS-követelmények kötelezőek a webes alkalmazásokhoz és a bankkártyák fizetési információival együttműködő beágyazott kódhoz, miközben a PCI DSS-megfelelőség külső auditja történik, beleértve a használt szoftvertermékek elemzését.

Világpiac

Számos különböző elemző létezik a globális piacon – mind a jól ismert biztonsági gyártóktól, mind a csak ezzel a termékkategóriával foglalkozó piaci résszel foglalkozó szereplőktől. A Gartner Analytical Center több mint öt éve foglalkozik a forráskód-elemzők osztályozásával és értékelésével, míg 2011-ig a Gartner külön azonosította az ebben a cikkben tárgyalt statikus analizátorokat, majd később egy magasabb osztályba - Alkalmazásbiztonsági tesztelésbe - egyesítette őket.

A 2015-ös Gartner Magic Quadrantban a biztonsági tesztelési piac vezető szerepet tölt be a HP, a Veracode és az IBM. Ugyanakkor a Veracode az egyetlen vezető cég, amely szoftvertermékként nem rendelkezik analizátorral, és a funkcionalitást csak szolgáltatásként biztosítják a Veracode felhőben. A többi vezető vállalat vagy kizárólag olyan termékeket kínál, amelyek ellenőrzéseket végeznek a felhasználói számítógépeken, vagy lehetőséget kínálnak a termék és a felhőszolgáltatás közötti választásra. A HP és az IBM az elmúlt öt évben továbbra is a világpiaci vezetők maradtak, termékeikről az alábbiakban egy áttekintést adunk. A vezető pozícióhoz legközelebb a Checkmarx terméke áll, amely csak erre a termékosztályra specializálódott, így az is szerepel a felülvizsgálatban.

2. ábra: Magic Quadrant for AnalystsA Gartner az alkalmazásbiztonsági elemzés piaci szereplőiről 2015 augusztusában

A ReportsnReports elemzői jelentése szerint az Egyesült Államokban a forráskód-elemző piac mérete 2014-ben elérte a 2,5 milliárd dollárt, 2019-re pedig kétszeres növekedést, 5 milliárd dollárt jósolnak évi 14,9%-os növekedéssel. A jelentéshez megkérdezett szervezetek több mint 50%-a tervezi a forráskód-elemzés költségvetésének elkülönítését és növelését egyedi fejlesztésekhez, és csak 3%-uk beszélt negatívan e termékek használatáról.

A kihívók területén található termékek nagy száma megerősíti ennek a termékosztálynak a népszerűségét és az iparág gyors fejlődését. Az elmúlt öt év során a gyártók teljes száma ebben a kvadránsban csaknem megháromszorozódott, és a 2014-es jelentés óta három termékkel bővült.

orosz piac

A forráskód-elemzők orosz piaca meglehetősen fiatal – az első nyilvános termékek alig öt éve jelentek meg a piacon. Ugyanakkor a piac két irányból alakult ki - egyrészt az FSTEC, az FSB és az Orosz Föderáció Védelmi Minisztériuma laboratóriumaiban a be nem jelentett képességek azonosítására szolgáló tesztelési termékeket fejlesztő vállalatok; a másik oldalon a biztonság különböző területeivel foglalkozó vállalatok állnak, akik úgy döntöttek, hogy új termékosztályt adnak portfóliójukhoz.

Az új piac legjelentősebb szereplői a Positive Technologies, az InfoWatch és a Solar Security. A Positive Technologies régóta a sebezhetőségek felkutatására és elemzésére specializálódtak; Portfóliójukban megtalálható a MaxPatrol termék, amely a hazai piacon a külső biztonsági felügyelet egyik piacvezetője, így nem meglepő, hogy a cég a belső elemzés mellett döntött, és saját forráskód-elemzőt fejleszt. Az InfoWatch DLP-rendszerek fejlesztőjeként fejlődött, végül új piaci réseket kereső cégcsoporttá vált. 2012-ben az Appercut az InfoWatch részévé vált, forráskódelemző eszközzel bővítve az InfoWatch portfólióját. Az InfoWatch befektetései és tapasztalatai lehetővé tették számunkra, hogy a terméket gyorsan magas szintre fejleszthessük. A Solar Security hivatalosan csak 2015. október végén mutatta be Solar inCode termékét, de már a megjelenés időpontjában négy hivatalos bevezetéssel rendelkeztek Oroszországban.

Azok a vállalatok, amelyek évtizedek óta fejlesztenek forráskód-elemzőket a tanúsítási teszteléshez, általában nem sietnek elemzőket kínálni üzleti célokra, ezért áttekintésünk csak egy ilyen terméket tartalmaz - az Echelon cégtől. Talán a jövőben képes lesz más piaci szereplők kiszorítására, elsősorban ennek a terméknek a fejlesztőinek kiterjedt elméleti és gyakorlati tapasztalatai miatt a sebezhetőségek és a be nem jelentett képességek felkutatása terén.

Az orosz piacon egy másik niche szereplő a Digital Security, amely egy információbiztonsági tanácsadó cég. Az ERP-rendszerek auditálásában és bevezetésében szerzett nagy tapasztalattal egy üres rést talált, és elkezdett fejleszteni egy ERP-rendszerek biztonságát elemző terméket, amely többek között a beágyazott programok forráskódjainak elemzésére szolgáló mechanizmusokat is tartalmazott.

Az analizátorok rövid áttekintése

Áttekintésünk első forráskód-elemző eszköze a Fortify terméke, amely 2010 óta a Hewlett-Packard tulajdonában van. A HP Fortify termékcsalád különféle termékeket tartalmaz a programkódok elemzésére: van a Fortify On-Demand SaaS szolgáltatás, amely a forráskód HP felhőbe történő feltöltését jelenti, valamint egy teljes értékű HP Fortify Static Code Analyzer alkalmazás, amelyet az ügyfél infrastruktúrájába telepítenek.

A HP Fortify Static Code Analyzer programozási nyelvek és platformok széles skáláját támogatja, beleértve a PHP, Python, Java/JSP, ASP.Net és JavaScript nyelven írt webalkalmazásokat, valamint az ABAP (SAP), Action Script és VBScript beágyazott kódját.

3. ábra: HP Fortify Static Code Analyzer interfész

A termékjellemzők közül érdemes kiemelni a HP Fortify Static Code Analyzerben a különböző fejlesztésirányítási rendszerekkel való integráció és a hibakövetés támogatását. Ha a kódfejlesztő hozzáférést biztosít az ügyfélnek a Bugzillának, a HP Quality Centernek vagy a Microsoft TFS-nek való közvetlen hibajelentéshez, az elemző manuális beavatkozás nélkül automatikusan hibajelentéseket tud generálni ezekről a rendszerekről.

A termék működése a HP Fortify saját, a CWE adatbázis adaptálásával kialakított tudásbázisain alapul. A termék a DISA STIG, FISMA, PCI DSS és OWASP ajánlások követelményeinek megfelelő elemzést valósít meg.

A HP Fortify Static Code Analyzer hátrányai között meg kell jegyezni a termék orosz piacra történő lokalizálásának hiányát - a felület és a jelentések angol nyelvűek, a termékhez szükséges anyagok és dokumentáció hiánya orosz nyelven, a beágyazott elemek elemzése. Az 1C és más hazai vállalati szintű termékek kódja nem támogatott.

A HP Fortify statikus kódelemző előnyei:

  • híres márka, kiváló minőségű megoldás;
  • az elemzett programozási nyelvek és támogatott fejlesztői környezetek nagy listája;
  • a fejlesztésirányítási rendszerekkel és más HP Fortify termékekkel való integráció elérhetősége;
  • nemzetközi szabványok, ajánlások és „legjobb gyakorlatok” támogatása.

A Checkmarx CxSAST az amerikai-izraeli Checkmarx cég eszköze, amely forráskód-elemzők fejlesztésére szakosodott. Ez a termék elsősorban a hagyományos szoftverek elemzésére szolgál, de a PHP, Python, JavaScript, Perl és Ruby programozási nyelvek támogatása miatt kiválóan alkalmas webes alkalmazások elemzésére. A Checkmarx CxSAST egy univerzális elemző, amelynek nincsenek külön sajátosságai, ezért a szoftvertermék életciklusának bármely szakaszában - a fejlesztéstől az alkalmazásig - használható.

4. ábra: Checkmarx CxSAST interfész

A Checkmarx CxSAST támogatja a CWE kódhiba-adatbázist, támogatja az OWASP és SANS 25 ajánlások, a PCI DSS, HIPAA, MISRA, FISMA és BSIMM szabványok betartásának ellenőrzését. A Checkmarx CxSAST által észlelt összes probléma kockázati szint szerint van felosztva – a kisebbtől a kritikusig. A termék jellemzői közé tartozik a kód megjelenítésére szolgáló funkciók jelenléte a végrehajtási útvonalak blokkdiagramjainak felépítésével, valamint ajánlások a grafikus diagramhoz való kötéssel kapcsolatos problémák kijavítására.

A termék hátrányai között szerepel az üzleti alkalmazásokba beágyazott kódelemzés támogatásának hiánya, a lokalizáció hiánya, valamint a termék szoftverkódok vásárlói számára történő használatának nehézsége, mivel a megoldás elsősorban fejlesztőknek szól, és szorosan integrálódik a fejlesztői környezetekkel.

A Checkmarx CxSAST előnyei:

  • nagyszámú támogatott programozási nyelv;
  • a termék nagy sebessége, csak a kód megnevezett szakaszai alapján történő beolvasás lehetősége;
  • az elemzett kód végrehajtási grafikonjainak megjelenítésének képessége;
  • vizuális jelentések és a forráskódok grafikusan megtervezett mérőszámai.

Egy jól ismert gyártó másik terméke az IBM Security AppScan Source forráskód-elemző. Az AppScan termékcsalád számos, biztonságos szoftverfejlesztéssel kapcsolatos terméket tartalmaz, de a fennmaradó termékek nem alkalmasak szoftverkód ügyfelekkel való használatára, mivel rengeteg felesleges funkcionalitást tartalmaznak. Az IBM Security AppScan Source, mint például a Checkmarx CxSAST, elsősorban fejlesztő szervezeteknek készült, miközben még kevesebb webfejlesztő nyelvet támogat – csak a PHP-t, a Perl-t és a JavaScriptet. Az üzleti alkalmazásokba beágyazott kód programozási nyelvei nem támogatottak.

5. ábra: IBM Security AppScan Source felület

Az IBM Security AppScan Source szorosan integrálódik az IBM Rational fejlesztői platformmal, így a terméket leggyakrabban a szoftvertermékek fejlesztési és tesztelési szakaszában használják, és nem alkalmas egyéni alkalmazások elfogadásának vagy ellenőrzésének végrehajtására.

Az IBM Security AppScan Source különlegessége, hogy támogatja a mobil üzleti alkalmazások platformja, az IBM Worklight programelemzést. A támogatott szabványok és követelmények listája szűkös – a PCI DSS, valamint a DISA és az OWASP ajánlásai, a sebezhetőségi adatbázis összehasonlítja a CWE-vel talált problémákat.

Ennek a megoldásnak a fejlesztési ügyfelek számára nem mutattak ki különösebb előnyeit.

A hazai NPO Eshelon CJSC AppChecker egy olyan megoldás, amely nemrég jelent meg a piacon. A termék első verziója csak egy éve jelent meg, de figyelembe kell venni az Echelon cég tapasztalatait a programkód elemzése során. Az "NPO Eshelon" az FSTEC, az FSB és az Orosz Föderáció Védelmi Minisztériumának tesztelő laboratóriuma, és nagy tapasztalattal rendelkezik a programforráskódok statikus és dinamikus elemzése terén.

6. ábra: AppChecker „Echelon” felület

Az AppChecker számos PHP, Java és C/C++ nyelven írt szoftver és webalkalmazás elemzésére szolgál. Teljes mértékben támogatja a CWE sebezhetőségi besorolását, és figyelembe veszi az OWASP, CERT és NISP ajánlásait. A termék felhasználható a PCI DSS követelményeknek és a Bank of Russia IBBS-2.6-2014 szabványának való megfelelés ellenőrzésére.

A termék hiányosságai a megoldás fejlesztésének korai szakaszából adódnak - nincs elegendő támogatás a népszerű webfejlesztő nyelvekhez és a beágyazott kód elemzésének képességéhez.

Előnyök:

  • a hazai követelmények és a PCI DSS szerinti audit lefolytatásának képessége;
  • figyelembe véve a programozási nyelv jellemzőinek hatását az elemzett projektek rugalmas konfigurációja miatt;
  • alacsony költségű.

A PT Application Inspector az orosz Positive Technologies fejlesztő terméke, amelyet a forráskód-elemzési probléma megoldására irányuló megközelítése különböztet meg. A PT Application Inspector célja elsősorban a kód sebezhetőségeinek felkutatása, nem pedig a gyakori szoftverhibák azonosítása.

A jelen áttekintésben szereplő többi terméktől eltérően a PT Application Inspector nem csak jelentéskészítésre és a sebezhetőségek kimutatására képes, hanem arra is képes, hogy bizonyos kategóriájú és típusú sebezhetőségekhez automatikusan kizsákmányoljon – kis végrehajtható modulokként, amelyek kihasználják a talált sebezhetőségeket. A létrehozott exploitok segítségével gyakorlatilag ellenőrizhető a talált sérülékenységek veszélye, valamint a sérülékenység deklarált bezárása után az exploit működésének ellenőrzésével irányítható a fejlesztő.

7. ábra: PT Application Inspector interfész

A PT Application Inspector támogatja mind a webalkalmazás-fejlesztő nyelveket (PHP, JavaScript), mind az üzleti alkalmazások beágyazott kódját - SAP ABAP, SAP Java, Oracle EBS Java, Oracle EBS PL/SQL. A PT Application Inspector a programvégrehajtási útvonalak megjelenítését is támogatja.

A PT Application Inspector egy egyablakos megoldás a fejlesztők és az egyéni webalkalmazásokat és üzleti alkalmazás-bővítményeket futtató ügyfelek számára. A programkód sebezhetőségeinek és hibáinak adatbázisa tartalmazza a Positive Technologies saját fejlesztéseit, a CWE adatbázist és a WASC-t (web consortium vulnerability database, a CWE analógja webes alkalmazásokhoz).

A PT Application Inspector használata lehetővé teszi a PCI DSS szabványok, az STO BR IBBS, valamint a 17. FSTEC-rend követelményeinek és a nem bejelentett képességek hiányára vonatkozó követelmények teljesítését (a kódtanúsítás szempontjából).

Előnyök:

  • webalkalmazások elemzésének támogatása és az üzleti alkalmazásokhoz szükséges fejlesztőrendszerek széles köre;
  • hazai, honosított termék;
  • támogatott állami szabványok széles skálája;
  • a WASC webalkalmazás-sebezhetőségi adatbázis és a CWE osztályozó használata;
  • a programkód megjelenítésének és a programkönyvjelzők keresésének képessége.

Az InfoWatch Appercut az orosz InfoWatch cég fejlesztette ki. A fő különbség e termék és a gyűjtemény többi terméke között az üzleti alkalmazások ügyfelei számára nyújtott szolgáltatásokra specializálódott.

Az InfoWatch Appercut szinte az összes programozási nyelvet támogatja, amelyen webalkalmazásokat készítenek (JavaScript, Python, PHP, Ruby), valamint a beépített modulokat az üzleti javaslatokhoz - 1C, ABAP, X++ (ERP Microsoft Axapta), Java, Lotus Script. Az InfoWatch Appercut képes alkalmazkodni egy adott alkalmazás sajátosságaihoz és az egyes vállalatok üzleti folyamatainak egyediségéhez.

8. ábra: InfoWatch Appercut interfész

Az InfoWatch Appercut számos követelményt támogat a hatékony és biztonságos programozáshoz, beleértve a PCI DSS és HIPPA általános követelményeit, a CERT és az OWAST ajánlásait és „legjobb gyakorlatait”, valamint az üzleti folyamatplatform-gyártók ajánlásait - 1C, SAP, Oracle, Microsoft.

Előnyök:

  • hazai, honosított termék, az oroszországi FSTEC által tanúsított;
  • az egyetlen termék, amely támogatja az összes népszerű üzleti platformot Oroszországban, beleértve az 1C-t, az SAP-t, az Oracle EBS-t, az IBM Collaboration Solutions-t (Lotus) és a Microsoft Axaptát;
  • Gyors szkenner, amely másodpercek alatt elvégzi az ellenőrzéseket, és csak a megváltozott kódot és kódrészleteket tudja ellenőrizni.

Digital Security Az ERPScan egy speciális termék az SAP termékekre épített üzleti rendszerek biztonságának elemzésére és figyelésére, az első verzió 2010-ben jelent meg. A konfigurációkat, sebezhetőségeket és hozzáférés-vezérlést (SOD) elemző modulon kívül az ERPScan tartalmaz egy forráskód biztonságát értékelő modult is, amely könyvjelzők, kritikus hívások, sebezhetőségek és programozási hibák keresését valósítja meg az ABAP kódban. és Java programozási nyelvek. Ugyanakkor a termék figyelembe veszi az SAP platform sajátosságait, a kódban észlelt sérülékenységeket a konfigurációs beállításokkal és a hozzáférési jogosultságokkal korrelálja, és jobban végzi az elemzést, mint az azonos programozási nyelvekkel működő, nem speciális termékek.

9. ábra: Digitális biztonsági ERPScan interfész

Az ERPScan további szolgáltatásai közé tartozik az észlelt sebezhetőségek automatikus javításainak generálása, valamint a lehetséges támadásokhoz aláírások generálása, valamint az aláírások feltöltése a behatolásészlelő és -megelőzési rendszerekbe (a CISCO-val együttműködve). Emellett a rendszer tartalmaz mechanizmusokat a beágyazott kód teljesítményének értékelésére, ami kritikus az üzleti alkalmazások számára, mivel a további modulok lassú működése komolyan befolyásolhatja a szervezet üzleti folyamatait. A rendszer támogatja az üzleti alkalmazás kódjának elemzésére vonatkozó speciális ajánlások, például az EAS-SEC és a BIZEC, valamint az általános PCI DSS és OWASP ajánlások szerinti elemzést is.

Előnyök:

  • mély szakosodás egyetlen üzleti alkalmazásplatformon, az elemzés korrelációjával a konfigurációs beállításokkal és a hozzáférési jogokkal;
  • beágyazott kód teljesítménytesztek;
  • automatikus javítások létrehozása a talált sebezhetőségekhez és virtuális javításokhoz;
  • nulladik napi sebezhetőségek keresése.

A Solar inCode egy statikus kódelemző eszköz, amely a szoftverforráskódokban található információbiztonsági sebezhetőségek és nem bejelentett képességek azonosítására szolgál. A termék fő megkülönböztető jellemzője az alkalmazás forráskódjának visszaállítása egy működő fájlból dekompilációs technológia (reverse engineering) segítségével.

A Solar inCode lehetővé teszi a Java, Scala, Java for Android, PHP és Objective C programozási nyelveken írt forráskód elemzését. A legtöbb versenytárssal ellentétben a támogatott programozási nyelvek listája fejlesztőeszközöket tartalmaz Android és iOS mobilplatformokhoz .

10. ábra Interfész

Azokban az esetekben, amikor a forráskód nem elérhető, a Solar inCode lehetővé teszi a kész alkalmazások elemzését, ez a funkció támogatja a webes és mobil alkalmazásokat. Különösen a mobilalkalmazások esetében csak be kell másolnia az alkalmazás linkjét a Google Play vagy az Apple Store áruházból a szkennerbe, az alkalmazás automatikusan letöltődik, dekompilálódik és ellenőrzi.

A Solar inCode használata lehetővé teszi, hogy megfeleljen a PCI DSS szabványok, az STO BR IBBS, valamint a 17. FSTEC parancs követelményeinek, valamint a nem bejelentett képességek hiányára vonatkozó követelményeknek (a kódtanúsítás szempontjából).

Előnyök:

  • Android és iOS rendszert futtató mobileszközök alkalmazásainak elemzésének támogatása;
  • támogatja a webalkalmazások és mobilalkalmazások elemzését a programok forráskódja nélkül;
  • elemzési eredményeket ad konkrét ajánlások formájában a sebezhetőségek kiküszöbölésére;
  • részletes ajánlásokat generál a biztonsági eszközök beállításához: SIEM, WAF, FW, NGFW;
  • könnyen integrálható a biztonságos szoftverfejlesztési folyamatba a forráskód-tárolókkal való munka támogatásával.

következtetéseket

A szoftverhibák, sérülékenységek és hátsó ajtók jelenléte az egyedi fejlesztésű szoftverekben, legyen szó webalkalmazásokról vagy üzleti alkalmazások beépülő moduljairól, komoly kockázatot jelent a vállalati adatok biztonságára nézve. A forráskód-elemzők használata jelentősen csökkentheti ezeket a kockázatokat, és ellenőrzés alatt tarthatja a programkód-fejlesztők által végzett munka minőségét anélkül, hogy további időt és pénzt kellene fordítani a szakértők és külső auditorok szolgáltatásaira. Ugyanakkor a forráskód-elemzők használata leggyakrabban nem igényel speciális képzést, külön alkalmazottak kijelölését, és nem okoz egyéb kellemetlenségeket, ha a terméket csak átvételre használják, és a hibajavítást a fejlesztő végzi. Mindez kötelezővé teszi ezt az eszközt az egyedi fejlesztések használatakor.

A forráskód-elemző kiválasztásakor figyelembe kell venni a termékek funkcionalitását és munkájuk minőségét. Mindenekelőtt ügyeljen arra, hogy a termék képes-e ellenőrizni azokat a programozási nyelveket, amelyeken az ellenőrzött forráskódok implementálva vannak. A következő szempont a termékválasztásnál a tesztelés minősége legyen, amelyet a fejlesztő cég kompetenciái és a termék demonstrációs működése során határozhatnak meg. A termékválasztás másik tényezője lehet az állami és nemzetközi szabványok követelményeinek való megfelelés ellenőrzésének rendelkezésre állása, ha ezek megvalósítása szükséges a vállalati üzleti folyamatokhoz.

Ebben az áttekintésben a külföldi termékek között a programozási nyelv támogatása és a szkennelés minősége tekintetében egyértelműen a HP Fortify Static Code Analyzer megoldás a vezető. A Checkmarx CxSAST is jó termék, de csak normál alkalmazásokat és webes alkalmazásokat tud elemezni, a termék nem támogatja az üzleti alkalmazásokhoz való beépülő modulokat. Az IBM Security AppScan Source megoldás unalmasnak tűnik versenytársaihoz képest, és nem különbözik sem funkcionalitásban, sem az ellenőrzések minőségében. Ez a termék azonban nem üzleti felhasználóknak készült, és fejlesztő cégek számára készült, ahol hatékonyabb lehet versenytársainál.

Az orosz termékek közül nehéz egyértelmű vezetőt kiemelni, a piacot három fő termék képviseli - az InfoWatch Appercut, a PT Application Inspector és a Solar inCode. Ugyanakkor ezek a termékek technológiailag jelentősen eltérnek, és különböző célközönségnek készültek - az első több üzleti alkalmazásplatformot támogat, és gyorsabb a sérülékenységek kizárólag statikus elemzési módszerekkel történő keresése miatt. A második a statikus és a dinamikus elemzést, valamint ezek kombinációját egyesíti, ami a szkennelés minőségének javításával együtt a forráskód ellenőrzési idejének növekedéséhez vezet. A harmadik az üzleti felhasználók és az információbiztonsági szakemberek problémáinak megoldására irányul, és lehetővé teszi az alkalmazások tesztelését a forráskódhoz való hozzáférés nélkül.

Az AppChecker „echelon” még nem felel meg a versenytársaknak, és csekély funkcionalitással rendelkezik, de a termékfejlesztés korai szakaszában nagyon valószínű, hogy a közeljövőben megszerezheti a legjobb pozíciókat a forrás értékelésében. kódelemzők.

Digitális biztonság Az ERPScan kiváló termék az SAP platformra szánt üzleti alkalmazások elemzésének rendkívül speciális feladatának megoldására. A Digital Security kizárólag erre a piacra koncentrálva kifejlesztett egy funkcionalitásában egyedülálló terméket, amely nemcsak a forráskódot elemzi, hanem figyelembe veszi az SAP platform minden sajátosságát, az egyedi konfigurációs beállításokat és az üzleti alkalmazások hozzáférési jogait, és képes automatikusan javításokat készíteni az észlelt sebezhetőségekhez.

annotáció

Jelenleg számos eszközt fejlesztettek ki a programok sebezhetőségeinek keresésének automatizálására. Ez a cikk ezek közül néhányat tárgyal.

Bevezetés

A statikus kódelemzés egy szoftverelemzés, amelyet a programok forráskódján hajtanak végre, és anélkül valósítják meg, hogy ténylegesen végrehajtanák a vizsgált programot.

A szoftverek gyakran tartalmaznak különféle sebezhetőségeket a programkód hibái miatt. A programok fejlesztése során elkövetett hibák bizonyos helyzetekben a program meghibásodásához vezetnek, és ennek következtében a program normál működése zavart okoz: ez gyakran változásokat, adatok károsodását, a program vagy akár a rendszer leállását eredményezi. A legtöbb sérülékenység a kívülről kapott adatok helytelen feldolgozásával, vagy nem kellően szigorú ellenőrzésével kapcsolatos.

A sérülékenységek azonosítására különféle eszközöket használnak, például a program forráskódjának statikus elemzőit, amelyek áttekintését ebben a cikkben adjuk meg.

A biztonsági rések osztályozása

Ha megsértik azt a követelményt, hogy a program minden lehetséges bemeneti adaton megfelelően működjön, akkor lehetségessé válik az úgynevezett biztonsági rések megjelenése. A biztonsági rések azt jelenthetik, hogy egy program segítségével egy egész rendszer biztonsági korlátait le lehet küzdeni.

A biztonsági rések osztályozása szoftverhibáktól függően:

  1. Puffer túlcsordulás. Ez a sérülékenység abból adódik, hogy a program végrehajtása során nem lehet ellenőrizni a memóriában lévő határokon kívüli tömböket. Ha egy túl nagy adatcsomag túlcsordul a korlátozott méretű pufferen, a külső memóriahelyek tartalma felülíródik, ami a program összeomlását és kilépését okozza. A puffernek a folyamatmemóriában elfoglalt helye alapján megkülönböztetünk puffertúlcsordulást a veremben (verem puffer túlcsordulás), kupacban (heap puffer túlcsordulás) és statikus adatterületen (bss puffer túlcsordulás).
  2. Sebezhetőségek (szennyezett beviteli sebezhetőség). Sebezhetőségek merülhetnek fel olyan esetekben, amikor a felhasználói bevitel megfelelő ellenőrzés nélkül kerül át valamilyen külső nyelv (általában Unix shell vagy SQL nyelv) értelmezőjének. Ebben az esetben a felhasználó megadhatja a bemeneti adatokat úgy, hogy az elindított interpreter teljesen más parancsot hajtson végre, mint amit a sérülékeny program készítői szándékoztak.
  3. Formázási karakterlánc sebezhetősége. Az ilyen típusú biztonsági rés a sebezhetőség egy alosztálya. Ez a paraméterek elégtelen szabályozása miatt fordul elő a C szabványkönyvtár printf, fprintf, scanf stb. formátumú I/O függvényeinek használatakor. Ezek a függvények az egyik paraméterükként egy karakterláncot vesznek fel, amely meghatározza a következő függvényargumentumok bemeneti vagy kimeneti formátumát. Ha a felhasználó megadhatja a formázás típusát, akkor ez a sérülékenység a karakterlánc formázási funkciók sikertelen használatából eredhet.
  4. Szinkronizálási hibák (versenykörülmények) következtében fellépő sebezhetőségek. A többfeladatos munkavégzéssel kapcsolatos problémák a következő helyzetekhez vezetnek: egy program, amelyet nem többfeladatos környezetben való futtatásra terveztek, azt hiheti, hogy például a munkája során használt fájlokat egy másik program nem tudja megváltoztatni. Ennek eredményeként egy támadó, aki időben lecseréli ezeknek a munkafájloknak a tartalmát, bizonyos műveletek végrehajtására kényszerítheti a programot.

Természetesen a felsoroltakon kívül vannak más osztályú biztonsági rések is.

Meglévő analizátorok áttekintése

A következő eszközöket használják a programok biztonsági résének észlelésére:

  • Dinamikus hibakeresők. Eszközök, amelyek lehetővé teszik a program hibakeresését annak végrehajtása során.
  • Statikus elemzők (statikus hibakeresők). Olyan eszközök, amelyek egy program statikus elemzése során felhalmozott információkat használnak fel.

A statikus analizátorok a program azon helyeire mutatnak rá, ahol hiba található. Ezek a gyanús kódrészletek vagy hibát tartalmazhatnak, vagy teljesen ártalmatlanok.

Ez a cikk áttekintést nyújt több létező statikus analizátorról. Nézzük meg mindegyiket közelebbről.

1.BOON

Egy eszköz, amely mély szemantikai elemzés alapján automatizálja a C forrásszövegek szkennelésének folyamatát a puffertúlcsorduláshoz vezető sebezhetőségek felkutatása érdekében. A lehetséges hibákat úgy azonosítja, hogy feltételezi, hogy bizonyos értékek egy adott puffermérettel rendelkező implicit típus részei.

2.CQual

Elemző eszköz a C programok hibáinak észlelésére. A program a C nyelvet további, felhasználó által definiált típusleírókkal bővíti. A programozó megjegyzéseket fűz a programjához a megfelelő specifikációkkal, és a cqual ellenőrzi a hibákat. A helytelen megjegyzések lehetséges hibákat jeleznek. A Cqual a lehetséges formátumkarakterlánc-sebezhetőségek észlelésére használható.

3. MOPS

(Model checking Programs for Security) - egy eszköz a biztonsági rések keresésére a C programokban. Célja: dinamikus beállítás, a C program statikus modellnek való megfelelésének biztosítása. A MOPS szoftver-auditációs modellt használ, amelynek célja annak megállapítása, hogy egy program megfelel-e a biztonságos programok létrehozásához meghatározott szabályoknak.

4. ITS4, RATS, PScan, Flawfinder

A következő statikus analizátorok a puffertúlcsordulási hibák és a formázási karakterlánc-hibák keresésére szolgálnak:

  1. . Egy egyszerű eszköz, amely statikusan ellenőrzi a forrás C/C++ kódját, hogy észlelje a lehetséges biztonsági réseket. Megjelöli a potenciálisan veszélyes függvények (például strcpy/memcpy) hívásait, és felületes szemantikai elemzést végez, igyekszik felmérni, mennyire veszélyes az ilyen kód, és tanácsokat ad a javításához.
  2. . A RATS (Rough Auditing Tool for Security) segédprogram C/C++ nyelven írt kódot dolgoz fel, és képes Perl, PHP és Python parancsfájlokat is feldolgozni. A RATS megvizsgálja a forráskódot, és potenciálisan veszélyes függvényhívásokat keres. Ennek az eszköznek nem az a célja, hogy véglegesen megtalálja a hibákat, hanem olyan ésszerű következtetéseket vonjon le, amelyek alapján a szakember manuálisan át tudja tekinteni a kódot. A RATS az ITS4 szemantikai ellenőrzésétől a mély szemantikai elemzésig terjedő biztonsági ellenőrzések kombinációját használja a MOPS-ből származó puffertúlcsordulási hibák keresésére.
  3. . Ellenőrzi a C forráskódot a printf-szerű függvények esetleges helytelen használatára vonatkozóan, és azonosítja a formátumkarakterláncok sebezhetőségét.
  4. . A RATS-hez hasonlóan ez is egy statikus forráskód-leolvasó a C/C++ nyelven írt programok számára. Megkeresi a leggyakrabban visszaélt funkciókat, kockázati pontszámokat rendel hozzájuk (például átadott paraméterek alapján), és összeállít egy listát a lehetséges sebezhetőségekről, kockázat szerint rangsorolva azokat.

Mindezek az eszközök hasonlóak, és csak lexikális és alapvető elemzést használnak. Ezért az ezen programok által előállított eredmények akár 100%-ban hamis üzeneteket is tartalmazhatnak.

5. Csomó

C-programok elemzésére és megjelenítésére szolgáló eszköz, amely egy függőségi gráfot épít fel, amely segít az auditornak megérteni a program moduláris felépítését.

6. UNO

Egy egyszerű forráskód-elemző. Úgy tervezték, hogy megtalálja a hibákat, például az inicializálatlan változókat, a nulla mutatókat és a határokon kívüli tömböket. Az UNO lehetővé teszi egyszerű vezérlési folyamat- és adatfolyam-elemzés elvégzését, eljáráson belüli és eljárásközi elemzést, valamint felhasználói tulajdonságok megadását. De ezt az eszközt nem valós alkalmazások elemzésére fejlesztették ki, nem támogat sok szabványos könyvtárat, és a fejlesztés ezen szakaszában nem teszi lehetővé komoly programok elemzését.

7. Flexelint (PC-Lint)

Ez az elemző a forráskód elemzésére szolgál a különféle típusú hibák azonosítása érdekében. A program a forráskód szemantikai elemzését, az adatáramlást és a vezérlés elemzését végzi.

A munka végén több fő típusú üzenet kerül kiadásra:

  • Nulla mutató lehetséges;
  • Problémák a memóriafoglalással (például nincs free() a malloc() után);
  • Problémás vezérlési folyamat (például elérhetetlen kód);
  • Lehetséges puffer túlcsordulás, aritmetikai túlcsordulás;
  • Figyelmeztetések a rossz és potenciálisan veszélyes kódstílusokkal kapcsolatban.

8. Viva64

Egy eszköz, amely segít a szakembereknek nyomon követni a potenciálisan veszélyes töredékeket a C/C++ programok forráskódjában, amelyek a 32 bites rendszerekről a 64 bitesekre való átálláshoz kapcsolódnak. A Viva64 be van építve a Microsoft Visual Studio 2005/2008 környezetébe, ami megkönnyíti a kényelmes munkát ezzel az eszközzel. Az elemző segít helyes és optimalizált kód megírásában 64 bites rendszerekhez.

9. Parasoft C++ teszt

Egy speciális Windows-eszköz, amely lehetővé teszi a C++ kódminőség elemzésének automatizálását. A C++Test csomag elemzi a projektet, és kódot generál a projektben található komponensek teszteléséhez. A C++Test csomag elvégzi a C++ osztályok elemzésének nagyon fontos feladatát. A projekt betöltése után be kell állítania a tesztelési módszereket. A szoftver megvizsgál minden metódus argumentumot, és visszaadja a megfelelő értékek típusát. Ezeknél az egyszerű típusoknál az alapértelmezett argumentumértékek helyettesítve vannak; Megadhat tesztadatokat a felhasználó által definiált típusokhoz és osztályokhoz. Felülírhatja az alapértelmezett C++Test argumentumokat, és visszaadhatja a tesztelés során kapott értékeket. Külön kiemelendő a C++Test azon képessége, hogy tesztelni tudja a befejezetlen kódot. A szoftver csonkkódot generál minden olyan módszerhez és funkcióhoz, amely még nem létezik. A külső eszközök és a felhasználó által meghatározott bemeneti adatok szimulációja támogatott. Mindkét funkció lehetővé teszi az újratesztelést. Az összes metódus tesztparamétereinek meghatározása után a C++Test csomag készen áll a futtatható kód futtatására. A csomag tesztkódot generál a Visual C++ fordító meghívásával annak előkészítéséhez. Lehetőség van tesztek generálására metódus, osztály, fájl és projekt szinten.

10.Fedő

Az eszközök a biztonsági és minőségi hibák azonosítására és kijavítására szolgálnak a kritikus fontosságú alkalmazásokban. A Coverity technológiája megszünteti az összetett szoftverek írásának és megvalósításának akadályait azáltal, hogy automatizálja a kritikus szoftverhibák és biztonsági hibák észlelését és megoldását a fejlesztési folyamat során. A Coverity eszköze több tízmillió kódsor feldolgozására képes minimális pozitív hibával, 100%-os nyomkövetési lefedettséget biztosítva.

11. KlocWork K7

A cég termékeit automatizált statikus kódelemzésre, szoftverhibák és biztonsági problémák azonosítására és megelőzésére tervezték. A vállalat eszközei segítenek azonosítani a szoftverminőségi és biztonsági hibák kiváltó okait, valamint nyomon követni és megelőzni ezeket a hibákat a fejlesztési folyamat során.

12. Frama-C

Nyílt, integrált eszközkészlet a C nyelvű forráskód elemzéséhez. A készlet tartalmazza az ACSL-t (ANSI/ISO C Specification Language) - egy speciális nyelvet, amely lehetővé teszi a C függvények specifikációinak részletes leírását, például egy függvény érvényes bemeneti értékeinek tartományának és a normál kimeneti tartománynak a meghatározását. értékeket.

Ez az eszköztár a következőkben nyújt segítséget:

  • Végezzen formális kódellenőrzést;
  • Keresse meg a lehetséges végrehajtási hibákat;
  • Végezzen kódellenőrzést vagy felülvizsgálatot;
  • A kód visszafejtése a struktúra jobb megértése érdekében;
  • Formális dokumentáció készítése.

13. CodeSurfer

Programelemző eszköz, amelyet nem kifejezetten a biztonsági rések felkutatására terveztek. Fő előnyei a következők:

  • Mutatóelemzés;
  • Különféle adatfolyam-elemzések (változók használata és meghatározása, adatfüggőség, hívásgráf készítés);
  • Szkriptnyelv.

A CodeSurfer használható a forráskód hibáinak megtalálására, a forráskód jobb megértésére és a visszafejtési programokra. A CodeSurfer környezeten belül kifejlesztettek egy prototípus eszközt a biztonsági rések észlelésére, de a kifejlesztett eszközt csak a fejlesztő szervezeten belül használják.

14. FxCop

Lehetőséget biztosít a .NET-szerelvények automatikus ellenőrzésére, hogy megfelelnek-e a Microsoft .NET-keretrendszer tervezési irányelveinek. A lefordított kódot tükrözési mechanizmusok, MSIL elemzés és hívásgráf elemzés segítségével ellenőrzik. Ennek eredményeként az FxCop több mint 200 hibát (vagy hibát) képes észlelni a következő területeken:

  • Könyvtári architektúra;
  • Lokalizáció;
  • Elnevezési szabályok;
  • Teljesítmény;
  • Biztonság.

Az FxCop lehetőséget biztosít saját szabályok létrehozására egy speciális SDK segítségével. Az FxCop grafikus felhasználói felületen vagy parancssorban futhat.

15. JavaChecker

Ez egy statikus Java programelemző, amely a TermWare technológián alapul.

Ez az eszköz lehetővé teszi a kódhibák azonosítását, például:

  • gondatlan kivételkezelés (üres fogásblokkok, általános kivételek dobása stb.);
  • nevek elrejtése (például amikor egy osztálytag neve megegyezik egy metódus formális paraméterének nevével);
  • stílussértések (a programozási stílust reguláris kifejezések segítségével állíthatja be);
  • szabványos használati szerződések megsértése (például ha az egyenlő metódus felül van írva, de a hashCode nem);
  • szinkronizálási megsértések (például ha egy szinkronizált változóhoz való hozzáférés a szinkronizált blokkon kívül van).

Az ellenőrzések halmaza vezérlő megjegyzésekkel vezérelhető.

A JavaChecker egy ANT szkriptből hívható meg.

16. Simian

Hasonlóságelemző, amely egyszerre több fájlban is keresi az ismétlődő szintaxist. A program megérti a különböző programozási nyelvek, köztük a C#, a T-SQL, a JavaScript és a Visual BasicR szintaxisát, és képes megkeresni az ismétlődő töredékeket a szöveges fájlokban. A több testreszabási lehetőség lehetővé teszi a duplikált kód keresési szabályainak finomhangolását. Például a küszöb paraméter határozza meg, hogy hány ismétlődő kódsor tekinthető ismétlődésnek.

A Simian egy kis eszköz, amelyet a duplikált kód hatékony megtalálására terveztek. Grafikus felülettel nem rendelkezik, de parancssorból indítható vagy programozottan is elérhető. Az eredmények szöveges formában jelennek meg, és a beépített formátumok egyikében (például XML) is megjeleníthetők. Míg a Simian ritka interfésze és korlátozott kimeneti képességei egy kis tanulási görbét igényelnek, segít megőrizni a termék integritását és hatékonyságát. A Simian alkalmas duplikált kód megtalálására nagy és kis projektekben egyaránt.

A duplikált kód csökkenti a projekt karbantarthatóságát és frissíthetőségét. A Simian segítségével gyorsan megtalálhatja az ismétlődő kódrészleteket több fájlban egyszerre. Mivel a Simian parancssorból is futtatható, beépíthető az építési folyamatba, hogy figyelmeztetéseket kapjon, vagy leállítsa a folyamatot kódismétlések esetén.

Következtetés

Tehát ez a cikk a statikus forráskód-elemzőket vizsgálta, amelyek a programozó segédeszközei. Mindegyik eszköz más és más, és segít a programok biztonsági réseinek széles skálájának megfigyelésében. Megállapíthatjuk, hogy a statikus analizátoroknak pontosnak és érzékenynek kell lenniük. De sajnos a statikus hibakereső eszközök nem tudnak teljesen megbízható eredményeket adni.