剣 KENSAI
Estudo de caso

Da classificação Grau B para a classificação Grau A:
como corrigimos a conformidade NIS2 em 30 minutos

Verificamos nossos próprios sites com KENSAI e encontramos lacunas críticas de conformidade com NIS2. A falta dos cabeçalhos de segurança HTTP trouxe dois de nossos três domínios para a Classe B (0.786). Aqui está exatamente o que estava errado, quais artigos NIS2 estavam em risco e como os minutos de configuração do Caddy 30 consertaram tudo.

📅 Março 16, 2026 ⏱ 6 leitura mínima 🏷 NIS2 · Conformidade · Estudo de caso · Caddy

A verdade desconfortável

Construímos uma plataforma de verificação de segurança. Pregamos a conformidade com NIS2 aos nossos clientes. E então executamos KENSAI em nossos próprios domínios – e descobrimos que dois em cada três não eram compatíveis.

Sem vulnerabilidades, sem violações. Faltam apenas os cabeçalhos de segurança HTTP – o tipo de lacuna silenciosa que os reguladores verificam primeiro e os invasores exploram depois. De acordo com a Diretiva NIS2 (Art. 21, §2), esses cabeçalhos não são opcionais para entidades regulamentadas. Eles são um requisito básico de higiene.

Aqui está o que encontramos e com que rapidez o corrigimos.


Os resultados da verificação

Executamos a verificação automatizada de conformidade NIS2 do KENSAI em todos os três domínios do portfólio em março 15, 2026:

kensai.app
UM
0.997 / 1.000
Pontuação NIS2
brnz.ai
B
0.786 / 1.000
Pontuação NIS2
codeforceai. com
B
0.786 / 1.000
Pontuação NIS2

kensai.app obteve pontuação quase perfeita em 0.997 porque já estava executando a configuração correta do cabeçalho Caddy. Os outros dois domínios - brnz.ai e codeforceai. com – ambos estavam em 0.786, cada um sem os mesmos seis cabeçalhos críticos de segurança.


O que estava faltando – e por que isso é importante para NIS2

Seis cabeçalhos de resposta HTTP estavam ausentes em ambos os domínios com falha. Cada um mapeia diretamente aos requisitos da Diretiva NIS2:

Cabeçalho ausente Propósito Referência NIS2 Status
Strict-Transport-Security Força HTTPS, evita ataques de downgrade de protocolo Arte. 21(2)(h) — Comunicações seguras ✗FALTA
Content-Security-Policy Bloqueia XSS, injeção de código, exfiltração de dados Arte. 21(2)(d) — Segurança da cadeia de suprimentos ✗FALTA
X-Frame-Options Evita ataques de clickjacking/reparação de UI Arte. 21(2)(b) — Prevenção de incidentes ✗FALTA
X-Content-Type-Options Impede ataques de detecção de MIME Arte. 21(2)(b) — Higiene cibernética básica ✗FALTA
Referrer-Policy Controla o vazamento de dados de referência para terceiros Arte. 21(2)(e) — Políticas de segurança de dados ✗FALTA
Permissions-Policy Restringe o acesso do navegador API (câmera, microfone, geolocalização) Arte. 25 — Segurança desde o projeto ✗FALTA
Implicação NIS2: Nos termos do artigo 21 (2), as entidades regulamentadas devem implementar "medidas técnicas e organizacionais adequadas e proporcionais". A falta de HSTS significa que conexões não criptografadas são possíveis. A falta de CSP significa que os ataques XSS podem exfiltrar dados. As autoridades nacionais competentes tratam estes factos como prova de segurança de base inadequada.
Que arte. 21 e Art. 25 requer: Arte. 21 exige medidas de gerenciamento de risco, incluindo políticas de segurança de rede e controle de acesso. Arte. 25 introduz “segurança desde o projeto” – o que significa que os controles de segurança devem ser implementados de forma proativa, não reativa. Os cabeçalhos de segurança HTTP ausentes falham em ambos os requisitos.

A correção: configuração do cabeçalho Caddy

Nós usamos Caddie como nosso proxy reverso. A correção foi um único e reutilizável header bloco que poderíamos aplicar a todos os domínios. Aqui está exatamente o que adicionamos:

# Global header snippet — add to all production sites
(security_headers) {
  header {
    # Force HTTPS — NIS2 Art. 21(2)(h): secure communications
    Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

    # Block XSS & injection — NIS2 Art. 21(2)(d): supply chain security
    Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://fonts.googleapis.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data: https:; connect-src 'self' https:; frame-ancestors 'none'"

    # Prevent clickjacking — NIS2 Art. 21(2)(b)
    X-Frame-Options "DENY"

    # Stop MIME-sniffing — NIS2 Art. 21(2)(b)
    X-Content-Type-Options "nosniff"

    # Limit referrer leakage — NIS2 Art. 21(2)(e)
    Referrer-Policy "strict-origin-when-cross-origin"

    # Restrict browser APIs — NIS2 Art. 25: security by design
    Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=(), usb=(), interest-cohort=()"

    # Remove server fingerprinting
    -Server
    -X-Powered-By
  }
}

Em seguida, importamos o snippet para cada bloco do site:

# brnz.ai
brnz.ai, www.brnz.ai {
  import security_headers
  reverse_proxy localhost:3001
}

# codeforceai.com
codeforceai.com, www.codeforceai.com {
  import security_headers
  reverse_proxy localhost:3002
}

Recarregue o Caddy, verifique os cabeçalhos no DevTools do navegador, pronto:

caddy reload --config /etc/caddy/Caddyfile

A linha do tempo: 30 minutos do início ao fim

T+0:00
Varredura KENSAI iniciada em todos os três domínios
Avaliação de conformidade NIS2 automatizada enfileirada e em execução.
T+0:04
Resultados da verificação em – dois domínios sinalizados como Grau B
brnz.ai e codeforceai.com pontuaram 0.786 cada. Seis cabeçalhos ausentes identificados por domínio.
T+0:07
Análise de causa raiz
kensai.app já tinha o bloco de cabeçalho. brnz.ai e codeforceai.com estavam totalmente ausentes.
T+0:15
Configuração do Caddy atualizada
Adicionado o snippet (security_headers) e importado para ambos os blocos de sites. Comprometido com o git.
T+0:17
Caddy recarregado – tempo de inatividade zero
caddy reload aplicou novos cabeçalhos instantaneamente. Não é necessário reiniciar.
T+0:22
Verificação via curl
Todos os seis cabeçalhos confirmados estão presentes na resposta HTTP. Não foram observadas regressões.
T+0:29
Nova varredura concluída – Grau A confirmado
Ambos os domínios agora pontuam 0.997. Conformidade com NIS2 restaurada. Post-mortem documentado.

Antes x Depois

⚠ Antes
B
Pontuação: 0.786 / 1.000
  • HSTS ausente
  • CSP ausente
  • Opções de quadro X ausentes
  • Opções de tipo de conteúdo X ausentes
  • Política de referência ausente
  • Política de permissões ausente
✓ Depois
UM
Pontuação: 0.997 / 1.000
  • HSTS com pré-carga
  • Injeções de bloqueio de CSP
  • Opções de quadro X: NEGAR
  • Opções de tipo de conteúdo X: nosniff
  • Política de referência: origem estrita
  • Política de permissões: bloqueada
Resultado: Tanto brnz.ai quanto codeforceai.com passaram do Grau B (0.786) para o Grau A (0.997) em menos de 30 minutos. A única mudança: seis cabeçalhos HTTP adicionados por meio da configuração do Caddy. Sem alterações de código, sem implantações, sem tempo de inatividade.

Lições principais

1. Os cabeçalhos de segurança são itens de conformidade NIS2, não extras opcionais

Espera-se que cada entidade regulamentada por NIS2 tenha cabeçalhos de segurança básicos HTTP em vigor. Os reguladores realizam cada vez mais verificações automatizadas durante as auditorias. Uma falta Strict-Transport-Security cabeçalho não é uma omissão menor - é evidência de gestão de risco inadequada nos termos do Art. 21(2).

2. Até as empresas de segurança têm lacunas

Construímos ferramentas de compliance e ainda tínhamos dois sites de grau B. Isso não é constrangedor – é um lembrete de que ocorrem desvios de configuração. Um domínio iniciado rapidamente, um Caddyfile que não foi sincronizado, uma importação ausente. A verificação automatizada detecta o que as auditorias manuais deixam passar.

3. A correção quase sempre é simples

Seis cabeçalhos faltando. Trinta linhas de configuração Caddy. Trinta minutos de trabalho. A diferença entre a nota B e a nota A não é um projeto de um mês – é uma tarde. A parte difícil é saber que a lacuna existe em primeiro lugar.

4. Snippets reutilizáveis ​​evitam desvios futuros

Ao extrair os cabeçalhos em um (security_headers) snippet, qualquer novo domínio que adicionarmos obtém automaticamente cobertura completa do cabeçalho NIS2, incluindo um único import linha. A conformidade torna-se o padrão, não uma reflexão tardia.


O que isso significa para sua organização

Se você estiver sob NIS2 – ou se preparando para uma auditoria – seus cabeçalhos de segurança HTTP são uma das primeiras coisas que os reguladores verificam. Eles são rápidos de verificar, inequívocos de avaliar e fáceis de corrigir. Não há desculpa para uma nota B quando uma nota A leva 30 minutos.

Execute a verificação. Leia o relatório. Corrija o que está sinalizado. Digitalize novamente para confirmar.

Verifique a conformidade do NIS2 – Gratuito

Execute a mesma verificação que executamos em nossos próprios domínios. Obtenha seu grau de conformidade NIS2, veja exatamente quais cabeçalhos estão faltando e obtenha um relatório de correção no qual você pode agir imediatamente.

Inicie a verificação gratuita do NIS2 →

🛡️ O seu site é seguro?

Descubra vulnerabilidades antes que os invasores o façam.

Digitalize seu site gratuitamente →

Artigos relacionados

Briefing de segurança de 2 de março: gangues de ransomware miram organizações Atualização regulatória de março de 2026: NIS2 Diretiva de emergência CISA no Cisco SD-WAN