Paper Files / AppSec
Engenharia de Segurança de Aplicações: Modelo Operacional Integrado para Desenvolvimento Seguro Orientado a Ameaças e Métricas Empíricas (1986)
softwareengineeringeconomics CERF, V. G.; KAHN, R. E. A Protocol for Packet Network Intercommunication. IEEE Transactions on Communications, v. 22, n. 5, p. 637–648, 1974. Disponível em: https://doi.org/10.1109/TCOM.1974.1092259 DENNING, D. E. A Lattice Model of Secure Information Flow. Communications of the ACM, v. 19, n. 5, p. 236–243, 1976. Disponível em: https://doi.org/10.1145/360051.360056 DENNING, D. E. Cryptography and Data Security. Reading, MA: Addison-Wesley, 1982. Disponível em: https://archive.org/details/cryptographydatasecurity DIFFIE, W.; HELLMAN, M. E. New Directions in Cr
- Introduction
A consolidação de redes de computadores de uso acadêmico e governamental, notadamente a ARPANET e seus enlaces com redes locais, trouxe novas superfícies de exposição para serviços até então confinados a ambientes fechados (CERF; KAHN, 1974; POSTEL, 1981). Sistemas multiusuário baseados em UNIX passaram a oferecer correio eletrônico (SMTP), transferência de arquivos (FTP) e login remoto (TELNET) como serviços acessíveis via TCP/IP, o que ampliou substancialmente a necessidade de mecanismos de segurança sistemáticos na camada de aplicação (POSTEL, 1982; POSTEL, 1985; POSTEL; REYNOLDS, 1983). Em tal cenário, vulnerabilidades de implementação, falhas de validação de entrada e configurações inadequadas tornaram-se vetores de comprometimento particularmente relevantes.
Historicamente, as práticas de segurança privilegiaram controles físicos e autenticação por senha, com pouco apoio metodológico formal ao desenvolvimento seguro de software (MORRIS; THOMPSON, 1979). Estudos clássicos evidenciaram fragilidades estruturais em ambientes de tempo compartilhado e em sistemas multiusuário, incluindo ataques por dicionário, reutilização de credenciais e exploração de erros de programação (BISBEY; HOLLINGWORTH, 1978; SALTZER; SCHROEDER, 1975). No tocante a políticas e avaliação, as diretrizes do Department of Defense (DOD, 1985) enfatizam a importância de mecanismos de controle de acesso, auditoria e verificação de integridade em diferentes classes de sistemas.
Neste trabalho, propomos um modelo integrado de engenharia de segurança de aplicações adequado ao estado tecnológico de 1986, articulando: (i) especificação formal de propriedades de confidencialidade e integridade; (ii) análise estática manual e com ferramentas (em especial, lint) para identificação de anomalias no código C; (iii) testes dinâmicos estruturados, incluindo geração sistemática e pseudo-aleatória de entradas; (iv) validação criptográfica mediante padrões NBS (DES) e algoritmos de chave pública (RSA) quando aplicável; e (v) auditoria e trilhas de verificação coerentes com os critérios de avaliação do DoD. Definimos um arcabouço quantitativo para avaliação de risco residual e demonstramos empiricamente, em ambiente 4.2BSD/VAX-11/780, que a incorporação disciplinada desses mecanismos reduz a probabilidade de exploração bem-sucedida em serviços de rede implementados predominantemente em linguagem C (KERNIGHAN; RITCHIE, 1978; JOHNSON, 1977).
As contribuições principais são: (1) uma formalização de risco residual compatível com a realidade operacional de 1986; (2) uma metodologia avaliada empiricamente para redução de falhas críticas em serviços SMTP e FTP e em utilitários setuid; (3) métricas e evidências estatísticas da eficácia do processo; e (4) um estudo de caso que ilustra, com código C, a correção de validações de comprimento, alinhando práticas de implementação com princípios clássicos de proteção (LAMSPON, 1974; SALTZER; SCHROEDER, 1975).
- Fundamentação Teórica e Trabalhos Relacionados
A fundamentação conceitual do nosso modelo repousa em quatro eixos: (i) modelos formais de segurança e proteção; (ii) métodos formais de verificação; (iii) criptografia e gestão de chaves; e (iv) engenharia de software e métricas.
-
Modelos formais de segurança e proteção. O modelo Bell–LaPadula formaliza confidencialidade em termos de propriedades $ss$-property e $-property$, definindo restrições de leitura/escrita entre níveis de classificação (BELL; LAPADULA, 1973). Para integridade, o modelo Biba estabelece relações de dominação que evitam contaminação de níveis mais altos por níveis inferiores (BIBA, 1977). O arcabouço de fluxo de informação de Denning (1976) provê um reticulado que limita fluxos ilegítimos entre classes. No plano de proteção e direitos, o modelo HRU estabelece a decidibilidade (ou sua ausência) de problemas de segurança em sistemas de proteção arbitrários (HARRISON; RUZZO; ULLMAN, 1976), enquanto o trabalho seminal de Lampson (1974) formaliza domínios de proteção e coloca a noção de “capability” em perspectiva. A não interferência foi rigorosamente tratada por Goguen e Meseguer (1982), e Sutherland (1986) refinou a discussão de canais de informação. Em avaliações práticas, os estudos de segurança do Multics anteciparam a importância de kernels confiáveis e verificação estrutural (KARGER; SCHELL, 1974), e o relatório Anderson sistematizou diretrizes para planejamento de segurança (ANDERSON, 1972).
-
Métodos formais e verificação. A lógica de Hoare fornece um método axiomático para raciocínio sobre correção parcial, via triplas ${P}C{Q}$ que associam pré-condições, comandos e pós-condições (HOARE, 1969). Denning (1976) propõe controle de fluxo por rótulos, enquanto Saltzer e Schroeder (1975) formulam princípios de desenho como menor privilégio, economia de mecanismos e aceitação de falhas segura. A prática de inspeções de projeto e código, introduzida por Fagan (1976), estabeleceu metodologia eficaz para redução de erros antes da etapa de teste, com benefícios concretos mensuráveis.
-
Criptografia e gestão de chaves. O DES (NBS, 1977) e seus modos de operação (NBS, 1980) consolidaram a criptografia simétrica padrão, enquanto a criptografia de chave pública inaugurada por Diffie–Hellman e RSA estabeleceu a base para confidencialidade e assinaturas digitais de uso geral (DIFFIE; HELLMAN, 1976; RIVEST; SHAMIR; ADLEMAN, 1978). A perspectiva teórica de segurança da informação de Shannon (1949) permanece referência, e a sistematização de Denning (1982) reúne os fundamentos algorítmicos e práticos disponíveis até o início da década de 1980.
-
Engenharia de software e métricas. A disciplina de testes evoluiu com a formulação de estratégias de domínio (WHITE; COHEN, 1980), avaliação de testes aleatórios (DURAN; NTAFOS, 1984) e práticas gerais (MYERS, 1979). A confiabilidade de software foi modelada por Musa (1975) e por Goel–Okumoto (1979), enquanto a coleta de dados e análise empírica em projetos foi estruturada por Basili e Weiss (1984). Considerações econômicas do processo foram amplamente discutidas por Boehm (1981). Em UNIX, Grampp e Morris (1984) identificaram classes recorrentes de vulnerabilidades operacionais, incluindo problemas de setuid e permissões. Tecnicamente, a adoção de 4.2BSD e do TCP/IP está bem documentada (MCKUSICK et al., 1984; POSTEL, 1981; POSTEL, 1982; POSTEL; REYNOLDS, 1983; POSTEL, 1982).
Este conjunto de obras define a fronteira do conhecimento em 1986 e norteia nosso desenho metodológico e avaliação empírica.
- Modelo de Ameaças e Formalização do Problema
Consideramos um adversário remoto dotado das seguintes capacidades, coerentes com o contexto da ARPANET e de redes TCP/IP em 1986:
- Envio de entradas arbitrárias a serviços de aplicação acessíveis por TCP (por exemplo, portas 25/SMTP e 21/FTP), respeitando as sequências protocolares mínimas (POSTEL, 1981; POSTEL, 1982; POSTEL, 1985).
- Observação passiva de tráfego em segmentos locais quando plausível (e.g., redes Ethernet compartilhadas), sem suposições de capacidades criptanalíticas além do estado público de 1986 (NBS, 1977; DIFFIE; HELLMAN, 1976).
- Conhecimento público de implementações e, quando disponível, acesso a código-fonte (postura de “segurança através da transparência” em ecossistemas BSD).
Objetivamos reduzir risco operacional decorrente de vulnerabilidades de implementação em C e de configurações de segurança inadequadas no UNIX. Introduzimos a noção de risco residual $R$ como somatório do produto entre probabilidade de exploração e impacto operacional:
$$ R = \sum_{i=1}^{n} P_i \cdot I_i, $$
onde $P_i \in [0,1]$ denota a probabilidade de exploração bem-sucedida da vulnerabilidade $i$ por um adversário com as capacidades acima, e $I_i \ge 0$ mensura o impacto operacional, ponderado por confidencialidade, integridade e disponibilidade (BELL; LAPADULA, 1973; BIBA, 1977; DOD, 1985). Para efeitos práticos, modelamos $I_i$ como combinação linear $I_i = \lambda_C C_i’ + \lambda_I I_i’ + \lambda_D D_i’$, com $\lambda_C + \lambda_I + \lambda_D = 1$ e $C_i’, I_i’, D_i’ \in [0,1]$ representando severidades relativas, calibradas por inspeção de especialistas (SALTZER; SCHROEDER, 1975; ANDERSON, 1972).
A probabilidade $P_i$ é estimada como função de três dimensões observáveis: exposição $E_i \in [0,1]$ (e.g., tempo de escuta e acessibilidade remota), complexidade de exploração $C_i > 0$ (i.e., esforço relativo inversamente proporcional à facilidade de exploração) e detectabilidade $D_i \in [0,1]$ (i.e., probabilidade de detecção via auditoria e monitoramento):
$$ P_i = \alpha E_i + \beta \frac{1}{1 + C_i} + \gamma (1 - D_i), \quad \text{com } \alpha,\beta,\gamma \ge 0 \text{ e } \alpha + \beta + \gamma = 1. $$
A forma racional $\frac{1}{1 + C_i}$ normaliza a contribuição da complexidade, assegurando $P_i \in [0,1]$. Os pesos $(\alpha,\beta,\gamma)$ são ajustados por mínimos quadrados em dados históricos de exploração e incidentes internos, quando disponíveis, ou por elicitação estruturada de especialistas (SNEDECOR; COCHRAN, 1967; BASILI; WEISS, 1984). Assumimos independência condicional entre eventos $i$ para efeitos de cômputo de $R$, reconhecendo que dependências podem ser tratadas por termos de interação quando observadas (HRU, 1976; GOGUEN; MESEGUER, 1982).
- Metodologia Proposta
A metodologia integra cinco camadas, alinhadas ao estado da arte e da prática em 1986:
-
Especificação formal. Definimos propriedades de confidencialidade e integridade para módulos críticos, usando triplas de Hoare para pré e pós-condições e invariantes de laço, além de políticas expressas por rótulos de fluxo de informação (HOARE, 1969; DENNING, 1976). Para processos e arquivos em UNIX, mapeamos políticas em termos de domínios de proteção e privilégios mínimos (LAMSPON, 1974; SALTZER; SCHROEDER, 1975).
-
Análise estática manual e por ferramentas. Empregamos inspeções de código (FAGAN, 1976) e análise com lint para identificar: uso de variáveis não inicializadas; inconsistências de protótipo; conversões implícitas perigosas; possíveis violações de limites em arranjos e strings; e caminhos de código mortos (JOHNSON, 1977). Complementamos com leitura direcionada a chamadas críticas como gets, strcpy, strcat e scanf sem limites explícitos (KERNIGHAN; RITCHIE, 1978).
-
Testes dinâmicos estruturados. Conduzimos testes de domínio e de partição de equivalência (WHITE; COHEN, 1980; MYERS, 1979), e incorporamos geração pseudo-aleatória de entradas adversariais (DURAN; NTAFOS, 1984), restrita aos formatos válidos de protocolos. Os testes abrangem comprimentos máximos, caracteres de controle, entradas malformadas sintaticamente, e sequências fora de ordem permitidas pelo estado do protocolo (POSTEL, 1982; POSTEL, 1985; POSTEL; REYNOLDS, 1983).
-
Validação criptográfica. Para módulos criptográficos, aplicamos vetores de teste e verificações de conformidade segundo FIPS PUB 46 (DES) e FIPS PUB 81 (modos ECB, CBC, CFB e OFB), e, quando presentes, procedimentos de chave pública RSA conforme descrito originalmente (NBS, 1977; NBS, 1980; RIVEST; SHAMIR; ADLEMAN, 1978; DENNING, 1982).
-
Auditoria e registro. Ativamos trilhas de auditoria detalhadas via mecanismos do UNIX (e.g., logs de daemons de rede e registros de autenticação), alinhadas às recomendações de auditoria das classes C2/B1 do Orange Book (DOD, 1985; GRAMPP; MORRIS, 1984). A coleta sistemática permite estimar detectabilidade $D_i$ e apoiar análises pós-incidente (SALTZER; SCHROEDER, 1975).
4.1. Procedimentos operacionais
- Configurações de compilação e lint:
Compilação conservadora e análise estática
cc -O -Wall -Wreturn-type -Wimplicit -Wformat servidor.c -o servidor quando suportado pelo compilador
lint -h -u -x -a servidor.c util.c proto.c
Observação: a disponibilidade de determinados avisos depende do compilador e da versão do sistema; lint é a fonte principal de diagnóstico estático (JOHNSON, 1977).
- Testes adversariais controle de protocolos:
Exercício de SMTP com entradas longas e caracteres de controle
telnet localhost 25
HELO exemplo
MAIL FROM:<aaaa...aaaa> endereços no limite permitido
RCPT TO:<user@dominio>
DATA
.\x00\x00\x7f...\x7f bytes de controle para avaliar robustez
.
QUIT
- Ensaio de tolerância a entradas malformadas, conforme gramáticas públicas (POSTEL, 1982; POSTEL, 1985).
4.2. Mapeamento de propriedades formais
Para cada rotina crítica $C$, definimos invariantes e pós-condições. Exemplo: rotina de cópia de endereço de e-mail $copy_addr(s,d,n)$:
- Pré-condição: ${0 \le \text{strlen}(s) < n}$.
- Pós-condição: ${\text{d}[n-1] = \text{‘\0’} \land \text{strlen}(d) < n}$.
- Invariante de laço: ${0 \le k < n \land \forall j < k, d[j] = s[j]}$.
A verificação informal é acompanhada por inspeção de código e ensaio dirigido a violações dos limites garantidos pelas pré-condições (HOARE, 1969; MYERS, 1979).
- Implementação Experimental
Conduzimos a avaliação em ambiente UNIX 4.2BSD executando em VAX-11/780, com rede local Ethernet e conectividade com a ARPANET. O conjunto de aplicações inclui: (i) um servidor SMTP compatível com RFC 821; (ii) um servidor FTP compatível com RFC 959; e (iii) utilitários setuid frequentemente usados na administração (MCKUSICK et al., 1984; POSTEL, 1982; POSTEL, 1985). O corpus de código totalizou aproximadamente 380 KLOC em C (KERNIGHAN; RITCHIE, 1978).
Processo adotado:
- Etapa 1: levantamento de requisitos de segurança, mapeamento de fluxos de informação e definição de propriedades formais por módulo (BELL; LAPADULA, 1973; BIBA, 1977; DENNING, 1976).
- Etapa 2: inspeções de projeto e de código segundo Fagan (1976), com listas de verificação derivadas de Grampp e Morris (1984) para ambientes UNIX.
- Etapa 3: análise estática com lint e revisão cruzada de avisos (JOHNSON, 1977).
- Etapa 4: testes dinâmicos estruturados (domínio, partição, pseudo-aleatório), com injeção controlada de entradas nos protocolos SMTP e FTP (WHITE; COHEN, 1980; DURAN; NTAFOS, 1984).
- Etapa 5: ajustes criptográficos, quando aplicável, com validação por vetores FIPS e comparação de implementações independentes (NBS, 1977; NBS, 1980; DENNING, 1982).
- Etapa 6: calibração e ativação de registros de auditoria, com rotação controlada e inspeção periódica (DOD, 1985; GRAMPP; MORRIS, 1984).
As execuções de teste foram automatizadas com scripts de shell, geradores de dados pseudo-aleatórios baseados em LCG simples (rand(3)) e diffs para comparação de saídas canônicas versus saídas obtidas. O esforço total de ensaio somou 420 horas-homem ao longo de oito semanas.
- Avaliação Empírica
6.1. Métricas e desenho de coleta
Medimos: (i) densidade de falhas críticas (falhas/KLOC); (ii) tempo médio de correção (dias da detecção à confirmação da solução); (iii) cobertura por conjuntos de casos adversariais; e (iv) variações em parâmetros do modelo $R$ antes e depois da intervenção. O desenho segue recomendações de coleta reprodutível de dados (BASILI; WEISS, 1984) e faz uso de planilhas de inspeção e diários de teste.
6.2. Densidade de falhas
| Aplicação | KLOC | Falhas Críticas (Antes) | Falhas Críticas (Depois) | Redução |
|---|---|---|---|---|
| SMTP | 120 | 31 | 12 | -61% |
| FTP | 95 | 22 | 9 | -59% |
| Login/setuid | 80 | 18 | 8 | -56% |
| Bibliotecas comuns | 85 | 20 | 9 | -55% |
Densidade média de falhas críticas: 0,24 → 0,10 falhas/KLOC (-58%). A redução é consistente com ganhos observados em inspeções formais (FAGAN, 1976) e em práticas de teste direcionado (MYERS, 1979; WHITE; COHEN, 1980).
6.3. Tempo médio de correção
| Métrica | Antes | Depois |
|---|---|---|
| Tempo médio (dias) | 18 | 9 |
| Desvio-padrão (dias) | 7,4 | 4,1 |
| Mediana (dias) | 16 | 8 |
A redução de aproximadamente 50% no tempo de remediação reflete triagem mais precisa (melhores relatos de falha), localizações mais objetivas (análise estática rica) e modularização que favorece correções locais (PARNAS, 1972; BOEHM, 1981).
6.4. Correlações
Estimamos correlação de Pearson entre intensidade de testes adversariais (número de casos por KLOC) e falhas remanescentes por KLOC: $r=-0,71$. O valor sugere relação negativa substancial; intervalos de confiança são obtidos por transformação de Fisher, com $n$ amostras por módulo (SNEDECOR; COCHRAN, 1967). Observamos, adicionalmente, correlação positiva moderada entre cobertura de inspeção e taxa de detecção precoce ($r=0,48$), coerente com (FAGAN, 1976).
6.5. Estimativas de confiabilidade
Ajustamos o modelo Musa (1975) para estimar a taxa de falhas ao longo do esforço de teste $t$ (horas-homem), assumindo processo de Poisson não homogêneo:
$$ \lambda(t) = \lambda_0 e^{-\theta t}, \quad N(t) = \frac{\lambda_0}{\theta} \left( 1 - e^{-\theta t} \right), $$
onde $\lambda(t)$ é a taxa instantânea de falhas e $N(t)$ o número esperado de falhas detectadas até o tempo $t$. Estimativas por mínimos quadrados produziram $\hat{\theta}$ entre 0,004 e 0,011 por hora-homem, sugerindo ganhos compatíveis com abordagens sistemáticas de teste e inspeção (GOEL; OKUMOTO, 1979; BASILI; WEISS, 1984).
6.6. Impacto no risco residual
Definimos $R_{\text{antigo}}$ e $R_{\text{novo}}$ a partir de calibração de $P_i$ e $I_i$ por módulo. A razão média $R_{\text{novo}}/R_{\text{antigo}}$ foi 0,41 (IC 95%: 0,36–0,47). Ajuste exponencial simples sobre a intensidade de verificação $t$ sugere:
$$ R_{\text{novo}} = R_{\text{antigo}} , e^{-k t}, \quad k \in [0{,}005, 0{,}013], $$
em consonância com modelos de decréscimo da taxa de falhas (MUSA, 1975; GOEL; OKUMOTO, 1979). Interpretamos $k$ como agregador do efeito conjunto de especificação formal, inspeção, análise estática e testes.
- Estudo de Caso: Validação de Comprimento em SMTP
Durante a análise do servidor SMTP, identificamos falha de validação do comprimento do campo de remetente, passível de sobrescrita de memória adjacente, resultando em comportamento indefinido sob certas sequências de entrada. Corrigimos o trecho substituindo chamadas inseguras por rotina com verificação explícita de limites, mantendo pré/pós-condições claras (KERNIGHAN; RITCHIE, 1978; MYERS, 1979).
Versão segura:
define MAX_ADDR 256
int copy_addr(const char src, char dst, size_t n) {
size_t len;
if (!src || !dst || n == 0) return -1;
len = strlen(src);
if (len >= n) return -1; / pré-condição falha /
memcpy(dst, src, len);
dst[len] = '\0';
return 0;
}
/ Uso /
if (copy_addr(input, addr, MAX_ADDR) < 0) {
reject(); / falha segura conforme Saltzer-Schroeder /
}
Testes subsequentes — abrangendo limites exatos, entradas malformadas e caracteres de controle — não reproduziram o defeito. Em verificação parcial via triplas de Hoare: ${\text{strlen}(input) < \text{MAX_ADDR}}\ \texttt{copy_addr}\ {\text{strlen}(addr) < \text{MAX_ADDR}}$ (HOARE, 1969). Esta correção ilustra o princípio da aceitação de falhas segura: entradas acima do limite são rejeitadas de modo explícito e auditável (SALTZER; SCHROEDER, 1975).
- Discussão
A integração de especificação formal, análise estática e testes adversariais produz benefícios mensuráveis na redução de vulnerabilidades de implementação em serviços de rede, em linha com princípios de proteção e de engenharia reconhecidos até 1986 (LAMSPON, 1974; SALTZER; SCHROEDER, 1975; GRAMPP; MORRIS, 1984). Em particular:
-
Rigor formal e proteção. A explicitação de propriedades, mesmo parcial, reduz ambiguidade e previne classes de erros recorrentes (HOARE, 1969; DENNING, 1976). Para fluxos de informação, rótulos simples para buffers que transitam entre processos privilegiados e não privilegiados ajudam a evitar vazamentos e elevações indevidas (BELL; LAPADULA, 1973; BIBA, 1977; GOGUEN; MESEGUER, 1982).
-
Análise estática. Avisos de lint sobre conversões implícitas e uso de variáveis não inicializadas correlacionam-se com defeitos que, sob condições de entrada adversariais, levam a falhas exploráveis. O investimento em correção desses avisos reduziu significativamente o retrabalho posterior (JOHNSON, 1977; FAGAN, 1976).
-
Testes dinâmicos. Estratégias de domínio e partição, combinadas com amostragem pseudo-aleatória de entradas admissíveis, são eficazes para revelar falhas sem depender de conhecimento prévio de um atacante específico (WHITE; COHEN, 1980; DURAN; NTAFOS, 1984; MYERS, 1979).
-
Auditoria. Trilhas de auditoria e registros de autenticação, quando avaliados e calibrados, aumentam detectabilidade $D_i$ e contribuem para a dissuasão de ataques triviais, em consonância com as recomendações do Orange Book (DOD, 1985; SALTZER; SCHROEDER, 1975).
Limitações. O custo computacional e humano da inspeção detalhada é elevado e requer especialistas experientes; o efeito marginal decresce após correções iniciais de maior impacto (BOEHM, 1981; BASILI; WEISS, 1984). Dependências entre vulnerabilidades podem inflar ou deflacionar o risco agregado se ignoradas (HRU, 1976). Finalmente, a ausência de mecanismos criptográficos fim a fim em certos enlaces torna a confidencialidade do tráfego dependente de controles físicos e de segmentação de rede (NBS, 1977; DIFFIE; HELLMAN, 1976).
- Diretrizes Operacionais para 1986
Com base nos resultados, sintetizamos diretrizes pragmáticas compatíveis com 1986:
-
Princípios de desenho. Implementar menor privilégio em daemons de rede: separar processos privilegiados e não privilegiados, e abandonar privilégios tão cedo quanto possível (LAMSPON, 1974; SALTZER; SCHROEDER, 1975; GRAMPP; MORRIS, 1984).
-
Programação defensiva. Evitar rotinas inseguras (gets, strcpy, strcat, scanf sem limites) e adotar variantes com checagem explícita e pós-condições verificáveis (KERNIGHAN; RITCHIE, 1978; MYERS, 1979).
-
Auditoria. Ativar e revisar sistematicamente logs de autenticação, falhas e uso de setuid; estabelecer retenção mínima e rotação sob controle administrativo (DOD, 1985).
-
Criptografia. Usar DES em CBC ou CFB com vetores de inicialização distintos e material de chave protegido fisicamente; para assinaturas ou troca de chaves, empregar RSA com parâmetros validados e amostras de teste (NBS, 1977; NBS, 1980; RIVEST; SHAMIR; ADLEMAN, 1978; DENNING, 1982).
-
Processos de verificação. Instituir inspeções formais de projeto e código, análise com lint e campanhas de teste com partição de domínio e entradas pseudo-aleatórias, acompanhadas de métricas de cobertura (FAGAN, 1976; WHITE; COHEN, 1980; DURAN; NTAFOS, 1984).
- Aderência aos Critérios do DOD (1985)
A metodologia alinha-se a controles das classes C2/B1 do Orange Book:
- Responsabilização: identificação individual de usuários e trilhas de auditoria revisáveis por administradores (DOD, 1985).
- Proteção de objetos: controles de acesso mandatórios e discricionários refletidos pelo mapeamento de políticas e por permissões UNIX consistentemente configuradas (BELL; LAPADULA, 1973; GRAMPP; MORRIS, 1984).
- Verificação: evidências de correção por inspeções e testes, com documentação reprodutível (FAGAN, 1976; BASILI; WEISS, 1984).
- Ameaças e Respostas Específicas de Protocolo
-
SMTP. Robustez a entradas fora do limite em comandos MAIL e RCPT, e validações de formato conservadoras para endereços. Respeitar gramática mínima do RFC 821 e rejeitar variantes ambíguas (POSTEL, 1982).
-
FTP. Validação rigorosa de comandos USER/PASS e tratamento de caminhos para evitar travessia de diretórios; desprivilegiar processos de dados (POSTEL, 1985; GRAMPP; MORRIS, 1984).
-
TELNET. Interpretação de comandos de opção com rejeição segura ao encontrar sequências inválidas; separar canal de comando de dados da aplicação, evitando injeções acidentais (POSTEL; REYNOLDS, 1983).
- Mensuração, Calibração e Reprodutibilidade
Para cada módulo, coletamos:
- Contagens de falhas por tipo (limite, inicialização, conversão, estado do protocolo).
- Tempo de correção por falha.
- Cobertura de casos por categoria (limites, caracteres de controle, ordem de comandos).
- Parâmetros $(\alpha,\beta,\gamma)$ ajustados por mínimos quadrados a partir de dados históricos internos, garantindo soma unitária e não negatividade com restrições lineares simples (SNEDECOR; COCHRAN, 1967).
Os artefatos incluem planos de teste, listas de verificação de inspeção, relatórios de lint, diffs de correções e tabelas sumárias, em conformidade com boas práticas de coleta (BASILI; WEISS, 1984).
- Ameaças à Validade
-
Interna. Possível confusão entre efeitos de inspeção e efeitos de teste; mitigamos por aplicação alternada e controle por módulo (FAGAN, 1976; MYERS, 1979).
-
Externa. Generalização limitada a ambientes UNIX 4.2BSD/VAX e a serviços específicos; mitigamos por detalhamento metodológico.
-
Construto. Métricas de densidade de falhas dependem de definição do que é “crítico”; usamos classificação baseada em impactos sobre confidencialidade, integridade e disponibilidade (BIBA, 1977; BELL; LAPADULA, 1973).
- Conclusão
Demonstramos que um modelo operacional integrado — especificação formal, inspeções, análise estática com lint, testes dinâmicos estruturados e auditoria — reduz significativamente a exposição a vulnerabilidades de implementação em serviços de rede em 1986. Em avaliação empírica sobre 380 KLOC de código C em 4.2BSD/VAX, observamos decréscimo de 58% na densidade de falhas críticas e redução de 50% no tempo médio de correção, além de melhora substantiva nas estimativas de risco residual. O método está ancorado em princípios de proteção e modelos formais consolidados, preservando a viabilidade prática do desenvolvimento em ambientes multiusuário. Como trabalhos subsequentes dentro do escopo da época, recomendamos aprofundar a formalização de políticas de integridade em fluxos de dados de aplicações, além de ampliar a instrumentação de auditoria conforme diretrizes do Orange Book.
References
ANDERSON, J. P. Computer Security Technology Planning Study. Bedford, MA: Air Force Electronic Systems Division, 1972. Disponível em: https://apps.dtic.mil/sti/pdfs/AD0765934.pdf
BASILI, V. R.; WEISS, D. M. A Methodology for Collecting Valid Software Engineering Data. IEEE Transactions on Software Engineering, v. SE-10, n. 6, p. 728–738, 1984. Disponível em: https://doi.org/10.1109/TSE.1984.5010212
BELL, D. E.; LAPADULA, L. J. Secure Computer Systems: Mathematical Foundations. Bedford, MA: MITRE, 1973. Disponível em: https://apps.dtic.mil/sti/pdfs/AD0777687.pdf
BIBA, K. J. Integrity Considerations for Secure Computer Systems. Bedford, MA: MITRE, 1977. Disponível em: https://apps.dtic.mil/sti/pdfs/ADA039324.pdf
BISBEY, R.; HOLLINGWORTH, D. Protection Analysis: Final Report. Marina del Rey, CA: ISI/USC, 1978. Disponível em: https://apps.dtic.mil/sti/pdfs/ADA056805.pdf
BOEHM, B. W. Software Engineering Economics. Englewood Cliffs, NJ: Prentice-Hall, 1981. Disponível em: https://archive.org/details/softwareengineeringeconomics
CERF, V. G.; KAHN, R. E. A Protocol for Packet Network Intercommunication. IEEE Transactions on Communications, v. 22, n. 5, p. 637–648, 1974. Disponível em: https://doi.org/10.1109/TCOM.1974.1092259
DENNING, D. E. A Lattice Model of Secure Information Flow. Communications of the ACM, v. 19, n. 5, p. 236–243, 1976. Disponível em: https://doi.org/10.1145/360051.360056
DENNING, D. E. Cryptography and Data Security. Reading, MA: Addison-Wesley, 1982. Disponível em: https://archive.org/details/cryptographydatasecurity
DIFFIE, W.; HELLMAN, M. E. New Directions in Cryptography. IEEE Transactions on Information Theory, v. 22, n. 6, p. 644–654, 1976. Disponível em: https://doi.org/10.1109/TIT.1976.1055638
DOD. Department of Defense Trusted Computer System Evaluation Criteria. DoD 5200.28-STD. Washington, DC: DoD, 1985. Disponível em: https://csrc.nist.gov/csrc/media/publications/conference-paper/1985/12/01/dod-trusted-computer-system-evaluation-criteria/documents/dod85.pdf
DURAN, J. W.; NTAFOS, S. C. An Evaluation of Random Testing. IEEE Transactions on Software Engineering, v. SE-10, n. 4, p. 438–444, 1984. Disponível em: https://doi.org/10.1109/TSE.1984.5010271
FAGAN, M. E. Design and Code Inspections to Reduce Errors in Program Development. IBM Systems Journal, v. 15, n. 3, p. 182–211, 1976. Disponível em: https://doi.org/10.1147/sj.153.0182
GOGUEN, J. A.; MESEGUER, J. Security Policies and Security Models. In: IEEE Symposium on Security and Privacy. Oakland, CA: IEEE, 1982. p. 11–20. Disponível em: https://doi.org/10.1109/SP.1982.10014
GOEL, A. L.; OKUMOTO, K. Time-Dependent Error-Detection Rate Model for Software Reliability and Other Performance Measures. IEEE Transactions on Software Engineering, v. SE-5, n. 4, p. 206–211, 1979. Disponível em: https://doi.org/10.1109/TSE.1979.234183
GRAMPP, F. T.; MORRIS, R. H. UNIX Operating System Security. AT&T Bell Laboratories Technical Journal, v. 63, n. 8, p. 1649–1672, 1984. Disponível em: https://archive.org/details/UNIXOperatingSystemSecurity
HARRISON, M. A.; RUZZO, W. L.; ULLMAN, J. D. Protection in Operating Systems. Communications of the ACM, v. 19, n. 8, p. 461–471, 1976. Disponível em: https://doi.org/10.1145/360303.360333
HOARE, C. A. R. An Axiomatic Basis for Computer Programming. Communications of the ACM, v. 12, n. 10, p. 576–580, 1969. Disponível em: https://doi.org/10.1145/363235.363259
JOHNSON, S. C. Lint, a C Program Checker. Murray Hill, NJ: Bell Laboratories, 1977. Disponível em: https://archive.org/details/unix-programmers-manual-7th-edition/page/n95/mode/2up
KARGER, P. A.; SCHELL, R. R. Multics Security Evaluation: Vulnerability Analysis. ESD-TR-74-193. Bedford, MA: Air Force Electronic Systems Division, 1974. Disponível em: https://apps.dtic.mil/sti/pdfs/ADA018785.pdf
KERNIGHAN, B. W.; RITCHIE, D. M. The C Programming Language. Englewood Cliffs, NJ: Prentice-Hall, 1978. Disponível em: https://archive.org/details/cprogramminglang00kern
LAMPSON, B. W. Protection. ACM SIGOPS Operating Systems Review, v. 8, n. 1, p. 18–24, 1974. Disponível em: https://doi.org/10.1145/775265.775268
MCKUSICK, M. K.; JOY, W. N.; LEFFLER, S. J.; FABRY, R. S. A Fast File System for UNIX. ACM Transactions on Computer Systems, v. 2, n. 3, p. 181–197, 1984. Disponível em: https://doi.org/10.1145/989.990
MORRIS, R.; THOMPSON, K. Password Security: A Case History. Communications of the ACM, v. 22, n. 11, p. 594–597, 1979. Disponível em: https://doi.org/10.1145/359168.359172
MYERS, G. J. The Art of Software Testing. New York: John Wiley & Sons, 1979. Disponível em: https://archive.org/details/artofsoftwaretes00myer
NBS. National Bureau of Standards. Data Encryption Standard (DES). FIPS PUB 46. Washington, DC: U.S. Department of Commerce, 1977. Disponível em: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.46.pdf
NBS. National Bureau of Standards. DES Modes of Operation. FIPS PUB 81. Washington, DC: U.S. Department of Commerce, 1980. Disponível em: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.81.pdf
PARNAS, D. L. On the Criteria To Be Used in Decomposing Systems into Modules. Communications of the ACM, v. 15, n. 12, p. 1053–1058, 1972. Disponível em: https://doi.org/10.1145/361598.361623
POSTEL, J. Internet Protocol. RFC 791. 1981. Disponível em: https://www.rfc-editor.org/rfc/rfc791
POSTEL, J. Simple Mail Transfer Protocol. RFC 821. 1982. Disponível em: https://www.rfc-editor.org/rfc/rfc821
POSTEL, J. File Transfer Protocol (FTP). RFC 959. 1985. Disponível em: https://www.rfc-editor.org/rfc/rfc959
POSTEL, J.; REYNOLDS, J. TELNET Protocol Specification. RFC 854. 1983. Disponível em: https://www.rfc-editor.org/rfc/rfc854
POSTEL, J. Standard for the Format of ARPA Internet Text Messages. RFC 822. 1982. Disponível em: https://www.rfc-editor.org/rfc/rfc822
RITCHIE, D. M.; THOMPSON, K. The UNIX Time-Sharing System. Communications of the ACM, v. 17, n. 7, p. 365–375, 1974. Disponível em: https://doi.org/10.1145/361011.361061
RIVEST, R. L.; SHAMIR, A.; ADLEMAN, L. A Method for Obtaining Digital Signatures and Public-Key Cryptosystems. Communications of the ACM, v. 21, n. 2, p. 120–126, 1978. Disponível em: https://doi.org/10.1145/359340.359342
SALTZER, J. H.; SCHROEDER, M. D. The Protection of Information in Computer Systems. Proceedings of the IEEE, v. 63, n. 9, p. 1278–1308, 1975. Disponível em: https://doi.org/10.1109/PROC.1975.9939
SHANNON, C. E. Communication Theory of Secrecy Systems. Bell System Technical Journal, v. 28, n. 4, p. 656–715, 1949. Disponível em: https://doi.org/10.1002/j.1538-7305.1949.tb00928.x
SNEDECOR, G. W.; COCHRAN, W. G. Statistical Methods. 6. ed. Ames, IA: Iowa State University Press, 1967. Disponível em: https://archive.org/details/StatisticalMethodsSnedecorCochran
SUTHERLAND, D. An Introduction to the Theory of Information Flow. NRL Report 5543. Washington, DC: Naval Research Laboratory, 1986. Disponível em: https://apps.dtic.mil/sti/pdfs/ADA165877.pdf
WHITE, L. J.; COHEN, E. I. A Domain Strategy for Computer Program Testing. IEEE Transactions on Software Engineering, v. SE-6, n. 3, p. 247–257, 1980. Disponível em: https://doi.org/10.1109/TSE.1980.234508
Obs.: Todas as citações no corpo do texto seguem o estilo autor-data da ABNT.