Jails em SSH: Montando sistema de Shell Seguro
Neste artigo vamos aprender a criar sistemas de Jail em SSH e assim separar recursos a usuários shell de acordo com suas necessidades, criando um ambiente secundário, o que aumenta a segurança na disponibilização de acessos remotos a terceiros.
Parte 2: Introdução - Jail Chroot e funcionalidades
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.
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.
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.
Mais uma vez um ótimo artigo que vem ajudar em muito na implementação de segurança em servidores Linux.
Parabéns.