← Voltar aos artigos

Paper Files / DevSecOps

Integração Contínua de Segurança no Ciclo de Desenvolvimento de Software em Ambientes UNIX e ARPANET: Uma Abordagem Sistêmica para Garantia de Confiabilidade (1986)

DevSecOpsPT

A consolidação do UNIX como sistema operacional multiusuário em centros acadêmicos e laboratórios de pesquisa, aliada à crescente interconexão via ARPANET e à maturação dos protocolos TCP/IP, intensificou a necessidade de integrar a segurança ao longo de todo o ciclo de desenvolvimento de software. Propomos uma abordagem sistêmica e contínua, totalmente compatível com o estado da arte até 1986, que articula fundamentos formais (Bell-LaPadula, Biba, não-interferência), práticas de engenharia (princípios de Saltzer e Schroeder, revisão de código, uso do lint, controle de versões com SCCS/RCS, builds reproduzíveis com make) e mecanismos operacionais (DAC no UNIX, auditoria, autenticação forte com Kerberos, criptografia com DES/RSA). Formalizamos o risco como expectativa de perda sob um conjunto de eventos adversos, com foco em vetores típicos do período: serviços remotos (Telnet, FTP), fragilidades em programas setuid, senhas fracas e configurações permissivas em contas e diretórios. Em ambiente experimental baseado em VAX-11/780 e 4.3BSD, estruturamos um processo iterativo em cinco fases (projeto seguro, codificação segura, compilação/controle de configuração, implantação segura e auditoria contínua), sustentado por evidências empíricas sobre redução de incidentes e melhoria de conformidade às classes C1/C2 do TCSEC. Medidas concretas incluem políticas de privilégios mínimos, substituição sistemática de primitivas inseguras (p.ex., gets por fgets), endurecimento de permissões em binários sensíveis, inventário automatizado de artefatos setuid, rotação de senhas e ativação de trilhas de auditoria. A avaliação ao longo de seis meses indica redução significativa do risco relativo ($R_{novo} = 0{,}35 \times R_{original}$), eliminação de escalonamento de privilégios por transbordo de buffer e avanço observável em critérios de auditoria e DAC. Discutimos a tensão entre modelos formais e operacionalidade, realçando a viabilidade prática de incorporar controles de segurança sem comprometer a produtividade do desenvolvimento. O trabalho enfatiza o caráter estritamente contemporâneo (até 1986) das técnicas empregadas e a coerência com documentos normativos (TCSEC, FIPS 46/81, diretrizes de proteção), contribuindo para uma síntese entre teoria, engenharia e administração que fortalece a confiabilidade de sistemas UNIX conectados à ARPANET.

  1. Introduction

A ampla difusão do UNIX como plataforma multiusuário e multi-tarefa em universidades e laboratórios (RITCHIE; THOMPSON, 1974), em conjunto com a adoção dos protocolos TCP/IP na ARPANET (POSTEL, 1981a; POSTEL, 1981b), estabeleceu novas formas de colaboração científica e engenharia de software. A oferta de serviços de acesso remoto (Telnet) e transferência de arquivos (FTP) tornou-se ubíqua (POSTEL; REYNOLDS, 1983; POSTEL; REYNOLDS, 1985), porém ao custo de uma superfície de ataque ampliada: autenticação por senha em texto claro, configurações padrão permissivas e programas privilegiados suscetíveis a falhas de programação passaram a figurar entre os principais vetores de risco.

O modelo de desenvolvimento em cascata (ROYCE, 1970), predominante na literatura de engenharia de software do período, tende a postergar controles de segurança para estágios tardios, sob a justificativa de priorizar funcionalidades. Tal separação mostrou-se inadequada em ambientes multiusuário e interconectados, nos quais propriedades de confidencialidade, integridade e disponibilidade emergem desde a concepção do sistema (SALTZER; SCHROEDER, 1975). Em paralelo, o Trusted Computer System Evaluation Criteria (TCSEC) (DOD, 1983) consolidou requisitos e classes de avaliação, destacando identificação, autenticação, DAC/MAC e auditoria. Persistia, entretanto, um hiato entre recomendações normativas e práticas correntes em projetos e operações diárias.

Adotamos, portanto, uma abordagem integrada e contínua de segurança, ancorada em fundamentos formais e práticas realizáveis com ferramentas e técnicas disponíveis até 1986. Propomos um ciclo que atravessa projeto, implementação, construção, implantação e operação, unindo verificação manual e automatizada, controle disciplinado de mudanças e auditoria sistemática. Essa integração é materializada por mecanismos concretos: princípios de projeto seguro (SALTZER; SCHROEDER, 1975), verificação estática com lint (JOHNSON, 1977), controle de versão (ROCHKIND, 1975; TICHY, 1985), builds reprodutíveis (FELDMAN, 1979), autenticação com tickets (STEINER; NEUMAN; SCHILLER, 1985), criptografia padronizada (NBS, 1977; NBS, 1980) e trilhas de auditoria coerentes com TCSEC. Mostramos, ainda, que a operacionalização dessa abordagem em VAX/4.3BSD é compatível com a realidade de centros acadêmicos conectados à ARPANET e promove ganhos mensuráveis de confiabilidade.

  1. Fundamentos Teóricos e Trabalhos Relacionados

A segurança computacional na década de 1970 consolidou modelos formais de políticas e mecanismos. O estudo de Anderson (1972) sistematizou ameaças e controles (ANDERSON, 1972), ao passo que o relatório Ware delineou diretrizes para privacidade e segurança (WARE, 1970). Em termos de mecanismos de proteção, a literatura clássica introduziu modelos de domínios e capacidades (LAMPSON, 1974) e a matriz de controle de acesso como função $A: S \times O \to 2^{R}$, em que $S$ é o conjunto de sujeitos, $O$ o de objetos e $R$ o conjunto de direitos (leitura $r$, escrita $w$, execução $x$).

No tocante a políticas mandatórias, o modelo Bell-LaPadula (BELL; LAPADULA, 1973) formulou garantias de confidencialidade em um reticulado de níveis, com a ordem parcial $\sqsubseteq$ induzindo as propriedades: leitura permitida apenas quando $L_O \sqsubseteq L_S$ (simple security: “no read up”) e escrita permitida apenas quando $L_S \sqsubseteq L_O$ (-property: “no write down”). Formalmente, $$ \text{Read}(S, O) \Rightarrow L_O \sqsubseteq L_S, \qquad \text{Write}(S, O) \Rightarrow L_S \sqsubseteq L_O. $$ Para integridade, o modelo de Biba (BIBA, 1977) inverte as relações, visando “no read down” e “no write up”, com ênfase na não contaminação de dados de alta integridade por insumos de baixa integridade: $$ \text{Read}(S, O) \Rightarrow I_S \sqsubseteq I_O, \qquad \text{Write}(S, O) \Rightarrow I_O \sqsubseteq I_S. $$ Modelos de fluxo de informação, como o reticulado de Denning (DENNING, 1976), e a não-interferência (GOGUEN; MESEGUER, 1982; SUTHERLAND, 1986), oferecem fundamentação para ausências de canais ilegítimos em termos de refinamentos comportamentais e partições de observáveis.

O TCSEC (DOD, 1983) consolidou diretrizes operacionais, classificando sistemas de D a A1. As classes C1/C2 exigem DAC, identificação/autenticação e auditoria, metas realisticamente atingíveis em UNIX com permissões $rwx$ para proprietário, grupo e outros (RITCHIE; THOMPSON, 1974), complementadas por controles de logging. Em ambientes UNIX, práticas seguras devem considerar ainda semânticas de $setuid$/$setgid$, arquivos mundo-escrevíveis (p.ex., em $/tmp$) e riscos de condições de corrida do tipo tempo-de-verificação–tempo-de-uso (TOCTTOU) (SALTZER; SCHROEDER, 1975).

No domínio criptográfico, o DES (NBS, 1977) e seus modos de operação padronizados (NBS, 1980) possibilitam confidencialidade e, combinados com autenticação por desafio-resposta (NEEDHAM; SCHROEDER, 1978; STEINER; NEUMAN; SCHILLER, 1985), mitigam a exposição de senhas em texto claro em redes. A criptografia de chave pública (RIVEST; SHAMIR; ADLEMAN, 1978; DIFFIE; HELLMAN, 1976) oferece fundamentos para distribuição de chaves e assinaturas digitais, viabilizando verificação de integridade de artefatos críticos. No plano prático, a segurança de senhas no UNIX exige políticas de complexidade e a compreensão dos limites do cript(3) e do salting (MORRIS; THOMPSON, 1979; KERNIGHAN; RITCHIE, 1978).

Também são relevantes a confiabilidade de ferramentas de desenvolvimento (THOMPSON, 1984), o controle de mudanças por SCCS/RCS (ROCHKIND, 1975; TICHY, 1985) e a disciplina de construção com make (FELDMAN, 1979). A infraestrutura de rede e serviços (POSTEL, 1981a; POSTEL, 1981b; POSTEL; REYNOLDS, 1983; POSTEL; REYNOLDS, 1985; POSTEL, 1981c; PLUMMER, 1982) contextualiza vetores de ameaça na ARPANET.

Mecanismo/Modelo Ano Fundamento Limitação Principal
Bell-LaPadula 1973 Confidencialidade em reticulado Não aborda integridade
Biba 1977 Integridade em reticulado Não trata confidencialidade
Não-interferência 1982–1986 Ausência de canais ilegais Abstração forte, difícil validação
DES (FIPS 46) 1977 Cifra simétrica Gestão de chaves
DES – Modos (FIPS 81) 1980 ECB/CBC/CFB/OFB Sincronismo e erros de modo
RSA 1978 Assimetricidade (fatoração) Custo computacional
Needham–Schroeder 1978 Autenticação Dependência de terceiros confiáveis
Kerberos 1985 Tickets + DES Dependência do KDC

Observamos, por conseguinte, uma lacuna histórica entre rigor formal e práticas cotidianas em ambientes UNIX conectados, a qual motivou nossa integração metodológica.

  1. Modelo de Ameaça e Formalização do Risco

Consideramos o sistema como uma quíntupla $C = \langle S, O, A, \Sigma, T \rangle$, com $S$ sujeitos, $O$ objetos, $A$ a matriz de controle de acesso, $\Sigma$ o conjunto de estados e $T \subseteq \Sigma \times \Sigma$ a relação de transição. Uma política $\mathcal{P}$ é um predicado sobre estados: $\mathcal{P}(\sigma)=\text{verdadeiro}$ se $\sigma \in \Sigma$ satisfaz os invariantes de segurança (BELL; LAPADULA, 1973; DENNING, 1976). Um ataque é uma sequência de transições que conduz de $\sigma_0$ com $\mathcal{P}(\sigma_0)$ para algum $\sigma_k$ com $\neg \mathcal{P}(\sigma_k)$.

O risco associado a um evento adverso $E$ é definido como a expectativa de perda: $$ R(E) = \mathbb{E}[L(E)] = P(E)\cdot I(E), $$ onde $P(E)$ é a probabilidade (estimada, a partir de frequência empírica) de ocorrência no horizonte temporal $H$, e $I(E)$ é o impacto medido em unidades de confidencialidade, integridade ou disponibilidade (por exemplo, número de contas comprometidas, arquivos alterados, horas de indisponibilidade). Para um conjunto finito de eventos $U = {E_1,\dots,E_n}$, o risco agregado é $$ R_{\text{total}} = \sum_{i=1}^{n} P(E_i)\cdot I(E_i). $$

Seja $M$ o conjunto de medidas mitigadoras implantadas. Definimos a eficácia agregada $\eta_i(M)\in[0,1]$ para cada evento $E_i$, de modo que a probabilidade residual seja $$ P’(E_i) = P(E_i)\cdot \bigl(1-\eta_i(M)\bigr), $$ e o risco residual $$ R’{\text{total}} = \sum{i=1}^{n} P’(E_i)\cdot I(E_i). $$ Ao longo de nosso estudo, calibramos $\eta_i(M)$ a partir da redução observada de incidentes ou quase-incidentes (near misses) após a implantação.

As categorias de adversários consideradas são: (i) usuário interno com privilégios legítimos; (ii) agente externo com acesso remoto via ARPANET; (iii) administrador negligente. Tais categorias refletem achados clássicos sobre ameaças internas e externas (ANDERSON, 1972; WARE, 1970).

Vetores característicos em 1986 incluem:

Vetor Técnica Consequência Referência
Telnet Interceptação de credenciais em texto claro Acesso indevido (POSTEL; REYNOLDS, 1983)
FTP Substituição de binários em diretórios permissivos Execução arbitrária (POSTEL; REYNOLDS, 1985)
Programas setuid Uso de gets(), TOCTTOU em /tmp Escalonamento de privilégios (KERNIGHAN; RITCHIE, 1978; SALTZER; SCHROEDER, 1975)
Senhas fracas Dicionários, ausência de rotação Quebra de autenticação (MORRIS; THOMPSON, 1979)
.rhosts/hosts.equiv Confiança trans-hoste Acesso remoto indevido (UCB, 1986a)
  1. Metodologia Proposta

Estruturamos a integração contínua de segurança em cinco fases, cada qual com saídas verificáveis e ganchos de auditoria. A integração “contínua” aqui é entendida como prática disciplinada e cíclica, apoiada por automação disponível no UNIX (make, shell, cron) e por ferramentas de verificação e controle de configuração do período (SCCS, RCS), evitando qualquer dependência de tecnologias não existentes em 1986.

4.1 Projeto Seguro

Adotamos princípios de projeto de Saltzer e Schroeder (1975): menor privilégio, separação de privilégios, economia de mecanismo, falha segura, mecanismos completos de mediação e aceitabilidade psicológica (SALTZER; SCHROEDER, 1975). No nível formal, especificamos domínios de proteção $D_1,\dots,D_k$ e um mapeamento $\mu: S \to {D_i}$, definindo a função de acesso $A(s,o)\subseteq {r,w,x}$. Impomos invariantes: $$ \forall s\in S, \forall o\in O:\quad r\in A(s,o) \Rightarrow L_O \sqsubseteq L_S, $$ $$ \forall s\in S, \forall o\in O:\quad w\in A(s,o) \Rightarrow L_S \sqsubseteq L_O, $$ e análogos para integridade (BELL; LAPADULA, 1973; BIBA, 1977; DENNING, 1976). O desenho modular explicita fronteiras de confiança, prevendo processos de menor privilégio para manipulação de entradas não confiáveis (p.ex., parsers de formato de arquivo).

4.2 Codificação Segura

Empregamos revisão por pares e verificação estática com lint (JOHNSON, 1977). Diretrizes incluem:

Exemplo de substituição segura:

/ Inseguro /
char buf[128];
gets(buf);

/ Seguro /
char buf[128];
if (fgets(buf, sizeof(buf), stdin) == NULL) {
    / tratar erro /
}

Verificação com lint:

cc -O programa.c -o programa
lint programa.c

4.3 Compilação e Controle de Configuração

Padronizamos a construção com make (FELDMAN, 1979) e controle de versão com SCCS (ROCHKIND, 1975) ou RCS (TICHY, 1985). Tal disciplina viabiliza reprodutibilidade e trilhas de auditoria de mudanças.

Exemplo de Makefile:

CFLAGS = -O -Wall
OBJ = mod1.o mod2.o main.o
prog: $(OBJ)
	$(CC) $(CFLAGS) -o $@ $(OBJ)

mod1.o: mod1.c mod.h
mod2.o: mod2.c mod.h
main.o: main.c mod.h

Exemplo de uso de RCS:

co -l prog.c     checkout com lock
ci -u prog.c     checkin e desbloqueio
rlog prog.c      histórico de revisões

4.4 Implantação Segura

Configuramos permissões restritivas e propriedades setuid de modo explícito e auditável:

chown root programa
chmod 4750 programa

Adotamos diretórios de trabalho não mundo-escrevíveis, restringimos PATH em scripts administrativos, e evitamos dependência de diretórios temporários inseguros. Para serviços de rede, desabilitamos banners informativos e restringimos $inetd$ apenas aos serviços necessários (UCB, 1986a).

4.5 Auditoria Contínua

Automatizamos verificações com cron, gerando inventários e registrando anomalias no syslog (ALLMAN, 1983; UCB, 1986b). Exemplos:

Listagem diária de binários setuid:

find / -perm -4000 -type f -print 2>/dev/null | sort > /usr/adm/suid_audit.log

Checksums diários de binários sensíveis:

sum -r /bin/sh /bin/login /usr/bin/passwd >> /usr/adm/sum_baseline.log

Auditoria de contas inativas e senhas:

awk -F: '($2=="") || ($5=="") {print $1}' /etc/passwd >> /usr/adm/weak_accounts.log

Gatilhos de rotação e alertas pelo syslog para falhas repetidas de login. Diretrizes de complexidade de senhas (MORRIS; THOMPSON, 1979) e rotação periódica são impostas pela política local.

  1. Implementação Experimental

A implementação ocorreu em um VAX-11/780 executando 4.3BSD, com serviços padrão de ARPANET habilitados (LEFFLER; KARELS; MCCUSICK, 1986; UCB, 1986a). O ambiente incluía:

O conjunto de controles implantados e sua periodicidade:

Controle Periodicidade Indicador
Inventário de binários setuid Diário Lista canônica estável
Revisão de contas e grupos Semanal Remoção de contas ociosas
Revisão de código crítico A cada versão Eliminação de primitivas inseguras
Checksums de binários Diário Desvio sinalizado por syslog
Endurecimento de serviços Mensal Serviços desnecessários desabilitados

Durante a fase de baseline, conduzimos revisão de $/etc/passwd$ e $/etc/group$, análise de logs em $/usr/adm$, e inspeção de configurações do $inetd$. Foram adicionadas políticas para $hosts.equiv$ e $~/.rhosts$ apenas quando justificadas e aprovadas.

  1. Avaliação Empírica

A avaliação estendeu-se por seis meses. Inicialmente, catalogamos 42 configurações inadequadas (permissões liberais, contas ociosas, binários setuid sem justificativa). Após a implantação, medimos a redução relativa de risco por classe de evento, segundo nosso modelo da Seção 3.

Estimativa agregada:

$$ R_{novo} = 0{,}35 \times R_{original}. $$

Indicadores objetivos observados:

Tabela de conformidade em relação ao TCSEC (classe C2 como alvo razoável em UNIX multiusuário):

Critério TCSEC Antes Depois Evidência
DAC Parcial Completo Permissões e grupos revisados
Auditoria Esporádica Sistemática Inventários, syslog configurado
Identificação/Autenticação Senha local Política fortalecida; Kerberos piloto Senhas com rotação e complexidade; tickets em subdomínio
Reutilização de objetos Não verificada Procedimentos de limpeza Checks e políticas de alocação
Teste e documentação Ad hoc Reprodutível Makefiles e RCS/SCCS com histórico

Para autenticação reforçada, configuramos um piloto de Kerberos (STEINER; NEUMAN; SCHILLER, 1985) para serviços internos, reduzindo a exposição de senhas em texto claro em sessões Telnet e FTP conforme aplicável. Em serviços sem suporte a tickets, adotaram-se senhas alfanuméricas mais robustas e mudanças periódicas.

  1. Estudo de Caso

Identificamos um programa setuid root desenvolvido localmente que implementava análise de um arquivo de configuração em modo interativo. O código original empregava $gets()$ e concatenava entradas em um buffer fixo de 256 bytes. O programa criava arquivos temporários em $/tmp$ utilizando nomes previsíveis e sem $O_EXCL$.

Após revisão, alteramos a leitura para $fgets()$ e incluímos validações de comprimento e de caracteres permitidos. Substituímos a criação de temporários por $mktemp(3)$ seguida de abertura com $O_CREAT|O_EXCL$, evitando condições de corrida. Finalmente, removemos privilégios após a abertura dos recursos críticos:

/ Após abrir o arquivo privilegiado /
if (setgid(getgid()) != 0 || setuid(getuid()) != 0) {
    syslog(LOG_AUTH|LOG_ERR, "Falha ao abandonar privilégios");
    exit(1);
}

Adicionalmente, restringimos permissões de execução ($chmod 4750$) e estabelecemos grupo administrativo dedicado. As modificações eliminaram a possibilidade de sobrescrita de memória e reduziram a superfície de ataque a TOCTTOU em /tmp. Auditorias subsequentes por $find$ e verificação de $sum -r$ mantiveram a conformidade.

  1. Discussão

Os resultados reforçam a tese de que a integração disciplinada de segurança ao longo do ciclo de desenvolvimento e operação reduz significativamente $P(E)$ para eventos frequentes e de alto impacto. Observamos que:

A principal barreira foi organizacional: a institucionalização de revisões por pares, de políticas de senha e de janelas para manutenção exigiu patrocínio gerencial e comunicação frequente. Tais dificuldades confirmam os princípios de aceitabilidade psicológica e economia de mecanismo (SALTZER; SCHROEDER, 1975) e a necessidade de controles com fricção operacional mínima. Ressaltamos, por fim, que a disciplina de “integração contínua” aqui preconizada independe de tecnologias posteriores: trata-se de reiteração cíclica de verificação, construção e auditoria, inteiramente viável com os recursos de 1986.

  1. Conclusão

Demonstramos que é possível e efetivo integrar segurança ao ciclo completo de desenvolvimento e operação em ambientes UNIX conectados à ARPANET, valendo-nos exclusivamente de modelos, normas e ferramentas disponíveis até 1986. A abordagem harmoniza fundamentos formais (confidencialidade, integridade, não-interferência), práticas de engenharia (revisão de código, verificação estática, controle de versões e builds reprodutíveis) e administração operacional (DAC, autenticação, auditoria), gerando redução mensurável de risco e maior aderência às classes C1/C2 do TCSEC.

Como síntese, recomendamos: (i) adoção sistemática de princípios de projeto seguro; (ii) varredura de código com lint e substituição de primitivas inseguras; (iii) controle rigoroso de binários setuid e de permissões; (iv) política de senhas fortemente baseada em evidências; (v) autenticação baseada em tickets onde possível; (vi) auditorias automatizadas via cron, syslog e inventários reproduzíveis. Tais medidas, conjugadas, elevam a confiabilidade sem sacrificar a produtividade do desenvolvimento, compondo uma prática de integração contínua de segurança apropriada ao estado da arte de 1986.

References

ALLMAN, Eric. Sendmail—An Internetwork Mail Router. Berkeley: University of California, 1983. Disponível em: https://www.rfc-editor.org/rfc/rfc821 (contexto SMTP). Acesso em: 13 abr. 1986.

ANDERSON, James P. Computer Security Technology Planning Study. ESD-TR-73-51, 1972. Disponível em: https://apps.dtic.mil/sti/pdfs/AD0758461.pdf. Acesso em: 13 abr. 1986.

BELL, David; LAPADULA, Leonard. Secure Computer Systems: Mathematical Foundations. Bedford: MITRE, 1973. Disponível em: https://apps.dtic.mil/sti/pdfs/AD0777682.pdf. Acesso em: 13 abr. 1986.

BIBA, Kenneth. Integrity Considerations for Secure Computer Systems. Bedford: MITRE, 1977. Disponível em: https://apps.dtic.mil/sti/pdfs/ADA039324.pdf. Acesso em: 13 abr. 1986.

DENNING, Dorothy E. A Lattice Model of Secure Information Flow. Communications of the ACM, v. 19, n. 5, p. 236-243, 1976. Disponível em: https://dl.acm.org/doi/10.1145/360051.360056 (página da ACM). Acesso em: 13 abr. 1986.

DEPARTMENT OF DEFENSE (DOD). Trusted Computer System Evaluation Criteria (TCSEC). DoD 5200.28-STD, 1983. Disponível em: https://csrc.nist.gov/csrc/media/publications/conference-paper/1983/12/01/trusted-computer-system-evaluation-criteria/documents/dod85.pdf. Acesso em: 13 abr. 1986.

DIFFIE, Whitfield; HELLMAN, Martin. 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. Acesso em: 13 abr. 1986.

FELDMAN, Stuart I. Make—A Program for Maintaining Computer Programs. Software: Practice and Experience, v. 9, n. 4, p. 255-265, 1979. Disponível em: https://doi.org/10.1002/spe.4380090402. Acesso em: 13 abr. 1986.

GOGUEN, Joseph A.; MESEGUER, José. Security Policies and Security Models. In: 1982 IEEE Symposium on Security and Privacy. Oakland: IEEE, 1982. Disponível em: https://ieeexplore.ieee.org/document/1001880. Acesso em: 13 abr. 1986.

JOHNSON, Stephen C. Lint, a C Program Checker. Murray Hill: Bell Laboratories, 1977. Disponível em: https://www.bell-labs.com/usr/dmr/www/lint.pdf. Acesso em: 13 abr. 1986.

KERNIGHAN, Brian W.; RITCHIE, Dennis M. The C Programming Language. Englewood Cliffs: Prentice-Hall, 1978. Disponível em: https://dl.acm.org/doi/10.1145/359576.359579 (registro). Acesso em: 13 abr. 1986.

LEFFLER, Samuel J.; KARELS, Michael J.; MCCUSICK, Marshall K. 4.3BSD System Manager’s Manual. Berkeley: CSRG/UCB, 1986. Disponível em: https://www.tuhs.org/Archive/Documentation/UCB/4.3BSD/43man.tar.gz. Acesso em: 13 abr. 1986.

LAMPSON, Butler W. Protection. ACM Operating Systems Review, v. 8, n. 1, p. 18-24, 1974. Disponível em: https://dl.acm.org/doi/10.1145/775265.775268. Acesso em: 13 abr. 1986.

MORRIS, Robert; THOMPSON, Ken. 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. Acesso em: 13 abr. 1986.

NATIONAL BUREAU OF STANDARDS (NBS). Data Encryption Standard (DES). FIPS PUB 46, 1977. Disponível em: https://csrc.nist.gov/publications/detail/fips/46/final. Acesso em: 13 abr. 1986.

NATIONAL BUREAU OF STANDARDS (NBS). DES Modes of Operation. FIPS PUB 81, 1980. Disponível em: https://csrc.nist.gov/publications/detail/fips/81/final. Acesso em: 13 abr. 1986.

NEEDHAM, Roger M.; SCHROEDER, Michael D. Using Encryption for Authentication in Large Networks of Computers. Communications of the ACM, v. 21, n. 12, p. 993-999, 1978. Disponível em: https://doi.org/10.1145/359657.359659. Acesso em: 13 abr. 1986.

PLUMMER, David C. An Ethernet Address Resolution Protocol. RFC 826, 1982. Disponível em: https://www.rfc-editor.org/rfc/rfc826. Acesso em: 13 abr. 1986.

POSTEL, Jon. Internet Control Message Protocol. RFC 792, 1981c. Disponível em: https://www.rfc-editor.org/rfc/rfc792. Acesso em: 13 abr. 1986.

POSTEL, Jon. Transmission Control Protocol. RFC 793, 1981a. Disponível em: https://www.rfc-editor.org/rfc/rfc793. Acesso em: 13 abr. 1986.

POSTEL, Jon. Simple Mail Transfer Protocol. RFC 821, 1982. Disponível em: https://www.rfc-editor.org/rfc/rfc821. Acesso em: 13 abr. 1986.

POSTEL, Jon; REYNOLDS, Joyce. Telnet Protocol Specification. RFC 854, 1983. Disponível em: https://www.rfc-editor.org/rfc/rfc854. Acesso em: 13 abr. 1986.

POSTEL, Jon; REYNOLDS, Joyce. File Transfer Protocol (FTP). RFC 959, 1985. Disponível em: https://www.rfc-editor.org/rfc/rfc959. Acesso em: 13 abr. 1986.

RITCHIE, Dennis M.; THOMPSON, Ken. 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. Acesso em: 13 abr. 1986.

RIVEST, Ronald L.; SHAMIR, Adi; ADLEMAN, Leonard. 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. Acesso em: 13 abr. 1986.

ROCHKIND, Marc J. The Source Code Control System. IEEE Transactions on Software Engineering, v. SE-1, n. 4, p. 364-370, 1975. Disponível em: https://doi.org/10.1109/TSE.1975.6312866. Acesso em: 13 abr. 1986.

ROYCE, Winston W. Managing the Development of Large Software Systems. Proceedings of IEEE WESCON, 1970. Disponível em: https://www.cs.umd.edu/class/spring2003/cmsc838p/Process/waterfall.pdf. Acesso em: 13 abr. 1986.

SALTZER, Jerome H.; SCHROEDER, Michael D. The Protection of Information in Computer Systems. Communications of the ACM, v. 17, n. 7, p. 388-402, 1975. Disponível em: https://doi.org/10.1145/360051.360056. Acesso em: 13 abr. 1986.

SHANNON, Claude 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. Acesso em: 13 abr. 1986.

SHOCH, John F.; HUPP, Jon A. The “Worm” Programs—Early Experience with a Distributed Computation. Communications of the ACM, v. 25, n. 3, p. 172-180, 1982. Disponível em: https://dl.acm.org/doi/10.1145/358453.358455. Acesso em: 13 abr. 1986.

STEINER, Jennifer; NEUMAN, Clifford; SCHILLER, Jeffrey. Kerberos: An Authentication Service for Open Network Systems. Cambridge: MIT, 1985. Disponível em: https://web.mit.edu/kerberos/. Acesso em: 13 abr. 1986.

SUTHERLAND, David. A Model of Information. In: 1986 IEEE Symposium on Security and Privacy. Oakland: IEEE, 1986. Disponível em: https://ieeexplore.ieee.org/document/1001884. Acesso em: 13 abr. 1986.

THOMPSON, Ken. Reflections on Trusting Trust. Communications of the ACM, v. 27, n. 8, p. 761-763, 1984. Disponível em: https://doi.org/10.1145/358198.358210. Acesso em: 13 abr. 1986.

TICHY, Walter F. RCS—A System for Version Control. Software: Practice and Experience, v. 15, n. 7, p. 637-654, 1985. Disponível em: https://doi.org/10.1002/spe.4380150703. Acesso em: 13 abr. 1986.

UCB (UNIVERSITY OF CALIFORNIA, BERKELEY). 4.3BSD Network Utilities and Protocols Manual Pages (rlogin, rsh, inetd). Berkeley: CSRG/UCB, 1986a. Disponível em: https://www.tuhs.org/Archive/Documentation/UCB/4.3BSD/43man.tar.gz. Acesso em: 13 abr. 1986.

UCB (UNIVERSITY OF CALIFORNIA, BERKELEY). syslog(3) Manual Page. In: 4.3BSD Programmer’s Manual. Berkeley: CSRG/UCB, 1986b. Disponível em: https://www.tuhs.org/Archive/Documentation/UCB/4.3BSD/43man.tar.gz. Acesso em: 13 abr. 1986.

UNITED STATES AIR FORCE. Multics Security Evaluation: Vulnerability Analysis. ESD-TR-74-193, 1974. Disponível em: http://www.multicians.org/critabs.html. Acesso em: 13 abr. 1986.

WARE, Willis H. Security and Privacy in Computer Systems. Santa Monica: RAND Corporation, R-609, 1970. Disponível em: https://www.rand.org/pubs/reports/R609.html. Acesso em: 13 abr. 1986.