Udforsk CodeQL i GitHub

Fuldført

Hvad er CodeQL

CodeQL er en semantisk kodeanalysemotor udviklet af GitHub, der behandler kode som data. I stedet for blot at søge efter tekstmønstre forstår CodeQL strukturen og betydningen af din kode, hvilket muliggør sofistikeret sikkerheds- og kvalitetsanalyse.

Traditionelle statiske analyseværktøjer producerer ofte falske positiver, fordi de bruger simpel mønstermatchning. CodeQL's semantiske tilgang forstår kodekontekst, relationer mellem kodeelementer og dataflow gennem applikationer, hvilket resulterer i mere nøjagtig sårbarhedsdetektion.

Nøgleegenskaber ved CodeQL

CodeQL behandler kode som en database:

  • Strukturel repræsentation: Konverterer kildekode til en database, der registrerer syntakstræer, kontrolflowgrafer og dataflowstier.
  • Format, der kan forespørges: Gør det muligt at forespørge på kode ved hjælp af et specialiseret forespørgselssprog, der svarer til forespørgsler i en traditionel database.
  • Sprogagnostisk tilgang: Understøtter flere programmeringssprog, herunder C/C++, C#, Java, JavaScript/TypeScript, Python, Ruby, Go og Swift.
  • Omfattende dækning: Analyserer ikke kun individuelle filer, men hele kodebaser med alle deres indbyrdes forbindelser.

CodeQL muliggør præcis sikkerhedsanalyse:

  • Analyse af varianter: Når du har identificeret en sårbarhed, kan du skrive forespørgsler for at finde lignende problemer på tværs af hele din kodebase.
  • Analyse af dataflow: Sporer, hvordan data bevæger sig gennem dit program fra kilder (brugerinput) til dræn (følsomme handlinger).
  • Sporing af farve: Identificerer, når data, der ikke er tillid til, når følsomme handlinger uden korrekt validering eller rensning.
  • Analyse af kontrolflow: Forstår udførelsesstier og betinget logik for at finde sårbarheder, der kun opstår under bestemte betingelser.

Sådan fungerer CodeQL

CodeQL-analyse involverer tre forskellige faser, der omdanner kildekode til handlingsrettede sikkerhedsresultater:

Fase 1: Opret en CodeQL-database

Det første trin udtrækker en struktureret repræsentation af din kode:

  • Udtrækning af kode: Analyserer dine kildefiler under kompilering eller gennem statisk analyse.
  • Oprettelse af database: Bygger en omfattende database, der repræsenterer din kodes struktur, herunder abstrakte syntakstræer, kontrolflowgrafer og dataafhængigheder.
  • Registrering af metadata: Registrerer filplaceringer, linjenumre, variabelområder, funktionskald og klassehierarkier.
  • Optimering: Indekserer databasen for effektiv forespørgsel, selv på store kodebaser.

Denne database bliver grundlaget for alle efterfølgende analyser. Den oprettes én gang og kan forespørges flere gange, hvilket gør iterativ sikkerhedsanalyse effektiv.

Fase 2: Kør CodeQL-forespørgsler

Når databasen findes, udfører du forespørgsler for at finde sikkerhedsproblemer:

  • Standardforespørgselspakker: GitHub indeholder organiserede forespørgselssæt til almindelige sårbarheder (OWASP Top 10, CWE-standarder).
  • Brugerdefinerede forespørgsler: Skriv dine egne forespørgsler for at finde organisationsspecifikke sikkerhedsmønstre eller overtrædelser af kodningsstandarder.
  • Udførelse af forespørgsel: CodeQL-programmet kører forespørgsler mod databasen og søger efter kodemønstre, der matcher sårbarhedssignaturer.
  • Præstation: Forespørgsler udføres hurtigt, fordi de fungerer på den indekserede database i stedet for rå kildefiler.

Eksempler på forespørgselskategorier omfatter:

  • Sårbarheder i forbindelse med injektion: SQL-injektion, kommandoinjektion, scripting på tværs af websteder.
  • Problemer med godkendelse: Svage adgangskodepolitikker, manglende godkendelseskontrol, usikker sessionsstyring.
  • Kryptografi problemer: Svage algoritmer, hårdkodede legitimationsoplysninger, utilstrækkelig tilfældighed.
  • Ressourcestyring: Hukommelseslækager, ressourceudmattelse, ukontrolleret ressourceforbrug.

Fase 3: Fortolk resultater

Den sidste fase præsenterer resultater i handlingsrettede formater:

  • Rangering af resultater: CodeQL prioriterer resultater efter sværhedsgrad, konfidensniveau og udnyttelsesmuligheder.
  • Kontekstuelle oplysninger: Hvert fund omfatter filplaceringer, linjenumre, berørte kodestykker og dataflowstier.
  • Vejledning til afhjælpning: Resultaterne omfatter forklaringer på sårbarheden og anbefalinger til at løse den.
  • Integration: Resultaterne integreres med fanen GitHub-sikkerhed, pull-anmodningsannoteringer og SARIF-filer til eksterne værktøjer.

CodeQL-forespørgselssproget

CodeQL-forespørgsler er skrevet i et deklarativt sprog, der er specielt designet til at analysere kode:

Forespørgselsstruktur og syntaks

CodeQL bruger objektorienteret logisk programmering:

  • Klasser og prædikater: Definer, hvad du søger efter, ved hjælp af klasser, der repræsenterer kodeelementer (funktioner, variabler, udtryk).
  • Deklarativ tilgang: Beskriv, hvad du vil finde, i stedet for hvordan du finder det.
  • Mønster matchning: Brug prædikater til at matche kodemønstre og relationer.
  • Komponerbarhed: Byg komplekse forespørgsler ved at kombinere enklere prædikater.

Eksempel på forespørgselsstruktur:

import javascript

from SqlExecution sql, Source source
where source.flowsTo(sql.getAnArgument())
select sql, "SQL query vulnerable to injection from $@.", source, "user input"

Denne forespørgsel finder sårbarheder i forbindelse med SQL-injektion ved at:

  • Identifikation af SQL-udførelsespunkter.
  • At finde kilder til brugerinput.
  • Sporing af dataflow fra input til SQL-udførelse.
  • Rapportering af sårbarheder med kontekst.

Standardforespørgselsbiblioteker

GitHub indeholder omfattende forespørgselsbiblioteker:

  • Sikkerhedsspørgsmål: Opdag OWASP Top 10 sårbarheder, CWE-kategorier og sprogspecifikke sikkerhedsproblemer.
  • Forespørgsler om kodekvalitet: Find kodelugte, vedligeholdelsesproblemer, problemer med ydeevnen og overtrædelser af bedste praksis.
  • Bidrag fra Fællesskabet: Tusindvis af forespørgsler bidraget af sikkerhedsforskere og udviklere.
  • Regelmæssige opdateringer: GitHub Security Lab tilføjer løbende nye forespørgsler om nye sårbarheder.

Du kan bruge disse forespørgsler as-is eller tilpasse dem til dine specifikke behov.

CodeQL i GitHub-sikkerhed

CodeQL integreres dybt med GitHubs sikkerhedsfunktioner:

Kodescanning med CodeQL

Automatiseret sikkerhedsanalyse:

  • Standard opsætning: Aktiver CodeQL-scanning med et enkelt klik i lagerindstillingerne.
  • Planlagte scanninger: Scan automatisk ved hvert push, pull-anmodning eller efter en tidsplan.
  • Understøttelse af flere sprog: Registrerer automatisk sprog i dit lager og kører relevante forespørgsler.
  • Præsentation af resultatet: Sikkerhedsresultater vises under fanen Sikkerhed med detaljerede forklaringer.

Integration af pull-anmodning:

  • Indbyggede kommentarer: Sikkerhedsresultater vises som kommentarer direkte på de sårbare kodelinjer i pull-anmodninger.
  • Blokering af checks: Konfigurer CodeQL som en påkrævet kontrol, der skal bestå før fletning.
  • Differentiel scanning: Rapporterer kun nye sårbarheder introduceret af pull-anmodningen, hvilket reducerer støj.
  • Feedback fra udviklere: Udviklere ser sikkerhedsproblemer med det samme, mens koden er frisk i erindringen.

Avanceret sikkerhed i GitHub

For organisationer indeholder GitHub Advanced Security yderligere funktioner:

  • Scanning af privat lager: Kør CodeQL på private lagre.
  • Udførelse af brugerdefineret forespørgsel: Upload og kør organisationsspecifikke forespørgsler.
  • Oversigt over sikkerhed: Dashboard, der viser sikkerhedsniveauet på tværs af alle lagre.
  • Administration af advarsler: Triage, tildel og spor sikkerhedsresultater på tværs af teams.

Brug af CodeQL i CI/CD-pipelines

CodeQL strækker sig ud over GitHub for at integrere med forskellige CI/CD-systemer:

Tilgange til integration

GitHub Actions-integration:

- name: Initialize CodeQL
  uses: github/codeql-action/init@v2
  with:
    languages: javascript, python

- name: Perform CodeQL Analysis
  uses: github/codeql-action/analyze@v2

Denne arbejdsgang:

  • Initialiserer CodeQL for angivne sprog.
  • Bygger din applikation (eller analyserer uden at bygge).
  • Kører sikkerhedsforespørgsler.
  • Uploader resultater til fanen GitHub-sikkerhed.

Integration af Azure Pipelines:

CodeQL kan køre i Azure Pipelines ved hjælp af kommandolinjegrænsefladen:

  • Installer CodeQL CLI: Download og installer CodeQL-pakken i din pipeline.
  • Opret database: Kør codeql database create under dit byggeri.
  • Analysér database: Udfør codeql database analyze med valgte forespørgselspakker.
  • Eksport af resultater: Generer SARIF-filer til visualisering i Azure DevOps.

Andre CI/CD-systemer:

CodeQL CLI understøtter enhver CI/CD-platform:

  • Jenkins: Udfør CodeQL-analyse som build-trin.
  • GitLab CI/CD: Kør CodeQL i GitLab-pipelines med SARIF-output.
  • CircleCI: Integrer CodeQL-scanninger i CircleCI-arbejdsgange.
  • Brugerdefinerede systemer: Brug CodeQL CLI fra ethvert miljø, der kan køre kommandolinjeværktøjer.

Sikkerhedsporte

Brug CodeQL-resultater som kvalitetsporte:

  • Fejlbehæftede builds: Konfigurer pipelines til at mislykkes, når CodeQL finder sårbarheder med høj alvorsgrad.
  • Tendensanalyse: Spor sikkerhedsmålinger over tid for at måle forbedringer.
  • Krav til overholdelse: Generer bevis for sikkerhedsscanning til revisioner og overholdelsescertificeringer.
  • Automatisk afhjælpning: Udløs automatiserede arbejdsgange, når der registreres specifikke sårbarheder.

CodeQL-udviklingsværktøjer

CodeQL indeholder værktøjer til oprettelse og test af forespørgsler:

Visual Studio Code-filtypenavn

Den officielle CodeQL-udvidelse til VS Code tilbyder:

  • Udvikling af forespørgsler: Skriv og test CodeQL-forespørgsler med syntaksfremhævning, autofuldførelse og indbygget dokumentation.
  • Analyse af lokal database: Kør forespørgsler mod databaser, der er oprettet ud fra lokale kodebaser.
  • Visualisering af resultater: Se forespørgselsresultater med kildekodenavigation og dataflowstier.
  • Understøttelse af fejlfinding: Gå gennem udførelse af forespørgsler for at forstå resultater og optimere ydeevnen.

Kommandolinjegrænseflade

CodeQL CLI muliggør scriptbar analyse:

  • Oprettelse af database:codeql database create udtrækker kode til format, der kan forespørges.
  • Udførelse af forespørgsel:codeql database analyze kører forespørgsler og genererer resultater.
  • Test forespørgsler:codeql test run Validerer forespørgsler i forhold til testcases.
  • Håndtering af pakker: Download og administrer standardforespørgselspakker.

Fordele ved CodeQL til sikkerhedsautomatisering

Integration af CodeQL i din DevSecOps-proces giver betydelige fordele:

Udviklerens produktivitet

Tidlig opdagelse:

  • Skift-venstre sikkerhed: Find sårbarheder under udvikling i stedet for i produktion.
  • Hurtigere afhjælpning: Løs problemer, når koden er frisk, og ændringerne er små.
  • Læringsmuligheder: Udviklere lærer sikker kodningspraksis fra øjeblikkelig feedback.
  • Reduceret kontekstskift: Sikkerhedsresultater vises i velkendte udviklingsværktøjer.

Nøjagtige resultater:

  • Lave falske positiver: Semantisk analyse giver mere nøjagtige resultater end mønstermatchning.
  • Kontekstuelle oplysninger: Resultaterne omfatter dataflowstier, der viser præcis, hvordan sårbarheder opstår.
  • Prioriterede resultater: Fokuser på problemer, der kan udnyttes, frem for teoretiske bekymringer.
  • Opdagelse af varianter: Find alle forekomster af et sårbarhedsmønster, ikke kun åbenlyse eksempler.

Organisatorisk sikkerhed

Omfattende dækning:

  • Hele kodebasen: Analysér al kode, herunder tredjepartsafhængigheder og ældre komponenter.
  • Flere sprog: Ensartet sikkerhedsanalyse på tværs af polyglotte applikationer.
  • Ensartede standarder: Anvend de samme sikkerhedsregler på tværs af alle lagre.
  • Historisk analyse: Scan eksisterende kode for at etablere sikkerhedsgrundlinjer.

Skalerbar sikkerhed:

  • Automatiseret scanning: Der kræves ingen manuelle sikkerhedsgennemgange for hver commit.
  • Kontinuerlig overvågning: Regelmæssige scanninger registrerer nyligt afslørede sårbarheder.
  • Sikkerhed som kode: Kodificer sikkerhedskrav som forespørgsler, der er gemt i versionskontrol.
  • Videndeling: Forespørgselsbiblioteker registrerer institutionel sikkerhedsviden.

Compliance og governance

Revisionsspor:

  • Scanningshistorik: Registrering af alle sikkerhedsscanninger med tidsstempler og resultater.
  • Søgning efter livscyklus: Spor sårbarheder fra registrering til afhjælpning.
  • Håndhævelse af politikker: Vis, at der foretages sikkerhedsscanninger for hver version.
  • Generering af evidens: Udarbejd rapporter til revisorer og compliance-rammer.

Du kan finde flere oplysninger om CodeQL under Oversigt over CodeQL.

Du kan finde de tilgængelige værktøjer under CodeQL Tools.