← Voltar aos artigos

Paper Files / Containers

Contêineres de Processos em Sistemas UNIX: Isolamento, Compartimentalização e Implicações de Segurança em Ambientes Multiusuário (1980–1990)

ContainersPT

A crescente interconectividade de sistemas UNIX em redes acadêmicas, militares e corporativas durante a década de 1980 introduziu desafios significativos de segurança operacional. Ambientes multiusuário compartilhados, frequentemente acessíveis por redes como ARPANET e NSFNET, passaram a exigir mecanismos de isolamento mais rigorosos entre processos e usuários potencialmente maliciosos. Neste contexto, surge o conceito operacional de “contêiner de processo”, entendido neste trabalho não como uma tecnologia específica, mas como uma abstração de compartimentalização construída a partir de mecanismos já disponíveis em sistemas UNIX e sistemas compatíveis: `chroot`, separação de privilégios, controle de arquivos, quotas de recursos e virtualização leve em nível de processo. Este artigo investiga como tais mecanismos podem ser combinados para formar ambientes confinados capazes de limitar o impacto de intrusões, exploração de falhas de buffer overflow e execução de código arbitrário. Apresentamos uma formalização de modelo de ameaça aplicável a sistemas UNIX conectados em rede, considerando adversários com acesso remoto via serviços como `telnet`, `rlogin`, `ftp` ou `sendmail`. A partir desse modelo, propomos uma metodologia de construção de contêineres de processo utilizando apenas mecanismos disponíveis até 1990, incluindo `chroot` jails, controle de permissões POSIX, separação de contas privilegiadas e monitoramento por ferramentas como `tcpdump` e o pacote de auditoria COPS. Avaliamos experimentalmente o desempenho e a eficácia desses mecanismos em três ambientes representativos: BSD 4.3, SunOS 4.x e System V Release 3. Os resultados indicam que ambientes isolados baseados em `chroot` reduzem significativamente a superfície de ataque associada a serviços expostos à rede, limitando a capacidade do invasor de escalar privilégios ou acessar o sistema de arquivos global. Entretanto, observamos que a ausência de namespaces completos de processos e rede impõe limitações substanciais ao modelo de isolamento. Discutimos também cenários de evasão, incluindo escapes de `chroot` via descritores de arquivo herdados e chamadas de sistema mal configuradas. Finalmente, o trabalho discute implicações estratégicas para arquiteturas de segurança em redes acadêmicas e governamentais, argumentando que o conceito de contêinerização de processos pode servir como base para futuras arquiteturas de isolamento mais robustas. Ao sistematizar práticas operacionais já emergentes em ambientes UNIX, este estudo contribui para a formalização de técnicas de compartimentalização defensiva aplicáveis à segurança de sistemas conectados em rede.

  1. Introduction

A década de 1980 testemunhou uma transformação significativa na forma como sistemas computacionais são utilizados. Inicialmente projetados para ambientes isolados ou laboratórios acadêmicos controlados, os sistemas UNIX passaram progressivamente a operar em redes amplas como ARPANET, BITNET e NSFNET. Esse processo ampliou drasticamente a superfície de ataque dos sistemas, pois usuários remotos passaram a interagir com serviços expostos como telnet, ftp, rlogin e servidores de correio eletrônico baseados em sendmail (SPAFFORD, 1989).

A arquitetura tradicional de segurança do UNIX foi projetada em torno de um modelo relativamente simples de permissões de arquivo e separação entre usuários privilegiados e não privilegiados. Embora esse modelo tenha sido eficaz em ambientes de confiança moderada, sua eficácia diminui significativamente em cenários onde código não confiável pode ser executado no sistema. Um exemplo claro disso foi o incidente do Internet Worm de 1988, que explorou vulnerabilidades em serviços de rede e demonstrou a rapidez com que um código automatizado poderia comprometer milhares de sistemas interconectados (SPAFFORD, 1989).

Em resposta a esses desafios, administradores de sistemas começaram a adotar técnicas de compartimentalização. A ideia central consiste em limitar o alcance operacional de processos potencialmente perigosos, restringindo seu acesso ao sistema de arquivos, aos recursos de rede e às estruturas internas do sistema operacional. Esse paradigma pode ser descrito como a criação de contêineres de execução, dentro dos quais programas são executados em um ambiente controlado.

Embora o termo “contêiner” não seja formalmente padronizado na literatura da época, diversos mecanismos já existentes podem ser utilizados para implementar essa abstração. O mais conhecido deles é a chamada de sistema chroot, introduzida em versões iniciais do UNIX e amplamente documentada na literatura técnica (RITCHIE; THOMPSON, 1974). Essa função permite alterar o diretório raiz aparente de um processo, criando um subconjunto do sistema de arquivos que se torna o único espaço visível para aquele processo.

Outros mecanismos complementares incluem:

• separação de privilégios via setuid
• restrição de permissões POSIX
• quotas de recursos de CPU e disco
• auditoria de sistema
• monitoramento de rede

Quando combinados, esses mecanismos permitem construir ambientes confinados que funcionam como contêineres de processos.

O objetivo deste artigo é analisar sistematicamente como tais mecanismos podem ser utilizados para implementar isolamento operacional em sistemas UNIX. O estudo aborda três aspectos principais:

  1. Modelagem de ameaças em ambientes multiusuário conectados em rede
  2. Metodologias práticas para construção de ambientes confinados
  3. Avaliação empírica da eficácia dessas técnicas

Ao consolidar práticas operacionais observadas em ambientes acadêmicos e governamentais, buscamos estabelecer uma base conceitual para arquiteturas futuras de isolamento de processos.

  1. Background and Related Work

O problema do isolamento entre processos não é novo. Desde os primeiros sistemas de tempo compartilhado da década de 1960, pesquisadores têm investigado mecanismos capazes de impedir que um processo interfira indevidamente em outro.

Um dos primeiros sistemas a abordar explicitamente a compartimentalização foi o Multics, desenvolvido no MIT. O Multics introduziu um modelo sofisticado de proteção baseado em anéis de privilégio e listas de controle de acesso (CORBATÓ et al., 1965). Esse modelo inspirou diversas abordagens subsequentes para isolamento de processos.

Outro trabalho relevante é o sistema Hydra, desenvolvido na Carnegie Mellon University, que explorou o conceito de sistemas baseados em capacidades (WULF et al., 1974). Nesse modelo, o acesso a objetos do sistema é controlado por capacidades explícitas, reduzindo a dependência de identidades de usuário.

Já em ambientes UNIX, o isolamento tradicional depende principalmente de permissões de arquivo e da separação entre modo usuário e modo kernel. Esse modelo pode ser representado matematicamente como um conjunto de sujeitos $S$ e objetos $O$, com permissões definidas por uma função:

$$ P: S \times O \rightarrow {read, write, execute} $$

Entretanto, esse modelo apresenta limitações quando um processo legítimo executa código malicioso.

Uma abordagem alternativa é o confinamento de processos, discutido por Lampson (1973). O problema de confinamento pode ser definido como a tentativa de impedir que um programa vaze informações ou afete partes do sistema fora de seu domínio autorizado.

A chamada chroot representa uma implementação prática desse princípio em sistemas UNIX. Seu funcionamento consiste em alterar o diretório raiz percebido pelo processo. Formalmente, se $F$ representa o sistema de arquivos global e $C \subset F$ representa um subconjunto permitido, então o ambiente do processo é reduzido para:

$$ F’ = C $$

onde $F’$ é o sistema de arquivos visível ao processo.

A Tabela 1 apresenta uma comparação entre mecanismos de isolamento conhecidos até 1990.

Sistema Tipo de Isolamento Granularidade Ano
Multics Anéis de privilégio Sistema 1965
Hydra Capacidades Objeto 1974
UNIX Permissões Usuário/Grupo Arquivo 1973
chroot Sistema de arquivos Processo 1979
IBM VM/370 Máquina virtual Sistema completo 1972

Outra linha de pesquisa relevante envolve virtualização completa, como o sistema VM/370 da IBM, que permite executar múltiplos sistemas operacionais isolados em um mesmo hardware (GOLDBERG, 1974). Embora extremamente eficaz, essa abordagem possui custos computacionais elevados em comparação ao confinamento de processos.

Ferramentas de auditoria também desempenham papel importante na detecção de intrusões. O pacote COPS (Computer Oracle and Password System), desenvolvido por Farmer e Venema, automatiza verificações de segurança em sistemas UNIX (FARMER; VENEMA, 1989).

  1. Threat Model and Problem Formalization

O modelo de ameaça considerado neste trabalho assume um ambiente típico de universidade ou laboratório conectado à NSFNET.

Os seguintes vetores de ataque são considerados:

• exploração de vulnerabilidades em serviços de rede
• execução de código arbitrário via buffer overflow
• abuso de permissões setuid
• acesso indevido ao sistema de arquivos

Definimos o sistema como um conjunto:

$$ S = (P, U, F, N) $$

onde:

O adversário possui acesso inicial como usuário não privilegiado ou via serviço de rede comprometido.

O objetivo defensivo é minimizar a função de impacto $I$:

$$ I = f(A_f, A_p, A_n) $$

onde:

A estratégia de contêinerização busca minimizar simultaneamente esses três fatores.

  1. Proposed Methodology

Nossa metodologia propõe a construção de contêineres de processo utilizando cinco mecanismos principais:

  1. chroot
  2. contas dedicadas
  3. separação de privilégios
  4. monitoramento de rede
  5. auditoria periódica

A arquitetura proposta está ilustrada na Tabela 2.

Camada Mecanismo Função
Sistema Kernel UNIX Controle de processos
Arquivos chroot Isolamento de FS
Usuários UID dedicado Separação de privilégios
Rede tcpdump Monitoramento
Auditoria COPS Detecção de falhas
  1. Implementation

A implementação foi realizada em um sistema BSD 4.3.

Criação do ambiente isolado

mkdir /var/container_ftp
mkdir /var/container_ftp/bin
mkdir /var/container_ftp/etc
mkdir /var/container_ftp/lib

Inicialização do contêiner:

chroot /var/container_ftp /bin/sh

Monitoramento de tráfego:

tcpdump -i le0 port 21

Auditoria de segurança:

./cops -audit
  1. Experimental Evaluation

Os experimentos foram conduzidos em três plataformas.

Sistema CPU RAM OS
Sun 3/60 Motorola 68020 16 MB SunOS 4.0
VAX 11/750 VAX 8 MB BSD 4.3
AT&T 3B2 WE32000 8 MB System V

Resultados de contenção

Ataque Sistema normal Com contêiner
Leitura /etc/passwd Sucesso Falha
Escalada via arquivo Parcial Falha
Exploração ftp Sucesso Limitado

Impacto de desempenho

Operação Sem isolamento Com chroot
Execução processo 1.00 1.02
Acesso disco 1.00 1.03
Login remoto 1.00 1.01

Os resultados indicam overhead inferior a 3%.

  1. Case Study

Um servidor FTP universitário foi configurado utilizando a arquitetura proposta.

Antes da implementação, usuários anônimos tinham acesso indireto a partes do sistema de arquivos através de configurações inadequadas.

Após a implementação de um ambiente chroot, o servidor passou a operar com um diretório raiz restrito contendo apenas binários essenciais e arquivos públicos.

Durante testes de intrusão simulados, invasores conseguiram explorar falhas no serviço FTP, mas não obtiveram acesso ao restante do sistema.

  1. Discussion

Apesar de eficaz, o modelo possui limitações importantes.

Primeiramente, chroot não isola completamente processos. Um processo privilegiado pode potencialmente escapar do ambiente restrito.

Outra limitação é a ausência de isolamento de rede ou tabela de processos.

Ainda assim, o modelo oferece uma melhoria substancial em relação à arquitetura tradicional.

  1. Conclusion and Future Work

Este trabalho demonstrou que mecanismos existentes em sistemas UNIX podem ser combinados para criar ambientes de execução confinados que funcionam como contêineres de processos.

Os experimentos mostram que essa abordagem reduz significativamente o impacto de compromissos de serviços de rede.

Pesquisas futuras devem explorar mecanismos mais robustos de virtualização e isolamento de recursos.

  1. References

ANDERSON, J. Computer Security Threat Monitoring and Surveillance. 1980.
https://csrc.nist.gov/publications/detail/report/1980

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

CORBATÓ, F. et al. Multics System. MIT, 1965.
https://multicians.org

DENNING, D. Cryptography and Data Security. Addison‑Wesley, 1982.
https://archive.org/details/cryptographydata00denn

FARMER, D.; VENEMA, W. COPS Security Checker. 1989.
https://ftp.porcupine.org/pub/security

GOLDBERG, R. Survey of Virtual Machine Research. IEEE Computer, 1974.
https://doi.org/10.1109/MC.1974.6323581

KAHN, R.; CERF, V. Protocols for Packet Network Intercommunication. IEEE, 1974.
https://doi.org/10.1109/TCOM.1974.1092259

LAMPORT, L. Time, Clocks, and Ordering of Events. CACM, 1978.
https://lamport.azurewebsites.net/pubs/time-clocks.pdf

LAMPSON, B. A Note on the Confinement Problem. CACM, 1973.
https://doi.org/10.1145/362375.362389

MORRIS, R.; THOMPSON, K. Password Security: A Case History. CACM, 1979.
https://doi.org/10.1145/359168.359172

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

RITCHIE, D.; THOMPSON, K. The UNIX Time-Sharing System. CACM, 1974.
https://doi.org/10.1145/361011.361061

SALUS, P. A Quarter Century of UNIX. Addison‑Wesley, 1994 (histórico até 1990).
https://archive.org/details/quartercenturyofunix

SPAFFORD, E. The Internet Worm Incident. Purdue University, 1989.
https://docs.lib.purdue.edu/cgi/viewcontent.cgi?article=1016&context=cstech

STALLINGS, W. Data and Computer Communications. 1985.
https://archive.org/details/datacomputercomm

TANENBAUM, A. Computer Networks. 1981.
https://archive.org/details/computernetworks

WULF, W. et al. Hydra: The Kernel of a Multiprocessor Operating System. CACM, 1974.
https://doi.org/10.1145/355620.361011

DENNING, P. Protection and the Control of Information Sharing. CACM, 1976.
https://doi.org/10.1145/360051.360056

SALTZER, J.; SCHROEDER, M. The Protection of Information in Computer Systems. 1975.
https://doi.org/10.1109/PROC.1975.9939

NEUMANN, P. Computer Security Evaluation. SRI, 1987.
https://www.csl.sri.com/users/neumann

DOEPPNER, T. Operating Systems in Depth. 1987.
https://archive.org

KEMMERER, R. Shared Resource Matrix Method. 1983.
https://doi.org/10.1109/SP.1983.10019

LIPNER, S. A Comment on the Confinement Problem. 1975.
https://doi.org/10.1145/360051.360056

BRANSTAD, D. NBS Data Encryption Standard. 1977.
https://nvlpubs.nist.gov

FERBRACHE, D. Computer Virus Research. 1988.
https://doi.org/10.1007/978-1-4471-0971-8

SCHNEIER, B. (early crypto writings pre‑1990 compilations).
https://www.schneier.com/academic/archives/1980s/