Análise e Demonstração da Vulnerabilidade Samba CVE-2015-0240 v0.1 Fábio Olivé ([email protected]) This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. AVISO: Não sou especialista! Sou apenas um curioso que resolveu estudar uma vulnerabilidade interessante e recente para apresentar aqui. :-) O enfoque desta apresentação é revisar conceitos e apresentar referências para quem quiser estudar mais a fundo. This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Tópicos ● Revisão da vulnerabilidade – Conceitos, referências, observações ● Análise do código envolvido ● Análise do protocolo SMB envolvido ● Testes com debugger e geração de pacotes (parcial) ● Conclusões This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Definição da CVE-2015-0240 ● Descrição do NIST NVD: The Netlogon server implementation in smbd … performs a free operation on an uninitialized stack pointer, which allows remote attackers to execute arbitrary code via crafted Netlogon packets that use the ServerPasswordSet RPC API, as demonstrated by packets reaching the _netr_ServerPasswordSet function in rpc_server/netlogon/srv_netlog_nt.c. This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. NIST, NVD, CVE, CVSS ● ● National Institute of Standards and Technology National Vulnerability Database – ● Common Vulnerabilities and Exposures – ● Cataloga e detalha vulnerabilidades encontradas e cadastradas com CVE. Padroniza a forma de se referir a cada vulnerabilidade encontrada em produtos e projetos de software. Common Vulnerability Scoring System – Avaliação objetiva do impacto e severidade da falha. This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. CVSSv2 da CVE-2015-0240 ● ● CVSS v2 Base Score: 10.0 (máximo) Vector: AV:N/AC:L/Au:N/C:C/I:C/A:C – – – Access Vector: Network Access Complexity: Low Authentication: None This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. CVSSv2 da CVE-2015-0240 ● ● CVSS v2 Base Score: 10.0 (máximo) Vector: AV:N/AC:L/Au:N/C:C/I:C/A:C – – – – – – Access Vector: Network Access Complexity: Low Authentication: None Confidentiality Impact: Complete Integrity Impact: Complete Avaliability Impact: Complete This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Falando em Português bem claro: Graças a deus, jesus, maria, josé e todos os anjinhos o Samba não é um serviço normalmente exposto à Internet. Esta vulnerabilidade poderia ter gerado um “Samba Worm” que levaria muito tempo para controlar. This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Voltando na Descrição da Falha ● The Netlogon server implementation in smbd … ● Netlogon é uma parte da suíte de protocolos SMB – – – ● Protocolos de Rede do Windows É um endpoint RPC na porta TCP 445, assim como os demais comandos suportados pelo SMB Utilizado para autenticação de usuários e máquinas em domínios Windows https://msdn.microsoft.com/en-us/library/cc237009.aspx This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Voltando na Descrição da Falha ● … free operation on an uninitialized stack pointer … ● A falha é uma chamada de liberação de memória usando um ponteiro alocado na pilha que não foi inicializado, ou seja, que contém lixo de outros parâmetros e chamadas de funções anteriores na vida do processo. This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Voltando na Descrição da Falha ● Uma variável não inicializada na pilha vai conter o valor que tiver sido colocado nesta posição de memória anteriormente, tendo sido uma variável ou parâmetro de alguma outra função. ● Procurar outras funções cujas variáveis/parâmetros caiam no mesmo endereço, e se eles podem ser controlados pelo atacante. This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Voltando na Descrição da Falha ● O gerenciador de memória usado pelo Samba, talloc, possui uma característica interessante: – ● ● Cada bloco de memória alocada contém um ponteiro para uma função “destrutora” que é chamada quando o bloco é liberado. Controlar esse ponteiro significa ganhar um vetor de execução de código arbitrário. https://talloc.samba.org/talloc/doc/html/index.html This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Voltando na Descrição da Falha ● ... via crafted Netlogon packets that use the ServerPasswordSet RPC API … ● O atacante precisa construir requisições para troca de senha de uma conta de máquina construídos especialmente para chamar a função que contém a falha com os parâmetros certos. This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Construindo Pacotes Artesanais ● Geralmente se usa algum comando pronto ou biblioteca/ambiente de manipulação de pacotes de redes, como hping ou o Scapy (em Python): – – ● hping é usado para protocolos básicos do TCP/IP. Scapy pode simular qualquer protocolo de mais alto nível. Outra abordagem: usar implementações dos protocolos em linguagens interpretadas como Python, para ser mais fácil de alterar os campos necessários ao ataque pretendido. – É o caso do PoC listado nas referências. This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Finalizando a Descrição da Falha ● … packets reaching the _netr_ServerPasswordSet function in rpc_server/netlogon/srv_netlog_nt.c. ● Pode-se compilar o smbd com opções de debug e rodá-lo em um debugger, colocando um breakpoint na função _netr_ServerPasswordSet e investigar o que acontece com o processo. This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Análise do Código ● Baseado no samba-3.6.5-86.fc17.1.src.rpm – – – – ● Fonte do pacote samba no Fedora 17 (antigo e vulnerável) “rpmbuild -bp samba.spec” para preparar os fontes “./configure --enable-debug --disable-cups --disable-iprint --prefix /home/olive/sambadebug” “make; make install” Bora pro terminal! This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Análise do Protocolo SMB This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Testes com Debugger ● Bora pro terminal! This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Conclusões ● ● ● É uma falha difícil de explorar, pois precisa se desvencilhar de ASLR, NX e outras proteções, e de conseguir encher a memória com fragmentos de código ou vetores ROP até dar certo. É bem mais fácil de explorar em 32bits, pois o address space é menor e muitas proteções tem menos efeito. O único caso conhecido de sucesso é em 32bits. Esta vulnerabilidade é um grande aprendizado! This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. Referências ● https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-0240 ● http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-0240 ● ● ● ● ● ● http://blog.trendmicro.com/trendlabs-security-intelligence/samba-remote-c ode-execution-vulnerability-cve-2015-0240/ https://www.nccgroup.trust/en/blog/2015/03/samba-_netr_serverpasswordset -expoitability-analysis/ https://www.nccgroup.trust/en/blog/2015/03/exploiting-samba-cve-2015-02 40-on-ubuntu-1204-and-debian-7-32-bit/ https://gist.github.com/worawit/33cc5534cb555a0b710b https://securityblog.redhat.com/2015/02/23/samba-vulnerability-cve-20150240/ https://www.samba.org/samba/devel/#learn This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.