Miguel-DevOps/passive-sentry
GitHub: Miguel-DevOps/passive-sentry
一款被动 OSINT 安全审计框架,基于确定性风险评分与标准化报告,帮助组织合规评估外部攻击面。
Stars: 1 | Forks: 0
```html
# PassiveSentry
PassiveSentry es un marco de auditoría pasiva (solo OSINT) alineado con OWASP Top 10:2025 (A01-A10), con informes deterministas para audiencias ejecutivas y técnicas.
## Estado Actual
- Línea base de ejecución: Python 3.14+
- Administrador de paquetes: uv con archivo de bloqueo determinista (uv.lock)
- Modelo de seguridad: 100% recolección pasiva
- Alcance OWASP: A01-A10 mapeado con heurísticas pasivas
- Última verificación: 2026-04-06
- Resultado de pruebas: 40/40 aprobadas
Comando válido:
```
uv run --python 3.14 pytest -q
```
## Características Principales
- Auditoría de un solo dominio mediante CLI
- Procesamiento por lotes multi-dominio
- Orquestación modular canónica de OWASP A01-A10
- Puntuación de riesgo determinista y normalización de hallazgos
- Generación de informes JSON
- Generación de informes PDF (carga diferida, se requieren dependencias nativas en el momento de la generación)
- Panel de control Streamlit para exploración de resultados
- Flujos de trabajo de Docker y Docker Compose
## Registro y Comportamiento de Salida
PassiveSentry se ejecuta con mínima interferencia:
- **404 esperados (suprimidos)**: Las respuestas HTTP 404 para recursos opcionales (robots.txt, sitemap.xml, security.txt, etc.) se registran en nivel DEBUG para evitar spam de advertencias.
- **Registros de bibliotecas externas suprimidos**: Bibliotecas de terceros (fontTools, Pillow, urllib3, etc.) se silencian para mantener la salida enfocada en los resultados de PassiveSentry.
- **Modo detallado** (`--verbose`): Pase la marca para habilitar el registro DEBUG si es necesario para solución de problemas.
## Aplicación Estrictamente Pasiva
PassiveSentry es intencionalmente no intrusivo:
- Sin explotación
- Sin fuerza bruta
- Sin fuzzing
- Sin inyección de payload activa
- Sin pruebas de aplicaciones internas autenticadas
La recolección HTTP se limita a métodos seguros (GET/HEAD/OPTIONS). Los resultados se basan en artefactos observables públicamente.
## Cobertura OWASP (Top 10:2025)
Implementado en [src/passivesentry/modules/owasp_top10_2025.py](src/passivesentry/modules/owasp_top10_2025.py):
- A01 Acceso Roto
- A02 Malconfiguración de Seguridad
- A03 Fallos en la Cadena de Suministro de Software
- A04 Fallos Criptográficos
- A05 Inyección
- A06 Diseño Inseguro
- A07 Fallos de Autenticación
- A08 Fallos de Integridad del Software o los Datos
- A09 Fallos en el Registro de Seguridad y Alertas
- A10 Manejo Inadecuado de Condiciones Excepcionales
Notas de cobertura:
- Todas las categorías están representadas y ejecutadas en auditorías completas.
- La profundidad es intencionalmente pasiva; algunas categorías solo proporcionan indicadores de confianza.
- A09 se modela a partir de datos DNS y telemetría externamente visibles, por lo que debe tratarse como evidencia indirecta.
## Modelo de Informe Determinista
Fuente de verdad canónica:
- Campo: risk_analysis.normalized_findings
- Productor: [src/passivesentry/reporting/risk_scoring.py](src/passivesentry/reporting/risk_scoring.py)
La normalización garantiza:
- Eliminación de duplicados por categoría + texto
- El de mayor severidad gana para duplicados
- Orden estable para resultados reproducibles
- Frase en inglés normalizada para variantes de hallazgos heredados
## Rutas de Salida y Garantías de Procesamiento de Dominios
El directorio de salida predeterminado para flujos de trabajo único y por lotes es ahora `results`.
Salida de auditoría de un solo dominio:
- Informe JSON en results
- Resumen de texto opcional
- PDFs opcionales
Salida por lotes:
- Un subdirectorio por dominio de entrada
- audit_results.json por dominio
- PDFs técnicos y ejecutivos por dominio opcionales
- Resumen por lotes JSON y registro de ejecución en el directorio raíz de salida
Garantía de procesamiento de dominio:
- Cada línea no vacía y que no sea comentario en el archivo de entrada se procesa.
- El resumen por lotes incluye total_domains, succeeded, failed y estado por dominio.
- Los dominios inválidos se cuentan como fallos procesados (no se omiten silenciamente).
## Requisitos
- Python >= 3.14
- uv como resolución y ejecutor admitidos
- uv.lock confirmado para instalaciones reproducibles
- Docker opcional
### Requisitos nativos para generación de PDF
La salida PDF depende de bibliotecas nativas de WeasyPrint. En entornos Debian/Ubuntu, instale:
```
sudo apt-get update
sudo apt-get install -y libcairo2 libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf-2.0-0 libffi8 shared-mime-info fonts-dejavu
```
Si estas bibliotecas no están disponibles, ejecute el modo por lotes sin artefactos PDF:
```
uv run --python 3.14 passivesentry batch --input domains.txt --no-pdf --no-summary
```
Comportamiento de ejecución por lotes:
- Al iniciar, el modo por lotes verifica la capacidad de tiempo de ejecución de PDF.
- La verificación es silenciosa y no importa WeasyPrint directamente (para evitar ruido al inicio).
- Si faltan dependencias, la advertencia incluye los componentes faltantes exactos.
- Si faltan dependencias nativas de WeasyPrint, los artefactos PDF se desactivan automáticamente.
- El procesamiento de dominio continúa en modo solo JSON en lugar de fallar el lote.
- Se registra una advertencia para que los operadores puedan habilitar el soporte de PDF más adelante sin perder cobertura de ejecución.
## Indicadores de Calidad del Sitio
Además de la evaluación de vulnerabilidades OWASP Top 10:2025, PassiveSentry evalúa **Indicadores de Calidad del Sitio** que reflejan madurez operativa y prácticas de seguridad conscientes:
- `robots.txt` - Directivas de rastreo (SEO, manejo de contenido público/privado)
- `sitemap.xml` - Declaración de estructura del sitio (rastreabilidad)
- `security.txt` - Política de divulgación de vulnerabilidades (RFC 9110 compliant)
- `llms.txt` - Directivas de entrenamiento de LLM/IA (gobernanza de datos)
- `ai.json` - Configuración de comportamiento de bots de IA (estándar emergente)
- `dnt-policy.txt` - Política de No Seguir (privacidad)
### Cómo Aparecen en los Informes
**Resumen Ejecutivo PDF:**
- Listado de presencia/ausencia conciso
- Recomendaciones de alto nivel para cada indicador
**Informe Técnico PDF Completo:**
- Evaluación detallada por dominio
- Para cada **indicador presente**: URL, tamaño y orientación dirigida
- Para cada **indicador ausente**: propósito, pasos de implementación y ranking de prioridad
- Lista de priorización para gu el orden de remediación
**Salida JSON (`audit_results.json`):**
```
"site_quality_indicators": {
"present": {
"sitemap.xml (site structure)": {
"url": "https://example.com/sitemap.xml",
"status_code": 200,
"size_bytes": 1524
}
},
"absent": [
"robots.txt (crawler directives)",
"security.txt (security policy)"
]
}
```
### Personalización
Los Indicadores de Calidad del Sitio son **totalmente personalizables** para los estándares de su organización:
- Agregar/eliminar recursos a verificar (por ejemplo, archivos de cumplimiento de la industria, puntos de conexión personalizados)
- Modificar texto de recomendación por indicador
- Ajustar rankings de prioridad
- Agregar asignaciones de marcos de cumplimiento
Consulte [`docs/customizing_reports.md`](docs/customizing_reports.md) para instrucciones detalladas sobre:
- Dónde editar plantillas
- Cómo agregar recursos o campos personalizados
- Mapeo a los estándares de cumplimiento de su organización
- Ejemplos de integración de automatización y CI/CD
## Instalación
Instale dependencias de ejecución bloqueadas:
```
uv sync --frozen
```
Instale dependencias de desarrollo:
```
uv sync --dev
```
Actualice el archivo de bloqueo después de cambios en dependencias:
```
uv lock --python 3.14
```
## Uso de CLI
Ayuda:
```
uv run --python 3.14 passivesentry --help
```
Auditoría completa (A01-A10):
```
uv run --python 3.14 passivesentry audit example.com
```
Auditoría específica:
```
uv run --python 3.14 passivesentry audit example.com -m security_misconfiguration -m cryptographic_failures
```
Por lotes (la salida predeterminada es results):
```
uv run --python 3.14 passivesentry batch --input domains.txt
```
Por lotes con salida explícita:
```
uv run --python 3.14 passivesentry batch --input domains.txt --output results
```
## Panel de Control Streamlit
Ejecute:
```
streamlit run scripts/streamlit_dashboard.py
```
El directorio de entrada predeterminado del panel de control es `results`.
## Docker
Construir imagen:
```
docker build -t passivesentry:latest .
```
Ejecutar auditoría única:
```
docker run --rm passivesentry:latest passivesentry audit example.com
```
Ejecutar por lotes y persistir salida en results:
```
docker run --rm \
-v $(pwd)/results:/app/results \
-v $(pwd)/domains.txt:/app/domains.txt:ro \
passivesentry:latest \
passivesentry batch --input domains.txt --output results
```
Ejecutar panel de control:
```
docker run --rm -p 8501:8501 \
-v $(pwd)/results:/app/results \
passivesentry:latest \
streamlit run scripts/streamlit_dashboard.py --server.address=0.0.0.0 --server.port=8501
```
Compuesto:
```
docker compose up --build
```
## Pruebas
Suite completa:
```
uv run --python 3.14 pytest -q
```
Comprobaciones de comportamiento por lotes y salida:
```
uv run --python 3.14 pytest -q tests/e2e/test_batch_cli.py tests/unit/test_batch_processing.py
```
## Estructura del Repositorio
```
src/passivesentry/
core.py
cli.py
batch.py
modules/
owasp_top10_2025.py
security_misconfiguration.py
software_supply_chain.py
cryptographic_failures.py
security_logging.py
reporting/
risk_scoring.py
json_reporter.py
pdf_reporter.py
templates/
executive_summary.html
full_technical_report.html
scripts/
batch_processing.py
streamlit_dashboard.py
tests/
unit/
e2e/
docs/
```
## Documentación
- [docs/architecture.md](docs/architecture.md)
- [docs/technical_decisions.md](docs/technical_decisions.md)
- [docs/owasp_coverage.md](docs/owasp_coverage.md)
## Propiedad y Contacto
El núcleo y los módulos de PassiveSentry son propietarios. Para acceso comercial, contacte a [miguel@developmi.com](mailto:miguel@developmi.com).
Autor: Miguel Lozano | Developmi
- GitHub: [Miguel-DevOps](https://github.com/Miguel-DevOps)
- Sitio web: [developmi.com](https://developmi.com/)
- LinkedIn: [Miguel DevOps](https://www.linkedin.com/in/miguel-dev-ops/)
```
# PassiveSentry
PassiveSentry es un marco de auditoría pasiva (solo OSINT) alineado con OWASP Top 10:2025 (A01-A10), con informes deterministas para audiencias ejecutivas y técnicas.
标签:Docker, Docker Compose, ESC4, HTTP GET HEAD OPTIONS, JSON报告, Kubernetes, OSINT, OWASP A01, OWASP A02, OWASP A03, OWASP A04, OWASP A05, OWASP A06, OWASP A07, OWASP A08, OWASP A09, OWASP A10, OWASP Top 10, PDF报告, Python 3.14, Streamlit仪表板, uv, Web安全审计, 公开可观测资产, 单域审计, 多域审计, 安全审计框架, 安全防御评估, 批量处理, 无利用, 无暴力破解, 无模糊测试, 日志降噪, 确定性锁文件, 确定性风险评分, 被动安全审计, 被动收集, 请求拦截, 调试模式, 逆向工具, 非侵入式安全, 风险评分