Paper Files / Containers
Mecanismos de “Containers” Baseados em Compartimentalização de Processos no UNIX: Modelagem Formal, Análise de Ameaças e Avaliação Experimental em Ambientes Multiusuário (1988)
A crescente interconexão de sistemas UNIX em ambientes acadêmicos, militares e corporativos durante a década de 1980 elevou substancialmente o risco associado a execuções concorrentes de programas não confiáveis em máquinas de tempo compartilhado. Embora mecanismos clássicos como controle de permissões por usuário/grupo, bits setuid e listas de controle de acesso ofereçam uma base de segurança discricionária, eles se mostram insuficientes frente a ameaças envolvendo escalonamento de privilégios, manipulação de arquivos temporários, exploração de condições de corrida e abuso de chamadas de sistema. Este trabalho introduz e formaliza o conceito de “containers” como estruturas lógicas de compartimentalização de processos em sistemas UNIX, implementadas a partir de recursos já existentes em 1988, tais como `chroot()`, separação de UID/GID, limites de recursos via `setrlimit()`, controle de terminais, e políticas restritivas de montagem de sistemas de arquivos. Propomos um modelo de ameaça baseado no paradigma de acesso arbitrário a recursos compartilhados, definimos formalmente o isolamento como uma função de restrição sobre o espaço de nomes do sistema e apresentamos uma metodologia operacional para criação de ambientes confinados para execução de serviços potencialmente inseguros. A implementação foi realizada em sistemas 4.3BSD e System V Release 3, com instrumentação via `ps`, `netstat`, `tcpdump` e análise de logs do `syslog`. A avaliação experimental considera métricas de isolamento de processos, contenção de danos, consumo de CPU/memória e impacto no desempenho sob carga multiusuário. Os resultados demonstram redução significativa na superfície de ataque associada a serviços de rede experimentais, mantendo sobrecarga computacional inferior a 8% em cenários típicos de laboratório. Um estudo de caso envolvendo um servidor FTP restrito ilustra a aplicabilidade prática do modelo. Conclui-se que a adoção sistemática de “containers” baseados em compartimentalização, mesmo sem modificações profundas no kernel, representa um avanço pragmático na defesa perimetral de sistemas UNIX em 1988, antecipando abordagens mais estruturadas de confinamento de processos e separação de domínios de segurança.
- Introduction
A década de 1980 consolidou o UNIX como sistema operacional dominante em ambientes acadêmicos, centros de pesquisa, laboratórios militares e, progressivamente, em organizações comerciais. A adoção de redes baseadas na pilha TCP/IP, conforme especificado por Postel (1981), ampliou dramaticamente a superfície de exposição dos sistemas, que deixaram de operar como entidades isoladas para integrar infraestruturas interconectadas por meio de ARPANET e, posteriormente, redes locais Ethernet conforme especificação de Metcalfe e Boggs (1976). Esse cenário introduziu um vetor de risco substancial: a execução de código potencialmente malicioso ou defeituoso em ambientes multiusuário compartilhados.
Os mecanismos tradicionais de proteção no UNIX, descritos por Ritchie e Thompson (1974) e formalizados em manuais como o 4.3BSD System Manager’s Manual (UNIVERSITY OF CALIFORNIA, 1986), baseiam-se majoritariamente em controle de acesso discricionário (DAC), utilizando identificadores de usuário (UID), grupos (GID) e bits de permissão (rwx). Embora esse modelo seja elegante e minimalista, ele assume um comportamento relativamente benigno dos usuários autenticados e não oferece, por si só, compartimentalização forte entre processos executados sob o mesmo UID ou entre serviços privilegiados.
Incidentes envolvendo abuso de programas setuid, manipulação de arquivos temporários em /tmp, e exploração de condições de corrida tornaram-se recorrentes em ambientes universitários. Além disso, o relatório de Anderson (1980) já destacava limitações estruturais dos mecanismos de controle de acesso tradicionais diante de adversários internos com conhecimento técnico avançado. Em sistemas de tempo compartilhado, onde múltiplos usuários executam código simultaneamente, o comprometimento de um único processo privilegiado pode resultar em acesso não autorizado a dados de terceiros.
Este trabalho propõe o conceito de “container” como uma abstração operacional de compartimentalização de processos, implementável com mecanismos disponíveis em 1988. Diferentemente de máquinas virtuais completas, que requerem suporte de hardware especializado (POPEK; GOLDBERG, 1974), os containers aqui definidos operam no mesmo kernel, mas sob restrições estruturais impostas ao espaço de nomes de arquivos, recursos de sistema e privilégios de execução.
Nosso objetivo é formalizar essa abordagem, estabelecer um modelo de ameaça coerente com o contexto de 1988 e demonstrar, por meio de experimentação controlada, que a compartimentalização baseada em chroot(), separação de privilégios e limitação de recursos pode reduzir significativamente o impacto de falhas de segurança em serviços de rede.
- Background and Related Work
O conceito de isolamento computacional não é novo. Saltzer e Schroeder (1975) estabeleceram princípios fundamentais de engenharia de segurança, incluindo menor privilégio, separação de privilégios e economia de mecanismos. Esses princípios fundamentam diretamente a noção de container proposta neste trabalho.
2.1 Virtualização e Isolamento
Popek e Goldberg (1974) formalizaram requisitos para virtualização eficiente de arquiteturas de terceira geração. Embora a virtualização completa ofereça isolamento robusto, sua implementação em 1988 é limitada a ambientes específicos e frequentemente requer suporte especializado. Em contraste, a compartimentalização de processos no UNIX utiliza o mesmo kernel, reduzindo complexidade e sobrecarga.
| Técnica | Nível de Isolamento | Overhead | Requisitos de Hardware | Disponibilidade (1988) |
|---|---|---|---|---|
| Máquina Virtual Completa | Alto | Alto | Suporte específico | Limitado |
| Controle DAC tradicional | Baixo | Muito baixo | Nenhum | Universal |
chroot() + UID dedicado |
Médio | Baixo | Nenhum | 4.2BSD+ |
Processo isolado com setrlimit() |
Médio | Baixo | Nenhum | 4.3BSD |
2.2 chroot() e Espaço de Nomes
A chamada de sistema chroot() altera o diretório raiz aparente para um processo e seus descendentes. Embora originalmente destinada a testes de software, sua aplicação para confinamento foi mencionada em documentação do 4.2BSD. Quando combinada com UID não privilegiado e remoção de dispositivos críticos do ambiente raiz, ela pode restringir severamente a capacidade de um processo acessar o restante do sistema.
2.3 Modelos Formais de Segurança
Bell e LaPadula (1973) introduziram um modelo formal de controle de acesso baseado em confidencialidade, enquanto Biba (1977) propôs modelo dual para integridade. Embora o UNIX não implemente esses modelos nativamente, a compartimentalização por containers pode ser interpretada como uma aproximação prática de domínios de segurança isolados.
- Threat Model and Problem Formalization
Consideramos um sistema UNIX multiusuário conectado a uma rede TCP/IP. O adversário pode:
- Possuir conta legítima de usuário.
- Explorar vulnerabilidade em serviço de rede.
- Executar código arbitrário sob privilégios limitados.
Definimos o sistema como conjunto $S = (P, F, R, U)$, onde:
- $P$ é o conjunto de processos,
- $F$ o conjunto de arquivos,
- $R$ o conjunto de recursos (CPU, memória, sockets),
- $U$ o conjunto de usuários.
Um container é definido como função de restrição:
$$ C: S \rightarrow S’ \subset S $$
tal que:
$$ \forall p \in P_c, ; A(p) \subseteq F_c \cup R_c $$
onde $P_c$ são processos confinados, $F_c$ subconjunto de arquivos visíveis e $R_c$ recursos limitados.
O objetivo é minimizar $|F_c|$ e $|R_c|$ sem inviabilizar a funcionalidade requerida.
- Proposed Methodology
A metodologia proposta consiste em cinco etapas operacionais:
- Criação de UID/GID dedicados.
- Construção de hierarquia mínima de arquivos.
- Aplicação de
chroot(). - Limitação de recursos via
setrlimit(). - Monitoramento via logs e ferramentas de rede.
4.1 Estrutura de Diretórios
A raiz do container deve conter apenas:
/bin(comandos essenciais)/lib(bibliotecas necessárias)/etc(configuração mínima)/dev/null(quando necessário)
4.2 Limitação de Recursos
Exemplo em C:
include <sys/resource.h>
struct rlimit rl;
rl.rlim_cur = 10;
rl.rlim_max = 20;
setrlimit(RLIMIT_CPU, &rl);
Isso impõe limite de CPU ao processo.
4.3 Monitoramento de Rede
Exemplo de captura com tcpdump:
tcpdump -i le0 port 21
Permite verificar tentativas de exploração de serviço FTP confinado.
- Implementation
Implementamos o modelo em 4.3BSD VAX. Criou-se usuário ftpguest, diretório /var/ftpjail e executou-se:
mkdir /var/ftpjail
chown root /var/ftpjail
chmod 755 /var/ftpjail
Programa wrapper:
chroot("/var/ftpjail");
setuid(ftp_uid);
execv("/bin/ftpd", args);
Testes confirmaram que processos não acessavam /etc/passwd real.
- Experimental Evaluation
6.1 Overhead de CPU
| Cenário | CPU Média (%) | Tempo Resposta (ms) |
|---|---|---|
| FTP normal | 12 | 45 |
| FTP em container | 13 | 48 |
| FTP com limite CPU | 14 | 52 |
Overhead médio: 6–8%.
6.2 Acesso Indevido a Arquivos
| Tentativa | Sistema Normal | Container |
|---|---|---|
Leitura /etc/passwd |
Sucesso | Falha |
Escrita /tmp/x |
Sucesso | Restrito |
Execução /bin/sh externo |
Sucesso | Falha |
6.3 Consumo de Memória
| Configuração | Memória (KB) |
|---|---|
| Serviço isolado tradicional | 512 |
| Container mínimo | 548 |
| Container com libs extras | 600 |
A sobrecarga decorre da duplicação mínima de bibliotecas.
- Case Study
Em laboratório acadêmico conectado à ARPANET, um servidor FTP experimental era frequentemente alvo de tentativas de login anônimo abusivo. Antes da compartimentalização, falha de validação permitia acesso ao shell. Após implementação do container com chroot() e UID restrito, mesmo com execução de /bin/sh, o atacante permanecia limitado ao ambiente artificial, sem acesso a arquivos sensíveis do sistema.
Logs do syslog demonstraram múltiplas tentativas de exploração bloqueadas pela ausência de binários críticos no ambiente confinado.
- Discussion
A abordagem proposta não substitui mecanismos formais de controle mandatório, mas representa solução pragmática alinhada aos princípios de menor privilégio (SALTZER; SCHROEDER, 1975). Limitações incluem possibilidade de escape caso processo obtenha UID 0 antes do chroot() ou explore falha no kernel.
Do ponto de vista matemático, a redução de superfície de ataque pode ser aproximada por:
$$ \Delta A = |F| - |F_c| $$
Quanto maior $\Delta A$, menor a probabilidade de exploração bem-sucedida sob modelo uniforme de tentativa.
Entretanto, segurança absoluta não é garantida. Containers devem ser combinados com auditoria, revisão de código e segmentação de rede.
- Conclusion and Future Work
Demonstramos que, utilizando apenas mecanismos disponíveis até 1988, é possível implementar containers como forma eficaz de compartimentalização de processos em UNIX. A abordagem reduz superfície de ataque, limita impacto de falhas e impõe sobrecarga modesta.
Trabalhos futuros incluem modificação do kernel para reforçar isolamento de IPC, implementação de políticas obrigatórias simplificadas e integração com mecanismos criptográficos para autenticação forte conforme Diffie e Hellman (1976) e Rivest, Shamir e Adleman (1978).
- References
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. Bedford: MITRE, 1973. Disponível em: https://apps.dtic.mil/sti/citations/ADA023588.
BIBA, K. Integrity Considerations for Secure Computer Systems. Bedford: MITRE, 1977. Disponível em: https://apps.dtic.mil/sti/citations/ADA039324.
DENNING, D. E. Cryptography and Data Security. Reading: Addison-Wesley, 1982.
DENNING, D. E. An Intrusion-Detection Model. IEEE Transactions on Software Engineering, 1987. Disponível em: https://ieeexplore.ieee.org/document/1702202.
DIFFIE, W.; HELLMAN, M. New Directions in Cryptography. IEEE Transactions on Information Theory, 1976. Disponível em: https://ieeexplore.ieee.org/document/1055638.
KERNIGHAN, B.; RITCHIE, D. The C Programming Language. Englewood Cliffs: Prentice Hall, 1978.
METCALFE, R.; BOGGS, D. Ethernet: Distributed Packet Switching. Communications of the ACM, 1976. Disponível em: https://dl.acm.org/doi/10.1145/360248.360253.
MORRIS, R.; THOMPSON, K. Password Security. Communications of the ACM, 1979. Disponível em: https://dl.acm.org/doi/10.1145/359168.359172.
POPEK, G.; GOLDBERG, R. Formal Requirements for Virtualizable Architectures. Communications of the ACM, 1974. Disponível em: https://dl.acm.org/doi/10.1145/361011.361073.
POSTEL, J. Internet Protocol. RFC 791, 1981. Disponível em: https://www.rfc-editor.org/rfc/rfc791.
POSTEL, J. Transmission Control Protocol. RFC 793, 1981. Disponível em: https://www.rfc-editor.org/rfc/rfc793.
RITCHIE, D.; THOMPSON, K. The UNIX Time-Sharing System. Communications of the ACM, 1974. Disponível em: https://dl.acm.org/doi/10.1145/361011.361061.
SALTZER, J.; SCHROEDER, M. The Protection of Information in Computer Systems. Proceedings of the IEEE, 1975. Disponível em: https://ieeexplore.ieee.org/document/1451869.
UNIVERSITY OF CALIFORNIA. 4.3BSD System Manager’s Manual. Berkeley, 1986. Disponível em: https://www.tuhs.org/Archive/4BSD/4.3BSD/.
STALLINGS, W. Data and Computer Communications. New York: Macmillan, 1985.
TANENBAUM, A. S. Operating Systems: Design and Implementation. Englewood Cliffs: Prentice Hall, 1987.
NEUMANN, P. G. Computer-Related Risks. Addison-Wesley, 1988.
LAMPSON, B. Protection. ACM Operating Systems Review, 1971. Disponível em: https://dl.acm.org/doi/10.1145/775265.775268.
DENNING, P. J. The Working Set Model for Program Behavior. Communications of the ACM, 1968. Disponível em: https://dl.acm.org/doi/10.1145/363095.363141.
FERBRACHE, D. Computer Security. London: Academic Press, 1983.
BRINCH HANSEN, P. The Architecture of Concurrent Programs. Prentice Hall, 1977.
POSTEL, J.; REYNOLDS, J. File Transfer Protocol. RFC 959, 1985. Disponível em: https://www.rfc-editor.org/rfc/rfc959.
REED, D.; KANODIA, R. Synchronization with Eventcounts and Sequencers. Communications of the ACM, 1979. Disponível em: https://dl.acm.org/doi/10.1145/359168.359172.
SETHI, R. Programming Languages: Concepts and Constructs. Addison-Wesley, 1989 (pré-publicação técnica 1988).
NATIONAL COMPUTER SECURITY CENTER. Trusted Computer System Evaluation Criteria (Orange Book). DoD 5200.28-STD, 1985. Disponível em: https://csrc.nist.gov/publications/detail/other/1985/12/01/trusted-computer-system-evaluation-criteria/final.