O Samba é, e tem sido, o padrão para fornecer serviços de arquivos e impressoras compartilhadas para clientes Windows em sistemas *nix. Usado por usuários domésticos, empesas de médio porte e grandes empresas, ele se destaca como a solução go-to em ambientes onde diferentes sistemas operacionais coexistem.
Como infelizmente acontece com as ferramentas amplamente utilizadas, a maioria das instalações do Samba estão sob risco de um ataque que pode explorar uma vulnerabilidade conhecida, que não foi considerada grave até que o ataque do ransomware WannaCry veio à tona há alguns dias.
Vamos explicar o que é esta vulnerabilidade do Samba e como proteger os sistemas que são responsáveis por ele. Dependendo do tipo de instalação (de repositórios ou de origem), você precisará ter uma abordagem diferente para fazê-lo.
Se você está usando o Samba atualmente em qualquer ambiente ou conhece alguém que usa, continue lendo!
A vulnerabilidade SambaCry
Sistemas desatualizados e não corrigidos são vulneráveis a um problema de execução remota de código. Em termos simples, isso significa que uma pessoa com acesso a um compartilhamento gravável pode carregar um pedaço de código arbitrário e executá-lo com permissões de raiz no servidor.
O problema é descrito no site do Samba como CVE-2017-7494 e é conhecido por afetar as versões 3.5 do Samba (lançado no início de março de 2010) e superiores. Extraoficialmente, foi nomeado de SambaCry devido as suas similaridades com o WannaCry: possui o protocolo SMB como alvo – e pode se espalhar rapidamente pela rede.
Debian, Ubuntu, CentOS e Red Hat tomaram medidas rápidas para proteger seus usuários e liberaram patches para suas versões suportadas. Além disso, soluções de segurança também foram fornecidas para as não suportadas.
Atualizando o Samba
Conforme mencionado no início, existem duas abordagens a seguir dependendo do método de instalação:
1. Se você instalou o Samba dos repositórios da sua distribuição:
Corrigindo o SambaCry no Debian
Certifique-se de que o apt esteja configurado para obter as atualizações de segurança mais recentes adicionando as seguintes linhas à sua lista de fontes (/etc/apt/sources.list):
deb http://security.debian.org stable/updates main deb-src http://security.debian.org/ stable/updates main
Em seguida, atualize a lista de pacotes disponíveis:
sudo apt update
Finalmente, certifique-se de que a versão do pacote samba corresponde à versão em que a vulnerabilidade foi corrigida (consulte a CVE-2017-7494 no Debian.org para ver se há atualização), no momento a situação é a seguinte:
No meu servidor por exemplo, já consta a versão:
Package: samba Version: 2:4.2.14+dfsg-0+deb8u6
Fix SambaCry no Ubuntu
Para começar, verifique se há novos pacotes disponíveis e atualize o pacote samba da seguinte maneira:
sudo apt update sudo apt install samba
As versões do Samba onde a correção para a CVE-2017-7494 já foram aplicadas são as seguintes:
- 17.04: samba 2:4.5.8 + dfsg-0ubuntu0.17.04.2
- 16.10: samba 2:4.4.5 + dfsg-2ubuntu5.6
- 16.04 LTS: samba 2:4.3.11 + dfsg-0ubuntu0.16.04.7
- 14.04 LTS: samba 2:4.3.11 + dfsg-0ubuntu0.14.04.8
Finalmente, execute o seguinte comando para verificar se sua caixa do Ubuntu agora tem a versão correta instalada.
sudo apt-cache show samba
Fix SambaCry no CentOS/RHEL 7
A versão do Samba com patch do EL 7 é samba-4.4.4-14.el7_3. Para instalá-lo, faça:
yum makecache fast yum update samba
Como feito nas outras distros, certifique-se de ter a versão do Samba corrigida:
yum info samba
As versões mais antigas e ainda suportadas do CentOS e do RHEL têm também correções disponíveis. Verifique a RHSA-2017-1270 para mais informações.
2. Se você instalou o Samba pelo código-fonte
Além disso, certifique-se de fazer backup do arquivo smb.conf antes de começar.
Neste caso, vamos compilar e atualizar o Samba da fonte também. Antes de começar no entanto, devemos garantir que todas as dependências sejam instaladas anteriormente. Isso pode levar alguns minutos.
No Debian/Ubuntu
apt install acl attr autoconf bison build-essential \ debhelper dnsutils docbook-xml docbook-xsl flex gdb krb5-user \ libacl1-dev libaio-dev libattr1-dev libblkid-dev libbsd-dev \ libcap-dev libcups2-dev libgnutls28-dev libjson-perl \ libldap2-dev libncurses5-dev libpam0g-dev libparse-yapp-perl \ libpopt-dev libreadline-dev perl perl-modules pkg-config \ python-all-dev python-dev python-dnspython python-crypto xsltproc \ zlib1g-dev libsystemd-dev libgpgme11-dev python-gpgme python-m2crypto
No CentOS 7 ou similar
yum install attr bind-utils docbook-style-xsl gcc gdb krb5-workstation \ libsemanage-python libxslt perl perl-ExtUtils-MakeMaker \ perl-Parse-Yapp perl-Test-Base pkgconfig policycoreutils-python \ python-crypto gnutls-devel libattr-devel keyutils-libs-devel \ libacl-devel libaio-devel libblkid-devel libxml2-devel openldap-devel \ pam-devel popt-devel python-devel readline-devel zlib-devel
Pare o serviço:
systemctl stop smbd
Baixe e extraia os arquivos fonte (sendo a versão 4.6.4 no momento desta escrita):
wget https://www.samba.org/samba/ftp/samba-latest.tar.gz
tar xzf samba-latest.tar.gz
cd samba-4.6.4
Você pode verificar todas as opções de configuração disponíveis para a versão atual com:
./configure --help
Seguiremos com o padrão, mais você pode utilizar algumas das opções listadas no comando anterior:
./configure
make
make install
Finalmente, reinicie o serviço.
systemctl restart smbd
E verifique se você está executando a versão atualizada:
smbstatus --version
Que deve retornar 4.6.4.
Concluindo
No mais, se você estiver executando uma versão não suportada de uma distribuição e não puder atualizar para uma mais recente por algum motivo, você pode querer levar em consideração as seguintes sugestões:
- Se o SELinux estiver ativado, você estará protegido!
- Verifique se os compartilhamentos do Samba estão montados com a opção noexec. Isso impedirá a execução de binários que residem no sistema de arquivos montado.
Adicionar a linha abaixo no seu arquivo smb.conf e reinicie o serviço. Você pode querer ter em mente que isso “pode desativar algumas funcionalidades em clientes Windows”, conforme o projeto Samba.
nt pipe support = no
Se você tiver dúvidas ou comentários, sinta-se a vontade para comentar abaixo.