-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Este repositorio contem o produto App Security Audit, uma plataforma React + FastAPI para avaliacao read-only de seguranca e performance Linux.




Resumo executivo: a ferramenta coleta evidencias de hosts Linux sem remediacao automatica, calcula scores separados de seguranca e performance, gera um score geral ponderado e produz um plano de acao priorizado. O foco e Blue Team, SRE e lideranca tecnica que precisam de baseline defensiva, capacidade operacional e recomendacoes seguras.
Suposicoes explicitas:
- MVP otimizado para Debian/Ubuntu, com deteccao segura quando comandos nao existem.
- SQLite e suficiente para ambiente local e laboratorios.
-
Auth: Usa token compartilhado configurado via arquivos
.env(os tokens do frontend e backend devem ser identicos). - UX: Interface inclui estado inicial ("Empty State") com orientacao clara para a primeira coleta.
- Agent mode existe na arquitetura, mas depende de endpoint remoto configurado.
Detalhamento adicional em product-overview.md.
Visao resumida:
- Frontend React/Vite chama a API FastAPI.
- A API autentica, registra o scan e agenda a coleta.
- O coletor executa apenas comandos whitelisted e leituras de
/etce/proc. - A engine de scoring aplica regras externas em JSON.
- A engine de recomendacoes transforma findings em plano de acao.
- SQLite guarda historico por hostname e machine-id.
- Export service produz JSON e PDF.
Threat model resumido em architecture.md.
Esquema principal documentado em data-model.md e implementado em models.py.
Contrato OpenAPI-like em api-contract.md. Rotas implementadas em scans.py.
Estrutura principal:
- App FastAPI: main.py
- Config e auth: config.py, auth.py
- Persistencia: session.py, models.py
- Coletor read-only: linux.py
- Parsing, scoring e recomendacoes: parser.py, scoring.py, recommendations.py
- Orquestracao: scan_service.py (usa context manager
get_dbpara segurança de sessão) - Regras externas: rules.json
| Variável | Padrão | Descrição |
|---|---|---|
APPSEC_API_TOKEN |
changeme-token |
Token de autenticação da API (deve ser igual ao do frontend) |
APPSEC_DATABASE_URL |
sqlite:///./app_security_audit.db |
URL do banco de dados |
APPSEC_EXPORT_DIR |
./exports |
Diretório de exportações |
APPSEC_HOST_FS_PREFIX |
(vazio) | Prefixo do sistema de arquivos do host (ex: /host no Docker) |
APPSEC_CORS_ORIGINS |
["http://localhost:5173"] |
Origens permitidas CORS |
APPSEC_DEV_RECREATE_DB |
false |
Recriar banco automaticamente (só dev) |
Important
Utilize o arquivo .env na raiz do projeto para configurar essas variáveis de forma centralizada ao usar Docker Compose.
cd app/backend
python3.11 -m venv .venv
source .venv/bin/activate
pip install -e .[dev]
export APPSEC_API_TOKEN=changeme-token
uvicorn app.main:app --reloadMigracao local rapida:
- O startup aplica uma migracao SQLite leve para adicionar colunas novas conhecidas, como
recommendations.metadata. - Para recriar o banco automaticamente em desenvolvimento, use
APPSEC_DEV_RECREATE_DB=true. - Exemplo:
export APPSEC_DEV_RECREATE_DB=true
uvicorn app.main:app --reloadEstrutura principal:
- Shell e rotas: App.jsx
- Estado e API client: useAuditData.js, api.js
- Paginas: OverviewPage.jsx, SecurityPage.jsx, PerformancePage.jsx, RecommendationsPage.jsx, HistoryPage.jsx
- Componentes: ScoreCards.jsx, FindingsTable.jsx, RecommendationList.jsx, ExportPanel.jsx
- Estilo responsivo: app.css
Setup local do frontend:
cd app/frontend
npm install
cp .env.example .env # Configure VITE_API_TOKEN aqui
npm run devNote
No ambiente frontend, as variáveis VITE_ são fixadas durante o processo de build.
Todos os testes de backend usam mocks para banco de dados (SQLite), garantindo execucao isolada sem dependência de arquivo .db.
Backend (208 testes com mock):
cd app/backend
source .venv/bin/activate
python -m pytest tests/ -vFrontend:
cd app/frontend
npm testArquivos de teste:
-
conftest.py — fixture global que mocka
init_db - test_parser.py
- test_scoring.py
- ScoreCards.test.jsx
- FindingsTable.test.jsx
Para que a auditoria funcione com acesso completo ao host Linux (leitura de /etc/sudoers, regras de firewall, etc.), dois modos estão disponíveis:
O docker-compose.yml já está configurado com:
-
privileged: true— acesso completo ao kernel do host -
network_mode: "host"epid: "host"— enxerga processos e rede do host -
/:/host:ro— sistema de arquivos do host montado em somente leitura -
APPSEC_HOST_FS_PREFIX=/host— o backend lê arquivos sob/host/etc/...e executa comandos viachroot /host
# Subir toda a stack com auditoria completa do host
docker compose up --build
# Backend disponível em http://localhost:8001 | Frontend em http://localhost:8080
⚠️ Atenção: o modo Docker privilegiado concede acesso amplo ao host. Use apenas em ambientes controlados.
O script install_systemd.sh instala o backend como serviço systemd rodando como root diretamente no host. Neste modo o APPSEC_HOST_FS_PREFIX não é necessário pois o processo já tem acesso root nativo.
cd app/backend
./install_systemd.sh
# Backend disponível em http://localhost:8001
# Verificar status
sudo systemctl status appsec-backend.service
# Ver logs em tempo real
sudo journalctl -u appsec-backend.service -fPara desenvolvimento e testes unitários, sem acesso root (auditoria limitada ao próprio processo):
cd app/backend
python3.11 -m venv .venv
source .venv/bin/activate
pip install -e .[dev]
export APPSEC_API_TOKEN=changeme-token
uvicorn app.main:app --reloadMigracao local rapida:
- O startup aplica uma migracao SQLite leve para adicionar colunas novas conhecidas, como
recommendations.metadata. - Para recriar o banco automaticamente em desenvolvimento, use
APPSEC_DEV_RECREATE_DB=true.
export APPSEC_DEV_RECREATE_DB=true
uvicorn app.main:app --reloadArquivos de infraestrutura:
- Compose: docker-compose.yml
- Script Systemd: install_systemd.sh
- Backend image: Dockerfile
- Frontend image: Dockerfile
Contribuicao:
- Crie branch curta e mantenha regras/thresholds em rules.json.
- Nao adicione comandos destrutivos nem shell interpolation no coletor.
- Todo novo check precisa de teste de parsing ou scoring.
- Documente a justificativa da coleta em collection-commands.md.
- Trocar
APPSEC_API_TOKENpor segredo real. - Restringir
APPSEC_CORS_ORIGINSaos dominos finais. - Validar agentless em host Linux de referencia sem root.
- Revisar impacto de
finde ajustar escopo por ambiente. - Criar backup/rotacao do SQLite e diretio de exports.
- Adicionar observabilidade externa para logs JSON.
- Validar PDF/JSON export com politicas internas.
- Executar smoke tests do frontend e API antes de publicar.
- Desativar
APPSEC_DEV_RECREATE_DBfora de ambiente local.
- Produto: product-overview.md
- Arquitetura: architecture.md
- Modelo de dados: data-model.md
- Backlog e roadmap: backlog-roadmap.md
- API: api-contract.md
- Comandos de coleta: collection-commands.md