Security Hacks: Linux & BSD
Neste artigo abordaremos alguns "Security Hacks" para sistemas Linux e *BSD, ou seja, implementações simples que irão ajudar você a melhorar a segurança de seus servidores. Vamos conhecer algumas dicas matadoras e softwares que farão a diferença nesta empreitada.
Parte 2: FreeBSD: MAC Paranóia
Quando pararmos para pensar em nossos sistemas Unix, veremos que
às vezes ele nos passa muita informação, às vezes Mais do que
gostaríamos que ele passasse. Por exemplo, quando um usuário comum
ao sistema Linux/FreeBSD se loga na máquina, consegue facilmente
visualizar o que os outros usuários estão fazendo, de onde estão
conectados e etc, também é muito fácil verificar todos os outros
processos que estão em uso na máquina.
Se pensarmos como um Security Officer deve pensar, isso é informação demais nas mãos de um possível atacante. Felizmente, graças a um projeto da TrustedBSD temos um meio de barrar essas informações adicionais aos nossos usuários, o Mandatory Access Control ( MAC ) Framework.
OBS: Por questão de informação, o MAC framework é considerado em fase de testes, portanto é desaconselhável para máquinas e servidores em produção. Instale e faça testes primeiro em outras máquinas para o devido fim.
Para utilizar o Mandatory Access Control Framework teremos que fazer com que nosso kernel tenha suporte ao MAC, para tanto iremos adicionar a ele:
options MAC
Depois recompile a kernel e voilá, terá um kernel pronto para o uso do MAC. Caso você não saiba ou não tenha muita prática em recompilar kernel de sistemas FreeBSD, dê uma lida neste link:
Enquanto seu kernel recompila, utilize o tempo para ler o "man 4 mac", você verá que temos muitos módulos diferentes que oferecem suporte a vários tipos de políticas diferentes para segurança. Neste hack vamos ver apenas os mais simples para pegar gosto pela coisa.
Um dos problemas de sistemas como o Linux e o FreeBSD é que facilmente se consegue visualizar outros usuários. Por exemplo:
O módulo MAC_ SEEOTHERUIDS daria um jeito nisso para nós. Você pode carregá-lo manualmente para experimentá-lo:
# kldload mac_seeotheruids
Security policy loaded: TrustedBSD MAC/seeotheruids (mac_seeotheruids)
Caso você deseje que o módulo seja carregado toda vez quando o sistema iniciar, basta adicionar a seguinte linha ao arquivo /boot/loader.conf:
Se pensarmos como um Security Officer deve pensar, isso é informação demais nas mãos de um possível atacante. Felizmente, graças a um projeto da TrustedBSD temos um meio de barrar essas informações adicionais aos nossos usuários, o Mandatory Access Control ( MAC ) Framework.
OBS: Por questão de informação, o MAC framework é considerado em fase de testes, portanto é desaconselhável para máquinas e servidores em produção. Instale e faça testes primeiro em outras máquinas para o devido fim.
Preparando o sistema
Para utilizar o Mandatory Access Control Framework teremos que fazer com que nosso kernel tenha suporte ao MAC, para tanto iremos adicionar a ele:
options MAC
Depois recompile a kernel e voilá, terá um kernel pronto para o uso do MAC. Caso você não saiba ou não tenha muita prática em recompilar kernel de sistemas FreeBSD, dê uma lida neste link:
Enquanto seu kernel recompila, utilize o tempo para ler o "man 4 mac", você verá que temos muitos módulos diferentes que oferecem suporte a vários tipos de políticas diferentes para segurança. Neste hack vamos ver apenas os mais simples para pegar gosto pela coisa.
Vendo outros usuários
Um dos problemas de sistemas como o Linux e o FreeBSD é que facilmente se consegue visualizar outros usuários. Por exemplo:
- utilizando o comando "w" pode-se visualizar outros usuários no sistema
- com o comando "ps aux" podemos obter todos os processos do sistema
- com o comando "socketstat -4" ou "netstat -na" poderemos ver todos os sockets abertos e em uso no sistema.
O módulo MAC_ SEEOTHERUIDS daria um jeito nisso para nós. Você pode carregá-lo manualmente para experimentá-lo:
# kldload mac_seeotheruids
Security policy loaded: TrustedBSD MAC/seeotheruids (mac_seeotheruids)
Caso você deseje que o módulo seja carregado toda vez quando o sistema iniciar, basta adicionar a seguinte linha ao arquivo /boot/loader.conf:
mac_seeotheruids_load="YES"
Caso você deseje não usar mais o módulo, basta digitar:
# kldunload mac_seeotheruids
Security policy unloaded: TrustedBSD MAC/seeotheruids (mac_seeotheruids)
Bom, agora que carregamos o módulo, iremos realizar alguns testes para ver se tudo está correndo bem. Logue-se no sistema com um usuário normal e tente listar processos e verificar outros usuários no sistema:
$ w
$ ps aux
$ socketstat -4
$ netstat -na
Você verá que o resultando sempre retornará as informações apenas do próprio usuário, ele então não conseguirá obter nenhuma outra informação adicional. Um pequeno problema que iremos notar logo de cara é que isso se aplica inclusive ao root, portanto teremos que liberar de algum modo o root para visualizar tudo. Para tanto usaremos o seguinte esquema:
# sysctl -a | grep seeotheruids
security.mac.seeotheruids.enabled: 1
security.mac.seeotheruids.primarygroup_enabled: 0
security.mac.seeotheruids.specificgid_enabled: 0
security.mac.seeotheruids.specificgid: 0
sysctl é usado para modificar valores para o kernel sem ter que recompilá-lo ou rebootar o sistema. Os valores dos calls podem ser alterados se você não quiser os valores padrões.
Vamos ver então como liberar o root desse controle:
# sysctl -w security.mac.seeotheruids.specificgid_enabled=1
security.mac.seeotheruids.specificgid_enabled: 0 -> 1
Agora vemos que modificamos o gid específico para 1, então o root ficará fora do controle.
muito bom... até o proximo