Aplicación de IDApython en análisis de malware

IDA tiene la capacidad de reconocimiento de lotes de Yara. Aunque la velocidad es un poco lenta, tiene una potente interfaz de capacidad de procesamiento y análisis estático. Los analistas de virus pueden obtener el código de cifrado y descifrado de claves mediante análisis inverso o ajuste dinámico, y utilizar IDApython para analizar y Procese las muestras para obtener información valiosa de inteligencia sobre amenazas.

La función principal de IDA en el análisis de malware es utilizar las potentes capacidades de análisis automatizado de la versión sin interfaz idat64.exe de IDA paraProcese por lotes las muestras de la familia, descifre o desenfusque estáticamente y, finalmente, obtenga la URL y la dirección IP de la muestra de virus como información de valor principal
La premisa de uso es:
1. Las funciones de cifrado de las muestras de familias de virus son regulares y comunes.
2. La función de cifrado de la muestra de virus es relativamente simple o estándar, y el proceso de descifrado se puede restaurar escribiendo código después del análisis inverso.
3. Los datos básicos que el virus necesita descifrar provienen de los datos HEX integrados en el PE, no de la memoria que necesita ser solicitada dinámicamente por funciones como VirtualAlloc.

Descifrar la dirección URL

Este artículo hace referencia al blog de 2016 de Josh Grunzweig Usando IDAPython para hacer su vida más fácil: Parte 1, 2 y 6.
La aplicación más valiosa en este blog es la Parte 6. Desde este blog, puede ver que IDApython puede descifrar de manera efectiva y automática la URL encriptada en el análisis de malware, básicamente realizando una forma rápida y efectiva de obtener la URL directamente desde el archivo PE.
Ejemplo de MD5:
Inserte la descripción de la imagen aquí
código de muestra 4BEFA0F5B3F981E498ACD676EB352D45 con características regulares.
Inserte la descripción de la imagen aquí
Además, la primera parte y la segunda parte del blog utilizan IDApython para descifrar el nombre de la función de cifrado autoescrita y mapear el valor entero (como el hash CRC32) a la representación de la cadena (nombre de la función). Desde este punto de vista, el papel de IDApython en el análisis de malware es principalmente una especie deHerramienta de descifrado automatizada y ligera, Puede ser usadoloteDesenmascare la cadena, descifre el nombre de la función y descifre la URL.

El código ha cambiado ligeramente:

import idautils, idc, idaapi
 
def decode(data):    #this write for yourself for different virus
    out = ""
    c = 0
    for d in data:
        out += chr(ord(d) - c - 10)
        c += 1
    return out
 

def main(): 
    url = ""
    for func in idautils.Functions():
        flags = idc.GetFunctionFlags(func)
    # Ignore THUNK (jump function) or library functons
        if flags & FUNC_LIB or flags & FUNC_THUNK:
            continue
        dism_addr = list(idautils.FuncItems(func))
        for c in range(len(dism_addr)):
            try:                    # Look at four instructions at a time
                v1 = dism_addr[c]
                v2 = dism_addr[c+1]
                v3 = dism_addr[c+2]
                v4 = dism_addr[c+3] 
        # Look for known markers indicating we're seeing the encoded strings
        # being copied to a variable.
                if idc.GetMnem(v1) == 'mov' and idc.GetOpnd(v1, 0) == 'esi':
                    if idc.GetMnem(v2) == 'pop' and idc.GetOpnd(v2, 0) == 'ecx':
                        if idc.GetMnem(v3) == 'lea' and idc.GetOpnd(v3, 0) == 'edi':
                            if idc.GetDisasm(v4) == 'rep movsd':
                                print hex(v1)
                                addr = idc.GetOperandValue(v1, 1)
                                print hex(addr)
                                data = ""
                                while Byte(addr) != 0x0:
                                    data += chr(Byte(addr))
                                    addr += 1
                                print data
                                decoded = decode(data)
                                url += decoded
            except IndexError:
       # Sliding window went past the end of the function
                None
     
    current_file = idaapi.get_root_filename()
    print current_file
    print ''.join(url)
    f = open("D:/Books/output.txt", 'ab')
    if url != "":
        f.write("[+] {0} : {1}\n".format(current_file, ''.join(url)))
    f.close()


if __name__=="__main__":   
    idaapi.autoWait()
    main()
    idc.Exit(0) 

Entre ellos, FUNC_THUNK
indica si esta función es una función de procesador y la función de procesador indica una función de salto simple. Por ejemplo,
.text: 1A710606 Process32Next proc cerca de
.text: 1A710606 jmp ds: __ imp_Process32Next
.text: 1A710606 Process32Next endp
filtra dos atributos de función: FUNC_THUNK y FUNC_LIB. Para
obtener más información, consulte los diez indicadores de funciones en "IDAPython-Book Translation byfoython. pdf "Introducción

Tapping potencial

El potencial de IDApython se muestra enImplementación simple del procesamiento por lotes para descifrar una gran cantidad de muestras

1. Expanda el método de descifrado para estandarizarlo .
La función de decodificación en IDApython debe ser escrita por usted mismo, y todas las funciones de descifrado pueden integrarse en una Python. Cuando en realidad programan, los investigadores de seguridad solo necesitan pasar el parámetro de función principal de IDApython para llamar directamente. Las bibliotecas Pycrypto, criptografía y base64 de Python han implementado algoritmos de cifrado maduros, incluida la decodificación base64, el algoritmo CRC32 para hacer la enumeración hash, el algoritmo ROR13, el algoritmo RC4, etc.
Por supuesto, puede escribir el método de descifrado usted mismo, incluidos los bucles básicos más comunes, los OR exclusivos, etc., y puede escribir el código de descifrado según sus necesidades.

2. Identifique las instrucciones características antes de obtener los datos descifrados.

Obviamente, la capacidad de localizar y recuperar la dirección de datos HEX incrustada en el PE juega un papel importante en el proceso de descifrado. Si el código antes y después de los datos tiene características obvias, es más conveniente y el efecto es más obvio al descifrar muestras familiares en lotes. Por ejemplo
, las características del código en este ejemplo son las siguientes:

mov esi,xxx          #此处xxx获取内嵌在PE里的HEX数据
pop ecx
lea edi,xxx
rep movsd

Cada familia tiene diferentes características de código de obtención de datos, la mayoría de las cuales deben usar mov para obtener variables globales en la sección .data. Aquí puede pasar directamente el parámetro a la función principal de idat64.exe para obtener la dirección de los datos, pero esto no identifica la dirección de otras muestras para obtener los datos. Por lo tanto, se deben usar las características únicas de la muestra, más la dirección de ensamblaje de los datos, se recomienda que la regla yara + el método de ensamblaje de características como en el ejemplo anterior ubique la ubicación de los datos a descifrar. Las funciones de código se proporcionan a idapython en un formato específico (como json) para su lectura.

3. Este método puede ahorrar tiempo cuando se trata de ataques APT y tiene cierta velocidad y simplicidad. Porque la muestra se puede cifrar utilizando el método de dirección URL cifrada que se ha utilizado. Luego, una vez que se utiliza el algoritmo de cifrado que se ha utilizado, la URL se puede descifrar directamente del PE de acuerdo con la función del algoritmo de descifrado escrito anteriormente. O agote todos los métodos de descifrado escritos anteriormente para descifrar los datos, una vez que los datos descifrados aparecen en http: //, se puede determinar que el descifrado se ha realizado correctamente.

Imagen de efecto

Utilice el lote idat64.exe para descifrar la URL de la familia Cmstar:
Inserte la descripción de la imagen aquí

referencias

https://unit42.paloaltonetworks.com/unit42-using-idapython-to-make-your-life-easier-part-1/
https://unit42.paloaltonetworks.com/unit42-using-idapython-to-make- su-vida-más fácil-parte-2 /
https://unit42.paloaltonetworks.com/unit42-using-idapython-to-make-your-life-easier-part-6/

Supongo que te gusta

Origin blog.csdn.net/qq_43312649/article/details/110055723
Recomendado
Clasificación