Kódvizsgálat
A GitHub Advanced Security for Azure DevOps kódvizsgálatával elemezheti a kódot egy Azure DevOps-adattárban, hogy biztonsági réseket és kódolási hibákat találjon. Az elemzés által azonosított problémák riasztás formájában jelennek meg. A kódvizsgálat CodeQL használatával azonosítja a biztonsági réseket.
A CodeQL a GitHub által a biztonsági ellenőrzések automatizálására kifejlesztett kódelemző motor. A kódot a CodeQL használatával elemezheti, és az eredményeket kódvizsgálati riasztásokként jelenítheti meg. A CodeQL-ről részletesebb dokumentációt a CodeQL dokumentációjában talál.
Az Azure DevOps GitHub Advanced Security szolgáltatása az Azure Reposszal működik. Ha GitHub Advanced Securityt szeretne használni GitHub-adattárakkal, tekintse meg a GitHub Advanced Securityt.
További konfigurációk a kódolvasáshoz
Nyelvi és lekérdezési támogatás
A GitHub szakértői, biztonsági kutatói és közösségi közreműködői a kódolvasáshoz használt alapértelmezett CodeQL-lekérdezéseket írják és tartják karban. A lekérdezések rendszeresen frissülnek az elemzés javítása és a hamis pozitív eredmények csökkentése érdekében. A lekérdezések nyílt forráskód, így a github/codeql-adattárban tekintheti meg és használhatja a lekérdezéseket.
A CodeQL a következő nyelvi azonosítókat támogatja és használja:
Nyelv | Azonosító | Választható alternatív azonosítók (ha vannak) |
---|---|---|
C/C++ | c-cpp |
c vagy cpp |
C# | csharp |
|
Go | go |
|
Java/Kotlin | java-kotlin |
|
JavaScript/TypeScript | javascript |
|
Python | python |
|
Ruby | ruby |
|
Swift | swift |
Tipp.
- C, C++ vagy mindkettőben írt kód elemzéséhez használható
c-cpp
. - Java-, Kotlin- vagy mindkettőben írt kód elemzésére használható
java-kotlin
. - JavaScriptben, TypeScriptben vagy mindkettőben írt kód elemzéséhez használható
javascript
.
További információ: Támogatott nyelvek és keretrendszerek.
A CodeQL által végrehajtott konkrét lekérdezéseket és feladatadatokat a buildnaplóban tekintheti meg.
Kódolvasás buildelési mód testreszabása
A kódvizsgálat két összeállítási módot támogat egy folyamat vizsgálatához való beállításakor:
none
- a CodeQL-adatbázis közvetlenül a kódbázisból jön létre a kódbázis létrehozása nélkül (az összes értelmezett nyelv esetében támogatott, és a C# és a Java esetében is támogatott).manual
- meghatározza a munkafolyamat kódbázisához használandó buildelési lépéseket (az összes lefordított nyelv esetében támogatott).
A különböző összeállítási módokról, beleértve az egyes buildelési módok előnyeinek összehasonlítását is, tekintse meg a lefordított nyelvek CodeQL-kódvizsgálatát.
Az Azure DevOpshoz készült GitHub Advanced Securityen keresztüli kódvizsgálati elemzés futtatásához a autobuild
buildelési mód ehelyett egy különálló buildelési feladat, AdvancedSecurity-CodeQL-Autobuild@1
amely a buildelési feladat.
Tipp.
A buildelési mód none
más értelmezett nyelvekkel (pl. JavaScript, Python, Ruby) együtt használható.
Ha a C# vagy a Java buildelési mód none
olyan más lefordított nyelvekkel együtt van megadva, amelyek nem támogatják a buildelési módot none
, a folyamatfeladat sikertelen lesz.
Íme egy példa egy érvényes konfigurációra több nyelvvel és none
buildelési móddal:
trigger: none
pool:
vmImage: windows-latest
steps:
- task: AdvancedSecurity-Codeql-Init@1
displayName: Initialize CodeQL
inputs:
# build mode `none` is supported for C# and Java, and JavaScript is an interpreted language
# and build mode `none` has no impact on JavaScript analysis
languages: 'csharp, java, javascript'
buildtype: 'none'
- task: AdvancedSecurity-Codeql-Analyze@1
displayName: Perform CodeQL Analysis
Íme egy példa egy érvénytelen konfigurációra több nyelvvel és none
buildelési móddal:
trigger: none
pool:
vmImage: windows-latest
steps:
- task: AdvancedSecurity-Codeql-Init@1
displayName: Initialize CodeQL
inputs:
# build mode `none` is supported for C# but build mode `none` is NOT supported for Swift
# so this pipeline definition will result in a failed run
languages: 'csharp, swift'
buildtype: 'none'
- task: AdvancedSecurity-Codeql-Analyze@1
displayName: Perform CodeQL Analysis
Egyéni lekérdezések használata a CodeQL használatával
Alapértelmezés szerint, ha nincs megadva egyéni konfigurációs fájl a folyamatbeállításban, a CodeQL futtatja a lekérdezéscsomagot a security-extended
kód elemzéséhez. Egyéni CodeQL-lekérdezések használatával saját lekérdezéseket írhat, hogy konkrét biztonsági réseket és hibákat találjon. A CodeQL alapértelmezett elemzésének módosításához egyéni konfigurációs fájlt is létre kell hoznia.
A meglévő egyéni lekérdezések megkereséséhez vagy a saját egyéni lekérdezések hozzáadásához lásd : Hozzájárulás a CodeQL-hez.
Elemzés egyéni lekérdezésekkel
Az egyéni lekérdezések első lépéseinek leggyorsabb módja egy lekérdezés írása és mentése a helyi Azure DevOps-adattárban. Igény szerint testre szabhatja az egyéni lekérdezések részleteit, de legalább egy szabályazonosítóval kell rendelkeznie. A saját CodeQL-lekérdezések írásáról további információt a CodeQL-lekérdezések írása című témakörben talál. Több lekérdezést is összecsomagolhat egy lekérdezéscsomagba, vagy használhatja a mások által közzétett csomagokat. További információ: A CodeQL-csomagok közzététele és használata.
Egyéni konfigurációs fájl használata
Az egyéni konfigurációs fájlok segítségével kezelheti, hogy milyen lekérdezések futnak a CodeQL kódelemzése során. Több futtatandó lekérdezést vagy lekérdezéscsomagot is megadhat, és módosíthatja vagy letilthatja az alapértelmezett CodeQL-lekérdezéseket.
Ha egy adott lekérdezést fel szeretne venni, adja meg a lekérdezés nevét és elérési útját a lekérdezésfájl (.ql) helyéhez az adattárban.
Ha egy adott csomagot szeretne belefoglalni, adja meg a csomag nevét. A konfigurációs fájlban futtatandó Tetszőleges számú CodeQL-lekérdezéscsomagot megadhatja.
A következő lépés egy qlpack.yml
fájl létrehozása. Ez a fájl deklarálja a CodeQL-csomagot és az azzal kapcsolatos információkat. A *.ql
csomag részét képezik az ugyanabban a könyvtárban (vagy alkönyvtárban) qlpack.yml
lévő fájlok.
Tipp.
A konfigurációs fájl packs
szűrője támogatja a csomagok letöltését a GitHubon üzemeltetett adattárakból, bár a queries
szűrő nem.
Ha a csomag privát a GitHubon, akkor meg kell adnia egy GitHub hozzáférési jogkivonatot a AdvancedSecurity-Codeql-Init@1
feladaton keresztül környezeti változóként és változónévként, mivel GITHUB_TOKEN
a jogkivonat hatóköre az .read:packages
Íme egy példa konfigurációs fájlra:
name: "Run custom queries"
# When using a configuration file, if you do not disable default queries,
# then the default CodeQL queries in the `code-scanning` query suite will also execute upon analysis.
disable-default-queries: true
# To reference local queries saved to your repository,
# the path must start with `./` followed by the path to the custom query or queries.
# Names for each query referenced is optional.
queries:
- name: Use security-extended query suite
uses: security-extended
- name: Use local custom query (single query)
uses: ./customQueries/javascript/FindTestFunctions.ql
- name: Use local custom query (directory of queries)
uses: ./customQueries/javascript/MemoryLeakQueries
packs:
- mygithuborg/mypackname
paths:
- src
paths-ignore:
- src/node_modules
- '**/*.test.js'
query-filters:
- include:
kind: problem
- include:
precision: medium
- exclude:
id:
- js/angular/disabling-sce
- js/angular/insecure-url-allowlist
Tipp.
A konfigurációs fájl specifikációi figyelmen kívül hagyják és elsőbbséget élveznek a AdvancedSecurity-Codeql-Init@1
feladat folyamatszintű konfigurációival szemben.
includepaths
/ ignorepaths
a program figyelmen kívül hagyja, vagy ha paths
/paths-ignore
jelen van, felülírja a következő értékekkel: .paths
/paths-ignore
querysuite
felül lesz írva a konfigurációs fájlban queries
vagy packs
a konfigurációs fájlban megadott értékekkel.
Ha bármilyen egyéni lekérdezést használ, íme egy példa qlpack.yml
az egyéni lekérdezések könyvtárába:
version: 1.0.1
dependencies:
codeql/javascript-all: "*"
codeql/javascript-queries: "*"
A dependencies
változó a csomag összes függőségét és a kompatibilis verziótartományokat tartalmazza. A rendszer minden függőségre egy CodeQL-kódtárcsomagként scope/name
hivatkozik. A definiálás dependencies
során a qlpack.yml
lekérdezés pontosan az egyik alapvető nyelvi csomagtól függ (például JavaScript, C#, Ruby stb.), amely meghatározza a lekérdezés által elemezhető nyelvet.
A konfigurációs fájllal kapcsolatos további tanácsokért és konfigurációs beállításokért lásd: A speciális beállítás testreszabása kódvizsgálathoz vagy beállításhozqlpack.yml
: CodeQL-csomagstruktúra.
Miután megkapta a konfigurációs fájlt, testre kell szabnia a CodeQL-elemzést futtató folyamatot az új fájl használatához. Íme egy konfigurációs fájlra mutató mintafolyamat:
trigger: none
pool:
vmImage: windows-latest
# You can either specify your CodeQL variables in a variable block...
variables:
# `configfilepath` must be an absolute file path relative to the repository root
advancedsecurity.codeql.configfilepath: '$(build.sourcesDirectory)/.pipelines/steps/configfile.yml'
# Or you can specify variables as variables for the task. You do not need both definitions.
steps:
- task: AdvancedSecurity-Codeql-Init@1
displayName: Initialize CodeQL
inputs:
languages: 'javascript'
loglevel: '2'
configfilepath: '$(build.sourcesDirectory)/.pipelines/steps/configfile.yml'
# If downloading a pack from GitHub,
# you must include a GitHub access token with the scope of `read:packages`.
env:
GITHUB_TOKEN: $(githubtoken)
- task: AdvancedSecurity-Codeql-Analyze@1
displayName: Perform CodeQL Analysis
Kódvizsgálati riasztások
Az Azure DevOps-hoz készült GitHub Advanced Security kódkeresési riasztások közé tartoznak a kódkeresési jelzők a kódszintű alkalmazás biztonsági réseit jelző adattárak szerint.
A kódvizsgálat használatához először konfigurálnia kell a GitHub Advanced Securityt az Azure DevOpshoz.
Az Azure DevOps Adattárak területén található Speciális biztonság lap a központ a kódkeresési riasztások megtekintéséhez. A beolvasási riasztások megtekintéséhez válassza a Kódolvasás lapot. Szűrhet ág, állapot, folyamat, szabálytípus és súlyosság szerint. A riasztási központ jelenleg nem jeleníti meg a lekéréses lekérdezési ágakon befejezett vizsgálatra vonatkozó riasztásokat.
A folyamatok vagy ágak átnevezése nem befolyásolja az eredményeket – akár 24 óráig is eltarthat, amíg megjelenik az új név.
Ha egyéni CodeQL-lekérdezéseket futtat, alapértelmezés szerint nincs külön szűrő a különböző lekérdezéscsomagokból létrehozott riasztásokhoz. Az egyes lekérdezésekhez eltérő szabály alapján is szűrhet.
Ha kikapcsolja az Adattár Speciális biztonság funkcióját, elveszíti az eredményekhez való hozzáférést az Advanced Security lapon és a buildelési feladatban. A buildelési feladat nem hiúsul meg, de a buildek eredményei a feladattal futnak, miközben az Advanced Security le van tiltva, és nem maradnak meg.
Riasztás részletei
Válasszon ki egy riasztást további részletekért, beleértve a szervizelési útmutatást is. Minden riasztás tartalmaz egy helyet, leírást, példát és súlyosságot.
Section | Magyarázat |
---|---|
Hely | A Helyek szakasz egy adott példányt mutat be, ahol a CodeQL biztonsági rést észlelt. Ha a kód több példánya is megsérti ugyanazt a szabályt, a rendszer minden különböző helyhez új riasztást hoz létre. A Helyek kártya közvetlen hivatkozást tartalmaz az érintett kódrészletre, így kiválaszthatja azt a kódrészletet, amely szerkesztésre az Azure DevOps webes felhasználói felületére irányítható. |
Leírás | A leírást a CodeQL eszköz adja meg a probléma alapján. |
Ajánlás | A javaslat egy adott kódvizsgálati riasztás javasolt javítása. |
Példa | A példaszakasz egy egyszerűsített példát mutat be a kód azonosított gyengeségére. |
Súlyosság | A súlyossági szintek lehetnek alacsonyak, közepesek, magasak vagy kritikusak. A súlyossági pontszám az azonosított Common Weakness Enumeráció (CWE) esetében megadott közös sebezhetőségi pontozási rendszer (CVSS) pontszámán alapul. További információ a súlyosság pontszámáról ebben a GitHub-blogbejegyzésben. |
Egy adattár riasztásainak megtekintése
Az adattárak közreműködői engedélyekkel rendelkező felhasználói megtekinthetik az adattár összes riasztásának összegzését az Adattárak alatti Speciális biztonság lapon. Válassza a Kódolvasás lapot az összes titkos kódvizsgálati riasztás megtekintéséhez.
Az eredmények megjelenítéséhez először a kódvizsgálati feladatokat kell futtatni. Az első vizsgálat befejezése után az észlelt biztonsági rések megjelennek az Advanced Security (Speciális biztonság) lapon.
A riasztások lap alapértelmezés szerint az adattár alapértelmezett ágának függőségvizsgálati eredményeit jeleníti meg.
Egy adott riasztás állapota az alapértelmezett ág és a legújabb futtatási folyamat állapotát tükrözi, még akkor is, ha a riasztás más ágakon és folyamatokon is létezik.
Kódvizsgálati riasztások elvetése
A riasztások elvetéséhez megfelelő engedélyekre van szüksége. Alapértelmezés szerint csak a projektgazdák vethetik el az Advanced Security riasztásokat.
Riasztás elvetése:
- Lépjen a bezárni kívánt riasztásra, és válassza ki a riasztást.
- Válassza a Riasztás bezárása legördülő menüt.
- Ha még nincs kiválasztva, válassza az Elfogadott kockázat vagy a Hamis pozitív lehetőséget a lezárás okaként.
- Adjon hozzá egy nem kötelező megjegyzést a Megjegyzés szövegmezőbe.
- Válassza a Bezárás lehetőséget a riasztás elküldéséhez és bezárásához.
- A riasztás állapota Megnyitásról Lezártra változik, és megjelenik az elutasítási ok.
Ez a művelet csak a kijelölt ág riasztását zárja be. Az azonos biztonsági rést tartalmazó egyéb ágak mindaddig aktívak maradnak, amíg el nem zárjanak. A korábban elvetett riasztások manuálisan újra megnyithatók.
Kódolvasási riasztások kezelése lekéréses kérelmek esetén
Ha riasztások jönnek létre a lekéréses kérelmek új kódmódosításaihoz, a riasztás széljegyzetként jelenik meg a lekéréses kérelem Áttekintés lapjának Megjegyzés szakaszában, valamint riasztásként az Advanced Security adattár lapján, a lekéréses kérelem ágának új ágválasztó eredményével.
Az érintett kódsorokat megtekintheti, megtekintheti a megállapítás összegzését, és feloldhatja a jegyzetet az Áttekintés szakaszban.
A lekéréses kérelmek riasztásainak elvetéséhez a riasztás részletes nézetére kell navigálnia a riasztás bezárásához és a széljegyzet feloldásához. Ellenkező esetben a megjegyzés állapotának (1) módosítása feloldja a megjegyzést, de nem zárja be vagy nem javítja ki az alapul szolgáló riasztást.
A lekéréses kérelem ág teljes eredménykészletének megtekintéséhez lépjen a Repos>Advanced Security webhelyre, és válassza ki a lekéréses kérelem ágát. Ha a széljegyzeten a További részletek megjelenítése (2) lehetőséget választja, a Riasztás részletei nézetre irányítja a Speciális biztonság lapon.
Tipp.
A rendszer csak akkor hoz létre széljegyzeteket, ha az érintett kódsorok teljesen egyediek a lekéréses kérelmek különbségei között.
Kódvizsgálat hibaelhárítása
Ha a CodeQL végrehajtásával kapcsolatos hibákba ütközik, a CodeQL CLI általában az egyes futtatott parancsok állapotát jelenti kilépési kódként. A kilépési kód információkat biztosít a következő parancsokhoz vagy a CodeQL parancssori felületre támaszkodó egyéb eszközökhöz. További információ a kilépési kód részleteiről: Kilépési kódok.
Hiba: 'database finalize' CodeQL parancs (32)
Ez a hiba a CodeQL-adatbázis létrehozásának véglegesítésével kapcsolatos problémát jelez, amely lehet kinyerési hibák vagy hiányzó buildelési lépések miatt.
Hibaelhárítási lépések:
- A kód meglétének ellenőrzése és fordítása
- Lefordított nyelvek esetén ellenőrizze, hogy a buildelési folyamat kódokat állít-e össze, és hogy a
AdvancedSecurity-Codeql-Init
feladatok közöttAdvancedSecurity-Codeql-Analyze
zajlik-e. A gyakori buildparancsok és a szükséges jelzők (például a tiszta gyorsítótár/no-daemon) itt találhatók a buildparancsok megadásakor. - Az értelmezett nyelvek esetében győződjön meg arról, hogy a projekt adott nyelvéhez tartozik valamilyen forráskód.
- Lefordított nyelvek esetén ellenőrizze, hogy a buildelési folyamat kódokat állít-e össze, és hogy a
- Kinyerési hibák ellenőrzése
- Ellenőrizze, hogy a kinyerési hibák hatással vannak-e a CodeQL-adatbázis állapotára.
- Tekintse át a naplófájlt a kinyerési hibákért és figyelmeztetésekért az adatbázis általános állapotának felméréséhez.
- Túlterhelt hibák vizsgálata
- Ha a legtöbb fájl elszívóhibákat tapasztal, vizsgálja meg tovább a nem megfelelő kinyerés kiváltó okának megértését.
Hiba: automatikusan összeállított szkript (1)
Ez a hiba egy automatikus buildelési hibát ír le, amely a kódolvasás beállításával vagy konfigurációjával kapcsolatos problémát jelez.
Hibaelhárítási lépések:
- Buildelési lépések konfigurálása
- Távolítsa el az automatikusan összeállított lépést, és konfiguráljon konkrét buildelési lépéseket a folyamatok lefordított nyelveihez.
- Tekintse meg az Azure DevOps GitHub Advanced Security konfigurálási irányelveit.
Hiba: A CodeQL-címtárak nem találhatók az ügynökeszköz gyorsítótárában
Ez a hiba a CodeQL saját üzemeltetésű ügynökökhöz való telepítésével kapcsolatos problémát jelez.
Hibaelhárítási lépések:
- Tekintse meg az Azure DevOps GitHub Advanced Security konfigurálási útmutatójában vagy konfigurációs szkriptjeiben található beállítási útmutatókat.
Hiba: a nyelvi folyamat változója nincs beállítva
Ez a hiba akkor fordul elő, ha a CodeQL-t a folyamatváltozó beállítása nélkül próbálja futtatni, megadva a vizsgálandó nyelveket.
Hibaelhárítási lépések:
- Nyelvi folyamat változója
- Győződjön meg arról, hogy a nyelvi folyamat változója megfelelően van konfigurálva. Tekintse meg az Azure DevOps GitHub Advanced Security konfigurálási irányelveit.
- A támogatott nyelvek közé tartoznak a
csharp
következők: ,cpp
,go
,java
,javascript
python
,ruby
ésswift
.
A CodeQL nem ad eredményül
Ez a szakasz útmutatást nyújt azokhoz az esetekhez, amikor a CodeQL-elemzés nem hoz eredményt.
Hibaelhárítási lépések:
- Észlelt biztonsági rések keresése
- Fontolja meg annak lehetőségét, hogy a kód valóban nem rendelkezik biztonsági résekkel. Ha biztonsági rések várhatók, de nem észlelhetők, folytassa a további ellenőrzésekkel.
- Lekérdezéscsomag konfigurációjának áttekintése
- Ellenőrizze a használt lekérdezéscsomagot, és szükség esetén fontolja meg egy átfogóbb csomagra való váltást.
- Másik lehetőségként egyéni lekérdezési csomagokat is létrehozhat a testreszabott elemzéshez.
- Az eredmények megtekintéséhez szükséges engedélyek módosítása
- Gondoskodjon arról, hogy legalább a közreműködői szinten megfelelő engedélyeket kapjon az elemzési eredmények eléréséhez. További információ: Speciális biztonsági engedélyek.
A CodeQL időtúllépése
Ha a AdvancedSecurity-Codeql-Analyze@1
feladat megjelenik This job was abandoned ... we lost contact with the agent
, és ön egy üzemeltetett Microsoft-ügynököt használ, a feladat eléri a fizetős üzemeltetett ügynökök beépített hat órás időtúllépését. Ehelyett megpróbálhat elemzést futtatni egy saját üzemeltetésű ügynökön.
Kódolvasási tevékenység engedélyei
A kódolvasási buildfeladat a folyamatidentitás használatával hívja meg az Advanced Security REST API-kat. Alapértelmezés szerint az ugyanabban a projektben lévő folyamatoknak hozzáférésük van a CodeQL-elemzés futtatásával létrehozott SARIF-fájl feltöltéséhez. Ha ezeket az engedélyeket eltávolítják a buildszolgáltatás-fiókból, vagy ha egyéni beállítással rendelkezik (például egy, az adattártól eltérő projektben üzemeltetett folyamattal), ezeket az engedélyeket manuálisan kell megadnia.
Hibaelhárítási lépések:
- Adjon és
Advanced Security: View alerts
Advanced Security: Manage and dismiss alerts
adjon engedélyt a folyamatban használt buildszolgáltatás-fióknak, amely a projekt hatókörű folyamatok esetében,[Project Name] Build Service ([Organization Name])
a gyűjtemény hatókörű folyamatok esetében pedig azProject Collection Build Service ([Organization Name])
.
A CodeQL-csomag manuális telepítése saját üzemeltetésű ügynökre
Telepítse a CodeQL-csomagot az ügynökeszköz gyorsítótárára a GitHubon elérhető architektúra beállítási szkriptjének használatával. Ezek a szkriptek megkövetelik, hogy a $AGENT_TOOLSDIRECTORY
környezeti változó az ügynök eszközkönyvtárának helyére legyen beállítva, például. C:/agent/_work/_tool
Másik lehetőségként manuálisan is végrehajthatja a következő lépéseket:
- Válassza ki a Legújabb CodeQL kiadási csomagot a GitHubról.
- Töltse le és bontsa ki a csomagot a következő könyvtárba az ügynökeszköz könyvtárában, amely általában a következő alatt
_work/_tool
található:./CodeQL/0.0.0-[codeql-release-bundle-tag]/x64/
. Az aktuális kiadástv2.16.0
használva a mappa neve lesz a cím../CodeQL/0.0.0-codeql-bundle-v2.16.0/x64/
További információ az ügynökeszköz könyvtáráról. - Hozzon létre egy üres fájlt
x64.complete
a./CodeQL/0.0.0-[codeql-release-bundle-tag]
mappában. Az előző példában a fájl végpontjánakx64.complete
elérési útja legyen./CodeQL/0.0.0-codeql-bundle-v2.16.0/x64.complete
.