Gå til hovedindhold

Malwarescanning

fremforge kører en ClamAV-baseret scanner foran de upload-flader, der er nævnt under Flader. Matcher en signatur, afvises uploaden med HTTP 422, og der skrives en fundrække i malwarescanningsloggen for den pågældende tenant.

Scanneren kører uden Cisco Talos og uden abuse.ch. Begge kræver en betalt licens til kommerciel brug, og vi vil ikke have en underdatabehandler i scanningsvejen, som vi ikke fuldt ud kan stå inde for.

Signaturer

FeedHvad den dækkerHyppighedLicens
SaneSecurityAlmindelig malware i e-mails og makroer, phishing, JS-droppereHentes hver 4. time fra et EU-mirrorGratis, støttet af donationer
YARA-Forge CoreTrusselsaktørers TTP’er, packers, web shells, native payloads. Samler 45+ gennemgåede repositories med YARA-regler (Florian Roths signature-base, DidierStevens m.fl.)Hentes hver 4. time, upstream udgiver ugentligtDRL 1.1, kommerciel brug tilladt med kildeangivelse
Linux Malware Detect (LMD)Payloads på Linux-servere: web shells, cryptominere, bagdøre. rfxn.com’s statiske datasætHentes hver 4. time, upstream dagligtGPLv2
EICAR-testsignaturStandardsignaturen til røgtest af malwarescanning, lagt ind igen ved hver opdateringStatisk, monteret fra en ConfigMapPublic domain

fremverks driftsfolk overvåger, hvor friske feeds er; kunder ser ikke signaturernes friskhed direkte. SLA’en dækker scannerens tilgængelighed.

Kildeangivelse. YARA-Forge Core sammensættes af YARA-Forge fra offentlige repositories med YARA-regler, og hver regel krediterer sine forfattere i sine metadata. Den bruges under Detection Rule License 1.1. Signaturerne i Linux Malware Detect er lavet af R-fx Networks. Se tredjepartsmeddelelser.

Flader

Scannes, fail-closed (uploaden afvises, hvis scanneren ikke kan nås):

  • PUT af LFS-objekter
  • POST af vedhæftede filer i issues og pull requests
  • PUT / POST til pakkeregistret, alle pakketyper (npm, Maven, PyPI, NuGet, Cargo, container-lag og resten), herunder udgivelser fra jobs på runners hostet af fremforge til en organisations registry

En upload større end 4 GiB kan ikke scannes fuldt ud og afvises med HTTP 413.

Scannes kun, hvis din organisation slår det til (fra som standard):

Scannes IKKE:

  • Push via Git-protokollen (git-objekter). Registrering af secrets ved push håndteres separat af push-beskyttelse.
  • Workflow-artefakter. De er kortlivede, begrænset til tenanten, og politikken siger allerede “accepter ikke artefakter, du ikke har tillid til”. Modelfiler blandt dem tjekkes af modelscanning, kun som fund.

Hentninger gennem afhængighedsproxyen

Det, afhængighedsproxyen henter fra et upstream-registry (pakkefiler fra npm, PyPI, Maven, NuGet, Go, Cargo, Helm og RPM samt lag i container-images), bliver som standard ikke scannet med ClamAV. Det svarer til GitHub og GitLab, som heller ikke virusscanner downloads af pakker: offentlige registries fanger malware, når en pakke udgives, og offentliggør den som en malware-advisory.

Det her gælder stadig for alle organisationer, uanset om ClamAV-scanning er slået til eller fra:

  • Kendte ondsindede pakker. Hver pakkeversion, proxyen leverer, sammenholdes med OSV’s MAL--malware-advisories under din pakkepolitik. Et match afvises for alle organisationer, uanset politikkens tilstand (siden 2026-10-11; for fremforges egne interne organisationer siden 2026-10-10): downloaden besvares med 403 og årsagen, og versionen udelades af de pakkemetadata, proxyen leverer, så pakkehåndteringer opløser til en version, der ikke er ondsindet. Se Ondsindede pakker.
  • Indhold, som ClamAV allerede har fundet inficeret, forbliver blokeret. En fil eller et image-lag, som en scanning fandt inficeret, afvises for alle organisationer, uanset om organisationen selv scanner.
  • Uploads og pushede images scannes altid, som angivet under Flader.

Vil du have proxyen til at scanne det, den henter, med ClamAV, så slå Proxy-virusscanning: scan hentede pakker og images (ClamAV) til under Administration → Byg og udrul → Afhængighedsproxy, eller sæt malware_scan: true med PUT /orgs/{org}/dependency-proxy. Når det er slået til, streames hver pakkefil og hvert image-lag, proxyen henter til din organisation, gennem ClamAV, og en fil, den finder inficeret eller ikke kan scanne fuldt ud, holdes tilbage. Det gælder også en fil større end 4 GiB, undtagen et modellag i safetensors eller GGUF, der består sit formattjek. En scanning af et image-lag, der løber tør for tid, er ikke en afgørelse: laget holdes tilbage og sættes i kø til fremforges baggrundsscanner af lag, og en senere hentning leveres, når den scanning er bestået. En pakkefil, hvis scanning løber tør for tid, behandles på samme måde: den holdes tilbage fra den anmodning, scannes i baggrunden og leveres ved en senere anmodning, når den scanning er bestået. Mens den venter, gemmes og scannes en RPM kun i din organisations eget område, som alt RPM-indhold. En fil, som proxyen cachede for en anden organisation uden scanning, hentes og scannes igen, før din organisation får den leveret.

Hold nye images tilbage, til malwarescanningen er færdig (block_until_scanned) venter på den scanning, så det kræver, at ClamAV-scanning er slået til. En forespørgsel, der ville lade block_until_scanned være slået til med malware_scan slået fra, afvises med 400 scan-pair.

Hvad der sker, når en signatur matcher

  1. Proxyen afviser uploaden med HTTP 422 og et svar, der nævner signaturen, SHA-256 af de afviste bytes og en henvisning til forløbet for tilsidesættelse.
  2. En fundrække skrives til malware_scan_findings via API’ets endpoint /internal/malware-scan/ingest (gensidig godkendelse, bearer + IP-tilladelsesliste).
  3. Fundet vises straks i tenant-administrationen under Sikkerhed, Malwarescanning med upload-stien, den matchende signatur, hvem der forsøgte uploaden, og filens størrelse.

Tilsidesættelser (falske positiver)

Nogle signaturer slår ud på legitime testfixtures, prøver fra sikkerhedsforskning eller harmløse artefakter, der tilfældigvis matcher et gammelt mønster. Tenant-administratorer kan tilføje en tilsidesættelse, der godkender et bestemt par af SHA-256-hash og repository.

  1. Tenant-administration → Sikkerhed › Fund › Malware. Fold Aktive tilsidesættelser ud, og klik på Tilføj tilsidesættelse.
  2. Indsæt SHA-256 for den afviste fil (vises i 422-svaret).
  3. Vælg omfanget: kun dette repo eller alle repoer i organisationen.
  4. Sæt en udløbsdato (standard 90 dage; højst 1 år).
  5. Tilføj en begrundelse (fritekst, registreres i organisationens revisionslog).

En tilsidesættelse kortslutter kun afgørelsen, der matcher på hash. Matcher en anden signatur de samme bytes, afvises uploaden stadig. fremverks driftsfolk gennemgår tilsidesættelser hvert kvartal som en del af sikkerhedsgennemgangen.

Via REST-API’et

Fund fra malwarescanning og tilsidesættelser er tilgængelige i det offentlige API. Brug det, når du vil sende advarsler om afviste uploads til et eksternt ticketsystem, scripte tilsidesættelsers livscyklus eller styre det fra en AI-agent.

  • List fund GET /_app/api/v1/orgs/:slug/malware-scan/findings
  • Afvis et fund POST /_app/api/v1/orgs/:slug/malware-scan/findings/:id/dismiss
  • List tilsidesættelser GET /_app/api/v1/orgs/:slug/malware-scan/overrides
  • Opret tilsidesættelse POST /_app/api/v1/orgs/:slug/malware-scan/overrides body: { "kind": "file", "signature": "sha256:...", "reason": "test fixture", "expires_at": "2027-01-01T00:00:00Z" }
  • Tilbagekald tilsidesættelse DELETE /_app/api/v1/orgs/:slug/malware-scan/overrides/:id

At liste kræver scopet findings:read, og at afvise et fund kræver findings:write. At oprette eller tilbagekalde en tilsidesættelse kræver policy:write, fordi en tilsidesættelse fritager uploads fra scanningen; et CI-jobs runner-token har det aldrig. Brug et Personal Access Token (PAT):

curl -X POST \
  -H "Authorization: Bearer ${FREMFORGE_PAT}" \
  -H "Content-Type: application/json" \
  -d '{"kind":"file","signature":"sha256:abc123...","reason":"known-clean test artefact","expires_at":"2027-01-01T00:00:00Z"}' \
  https://frem.sh/_app/api/v1/orgs/acme/malware-scan/overrides

Se referencen for det offentlige REST-API for den fulde OpenAPI-specifikation.

SLA og fail-closed

Kan ClamAV-dæmonen ikke nås, afvises uploads med HTTP 503 og en Retry-After. Det er fail-closed-beslutningen i henhold til vores Acceptable Use Policy. Alternativet (fail-open under et udfald af scanneren) åbner et vindue, hvor forpligtelsen i AUP’en stille omgås; det mener vi ikke er det værd. Driftsfolk bliver kaldt ud inden for 5 minutter, når scanneren er nede.

EICAR-røgtest

Et kanariejob (CronJob) uploader den standardiserede EICAR-testfil hvert 30. minut og verificerer, at uploaden afvises. Lykkes tre kanariekørsler i træk (altså hvis afvisningen holder op med at ske), bliver driftsfolk kaldt ud. Det dækker det tilfælde, hvor signaturdatabasen blev leveret ren, men ikke kunne indlæses.