← Voltar aos artigos

Paper Files / AppSec

Engenharia de Segurança de Aplicações Orientada a Ameaças: Integração de Modelagem de Ameaças, SDL e Validação Empírica com IDS/IPS

AppSecPT

Este trabalho apresenta uma engenharia de segurança de aplicações explicitamente orientada a ameaças, adequada ao estado da prática e da arte até 2006, integrando modelagem de ameaças baseada em STRIDE, atividades do Security Development Lifecycle (SDL), testes dinâmicos e fuzzing clássicos, e validação empírica com IDS/IPS e correlação de eventos via syslog. Partimos da constatação, documentada na literatura e em incidentes amplamente divulgados entre 1999 e 2005, de que vulnerabilidades como injeção de SQL e Cross-Site Scripting (XSS) permanecem dominantes em ambientes corporativos e governamentais, apesar de décadas de orientação de boas práticas (OWASP Guide 2005; NIST SP 800-30, SP 800-61). Propomos uma formulação quantitativa de risco baseada em probabilidade de exploração e impacto, alinhada ao CVSS v1 (2005), e apresentamos um processo em cinco fases: (1) modelagem de ameaças com STRIDE e árvores de ataque; (2) integração ao SDL com revisões arquiteturais, padrões de codificação, e uso de análise estática (ITS4/RATS, Splint, FindBugs, PMD) em ganchos de submissão e builds noturnos com CruiseControl/Ant; (3) testes dinâmicos e fuzzing com WebScarab/Paros, Nikto e SPIKE, medindo cobertura com gcov; (4) priorização de correções via combinação de CVSS e fatores de explorabilidade observados (existência de código de exploração público e detectabilidade em IDS); (5) validação ofensiva controlada com Nmap, Nessus e Metasploit 2.x, correlacionada a alertas do Snort e integridade de host (Tripwire/OSSEC). Implementamos e avaliamos a abordagem em um sistema web corporativo de três camadas (Apache 2.x, JBoss 4.x, PostgreSQL 8.x), protegido por firewall perimetral (Check Point/iptables) e IDS de rede (Snort 2.4), ao longo de 180 dias. Nossos resultados mostram reduções substanciais na reincidência de injeção de SQL, diminuição do tempo médio de correção (MTTR) e elevação da cobertura efetiva de detecção sem aumento intolerável de falsos positivos. A análise estatística indica correlação forte entre cobertura de testes (DAST + fuzzing) e redução de falhas críticas. Apresentamos ainda um estudo de caso detalhado de injeção de SQL autenticada, com demonstração de exploração e remediação (substituição por consultas parametrizadas e regras ModSecurity), complementado por regras Snort específicas. Discutimos limitações (custos operacionais, maturidade de processo) e ameças à validade, e situamos nossa contribuição frente à literatura clássica (McGraw, Howard & Lipner, OWASP, NIST). O trabalho provê um arcabouço replicável, compatível com práticas e ferramentas disponíveis até 2006, com fundamentação formal, documentação operacional e evidências empíricas.

  1. Introduction

A segurança de aplicações web consolidou-se, entre o final da década de 1990 e meados da década de 2000, como vetor primário de risco em organizações conectadas à Internet. Incidentes como Code Red (2001) e SQL Slammer (2003) ilustraram a eficácia de explorações automatizadas e a velocidade de propagação em redes amplamente expostas (ANDERSON, 2001). Em paralelo, a prevalência de vulnerabilidades como injeção de SQL e Cross-Site Scripting (XSS) em aplicações corporativas de três camadas foi reiterada por guias práticos e estudos técnicos (OWASP, 2005; CERT/CC, 2000; VIEGA; MCGRAW, 2001; MCGRAW, 2006). Nesse cenário, abordagens puramente reativas — testes de intrusão pontuais próximos ao go‑live — mostraram-se insuficientes para conter riscos sistêmicos.

Sustentamos que, em 2006, uma engenharia de segurança eficaz deve ser intrinsecamente orientada a ameaças, incorporando desde a concepção atividades de análise arquitetural e de requisitos, apoiada por práticas sistemáticas de desenvolvimento seguro e validação empírica apoiada por ferramentas robustas disponíveis à época. Esse enfoque não demanda tecnologias emergentes posteriores; antes, apoia-se em um corpo consolidado: o Security Development Lifecycle (SDL), com ênfase em modelagem de ameaças STRIDE (HOWARD; LIPNER, 2006), princípios de projeto seguro (SALTZER; SCHROEDER, 1974), verificação estática (CHESS; MCGRAW, 2004), testes dinâmicos orientados a falhas (MILLER; FREDRIKSEN; SO, 1990) e monitoramento intrusivo (ROESCH, 1999; PAXSON, 1999).

Do ponto de vista operacional, ferramentas como Nmap (LYON, 1997), Nessus (TENABLE, 2005), Snort (ROESCH, 1999), Bro (PAXSON, 1999), ModSecurity (2006), WebScarab/Paros (OWASP, 2005), Nikto (SULLO, 2001), RATS/Splint/FindBugs/PMD (CHESS; MCGRAW, 2004; FINDBUGS, 2004; PMD, 2003) e Metasploit 2.x (MOORE, 2004) permitem operacionalizar o ciclo de prevenção, detecção e resposta. Padrões criptográficos estabelecidos (RSA, AES) e infraestruturas de chaves públicas baseadas em X.509/TLS (RFC 3280; RFC 2246) aprimoram a superfície de exposição na camada de transporte, embora não previnam falhas lógicas na aplicação.

Propomos, portanto, uma abordagem integrada que: (i) formaliza o risco como valor esperado de perda, em linha com NIST SP 800-30 (STONEBURNER; GOGUEN; FERINgA, 2002) e com o CVSS v1 (FIRST, 2005); (ii) estrutura a modelagem de ameaças com STRIDE e árvores de ataque (SCHNEIER, 1999); (iii) une verificação estática em estágios de submissão e builds noturnos, com testes dinâmicos e fuzzing clásicos; e (iv) valida continuamente com IDS/IPS e correlação simples via syslog, Tripwire/OSSEC e revisão pericial de incidentes (NIST SP 800-61, 2004).

Nossos objetivos são: construir um fluxo replicável com ferramentas e práticas disponíveis até 2006; apresentar uma formulação de priorização de remediações baseada em métricas observáveis; e demonstrar, empiricamente, ganhos concretos em métricas operacionais como MTTR e reincidência de vulnerabilidades críticas. Adotamos uma aplicação corporativa web de três camadas como objeto de estudo, com avaliação longitudinal de 180 dias, e apresentamos um estudo de caso detalhado de exploração e mitigação de injeção de SQL autenticada.

  1. Background and Related Work

A literatura clássica estabeleceu fundamentos sólidos para segurança de software. Viega e McGraw (2001) sistematizaram princípios de construção de software seguro; McGraw (2006) propôs o framework de “touchpoints” para inserir segurança no ciclo de desenvolvimento; Howard e LeBlanc (2003) forneceram diretrizes práticas de codificação segura no ecossistema Microsoft, posteriormente consolidadas no SDL (HOWARD; LIPNER, 2006). Tais abordagens enfatizam que segurança é atributo de qualidade que deve permear requisitos, arquitetura, implementação e verificação.

No âmbito de ameaças a aplicações web, o OWASP Guide v2.0 (2005) e o OWASP Testing Guide v1.1 (2004) documentaram classes recorrentes de vulnerabilidades, metodologias de teste e contramedidas. Em particular, a injeção de SQL foi caracterizada no início dos anos 2000 como falha de validação/escape de dados (OWASP, 2005), e XSS foi documentado pelo CERT/CC em 2000 (CERT/CC, 2000). O emprego de WAFs como o ModSecurity, a partir de 2002-2006, foi recomendado para mitigações compensatórias em camadas (OWASP, 2005).

Na análise estática, Chess e McGraw (2004) discutiram limitações e potenciais em termos de precisão, escalabilidade e cobertura. Ferramentas como ITS4/RATS (2002), Splint (2002-2006), Flawfinder (2001), PMD (2003) e FindBugs (2004) foram relatadas como eficazes para identificar padrões de erro e más práticas em C/C++ e Java, embora com taxas relevantes de falsos positivos e necessidade de contexto de negócio (CHESS; MCGRAW, 2004).

Testes dinâmicos e fuzzing possuem longo histórico, com Miller et al. (1990) introduzindo fuzzing para utilitários UNIX e Dave Aitel promovendo SPIKE para fuzzing de protocolos (2001-2002). Ferramentas como Paros Proxy e WebScarab viabilizaram testes interativos de aplicações web, enquanto Nikto sistematizou varreduras de exposição de servidores (SULLO, 2001; OWASP, 2005). No plano de rede, Nmap (LYON, 1997) e Nessus (TENAbLE, 2005) consolidaram-se como padrão para descoberta e avaliação de vulnerabilidades.

A detecção e correlação de eventos apoiaram-se em IDS de rede (Snort, Bro) e de host (Tripwire; OSSEC), com integração via syslog e correlação leve (ROESCH, 1999; PAXSON, 1999; KIM; SPAFFORD, 1994; CID, 2005). Guias do NIST (SP 800-30; SP 800-40; SP 800-61) complementaram com processos de gestão de risco, correção e resposta a incidentes (STONEBURNER; GOGUEN; FERINgA, 2002; NIST, 2005; NIST, 2004).

Por fim, a quantificação de risco fundamentada em probabilidade e impacto é recomendada por NIST SP 800-30, enquanto o CVSS v1 (2005) oferece uma taxonomia e um escore base para priorização técnica (FIRST, 2005). Nesta pesquisa, combinamos tais fundamentos com uma engenharia operacional que, até 2006, já era viável e reprodutível em ambientes corporativos.

  1. Threat Model and Problem Formalization

Consideramos uma aplicação web corporativa de três camadas $S = {s_{\text{web}}, s_{\text{app}}, s_{\text{db}}}$, exposta via HTTP/HTTPS, mediada por um firewall perimetral e monitorada por um IDS de rede. Assumimos autenticação baseada em sessão e TLS 1.0 no front-end (RFC 2246, 1999), com PKI X.509 conforme RFC 3280 (2002).

O adversário $A$ possui capacidades e restrições coerentes com o cenário de 2006:

Modelamos o risco anual esperado $R$ como: $$ R = \sum_{a \in \mathcal{A}} w(a) \sum_{v \in V(a)} P(v \mid a)\cdot I(v \mid a), $$ onde $a$ indexa ativos (por exemplo, $s_{\text{web}}, s_{\text{app}}, s_{\text{db}}$), $w(a)$ é o valor relativo do ativo (normalizado tal que $\sum_a w(a)=1$), $P(v\mid a)$ é a probabilidade anual de exploração bem-sucedida de $v$ em $a$, e $I(v\mid a)$ é o impacto (financeiro/operacional) condicionado a $v$ e $a$ (STONEBURNER; GOGUEN; FERINgA, 2002).

Para operacionalizar $P$ e $I$, associamos a cada vulnerabilidade $v$:

Definimos, então, uma probabilidade relativa de exploração: $$ P(v \mid a) = \min\left{1,\ \alpha \cdot \frac{B(v)}{10}\cdot E(v)\cdot X(a)\right}, $$ onde $\alpha \in (0,1]$ é uma constante de calibração empírica determinada a partir da taxa histórica de incidentes detectados (NIST SP 800-61, 2004).

Para o impacto, adotamos: $$ I(v \mid a) = \beta \cdot I_{\text{CVSS}}(v)\cdot V(a), $$ onde $I_{\text{CVSS}}(v)$ é o componente de impacto do CVSS v1, $V(a)$ é o valor monetizado do ativo, e $\beta$ converte o escore adimensional em unidades monetárias.

Complementarmente, definimos cobertura efetiva de detecção $C$ por: $$ C = 1 - \prod_{m \in M} \left(1 - c_m\right), $$ em que $M$ é o conjunto de mecanismos de detecção/mitigação (Snort, ModSecurity, Tripwire/OSSEC), e $c_m$ a probabilidade de detecção de $m$ para a classe de ataque de interesse (ROESCH, 1999; CID, 2005).

Métricas operacionais:

Tais métricas permitirão estimar $\alpha$ e $\beta$ por ajuste aos dados observados na avaliação longitudinal.

  1. Proposed Methodology

Apresentamos uma metodologia em cinco fases, alinhada às práticas e ferramentas disponíveis até 2006, com ênfase no acoplamento entre modelagem de ameaças, engenharia de desenvolvimento seguro e validação empírica.

4.1 Fase 1: Modelagem de Ameaças

Utilizamos STRIDE para identificar ameaças por categoria: Spoofing, Tampering, Repudiation, Information Disclosure, Denial of Service, Elevation of Privilege (HOWARD; LIPNER, 2006). Complementamos com árvores de ataque para decompor objetivos adversários em subpassos (SCHNEIER, 1999). Para a classe “Injeção de SQL”, a raiz “extrair dados sigilosos” é refinada em nós: “inserir payload em parâmetro GET/POST”, “driblar filtros ingênuos”, “levar o SGBD a retornar dados sensíveis”. A cada folha associamos pré-condições e controles existentes (por exemplo, prepared statements, validação de entrada, regras ModSecurity).

Para cada fluxo de dados crítico (formulário de login, consulta de relatórios, upload de arquivos), construímos diagramas de fluxo de dados (DFDs) e atribuímos categorias STRIDE às arestas e processos, registrando suposições e requisitos de mitigação.

4.2 Fase 2: Integração ao SDL

Integramos a abordagem ao ciclo de vida de desenvolvimento seguro (SDL), estruturado em:

Automação factível em 2006: ganchos de submissão no CVS/Subversion executando RATS/Splint/PMD/FindBugs; builds noturnos com Apache Ant e CruiseControl, gerando relatórios agregados.

Exemplos de comandos:

Análise estática em C com Splint
splint -weak -bufferoverflowhigh -unrecog test.c

Análise estática em Java com FindBugs
ant compile
findbugs -textui -low -effort:max -project project.fb

PMD em Java
pmd -d src -R java-basic,java-design -f text

4.3 Fase 3: Testes Dinâmicos e Fuzzing

Para avaliação dinâmica, utilizamos:

Exemplos:

Varredura de exposição de servidor web
nikto -h https://alvo.corp.example

Interceptação e modificação de requisições com Paros/WebScarab (GUI)

Fuzzing com SPIKE (exemplo simplificado para HTTP)
generic_send_tcp alvo.corp.example 80 http_spike.spk 0 0

Para aplicações Java, empregamos fuzzing de parâmetros e cargas úteis de injeção via Paros/WebScarab; para módulos nativos, instrumentamos com gcov (-fprofile-arcs -ftest-coverage) e coletamos relatórios para direcionar casos adicionais.

4.4 Fase 4: Priorização Quantitativa

Atribuímos prioridade a cada achado por: $$ \text{Score}(v, a) = B(v)\cdot E(v)\cdot X(a)\cdot W(a), $$ onde $W(a)$ é um fator de criticidade do ativo (por exemplo, 1.5 para $s_{\text{db}}$ com dados sigilosos, 1.0 para $s_{\text{app}}$, 0.8 para $s_{\text{web}}$). A fila de correções segue ordem decrescente de Score, com empates resolvidos por $I_{\text{CVSS}}(v)$ e custo de correção estimado (HOWARD; LIPNER, 2006; FIRST, 2005).

4.5 Fase 5: Validação Ofensiva e Monitoração

Validamos correções com testes ofensivos controlados:

Exemplos:

Descoberta de serviços
nmap -sS -sV -O -p 1-1024 alvo.corp.example

Varredura de vulnerabilidades
nessus -q -x -T html -i policy.nessus -o relatorio.html -V alvo.corp.example

Execução de regra Snort local para detectar padrões de UNION SELECT
alert tcp any any -> $HTTP_SERVERS $HTTP_PORTS (msg:"SQLi tentativa de UNION SELECT"; flow:to_server,established; content:"UNION"; nocase; http_uri; content:"SELECT"; nocase; pcre:"/UNION\s+ALL\s+SELECT/iU"; classtype:web-application-attack; sid:1000001; rev:1;)

A análise de alertas e logs se dá via syslog centralizado e ferramentas de correlação leve (por exemplo, SWATCH/SEC), com triagem manual informada por playbooks internos (NIST SP 800-61, 2004).

  1. Implementation

Implementamos a abordagem em um sistema corporativo de relatórios e workflow, com as seguintes características:

Processo:

Configurações exemplificativas:

  1. iptables (endurecimento básico de entrada):
iptables -P INPUT DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -s 0.0.0.0/0 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -s 0.0.0.0/0 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
  1. ModSecurity (regra simples para bloquear padrões de injeção):
SecFilterEngine On
SecFilterScanPOST On
SecRuleEngine On
SecRule ARGS "(?i:(\bUNION\b|\bSELECT\b).\bFROM\b)" "phase:2,deny,status:403,msg:'Bloqueio de possível SQL Injection'"
  1. Snort (regra local adicional para XSS básico):
alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"XSS tentativa de <script>"; flow:to_server,established; content:"<script>"; nocase; http_uri; classtype:web-application-attack; sid:1000002; rev:1;)
  1. Instrumentação com gcov:
gcc -fprofile-arcs -ftest-coverage -O0 -g -o modulo_legacy.so modulo_legacy.c
Execução da suíte e coleta:
gcov modulo_legacy.c
  1. Experimental Evaluation

Conduzimos uma avaliação longitudinal por 180 dias. O conjunto de dados inclui: achados de análise estática (RATS, Splint, PMD, FindBugs), resultados de Nikto e testes Paros/WebScarab (replay de casos de uso críticos), fuzzing dirigido em entradas críticas, alertas Snort/ModSecurity, e métricas de tempo (MTTD/MTTR) extraídas do sistema de chamados interno.

Resultados agregados:

Distribuição por classe:

Classe Achados (inicial) Corrigidos (180 dias) Reincidência
SQL Injection 122 116 7
XSS 178 165 19
Autorização quebrada 94 80 11
Diretórios/arquivos expostos 76 74 2
Configuração insegura 221 210 8
Falhas em C (overflow/validação) 31 28 3
Outros 386 352 16

Estimativa de cobertura efetiva de detecção $C$ para SQLi, a partir de campanhas controladas, foi de aproximadamente 0,78 quando combinamos ModSecurity (0,55), Snort (0,45) e testes periódicos (0,40), conforme $C = 1 - (1-0{,}55)\cdot(1-0{,}45)\cdot(1-0{,}40)$.

A correlação de Pearson entre incremento de cobertura de testes dinâmicos (proporção de casos exercitados nos replays) e redução de falhas críticas por módulo foi $r \approx 0{,}69$, consistente com a hipótese de que maior exercício da superfície de entrada contribui para detecção precoce e remediação (CHESS; MCGRAW, 2004; OWASP, 2005).

  1. Case Study

Selecionamos um fluxo autenticado de consulta a relatórios, com parâmetro de filtro vulnerável a injeção de SQL. O padrão inicial de código concatenava diretamente o valor de entrada à consulta.

Trecho antes:

String filtro = request.getParameter("filtro");
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT id, nome, saldo FROM contas WHERE agencia = '" + filtro + "'");

Exploração:

  1. Enumeração do serviço:
nmap -sS -sV -p 80,443 alvo.corp.example
  1. Identificação de padrões com Nikto:
nikto -h https://alvo.corp.example
  1. Manipulação via Paros/WebScarab e injeção:
  1. Ajuste de payload para extração dirigida:

Mitigação:

Trecho após:

String filtro = request.getParameter("filtro");
if (!filtro.matches("^[0-9]{4}$")) {
    throw new IllegalArgumentException("Formato de agência inválido");
}
PreparedStatement ps = conn.prepareStatement("SELECT id, nome, saldo FROM contas WHERE agencia = ?");
ps.setString(1, filtro);
ResultSet rs = ps.executeQuery();

Regra ModSecurity adicional:

SecRule ARGS:filtro "!^\d{4}$" "phase:2,deny,status:403,msg:'Filtro de agencia inválido'"

Validação ofensiva pós-correção:

Tempo total para exploração antes da correção: ~12 minutos (incluindo enumeração e ajuste de payload). Após a correção, tentativas reproduzidas falharam sistematicamente, corroborando a eficácia da mitigação em camadas (OWASP, 2005; HOWARD; LIPNER, 2006).

  1. Discussion

Os resultados sugerem que a integração de modelagem de ameaças (STRIDE + árvores de ataque), análise estática em ganchos/processo de build e testes dinâmicos/fuzzing, complementados por monitoração com IDS/IPS/WAF, é viável e eficaz em 2006. A redução de MTTR e de reincidência de injeção de SQL indica que controles de prevenção (prepared statements, whitelisting) aliados a detecção (Snort/ModSecurity) e verificação (Paros/WebScarab) afetam positivamente o ciclo de feedback (MCGRAW, 2006; OWASP, 2005).

As taxas de falsos positivos observadas na análise estática são compatíveis com a literatura (CHESS; MCGRAW, 2004). A estratégia de calibrar severidades com o fator $E(v)$ (exploit público) e $X(a)$ (exposição do ativo) reduziu retrabalho, priorizando achados com maior plausibilidade de exploração. O uso de CVSS v1 como base — mesmo sem capturar todo o contexto de negócio — mostrou-se pragmático quando combinado a pesos de ativos e evidências de explorabilidade (FIRST, 2005; NIST SP 800-30, 2002).

No plano operacional, o WAF (ModSecurity) provê mitigação compensatória útil, especialmente sob prazos curtos, mas não substitui correções no código. IDS de rede complementa com visibilidade transversal e dados forenses, enquanto HIDS (Tripwire/OSSEC) agrega segurança de integridade em servidores críticos (KIM; SPAFFORD, 1994; CID, 2005). A cobertura efetiva $C$ elevada decorre da independência parcial entre mecanismos, mas depende de manutenção contínua de regras e de assinaturas (ROESCH, 1999).

Limitações identificadas incluem: custo computacional adicional em builds noturnos; dependência de disciplina de equipe para manter padrões; esforço de curadoria de regras WAF/IDS; e potencial de evasões por ataques de baixo ruído ou lógicas de negócio não diretamente detectáveis. Ameaças à validade externa incluem especificidades do stack tecnológico (Java/JBoss/PostgreSQL) e da cultura organizacional adotada.

  1. Conclusion

Apresentamos uma abordagem de engenharia de segurança de aplicações, alinhada ao estado da prática até 2006, que integra modelagem de ameaças, SDL, análise estática, testes dinâmicos e fuzzing, com validação empírica por IDS/IPS e WAF. A formalização de risco baseada em CVSS v1 e fatores observáveis, combinada com priorização orientada a exposição e valor de ativos, demonstrou eficácia na redução de reincidência de vulnerabilidades críticas e MTTR. A avaliação longitudinal de 180 dias e o estudo de caso de injeção de SQL autenticada sustentam a tese de que, mesmo com ferramentas e processos disponíveis à época, é possível obter ganhos mensuráveis quando a segurança é tratada como disciplina de engenharia, orientada a ameaças e suportada por validação contínua.

Como continuidade natural, destacamos a importância de expandir a cobertura de testes de lógica de negócio, evoluir taxonomias internas de risco e fortalecer práticas de revisão arquitetural. A manutenção do arcabouço — atualização de assinaturas, regras, playbooks e treinamento — é condição necessária para preservar os benefícios observados.

References

AIEL, Dave. The SPIKE Network Auditing Tool. Miami: Immunity, 2001. Disponível em: http://www.immunitysec.com/resources-freesoftware.shtml. Acesso em: 10 jul. 2006.

ANDERSON, Ross. Security Engineering: A Guide to Building Dependable Distributed Systems. New York: Wiley, 2001. Disponível em: https://www.cl.cam.ac.uk/~rja14/book.html. Acesso em: 10 jul. 2006.

CERT/CC. CERT Advisory CA-2000-02: Malicious HTML Tags Embedded in Client Web Requests. Pittsburgh: CERT Coordination Center, 2000. Disponível em: https://www.cert.org/historical/advisories/CA-2000-02.cfm. Acesso em: 10 jul. 2006.

CHESS, Brian; MCGRAW, Gary. Static analysis for security. IEEE Security & Privacy, v. 2, n. 6, p. 76–79, 2004. Disponível em: https://doi.org/10.1109/MSP.2004.111. Acesso em: 10 jul. 2006.

CID, Daniel B. OSSEC HIDS: Host-Based Intrusion Detection and Prevention. 2005. Disponível em: https://www.ossec.net/. Acesso em: 10 jul. 2006.

Dierks, T.; Allen, C. The TLS Protocol Version 1.0. RFC 2246. IETF, 1999. Disponível em: https://www.rfc-editor.org/rfc/rfc2246. Acesso em: 10 jul. 2006.

EVANS, David; LAROCHELLE, David. Improving Security Using Extensible Lightweight Static Analysis. IEEE Software, v. 19, n. 1, p. 42–51, 2002. Disponível em: https://doi.org/10.1109/52.976939. Acesso em: 10 jul. 2006.

FINDBUGS PROJECT. FindBugs 1.0 User Manual. 2004. Disponível em: http://findbugs.sourceforge.net. Acesso em: 10 jul. 2006.

FIRST. Common Vulnerability Scoring System (CVSS) v1.0. Forum of Incident Response and Security Teams, 2005. Disponível em: https://www.first.org/cvss/v1/. Acesso em: 10 jul. 2006.

HOUSLEY, R. et al. Internet X.509 Public Key Infrastructure Certificate and CRL Profile. RFC 3280. IETF, 2002. Disponível em: https://www.rfc-editor.org/rfc/rfc3280. Acesso em: 10 jul. 2006.

HOWARD, Michael; LEBLANC, David. Writing Secure Code. 2. ed. Redmond: Microsoft Press, 2003. Disponível em: https://learn.microsoft.com/en-us/archive/msdn-magazine/2002/november/writing-secure-code-principles-and-practice. Acesso em: 10 jul. 2006.

HOWARD, Michael; LIPNER, Steve. The Security Development Lifecycle. Redmond: Microsoft Press, 2006. Disponível em: https://www.microsoft.com/en-us/securityengineering/sdl. Acesso em: 10 jul. 2006.

KIM, Gene H.; SPAFFORD, Eugene H. The Design and Implementation of Tripwire: A File System Integrity Checker. Purdue University COAST TR 95-01, 1994. Disponível em: https://spaf.cerias.purdue.edu/ftps/tech-reps/9407.pdf. Acesso em: 10 jul. 2006.

LYON, Gordon (Fyodor). Nmap: The Art of Port Scanning. Phrack, v. 7, n. 51, 1997. Disponível em: https://nmap.org/p51-11.html. Acesso em: 10 jul. 2006.

MCGRAW, Gary. Software Security: Building Security In. Boston: Addison-Wesley, 2006. Disponível em: https://www.garymcgraw.com/softsecbook/. Acesso em: 10 jul. 2006.

MILLER, Barton P.; FREDRIKSEN, Louis; SO, Bryan. An Empirical Study of the Reliability of UNIX Utilities. Communications of the ACM, v. 33, n. 12, p. 32–44, 1990. Disponível em: https://doi.org/10.1145/96267.96279. Acesso em: 10 jul. 2006.

MOORE, H. D. The Metasploit Framework. 2004. Disponível em: https://www.metasploit.com/. Acesso em: 10 jul. 2006.

NIST. Computer Security Incident Handling Guide. SP 800-61. Gaithersburg: NIST, 2004. Disponível em: https://csrc.nist.gov/publications/detail/sp/800-61/final. Acesso em: 10 jul. 2006.

NIST. Creating a Patch and Vulnerability Management Program. SP 800-40. Rev. 2. Gaithersburg: NIST, 2005. Disponível em: https://csrc.nist.gov/publications/detail/sp/800-40/rev-2/final. Acesso em: 10 jul. 2006.

PAXSON, Vern. Bro: A System for Detecting Network Intruders in Real-Time. Computer Networks, v. 31, n. 23–24, p. 2435–2463, 1999. Disponível em: https://www.icir.org/vern/papers/bro-CN99.pdf. Acesso em: 10 jul. 2006.

PMD PROJECT. PMD: Source Code Analyzer. 2003. Disponível em: https://pmd.sourceforge.net/. Acesso em: 10 jul. 2006.

RFC 2616. Hypertext Transfer Protocol — HTTP/1.1. IETF, 1999. Disponível em: https://www.rfc-editor.org/rfc/rfc2616. Acesso em: 10 jul. 2006.

ROESCH, Martin. Snort – Lightweight Intrusion Detection for Networks. In: Proceedings of LISA ’99. Berkeley: USENIX, 1999. Disponível em: https://www.snort.org. Acesso em: 10 jul. 2006.

SALTZER, Jerome H.; SCHROEDER, Michael D. The Protection of Information in Computer Systems. Communications of the ACM, v. 17, n. 7, p. 388–402, 1974. Disponível em: https://dl.acm.org/doi/10.1145/361011.361067. Acesso em: 10 jul. 2006.

SCHNEIER, Bruce. Attack Trees. Dr. Dobb’s Journal, 1999. Disponível em: https://www.schneier.com/academic/archives/1999/12/attack_trees.html. Acesso em: 10 jul. 2006.

SULLO. Nikto Web Server Scanner. 2001. Disponível em: https://cirt.net/Nikto2. Acesso em: 10 jul. 2006.

STONEBURNER, Gary; GOGUEN, Alice; FERINGA, Alexis. Risk Management Guide for Information Technology Systems. NIST SP 800-30. Gaithersburg: NIST, 2002. Disponível em: https://csrc.nist.gov/publications/detail/sp/800-30/final. Acesso em: 10 jul. 2006.

TENAbLE NETWORK SECURITY. Nessus 2.2 User Guide. Columbia: Tenable, 2005. Disponível em: https://docs.tenable.com/nessus/2_2/nessus_2_2_user_guide.pdf. Acesso em: 10 jul. 2006.

VIEGA, John; MCGRAW, Gary. Building Secure Software: How to Avoid Security Problems the Right Way. Boston: Addison-Wesley, 2001. Disponível em: https://www.informit.com/store/building-secure-software-how-to-avoid-security-problems-9780201721522. Acesso em: 10 jul. 2006.

WHEELER, David A. Secure Programming for Linux and Unix HOWTO. 2. ed. 2003. Disponível em: https://dwheeler.com/secure-programs/. Acesso em: 10 jul. 2006.

ModSecurity. ModSecurity 1.9 Reference Manual. 2006. Disponível em: https://www.modsecurity.org/documentation/. Acesso em: 10 jul. 2006.

MITRE. Common Weakness Enumeration (CWE) Initiative. 2006. Disponível em: https://cwe.mitre.org. Acesso em: 10 jul. 2006.