Evadiendo Anti-Virus:
  Uso de crypters




 Abraham Pasamar - INCIDE - #NCN2k12 - 03.11.12
Whoami
ncd:~ apasamar$ whoami
apasamar
apasamar@incide.es
@apasamar
a.k.a brajan
ncd:~ apasamar$ cat apasamar.cv
Ingenerio superior y Master en seguridad de la información
Socio fundador de INCIDE:
  Expertos en prueba electrónica
  Respuesta a incidentes
  Forensics / Periciales

ncd:~ apasamar$ rm apasamar.cv
Breaking News
de qué va esto ...
•   AV’s como funcionan
•   Tipos de malware y detección AV’s
•   Medidas de evasión
    •   Crypters
        •   tipos y funcionamiento
        •   stub
        •   stub FUD
        •   técnicas Modding
•   Recursos
AV’s howto
• Los AntiVirus escanean binarios en disco
• NO analizan la memoria, sino los binarios
  en disco que arrancan procesos
• Buscan firmas: cadenas binarias (BBDD)
• Buscan elementos/técnicas maliciosas
  (Heurística)
AV’s howto




              PROCESO
             RAM




     DISCO
AV’s howto




              PROCESO
             RAM




     DISCO
AV’s howto




              PROCESO
             RAM




     DISCO
AV’s howto




                           PROCESO
                          RAM


EJECUTABLE

                  DISCO
AV’s howto




                           PROCESO
     SCAN                 RAM


EJECUTABLE

                  DISCO
Tipos de malvare y
     detección AV’s
• Programas espía comerciales: (white list,
  firmados)
 • e-blaster
 • 007
 • perfect keylogger
Tipos de malvare y
     detección AV’s

• Malware recien creado:
 • detección baja (sin firmas)
 • posible detección heurística
Tipos de malvare y
   detección AV’s
• Malware existente: (muy conocidos,
  firmas y heurística)
 • troyanos
 • downloaders
 • stealers
 • reverse shells
¿Cómo se puede indetectar
 el malware ya detectado ?

  • C r y p t e r s:
   • Software que permite encriptar el
      malware para hacerlo indetectable a
      los antivirus.
    • La rutina de desencriptado tiene que
      poder ejecutarse (no se cifra)
Crypters
Crypter / stub
• Crypter:
 • Encargado de crear el ejecutable
    compuesto por el STUB y el
    MALWARE CIFRADO
• Stub:
 • Encargado de desencriptar el
    MALWARE CIFRADO y ejecutarlo
Crypter / stub
 CRYPTER




 STUB



CRYPTER + STUB




  exe
   dll
recurso
Crypter / stub
 CRYPTER




 STUB                  MALWARE DETECTADO



CRYPTER + STUB




  exe
   dll
recurso
Crypter / stub
 CRYPTER




 STUB                  MALWARE DETECTADO



CRYPTER + STUB




  exe
   dll
recurso
Crypter / stub
 CRYPTER




 STUB                    MALWARE DETECTADO



CRYPTER + STUB




  exe             STUB
   dll
recurso
Crypter / stub
 CRYPTER




 STUB                     MALWARE DETECTADO



CRYPTER + STUB
                         XOR, RC4, ...

  exe             STUB
   dll
recurso
Crypter / stub
 CRYPTER




 STUB                     MALWARE DETECTADO



CRYPTER + STUB
                         XOR, RC4, ...

  exe             STUB     MALWARE CIFRADO
   dll
recurso
Crypter / stub
              STUB                     MALWARE CIFRADO
         Separador



                           Separador

STUB                 KEY                         MALWARE CIFRADO




       También puede usarse un recurso
Crypter / stub

• Ejemplo práctico:
 • ejemplos crypters
 • archivo para cifrar (offsets)
 • edición hexa de archivo cifrado
   • stub, separador, key, cifrado
Crypter / stub

• Tipos de crypters:
 • ScanTime
 • RunTime
Crypter / stub
   • ScanTime

STUB     MALWARE CIFRADO


                           DISCO
Crypter / stub
   • ScanTime

STUB     MALWARE CIFRADO           MALWARE DETECTADO


                           DISCO
Crypter / stub
   • RunTime


                                   RAM


STUB     MALWARE CIFRADO


                           DISCO
Crypter / stub




                                    MALWARE DETECTADO
   • RunTime


                                   RAM


STUB     MALWARE CIFRADO


                           DISCO
Crypter / stub

• Ejemplo práctico:
 • Código STUB:
   • Decrypt
   • RunPe
RunPE o Dynamic Forking
RunPE o Dynamic Forking
          CreateProcess
PROCESO
   1
RunPE o Dynamic Forking
          CreateProcess (CREATE_SUSPENDED)
PROCESO
   1
RunPE o Dynamic Forking
          CreateProcess (CREATE_SUSPENDED)
PROCESO


                     GetThreadContext
   1




                                             EBX
RunPE o Dynamic Forking
          CreateProcess (CREATE_SUSPENDED)
PROCESO


                     GetThreadContext
   1




PEB                                          EBX
RunPE o Dynamic Forking
                CreateProcess (CREATE_SUSPENDED)
  PROCESO


                           GetThreadContext
     1




BaseAddress 1

        +8

   PEB                                             EBX
RunPE o Dynamic Forking
                CreateProcess (CREATE_SUSPENDED)
  PROCESO


                           GetThreadContext
     1



        EP I




BaseAddress 1

        +8

   PEB                                             EBX
                                                   EAX
RunPE o Dynamic Forking
                CreateProcess (CREATE_SUSPENDED)
  PROCESO


                           GetThreadContext
     1



        EP I
                ReadFile
  PROCESO
     2




BaseAddress 1

        +8

   PEB                                             EBX
                                                   EAX
RunPE o Dynamic Forking
                CreateProcess (CREATE_SUSPENDED)
  PROCESO


                           GetThreadContext
     1



        EP I
                ReadFile                   WriteProcessMemory
  PROCESO
     2




BaseAddress 1

        +8

   PEB                                             EBX
                                                   EAX
RunPE o Dynamic Forking
                CreateProcess (CREATE_SUSPENDED)
  PROCESO


                           GetThreadContext
     2
     1



        EP I
                                           WriteProcessMemory




BaseAddress 1

        +8

   PEB                                             EBX
                                                   EAX
RunPE o Dynamic Forking
            CreateProcess (CREATE_SUSPENDED)
PROCESO


                       GetThreadContext
   2
   1



     EP I
                                       WriteProcessMemory




    +8

PEB                                            EBX
                                               EAX
RunPE o Dynamic Forking
                CreateProcess (CREATE_SUSPENDED)
  PROCESO


                           GetThreadContext
     2
     1



        EP I
                                           WriteProcessMemory




BaseAddress 2

        +8

   PEB                                             EBX
                                                   EAX
RunPE o Dynamic Forking
                CreateProcess (CREATE_SUSPENDED)
  PROCESO


                           GetThreadContext
     2
     1



        EP I
        EP 2                               WriteProcessMemory




BaseAddress 2

        +8

   PEB                                             EBX
                                                   EAX
RunPE o Dynamic Forking
                CreateProcess (CREATE_SUSPENDED)
  PROCESO


                           GetThreadContext
     2
     1



        EP I
        EP 2                               WriteProcessMemory

                                           SetThreadContext




BaseAddress 2

        +8

   PEB                                             EBX
                                                   EAX
RunPE o Dynamic Forking
                CreateProcess (CREATE_SUSPENDED)
  PROCESO


                           GetThreadContext
     2
     1



        EP I
        EP 2                               WriteProcessMemory

                       ResumeThread        SetThreadContext




BaseAddress 2

        +8

   PEB                                             EBX
                                                   EAX
RunPE o Dynamic Forking
                CreateProcess (CREATE_SUSPENDED)
 PROCESO
  PROCESO


                           GetThreadContext
     2
     1



        EP I
        EP 2                               WriteProcessMemory

                       ResumeThread        SetThreadContext




BaseAddress 2

        +8

   PEB                                             EBX
                                                   EAX
FUD

• Objetivo: Stub FUD (Full UnDetectable)
 • Indetección desde Fuente (Source)
 • Indetección desde Binario
• ¿Cómo?
 • MODDING
Modding Source
•   A mano o con ofuscadores:

    •   Reemplazar funciones (SPLIT,..)

    •   Reemplazar y/o ofuscar funciones/strings/variables y Encriptar
        con rot13 o Hex

    •   Encriptaciones: RC4 y XOR quemadas

        •   Alternativas: TEA, DES, etc

    •   RunPE alternativos

    •   APIs Falsas

    •   TLB (Tab Library File)

        •   Trash code
Modding Binario
•   Indetección desde Binario:

    •   Se utilizan diferentes técnicas como:

        •   Dsplit/AvFucker

        •   SignatureFucker

        •   Hexing

        •   RIT

        •   XOR y variantes

        •   Tips
Modding Binario

•   Se modea el STUB, el Crypter no es parte del
    malware in the wild

•   Se buscan las FIRMAS o puntos de detección

    •   Firmas sencillas

    •   Firmas Múltiples

    •   Heurística
Modding Binario
•   Técnica DSplit:
Modding Binario
•    Técnica DSplit:

    Cabecera           Cuerpo EXE
Modding Binario
•    Técnica DSplit:

    Cabecera                Cuerpo EXE
               1000 bytes

    Cabecera Cuerpo EXE
Modding Binario
•    Técnica DSplit:

    Cabecera                    Cuerpo EXE
               1000 bytes

    Cabecera Cuerpo EXE
               2000 bytes

    Cabecera       Cuerpo EXE
Modding Binario
•    Técnica DSplit:

    Cabecera                             Cuerpo EXE
               1000 bytes

    Cabecera Cuerpo EXE
               2000 bytes

    Cabecera       Cuerpo EXE
               3000 bytes

    Cabecera                Cuerpo EXE
Modding Binario
•    Técnica DSplit:

    Cabecera                             Cuerpo EXE
               1000 bytes

    Cabecera Cuerpo EXE
               2000 bytes

    Cabecera       Cuerpo EXE
               3000 bytes

    Cabecera                Cuerpo EXE


···            Nx1000 bytes

    Cabecera                             Cuerpo EXE
Modding Binario
•   Técnica AvFucker:
Modding Binario
•    Técnica AvFucker:

    Cabecera             Cuerpo EXE
Modding Binario
•    Técnica AvFucker:

    Cabecera                Cuerpo EXE
               1000 bytes

    Cabecera 0000000000     Cuerpo EXE
Modding Binario
•    Técnica AvFucker:

    Cabecera                             Cuerpo EXE
               1000 bytes

    Cabecera 0000000000                  Cuerpo EXE
                            1000 bytes

    Cabecera                0000000000   Cuerpo EXE
Modding Binario
•    Técnica AvFucker:

    Cabecera                                Cuerpo EXE
               1000 bytes

    Cabecera 0000000000                     Cuerpo EXE
                            1000 bytes

    Cabecera                0000000000      Cuerpo EXE
                                         1000 bytes

    Cabecera                             0000000000EXE
                                            Cuerpo
Modding Binario
•    Técnica AvFucker:

    Cabecera                                Cuerpo EXE
               1000 bytes

    Cabecera 0000000000                     Cuerpo EXE
                            1000 bytes

    Cabecera                0000000000      Cuerpo EXE
                                         1000 bytes

    Cabecera                             0000000000EXE
                                            Cuerpo


···                                                      1000 bytes

    Cabecera                                Cuerpo EXE   0000000000
Modding Binario

• Ejemplo práctico:
   • DSplit/AvFucker
     • Bruteforce
     • Revisión Hexa
Modding Binario
• Técnica RIT
 • localizar firma
 • si son instrucciones partir flujo
 • saltar a otro punto (hueco)
 • finalizar las instrucciones
 • retornar al punto posterior
Modding Binario
• Técnica XOR
 • localizar firma/s
 • aplicar XOR con un valor p.e. 33
 • Modificar EP o saltar a un hueco
 • aplicar XOR 33
 • retornar al punto posterior
Recursos
• http://www.indetectables.net
• http://www.udtools.net
• http://www.masters-hackers.info
• http://www.level-23.biz/
• http://www.corp-51.net/
• http://www.underc0de.org
- Curiosidad: encoding de passwords -
¿ P R E G U NTA S ?


    Passeig Sant Gervasi, 10 ent. 3ª
     08021 Barcelona
   info@incide.es
   http://www.incide.es
   http://www.twitter.com/1NC1D3
   http://www.atrapadosporlosbits.com
   http://www.youtube.com/incidetube
   Companies > INCIDE - Investigación Digital
   Tel./Fax. +34 932 546 277 / +34 932 546 314

Evadiendo antivirus - uso de crypters

  • 1.
    Evadiendo Anti-Virus: Uso de crypters Abraham Pasamar - INCIDE - #NCN2k12 - 03.11.12
  • 2.
    Whoami ncd:~ apasamar$ whoami apasamar apasamar@incide.es @apasamar a.k.abrajan ncd:~ apasamar$ cat apasamar.cv Ingenerio superior y Master en seguridad de la información Socio fundador de INCIDE: Expertos en prueba electrónica Respuesta a incidentes Forensics / Periciales ncd:~ apasamar$ rm apasamar.cv
  • 3.
  • 4.
    de qué vaesto ... • AV’s como funcionan • Tipos de malware y detección AV’s • Medidas de evasión • Crypters • tipos y funcionamiento • stub • stub FUD • técnicas Modding • Recursos
  • 5.
    AV’s howto • LosAntiVirus escanean binarios en disco • NO analizan la memoria, sino los binarios en disco que arrancan procesos • Buscan firmas: cadenas binarias (BBDD) • Buscan elementos/técnicas maliciosas (Heurística)
  • 6.
    AV’s howto PROCESO RAM DISCO
  • 7.
    AV’s howto PROCESO RAM DISCO
  • 8.
    AV’s howto PROCESO RAM DISCO
  • 9.
    AV’s howto PROCESO RAM EJECUTABLE DISCO
  • 10.
    AV’s howto PROCESO SCAN RAM EJECUTABLE DISCO
  • 11.
    Tipos de malvarey detección AV’s • Programas espía comerciales: (white list, firmados) • e-blaster • 007 • perfect keylogger
  • 12.
    Tipos de malvarey detección AV’s • Malware recien creado: • detección baja (sin firmas) • posible detección heurística
  • 13.
    Tipos de malvarey detección AV’s • Malware existente: (muy conocidos, firmas y heurística) • troyanos • downloaders • stealers • reverse shells
  • 14.
    ¿Cómo se puedeindetectar el malware ya detectado ? • C r y p t e r s: • Software que permite encriptar el malware para hacerlo indetectable a los antivirus. • La rutina de desencriptado tiene que poder ejecutarse (no se cifra)
  • 15.
  • 16.
    Crypter / stub •Crypter: • Encargado de crear el ejecutable compuesto por el STUB y el MALWARE CIFRADO • Stub: • Encargado de desencriptar el MALWARE CIFRADO y ejecutarlo
  • 17.
    Crypter / stub CRYPTER STUB CRYPTER + STUB exe dll recurso
  • 18.
    Crypter / stub CRYPTER STUB MALWARE DETECTADO CRYPTER + STUB exe dll recurso
  • 19.
    Crypter / stub CRYPTER STUB MALWARE DETECTADO CRYPTER + STUB exe dll recurso
  • 20.
    Crypter / stub CRYPTER STUB MALWARE DETECTADO CRYPTER + STUB exe STUB dll recurso
  • 21.
    Crypter / stub CRYPTER STUB MALWARE DETECTADO CRYPTER + STUB XOR, RC4, ... exe STUB dll recurso
  • 22.
    Crypter / stub CRYPTER STUB MALWARE DETECTADO CRYPTER + STUB XOR, RC4, ... exe STUB MALWARE CIFRADO dll recurso
  • 23.
    Crypter / stub STUB MALWARE CIFRADO Separador Separador STUB KEY MALWARE CIFRADO También puede usarse un recurso
  • 24.
    Crypter / stub •Ejemplo práctico: • ejemplos crypters • archivo para cifrar (offsets) • edición hexa de archivo cifrado • stub, separador, key, cifrado
  • 25.
    Crypter / stub •Tipos de crypters: • ScanTime • RunTime
  • 26.
    Crypter / stub • ScanTime STUB MALWARE CIFRADO DISCO
  • 27.
    Crypter / stub • ScanTime STUB MALWARE CIFRADO MALWARE DETECTADO DISCO
  • 28.
    Crypter / stub • RunTime RAM STUB MALWARE CIFRADO DISCO
  • 29.
    Crypter / stub MALWARE DETECTADO • RunTime RAM STUB MALWARE CIFRADO DISCO
  • 30.
    Crypter / stub •Ejemplo práctico: • Código STUB: • Decrypt • RunPe
  • 31.
  • 32.
    RunPE o DynamicForking CreateProcess PROCESO 1
  • 33.
    RunPE o DynamicForking CreateProcess (CREATE_SUSPENDED) PROCESO 1
  • 34.
    RunPE o DynamicForking CreateProcess (CREATE_SUSPENDED) PROCESO GetThreadContext 1 EBX
  • 35.
    RunPE o DynamicForking CreateProcess (CREATE_SUSPENDED) PROCESO GetThreadContext 1 PEB EBX
  • 36.
    RunPE o DynamicForking CreateProcess (CREATE_SUSPENDED) PROCESO GetThreadContext 1 BaseAddress 1 +8 PEB EBX
  • 37.
    RunPE o DynamicForking CreateProcess (CREATE_SUSPENDED) PROCESO GetThreadContext 1 EP I BaseAddress 1 +8 PEB EBX EAX
  • 38.
    RunPE o DynamicForking CreateProcess (CREATE_SUSPENDED) PROCESO GetThreadContext 1 EP I ReadFile PROCESO 2 BaseAddress 1 +8 PEB EBX EAX
  • 39.
    RunPE o DynamicForking CreateProcess (CREATE_SUSPENDED) PROCESO GetThreadContext 1 EP I ReadFile WriteProcessMemory PROCESO 2 BaseAddress 1 +8 PEB EBX EAX
  • 40.
    RunPE o DynamicForking CreateProcess (CREATE_SUSPENDED) PROCESO GetThreadContext 2 1 EP I WriteProcessMemory BaseAddress 1 +8 PEB EBX EAX
  • 41.
    RunPE o DynamicForking CreateProcess (CREATE_SUSPENDED) PROCESO GetThreadContext 2 1 EP I WriteProcessMemory +8 PEB EBX EAX
  • 42.
    RunPE o DynamicForking CreateProcess (CREATE_SUSPENDED) PROCESO GetThreadContext 2 1 EP I WriteProcessMemory BaseAddress 2 +8 PEB EBX EAX
  • 43.
    RunPE o DynamicForking CreateProcess (CREATE_SUSPENDED) PROCESO GetThreadContext 2 1 EP I EP 2 WriteProcessMemory BaseAddress 2 +8 PEB EBX EAX
  • 44.
    RunPE o DynamicForking CreateProcess (CREATE_SUSPENDED) PROCESO GetThreadContext 2 1 EP I EP 2 WriteProcessMemory SetThreadContext BaseAddress 2 +8 PEB EBX EAX
  • 45.
    RunPE o DynamicForking CreateProcess (CREATE_SUSPENDED) PROCESO GetThreadContext 2 1 EP I EP 2 WriteProcessMemory ResumeThread SetThreadContext BaseAddress 2 +8 PEB EBX EAX
  • 46.
    RunPE o DynamicForking CreateProcess (CREATE_SUSPENDED) PROCESO PROCESO GetThreadContext 2 1 EP I EP 2 WriteProcessMemory ResumeThread SetThreadContext BaseAddress 2 +8 PEB EBX EAX
  • 47.
    FUD • Objetivo: StubFUD (Full UnDetectable) • Indetección desde Fuente (Source) • Indetección desde Binario • ¿Cómo? • MODDING
  • 48.
    Modding Source • A mano o con ofuscadores: • Reemplazar funciones (SPLIT,..) • Reemplazar y/o ofuscar funciones/strings/variables y Encriptar con rot13 o Hex • Encriptaciones: RC4 y XOR quemadas • Alternativas: TEA, DES, etc • RunPE alternativos • APIs Falsas • TLB (Tab Library File) • Trash code
  • 49.
    Modding Binario • Indetección desde Binario: • Se utilizan diferentes técnicas como: • Dsplit/AvFucker • SignatureFucker • Hexing • RIT • XOR y variantes • Tips
  • 50.
    Modding Binario • Se modea el STUB, el Crypter no es parte del malware in the wild • Se buscan las FIRMAS o puntos de detección • Firmas sencillas • Firmas Múltiples • Heurística
  • 51.
    Modding Binario • Técnica DSplit:
  • 52.
    Modding Binario • Técnica DSplit: Cabecera Cuerpo EXE
  • 53.
    Modding Binario • Técnica DSplit: Cabecera Cuerpo EXE 1000 bytes Cabecera Cuerpo EXE
  • 54.
    Modding Binario • Técnica DSplit: Cabecera Cuerpo EXE 1000 bytes Cabecera Cuerpo EXE 2000 bytes Cabecera Cuerpo EXE
  • 55.
    Modding Binario • Técnica DSplit: Cabecera Cuerpo EXE 1000 bytes Cabecera Cuerpo EXE 2000 bytes Cabecera Cuerpo EXE 3000 bytes Cabecera Cuerpo EXE
  • 56.
    Modding Binario • Técnica DSplit: Cabecera Cuerpo EXE 1000 bytes Cabecera Cuerpo EXE 2000 bytes Cabecera Cuerpo EXE 3000 bytes Cabecera Cuerpo EXE ··· Nx1000 bytes Cabecera Cuerpo EXE
  • 57.
    Modding Binario • Técnica AvFucker:
  • 58.
    Modding Binario • Técnica AvFucker: Cabecera Cuerpo EXE
  • 59.
    Modding Binario • Técnica AvFucker: Cabecera Cuerpo EXE 1000 bytes Cabecera 0000000000 Cuerpo EXE
  • 60.
    Modding Binario • Técnica AvFucker: Cabecera Cuerpo EXE 1000 bytes Cabecera 0000000000 Cuerpo EXE 1000 bytes Cabecera 0000000000 Cuerpo EXE
  • 61.
    Modding Binario • Técnica AvFucker: Cabecera Cuerpo EXE 1000 bytes Cabecera 0000000000 Cuerpo EXE 1000 bytes Cabecera 0000000000 Cuerpo EXE 1000 bytes Cabecera 0000000000EXE Cuerpo
  • 62.
    Modding Binario • Técnica AvFucker: Cabecera Cuerpo EXE 1000 bytes Cabecera 0000000000 Cuerpo EXE 1000 bytes Cabecera 0000000000 Cuerpo EXE 1000 bytes Cabecera 0000000000EXE Cuerpo ··· 1000 bytes Cabecera Cuerpo EXE 0000000000
  • 63.
    Modding Binario • Ejemplopráctico: • DSplit/AvFucker • Bruteforce • Revisión Hexa
  • 64.
    Modding Binario • TécnicaRIT • localizar firma • si son instrucciones partir flujo • saltar a otro punto (hueco) • finalizar las instrucciones • retornar al punto posterior
  • 65.
    Modding Binario • TécnicaXOR • localizar firma/s • aplicar XOR con un valor p.e. 33 • Modificar EP o saltar a un hueco • aplicar XOR 33 • retornar al punto posterior
  • 66.
    Recursos • http://www.indetectables.net • http://www.udtools.net •http://www.masters-hackers.info • http://www.level-23.biz/ • http://www.corp-51.net/ • http://www.underc0de.org - Curiosidad: encoding de passwords -
  • 67.
    ¿ P RE G U NTA S ? Passeig Sant Gervasi, 10 ent. 3ª 08021 Barcelona info@incide.es http://www.incide.es http://www.twitter.com/1NC1D3 http://www.atrapadosporlosbits.com http://www.youtube.com/incidetube Companies > INCIDE - Investigación Digital Tel./Fax. +34 932 546 277 / +34 932 546 314