Megosztás a következőn keresztül:


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épernyőkép a kódolvasás közzétételi eredményfeladatáról.

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@1amely 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_TOKENa 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 / ignorepathsa 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 dependenciessorá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.

Képernyőkép egy adattár kódkeresési riasztásairól.

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.

Képernyőkép a kódolvasási riasztás részleteiről.

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:

  1. Lépjen a bezárni kívánt riasztásra, és válassza ki a riasztást.
  2. Válassza a Riasztás bezárása legördülő menüt.
  3. 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.
  4. Adjon hozzá egy nem kötelező megjegyzést a Megjegyzés szövegmezőbe.
  5. Válassza a Bezárás lehetőséget a riasztás elküldéséhez és bezárásához.
  6. A riasztás állapota Megnyitásról Lezártra változik, és megjelenik az elutasítási ok.

Képernyőkép a kódkeresési riasztások elutasításáról.

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.

Képernyőkép az aktív kód lekéréses kérésének széljegyzetéről.

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.

Képernyőkép a kód lekéréses kérésének széljegyzetéről.

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:

  1. 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ött AdvancedSecurity-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.
  2. 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.
  3. 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:

  1. 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:

  1. 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:

  1. 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 csharpkövetkezők: , cpp, go, java, javascriptpython, rubyés swift.

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:

  1. É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.
  2. 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.
  3. 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 az Project 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:

  1. Válassza ki a Legújabb CodeQL kiadási csomagot a GitHubról.
  2. 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/_tooltalálható: ./CodeQL/0.0.0-[codeql-release-bundle-tag]/x64/. Az aktuális kiadást v2.16.0haszná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.
  3. 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ának x64.complete elérési útja legyen ./CodeQL/0.0.0-codeql-bundle-v2.16.0/x64.complete.