Executando verificação de segurança...
2

Keylogger e suas chamadas para API Windows

Introdução

Um assunto que me interessou bastante nos últimos meses foi o de analise de malwares e keylogger não só voltados a dispositivos de uso tradicional como Celulares, Tablet’s, Computadores e afins, mas como também outros tipos de hardware que possuem sistemas distribuídos e que devem atuar de forma crítica com relação a resposta. A curiosidade para esse assunto venho de um tema que, aparentemente, já se encontra abafado: Valut 7. para que não está familiarizado com o termo o Valut 7 é é uma coleção de documentos classificados da Agência Central de Inteligência dos Estados Unidos (CIA) que foram divulgados publicamente em 2017. A divulgação foi feita pelo grupo de hacking chamado WikiLeaks, que afirmou ter obtido a informação de uma fonte anônima.

Curiosamente, uma das ferramentas que eram utilizadas pela Agência de Inteligência dos Estados Unidos da América era um keylogger que utiliza métodos da API do Windows para registrar as teclas que eram pressionadas pelos usuários. Neste artigo vou fazer um analise de como um keylogger clássico se aproveita dessa API e de eventos fornecidos pelo sistema operacional para poder identificar e salvar o conteúdo digitado.

Windows API (Win32 API)

Bom, primeiro temos que entender o que vem a ser a API do Windows(Lembrando que API não necessariamente está relacionado a Web). De forma simplista: a API do Windows é um conjunto de funções e procedimentos abstraídos de forma que outros programadores e o próprio sistema façam uso destes serviços visando a eficiência da execução do programa. a API do Windows tem um conjunto de funções que também podem ser utilizadas por programas que tem modo de execução user mode.

Para entender essas funções vale salientar que a Microsoft utiliza um notação denominada SAL(Source-Code Annotation Language). A explicação na documentação da Microsoft é bem clara com o que vem a ser o SAL

“Em poucas palavras, a SAL é uma forma barata de permitir que o compilador verifique o código para você.”

SAL pode ajudar o código a ser entendível tanto para o desenvolvedor quanto para o compilador. Para exemplificar isso iremos analisar dois exemplos de código em C++, retirado da documentação da Microsoft, um utilizando a notação SAL e o outro não.

O código abaixo apenas faz sentido se o programador já tiver conhecimento do que realizar o memcpy do contrário seria necessário consultar a documentação, mas, basicamente essa função copia o count de bytes do buffer de origem para o buffer de destino.

void * memcpy( void *dest, const void *src, size_t count );

No código abaixo temos um exemplo da utilização da notação SAL para que tanto o programador quanto o compilador entenda as propriedades e implementação da função

void * memcpy( _Out_writes_bytes_all_(count) void *dest, _In_reads_bytes_(count) const void *src, size_t count );

Keylogger e Win Api

Os keyloggers podem ser escritos usando a Windows API para monitorar a entrada de teclado e registrar todas as teclas digitadas pelo usuário. O código malicioso é geralmente escrito como um aplicativo ou componente de sistema que se integra ao sistema operacional Windows e monitora a entrada de teclado usando a Windows API.

Dependendo do nível de sofisticação do Keylogger muitas funções desta API podem ser usadas, mas algumas são quase que um padrão e quando identificadas podem dar um entendimento maior sobre o Keylogger analisado como é caso das funções: GetRawInputData, GetKeyboardState e GetAsyncKeyboardState.

GetRawInputData: é uma função da Windows API que permite a um desenvolvedor acessar informações brutas de entrada de dispositivos de entrada, como teclados, mouses e controladores de jogos. Essas informações brutas incluem o estado dos botões e as posições dos dispositivos de entrada, bem como outras informações específicas de cada tipo de dispositivo.

GetKeyboardState: é uma função da Windows API que retorna o estado atual de todas as teclas do teclado em um array de 256 bytes. Cada byte no array representa o estado de uma tecla específica no teclado, e o valor do byte indica se a tecla está pressionada ou não.

GetAsyncKeyState: é uma função da Windows API que retorna o estado atual de uma tecla específica do teclado. A função retorna um inteiro cujo valor indica se a tecla está pressionada ou não. Se a tecla estiver pressionada, o valor retornado será diferente de zero. Caso contrário, o valor retornado será zero.

Para comprovar o que foi exposto até aqui; no próximo tópico será feita uma analise de um Keylogger conhecido como Snake.

Análise de um KeyLogger

O Snake é um programa keylogger cuja principal funcionalidade é registrar as teclas digitadas pelos usuários e transmitir os dados coletados aos agentes de ameaças. Uma infecção pelo Snake representa uma grande ameaça à privacidade e segurança online dos usuários afetados, considerando que esse malware pode extrair todo tipo de informação virtualmente — nomes de usuário, senhas, outras credenciais de login, dados bancários/de cartão de crédito. De acordo com os pesquisadores, o Snake também pode extrair informações armazenadas de alguns dos navegadores de Internet, clientes de e-mail e plataformas de mensagens mais populares, incluindo Google Chrome, Opera, Mozilla Firefox, Microsoft Outlook, Foxmail e outros.

Além disso, o Snake Keylogger pode fazer capturas de tela e extrair dados do buffer de copiar/colar. Depois de comprometer as contas da vítima, os agentes de ameaças que operam o Snake podem induzir transações financeiras fraudulentas e compras on-line ou sequestrar e solicitar resgate de vários arquivos, documentos e outras informações importantes. Resumindo, o Snake Keylogger causa perdas financeiras, problemas de privacidade e até roubo de identidade; portanto, deve ser removido imediatamente após a detecção.

Fazendo uma rápida analise nas bibliotecas que são chamadas pelo executável conseguimos identificar o uso do NTDLL.dll.

NTDLL fornece uma ampla gama de funcionalidades, incluindo gerenciamento de memória, gerenciamento de processos, comunicação entre processos e comunicação com o sistema de arquivos. Muitas dessas funções são usadas pelo sistema operacional, mas também podem ser acessadas diretamente pelos programas que rodam no sistema.

A importação de ntdll.dll é altamente incomum. kernel32.dll contém funções que agrupam aqueles dentro de ntdll.dll, portanto, os programas geralmente não importam o último diretamente. Os autores de malware às vezes utilizam as versões NT das funções da API do Win32 para evitar a análise por AV ou analistas que capturam/interrompem as funções do wrapper kernel32.dll.

Além disso, podemos constar o uso de diversas funções que quando usadas em conjunto podem capturar os que é digitado pelo usuário como a função GetKeyBoardState que citamos anteriormente.

Conclusão

Fico devendo analise a nível de código do SnakeKeylogger, mas, acredito que ficou claro como a API Windows é uma faca de dois gumes: podendo ser utilizada tanto por desenvolvedores para construção de aplicações não maliciosas como também usado para produção não só de Keyloggers como foi exposto aqui.

Uma vez que os dados são registrados ele precisam ser salvos ou enviados para algum lugar certo? Bom, nesse momento entre o conceito de C2(Comando e Controle). Na segurança da informação C2 é um termo usado para descrever a comunicação entre um agente malicioso e um servidor remoto que é usado para controlar e coordenar a atividade maliciosa.

Carregando publicação patrocinada...