DevShield · lokale installatiebeveiliging

Beveilig uw npm ci en pip install.

DevShield is een lokale beveiliging voor het installeren van afhankelijkheden. U omhult de installatieopdracht: het stopt vijandige lifecycle-scripts, vereist een vastgezet lockfile, signaleert blootgestelde geheimen en blokkeert netwerkverbindingen buiten de toestemmingslijst — volledig op uw machine, zonder externe afhankelijkheden.

i

DevShield is een controlepunt dat alleen installaties beschermt die u erdoorheen laat lopen. Een gewone npm ci die ernaast wordt uitgevoerd, blijft onzichtbaar. U beveiligt uw CI en uw afgesproken lokale werkwijze; dit is geen universele bescherming door alleen iets te installeren.

Installeren

Bouw het en zet het op PATH.

Geen externe afhankelijkheden: een stabiele Rust-toolchain volstaat.

# from the Proxia repo cd devshield cargo build --release # binary → target/release/devshield cp target/release/devshield /usr/local/bin/ # optional: onto PATH
De basisopdracht

devshield run — omhul een installatie.

DevShield voert uw opdracht uit, past de ingeschakelde controles toe en schrijft (met --audit-log) een lokaal JSONL-auditspoor. Elke controle staat standaard op warn (niet-destructief); u schakelt over naar block of fail wanneer u strengere bescherming wilt.

devshield run (--profile | --policy ) [--scripts-mode ] [--preflight-secrets] [--preflight-mode ] [--preflight-lockfile] [--lockfile-mode ] [--egress-proxy] [--egress-mode ] [--audit-log ] -- <command> [args...]
De vier controles

Vier lagen, afzonderlijk in te schakelen.

Elke laag werkt zelfstandig en is standaard niet-destructief. Samen dekken ze de meest voorkomende aanvalspaden bij installaties.

// 1 · uitvoering

Lifecycle-scripts

--scripts-mode warn|block|fail

block schakelt npm-installatiescripts uit (voegt --ignore-scripts); fail weigert vóór uitvoering (afsluitcode 21). Controleert ook npx / npm exec / pnpm dlx als uitvoering van willekeurige code. pip: alleen waarschuwingen. De laag die aanvallen van het type Shai-Hulud / Axios tegenhoudt.

// 2 · integriteit

Lockfile-controle

--preflight-lockfile [--lockfile-mode warn|fail]

Signaleert of weigert (afsluitcode 22) een ontbrekend npm-lockfile of ontbrekende hashes, of een opdracht die het lockfile wijzigt (npm install) in plaats van het te respecteren (npm ci). Controle van de werkwijze, geen detectie van manipulatie: npm verifieert hashes al. pip: naar beste vermogen, alleen waarschuwingen.

// 3 · geheimen

Geheimen vooraf controleren

--preflight-secrets [--preflight-mode warn|fail]

Meldt omgevingsvariabelen en bestanden met geheimen (.env, .npmrc, .pypirc…) vóór de installatie — zonder ooit de waarden af te drukken. fail → exit 20.

// 4 · netwerk

Proxy voor uitgaand verkeer

--egress-proxy [--egress-mode warn|enforce]

Een lokale proxy (127.0.0.1) waarlangs de installatie wordt geleid. enforce blokkeert (403) elke verbinding naar een host buiten de toestemmingslijst. Geen MITM: blokkeert op host, nooit op inhoud. warn registreert alles; een bindingsfout in enforce-modus geeft afsluitcode 23 (standaard weigeren).

Modi · scripts-mode
ModusEffectDEVSHIELD_MODE
warnstandaard

Voert ongewijzigd uit en registreert een lifecycle_scripts gebeurtenis.

alleen audit
block

Schakelt scripts voor npm uit (voegt --ignore-scripts + npm_config_ignore_scripts) toe. pip / npx: alleen waarschuwingen.

enforce
fail

Stopt 21 vóór uitvoering als scripts zouden draaien. Onbekende opdracht: geweigerd (standaard weigeren).

enforce
!

Dekkingsbeperking:block het uitschakelen van scripts is gecontroleerd voor npm. yarn Berry (v2+) negeert npm_config_* en respecteert --ignore-scriptsniet; controleer dit voordat u erop vertrouwt bij pnpm/yarn.

Afsluitcodes

Eén code per weigering, bruikbaar in CI-scripts.

CodeBetekenis
0

Onderliggend programma uitgevoerd; geen controle heeft geweigerd.

code van het programma

Doorgestuurd vanuit de omhulde opdracht.

20

--preflight-mode fail: risico op blootgestelde geheimen gedetecteerd.

21

--scripts-mode fail: lifecycle-scripts zouden worden uitgevoerd.

22

--lockfile-mode fail: risico bij het lockfile.

23

--egress-mode enforce: proxy kon niet starten (standaard weigeren).

10

check / observe egress: bestemming door beleid geblokkeerd.

2

Fout in gebruik of argumenten.

125 · 127

Schrijffout auditlog (125) · uitvoeringsfout opdracht (127).

Invoering · eerst CI

Het meest waardevolle controlepunt.

Hier komen supplychain-aanvallen terecht. Het is centraal en kan niet worden vergeten. Vervang één regel en laat de build bij risico stoppen:

# .github/workflows/ci.yml — hardened build - run: | devshield run --profile npm \ --scripts-mode fail \ --preflight-lockfile --lockfile-mode fail \ --preflight-secrets --preflight-mode fail \ --egress-proxy --egress-mode enforce \ --audit-log devshield-audit.jsonl \ -- npm ci - run: devshield audit read --audit-log devshield-audit.jsonl # trail in the build log

Andere controlepunten: een shellalias (alias npm='devshield run … -- npm') voor transparant lokaal gebruik; een gedeeld Makefile / just doel voor het team; een ontwikkelcontainermet postCreateCommand.

Auditspoor

Een lokaal, leesbaar JSONL-auditspoor.

devshield audit read --audit-log <file> # summary of every event devshield audit trace --audit-log <file> --context-id <id> # one command + its egress

Gebeurtenissen: command_run, lifecycle_scripts, secret_preflight, lockfile_preflight, egress_observation. Alles lokaal; er wordt niets verstuurd.

Duidelijke grenzen · wat DevShield niet is

Beperking van risico’s, geen wondermiddel.

// bereik

Alleen omhulde installaties

Geen onderschepping voor het hele systeem. Een gewone npm ci is onzichtbaar. De shellalias komt het dichtst in de buurt, maar is optioneel en kan worden omzeild.

// aard

Beperking, geen integriteitscontrole

--scripts-mode stopt uitvoering en exfiltratie, maar vertelt niet of een pakket is vervangen. npm controleert de integriteit al bij installatie.

// netwerk

Host, niet inhoud

De proxy blokkeert op host:poort, zonder MITM. Hij kan een download niet onderscheiden van een publish op een toegestane host. github.com blijft standaard toegestaan.

// verwijdering

Geen bescherming van het bestandssysteem

Een postinstall die bestanden wist, wordt alleen gestopt als scripts zijn uitgeschakeld (block/fail). Netwerkcontrole helpt daar niet.

Gebruik DevShield om uw CI en afgesproken lokale werkwijze te beveiligen, samen met vaste lockfiles en herkomstcontrole van pakketten. Alleen installeren maakt niet elke werkwijze veilig.