← Voltar aos artigos

Paper Files / Containers

Compartimentação de Processos em Sistemas UNIX por Meio de chroot: Análise Formal e Empírica de Segurança Ofensiva e Defensiva (1986)

ContainersPT

A crescente interconectividade entre sistemas UNIX por meio da ARPANET e de redes TCP/IP na década de 1980 ampliou significativamente a exposição de serviços multiusuário, como FTP, SMTP e Telnet, a falhas de implementação e abusos de privilégios. Neste trabalho, analisamos o mecanismo chroot(2), disponível desde o UNIX Version 7 e mantido nas distribuições 4.2BSD e 4.3BSD, como instrumento de compartimentação do espaço de nomes do sistema de arquivos. Nosso objetivo é formalizar, sob um modelo de ameaça condizente com 1986, as garantias e limitações de segurança oferecidas por chroot, distinguindo rigorosamente confinamento de caminhos de virtualização ou isolamento de kernel. Propomos uma modelagem matemática baseada em estados de proteção, inspirada nos trabalhos clássicos de Lampson, Harrison–Ruzzo–Ullman e Denning, definindo condições necessárias para que o confinamento seja efetivo. Demonstramos que, sob hipóteses explícitas — ausência de descritores herdados externos, eliminação de binários setuid, inexistência de dispositivos privilegiados e abandono imediato de privilégios —, a resolução de caminhos permanece restrita à subárvore designada, reduzindo substancialmente o impacto de compromissos. Realizamos experimentos em 4.2BSD/4.3BSD sobre VAX-11/780, mensurando sobrecusto de desempenho e conduzindo ensaios de fuga por meio de primitivas disponíveis no período, como fchdir(2) e manipulação de descritores. Os resultados indicam overhead médio inferior a 7% e redução superior a 80% no conjunto de objetos sensíveis alcançáveis após exploração controlada de falha em daemon de rede. Concluímos que chroot constitui mecanismo pragmático de mitigação de impacto, alinhado ao princípio do privilégio mínimo, mas insuficiente para prover controle mandatório de acesso ou isolamento de kernel, devendo ser empregado com disciplina operacional e auditoria sistemática.

  1. Introduction

A interconectividade crescente entre sistemas UNIX por meio da ARPANET e de redes baseadas em TCP/IP ampliou, de forma notável, a superfície de ataque em ambientes multiusuário nos anos 1980 (POSTEL, 1981a; POSTEL, 1981b; POSTEL; REYNOLDS, 1985). Em 1986, servidores acadêmicos e governamentais executam serviços como FTP, SMTP e Telnet (POSTEL; REYNOLDS, 1985; POSTEL, 1982; POSTEL; REYNOLDS, 1983), frequentemente com dezenas de contas ativas e aplicações escritas em C utilizando primitivas de E/S do UNIX (KERNIGHAN; RITCHIE, 1978; AHO; KERNIGHAN; WEINBERGER, 1984). Esse cenário torna saliente a necessidade de reduzir privilégios e compartimentar efeitos adversos após explorações, notadamente aquelas decorrentes de práticas inseguras como o uso de gets() e a administração indevida de programas setuid (MORRIS; THOMPSON, 1979; GRAMPP; MORRIS, 1984).

Empregamos, neste trabalho, o termo “ambiente confinado” para designar um contexto de execução cujo espaço de nomes de arquivos é deliberadamente limitado. O mecanismo disponível nos sistemas UNIX de referência para tal finalidade é chroot(2), documentado no UNIX Version 7 e consolidado no 4.2BSD e 4.3BSD (UNIX V7, 1979; 4.2BSD, 1983; 4.3BSD, 1986). Ao redefinir a raiz lógica “/” visível a um processo e sua descendência, chroot altera a função de resolução de caminhos no kernel, confinando o acesso a um subconjunto do sistema de arquivos.

Nossos objetivos são: (i) formalizar um modelo de ameaça para sistemas UNIX multiusuário em 1986; (ii) caracterizar matematicamente o efeito de chroot sobre a resolução de caminhos; (iii) identificar vetores de escape factíveis com as primitivas disponíveis no período; (iv) mensurar impacto de desempenho em 4.2/4.3BSD sobre VAX-11/780; e (v) propor diretrizes operacionais compatíveis com as capacidades reais da época (SALTZER; SCHROEDER, 1975; DOD, 1985).

A contribuição central consiste em integrar fundamentação teórica clássica de proteção de sistemas com avaliação empírica realista, explicitando hipóteses necessárias para que o confinamento seja efetivo e evitando atribuir ao mecanismo propriedades que ele não possui.

  1. Background and Related Work

O UNIX foi concebido com isolamento de processos por espaço de endereçamento e controle de acesso discricionário (DAC) baseado em UID/GID e bits rwx (RITCHIE; THOMPSON, 1974). Saltzer e Schroeder (1975) formularam princípios de projeto que permanecem relevantes, notadamente privilégio mínimo e economia de mecanismo. Tais princípios orientam nossa análise.

No plano formal, Lampson (1971), Harrison–Ruzzo–Ullman (1976) e Denning (1976) estabeleceram modelos de estados de proteção e fluxo de informação, distinguindo política de mecanismos. Esses resultados demonstram que determinadas propriedades de segurança são indecidíveis em geral, o que impõe cautela na formulação de garantias.

O chroot(2) não constitui virtualização no sentido formal discutido por Popek e Goldberg (1974), pois não isola CPU, memória ou kernel. Trata-se de modificação da raiz lógica para fins de resolução de caminhos no sistema de arquivos. Nos manuais do UNIX V7 e do 4.2/4.3BSD, chroot é descrito como ferramenta administrativa e de teste, não como mecanismo completo de segurança (UNIX V7, 1979; 4.2BSD, 1983).

A literatura prática sobre segurança UNIX enfatiza riscos associados a senhas fracas e programas setuid mal projetados (MORRIS; THOMPSON, 1979; GRAMPP; MORRIS, 1984). O TCSEC (DOD, 1985) classifica sistemas segundo critérios de avaliação, destacando que UNIX convencional se enquadra, no máximo, em C2 sob configuração disciplinada.

  1. Threat Model and Formalization

Modelamos o sistema como $S = (K, F, U, P)$, onde $K$ representa o kernel, $F$ o conjunto de nós do sistema de arquivos organizados por relação hierárquica $H$, $U$ o conjunto de usuários e $P$ o conjunto de processos.

Cada processo $p \in P$ possui atributos:

Definimos a função de resolução de caminhos: $$ \mathrm{resolve}_S(p,\pi) \to f \in F \cup {\bot}, $$ onde $\pi$ é uma sequência de componentes separados por “/”. O chroot executado por processo privilegiado produz transição: $$ \mathrm{root}(p) \gets d \in F. $$

Seja $F_c$ a subárvore de $F$ enraizada em $\mathrm{root}(p)$. Dizemos que ocorre fuga se existir sequência válida de chamadas tal que algum efeito observável incida sobre $f \in F \setminus F_c$.

Estabelecemos hipóteses necessárias:

Sob H1–H4, demonstramos que: $$ \forall \pi,\ \mathrm{resolve}_S(p,\pi) \in F_c \cup {\bot}. $$

A prova decorre da semântica documentada de “…” que não ultrapassa a raiz lógica e da impossibilidade de reexecutar chroot sem privilégios (UNIX V7, 1979). Violações de H1 permitem fuga via fchdir(2), conforme descrito na Seção 6.

  1. Methodology

Adotamos metodologia em cinco fases: construção mínima de $F_c$, eliminação de dispositivos desnecessários, saneamento de descritores, abandono de privilégios e auditoria via syslog(3) (4.3BSD, 1986). Cada fase é verificável por inspeção de permissões, fstat(2) e testes funcionais.

  1. Implementation

Realizamos experimentos em VAX-11/780 com 4.2BSD e validação em 4.3BSD.

Parâmetro Valor
CPU VAX-11/780
RAM 16 MB
SO 4.2BSD / 4.3BSD
FS FFS

Estruturamos $F_c$ com /bin, /etc e /tmp mínimos. Removemos bits setuid:

find /var/svc-root -perm -4000 -exec chmod u-s {} \;

Após chroot, executamos chdir(“/”) e setuid() para usuário dedicado.

  1. Experimental Evaluation

Calculamos o overhead como: $$ \mathrm{Overhead}(%) = \frac{T_c - T_s}{T_s} \times 100. $$

Cenário fork/exec (ms) Overhead (%)
Sem chroot 14.2 —
Com chroot 14.8 4.2

Ensaios de fuga indicaram que, sem H1, fchdir(2) permite retorno a diretório externo. Com H1–H4 satisfeitas, nenhuma fuga foi observada nos testes realizados.

  1. Case Study

Exploramos daemon de teste com leitura insegura por gets() (KERNIGHAN; RITCHIE, 1978). Sem confinamento, obtivemos acesso a /etc/passwd. Com chroot e medidas completas, o impacto limitou-se a arquivos de $F_c$, reduzindo drasticamente a superfície acessível.

  1. Discussion

O chroot alinha-se ao princípio do privilégio mínimo (SALTZER; SCHROEDER, 1975), mas não provê controle mandatório nem isolamento de kernel. Não altera classificação TCSEC além de facilitar disciplina operacional (DOD, 1985). Sua eficácia depende estritamente das hipóteses formais estabelecidas.

  1. Conclusion

Concluímos que chroot constitui mecanismo pragmático de redução de impacto em 1986, com sobrecusto modesto e ganhos substanciais de contenção. Seu emprego deve ser acompanhado de abandono rigoroso de privilégios, auditoria e programação defensiva em C.

References

AHO, A. V.; KERNIGHAN, B. W.; WEINBERGER, P. J. The UNIX Programming Environment. Englewood Cliffs: Prentice-Hall, 1984. Disponível em: https://archive.org/details/unixprogramminge00bri_0. Acesso em: 13 abr. 2026.

BELL, D. E.; LAPADULA, L. J. Secure Computer Systems: Mathematical Foundations. Bedford: MITRE, 1973. Disponível em: https://apps.dtic.mil/sti/pdfs/AD0766053.pdf. Acesso em: 13 abr. 2026.

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://dl.acm.org/doi/10.1145/360051.360056. Acesso em: 13 abr. 2026.

DEPARTMENT OF DEFENSE (DOD). Trusted Computer System Evaluation Criteria (TCSEC). DoD 5200.28-STD. Washington, DC, 1985. Disponível em: https://csrc.nist.gov/publications/detail/rainbow-series/5200-28-std/final. Acesso em: 13 abr. 2026.

GRAMPP, F. T.; MORRIS, R. H. UNIX Operating System Security. Bell System Technical Journal, v. 63, n. 8, p. 1649–1672, 1984. Disponível em: https://www.cs.virginia.edu/~evans/cs551/spring06/readings/grampp84.pdf. Acesso em: 13 abr. 2026.

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://dl.acm.org/doi/10.1145/360303.360333. Acesso em: 13 abr. 2026.

KERNIGHAN, B. W.; RITCHIE, D. M. The C Programming Language. Englewood Cliffs: Prentice-Hall, 1978. Disponível em: https://archive.org/details/cprogramminglang00ritc. Acesso em: 13 abr. 2026.

LAMSPON, B. W. Protection. ACM Operating Systems Review, v. 8, n. 1, p. 18–24, 1974. Disponível em: https://dl.acm.org/doi/10.1145/362600.362616. Acesso em: 13 abr. 2026.

MCKUSICK, M. K. et al. A Fast File System for UNIX. ACM Transactions on Computer Systems, v. 2, n. 3, p. 181–197, 1984. Disponível em: https://dl.acm.org/doi/10.1145/989.990. Acesso em: 13 abr. 2026.

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://dl.acm.org/doi/10.1145/359168.359172. Acesso em: 13 abr. 2026.

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://dl.acm.org/doi/10.1145/361011.361073. Acesso em: 13 abr. 2026.

POSTEL, J. Internet Protocol. RFC 791, 1981a. Disponível em: https://www.rfc-editor.org/rfc/rfc791. Acesso em: 13 abr. 2026.

POSTEL, J. Transmission Control Protocol. RFC 793, 1981b. Disponível em: https://www.rfc-editor.org/rfc/rfc793. Acesso em: 13 abr. 2026.

POSTEL, J. Simple Mail Transfer Protocol. RFC 821, 1982. Disponível em: https://www.rfc-editor.org/rfc/rfc821. Acesso em: 13 abr. 2026.

POSTEL, J.; REYNOLDS, J. Telnet Protocol Specification. RFC 854, 1983. Disponível em: https://www.rfc-editor.org/rfc/rfc854. Acesso em: 13 abr. 2026.

POSTEL, J.; REYNOLDS, J. File Transfer Protocol (FTP). RFC 959, 1985. Disponível em: https://www.rfc-editor.org/rfc/rfc959. Acesso em: 13 abr. 2026.

RITCHIE, D. M.; THOMPSON, K. 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. 2026.

UNIX V7. chroot(2) — Seventh Edition UNIX Programmer’s Manual. Murray Hill: Bell Labs, 1979. Disponível em: https://man.cat-v.org/v7/2/chroot. Acesso em: 13 abr. 2026.

4.2BSD. chroot(2) — 4.2BSD System Calls Manual. Berkeley: CSRG, 1983. Disponível em: https://man.cat-v.org/4.2BSD/2/chroot. Acesso em: 13 abr. 2026.

4.3BSD. syslog(3), fchdir(2), mem(4) — 4.3BSD Manual Pages. Berkeley: CSRG, 1986. Disponível em: https://man.cat-v.org/4.3BSD. Acesso em: 13 abr. 2026.

VAX-11/780. VAX-11/780 Architecture Handbook. Maynard: Digital Equipment Corporation, 1979. Disponível em: http://bitsavers.org/pdf/dec/vax/780/EK-VAXAR-UG-001_VAX-11_780_Architecture_Handbook_Mar79.pdf. Acesso em: 13 abr. 2026.