Melhorando a Segurança do Servidor DNS

Continuando nossa saga do DNS, vamos melhorar um pouco a segurança do Servidor Bind com alterações na seção de Options e fazendo o serviço ser executado enjaulado.

Temos agora um servidor funcional com separação por views, mas o serviço ainda pode ficar melhor, primeiro vamos editar o arquivo named correspondente( /etc/named.conf no Red Hat ou /etc/bind/named.conf.options no Debian) e dentro da seção options acrescentar as seguintes opções:

version “Não te interessa” ;
datasize 512M;

Assim esconderemos a versão do Bind, isso evita que descubram a versão do nosso servidor o utilizem algum exploit que explore alguma vulnerabilidade do Bind, e limita o uso de memória RAM para 512 MB para que o DNS quando em muito uso não esgote os recursos da máquina. Essa quantidade de memória varia de acordo com o total de memória RAM que seu servidor possua.

Vamos incrementar a segurança fazendo nosso DNS rodar em uma jaula. O conceito de chroot, ou ser executado em jaula, é de que o programa ao ser executado entenda que o diretório onde ele está sendo executado é o raiz do sistema (/), assim ele “esquece” qualquer coisa que seja fora de seu diretório de funcionamento. No Red Hat podemos na instalação já colocar o Bind em chroot.
Ao configurar o Bind para funcionar em chroot no diretório /var/bind:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/
├── bin
├── boot
├── dev
├── etc
├── home
├── lib
├── lib32
├── lib64
├── lost+found
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin
├── selinux
├── srv
├── sys
├── tmp
├── usr
└── var
    ├── bind
        ├── dev
        ├── etc
        └── var
            ├── cache
            └── run
                └── bind
                    └── run

O Bind entende que apenas do diretório /var/bind para frente é que “existe” o sistema, como ele desconsidera o resto, ainda que um atacante conseguisse derrubar o Bind e ganhasse acesso à área de memória não teria acesso ao Sistema real, apenas ao que o Bind “acreditar” ser o sistema, ou seja, apenas do /var/bind para frente.

Vamos à criação da jaula:

Primeiro vamos parar o serviço:

root # /etc/init.d/bind9 stop

Depois edite o arquivo de opções do script de inicialização, e altere a variável OPTIONS de:
OPTIONS=”-u bind”
Para:
OPTIONS=”-u bind -t /var/bind”

Se você usa Systemd no seu sistema procure o arquivo de inicialização do named e troque de:
ExecStart=/usr/bin/named -f -u bind -4
Para:
ExecStart=/usr/bin/named -f -u bind -4 -t /var/bind

Agora vamos criar os diretórios que o Bind vai precisa para funcionar dentro da jaula:

root# mkdir -p /var/bind/{dev,etc,var/{cache,run/bind/run}}

Criados os diretórios devemos mover as configurações que temos dentro do /etc e do /var/cache para o diretório da jaula:

root# mv /etc/bind /var/bind/etc
root# mv /var/cache/bind /var/bind/var/cache/

Para continuar a manter o DNS nos mesmos diretórios que usávamos antes, vamos criar links simbólicos para que os novos diretórios com os nomes dos diretórios antigos:

root# ln -s /var/bind/etc/bind /etc/bind
root# ln -s /var/bind/var/cache/bind /var/cache/bind

Agora vamos criar os dispositivos do dev para que o Bind possa descartar informações (/dev/null) e sobrescrever dados com caracteres aleatórios (/dev/random):

root# mknod /var/bind/dev/null c 1 3
root# mknod /var/bind/dev/random c 1 8

Agora vamos corrigir as permissões e as propriedades dos diretórios para o usuário e grupo bind:

chmod 666 /var/bind/dev/null /var/bind/dev/random
chown -R bind:bind /var/bind/var/*
chown -R bind:bind /var/bind/etc/bind

Basta agora que editemos o servidor de Log para que possa capturar os logs gerados pelo Bind, já que mudamos o diretório de funcionamento do serviço ele não usa mais o /dev/log, usa agora o /var/bind/dev/log. Edite o arquivo /etc/rsyslog.conf e coloque esta linha abaixo da linha $ModLoad imuxsock:

$imuxsock /var/bind/dev/log

Feito isso basta reiniciar os serviços:
root# /etc/init.d/rsyslog restart
root# /etc/init.d/bind9 restart

Pronto temos agora um servidor que roda isolado no sistema, assim ele vai ser mais seguro mesmo em caso de ataques ou invasões pelo serviço.

Não se esqueça de se inscrever no meu canal do Youtube nem de me seguir no Instagram.

Entre no nosso grupo do Telegram e vamos falar muito sobre Linux.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Facebook
LinkedIn
RSS
Rolar para cima