Reversing en Malware 2 – Hashing.

BySin Rostro

Reversing en Malware 2 – Hashing.

Comparte este contenido en tus redes sociales!

Un hash es un algoritmo matemático que es generado/creado a partir de una entrada como un texto, una contraseña o un archivo. Pero hoy lo usaremos en análisis de malware 😈.

¿NOS SIRVE EN ANÁLISIS DE MALWARE?

La respuesta es si.

Los hash son generados tomando bloques de datos arbitrarios y devolviendo una serie de caracteres con una longitud especifica. Es decir que a partir de los datos de entrada se genera la cadena que solo puede volverse a generar con esos mismos datos. Bueno en teoría eso debe de pasar pero en algunos casos como el de SHA1 que en meses anteriores ha sido colisionado por Investigadores de Google.

Aun así existen muchos más algoritmos. En nuestro caso vamos a estar utilizando MD5. ¿Pero? que es exactamente y como es que funciona.

Ya saben que no me gusta atiborrarlos de información además de que no estamos en un curso de cifrado 😆, así que tratare de explicarles en practica.

Imagina que estas descargando un archivo “juego.exe”, en la página del desarrollador menciona que el MD5 es:

8033E2DDE927771A125F26A158C282A3

Pero al descargarlo te das cuenta de que el MD5 que generas tu con ese mismo archivo es:

5F778048775E0ECE6DBB97B6997019B2

Claramente no es igual lo que nos da a pensar de acuerdo a la introducción de más arriba, que el archivo tiene bloques de datos diferentes al archivo que han desarrollado los creadores, con esto podríamos concordar en que este archivo puede contener código que bien podría o no, ser malicioso 😈😈.

Pasemos a la practica 😉

Tengo aquí un archivo.

Utilizare una utilidad llamada “QuickHash”

Después de abrir el archivo con la utilidad y elegir MD5 nos genera la cadena correspondiente a ese archivo

Y así de sencillo podríamos obtener el MD5 de los archivos. Bien con eso ya sabemos una manera de obtener MD5, pero para que nos sirve el MD5 en análisis de malware?

Bueno imagina que este archivo es un sample que tienes que analizar, para no subir el archivo completo a un motor de búsqueda que te ayude a saber si es o no una amenaza (ya sabes puede pesar mucho y aveces nuestras datas no alcanzan 😂), bueno pues con el MD5 podemos averiguar lo que queremos.

Para ello usaremos un sitio bastante conocido virusTotal y con el MD5 obtenido veremos los resultados que nos arroja.

Quiero que vean algo, el primer parámetro, el que esta arriba del nombre del archivo dice:

SHA256: 46532f3def025aca4da1fa5646f5d19fafb2ec00e3b262ad87712ec6756902f9

Este es un tipo de hash yo ingrese el MD5 no el SHA256. Lo que sucede es que ese motor de búsqueda calcula además del MD5 otros datos para que se tenga total certeza de que hablamos del mismo:

Y ahora mi parte Favorita 😍

Hazlo con python 😁

He desarrollado un pequeño script en python que nos calcula el MD5 del archivo.

# Script en python para calcular Hash MD5
# Analizar Samples
# Desarrollado por Eric Alberto Martínez
# Hacking Publico & sistemas informáticos
# AguasHack - No Hacking No Fun
# Versión 1.0
''' Este script permite calcular el Hash MD5 de archivos
  
    el código puede ser manipulado y/o copiado manteniendo las 
    11 primeras lineas de código.
''' 

# Importar librerías
import hashlib

# Acontinuación creamos una función
# que nos permitira abrir un archivo leer
# sus datos y generar su Hash MD5
 
def calcularMd5(archivo):
  archivo = open(archivo, 'rb')
  print "\nEl MD5 es: " + hashlib.md5(archivo.read()).hexdigest()
  archivo.close()

print "Hola, Ingresa la ruta del archivo"
archivo = raw_input("\n::> ")
calcularMd5(archivo)

Y., uno más un poco mejor elaborado, con este script interactuamos con el sitio de Virus Total para obtener los resultados del sitio. El script aun esta en desarrollo le quiero dar un poco más de formato, teniendo en cuenta que lo acaba de crear creo que es funcional y para nuestras pruebas durante las próximas entradas sera suficiente.

Como puedes ver son los mismos resultados que nos genero en la web de virustotal

– Nota:  Trate de dejarlo lo más simple posible le añadí comentarios a casi todo el código para que sea un poco más fácil de entender.

# Analizar Samples 
# Api VirusTotal
# Desarrollado por Eric Alberto Martinez
# Hacking Publico & sistemas informaticos
# AguasHack - No Hacking No Fun
# Version 1.0
''' Este script permite calcular el Hash MD5 de archivos
    y manipular los resultados obtenidos en Virus Total,
    el codigo puede ser manipulado y/o copiado manteniendo las 
    11 primeras lineas de codigo.
''' 
# Importamos librerias

import requests
import hashlib

# Tu llave API de virus Total (Tienes que registrarte)
apiKey = ''
    
# clase para obtener datos o subir archivos
class virusApi:
    

    # Funcion para escanear un archivo
    def escanear(self, apiKey, archivo):
        print "Analisando el archivo...\n"
        # Configuramos la APIKEY
        params = {'apikey': apiKey}
        # Abrimos el archivo en modo binario                                    
        files = {'file': (archivo, open(archivo, 'rb'))} 
        # Hacemos la peticion al sitio              
        response = requests.post('https://www.virustotal.com/vtapi/v2/file/scan', 
                                files=files, params=params)
        # obtenemos la respuesta del sitio
        json_response = response.json()                                 
    
    # Funcion para Re-escanear
    def rescanear(self, apiKey, md5):
        # confirguramos la APIKEY y el hashMD5
        params = {'apikey': apiKey, 
                'resource': md5}                                        
        # Hacemos la peticion al sitio
        response = requests.post('https://www.virustotal.com/vtapi/v2/file/rescan',
                                params=params)
        # Obtenemos la Respuesta del sitio                          
        json_response = response.json()                                 
    
    # Funcion para Obtener los resultados de un analisis
    def obtenerResultados(self, apiKey, md5):
        print "Obteniendo Resultados...\n"
        # Configuramos la APIKEY y el HashMD5
        params = {'apikey': apiKey, 
                'resource': md5} 
        # Creamos las cabeceras                                     
        headers = {
          "Accept-Encoding": "gzip, deflate",
          "User-Agent" : "gzip,  Mi Aplicacion python para VirusTotal"
          }     
        # hacemos la peticion al sitio                                                      
        response = requests.get('https://www.virustotal.com/vtapi/v2/file/report',
                                params=params, headers=headers)
        # obtenemos la respuesta del sitio      
        json_response = response.json() 
        # obtenemos solo las claves de la respuesta                             
        claves = json_response.keys()   
        # declare una variable                              
        x = 'scans'     
        # ciclo para obtener los primeros resultados excepto los de la deteccion                                                 
        for clave, valor in json_response.items():  
            # si la clave no es igual a 'scans'                 
            if clave != x:
                # imprimimos los primeros resultados                                                
                print clave, ':\t\t', valor
        # declaramos una lista                          
        lista = []
        # ciclo para obtener las claves del segundo resultado                                                       
        for i in json_response['scans'].keys(): 
            # agrega cada clave a la lista                              
            lista.append(i) 
            # Reasignamos la variable                                           
            j = json_response
            # Variable que contiene si el archivo es detectado o no p/c antivirus                                           
            detectado = str(j['scans'][i]['detected'])
            # Variable que contiene el tipo de amenaza que es detectada p/c antivirus                  
            resultado = str(j['scans'][i]['result'])
            # imprimimos el resultado                   
            print i + "\t\t" + detectado + "\t\t" + resultado           

# Instanciamos la clase
virusTotal = virusApi()                                                 
'''
Creo que apartir de aqui el codigo no necesita explicacion
ya que son cosas basicas que son faciles de entender, aun 
asi si existen dudas no duden en comentar en el grupo de
Hacking Publico & sistemas informaticos
'''
print "\nHola, Bienvenido\nQue deseas hacer?"
print '''
[1] Escanear
[2] Re Escanear
[3] Obtener resultados
'''
eleccion = raw_input("\n::> ")
if eleccion == '1':
    archivo = raw_input("\nIngresa la ruta del archivo \n::> ")
    virusTotal.escanear(apiKey, archivo)                                
    archivo = open(archivo, 'rb')
    # Calculamos el MD5 del archivo                                     
    md5 = hashlib.md5(archivo.read()).hexdigest()                       
    archivo.close()
    print "El hashMD5 del archivo es: " + md5
    virusTotal.obtenerResultados(apiKey, md5)
elif eleccion == '2':
    archivo = raw_input("\nIngresa la ruta del archivo \n::> ")
    archivo = open(archivo, 'rb')
    # Calculamos el MD5 del archivo
    md5 = hashlib.md5(archivo.read()).hexdigest()
    archivo.close()
    print "El hashMD5 del archivo es: " + md5
    virusTotal.rescanear(apiKey, md5)
    virusTotal.obtenerResultados(apiKey, md5)
else:
    archivo = raw_input("\nIngresa la ruta del archivo \n::> ")
    archivo = open(archivo, 'rb')
    # Calculamos el MD5 del archivo
    md5 = hashlib.md5(archivo.read()).hexdigest()
    archivo.close()
    print "El hashMD5 del archivo es: " + md5
    virusTotal.obtenerResultados(apiKey, md5)

Bueno hasta aquí esta entrada creo que lo han tomado bien, 😅😅 nos leemos en la próxima entrada.

Saludos Hackers!

Comentarios de Facebook

Post Relacionados

About the author

Sin Rostro administrator

Consultor en Ciberseguridad, analisis de malware, BlackHat, pentester, amante de Python, Hardware, IoT y los Gadges.