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.
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
Modus
Effect
DEVSHIELD_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.
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.
Code
Betekenis
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.
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 eventdevshield 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.