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.

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.

CodeQL-riasztások

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-ről részletesebb dokumentációt a GitHub CodeQL-dokumentációjában talál.

A CodeQL támogatja a lefordított és az értelmezett nyelveket is, és a támogatott nyelveken írt kódban találhat biztonsági réseket és hibákat.

  • C/C++
  • C#
  • Ugrás
  • Java
  • JavaScript/TypeScript
  • Kotlin (bétaverzió)
  • Python
  • Ruby
  • Swift

További információkért tekintse meg a CodeQL webhelyén található dokumentációt a támogatott nyelvekről és keretrendszerekről.

A CodeQL által használt konkrét lekérdezéseket és feladatadatokat a buildnaplóban tekintheti meg, hasonlóan a függőségek vizsgálatához.

Képernyőkép a kódvizsgálat közzétételi eredményeinek feladatáról

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éréses ágakon végzett 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ések futtatása mellett dönt, alapértelmezés szerint nincs külön szűrő a különböző lekérdezéscsomagokból generált riasztásokhoz. Az egyes lekérdezésekhez eltérő szabály alapján is szűrhet.

Az adattár kódkeresési riasztásainak képernyőképe

Ha kikapcsolja az Advanced Security szolgáltatást az adattárhoz, az Advanced Security lapon elveszíti az eredményekhez való hozzáférést, és elkészíti a feladatot. A buildelési feladat nem fog meghiúsulni, de a buildek eredményei a feladattal együtt futnak, míg az Advanced Security le van tiltva, és nem marad 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 részletez egy adott példányt, 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.

Kódolvasási riasztások kezelése

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

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 a kód elemzéséhez futtatja a security-extended lekérdezéscsomagot. 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 a CodeQL-lekérdezések írása című témakörben olvashat bővebben. 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. Megadhat további futtatandó lekérdezéseket vagy lekérdezéscsomagokat, é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.

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.

A konfigurációs fájllal kapcsolatos konkrét tanácsokért és konfigurációs beállításokért lásd : A speciális beállítás testreszabása a kódvizsgálathoz.

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-Autobuild@1
  displayName: AutoBuild
 
- task: AdvancedSecurity-Codeql-Analyze@1
  displayName: Perform CodeQL Analysis

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. A kilépési kód részleteiről további információt a Kilépési kódok című témakörben talál.

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 Folyamatváltozó beállítása nélkül próbálja futtatni a CodeQL-t, és megadja, hogy melyik nyelv(ek) lesznek beolvasva.

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.

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 eltávolítja ezeket az engedélyeket 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), manuálisan kell megadnia ezeket az engedélyeket.

Hibaelhárítási lépések:

  • Adjon és Advanced Security: View alertsAdvanced 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]).