28
Une backdoor chinoise en .NET Nicolas RUFF nicolas.ruff(à)eads.net

GS Days Nicolas RUFF Analyse Dune Backdoor .NET

Embed Size (px)

DESCRIPTION

http://www.gsdays.fr/wp-content/uploads/2012/06/GS-Days-Nicolas-RUFF-Analyse-dune-backdoor-.NET_.pdf

Citation preview

  • Une backdoor chinoise en .NET

    Nicolas RUFF

    nicolas.ruff()eads.net

  • Historique

    ??? Attaques cibles dans la nature

    6 dcembre

    2011

    Publication de l'avis de scurit APSA11-04

    http://www.adobe.com/support/security/advisories/apsa11-04.html

    16 dcembre

    2011

    Publication du correctif Adobe Reader 9.4.7

    10 janvier 2012

    Publication du correctif Adobe Reader 10.1.2

  • Historique

  • Principe gnral de l'attaque

    Un PDF malveillant est transmis par email

    1

    Le shellcode extrait un fichier excutable embarqu (en gnral chiffr par un XOR)

    2

    Le shellcode "nettoie" le PDF et l'ouvre nouveau

    4 Le fichier excutable s'installe en

    tant que rsident (backdoor)

    3

  • Backdoor(s)

    Poison Ivy: la plus courante http://www.poisonivy-rat.com/

    Mais chaque "quipe" a ses techniques/outils

    C:\> file scvhost.exe

    scvhost.exe: PE32 executable (GUI) Intel 80386 Mono/.Net assembly,

    for MS Windows

  • Backdoor(s)

    Ca s'annonce long et pnible

  • Format .NET

    Format PE + mtadonnes .NET

    Loges dans l'ancienne "COM Directory"

    Trs peu documentes pendant fort longtemps http://www.ntcore.com/files/dotnetformat.htm

    Encore trs peu d'outils capables de les manipuler pefile, metasm, miasm

    CFF Explorer, Phoenix Framework?,

  • Format .NET

  • Format .NET

  • Format .NET

  • Format .NET

  • Protections en .NET

    Techniques anti-analyse "statique" Renommage des mthodes / classes / variables de classe / Obfscuation des constantes / chaines de caractres / Obfuscation du flot de contrle Code / objets srialiss

    Techniques anti-analyse "dynamique"

    Vrification du contexte d'excution Vrification de type Rflexion Signature

  • Protections en .NET

    Techniques plus avances Code natif

    Cryptographie

    Activation en ligne

    Cf. protecteurs commerciaux Xenocode, 9Rays,

    Un binaire .NET reste plus difficile protger qu'un binaire natif Note: la compilation native est possible avec NGEN.EXE

  • Protection statique en .NET

    Renommage

    Une table contient tous les noms en instance unique Cf. format DEX utilis par Android

    Il serait possible de renommer " la main"

    mais il est ardu de renommer si la taille des chaines change

    Rebel.NET est un "PoC"

    Il faut crer un ".H" qui contient tous les renommages http://www.ntcore.com/rebelnet.php

    Note: une fois le code import dans Visual Studio, il est trs simple de

    le "refactoriser" mme s'il ne compile pas

  • Protection statique en .NET

    Manipulation d'une assembly

    "System.Reflection" ne semble pas fait pour a Difficult modifier du code existant Difficult sauvegarder le code modifi

    "Mono.Cecil" est beaucoup plus puissant pour cette

    tche http://www.mono-project.com/Cecil

    surtout lorsqu'il est combin avec Reflexil

    http://reflexil.net/

  • Protection statique en .NET

    Cheat sheet pour Mono.Cecil + Reflexil

    Note: Mono.Cecil n'a aucune documentation officielle

    Fonctionne bien avec:

    Classe, mthodes, variables de classe

    Mais beaucoup plus de plomberie pour: Manipuler les variables locales

    ad = Mono.Cecil.AssemblyDefinition.ReadAssembly(...)

    md = Mono.Cecil.ModuleDefinition.ReadModule(...)

    foreach td in md.Types

    foreach fd in td.Fields

    foreach md in td.Methods

    foreach pd in md.Parameters

    mb = md.Body

    foreach vd in mb.Variables

  • Protection statique en .NET

    La preuve qu'on peut faire partie du problme et de la solution

  • Protection statique en .NET

    Obfuscation des constantes

  • Protection statique en .NET

    Code masqu

    Se trouve dans une ressource "chiffre"

    La cl est fournie par un "gnrateur de constantes" fortement obfusqu

    Dans ce cas, l'analyse dynamique est plus simple

    Stream manifestResourceStream =

    executingAssembly.GetManifestResourceStream("Resources.binary.resources");

  • Protection dynamique en .NET

    Vrification de type dynamique

    if (Assembly.GetCallingAssembly() == typeof(ProtectedClass.c000016).Assembly)) ...

  • Protection dynamique en .NET

    Vrification que l'assembly n'est pas utilise comme rfrence depuis un projet tiers

    Assembly executingAssembly = Assembly.GetExecutingAssembly();

    Assembly callingAssembly = Assembly.GetCallingAssembly();

    ...

  • Protection dynamique en .NET

    Vrification de la hauteur de pile d'appel StackTrace trace = new StackTrace(skipFrames, false);

    ...

    StackFrame frame = trace.GetFrame(skipFrames);

    MethodBase base2 = (frame == null) ? null : frame.GetMethod();

    Type type = (base2 == null) ? null : base2.DeclaringType;

    ...

  • Protection dynamique en .NET

    Utilisation de la cl de signature publicKeyToken = assemblyName.GetPublicKeyToken();

    ...

  • Protection dynamique en .NET

    Aucun test boolen

    Trop facile "patcher"

    Au contraire, les rsultats sont intgrs dans le calcul d'une constante "magique"

  • Revue des outils

    Il existe 3 possibilits:

    System.Reflection

    Mono.Cecil Capable d'ouvrir une assembly sans l'excuter

    http://www.mono-project.com/Cecil#Differences_with_other_alternatives

    Librairie "maison" En gnral non maintenu / non publique

  • Revue des outils

    Analyse statique

    Outil Avis

    ILDASM / ILASM Fourni avec Visual Studio - ultrabasique

    Spices.NET Commercial - peu adapt aux codes obfusqus

    Reflector Commercial - bas sur System.Reflection - peu adapt aux codes obfusqus

    dotPeek Successeur de Reflector - suivre

    JustDecompile Successeur de Reflector - suivre

    ILSpy Bien mais la 2.0 est encore mieux

    Phoenix Framework Statut du projet chez Microsoft ?

    SAE Parfait pour les codes obfusqus

    de4dot Orient "protections commerciales"

  • Revue des outils

    Analyse dynamique

    Outil Avis

    mDBG Bas sur ICorDbg* - PoC non maintenu

    Outils Foundstone & al. Bas sur les API de performance - peut tre intressant dans certains cas - SAE offre globalement la mme fonctionnalit

    WinDbg + SOS.DLL Puissant mais inutilisable avec du code obfusqu

    ILSpy 2.0 Trs prometteur

    PE Browse Dbg Logique de la GUI ... ?

    DILE Non maintenu

    ..

  • Conclusion

    Faire une backdoor en .NET n'tait pas une mauvaise ide

    Les comptences et les outils sont plus rares que dans le monde natif