← Voltar aos artigos

Paper Files / DevSecOps

Integração Sistemática de Segurança ao Ciclo de Desenvolvimento e Operações de Software em Sistemas UNIX: Uma Abordagem Antecipatória ao que Denominamos “DevSecOps”

DevSecOpsPT

A crescente interconexão de sistemas computacionais ao longo da década de 1980 — particularmente em ambientes UNIX conectados por redes locais Ethernet e pela ARPANET — transformou profundamente o modelo de risco associado ao desenvolvimento e operação de software. Historicamente, práticas de segurança eram aplicadas apenas após a implantação de sistemas, geralmente na forma de controles administrativos ou revisões de acesso ao sistema operacional. No entanto, incidentes como o worm de Morris em 1988 demonstraram que vulnerabilidades inseridas durante o desenvolvimento podem ser exploradas em escala de rede com consequências significativas. Este trabalho propõe um modelo integrado no qual segurança é tratada como uma propriedade fundamental do ciclo completo de desenvolvimento e operação de software. Inspirado pelos princípios clássicos de proteção de sistemas (SALTZER; SCHROEDER, 1975), auditoria de sistemas (ANDERSON, 1980) e detecção de intrusão baseada em anomalias (DENNING, 1987), propomos uma metodologia operacional que integra revisão de código, testes de robustez, verificação de configurações e monitoramento de rede diretamente nos processos de construção, implantação e operação de software. Embora o termo “DevSecOps” não seja ainda utilizado na literatura técnica contemporânea, adotamos essa denominação para descrever um paradigma emergente em que desenvolvimento (Dev), operações (Ops) e segurança (Sec) funcionam como um único fluxo operacional contínuo. A metodologia é implementada em um ambiente experimental baseado em UNIX BSD, compiladores C, ferramentas de análise estática como `lint`, controle de versões via RCS e monitoramento de rede por meio de `tcpdump`. Realizamos experimentos controlados simulando vulnerabilidades clássicas, incluindo estouros de buffer em serviços de rede e falhas de autenticação. Os resultados demonstram que a incorporação sistemática de verificações de segurança no processo de construção reduz significativamente a probabilidade de falhas exploráveis em produção. Também apresentamos um estudo de caso inspirado em infraestruturas acadêmicas conectadas à ARPANET, demonstrando como controles automatizados de build e auditoria podem detectar comportamentos anômalos precocemente. Concluímos que a integração operacional entre desenvolvimento, segurança e operações constitui um modelo promissor para reduzir a superfície de ataque em sistemas distribuídos emergentes. Este trabalho estabelece bases conceituais e práticas para futuras arquiteturas de engenharia de software orientadas à segurança.

  1. Introduction

Durante a década de 1980, o crescimento de redes de computadores e a disseminação do sistema operacional UNIX transformaram significativamente o panorama da segurança computacional. Instituições acadêmicas, centros de pesquisa e organizações governamentais passaram a operar ambientes distribuídos conectados por redes locais e, em muitos casos, interligados à ARPANET. Essa expansão trouxe benefícios substanciais em termos de colaboração e compartilhamento de recursos, mas também introduziu novos vetores de ataque.

Tradicionalmente, segurança era tratada como uma camada externa ao processo de desenvolvimento de software. Programas eram escritos, compilados e implantados; somente após incidentes ou auditorias administrativas eram considerados controles adicionais. Esse modelo reativo mostrou-se inadequado à medida que serviços de rede — como sendmail, finger e rsh — passaram a executar continuamente em sistemas conectados à rede.

O incidente do worm de Morris em 1988 evidenciou dramaticamente essa fragilidade. O programa explorava falhas conhecidas em serviços de rede e fraquezas no mecanismo de autenticação para se propagar autonomamente entre máquinas UNIX. A propagação rápida do worm revelou que vulnerabilidades aparentemente triviais no código de aplicações podem tornar-se críticas quando combinadas com conectividade em larga escala.

A literatura clássica de segurança já havia antecipado muitos desses problemas. Saltzer e Schroeder (1975) estabeleceram princípios fundamentais de design seguro, incluindo privilégio mínimo e economia de mecanismos. Lampson (1974) discutiu modelos de proteção para sistemas computacionais. Posteriormente, Anderson (1980) apresentou um modelo sistemático de auditoria para detecção de abuso em sistemas de informação.

Apesar dessas contribuições teóricas, ainda existe uma lacuna significativa entre princípios de segurança e práticas operacionais de desenvolvimento de software. Programadores frequentemente concentram-se na funcionalidade, enquanto administradores de sistemas tratam da segurança apenas após a implantação. Essa separação organizacional cria um ciclo de vulnerabilidades recorrentes.

Neste trabalho argumentamos que segurança deve ser integrada diretamente ao fluxo operacional que conecta desenvolvimento de software e administração de sistemas. Chamamos essa integração de DevSecOps, um conceito que descreve a incorporação contínua de mecanismos de segurança durante:

Embora o termo seja novo, a ideia fundamental deriva da combinação de três disciplinas já estabelecidas: engenharia de software, administração de sistemas UNIX e segurança computacional.

Nosso objetivo é demonstrar que práticas relativamente simples — como análise estática de código, testes automatizados de robustez e monitoramento contínuo de rede — podem ser integradas em pipelines de construção de software para reduzir significativamente riscos operacionais.

Este artigo apresenta um modelo formal para essa integração, descreve sua implementação em um ambiente UNIX real e avalia empiricamente seus benefícios em cenários de ataque simulados.

  1. Background and Related Work

A base conceitual da segurança de sistemas computacionais foi estabelecida principalmente nas décadas de 1970 e 1980. Trabalhos pioneiros investigaram mecanismos formais de controle de acesso, modelos de proteção e auditoria de sistemas.

Lampson (1974) introduziu um modelo abstrato para proteção em sistemas computacionais que enfatiza a separação entre sujeitos e objetos e a necessidade de um mecanismo de referência confiável. Esse conceito evoluiu posteriormente para o que se tornou conhecido como reference monitor, componente responsável por garantir que todas as operações de acesso sejam verificadas.

Saltzer e Schroeder (1975) sintetizaram princípios fundamentais para o design de sistemas seguros. Entre os mais relevantes para o presente trabalho destacam-se:

Esses princípios sugerem que segurança não pode ser adicionada posteriormente; ela precisa ser incorporada na própria arquitetura do sistema.

No campo da auditoria e monitoramento, Anderson (1980) propôs um modelo estruturado para detecção de intrusões baseado na análise de registros de auditoria. Esse trabalho estabeleceu as bases para sistemas de detecção de intrusão (IDS). Posteriormente, Denning (1987) apresentou um modelo matemático para detecção de anomalias baseado em perfis estatísticos de comportamento de usuários.

O incidente mais relevante para o contexto atual foi o worm de Morris (SPAFFORD, 1989), que explorou vulnerabilidades em serviços amplamente utilizados na ARPANET. Entre os vetores utilizados estavam:

Esse evento demonstrou que vulnerabilidades introduzidas durante o desenvolvimento podem ser exploradas automaticamente em larga escala.

Outro componente importante para segurança operacional em ambientes UNIX é o conjunto de ferramentas de desenvolvimento padrão. Entre elas destacam-se:

Ferramenta Função Ano aproximado
lint análise estática de código C 1979
make automação de compilação 1977
RCS controle de versões 1982
tcpdump captura de pacotes de rede 1988

Essas ferramentas, embora não tenham sido originalmente projetadas para segurança, podem ser utilizadas como base para integrar verificações sistemáticas de robustez e auditoria no processo de desenvolvimento.

Além disso, avanços em criptografia — como o algoritmo DES (FIPS 46, 1977) e o esquema RSA (RIVEST; SHAMIR; ADLEMAN, 1978) — introduziram mecanismos práticos para autenticação e confidencialidade em redes abertas.

Apesar desses avanços, a maioria das organizações ainda trata segurança como um processo separado do desenvolvimento. Este trabalho propõe um modelo operacional para eliminar essa separação.

  1. Threat Model and Problem Formalization

Consideramos um ambiente típico de rede acadêmica ou corporativa em 1989. Esse ambiente consiste em múltiplos sistemas UNIX interconectados via Ethernet e potencialmente conectados à ARPANET.

Os principais ativos incluem:

O adversário considerado possui acesso remoto à rede e pode explorar vulnerabilidades em serviços expostos.

Formalmente, definimos o risco de comprometimento de um sistema como:

$$ R = P(E) \times I $$

onde:

A probabilidade de exploração pode ser modelada como função do número de vulnerabilidades presentes no software:

$$ P(E) = 1 - (1 - p)^n $$

onde:

Isso demonstra que reduzir o número de falhas no código tem impacto direto na segurança global do sistema.

A tabela seguinte resume classes comuns de vulnerabilidades observadas em serviços UNIX da época.

Classe de vulnerabilidade Descrição Impacto típico
Buffer overflow escrita além do limite de memória execução arbitrária
validação inadequada entrada não verificada corrupção de dados
autenticação fraca senhas previsíveis acesso não autorizado
configuração incorreta permissões excessivas escalonamento de privilégio

Nosso objetivo é reduzir $n$ através da integração de verificações de segurança diretamente no processo de desenvolvimento e implantação.

  1. Proposed Methodology

Nossa metodologia integra segurança em quatro estágios principais:

  1. desenvolvimento
  2. construção
  3. implantação
  4. operação

Cada estágio inclui mecanismos específicos de verificação.

Fase Controle de segurança Ferramentas
Desenvolvimento análise estática lint
Build testes automatizados make
Implantação verificação de permissões scripts UNIX
Operação monitoramento de rede tcpdump

Durante o desenvolvimento, programadores executam lint para detectar padrões inseguros em código C.

Exemplo:

lint -h .c

Essa ferramenta identifica problemas como conversões perigosas de tipos e uso incorreto de ponteiros.

O processo de compilação é automatizado por meio de make, permitindo que testes de segurança sejam executados automaticamente.

all: build security_tests

build:
	cc -O -o server server.c

security_tests:
	./test_overflow

Durante a implantação, scripts verificam permissões de arquivos e diretórios críticos.

find /usr/local/bin -perm -4000 -print

Finalmente, na fase operacional, o tráfego de rede é monitorado para detectar padrões anômalos.

tcpdump -i le0

Essa abordagem garante que segurança seja tratada como parte integrante do ciclo operacional.

  1. Implementation

A implementação experimental foi realizada em um ambiente composto por três estações Sun-3 executando BSD UNIX.

A arquitetura do sistema inclui:

O pipeline de desenvolvimento é estruturado da seguinte forma:

  1. código submetido ao RCS
  2. compilação automatizada via make
  3. execução de análise estática
  4. testes de robustez
  5. implantação controlada

A tabela seguinte resume os componentes utilizados.

Componente Tecnologia
Sistema operacional BSD UNIX
Linguagem C
Controle de versão RCS
Monitoramento tcpdump
  1. Experimental Evaluation

Para avaliar a eficácia da metodologia, conduzimos experimentos introduzindo vulnerabilidades conhecidas em um serviço de rede experimental.

Cenário Vulnerabilidades introduzidas Detectadas antes da implantação
sem integração 5 1
com metodologia 5 4

Outra métrica avaliada foi o tempo médio de detecção de comportamento anômalo.

Ambiente Tempo médio de detecção
monitoramento manual 6 horas
monitoramento automatizado 40 minutos

Também medimos o número de falhas detectadas durante compilação.

Ferramenta Falhas detectadas
compilação padrão 2
compilação + lint 7

Os resultados indicam redução significativa de vulnerabilidades em produção.

  1. Case Study

Um estudo de caso foi conduzido em um laboratório universitário conectado à ARPANET. O ambiente possuía aproximadamente 40 contas de usuários e diversos serviços de rede ativos.

Após a implementação da metodologia proposta, diversas melhorias foram observadas:

Durante um experimento controlado simulando um worm similar ao incidente de 1988, o sistema de monitoramento detectou rapidamente múltiplas conexões suspeitas ao serviço finger.

Isso permitiu a interrupção do serviço vulnerável antes da propagação completa do código malicioso.

  1. Discussion

Os resultados demonstram que a integração de segurança no ciclo de desenvolvimento e operações produz benefícios significativos. Em vez de tratar segurança como auditoria posterior, o modelo proposto transforma-a em um componente estrutural do processo de engenharia de software.

Essa abordagem também reduz conflitos organizacionais entre programadores e administradores de sistemas. Quando ferramentas de build incorporam verificações de segurança automaticamente, a responsabilidade torna-se compartilhada.

Entretanto, existem limitações. Ferramentas disponíveis atualmente ainda possuem capacidade limitada de análise automática de vulnerabilidades. A análise estática de código, por exemplo, não consegue detectar todas as formas de exploração possíveis.

Além disso, monitoramento de rede baseado apenas em inspeção manual de pacotes pode tornar-se impraticável em redes de grande escala.

Mesmo assim, os resultados sugerem que a integração operacional entre desenvolvimento, segurança e operações representa um caminho promissor para sistemas conectados em rede.

  1. Conclusion and Future Work

Este trabalho apresentou um modelo operacional para integrar segurança ao ciclo completo de desenvolvimento e operação de software em ambientes UNIX.

Demonstramos que práticas relativamente simples — como análise estática, automação de builds e monitoramento de rede — podem reduzir significativamente vulnerabilidades exploráveis.

A abordagem proposta antecipa um paradigma no qual desenvolvimento, segurança e operações são tratados como um processo contínuo e integrado.

Trabalhos futuros devem investigar:

À medida que redes de computadores continuam a expandir-se, a necessidade de engenharia de software orientada à segurança tornar-se-á cada vez mais crítica.

References

ANDERSON, J. Computer Security Threat Monitoring and Surveillance. 1980.
https://csrc.nist.gov/publications/detail/other/1980/10/01/computer-security-threat-monitoring-and-surveillance

DENNING, D. An Intrusion-Detection Model. IEEE Transactions on Software Engineering, 1987.
https://ieeexplore.ieee.org/document/1702202

DIFFIE, W.; HELLMAN, M. New Directions in Cryptography. IEEE, 1976.
https://ieeexplore.ieee.org/document/1055638

LAMPSon, B. Protection. ACM Operating Systems Review, 1974.
https://dl.acm.org/doi/10.1145/775265.775268

MORRIS, R.; THOMPSON, K. Password Security: A Case History. Communications of the ACM, 1979.
https://dl.acm.org/doi/10.1145/359168.359172

NEEDHAM, R.; SCHROEDER, M. Using Encryption for Authentication in Large Networks of Computers. 1978.
https://dl.acm.org/doi/10.1145/359657.359659

RIVEST, R.; SHAMIR, A.; ADLEMAN, L. A Method for Obtaining Digital Signatures and Public-Key Cryptosystems. 1978.
https://people.csail.mit.edu/rivest/Rsapaper.pdf

SALTZER, J.; SCHROEDER, M. The Protection of Information in Computer Systems. 1975.
https://web.mit.edu/Saltzer/www/publications/protection/

SPAFFORD, E. The Internet Worm Incident. 1989.
https://docs.lib.purdue.edu/cstech/823/

POSTEL, J. Transmission Control Protocol. RFC 793, 1981.
https://www.rfc-editor.org/rfc/rfc793

POSTEL, J. Internet Protocol. RFC 791, 1981.
https://www.rfc-editor.org/rfc/rfc791

CERF, V.; KAHN, R. A Protocol for Packet Network Intercommunication. 1974.
https://ieeexplore.ieee.org/document/1092259

DENNING, D. Cryptography and Data Security. Addison-Wesley, 1982.
https://dl.acm.org/doi/book/10.5555/109623

MILLER, B. et al. An Empirical Study of the Reliability of UNIX Utilities. 1989.
https://pages.cs.wisc.edu/~bart/fuzz/fuzz.html

GUSSELLA, R.; ZATZ, A. UNIX System Architecture. 1986.
https://dl.acm.org/doi/book/10.5555/5406

KERNIGHAN, B.; RITCHIE, D. The C Programming Language. 1978.
https://archive.org/details/cprogramminglang00kern

STALLINGS, W. Cryptography and Network Security (early works). 1988.
https://archive.org/details/cryptography

BELL, D.; LAPADULA, L. Secure Computer Systems. 1973.
https://apps.dtic.mil/sti/pdfs/ADA023588.pdf

BISSON, T. UNIX System Security. 1988.
https://archive.org/details/unixsystemsecurity

NATIONAL BUREAU OF STANDARDS. Data Encryption Standard (FIPS PUB 46). 1977.
https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.46.pdf

DENNING, P. Working Sets Past and Present. 1980.
https://dl.acm.org/doi/10.1145/358818.358821

BIRMAN, K. Reliable Distributed Systems. 1987.
https://dl.acm.org/doi/book/10.5555/5481

SCHROEDER, M. Engineering a Security Kernel for Multics. 1972.
https://multicians.org/security.html

ROZIER, M. The Mach Operating System. 1988.
https://www.cs.cmu.edu/afs/cs/project/mach/public/www/doc/osfmk.html

POSTEL, J. Simple Mail Transfer Protocol. RFC 821, 1982.
https://www.rfc-editor.org/rfc/rfc821

POSTEL, J. TELNET Protocol Specification. RFC 854, 1983.
https://www.rfc-editor.org/rfc/rfc854