Projeto de Segurança em Software Livre Segurança para um Servidor Linux Segurança de Sistemas Prof. João Bosco M. Sobral Pensando em segurança antes da instalação Com a Internet, seu servidor é acessível, de qualquer lugar do planeta, deixando de ser meramente um host para se tornar um alvo para invasão. Segurança de Sistemas Prof. João Bosco M. Sobral Pensando em segurança antes da instalação Os sistemas operacionais utilizados nos computadores diretamente ligados à rede: continuam vindo com um série de funcionalidades de facilidades pré-ativadas, que não contribuem para a criação de um ambiente seguro. Segurança de Sistemas Prof. João Bosco M. Sobral Pensando em segurança antes da instalação Um projeto de segurança deve trabalhar com a premissa de que: a segurança e a conveniência do ponto de vista do usuário final são inversamente proporcionais. Conexões temporárias, discadas ou similares, devem permitir níveis de serviços um tanto limitados. Segurança de Sistemas Prof. João Bosco M. Sobral Pensando em segurança antes da instalação O equilíbrio dos dois minimizam o risco, mas antes disso devem estar conciliados com o negócio da empresa. Segurança de Sistemas Prof. João Bosco M. Sobral Pensando em segurança antes da instalação Seu sistema de firewall não é atuante para determinados tipos de ataque. Sua configuração pode não ter sido feita suficientemente segura para certos tipos de ataques. Segurança de Sistemas Prof. João Bosco M. Sobral Pensando em segurança antes da instalação Seu antivírus só será útil para ataques de vírus já conhecidos. A segurança é como uma corrente, na qual seu elo mais fraco representa o nível de segurança da mesma. Segurança de Sistemas Prof. João Bosco M. Sobral Partições Discos rígidos podem ser divididos em um ou mais discos lógicos que chamamos de partições. Esta divisão é descrito na tabela de partições do disco, que fica no setor 0. Segurança de Sistemas Prof. João Bosco M. Sobral Partições É recomendável criar várias partições: Facilitar a administração de backup. Facilitar a administração de segurança, separando os programas com SUID em partição própria. Limitar o tamanho dos diretórios. ??? Segurança de Sistemas Prof. João Bosco M. Sobral Antes da instalação ... Regras para particionamento do HD : saber para qual finalidade será usado seu servidor: Firewall e Proxy Web SMTP, POP FTP Dá mais autonomia para se aplicar segurança a partir do próprio sistema de arquivos. Segurança de Sistemas Prof. João Bosco M. Sobral Particionamento do HD Definir: uma partição para o próprio sistema e outra partição para a área de swap (64 Mb, 128Mb) Partição para backup. Partição para programas SUID. Diretórios em partições diferentes ou em discos diferentes (HDA, HDB) Segurança de Sistemas Prof. João Bosco M. Sobral Partição para o sistema: diretórios Linux / - diretório raiz. /boot - diretório de arquivos estáticos de inicialização (carga do sistema – boot loader). /root - diretório local do super-usuário. /dev - diretório de arquivos de dispositivos do sistema (modems, terminais virtuais, discos, ...) Segurança de Sistemas Prof. João Bosco M. Sobral Particionamento do HD /bin - diretório dos arquivos executáveis. /sbin - arquivos de sistema essenciais. /mnt - diretório ponto de montagem de partições temporárias, como discos, cd-rom, zip drive, ... /lib - arquivos das bibliotecas compartilhadas utilizadas pelo sistema. Segurança de Sistemas Prof. João Bosco M. Sobral Diretórios Linux /home – diretório local de diretórios dos usuários. /usr - arquivos de perfis (profiles) e configurações pessoais de usuários. /tmp - arquivos temporários gerados por utilitários. /proc – pseudo-sistema de arquivos, que armazena em tempo real as informações geradas pelo kernel. Segurança de Sistemas Prof. João Bosco M. Sobral Diretórios Linux /etc - principais arquivos de configuração dos utilitários ou programas do sistema. /var - arquivos de informação variável, tais como arquivos de logs do sistema. /opt - instalação de softwares opcionais de terceiros: BD Oracle, serviço de Backup CA ArcServer, aplicativos, entre outros. Segurança de Sistemas Prof. João Bosco M. Sobral Servidor Firewall / Proxy Para um servidor Firewall / Proxy, os maiores diretórios devem ficar para o /usr e o /var dos logs locais. Segurança de Sistemas Prof. João Bosco M. Sobral Alguns tamanhos de diretórios /boot / /tmp /usr /var /home /opt Swap 15Mb 512Mb 128Mb 2048Mb 2048Mb 512Mb 256Mb 128Mb Segurança de Sistemas Prof. João Bosco M. Sobral Para outros serviços específicos Consultar a documentação do aplicativo. O negócio da empresa depende do desempenho do seu servidor. Segurança de Sistemas Prof. João Bosco M. Sobral Partição Swap Num sistema em que a área de Swap está sendo usada com muita frequência, a máquina precisa de mais memória RAM. 64 Mb para memória de 128 Mb. 128 Mb para memória de 256 Mb ? Segurança de Sistemas Prof. João Bosco M. Sobral Segurança Física Trancar os servidores. Tirar o boot pelo disquete ou CD-ROM. Tirar o autorun. Tirar o teclado. Tirar o monitor. Permitir acesso físico somente às pessoas autorizadas. Segurança de Sistemas Prof. João Bosco M. Sobral Listar os pacotes instalados >rpm –qa > /root/pacotes_instalados >dpkg –l > /root/pacotes_instalados >apt-get ... Segurança de Sistemas Prof. João Bosco M. Sobral Remover os pacotes desnecessários Informação sobre o pacote: >rpm –qi <nome_pacote> Remover >rpm –e <nome_pacote> Remover >apt-get remove <nome_pacote> Segurança de Sistemas Prof. João Bosco M. Sobral Remover ... Deixe só o que é utilizado. Compiladores (gcc, g++, ...) Editor de texto (depois que tudo estiver configurado). more Bibliotecas desnecessárias. cat Ferramentas clientes de serviços (ftp, telnet, wget, lynx, ... ) Segurança de Sistemas Prof. João Bosco M. Sobral Loaders No MBR (Master Boot Record) do HD reside um programa “loader”. LILO (Linux Loader) GRUB (Grand Unified Boot-Loader) NTLDR A tarefa do “loader” é carregar o SO na memória. Podem ser configurados para carregarem: Versões de kernel. SOs diferentes (dual boot). Segurança de Sistemas Prof. João Bosco M. Sobral Loaders Carrega o Kernel, que por sua vez, ao fim de sua inicialização, carrega o processo INIT, o primeiro e todos os processos, pai de todos os outros. INIT cria os outros processos através da chamada fork() . Segurança de Sistemas Prof. João Bosco M. Sobral Grupos de usuários Permissões de acesso a grupo de usuários, para facilitar o gerenciamento de permissões aos recursos do sistema e controle dos usuários. Base de dados de grupos do sistema ficam em: /etc/group e /etc/gshadow (senhas) Senha para os grupos. Segurança de Sistemas Prof. João Bosco M. Sobral Colocar senha no LILO ou grupo Segurança de Sistemas Prof. João Bosco M. Sobral Fechar terminais Segurança de Sistemas Prof. João Bosco M. Sobral Não permitir Ctrl+Alt+Del Segurança de Sistemas Prof. João Bosco M. Sobral Restringir acesso Segurança de Sistemas Prof. João Bosco M. Sobral Mudar permissões e atributos de arquivos Segurança de Sistemas Prof. João Bosco M. Sobral Mudar atributos dos logs Segurança de Sistemas Prof. João Bosco M. Sobral Senhas seguras Segurança de Sistemas Prof. João Bosco M. Sobral Tirar SuidBit e Gdbit Segurança de Sistemas Prof. João Bosco M. Sobral PAM Segurança de Sistemas Prof. João Bosco M. Sobral Segurança de Terminal Segurança de Sistemas Prof. João Bosco M. Sobral Configurando a placa de rede Segurança de Sistemas Prof. João Bosco M. Sobral Habilitando SSH Segurança de Sistemas Prof. João Bosco M. Sobral Configurando segurança em serviços TCPD Segurança de Sistemas Prof. João Bosco M. Sobral Verificando portas abertas Segurança de Sistemas Prof. João Bosco M. Sobral Instalando NIDS www.psionic.com Portsentry Network Intrusion Detection System Instalação: > rpm –ivh portsentry-*.rpm Segurança de Sistemas Prof. João Bosco M. Sobral Trabalhando com Logs Segurança de Sistemas Prof. João Bosco M. Sobral Backup do sistema Segurança de Sistemas Prof. João Bosco M. Sobral Instalar o Proxy Web Segurança de Sistemas Prof. João Bosco M. Sobral Instalar o Ntop Ntop é um analisador de rede. Segurança de Sistemas Prof. João Bosco M. Sobral Instalando o Nessus Nessus é o analisador de vulnerabilidades. Segurança de Sistemas Prof. João Bosco M. Sobral Instalando o Sussen: o cliente Nessus Segurança de Sistemas Prof. João Bosco M. Sobral Instalando o Tripware HIDS – Host Intrusion Detection System Verifica integridade de arquivos. Segurança de Sistemas Prof. João Bosco M. Sobral VPN Com OpenVPN Com IPSec Segurança de Sistemas Prof. João Bosco M. Sobral Firewall com IPTables Segurança de Sistemas Prof. João Bosco M. Sobral Instalando o LIDS LIDS: Linux Intrusion Detection System MAC – Mandatory Access Control (ACLs) Acrescentando segurança ao servidor, no nível do kernel, em relação ao que o Firewall com o IPTables não faz. Módulo de kernel. Segurança de Sistemas Prof. João Bosco M. Sobral LIDS LIDS é um patch de melhorias para a kernel do Linux escrito por Xie Huagang e Philippe Biondi. Este patch adiciona esquemas de segurança extrema ao kernel e que não são possíveis apenas com as funções nativas do kernel. Segurança de Sistemas Prof. João Bosco M. Sobral Algumas funções do LIDS Mandatory Access Controls (MACs). Detecção de Port Scanners. Proteção de acesso a arquivos e pastas (incluindo pelo root). Proteção de processos, módulos e interfaces. Segurança de Sistemas Prof. João Bosco M. Sobral LIDS TPE (Trusted Path Execution) Um dos novos features é o TPE (Trusted Path Execution). Este novo recurso veio para criar uma lista de pathes de execução segura em nosso sistema. Segurança de Sistemas Prof. João Bosco M. Sobral LIDS TPE (Trusted Path Execution) Com ele criamos uma ACL que irá verificar toda a execução de programas e scripts em nosso sistema, ... ... visando assim barrar possíveis execuções de programas/usuários que não deviam ser executados e em pastas/paths que não deveriam estar. Segurança de Sistemas Prof. João Bosco M. Sobral LIDS TPE (Trusted Path Execution) Para que os binários sejam executados, eles devem ter no MÍNIMO proteção pelo LIDS como READONLY. Para habilitar essa feature deve-se compilar o kernel com LIDS e habilitar esta linha: [*] Enable LIDS Trusted Path Execution (TPE) feature. Segurança de Sistemas Prof. João Bosco M. Sobral LIDS TPE (Trusted Path Execution) Para iniciar o modo TPE basta: # lidsadm -S -- +TPE Com o TPE podemos solucionar muitos problemas relevantes a usuários executando binários que não deveriam. Ou de arquivos binários que não deveriam estar sendo executados pela sua máquina a dentro. Segurança de Sistemas Prof. João Bosco M. Sobral Partes do TPE Trusted Path: Um path confiável é aquele que o diretório atual do binário e de propriedade do root (uid=0) é o seu grupo ou então que seja world writable (todo mundo pode escrever). Segurança de Sistemas Prof. João Bosco M. Sobral Partes do TPE Trusted ACL: Essa é a lista onde temos os usuários confiáveis (trusted users). Em adição ao 'root', todo usuário nesta lista será considerado confiável a executar nossos binários. Segurança de Sistemas Prof. João Bosco M. Sobral Partes do TPE Regras: Estas regras serão adicionadas com o lidsadm para dizer se determinado binário será executado ou não levando em consideração a lista de Trusted Path e Trusted ACL. Segurança de Sistemas Prof. João Bosco M. Sobral Lista de pathes Digamos que já tenhamos uma lista com o Trusted path e com o Trusted ACL. Segurança de Sistemas Prof. João Bosco M. Sobral Lista de patches A lista irá agir da seguinte maneira para verificar o que pode ou não ser executado: Trusted User + Trusted Path = usuário pode executar o binário. Trusted User + Untrusted Path = usuário pode executar o binário. Untrusted User + Untrusted Path = usuário não pode executar. Segurança de Sistemas Prof. João Bosco M. Sobral Exemplo Esse é um pequeno exemplo de implementação de regras onde apenas usuários não confiáveis e arquivos que não estão no TPE irão ser barrados. Esta implementação teve apenas um caráter didático porque se formos realmente verificar, encontraremos muitas falhas de segurança nesse tipo de regra Segurança de Sistemas Prof. João Bosco M. Sobral Ataque Se um usuário não confiável executar um tipo de ataque que utilize por exemplo, /lib/ldlinux.so.X <executável>, que está no trusted path... veremos que ele não precisa de muito esforço para explorar essas vulnerabilidades. Segurança de Sistemas Prof. João Bosco M. Sobral Trusted Path Não é muito usual devido que, para que o diretório seja protegido, deve ser do root e do grupo dele, já que a verdadeira função e essência do LIDS é proteger o sistema e tirar do usuário root o poder absoluto. Então as melhores opções que temos para proteger determinados diretórios é a proteção mínima de marcá-los como READONLY. Segurança de Sistemas Prof. João Bosco M. Sobral Vamos ver alguns exemplos logo abaixo: # lidsconf -A -o /sbin -j READONLY Executáveis abaixo do /sbin estão como "Trusted". # lidsconf -A -o /lib -j READONLY Libraries abaixo do /lib estão como "Trusted". Segurança de Sistemas Prof. João Bosco M. Sobral # lidsconf -A -o /lib/modules -j READONLY Módulos abaixo do /lib/modules estão como "trusted". # lidsconf -A -o /var/workdir -j READONLY # lidsconf -A -o /sbin/application_a -j READONLY # lidsconf -A -s /sbin/application_a -o /var/workdir -j WRITE Segurança de Sistemas Prof. João Bosco M. Sobral Como application_a está protegido como READONLY e tem permissão de WRITE em workdir, então arquivos que estão dentro do /var/workdir serão considerados confiáveis. Segurança de Sistemas Prof. João Bosco M. Sobral User Space Vamos ver um pouco do user space do novo esquema do LIDS. Bem parecido com o ACL_DISCOVERY mode, o modo 'tpe' também é usado para descrever o status do LIDS durante a sua execução. Segurança de Sistemas Prof. João Bosco M. Sobral User Space Para que possamos controlar facilmente este novo modo, um novo flag foi adicionado ao lidstools: a TPE flag. Segurança de Sistemas Prof. João Bosco M. Sobral User Space Esse flag pode ser usada para verificar se o TPE está em modo on ou off. Assim como iniciar ou parar o modo. # lidsadm -S -- +TPE (inicia o modo TPE) # lidsadm -S -- -TPE (desliga o modo TPE) Segurança de Sistemas Prof. João Bosco M. Sobral User Space Podemos também selar a kernel e ligar o TPE ao mesmo tempo: # lidsadm -I +TPE Se ligarmos o modo ALC_DISCOVERY podemos localizar facilmente que libraries devem estar protegidas durante o modo TPE ligado. Segurança de Sistemas Prof. João Bosco M. Sobral Kernel Space Vamos ver um pouco de como o novo módulo do TPE age em nível de kernel no sistema Linux. No kernel para verificar se um aplicativo é ou não protegido, existe uma função básica que já havia sido implementada no LIDS. Segurança de Sistemas Prof. João Bosco M. Sobral Kernel Space O TPE é implementado basicamente nessas 3 funções a seguir: lids_exec_tpe_permission (brpm): Esta função checa se o binário é protegido ou não. Segurança de Sistemas Prof. João Bosco M. Sobral Kernel space lids_mmap_tpe_permission (file, protection): Esta função checa se as libraries são protegidas ou não. lids_module_tpe_permission (module): Esta função verifica se o módulo é protegido ou não antes de carregá-lo no sistema. Segurança de Sistemas Prof. João Bosco M. Sobral Lugares onde estas funções estão colocadas podem ser considerados derivados dos LSM Hooks(8)*. Para o lids_exec_tpe_permission(brpm), pode-se adicionar um hook para chamar a função fs/exec.c:do_exec(). Um algoritmo básico que poderia fazer isso pra gente seria: Segurança de Sistemas Prof. João Bosco M. Sobral lids_exec_tpe_permission(bprm) { int error = 0 if (!lids_check_base(bprm->file->dentry, LIDS_APPEND)) error = -EACCES; return error; } Segurança de Sistemas Prof. João Bosco M. Sobral Estamos mostrando apenas como exemplo, não vamos nos aprofundar em kernel space com o novo LIDS. Este código realmente não existe, é um pseudo-código. No caso ele apenas verifica dentro do arquivo se o binário a ser executado está protegido ou não. Segurança de Sistemas Prof. João Bosco M. Sobral Como sabemos, a maioria das libraries do Linux é carregada usando a função mmap(), podemos colocar um hook para verificar se a library está protegida ou não para ser carregada em mm/mmap.c:do_mmap_pgoff(). O exemplo que segue mostra um simples exemplo de como aplicar a função lids_mmap_tpe_permission(): Segurança de Sistemas Prof. João Bosco M. Sobral lids_mmap_tpe_permission(file, protection) { int error = 0; if (!file) return 0; if (!(protection & PROT_EXEC)) return 0; if (!lids_check_base(file->dentry, LIDS_APPEND)) error = -EPERM; return error; } Segurança de Sistemas Prof. João Bosco M. Sobral Esse exemplo apenas checa se o arquivo com PROT_EXEC tem seu atributo de memória protegido. Se o arquivo não está protegido ele retorna uma mensagem de erro com -EPERM como error code. Segurança de Sistemas Prof. João Bosco M. Sobral Vamos ver agora também um exemplo de como proteger módulos usando a função lids_module_tpe_permission(module). Segurança de Sistemas Prof. João Bosco M. Sobral Podemos utilizar para verificar módulos em nosso sistema usando seus famosos symbols information. Para isso setamos a nossa função em kernel/module.c:sys_init_module(). Segurança de Sistemas Prof. João Bosco M. Sobral Vamos ver um exemplo de algoritmo que verifica integridade de proteção dos nossos módulos: Segurança de Sistemas Prof. João Bosco M. Sobral lids_module_tpe_permission(module) { int error = 0; modpath = get_module_path(module); if (!lids_check_base(modpath->dentry, LIDS_APPEND)) error = -EPERM; return error; } Segurança de Sistemas Prof. João Bosco M. Sobral Depois de pegar o path do módulo corretamente, a função lids_module_tpe_permission() verifica se o próprio tem seu path protegido, caso contrário ele emitirá um erro para nós usando -EPERM como código de erro. Segurança de Sistemas Prof. João Bosco M. Sobral Espero que tenha sido o suficiente para que possamos pelo menos entender um pouco do que se passa por traz destas funções. Vamos agora ver algo sobre o TDE. Segurança de Sistemas Prof. João Bosco M. Sobral Referências US DoD, "Trusted Computer System Evaluation Criteria (DOD 5200.28-std)", 1985. Loscocco, Smalley, et al, NSA, "The Inevitability of Failure: The Flawed Assumption of Security in Modern Computing Environment", 1998. http://www.nsa.gov/selinux/papers/inevitability/ Segurança de Sistemas Prof. João Bosco M. Sobral Referências route|daemon9 <[email protected]>, "Trusted Path Execution Patch fo Linux 2.0.0+", 1998. https://www.phrack.com/phrack/52/P52-06 Krzysztof G. Baranowski <[email protected]>, "Linux Trusted Patch Execution Redux", https://www.phrack.com/phrack/53/P53-08, 1998. Segurança de Sistemas Prof. João Bosco M. Sobral Referências route|Mike Schiffman|daemon9 <[email protected]>, "Trusted Path/ACL Execution Patches for OpenBSD 2.4-SNAP", 1998. https://www.phrack.com/phrack/54/P54-06 Brian <[email protected]>, "TPE in Stephanie for OpenBSD 3.4", 2003. http://kaizo.org/mirrors/stephanie/ Segurança de Sistemas Prof. João Bosco M. Sobral Referências Niki Rahimi <[email protected]> "TPE LSM module for Linux 2.5.59 (2.6)", 2003. http://www124.ibm.com/developer/opensource/linux/patches/? patch_id=770 LSM Developers/Community <[email protected]>, "LSM Linux Security Modules". http://lsm.immunix.org/ Segurança de Sistemas Prof. João Bosco M. Sobral Referências Solar Designer et al, "Openwall Project". http://www.openwall.com/ PaX Team, "PaX Project". http://pax.grsecurity.net/ Segurança de Sistemas Prof. João Bosco M. Sobral Leitura recomendada Escondendo banners de serviços YASG (Yet Another Security Guide) Race condition - vulnerabilidades em suids Criptografar arquivos importantes no seu Linux O que é e como funciona um ataque de força bruta Segurança de Sistemas Prof. João Bosco M. Sobral Leitura recomendada Segurança Física (Parte 1) Instalando um firewall em ambientes gráficos leves Proxy reverso e balanceamento de carga utilizando o Pound Detectando vulnerabilidades com o Nessus O que é e como funciona um ataque de força bruta Segurança de Sistemas Prof. João Bosco M. Sobral Leitura recomendada Utilizando SSH com método de autenticação publickey + sshagend + ssh-add Criptografia quântica Como recuperar a senha de root usando uma live distro Segurança Física (Parte 1) PSAD: Port Scan Attack Detector Segurança de Sistemas Prof. João Bosco M. Sobral Leitura recomendada ACCT - O contabilizador de processos do Linux Backup/Restore de uma cópia fiel de um HD utilizando o DD PaX: Solução eficiente para segurança em Linux Os Vírus e o Linux Prevenção e rastreamento de um ataque Segurança de Sistemas Prof. João Bosco M. Sobral Leitura recomendada Netcat - O canivete suíco do TCP/IP Mantendo seu Slackware atualizado com o slackcurrent YASG (Yet Another Security Guide) Utilizando RPM para detecção de intrusos ,mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmDebian Sarge + Snort + MySQL + Acidlab + Apache Segurança de Sistemas Prof. João Bosco M. Sobral