Paper Files / DevSecOps
Integração entre Desenvolvimento e Segurança de Sistemas: Fundamentos Teóricos e Práticos para Engenharia de Software Seguro (1986)
A intensificação do uso de sistemas de tempo‑compartilhado, a expansão da ARPANET e a consolidação de sistemas operacionais multiusuário tornaram evidentes, na década de 1970 e meados de 1980, as limitações de abordagens ad hoc de segurança. Defendemos, com base no estado da arte até 1986, que a segurança deve ser integrada desde a especificação, passando pelo projeto e implementação, até a operação, como propriedade intrínseca do sistema. Propomos um arcabouço unificado que combina modelos formais (Bell‑LaPadula para confidencialidade, Biba para integridade, modelos de fluxo de informação em reticulado, não‑interferência e modelos de proteção como matriz de acesso, HRU e capacidades), criptografia consolidada (DES e seus modos; Diffie‑Hellman, RSA e ElGamal para estabelecimento de chaves e assinatura), mecanismos de sistema operacional (monitor de referência, TCB, ACLs e capacidades) e práticas de engenharia de software (lógica de Hoare, invariantes, verificação parcial, controle de versões e auditoria). Demonstramos como especificações de políticas podem ser mapeadas em mecanismos concretos, e como propriedades de segurança podem ser tratadas como invariantes preservados por transformações do programa, com provas informais inspiradas em lógicas de programas. Discutimos vulnerabilidades empiricamente observadas até 1986 — senhas fracas, erros de memória e manipulação de ponteiros em C, condições de corrida e abuso de serviços de rede — e apresentamos controles técnicos respaldados por critérios e normas contemporâneas (TCSEC, FIPS). Exibimos exemplos reprodutíveis em ambientes UNIX (configuração de permissões, umask, desativação de serviços via inetd, process accounting) e técnicas de auditoria estatística elementar inspiradas em propostas pioneiras de monitoramento. Por fim, relacionamos exigências do TCSEC (classes C a A1) com artefatos de desenvolvimento, destacando o papel de especificações formais e de evidências de verificação na elevação do nível de confiança. O texto visa fornecer, de forma rigorosa e historicamente fiel ao ano de 1986, fundamentos teóricos e diretrizes práticas para a integração efetiva entre desenvolvimento e segurança de sistemas, evitando anacronismos tecnológicos e consolidando um caminho viável para a construção de software confiável em ambientes multiusuário e em redes de pacotes.
- Introduction
A crescente interconexão de sistemas de tempo‑compartilhado, impulsionada por redes de pacotes como a ARPANET e por ambientes multiusuário (e.g., UNIX), expôs a inadequação de controles ad hoc de segurança. Relatórios fundacionais, como o estudo de planejamento tecnológico de segurança computacional (ANDERSON, 1972) e análises subsequentes de monitoramento e vigilância (ANDERSON, 1980), já evidenciavam que abordagens reativas eram insuficientes para prevenir uso indevido e acessos não autorizados. Em paralelo, princípios de proteção formulados por Saltzer e Schroeder (SALTZER; SCHROEDER, 1975) consolidaram a noção de que a segurança deve ser tratada como propriedade de projeto, não como aditamento tardio.
Sustentamos que requisitos de segurança precisam ser formalizados desde a especificação inicial, conectando políticas a mecanismos concretos sob evidências de correção. Esse entendimento está em consonância com os critérios do Departamento de Defesa dos Estados Unidos, consolidados no TCSEC (DOD, 1985), que enfatizam modelos formais, monitor de referência e evidências de verificação, especialmente para as classes B e A.
Este trabalho apresenta um arcabouço teórico‑prático, à luz do estado da arte até 1986, que integra: (i) modelos formais de segurança (confidencialidade, integridade, não‑interferência e proteção), (ii) criptografia (DES, modos de operação e criptografia de chave pública), (iii) mecanismos de sistema operacional (ACLs, capacidades, TCB), (iv) métodos formais de verificação, e (v) processos de engenharia de software e auditoria operacional. Nossa proposta visa à construção de sistemas nos quais propriedades de segurança sejam invariantes mantidos ao longo do ciclo de vida do software.
- Contexto histórico e fundamentos
A trajetória de segurança computacional moderna remonta ao relatório Ware, que estabeleceu, no início da década de 1970, um programa de controle e proteção de sistemas (WARE, 1979). O estudo de Anderson para a Força Aérea sintetizou riscos e traçou linhas mestras para monitores de referência e avaliação de mecanismos (ANDERSON, 1972). Em paralelo, arquiteturas de proteção foram teorizadas e testadas em sistemas como Multics e HYDRA (BELL; LAPADULA, 1976; WULF et al., 1974), enquanto a prática mostrou a relevância de controles operacionais e de software, inclusive contra penetrações deliberadas (LINDE, 1975; KARGER; SCHELL, 1974).
A padronização também avançou: o DES foi publicado como FIPS PUB 46 (NBS, 1977), complementado por modos de operação (FIPS PUB 81) (NBS, 1980); diretrizes de segurança de aplicações e segurança física foram emitidas pelo NBS (FIPS 73; FIPS 31) (NBS, 1974; 1980). Em redes, o modelo IP/TCP foi formalizado (POSTEL, 1980; 1981a; 1981b; 1981c), permitindo comunicação ampla, porém introduzindo novas superfícies de ataque. Pesquisas em protocolos de autenticação e distribuição de chaves surgiram para ambientes distribuídos (NEEDHAM; SCHROEDER, 1978), em sinergia com a emergência de criptografia de chave pública (DIFFIE; HELLMAN, 1976; RIVEST; SHAMIR; ADLEMAN, 1978; ELGAMAL, 1985).
Nesse cenário, princípios de projeto seguro — mínimo privilégio, mediação completa, falha segura, separação de privilégios — e a disciplina de engenharia (SALTZER; SCHROEDER, 1975; PARNAS, 1972) convergiram com métodos formais (HOARE, 1969; DIJKSTRA, 1976; BOYER; MOORE, 1979) para fundamentar a integração entre desenvolvimento e segurança que defendemos.
- Modelos formais de segurança
3.1 Fluxo de informação em reticulados e confidencialidade
A formulação de Denning define um reticulado de níveis de segurança e classes de categorias, impondo que fluxos de informação sigam a ordem parcial $,\sqsubseteq,$ (DENNING, 1976). Seja $\mathcal{L} = \langle L, \sqsubseteq \rangle$ um reticulado finito de rótulos de segurança; a política impõe que uma operação de leitura $\text{read}(s,o)$ é segura se $L(o) \sqsubseteq L(s)$, enquanto uma operação de escrita $\text{write}(s,o)$ é segura se $L(s) \sqsubseteq L(o)$. O modelo Bell‑LaPadula (BLP) refina essa intuição em políticas “sem leitura para cima” e “sem escrita para baixo”, visando a confidencialidade em ambientes multinível (BELL; LAPADULA, 1976):
-
Propriedade simples de segurança (sem leitura para cima): $$ \forall s \in S, \forall o \in O:\ \text{read}(s,o) \Rightarrow L(o) \leq L(s) $$
-
Propriedade estrela (sem escrita para baixo): $$ \forall s \in S, \forall o \in O:\ \text{write}(s,o) \Rightarrow L(s) \leq L(o) $$
Essas propriedades, dadas as funções $L:S \cup O \rightarrow \mathcal{L}$, excluem fluxos ilegítimos de altos para baixos. Demonstrações de ausência de vazamento podem ser tratadas como invariantes de estados autorizados, fechados por transições seguras.
3.2 Integridade
O modelo de Biba, orientado à integridade, inverte as restrições (BIBA, 1977). Seja $I$ a ordem de integridade; então:
-
Sem leitura para baixo (não degradar-se lendo dados de baixa integridade): $$ \forall s,o:\ \text{read}(s,o) \Rightarrow I(s) \leq I(o) $$
-
Sem escrita para cima (não contaminar objetos de alta integridade): $$ \forall s,o:\ \text{write}(s,o) \Rightarrow I(o) \leq I(s) $$
Tais condições preservam a qualidade da informação e a correção de dados críticos.
3.3 Não‑interferência
Goguen e Meseguer formalizaram a não‑interferência, exigindo que ações de domínios de alta segurança não alterem o que é observável por domínios de baixa segurança (GOGUEN; MESEGUER, 1982). Sutherland reforçou a composicionalidade desse princípio (SUTHERLAND, 1986). Seja $H$ o conjunto de ações de alto nível e $L$ o de baixo nível; não‑interferência exige que para quaisquer sequências $h \in H^$ e $l \in L^$, a projeção de observações de $l$ com e sem $h$ seja indistinguível no nível baixo.
3.4 Modelos de proteção: matriz de acesso, HRU e capacidades
A matriz de acesso $M:S \times O \rightarrow 2^R$ modela quais direitos $r \in R$ cada sujeito $s$ possui sobre objeto $o$ (LAMPSON, 1971). O modelo HRU, ao introduzir regras de criação e propagação de direitos, mostrou que o problema geral de confinamento (safety) é indecidível (HARRISON; RUZZO; ULLMAN, 1976), justificando o uso de disciplinas restritivas.
Modelos baseados em capacidades associam direitos a identificadores portados pelo sujeito (DENNIS; VAN HORN, 1966; FABRY, 1974), como explorado em HYDRA (WULF et al., 1974), favorecendo delegação controlada e confinamento. A “confinement problem” de Lampson expôs desafios de impedir que programas transmitam informação indevida por canais encobertos (LAMPSON, 1973).
3.5 Comparação sintética de modelos
| Modelo | Propriedade foco | Estrutura formal | Resultado clássico |
|---|---|---|---|
| Denning (reticulado) | Fluxo de informação | Reticulado $(L,\sqsubseteq)$ | Fechamento por junção/meet (DENNING, 1976) |
| Bell-LaPadula | Confidencialidade | Níveis e categorias | “No read up, no write down” (BELL; LAPADULA, 1976) |
| Biba | Integridade | Níveis de integridade | “No read down, no write up” (BIBA, 1977) |
| Goguen-Meseguer | Não‑interferência | Sistemas de transição | Separação de domínios (GOGUEN; MESEGUER, 1982) |
| HRU | Segurança de proteção | Matriz + regras | Indecidibilidade da safety (HARRISON; RUZZO; ULLMAN, 1976) |
| Capacidades | Delegação/confinamento | Tokens de direito | Eficiência e delegação controlada (FABRY, 1974; WULF et al., 1974) |
- Da política ao mecanismo: SO, TCB e monitor de referência
A implementação fiel de políticas requer um conjunto mínimo de mecanismos confiáveis — a Base Computacional Confiável (TCB) — sob a noção de monitor de referência: sempre invocado, pequeno, verificável e impenetrável (ANDERSON, 1972; DOD, 1985). Em sistemas com ACLs, o controle é mediado por verificação de permissões na passagem de fronteira entre modos usuário e núcleo (SALTZER; SCHROEDER, 1975; RITCHIE; THOMPSON, 1974). Em sistemas por capacidades, verificações são reificadas em tokens intransferíveis ou delegáveis sob disciplinas específicas (DENNIS; VAN HORN, 1966; WULF et al., 1974).
Lições de Multics evidenciaram a importância de reduzir a complexidade do TCB, endurecer a mediação completa e adotar auditoria robusta (KARGER; SCHELL, 1974; BELL; LAPADULA, 1976). A virtualização, quando atende aos critérios de Popek‑Goldberg, oferece um invólucro para isolar domínios e simplificar argumentos de confinamento (POPEK; GOLDBERG, 1974). Essas práticas são coerentes com as exigências de classes B2/B3/A1 do TCSEC, que demandam especificações formais do TCB e evidências de verificação (DOD, 1985).
- Métodos formais e verificação de propriedades
Adotamos a lógica de Hoare para expressar propriedades como invariantes preservados por programas (HOARE, 1969). Para um programa $P$ e propriedade $\phi$, a tríplice de Hoare ${\phi},P,{\phi}$ expressa preservação de $\phi$ sob a execução de $P$. Para composições sequenciais $P;Q$, vale: $$ \frac{{\phi},P,{\phi} \quad {\phi},Q,{\phi}}{{\phi},P;Q,{\phi}} $$ Por indução estrutural, se cada operação atômica de $P$ preserva $\phi$, então qualquer sequência finita as preserva, desde que não haja interferências não modeladas.
A disciplina de programação de Dijkstra reforça a construção de programas corretos por construção (DIJKSTRA, 1976), e desenvolvimentos iniciais em automatização (BOYER; MOORE, 1979) sugerem a viabilidade de verificação parcial de componentes críticos do TCB. Para concorrência, critérios de correção e ordenação parcial de eventos (LAMPORT, 1977) são relevantes na análise de condições de corrida e de não‑interferência, conectando‑se a políticas como Biba (integridade) sob cenários multiprocessados.
- Criptografia e autenticação
6.1 Cifra simétrica e modos de operação
O DES, padronizado pelo NBS, oferece cifra de bloco de 64 bits baseada em estrutura de Feistel (NBS, 1977; FEISTEL, 1973). O uso correto exige modos de operação que evitem padrões e suportem fluxos: ECB, CBC, CFB e OFB (NBS, 1980). Seja $E_k$ a cifra sob chave $k$ e $m$ a mensagem; em modo CBC: $$ c_i = E_k(m_i \oplus c_{i-1}), \quad c_0 = \text{IV} $$ A autenticação de mensagens pode ser realizada com MACs baseados em cifra de bloco (e.g., CBC‑MAC), e famílias universais de hash oferecem base teórica para autenticadores eficientes (CARTER; WEGMAN, 1979).
6.2 Criptografia de chave pública e assinatura
A publicação de Diffie e Hellman inaugurou o paradigma de chave pública (DIFFIE; HELLMAN, 1976). O RSA provê confidencialidade e assinatura sob a suposição de fatoração difícil (RIVEST; SHAMIR; ADLEMAN, 1978): $$ c \equiv m^e \bmod n,\quad m \equiv c^d \bmod n,\quad n=pq $$ ElGamal introduziu um esquema baseado em logaritmos discretos (ELGAMAL, 1985). A segurança da troca de chaves pode ser estabelecida combinando Diffie‑Hellman com autenticação por assinatura; identificações interativas eficientes começam a surgir (FIAT; SHAMIR, 1986).
6.3 Protocolos de autenticação em redes
Em ambientes distribuídos, protocolos com não‑ces e carimbos de tempo mitigam ataques de repetição. O esquema de Needham‑Schroeder com servidor confiável ilustra autenticação com criptografia simétrica e tickets (NEEDHAM; SCHROEDER, 1978). A análise desses protocolos pode ser feita por raciocínio de traços e estados, conectando eventos observáveis a propriedades de segredo e autenticidade na forma de invariantes.
6.4 Senhas, armazenamento e política
Estudos práticos mostraram fragilidades no uso de senhas fracas e na reutilização (MORRIS; THOMPSON, 1979). Recomendamos hashing com sal e iterações no armazenamento de senhas (crypt(3) baseado em DES) e políticas de composição e renovação consistentes com FIPS 73 (NBS, 1980). Exemplo em UNIX:
Ajuste de permissões e política de criação
umask 077
Criação de arquivo confidencial e configuração de dono/grupo
touch /seg/relato.log
chown auditor:seguranca /seg/relato.log
chmod 640 /seg/relato.log
- Engenharia de software segura integrada ao ciclo de vida
Propomos um ciclo com quatro eixos integrados:
-
Especificação formal de políticas: declarar confidencialidade, integridade e não‑interferência como invariantes ($\phi_c,\phi_i,\phi_n$), definindo rótulos, domínios e operações admitidas (DENNING, 1976; GOGUEN; MESEGUER, 1982).
-
Arquitetura e projeto modular: decompor o sistema em módulos com interfaces estreitas e ocultação de informação (PARNAS, 1972), minimizando o TCB e centralizando a mediação completa (SALTZER; SCHROEDER, 1975).
-
Implementação disciplinada: em C, adotar verificadores estáticos como lint para prevenir erros de ponteiros/tipos (JOHNSON, 1978) e práticas de tratamento explícito de erros e verificação de limites, evitando funções propensas a abuso (e.g., evitar gets).
-
Verificação e auditoria: usar lógicas de programas (HOARE, 1969; DIJKSTRA, 1976) para provas parciais de preservação de invariantes nos componentes críticos; estabelecer trilhas de auditoria e análise estatística de anomalias (ANDERSON, 1980).
O controle de configuração com RCS permite rastrear mudanças, associando cada alteração a testes e inspeções específicos de segurança (TICHY, 1985). O vínculo entre artefatos de projeto e propriedades formais é essencial para sustentar evidências exigidas por TCSEC níveis B/A (DOD, 1985).
- Vulnerabilidades conhecidas até 1986 e controles
Relatos empíricos e estudos de caso até 1986 destacam categorias recorrentes de falhas (SALTZER; SCHROEDER, 1975; ANDERSON, 1980; MORRIS; THOMPSON, 1979; LINDE, 1975):
| Categoria | Descrição | Controle técnico | Referências |
|---|---|---|---|
| Senhas fracas | Palavras comuns, previsíveis | Hash com sal, política de complexidade e expiração | (MORRIS; THOMPSON, 1979; NBS, 1980) |
| Erros de memória | Acesso fora de limites, ponteiros inválidos | Verificação estática (lint), checagem de limites, revisões de código | (JOHNSON, 1978; KERNIGHAN; RITCHIE, 1978) |
| Corrida/verificação-uso | Janelas entre checagem e uso | Mediação completa, atomicidade, minimização de setuid | (SALTZER; SCHROEDER, 1975; RITCHIE; THOMPSON, 1974) |
| Abuso de serviços | tftp/rsh não autenticados, trust indevido | Desabilitar serviços, configurar /etc/hosts.equiv com parcimônia | (POSTEL, 1980; 1981b) |
| Controle de privilégios | ACLs mal configuradas | Princípio do menor privilégio, revisão periódica | (SALTZER; SCHROEDER, 1975) |
| Software malicioso | Vírus replicantes | Políticas de execução controlada e integridade | (COHEN, 1984; BIBA, 1977) |
Exemplo de endurecimento de serviços via inetd em UNIX (4.3BSD):
/etc/inetd.conf — desabilitar serviços inseguros
comente as linhas desnecessárias
tftp dgram udp wait root /usr/etc/tftpd tftpd -s /tftpboot
shell stream tcp nowait root /usr/etc/rshd rshd
login stream tcp nowait root /usr/etc/rlogind rlogind
telnet stream tcp nowait root /usr/etc/telnetd telnetd
ftp stream tcp nowait root /usr/etc/ftpd ftpd -l
E gestão cuidadosa de confiança em r‑comandos:
Evitar confiança ampla
echo "+ +" >> /root/.rhosts EXEMPLO DO QUE NÃO FAZER — EVITAR
Preferir ausência de /etc/hosts.equiv ou listas estritas e específicas
- Auditoria e monitoramento
A coleta de trilhas de auditoria é basilar. Seja $E={e_1,\dots,e_n}$ o conjunto de eventos; definimos uma função de detecção $$ A: E \to {0,1} $$ em que $1$ sinaliza potencial violação de política. Critérios estatísticos simples (e.g., desvios de médias horárias de logins, tentativas de acesso negadas) podem indicar anomalias (ANDERSON, 1980). Princípios de mediação completa e responsabilidade (accountability) sustentam a utilidade probatória desses registros (SALTZER; SCHROEDER, 1975; WEISSMAN, 1969).
Em UNIX, o process accounting pode ser habilitado para registrar comandos executados:
Habilitar accounting
accton /var/adm/pacct
Consulta simples por usuário
sa -m | sort -nr -k 2 | head
Técnicas de encadeamento de registros com números de sequência e MACs simétricos (e.g., CBC-MAC) podem elevar a resistência a adulterações (CARTER; WEGMAN, 1979; NBS, 1980).
- Redes de pacotes: exposição e contenção
A padronização do IP/TCP/UCP/ICMP viabilizou interconexões amplas (POSTEL, 1980; 1981a; 1981b; 1981c; CERF; KAHN, 1974). A inexistência, por padrão, de autenticação de host e integridade de cabeçalhos em redes abertas demanda práticas defensivas:
- Minimização de serviços expostos (inetd), com preferências por protocolos com autenticação forte quando disponível (NEEDHAM; SCHROEDER, 1978).
- Separação de domínios por roteamento cuidadoso e listas de acesso nos gateways quando suportadas, reduzindo superfícies.
- Gestão de modems e discagem segundo diretrizes de segurança física e administrativa (FIPS 31) (NBS, 1974).
Embora o termo “firewall” não esteja consolidado, práticas de filtragem e segmentação administrativa já se mostram efetivas na redução de exposição.
- Conformidade com TCSEC: mapeamento de evidências
O TCSEC estabelece classes que vão de D (mínima) a A1 (verificação formal) (DOD, 1985):
- C1/C2: identificação e autenticação, DAC, auditoria; artefatos: especificação de política, configuração de ACLs, trilhas de auditoria consistentes (SALTZER; SCHROEDER, 1975).
- B1/B2/B3: rotulação mandatória, modelos formais de política, TCB reduzido e analisado; artefatos: modelo formal (p. ex., BLP/Biba/reticulado), projeto de TCB com argumentos de correção e análise de canais encobertos (LAMPSON, 1973; BELL; LAPADULA, 1976).
- A1: especificação formal do TCB, verificação formal e configuração de distribuição controlada; artefatos: especificação matemática, provas parciais (HOARE, 1969; BOYER; MOORE, 1979), cadeia de ferramentas auditada.
Nosso arcabouço organiza políticas como invariantes e mapeia mecanismos ao TCB, municiando evidências compatíveis com B2/B3 e sinalizando um caminho para A1 em componentes nucleares.
- Estudo ilustrativo: serviço de arquivos multinível em UNIX
Consideremos uma política de confidencialidade de dois níveis $L={\text{Baixo} \sqsubset \text{Alto}}$. Implementamos separação física por diretórios distintos e grupos, com um processo mediador setuid que aplica verificação de rótulos antes de permitir movimentações ascendentes. Invariante central $\phi_c$: “nenhum objeto de Baixo recebe escrita a partir de sujeito com rótulo Alto”.
- Configuração base:
Grupos e diretórios
groupadd baixo
groupadd alto
mkdir /dados/baixo /dados/alto
chown :baixo /dados/baixo
chown :alto /dados/alto
chmod 770 /dados/baixo /dados/alto
-
Especificação informal do mediador M: Seja $L(s)$ o rótulo do sujeito e $L(o)$ o do objeto. A operação M.copy_up(o_baixo, o_alto) exige $L(s)=\text{Baixo}$ e $L(o_alto)=\text{Alto}$. A prova de preservação de $\phi_c$ decorre da ausência de operações M.write_to_low quando $L(s)=\text{Alto}$. Por regras de composição de Hoare, a sequência de operações atômicas (checagem de rótulos; cópia; ajuste de permissões) preserva $\phi_c$ se cada passo respeita as precondições.
-
Auditoria: Registros de cada decisão do mediador são encadeados (número de sequência; hash) e armazenados em partição protegida, sob política de integridade (BIBA, 1977; CARTER; WEGMAN, 1979).
Essa abordagem, ainda que em um UNIX genérico com DAC, aproxima‑se de uma interpretação de BLP por disciplina organizacional e mecanismos de apoio, alinhando‑se a C2/B1 em conformidade (DOD, 1985).
- Discussão: limites, composição e canais encobertos
Mesmo com a disciplina de modelos, canais encobertos e recursos compartilhados desafiam a segurança perfeita (LAMPSON, 1973; KARGER; SCHELL, 1974). Estratégias mitigadoras incluem: redução de compartilhamento, orçamentação de recursos, medições e auditoria direcionada. A composição de políticas (confidencialidade, integridade e não‑interferência) requer cuidado: por exemplo, $,\phi_c \land \phi_i,$ pode restringir excessivamente operações; técnicas de reticulados de segurança e de integridade independentes, com operações monotônicas, ajudam a manter propriedades por construção (DENNING, 1976; BIBA, 1977; GOGUEN; MESEGUER, 1982).
- Conclusão
Sistematizamos, com base no conhecimento acumulado até 1986, um arcabouço integrado de desenvolvimento e segurança que conjuga modelos formais, criptografia comprovada, mecanismos de SO e práticas de engenharia, todos apoiados por referências normativas e científicas contemporâneas. A segurança, tratada como invariante de projeto e de implementação, é reforçada por auditoria e por disciplina operacional. A correspondência entre políticas matematicamente definidas e mecanismos auditáveis fornece as evidências exigidas pelas classes superiores do TCSEC. Em suma, a integração proposta oferece um caminho tecnicamente sólido e historicamente consistente para construir sistemas confiáveis em ambientes multiusuário e redes de pacotes, sem recorrer a anacronismos tecnológicos.
References
ANDERSON, J. P. Computer Security Technology Planning Study. Bedford: Air Force Electronic Systems Division, 1972. Disponível em: https://apps.dtic.mil/sti/pdfs/ADA954828.pdf
ANDERSON, J. P. Computer security threat monitoring and surveillance. Fort Washington: James P. Anderson Co., 1980. Disponível em: https://csrc.nist.gov/publications/detail/other/1980/04/15/computer-security-threat-monitoring-and-surveillance/final
BELL, D. E.; LAPADULA, L. J. Secure computer systems: unified exposition and Multics interpretation. Bedford: MITRE, 1976. Disponível em: https://apps.dtic.mil/sti/pdfs/ADA023588.pdf
BIBA, K. J. Integrity considerations for secure computer systems. Bedford: MITRE, 1977. Disponível em: https://apps.dtic.mil/sti/pdfs/ADA039324.pdf
BOYER, R. S.; MOORE, J. S. A computational logic. New York: Academic Press, 1979. Disponível em: https://www.cs.utexas.edu/users/boyer/acl.pdf
CARTER, J. L.; WEGMAN, M. N. Universal classes of hash functions. Journal of Computer and System Sciences, v. 18, n. 2, p. 143–154, 1979. Disponível em: https://doi.org/10.1016/0022-0000(79)90044-8
CERF, V.; KAHN, R. A protocol for packet network intercommunication. IEEE Transactions on Communications, v. 22, n. 5, p. 637–648, 1974. Disponível em: https://ieeexplore.ieee.org/document/1092259
COHEN, F. Computer viruses—Theory and experiments. Computers & Security, v. 6, n. 1, p. 22–35, 1984. Disponível em: https://faculty.ece.ucsb.edu/zheng/ufiles/Cohen.pdf
DENNIS, J. B.; VAN HORN, E. C. Programming semantics for multiprogrammed computations. Communications of the ACM, v. 9, n. 3, p. 143–155, 1966. Disponível em: https://doi.org/10.1145/365230.365257
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: Addison‑Wesley, 1982. Disponível em: https://archive.org/details/cryptographydats00denn
DIFFIE, W.; HELLMAN, M. New directions in cryptography. IEEE Transactions on Information Theory, v. 22, n. 6, p. 644–654, 1976. Disponível em: https://ieeexplore.ieee.org/document/1055638
DIJKSTRA, E. W. A discipline of programming. Englewood Cliffs: Prentice‑Hall, 1976. Disponível em: https://archive.org/details/disciplineofprog00dijk
DOD. Trusted computer system evaluation criteria. Washington, DC: U.S. Department of Defense, 1985. Disponível em: https://csrc.nist.gov/publications/detail/dod/5200-28-std/final
ELGAMAL, T. A public key cryptosystem and a signature scheme based on discrete logarithms. IEEE Transactions on Information Theory, v. 31, n. 4, p. 469–472, 1985. Disponível em: https://ieeexplore.ieee.org/document/1057074
FABRY, R. S. Capability‑based addressing. Communications of the ACM, v. 17, n. 7, p. 403–412, 1974. Disponível em: https://doi.org/10.1145/361646.361662
FEISTEL, H. Cryptography and computer privacy. Scientific American, v. 228, n. 5, p. 15–23, 1973. Disponível em: https://www.cs.fsu.edu/~redwood/OffensiveComputerSecurity/lectures/feistel.pdf
FIAT, A.; SHAMIR, A. How to prove yourself: Practical solutions to identification and signature problems. In: Advances in Cryptology — CRYPTO’86. Berlin: Springer, 1986. p. 186–194. Disponível em: https://link.springer.com/chapter/10.1007/3-540-47721-7_12
GOGUEN, J. A.; MESEGUER, J. Security policies and security models. In: Proceedings of the 1982 IEEE Symposium on Security and Privacy. Oakland: IEEE, 1982. p. 11–20. Disponível em: https://ieeexplore.ieee.org/document/1000857
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/360248.360255
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: Bell Laboratories, 1978. Disponível em: https://www.bell-labs.com/usr/dmr/www/lint.html
KARGER, P. A.; SCHELL, R. R. Multics security evaluation: Vulnerability analysis. In: Proceedings of the 1974 National Computer Conference. AFIPS, 1974. Disponível em: https://multicians.org/security-eval.html
KERNIGHAN, B. W.; RITCHIE, D. M. The C programming language. Englewood Cliffs: Prentice‑Hall, 1978. Disponível em: https://archive.org/details/cprogramminglang00ritc
LAMPSON, B. W. Protection. In: Proceedings of the 5th Princeton Symposium on Information Sciences and Systems. Princeton: Princeton University, 1971. Disponível em: https://bwlampson.site/08-Protection/08-ProtectionAbstract.html
LAMPSON, B. W. A note on the confinement problem. Communications of the ACM, v. 16, n. 10, p. 613–615, 1973. Disponível em: https://doi.org/10.1145/362375.362389
LAMPORT, L. Proving the correctness of multiprocess programs. IEEE Transactions on Software Engineering, v. SE‑3, n. 2, p. 125–143, 1977. Disponível em: https://doi.org/10.1109/TSE.1977.231145
LINDE, R. Operating system penetration. In: Proceedings of the 1975 National Computer Conference. AFIPS, 1975. p. 361–368. Disponível em: https://doi.org/10.1145/1499949.1500068
MERKLE, R. C. Secure communications over insecure channels. Communications of the ACM, v. 21, n. 4, p. 294–299, 1978. Disponível em: https://doi.org/10.1145/359460.359473
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
NATIONAL BUREAU OF STANDARDS. Data Encryption Standard. FIPS PUB 46. Washington, DC: U.S. Department of Commerce, 1977. Disponível em: https://csrc.nist.gov/publications/detail/fips/46/final
NATIONAL BUREAU OF STANDARDS. DES Modes of Operation. FIPS PUB 81. Washington, DC: U.S. Department of Commerce, 1980. Disponível em: https://csrc.nist.gov/publications/detail/fips/81/final
NATIONAL BUREAU OF STANDARDS. Guidelines to ADP Physical Security. FIPS PUB 31. Washington, DC: U.S. Department of Commerce, 1974. Disponível em: https://nvlpubs.nist.gov/nistpubs/Legacy/FIPS/fipspub31.pdf
NATIONAL BUREAU OF STANDARDS. Guidelines for security of computer applications. FIPS PUB 73. Washington, DC: U.S. Department of Commerce, 1980. Disponível em: https://nvlpubs.nist.gov/nistpubs/Legacy/FIPS/fipspub73.pdf
NEEDHAM, R. M.; SCHROEDER, M. 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
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
POPEK, G. J.; GOLDBERG, R. P. Formal requirements for virtualizable third generation architectures. Communications of the ACM, v. 17, n. 7, p. 412–421, 1974. Disponível em: https://doi.org/10.1145/361011.361073
POSTEL, J. RFC 768: User Datagram Protocol. 1980. Disponível em: https://www.rfc-editor.org/rfc/rfc768
POSTEL, J. RFC 791: Internet Protocol. 1981a. Disponível em: https://www.rfc-editor.org/rfc/rfc791
POSTEL, J. RFC 792: Internet Control Message Protocol. 1981b. Disponível em: https://www.rfc-editor.org/rfc/rfc792
POSTEL, J. RFC 793: Transmission Control Protocol. 1981c. Disponível em: https://www.rfc-editor.org/rfc/rfc793
RITCHIE, D. M.; THOMPSON, K. The UNIX time‑sharing system. Bell System Technical Journal, v. 57, n. 6, p. 1905–1929, 1978. Disponível em: https://www.bell-labs.com/usr/dmr/www/bs1206.pdf
RIVEST, R.; 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://people.csail.mit.edu/rivest/Rsapaper.pdf
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://ieeexplore.ieee.org/document/1451869
SHANNON, C. E. Communication theory of secrecy systems. Bell System Technical Journal, v. 28, n. 4, p. 656–715, 1949. Disponível em: http://netlab.cs.ucla.edu/wiki/files/shannon1949.pdf
SUTHERLAND, D. A model of information. Bedford: MITRE, 1986. Disponível em: https://apps.dtic.mil/sti/pdfs/ADA168627.pdf
WARE, W. H. Security controls for computer systems (The Ware Report). Santa Monica: RAND Corporation, 1979. Disponível em: https://www.rand.org/pubs/reports/R609.html
WEISSMAN, C. The programmer’s viewpoint: Security and privacy in a computer utility. In: Proceedings of the 1969 Fall Joint Computer Conference. AFIPS, 1969. p. 27–32. Disponível em: https://doi.org/10.1145/1478462.1478466
WULF, W. A. et al. HYDRA: The kernel of a multiprocessor operating system. Communications of the ACM, v. 17, n. 6, p. 337–345, 1974. Disponível em: https://doi.org/10.1145/361011.361061
TICHY, W. F. RCS—A system for version control. Software: Practice and Experience, v. 15, n. 7, p. 637–654, 1985. Disponível em: https://dl.acm.org/doi/10.1145/62040.62042