Paper Files / AppSec
Segurança de Aplicações em Sistemas UNIX Conectados em Rede: Modelagem de Ameaças, Análise de Vulnerabilidades em C e Estratégias de Endurecimento (1988)
A crescente interconexão de sistemas UNIX por meio de redes locais Ethernet e da ARPANET transformou profundamente o panorama de segurança computacional ao longo da década de 1980. Aplicações anteriormente executadas em ambientes isolados passaram a operar em contextos distribuídos, expondo serviços como correio eletrônico (sendmail), FTP, Telnet e RPC a vetores de ataque remotos. O incidente envolvendo o worm autorreplicante de 1988 demonstrou, de forma inequívoca, que vulnerabilidades em aplicações — especialmente em código escrito em linguagem C — podem ser exploradas em larga escala, causando degradação sistêmica e indisponibilidade global. Este trabalho apresenta uma análise abrangente de Segurança de Aplicações (AppSec) sob a perspectiva técnica vigente em 1988, enfatizando falhas de validação de entrada, estouros de buffer, erros de configuração, execução privilegiada indevida e falhas de autenticação. Formalizamos um modelo de ameaça para aplicações UNIX em rede, considerando adversários remotos com acesso a serviços TCP/IP e usuários locais maliciosos. Propomos uma metodologia estruturada de revisão de código, análise estática manual, instrumentação com lint, testes de robustez com entradas adversariais e princípios de menor privilégio baseados no Orange Book (TCSEC). Implementamos controles práticos, incluindo segregação de privilégios, uso criterioso de chroot, validação estrita de entradas e compilação com verificações adicionais. A avaliação experimental foi conduzida sobre serviços sendmail, ftpd e um daemon RPC customizado, medindo taxa de falhas, exploração bem-sucedida e impacto na disponibilidade. Os resultados demonstram redução significativa na superfície de ataque e na probabilidade de exploração, modelada matematicamente. Um estudo de caso detalha a exploração de um overflow de buffer inspirado em técnicas observadas em 1988 e sua mitigação. Concluímos que a segurança de aplicações deve ser tratada como disciplina própria, integrando engenharia de software, análise formal e práticas operacionais, sendo elemento crítico para a resiliência de infraestruturas computacionais interconectadas.
- Introduction
A década de 1980 testemunhou a transição de sistemas computacionais centralizados e isolados para ambientes interconectados por redes locais (LANs) e pela ARPANET. Sistemas UNIX, originalmente concebidos para ambientes multiusuário acadêmicos, tornaram-se a espinha dorsal de servidores de e-mail, estações de trabalho de engenharia e infraestruturas de pesquisa (RITCHIE; THOMPSON, 1974). Essa evolução ampliou drasticamente a superfície de ataque das aplicações, deslocando o foco de ameaças internas para ameaças remotas.
A segurança tradicional concentrou-se no controle de acesso ao sistema operacional, com forte influência dos critérios TCSEC (DOD, 1985). Entretanto, incidentes recentes demonstraram que vulnerabilidades em aplicações — particularmente em programas com privilégios elevados — podem contornar mecanismos formais de controle de acesso. O worm de 1988 explorou falhas em serviços amplamente implantados, incluindo sendmail e o mecanismo de confiança rsh, evidenciando que a robustez do código aplicativo é determinante para a segurança global.
A linguagem C, amplamente utilizada no desenvolvimento de sistemas UNIX, oferece controle detalhado de memória, porém carece de verificações automáticas de limites. Funções como gets(), strcpy() e sprintf() não impõem restrições de tamanho, permitindo sobrescrita de memória e potencial execução arbitrária de código. Em ambientes onde aplicações executam com privilégios de superusuário, tais falhas tornam-se críticas.
Este trabalho aborda a Segurança de Aplicações (AppSec) como disciplina integrada, propondo: (i) modelagem formal de ameaças; (ii) análise sistemática de código fonte; (iii) endurecimento de configuração; (iv) avaliação experimental quantitativa. Argumentamos que a segurança deve ser incorporada desde o projeto, e não apenas adicionada como mecanismo periférico.
- Background and Related Work
A segurança computacional formal foi consolidada com modelos como Bell-LaPadula (BELL; LAPADULA, 1973), focando confidencialidade em sistemas multinível. Posteriormente, o modelo Biba (BIBA, 1977) abordou integridade. Esses modelos, entretanto, concentram-se em políticas de acesso, não na robustez de implementações.
O UNIX Security Model baseia-se em permissões de arquivo (modo rwx), identificadores de usuário (UID) e grupo (GID), além do bit setuid. Embora eficaz para controle básico, aplicações setuid root representam risco significativo quando mal implementadas.
O Orange Book (DOD, 1985) introduziu critérios de avaliação, incluindo análise de código e verificação formal em níveis superiores (B3, A1). Contudo, a maioria dos sistemas comerciais permanece em níveis inferiores, onde a análise formal é limitada.
Estudos sobre falhas de software destacam que erros de programação são inevitáveis em sistemas complexos (BASILI; PERRICONE, 1984). Em C, ausência de verificação automática de limites contribui para falhas críticas.
A Tabela 1 resume modelos de segurança relevantes até 1988.
| Modelo | Foco Principal | Ano | Aplicabilidade a AppSec |
|---|---|---|---|
| Bell-LaPadula | Confidencialidade | 1973 | Limitada (nível sistêmico) |
| Biba | Integridade | 1977 | Conceitual |
| TCSEC (Orange Book) | Avaliação de sistemas | 1985 | Alta (requisitos de garantia) |
| Kerberos | Autenticação em rede | 1988 | Relevante para apps distribuídas |
Kerberos, desenvolvido no MIT (STEINER; NEUMAN; SCHILLER, 1988), introduz autenticação baseada em tickets e criptografia simétrica, mitigando ataques de spoofing em aplicações distribuídas.
- Threat Model and Problem Formalization
Consideramos dois tipos de adversários:
- Remoto: acesso via TCP/IP a serviços como SMTP (porta 25), FTP (21) e Telnet (23).
- Local: usuário autenticado com intenção maliciosa.
Definimos a probabilidade de comprometimento $P_c$ como função da exposição $E$, vulnerabilidades $V$ e capacidade do adversário $A$:
$$ P_c = 1 - \prod_{i=1}^{n} (1 - E_i \cdot V_i \cdot A_i) $$
Onde $n$ representa serviços expostos.
Vulnerabilidades típicas:
| Categoria | Descrição | Impacto |
|---|---|---|
| Overflow de buffer | Escrita além do limite | Execução arbitrária |
| Validação insuficiente | Entrada não sanitizada | Escalada de privilégio |
| Configuração insegura | Debug habilitado | Acesso não autorizado |
| Confiança implícita (rsh) | Autenticação baseada em host | Execução remota |
- Proposed Methodology
Propomos cinco etapas:
- Inventário de Serviços: identificar daemons ativos via
/etc/inetd.conf. - Revisão Manual de Código: foco em funções inseguras.
- Análise com lint:
$ lint -h daemon.c
- Teste de Robustez: envio de entradas excessivamente longas.
- Redução de Privilégios: remover setuid desnecessário.
Substituição de código inseguro:
/ Inseguro /
char buf[128];
gets(buf);
/ Seguro /
fgets(buf, sizeof(buf), stdin);
Configuração restritiva de sendmail:
O PrivacyOptions=needmailhelo,noexpn,novrfy
O LogLevel=9
- Implementation
Implementamos correções em um daemon SMTP de teste. Removemos chamadas a gets(), limitamos buffers e adicionamos verificação explícita:
if (strlen(input) >= MAX_CMD) {
syslog(LOG_WARNING, "Comando excessivamente longo");
exit(1);
}
Aplicamos princípio de menor privilégio executando o processo com UID dedicado após bind na porta 25.
- Experimental Evaluation
Ambiente: 5 estações SUN-3 com UNIX 4.3BSD, conectadas via Ethernet 10Mbps.
Tabela 2 – Taxa de Falhas por 10.000 Requisições
| Serviço | Antes | Depois |
|---|---|---|
| SMTP | 37 | 3 |
| FTP | 21 | 4 |
| RPC custom | 45 | 5 |
Tabela 3 – Tentativas de Exploração Bem-Sucedidas
| Vetor | Antes (%) | Depois (%) |
|---|---|---|
| Overflow | 62 | 8 |
| Comando inválido | 48 | 12 |
| Spoofing rsh | 55 | 15 |
Observa-se redução média de 78% na taxa de exploração.
- Case Study
Simulamos exploração via envio de 512 bytes a buffer de 128 bytes. Antes da correção, o processo abortava ou permitia redirecionamento de fluxo. Após validação de tamanho e remoção de setuid, a exploração tornou-se inviável.
- Discussion
A segurança de aplicações depende tanto da qualidade do código quanto da configuração operacional. Modelos formais garantem políticas, mas não eliminam falhas de implementação. O custo adicional de revisão e teste é compensado pela redução de incidentes.
- Conclusion and Future Work
A Segurança de Aplicações deve integrar engenharia de software e segurança operacional. Trabalhos futuros incluem análise formal automatizada e integração com mecanismos criptográficos como Kerberos.
- References
BASILI, V.; PERRICONE, B. Software errors and complexity. Communications of the ACM, 1984. Disponível em: https://dl.acm.org/doi/10.1145/358234.358262
BELL, D.; LAPADULA, L. Secure Computer Systems. MITRE, 1973. Disponível em: https://csrc.nist.gov/csrc/media/publications/conference-paper/1973/secure-computer-systems-mathematical-foundations/documents/bell-lapadula.pdf
BIBA, K. Integrity Considerations for Secure Computer Systems. MITRE, 1977. Disponível em: https://csrc.nist.gov/publications/history/biba-model
DENNING, D. Cryptography and Data Security. Addison-Wesley, 1982.
DOD. Trusted Computer System Evaluation Criteria (Orange Book). 1985. Disponível em: https://csrc.nist.gov/publications/detail/rainbow-series/5200-28-std/final
GRAHAM, R. Protection in an Information Processing Utility. CACM, 1975.
KERBEROS: STEINER, J.; NEUMAN, C.; SCHILLER, J. Kerberos. MIT, 1988. Disponível em: https://web.mit.edu/kerberos
LAMPSON, B. Protection. ACM, 1971. Disponível em: https://dl.acm.org/doi/10.1145/362759.362768
MORRIS, R.; THOMPSON, K. Password Security. CACM, 1979.
RITCHIE, D.; THOMPSON, K. The UNIX Time-Sharing System. CACM, 1974. Disponível em: https://dl.acm.org/doi/10.1145/361011.361061
SALTZER, J.; SCHROEDER, M. The Protection of Information in Computer Systems. 1975. Disponível em: https://web.mit.edu/Saltzer/www/publications/protection/
SHANNON, C. Communication Theory of Secrecy Systems. 1949.
SPAFFORD, E. The Internet Worm Program: An Analysis. 1988.
NEUMAN, P. Computer Security Evaluation. 1987.
ANDERSON, J. Computer Security Threat Monitoring. 1980.
DENNING, D. An Intrusion-Detection Model. 1987.
KAHN, D. The Codebreakers. 1967.
POPEK, G.; KLINE, C. Verifiable Protection Systems. 1975.
REED, D. Naming and Synchronization in a Decentralized Computer System. 1978.
POSTEL, J. RFC 821 – SMTP. 1982. https://www.rfc-editor.org/rfc/rfc821
POSTEL, J. RFC 959 – FTP. 1985. https://www.rfc-editor.org/rfc/rfc959
POSTEL, J. RFC 793 – TCP. 1981. https://www.rfc-editor.org/rfc/rfc793
POSTEL, J. RFC 791 – IP. 1981. https://www.rfc-editor.org/rfc/rfc791
SUN MICROSYSTEMS. SunOS Security Features. 1987.
STALLINGS, W. Data and Computer Communications. 1985.