DevShield es una herramienta de desarrollo independiente de Anankelis para comprobar instalaciones de dependencias npm y pip. Complementa la extensión del navegador Proxia; no necesita DevShield para usar Proxia.
i
DevShield es una punto de control herramienta: solo protege las instalaciones que pasan por ella. Un
npm ci ejecutado en paralelo le resulta invisible. Refuerza su CI y su recorrido local aprobado; no equivale a «instalarlo y estar protegido en cualquier situación».
Instalar
Obtenga DevShield y su guía.
Contacte con ANANKELIS o su administrador para obtener el paquete adecuado para su entorno y su guía de instalación.
DevShield ejecuta su comando, aplica los controles habilitados y (con
--audit-log) escribe un registro JSONL local. Todos los controles utilizan por defecto
warn (no destructivo); se cambia a block
o fail cuando quiera reforzar la protección.
Cada una es independiente y no destructiva por defecto. Combinadas cubren los vectores de instalación más habituales.
// 1 · ejecución
Scripts de ciclo de vida
--scripts-mode warn|block|fail
block desactiva los scripts de instalación npm (inyecta
--ignore-scripts); fail rechaza la operación (salida 21) antes de iniciarla. También controla npx / npm exec /
pnpm dlx como ejecución de código arbitrario. pip: solo advertencias.
La capa que detiene cargas del tipo Shai-Hulud / Axios.
// 2 · integridad
Estado del archivo de bloqueo
--preflight-lockfile [--lockfile-mode warn|fail]
Señala (o rechaza, salida 22) un archivo de bloqueo npm ausente o sin hash, o un comando que modifica
el archivo de bloqueo (npm install) en lugar de respetarlo (npm ci). Comprueba el estado, no las manipulaciones: npm ya verifica los hashes. pip: según las posibilidades, solo advertencias.
// 3 · secretos
Comprobación previa de secretos
--preflight-secrets [--preflight-mode warn|fail]
Informa de variables de entorno y archivos con secretos (.env,
.npmrc, .pypirc…) antes de ejecutar la instalación:
sin mostrar nunca los valores. fail → exit 20.
// 4 · red
Proxy de salida
--egress-proxy [--egress-mode warn|enforce]
Un proxy local (127.0.0.1) por el que pasa la instalación. enforce
bloquea (403) cualquier conexión a un host fuera de la lista permitida. Sin MITM: bloquea por host, nunca por contenido.
warn registra todo; si no puede enlazar el proxy en modo enforce, termina con salida 23 (cierre seguro).
Modos · scripts-mode
Modo
Efecto
DEVSHIELD_MODE
warnpredeterminado
Se ejecuta sin cambios; registra un evento lifecycle_scripts .
solo auditoría
block
Desactiva los scripts de npm (inyecta --ignore-scripts + npm_config_ignore_scripts). pip / npx: solo advertencias.
enforce
fail
Termina con 21 antes de iniciar el proceso si se fueran a ejecutar scripts. Comando desconocido: rechazo (cierre seguro).
enforce
!
Límite de cobertura:block la desactivación de scripts está verificada para npm. yarn Berry (v2+) ignora npm_config_* y no respeta --ignore-scripts; compruébelo antes de basar la protección de pnpm/yarn en ello.
Códigos de salida
Un código por rechazo, utilizable en scripts de CI.
Código
Significado
0
El proceso hijo se ejecutó; ningún control lo rechazó.
código del proceso hijo
Se transmite desde el comando envuelto.
20
--preflight-mode fail: riesgo de secreto detectado.
21
--scripts-mode fail: se ejecutarían scripts de ciclo de vida.
22
--lockfile-mode fail: riesgo en el estado del archivo de bloqueo.
23
--egress-mode enforce: el proxy no pudo iniciarse (cierre seguro).
10
check / observe egress: destino bloqueado por la política.
2
Error de uso o de argumento.
125 · 127
Error de escritura del registro de auditoría (125) · error de ejecución del comando (127).
Adopción: primero en CI
El punto de integración de mayor valor.
Es donde aterrizan los ataques a la cadena de suministro, es central y no se puede olvidar. Sustituya una línea y haga que la compilación se detenga de forma segura ante un riesgo:
# .github/workflows/ci.yml — compilación reforzada
- 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 # registro en el log de compilación
Otros puntos de integración: un alias del intérprete de comandos
(alias npm='devshield run … -- npm') para un uso local transparente; un objetivo
Makefile / just compartido para el equipo; un contenedor de desarrollode
postCreateCommand.
Registro de auditoría
Un registro JSONL local y legible.
devshield audit read --audit-log <file> # resumen de cada eventodevshield audit trace --audit-log <file> --context-id <id> # un comando y sus conexiones de salida
Eventos: command_run, lifecycle_scripts,
secret_preflight, lockfile_preflight,
egress_observation. Todo local; nada se transmite.
Con claridad: qué no es DevShield
Contención, no una varita mágica.
// alcance
Solo instalaciones que pasan por la herramienta
Sin interceptación de todo el sistema. Un npm ci resulta invisible. El alias del intérprete es lo más cercano, pero es opcional y se puede eludir.
// naturaleza
Contención, no integridad
--scripts-mode detiene la ejecución y la exfiltración; no le dirá si un paquete ha sido sustituido. npm ya verifica la integridad al instalar.
// red
Host, no contenido
El proxy bloquea por host:puerto, sin MITM. No distingue una descarga de un publish en un host permitido. github.com sigue permitido por defecto.
// destrucción
Sin defensa del sistema de archivos
Un postinstall que borra archivos solo se detiene si los scripts están desactivados (block/fail). El control de red no ayuda en este caso.
Utilice DevShield para reforzar su CI y su recorrido local aprobado, junto con la fijación de archivos de bloqueo y la procedencia de paquetes; no como una solución que «se instala y protege en cualquier situación».