← Voltar aos artigos

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)

AppSecPT

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

  1. 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).

  1. 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.

Este conjunto de obras define a fronteira do conhecimento em 1986 e norteia nosso desenho metodológico e avaliação empírica.

  1. 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:

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).

  1. Metodologia Proposta

A metodologia integra cinco camadas, alinhadas ao estado da arte e da prática em 1986:

  1. 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).

  2. 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).

  3. 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).

  4. 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).

  5. 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

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).

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

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)$:

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).

  1. 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:

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.

  1. 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.

  1. 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).

  1. 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:

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).

  1. Diretrizes Operacionais para 1986

Com base nos resultados, sintetizamos diretrizes pragmáticas compatíveis com 1986:

  1. Aderência aos Critérios do DOD (1985)

A metodologia alinha-se a controles das classes C2/B1 do Orange Book:

  1. Ameaças e Respostas Específicas de Protocolo
  1. Mensuração, Calibração e Reprodutibilidade

Para cada módulo, coletamos:

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).

  1. Ameaças à Validade
  1. 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.