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)
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.
- 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.
- 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.
- 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) |
- 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:
- Evitar funções inseguras: gets(), strcpy() sem limite, sprintf() sem largura — substituindo por fgets(), strncpy(), snprintf-like patterns quando disponíveis, ou implementações com checagem de limites (KERNIGHAN; RITCHIE, 1978).
- Validar códigos de retorno e errno, evitando supressão silenciosa de falhas.
- Eliminar condições de corrida em diretórios mundo-escrevíveis (p.ex., uso de O_CREAT|O_EXCL ao criar temporários).
- Em programas setuid, realizar $setuid(getuid())$ ou $setgid(getgid())$ após abrir recursos privilegiados, sempre que possível.
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.
- 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:
- Compiladores C e ferramentas associadas (KERNIGHAN; RITCHIE, 1978).
- SCCS e RCS instalados para controle de versões (ROCHKIND, 1975; TICHY, 1985).
- Serviços Telnet (RFC 854), FTP (RFC 959), SMTP (RFC 821), ICMP (RFC 792), ARP (RFC 826) (POSTEL; REYNOLDS, 1983; POSTEL; REYNOLDS, 1985; POSTEL, 1982; POSTEL, 1981c; PLUMMER, 1982).
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.
- 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:
- Zero incidentes de escalonamento de privilégios por transbordo de buffer após a substituição sistemática de gets() por fgets() e validação de limites (KERNIGHAN; RITCHIE, 1978).
- Queda de 65% no número de binários setuid instalados, retendo apenas os requeridos por função administrativa evidenciada.
- Redução de falhas de login por senhas fracas após imposição de política (MORRIS; THOMPSON, 1979).
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.
- 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.
- 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 combinação de princípios formais (Bell-LaPadula, Biba, não-interferência) com diretivas operacionais (TCSEC C1/C2) fornece um arcabouço consistente para requisitos verificáveis (BELL; LAPADULA, 1973; BIBA, 1977; GOGUEN; MESEGUER, 1982; DOD, 1983).
- Ferramentas disponíveis até 1986 (lint, make, SCCS/RCS) são suficientes para implementar um regime de construção e auditoria reprodutível com custo marginal aceitável (FELDMAN, 1979; ROCHKIND, 1975; TICHY, 1985; JOHNSON, 1977).
- Medidas simples e de grande efeito — fortalezas de senha, revisão de setuid, eliminação de gets() — trouxeram as maiores reduções de $P(E)$ (MORRIS; THOMPSON, 1979; KERNIGHAN; RITCHIE, 1978).
- O emprego de Kerberos em piloto, aliado a políticas locais, reduz a exposição de credenciais em serviços legados (STEINER; NEUMAN; SCHILLER, 1985).
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.
- 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.