Jail - Ambiente Chroot para SSH
Hoje uma das principais preocupações inerentes ao controle de acesso é definitivamente quanto as restrições que devem ser impostas para acessos via Secure Shell (SSH). Por ter acesso direto ao interpretador principal do sistema e seu console de administração, garantir a integridade de um sistema é muito difícil quando muitas pessoas acessam este servidor.
Existem muitas falhas de segurança que permitem que usuários comuns do sistema se utilizem para escalar privilégios e assim obter o status de super usuário (root), causando quase sempre muitos problemas como por exemplo:
- Utilização de recursos do Servidor comprometido para atividades ilícitas (lançar ataques contra outras redes, capturar dados da rede a qual o servidor pertence, etc );
- Danificar o servidor devido imperícia em manipular o sistema;
- Fornece acesso indevido a terceiros, tornando assim qualquer tipo de tentativa de controle futuro inviável e / ou impraticável.
Uma das principais estratégias de segurança (do grego Estrategía :P) conhecida e que realmente surte efeito imediato em qualquer ambiente é a do Mínimo Privilégio (Least Privilege).
O princípio do mínimo privilégio significa que qualquer objeto (usuário, administrador, programa, sistema, etc) deveria ter somente os privilégios que o objeto precisa para realizar as suas tarefas - e nada mais.
Mínimo privilégio é um princípio importante para limitar a exposição aos ataques e para limitar os danos causados por ataques. Deve-se explorar meios para reduzir os privilégios para as operações.
* Não se deve dar a um usuário a senha do root se tudo que ele precisa fazer é reiniciar o sistema de ftp. Ao invés disso, podemos configurar um ambiente com o sudo dando privilegio ao usuário apenas executar o que for necessário;
* Não executar um programa com privilégios de root se a única coisa que ele precisa com tais privilégios é escrever em um arquivo protegido. Ao invés disso, permita que o arquivo seja escrito por algum grupo e configure ACLs para o processo para este grupo;
Programas grandes e complexos são também um grande problema. Programas deste tipo e que, além disso, executam em modo privilegiado como por exemplo o bind que já foi alvo de vários ataques bem sucedidos, e que continua a ser alvo em potencial por sua "insistente" complexidade, são um problema ainda maior a nível de segurança.
Uma boa estratégia é diminuir o máximo possível o tamanho dos programas que sejam críticos à segurança do sistema, ou então isolar os pedaços dos programas complexos que realmente requerem acesso privilegiado, possibilitando assim concentrar a análise e depuração em partes menores do código.
Um bom exemplo de ambiente
Linux utilizando Least Privileges seria o sistema de chroot onde os serviços ficam aprisionados dentro de um ambiente virtual e enxergam apenas as bibliotecas necessárias para executar de forma correta. Caso algum atacante explore este serviço e obtenha acesso ao sistema, ficara estritamente restrito ao ambiente do serviço em questão, e não causara problemas ao nosso sistema principal. Hoje em dia a maioria dos serviços permite utilizacão de chroot.
Há alguns problemas com a estratégia do privilégio mínimo, podemos citar os principais:
- Pode ser complexo implementar caso os programas e ou protocolos não permitam estabelecer privilégios;
- Pode-se acabar implementando algo que tenha menos privilégios do que o mínimo estabelecido, acarretando em uma série de problemas por parte dos usuários.
O ambiente chroot visa então segmentar os recursos para determinados usuários impedindo que eles danifiquem o sistema em questão com ataques ou imperícia.
Sendo assim iremos abordar o uso de um ambiente em Chroot para acesso via SSH, permitindo que usuários acessem somente o necessário, limitando ao máximo o acesso à recursos de sistema e também criando um sistema "virtual" onde o usuário não irá enxergar os recursos reais do servidor que está acessando.