Existem muitas seções e camadas de segurança se estivermos falando sobre o fortalecimento de bancos de dados. Ele começa a partir da criptografia do disco de armazenamento subjacente, privilégios de acesso ao banco de dados, autenticação, controle de acesso à rede, dados em transmissão usando SSL/TLS e também fortalecendo o próprio sistema operacional.
O hardening dos sistemas operacionais também pode ter muitas listas de verificação, como desabilitar ou remover serviços de servidor que não serão usados e utilizados, desabilitar o login root SSH, habilitar rsyslog, restringir o acesso usando conta root de o console, habilitando a auditoria do sistema e habilitando o SELinux.
Outra parte das listas de verificação de segurança é o serviço AppArmor. Apparmor é um sistema de controle de acesso obrigatório (MAC) para fins de segurança que, por padrão, está incluído em sistemas operacionais baseados em Ubuntu e Debian, também é semelhante ao SELinux em sistemas operacionais baseados em Redhat ou CentOS. O objetivo do AppArmor é bloquear o processo vulnerável no sistema operacional e restringir os danos das vulnerabilidades de segurança.
Por exemplo, se o banco de dados MongoDB for publicado acidentalmente na Internet e houver algum malware que infectou o servidor de banco de dados e acionou algum código malicioso que o MongoDB pretende executar, o AppArmor impedirá tal execução como o perfil do MongoDB já está configurado para ler, executar e gravar apenas em arquivos específicos do MongoDB.
Neste blog, discutiremos a implementação do AppArmor para conjuntos de réplicas do MongoDB.
Implantação de banco de dados
Se você estiver implantando conjuntos de réplicas do MongoDB, o ClusterControl pode facilitar sua vida. Só precisamos passar por duas páginas de implantação e o ClusterControl estará pronto para implantar o conjunto de réplicas do MongoDB. Existem opções para desabilitar o SELinux/AppArmor durante a implantação, como você pode ver abaixo:
Podemos desabilitar a opção para AppArmor/SELinux. E, em seguida, preencha o endereço IP dos nós do banco de dados, a senha do administrador e a versão do MongoDB que queremos implantar.
Depois que o conjunto de réplicas do MongoDB for implantado, podemos pular para cada servidor de nó para configuração do AppArmor.
Configurações do AppArmor
Todo processo é restrito por perfis no AppArmor. Existem duas opções onde o perfil pode ser executado, que é o modo de imposição e o modo de reclamação. Quando o modo de imposição está em uso, ele impede que o aplicativo execute ações restritas, enquanto para o modo de reclamação, ele permite que o aplicativo execute ações restritas e crie a entrada de log. Cada perfil é armazenado no diretório /etc/apparmor.d
Podemos verificar o status do serviço AppArmor executando o seguinte comando:
[email protected]:/etc/apparmor.d# apparmor_status
apparmor module is loaded.
15 profiles are loaded.
15 profiles are in enforce mode.
/sbin/dhclient
/usr/bin/lxc-start
/usr/bin/man
/usr/lib/NetworkManager/nm-dhcp-client.action
/usr/lib/NetworkManager/nm-dhcp-helper
/usr/lib/connman/scripts/dhclient-script
/usr/lib/snapd/snap-confine
/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
/usr/sbin/tcpdump
lxc-container-default
lxc-container-default-cgns
lxc-container-default-with-mounting
lxc-container-default-with-nesting
man_filter
man_groff
0 profiles are in complain mode.
0 processes have profiles defined.
0 processes are in enforce mode.
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.
Dá a você informações sobre a lista de perfis que estão carregados, quantos perfis e processos estão no modo de reclamação e no modo de imposição. Podemos usar o comando apparmor_parser para carregar o perfil no kernel:
[email protected]: cat /etc/apparmor.d/profile.name | sudo apparmor_parser -a
E para desabilitar o perfil, basta criar um link simbólico para o diretório /etc/apparmor.d/disable.
[email protected]: ln -s /etc/apparmor.d/profile.name /etc/apparmor.d/disable
Para reativar o perfil, basta remover o link simbólico e recarregar novamente o perfil.
[email protected]: rm /etc/apparmor.d/disable/profile.name cat /etc/apparmor.d/profile.name | apparmor_parser -a
Habilitando AppArmor para conjuntos de réplicas do MongoDB
Antes de usarmos o AppArmor em nossos conjuntos de réplicas do MongoDB, precisamos definir o perfil para o MongoDB, registrar o serviço binário do mongodb, os diretórios de dados e os arquivos de log e permitir algum acesso à rede e ao sistema operacional. Também podemos definir a permissão para cada diretório, binário e os arquivos. Abaixo está um exemplo de perfil do serviço MongoDB:
#include <tunables/global>
/usr/sbin/mongod {
#include <abstractions/base>
#include <abstractions/nameservice>
#include <abstractions/user-tmp>
#include <abstractions/winbind>
# Allow system resource access
/sys/devices/system/cpu/ r,
/sys/devices/system/node/ r,
/sys/devices/system/node/** r,
/proc/*/status r,
capability sys_resource,
capability dac_override,
capability setuid,
capability setgid,
capability sys_nice,
# Allow network access
network tcp,
/etc/hosts.allow r,
/etc/hosts.deny r,
# Allow config access
/etc/mongod.conf r,
# Allow pid, socket, socket lock file access
/var/run/mongod.pid rw,
# Allow systemd notify messages
/{,var/}run/systemd/notify w,
# Allow execution of server binary
/usr/sbin/mongo mr,
/usr/sbin/mongod mr,
/usr/sbin/mongos mr,
/usr/sbin/mongotop mr,
/usr/sbin/mongorestore mr,
/usr/sbin/mongoimport mr,
/usr/sbin/mongofiles mr,
/usr/sbin/mongodump mr,
# Allow data files dir access
/var/lib/mongodb/ r,
/var/lib/mongodb/** rwk,
# Allow log file access
/var/log/mongodb/ r,
/var/log/mongodb/** rw,
# Allow access to openssl config
/etc/mongo-cluster.key r,
# Site-specific additions and overrides. See local/README for details.
}
Podemos colocar o perfil MongoDB acima no arquivo /etc/apparmor.d/usr.bin.mongod e então executar o apparmor_parser para carregar o perfil.
[email protected]: cat /etc/apparmor.d/usr.bin.mongod | sudo apparmor_parser -a
Se verificarmos usando o apparmor_status, ele fornecerá informações sobre o perfil do MongoDB que foi carregado:
[email protected]:/etc/apparmor.d# apparmor_status
apparmor module is loaded.
57 profiles are loaded.
19 profiles are in enforce mode.
/sbin/dhclient
/usr/bin/lxc-start
/usr/bin/man
/usr/lib/NetworkManager/nm-dhcp-client.action
/usr/lib/NetworkManager/nm-dhcp-helper
/usr/lib/chromium-browser/chromium-browser//browser_java
/usr/lib/chromium-browser/chromium-browser//browser_openjdk
/usr/lib/chromium-browser/chromium-browser//sanitized_helper
/usr/lib/connman/scripts/dhclient-script
/usr/lib/snapd/snap-confine
/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
/usr/sbin/mongod
/usr/sbin/tcpdump
lxc-container-default
lxc-container-default-cgns
lxc-container-default-with-mounting
lxc-container-default-with-nesting
man_filter
man_groff
38 profiles are in complain mode.
/usr/bin/mongod
/usr/lib/chromium-browser/chromium-browser
/usr/lib/chromium-browser/chromium-browser//chromium_browser_sandbox
/usr/lib/chromium-browser/chromium-browser//lsb_release
/usr/lib/chromium-browser/chromium-browser//xdgsettings
Agora podemos repetir as etapas descritas acima em cada nó do nosso conjunto de réplicas do MongoDB para tornar o processo do MongoDB restrito e protegido pelo AppArmor.