terça-feira, 7 de janeiro de 2014

Botando o cycript para rodar no iOS 7.0.4

Se você fez o jailbreak do iOS 7.0.4 e tentou instalar o cycript presente no cydia (versão 0.9.461) você provavelmente deve ter encontrado um problema de 'segmentation fault' (assim como eu hehe). A figura 01 apresenta o cycript 0.9.461 falhando no iOS 7.0.4

Figura 01: Segmentation Fault (cycript 0.9.461)

Para corrigir esse erro você pode baixar o .deb da versão 0.9.458 do cycript no site oficial (http://www.cycript.org/debs/) e instalar com o comando 'dpkg -i'. A figura 02 mostra o procedimento de instalação e o cycript rodando no iOS 7.0.4

Figura 02: Instalando o cycript (0.9.458)

quinta-feira, 2 de janeiro de 2014

Python Backdoors (1 Linha)

Esta postagem vai ser para apresentar uma pequena 'técnica' que acabei utilizando para criar backdoors em Python com apenas '1 linha' de comando via shell. 

Observação:

O conteúdo apresentado nesta postagem deve ser reproduzido apenas em um ambiente no qual você possui autorização para a realização de testes de segurança.

Introdução


Em algumas situações específicas durante um Pentest, você pode acabar tendo acesso a um servidor Linux (ou até Windows que tenha ActivePython instalado) através de um webshell e queira implantar um backdoor no mesmo servidor (conexão direta ou reversa).

A opção '-c' do interpretador do Python permite executar um comando passado como parâmetro. A figura abaixo apresenta um exemplo da execução desta opção:

Figura 01: Opção -c do interpretador Python

Obfuscando o código


O próximo passo é poder executar diversas instruções em sequência. Para realizar esta tarefa podemos utilizar a função exec e uma codificação em Base64 (até para obfuscar um pouco o nosso código hehe). Eu criei um pequeno script para codificar em Base64 o conteúdo de um arquivo '.py' e apresentar a instrução utilizada na decodificação e execução do código.

A figura abaixo ilustra a execução de um backdoor (escutando na porta 4444/TCP) através do script criado.

Figura 02: Rodando o script :)

O script esta disponível para download na URL abaixo:


Conclusão


Nesta postagem foi apresentada uma pequena técnica para execução de backdoors em Python com uma única instrução via shell. Por favor escrevam suas sugestões e comentários!

Obrigado :)

Keep Hacking!

segunda-feira, 30 de dezembro de 2013

Palestra: Pentest em Web Services

Pessoal!

Eu estarei apresentando a palestra "Pentest em Web Services" no evento "1º Sábado com TIC" durante o dia 11 de Janeiro as 08:30 la na faculdade Devry Brasil (Fanor). Eu estarei demonstrando algumas técnicas e ataques utilizados em um Pentest contra Web Services. A inscrição no evento deve ser realizada através do e-mail eventos@sucesuce.org.br. Para maiores informações ai vai o banner do evento.



Obrigado e Keep Hacking!


segunda-feira, 9 de dezembro de 2013

Injeção de Shellcode em Processos (Parte 1)

Nessa postagem eu vou estar falando um pouco sobre Injeção de shellcode em processos (conhecido como Code Injection). Esta técnica é muito utilizada por malware com o objetivo de obter persistência em uma determinada vítima. Code Injection também pode ser utilizado para 'migrar' de um processo para outro (Ex: migrate do meterpreter).

Metodologia


A técnica de Code Injection pode ser dividida nas seguintes etapas:
  1. Abrir um processo (no qual o seu shellcode será injetado).
  2. Alocar espaço em memória para o shellcode (Este espaço deve ter permissões de leitura e escrita) 
  3. Escrever o shellcode em um espaço de memória do processo escolhido.
  4. Criar uma nova thread no processo escolhido (a nova thread vai executar o shellcode).
Para realizar todas essas etapas, vamos precisar utilizar 4 funções específicas da biblioteca Kernel32:
  1. OpenProcess
  2. VirtualAllocEx
  3. WriteProcessMemory
  4. CreateRemoteThread
Vamos dar uma olhada em cada uma dessas funções!

Função OpenProcess


Primeiro vamos selecionar e abrir um processo de nossa escolha. Para realizar esta tarefa vamos utilizar a função OpenProcess. A figura abaixo apresenta uma descrição da função e seus parâmetros de entrada.

Figura1: http://msdn.microsoft.com/en-us/library/windows/desktop/ms684320%28v=vs.85%29.aspx

Para utilizar esta função vamos precisar de 3 parâmetros:
  • dwDesiredAccess: Permissões de acesso ao processo.
  • bInheritHandle: Vamos setar o valor como zero.
  • dwProcessId: O identificador do processo (conhecido como PID).
A função OpenProcess vai retornar um handler do processo escolhido (o qual será utilizado como parâmetro de entrada nas próximas funções). Em Python podemos fazer dessa forma:

Figura 2: Abrindo o processo

Função VirtualAllocEx


O segundo passo envolve utilizar a função VirtualAllocEx para alocar espaço na memória do processo escolhido para armazenar o nosso shellcode. A Função VirtualAllocEx e seus parâmetros de entrada são apresentados na figura abaixo:

 
Figura 3: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366890%28v=vs.85%29.aspx

Para utilizar esta função vamos precisar de 5 parâmetros:
  1. hProcess: Handler do processo (obtido através da função OpenProcess).
  2. lpAddress: Vamos setar o valor como zero.
  3. dwSize: Total de bytes que serão escritos (Tamanho do shellcode).
  4. flAllocationType: Tipo de permissão para alocação de memória.
  5. flProtect: Tipo de permissão para aloção de páginas de memória. 
A função VirtualAllocEx vai retornar o endereço de memória no qual o nosso shellcode vai ser armazenado. Em Python podemos fazer desta forma:

Figura 4: Alocando memória para o shellcode

Função WriteProcessMemory


A função WriteProcessMemory vai ser utilizada para escrever o nosso shellcode dentro do espaço de memória obtido através da função VirtualAllocEx (passo anterior). A figura abaixo descreve a função WriteProcessMemory e apresenta os seus parâmetros de entrada.

Figura 5: http://msdn.microsoft.com/en-us/library/windows/desktop/ms681674%28v=vs.85%29.aspx

A função WriteProcessMemory recebe 5 parâmetros de entrada:
  1. hProcess: O handler do processo (obtido no passo 1).
  2. lpBaseAddress: Endereço de memória aonde vai ser escrito o shellcode (obtido pela função VirtualAllocEx).
  3. lpBuffer: Shellcode.
  4. nSize: Tamanho do shellcode.
  5. lpNumberOfBytesWritten: Total de bytes escritos pela função.
Em Python podemos fazer desta forma:


Figura 6: Escrevendo o shellcode no processo

 Função CreateRemoteThread

 

Agora so falta utilizar a função CreateRemoteThread para iniciar uma nova thread no processo escolhido. Esta nova thread vai rodar o shellcode que foi inserido no espaço de memória do processo através da função WriteProcessMemory. A figura abaixo apresenta uma descrição da função e seus parâmetros de entrada.

Figura 7: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682437%28v=vs.85%29.aspx

A função CreateRemoteThread recebe 7 parâmetros de entrada:
  1. hProcess: handler do processo (obtido no passo 1).
  2. lpThreadAttributes: vamos setar o valor como nulo.
  3. dwStackSize: vamos setar o valor como zero.
  4. lpStartAddress: endereço do shellcode (obtido através da função VirtualAllocEx).
  5. lpParameter: vamos setar o valor como nulo.
  6. dwCreationFlags: vamos setar o valor como zero.
  7. lpThreadId: Id da nova thread criada. 
 Em Python pode ser feito desta forma:

Figura 8: Criando uma nova thread

Combinando todos os passos


O ultimo passo de todo o processo é combinar todas as 4 partes em um único script. Para demonstrar a técnica de Code Injection, eu gravei um pequeno vídeo para servir como PoC (Proof of Concept) e apresentar o funcionamento do script.



O script pode ser encontrado para download em:

https://github.com/pasknel/hacking-com-tapioca/blob/master/CodeInjection/injector.py

Conclusão

 

Nesta postagem foi apresentada uma técnica básica de injeção de shellcode em processos. Esta técnica funciona em Windows XP e Windows 2003 Server. Para uma futura postagem eu pretendo colocar também a alternativa para realizar esta técnica em Windows 7 e outros. Por favor escrevam suas sugestões e comentários!

Obrigado :)

Keep Hacking!

 

quarta-feira, 27 de novembro de 2013

Palestra sobre Pentest: CIO-SE (Sergipe 2013)

Pessoal!

Estarei apresentando nessa sexta-feira (29/11) a palestra "Penetration Testing (Pentest) - Procedimentos e Estudos de Caso" no evento CIO-SE (Chief Information Officer - Sergipe) no Radisson Hotel em Aracaju/Sergipe! O convite esta ai para os profissionais e amigos de Aracaju. Maiores informações no site oficial do evento: http://www.cio-se.org.br/6ecio/



quarta-feira, 6 de novembro de 2013

IPv6 Attacks com Python: Parte 2 (MITM)


Nesta postagem eu vou estar dando continuidade ao assunto das postagens anteriores e estarei falando sobre o ataque de Man-in-the-Middle (MITM) em redes locais IPv6.

Observação:


O conteúdo apresentado nesta postagem deve ser reproduzido apenas em um ambiente no qual você possui autorização para a realização de testes de segurança.


Introdução


Em redes tradicionais IPv4, o ataque de MITM pode ser realizado atravês de alguns métodos  como ARP Poisoning e MAC Flooding. Entretanto o protocolo ARP é substituido pelo protocolo Neighbor Discovery (implementado através de mensagens ICMPv6) em redes IPv6. O nosso estudo de ataques MITM em redes IPv6 deve começar com uma análise sobre o protocolo ICMPv6 e o Neighbor Discovery.

Neighbor Discovery e ICMPv6

 

O protocolo Neighbor Discovery esta definido na RFC 4861¹ e faz parte de um dos processos de autoconfiguração do IPv6. Um dos objetivos deste protocolo é identificar o endereço MAC (Camada de Enlace) de hosts vizinhos em uma rede local (Basicamente a mesma coisa que o ARP fazia hehe). O Neighbor Discovery é implementado através das seguintes mensagens ICMPv6:
  • ICMPv6  Neighbor Solicitation
  • ICMPv6  Neighbor Advertisement
  • ICMPv6  Router Solicitation
  • ICMPv6 Route Advertisement
Neste tópico iremos focar especialmente nos 2 primeiros tipos de mensagens.

A mensagem Neighbor Solicitation é enviada por um host com o objetivo de identificar o endereço físico (MAC address) de um host vizinho. A Figura abaixo apresenta o cabeçalho da mensagem Neighbor Solicitation.

Figura 1: Cabeçalho da mensagem Neighbor Solicitation

O campo 'Type' apresenta o valor 135 e o campo 'Target Address' apresenta o endereço IPv6 do host solicitado.

A mensagem Neighbor Advertisement representa a resposta para a mensagem de Neighbor Solicitation e contém o endereço MAC do host solicitado. A Figura abaixo apresenta o cabeçalho da mensagem Neighbor Advertisement.

Figura 2: Cabeçalho da mensagem Neighbor Advertisement

O campo 'Type' apresenta o valor 136 e o campo 'Target Address' apresenta o endereço IPv6 do host solicitado. O campo 'Options' apresenta informações 'extras' contendo o endereço físico do host solicitado. A figura abaixo apresenta um exemplo de descoberta de vizinhos através do ICMPv6.


Figura 3: Troca de mensagens ICMPv6 (Neighbor Discovery)


MITM em redes locais IPv6


O protocolo de Neighbor Discovery não realiza a autenticação de mensagens ICMPv6 e esta vulnerabilidade resulta na possibilidade de ataques MITM em redes IPv6. Um atacante pode forjar mensagens ICMPv6 do tipo Neighbor Advertisement com o objetivo de envenenar a tabela de endereços MAC de uma determinada vítima.

O endereço MAC, presente no campo 'Options' da mensagem de Neighbor Advertisement, pode ser substituído pelo endereço físico de um atacante com o objetivo de se passar por outro host da rede local. O novo pacote é enviado para os hosts da rede local e as tabelas de endereço MAC são envenenadas com o novo valor (forjado pelo atacante).

Para exemplificar o ataque descrito, eu criei um pequeno script para realizar MITM entre três máquinas (2 vítimas e 1 atacante) com endereços IPv6. O vídeo a seguir apresenta o script sendo utilizado em uma pequena prova de conceito do ataque descrito.


O script encontra-se disponível para download em:
https://github.com/pasknel/hacking-com-tapioca/blob/master/IPv6/ipv6_nd_mitm.py

 

Conclusão


Neste tópico foi apresentado o assunto de ataques de MITM em redes IPv6. Na minha próxima postagem eu vou estar mudando de assunto (talvez futuramente eu volte a falar mais sobre IPv6). Por favor escrevam suas sugestões e comentários!

Obrigado :)

Keep Hacking!

¹ http://tools.ietf.org/html/rfc4861

sábado, 2 de novembro de 2013

Palestra Caindo Na Rede 2013: Pentest - Teste de Invasão

Pessoal!

Estarei dando uma palestra sobre Pentest (Teste de Invasão) nesta segunda-feira (dia 04/11) no evento "Caindo na Rede" da faculdade Estácio de Aracaju (Sergipe). Durante a palestra eu vou estar falando sobre metodologias de ataque e vou apresentar um dos meus projetos de Pentest realizados na Morphus. O convite fica ai para os amigos, alunos e profissionais de Aracaju que são interessados no tema :)

Obrigado!

Keep Hacking!