Cloud & IT Cert Prep · Lektion

Sikkerhed for afhængigheder og software composition analysis

Auditér tredjepartsbiblioteker med SCA-værktøjer, håndhæv låsning af afhængigheder, og integrér automatiske sårbarhedsalarmer i CI/CD-pipelinen.

Lektion 3 af 413 trin

Sikkerhed for afhængigheder og software composition analysis er en gratis Cloud & IT Cert Prep-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Cloud & IT Cert Prep, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Cloud & IT Cert Prep-kurset indeholder 4 lektioner i alt.

Risikoen ved open source-afhængigheder

Moderne applikationer består i høj grad af tredjepartsbiblioteker og -rammeværk med open source. En typisk Node.js-applikation kan have mere end 1.000 transitive afhængigheder, og et Java-projekt kan hente hundredvis af Maven-artefakter. Hver afhængighed er en potentiel angrebsflade. Log4Shell-sårbarheden (CVE-2021-44228) i Log4j-biblioteket viste, at en enkelt afhængighed inden for få dage efter offentliggørelsen kunne gøre millioner af applikationer verden over øjeblikkeligt sårbare over for udnyttelse.

Hvad er analyse af softwaresammensætning?

Værktøjer til analyse af softwaresammensætning (SCA) opretter automatisk en fortegnelse over alle open source-komponenter i en applikation — herunder transitive afhængigheder (afhængighedernes afhængigheder) — og kontrollerer dem løbende mod sårbarhedsdatabaser for kendte CVE'er. SCA genererer en stykliste over software (SBOM), der viser alle komponenter og versioner, så berørte systemer hurtigt kan identificeres, når nye sårbarheder offentliggøres.

# SCA tool usage examples:

# npm audit (Node.js):
# npm audit
# -> Reports vulnerabilities in package.json dependencies
# -> Shows severity, CVE ID, affected package, fix version

# OWASP Dependency-Check (Java/Python/etc.):
# dependency-check --project 'MyApp' --scan ./lib/
# -> Generates HTML/XML report with CVE findings

# Snyk scan:
# snyk test
# -> Reports vulns + 'snyk fix' applies patches automatically

Transitive afhængigheder: Den skjulte risiko

Transitive afhængigheder er biblioteker, som dine direkte afhængigheder selv afhænger af, og som du ikke udtrykkeligt har valgt. Du kan have en direkte afhængighed til Package A, som afhænger af Package B (version 1.2), der afhænger af Package C (version 3.0 — en sårbar version). Du kender ikke Package C, men din applikation kører det. SCA-værktøjer gennemgår hele afhængighedstræet for at synliggøre disse skjulte sårbarheder, som udviklere ikke har direkte indsigt i.

# Dependency tree example:
# Your package.json:
#   'express': '^4.18.0'     (direct dependency)
#   'lodash':  '^4.17.21'   (direct dependency)

# Transitive dependencies (you didn't choose these):
#   express -> 'qs' 6.11.0       (URL parsing)
#   express -> 'body-parser' 1.20 -> 'qs' 6.11.0
#   lodash (self-contained in this case)

# If 'qs' 6.10.x had a prototype pollution CVE,
# you are vulnerable via express even though
# you never directly imported 'qs'.

Stykliste over software (SBOM)

En stykliste over software (SBOM) er en formel, maskinlæsbar fortegnelse over alle komponenter i et softwareprodukt — svarende til en ingrediensliste på fødevarer. SBOM-formater omfatter SPDX (Linux Foundation) og CycloneDX (OWASP). USA's Executive Order 14028 (2021) krævede SBOM'er for software, der sælges til den føderale regering. Med en SBOM kan sikkerhedsteams straks spørge: 'Hvilke af vores produkter indeholder Log4j?' og få svar på få minutter i stedet for efter dages manuel søgning.

# Generate SBOM with syft:
# syft packages . -o spdx-json > sbom.spdx.json

# SBOM content example (SPDX JSON):
# {
#   'packages': [
#     { 'name': 'express',  'version': '4.18.2', 'license': 'MIT' },
#     { 'name': 'lodash',   'version': '4.17.21','license': 'MIT' },
#     { 'name': 'log4j-core','version': '2.14.0','license': 'Apache-2.0'}
#   ]
# }

# When Log4Shell announced, query SBOM:
# grep -i 'log4j-core' sbom.spdx.json -> FOUND in 3 projects

Fastlåsning af afhængigheder og lock-filer

Fastlåsning af afhængigheder angiver præcise versioner af afhængigheder i stedet for fleksible intervaller (^1.2.3 eller *). Lock-filer (package-lock.json, yarn.lock, Pipfile.lock, Gemfile.lock) registrerer den præcise løste version af hver afhængighed på installationstidspunktet. De bør committes til kildekontrol for at sikre, at alle teammedlemmer og CI/CD-arbejdsgange bruger identiske afhængighedsversioner og dermed forhindre angreb på forsyningskæden, hvor pakkeversioner forgiftes mellem installationer.

# Version range vs pinned versions:

# FLEXIBLE (can pull different versions each install):
# 'express': '^4.0.0'   -> installs latest 4.x.x
# 'lodash': '*'         -> installs any version!

# PINNED (always same version):
# 'express': '4.18.2'   -> always exactly 4.18.2

# Lock file (package-lock.json):
# Records EXACT resolved version of every transitive dep.
# Commit this file! It ensures reproducible builds.
# Never .gitignore lock files (security anti-pattern).

Angreb på forsyningskæden: typosquatting og forveksling af afhængigheder

Angreb på forsyningskæden retter sig mod afhængighedsøkosystemet. Typosquatting består i at udgive ondsindede pakker med navne, der ligner populære pakkers navne (f.eks. lodahs i stedet for lodash) i håb om, at udviklere skriver navnet forkert. Angreb med forveksling af afhængigheder udnytter den rækkefølge, som pakkehåndteringer søger i registre på — en angriber udgiver en ondsindet pakke med samme navn som en intern privat pakke, men med et højere versionsnummer, så pakkehåndteringen i stedet installerer den ondsindede offentlige version.

# Dependency Confusion Attack (Alex Birsan 2021):
# Company uses internal package 'company-utils' v1.0.0
# Hosted on: internal.registry.company.com

# Attacker publishes 'company-utils' v9.9.9 to npmjs.com
# (public registry with higher version number)

# npm install resolves: 'find highest version across ALL registries'
# -> Installs v9.9.9 from public npm (attacker's malicious package!)
# -> Instead of v1.0.0 from internal registry

# Defense: use namespace scoping (@company/utils)
# or configure npm to ONLY use internal registry for private packages

SCA-værktøjer på markedet

Flere SCA-værktøjer bruges i stor udstrækning i branchen. Snyk tilbyder udviklervenlig scanning af afhængigheder med automatiske pull requests til rettelser. OWASP Dependency-Check er et gratis og udbredt værktøj til Java, .NET, Python og Ruby. GitHub Dependabot åbner automatisk pull requests for at opdatere sårbare afhængigheder i GitHub-lagre. JFrog Xray og Sonatype Nexus IQ integrerer SCA i artefaktlagre for at blokere sårbare builds, før de når produktion.

Integration af SCA i CI/CD-arbejdsgange

SCA er mest effektiv, når den integreres som en kvalitetsport i CI/CD-arbejdsgangen. Ved hver pull request og hvert build kører arbejdsgangen SCA-værktøjet og får buildet til at fejle, hvis der findes CVE'er med kritisk eller høj alvorlighed i afhængighederne. Denne tilgang med at flytte sikkerheden til venstre opdager sårbare afhængigheder, før de når produktion — ikke måneder senere under en manuel sikkerhedsgennemgang eller efter et brud. Teams bør definere tydelige tærskler for sårbarheders alvorlighed, som blokerer udrulning, og skelne dem fra sårbarheder, der kun genererer advarsler.

# GitHub Actions SCA pipeline step:
# - name: Run Snyk SCA scan
#   uses: snyk/actions/node@master
#   env:
#     SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
#   with:
#     args: --severity-threshold=high
#             --fail-on=upgradable
# # Build fails if any HIGH or CRITICAL vuln found
# # that has an available fix (--fail-on=upgradable)
# # No fix available? Generates warning, doesn't block
# # (acknowledging risk explicitly is better than blocking forever)

Vurdering af open source-pakkers tilstand

Før du tilføjer en afhængighed, bør du vurdere dens sikkerhedsstatus ved hjælp af flere signaler. Vedligeholdelsesaktivitet: Vedligeholdes projektet aktivt? Hvornår blev den seneste commit og udgivelse foretaget? Historik over kendte sårbarheder: Hvor mange CVE'er har den haft, og hvor hurtigt blev de rettet? Downloadmængde: Pakkers udbredte anvendelse tiltrækker mere sikkerhedskontrol. Antal afhængigheder: Pakker med færre afhængigheder medfører mindre transitive risici. OpenSSF Scorecard leverer automatisk vurdering af open source-projekters sikkerhedspraksis.

Strategier til afhjælpning af sårbarheder

Når SCA identificerer en sårbar afhængighed, findes der flere strategier til afhjælpning. Opgradér til en rettet version — den foretrukne mulighed, når den findes. Virtuel rettelse gennem WAF-regler kan begrænse kendte udnyttelsesveje, mens en opgradering forberedes. Fjern afhængigheden, hvis der ikke længere er brug for den. Acceptér risikoen med en dokumenteret begrundelse, hvis sårbarheden ikke kan udnyttes i den konkrete anvendelseskontekst (f.eks. en serversidesårbarhed i et klientsidebibliotek). Lad aldrig kritiske sårbarheder stå uafhjulpne uden en dokumenteret accept.

Licensoverholdelse for afhængigheder

SCA-værktøjer har et dobbelt formål: De identificerer sikkerhedssårbarheder og markerer problemer med licensoverholdelse i open source-afhængigheder. Almindelige problematiske licenser omfatter GPL v2/v3 (copyleft — kræver, at dit produkt også udgives som open source, hvis du distribuerer det), AGPL (udvider GPL til netværkstjenester) og SSPL. Brug af et GPL-licenseret bibliotek i proprietær kommerciel software uden en kommerciel licens kan medføre et alvorligt juridisk ansvar. SCA-værktøjer som FOSSA, Black Duck og WhiteSource automatiserer licensscanning sammen med registrering af sårbarheder og sikrer overholdelse af forpligtelserne ved open source.

# License compliance risk levels:
# PERMISSIVE (low risk for commercial use):
#   MIT, Apache 2.0, BSD 2/3-Clause
#   -> Can use in proprietary code, just keep attribution

# WEAK COPYLEFT (medium risk - check usage):
#   LGPL -> can link dynamically without open-sourcing your code
#   MPL 2.0 -> modifications to MPL files must be open-sourced

# STRONG COPYLEFT (high risk for proprietary products):
#   GPL v2, GPL v3 -> if you distribute code using GPL library,
#                     your entire product must also be GPL
#   AGPL -> extends GPL to SaaS/network services

# SCA policy: block AGPL/GPL in commercial product
# -> Review any exception requests manually

Hurtigt tjek

Afprøv din forståelse af CompTIA Security+-begreberne (SY0-701) fra denne lektion.

Opsummering af lektionen

I denne lektion har du lært, at SCA-værktøjer scanner hele afhængighedstræet, inklusive transitive afhængigheder, for kendte CVE'er, at SBOM'er giver en maskinlæsbar fortegnelse, som muliggør hurtig reaktion, når nye sårbarheder offentliggøres, og at integration af SCA som en kvalitetsport i CI/CD opdager sårbare afhængigheder, før de når produktion. Som det næste ser vi på DevSecOps, og hvordan sikkerhedskontroller kan flyttes til venstre i hele CI/CD-arbejdsgangen.

Gratis at komme i gang

Lær Cloud & IT Cert Prep med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
150
Lektioner
600

Ofte stillede spørgsmål

Er lektionen “Sikkerhed for afhængigheder og software composition analysis” gratis?

Ja — hele teksten til “Sikkerhed for afhængigheder og software composition analysis” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Cloud & IT Cert Prep-kurset, skal du opgradere til CoddyKit PRO. Cloud & IT Cert Prep-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Sikkerhed for afhængigheder og software composition analysis”?

Auditér tredjepartsbiblioteker med SCA-værktøjer, håndhæv låsning af afhængigheder, og integrér automatiske sårbarhedsalarmer i CI/CD-pipelinen. Du øver dig i Cloud & IT Cert Prep med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Cloud & IT Cert Prep?

Der kræves ingen tidligere erfaring. Cloud & IT Cert Prep på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Sikkerhed for afhængigheder og software composition analysis”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Cloud & IT Cert Prep-lektion?

Ja. Alle Cloud & IT Cert Prep-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Inputvalidering og outputkodning
  2. Sikker håndtering af secrets og miljøvariabler
  3. Sikkerhed for afhængigheder og software composition analysis
  4. DevSecOps: Flyt sikkerheden til venstre i pipelines
← Tilbage til Cloud & IT Cert Prep