Home

Manuel utilisateur de WiShMaster - Benjamin Caillat

image

Contents

1. WISHMASTER ADD FIELDS ORIG_GLOBAL_DATA define NB_OF_INTERNAL_FUNCTIONS 5 define NB_OF_IMPORTED_DLLS 3 define NB_OF_IMPORTED_FUNCTIONS 4 define NB OF INTERNAL FUNCTIONS ALREADY DEFINED 0 Structure pour les dlls import es typedef struct 10 CR ATION D UN SQUELETTE DE PROJET AVEC STRUCTURE GLOBALE ULONG ulNbOfFunctions CHAR szDllName 20 GETADD_DLL LPGETADD_DLL typedef struct _GLOBAL_DATA int COLNE char szText 6l Internal functions pointers BuildReferencesTypeDef BuildReferences DisplayMessageBoxTypeDef DisplayMessageBox OldMainTypeDef OldMain GetKernel32AddressTypeDef GetKernel32Address etProcAddressCksumTypeDef GetProcAddressCksum LONG ulBuildReferencesSize G ulDisplayMessageBoxSize G ulOldMainSize G G ulGetKernel32AddressSize ulGetProcAddressCksumSize see de O z Imported functions pointers LoadLibraryTypeDef LoadLibrary GetProcAddressTypeDef GetProcAddress sprintfTypeDef sprintf MessageBoxTypeDef MessageBox Imported functions checksum ULONG ulLoadLibraryCksum ULONG ulGetProcAddressCksum ULONG ulsprintfCksum ULONG ulMessageBoxCksum gt GETADD_DLL array ETADD_ DLL GetAddDll NB OF IMPORTED DLLS Q Strings CHAR szSTRING_0 19 CHAR szSTRING_1 58 CHAR szSTRING_2 56 GLOBAL_DATA Lors de l ex cution vous obtiendrez la prem
2. Visual installation directory C Program Files Microsoft Visual Studio 8 DevEnwDir C Program Files Microsoft Visual Studio SACommon7 DEX MSYCDir C Program Files Microsoft Visual Studio BAYCA SDK installation directory C Program Files Microsoft Platform SDK for Windows Server 2003 R25 PATH 2DevEnvDir 2MSYCDir Abin INCLUDE ZMSVCDir include ZMSVCDir PlatformS DK include SDKDir include LIB ZMSVCDirlib ZMSVCDirPlatformS DKMib 2S D KDirlib Current variables values PATH C Program Files Microsoft Visual Studio 8 Common DE C Program Files Microsoft Visual Studio BWES bin C APer bin C WINDOWS Ksystem32 C WINDOWS CAWINDOWSAS ystem32 wbem INCLUDE C Program Files Microsoft Visual Studo 8 Y C include C Program Files Microsoft Visual Studio 8 D PENS de RE AE am Files Microsoft Platform SDK for Windows Server 2003 R2 include C Program Files Microsoft Visual Studio 8X CWIIb C AProgram Files Microsoft Visual Studio 8 WEM PlatformSDKMlib C Program Files Microsoft Platform SDK for windows Server 2003 R2Wlib Test configuration You should see an error missing source filename TEST WARNING If you see an error ignoring unknown option G the disable GS box MUST be UNCHECKED Disable GS FIG 9 Exemple de configuration pour une installation standard Normalement vous ne deviez pas avoir modifier les autres champs e WiShMaster tentera de remplir a
3. WiShMaster Windows Shellcode Generator Manuel d utilisation Auteur Benjamin CAILLAT x90re Date 29 mai 2007 Web http benjamin caillat free fr Mail x90re yahoo fr Version 1 10 TABLE DES MATI RES Table des mati res 1 Pr ambule 1 1 Objectif du document 1 2 License 55 44 4 4 4 a mure ba 13 ChangeLog 2 Pr sentation de WiShMaster 2 1 Principe de l outil 2 2 Origine du projet 2 8 Principe de la shellcodisation par WiShMaster 3 Les conventions d criture du code 8 1 Conventions sur la syntaxe du code 3 2 Conventions sur les variables globales 4 Description d taill e de la shellcodisation 4 1 Structure du shellcode g n r A 4 2 Etape 1 L analyse ducode A 4 3 Etape 2 Cr ation du code 4 8 1 Sous arborescence cr e 4 8 2 Modification des fichiers headers la structure globale 4 8 8 Modification des fichiers sources d claration des fonctions internes 4 8 4 Modification des fichiers sources appels de fonctions 4 8 5 Modification des fichiers sources r f rences aux cha nes de caract res 4 8 6 Modification des fichiers sources r f rences aux champs de la structure globale 4 8 7 Modification des fichiers headers d f
4. FIG 2 Structure du shellcode 10 4 DESCRIPTION D TAILL E DE LA SHELLCODISATION 4 2 Etape 1 L analyse du code L op ration de shellcodisation commence par une analyse du code source afin de rep rer les fonctions internes les fonctions import es et les cha nes de caract res Cette analyse est faite avec un ensemble d expressions r guli res qui peuvent tre param tr es dans l onglet Regular expressions dans les op tions du projet W WiShMaster Project configuration Generalities Project pathes Regular expressions Optionnal steps Files list Create environment regular expressions Internal functions regex ifla z Z0 9_ __declspecSinakeds a 24 2_ J 2 a 24 20 9 MINS Imported functions regex la 24 20 9 JM Internal functions prototype regex TE ESEAS Function call regex la z4 Z0 3_ Af CreateT hread call regex CreateThread ILPTHREAD_START_ROUTINES Extract data regular expressions Function detection regex H h CEHEC J 0 9a t Data detection regex ES ba 0 3a MJ Test regular expressions String to test FIG 3 Expressions r guli res utilis es pour analyser le code Pour cette tape les expressions r guli res utilis es sont celles de l encart Create environment regular expressions Vous pouvez modifier ces expressions r gulieres pour les adapter votre code Dans la
5. GLOBAL_DATA GlobalData 0 Di Tae Mello ares WISHMASTER SKIP STRINGS La base de fonctions importables WiShMaster utilise une base contenant une liste de fonctions importables Pour chaque fonction cette base contient e le nom de la dll exportant cette fonction e le nom de la fonction e le nom r el de la fonction CreateFile CreateFileA e la chaine repr sentant la d claration d un pointeur de fonction quivalent La base contient actuellement plus de 130 fonctions couramment utilis es 11 est cependant possible que vous utilisiez d autres fonctions dans votre programme Vous devez alors absolument les d clarer dans la base Pour vous aider dans cette t che il est tr s utile de cocher la case display warning lors de l tape d ana lyse Lorsque cette option est activ e WiShMaster va afficher une fen tre chaque fois qu un l ment correspondant l expression r guli re Imported functions regex ne sera trouv ni dans la liste des fonctions internes ni dans la base de fonctions importables ni dans les symboles ignorer Vous pourrez alors indiquer WiShMaster la conduite tenir 13 4 DESCRIPTION D TAILL E DE LA SHELLCODISATION Prennons l exemple d un code contenant les lignes suivantes void __declspec naked myfunc void CreateNamedPipe pipe mypipe sizeof DWORD 0 PIPE UNLIMITED INSTANCES BABE
6. dire un bloc d octets ex cutable relocalisable et sans aucune r f rence externe Si Pex cution est transf r e sur le premier octet du shellcode celui ci accomplira exactement les m mes op rations que l ex cutable issu de la compilation 2 2 Origine du projet Dans le cadre d une tude sur les risques d attaques cibl es d entreprises via des backdoors 4 j ai d ve lopp une backdoor appel e Parsifal qui s injecte et s ex cute en tant que thread dans tous les processus de Putilisateur Cette technique d injection de thread est extr mement puissante et ouvre de nombreuses possibilit s rootkit user land keylogger capture d informations confidentielles en contrepartie le code inject doit pouvoir s ex cuter dans un processus inconnu une adresse inconnue il doit donc tre relocalisable et sans r f rence externe c est dire tre un shellcode A l origine Parsifal int grait son propre m canisme pour se shellcodiser la backdoor commen ait par allouer un buffer qu elle remplissait avec le code des diff rentes fonctions puis elle injectait ce buffer dans les autres processus Cette technique tait relativement fastidieuse notamment parce que le code C des fonctions inject es devait tre crit de mani re sp ciale pour g n rer un code binaire relocalisable Il tait galement difficile d obtenir des traces de d bogage J ai donc d cid d crire un outil annexe qui cr
7. char const char user32 dll MessageBox MessageBox typedef int WINAPI MessageBoxTypeDef HwND LPCSTR LPCSTR UINT FIG 12 Visualisation de la liste des fonctions import es 7 1 2 3 Fen tre Strings Cette fen tre regroupe la liste des cha nes de caract res d tect es W WiShMaster list of strings String Line that contains this string This is a program IDisplayMessageBox T his is a program skeleton generated by WiShMaster wizard This is the conte sprinti szT emp This is the content of the global structure s and x GlobalData szT ext GlobalData Count x90re s wiShMas IMessageBox NULL szMsg x90re s wiShMaster MB OK FIG 13 Visualisation de la liste des cha nes de caract res 29 7 L INTERFACE GRAPHIQUE DE WISHMASTER 7 1 3 Menus WiShMaster comporte enfin un menu avec les onglets suivants e File concerne l application WiShMaster vous trouverez notamment le lien vers la fen tre de confi guration e Project regroupe les actions sur le projet ouverture fermeture dition des pr f rences e Import functions permet d afficher la fen tre de gestion des fonctions import es reconnues voir ci dessous e Generation permet d afficher la fen tre de la class library Generate e Help permet d afficher une bo te A propos 7 2 Fen tre Import functions database La fen tre Impor
8. galement la d finition de la structure globale d origine en la renommant en ORIG_GLOBAL_DATA afin de pouvoir d terminer sa taille apr s la phase de compilation et extraire les donn es initialis es 4 3 3 Modification des fichiers sources d claration des fonctions internes Dans le code modifi toutes les r f rences doivent se baser sur la structure globale WiShMaster ajoute par cons quent automatiquement un pointeur vers la structure globale en premier param tre de toutes les fonctions internes d tect es BOOL MyFunc CHAR x szFileName UINT uiValue Deviendra BOOL MyFunc LPGLOBAL DATA pGlobalData CHAR x szFileName UINT uiValue Remarques e si la fonction prend d j le pointeur vers la structure globale en premier param tre l ajout n est pas effectu e dans certains cas la liste des param tres d une fonction interne ne doit pas tre modifi e fonctions de hook point d entr e de thread WiShMaster n ajoutera pas ce pointeur une fonction dont le nom se termine par l un des suffixes suivants Thread fonction correspondant un point d entr e de thread Hook fonction de hook RawFunction autres cas 4 3 4 Modification des fichiers sources appels de fonctions Qu il soit un appel de fonction interne ou externe tout appel de fonction est transform pour tre effectu via le pointeur de fonction correspondant de
9. ERACE ESS_OUTBOUND PE EMOYFEMMESSAG NMPWAIT_US F D EFAULT_ WAIT amp sa Lors de l analyse de ce code avec l option display warning activ e WiShMaster affichera une premi re fois la fen tre unknow symbol car __declspec match l expression r guli re Imported functions regex mais ne correspond ni une fonction interne ni une fonction importable ni un symbole ignorer Comme cet l ment ne doit pas tre modifi nous indiquons WiShMaster de ne pas en tenir compte __declspec sera alors ajout la liste des symboles ignorer 14 W WiShMaster unknow symbol Unknow symbol Unknow symbol __declspec File path D Atemp testsources test cpp Line void __declspec naked myfunc void Action to execute How this symbol must be handled O Close this window and continue Add to strings to skip Add in import functions database Function prototype Dll name Function name Function real name Typedef FIG 5 Ajout d une chaine dans la liste des symboles a ignorer 4 DESCRIPTION D TAILL E DE LA SHELLCODISATION WiShMaster affichera ensuite une seconde fois cette fen tre car la fonction CreateNamedPipe n est pas d clar e dans la base de fonctions importables Il est possible de proc der la d claration de cette fonction directement depuis la fen tre unknow symbol W WiShMas
10. XML_ROOT test generation params xml Xor shellcode M xor extracted generated shellcode Use this key 0 deadbabe Advance XOR v Integrate Integrate extracted or patched shellcode in header file Path to integrated header directory XML_ROOT JAintegrationsheaderst Path to build command to lauch XML_ROOT integration build bat Path to integrated executable directory XML_ROOT Juntegrationtexes Arguments FIG 18 Onglet Optionnal steps 33 7 L INTERFACE GRAPHIQUE DE WISHMASTER e Dans la partie Generate vous pouvez sp cifier le chemin vers la class library le r pertoire o g n rer les shellcodes et le chemin vers le fichier XML contenant les param tres de g n ration e Dans la partie XOR shellcode vous pouvez choisir le type et la cl d encodage e Dans la partie Integrate vous pouvez sp cifier le r pertoire dans lequel les fichiers headers contenant la version tableau C du shellcode seront cr s le chemin vers le script de compilation le chemin vers le r pertoire o les ex cutables finaux sont cr s des ventuels param tres passer au script de compilation 7 3 5 Onglet File lists Cet onglet g re la liste des fichiers du projet W WiShMaster Project configuration Generalities Project pathes Regular expressions Optionnal steps Files list Files to include in project Type File path
11. cochant fast copy et en cochant full rebuild La taille du shellcode g n r est alors plus lev e Cette augmentation est die l int gration des fonctions et des cha nes de d bogage 40 9 CR ATION D UN SQUELETTE DE PROJET SANS STRUCTURE GLOBALE W WiShMaster by x90re D Mempltestiest xml File Project Import functions Generation Help Shellcode creation steps Options View Edit results O display warning Step 1 Analyse files ANALYSE Internal functions Step 2 Create environment CREATE fast copy Imported functions Step 3 Compile COMPILE Y full rebuiid Step 4 Extract Y EXTRACT Strings Step 5 Generate Step 6 Xor shellcode OR Step 7 Integrate M INTEGRATE full rebuild Emi n BETEGN o print debug _msg cpp INFO 1 Build success full H HHEHHHHHHHHES Starting step extract SSfSSSSSESEEE Adding internal function BuildReferences 0 bytes Adding internal function DisplayMessageBox 1 bytes Adding internal function OldMain 2 bytes Adding internal function PrintDebugMsg 3 bytes Adding internal function GetKernel32Address 4 bytes Adding internal function GetProcAddressCksum 5 bytes Adding global structure bytes Total buffer size bytes INFO Extraction successfull WARNING Xored shellcode not found Step Xor shellcode not complete BESHESAESASENSA Starting step xor shellcode FIG 29 R sul
12. craser la class library par d faut et de relancer l application chaque projet contient le chemin vers sa class library qui est charg e lors de son ouverture Ajout de la gestion de deux variables sp ciales dans les chemins de fichiers permettant d avoir uni quement des chemins relatifs dans les options du projet Am liorations des scripts de compilation et des makefiles modification de param tres de compilation e Corrections de l gers bugs dans les diff rents squelettes de projet utilis s par le wizard Modification de la fen tre de configuration du projet pour un affichage sur plusieurs onglets Ajout de la possibilit de d finir ses propres expressions r guli res pour parser le code et le fichier map Ajout de la fen tre unknow symbol permettant un traitement rapide des symboles non reconnus et une alimentation plus ais e de la base de fonctions importables e Ajout du support des x90re s modules Ajout de fonctions dans la base de fonctions importables Ajout de la fonctionnalit full rebuild pour l tape Integration 1 00 Version d origine septembre 2006 2 PR SENTATION DE WISHMASTER 2 Pr sentation de WiShMaster 2 1 Principe de Poutil WiShMaster est un outil permettant de g n rer des shellcodes pour Windows Il prend en entr e un ensemble de fichiers sources dont la compilation conduit normalement la g n ration d un ex cutable et cr e un shellcode c est
13. r possible de les adapter aux sp cificit s de votre application Voici quelques pr cisions sur leur fonctionnement 4 3 10 1 La fonction BuildReferences Cette fonction commence par r cup rer l adresse de chargement du buffer Pour cela elle utilise le code suivant __asm call GetLoadAddress GetLoadAddress pop eax sub eax 0x00 mov ulLoadAddress eax La valeur soustraite eax ici 0x00 peut varier en fonction des variables locales d clar es Cet octet est donc rep r via le call GetLoadAddress qui contient le DWORD 0x00000000 et patch lors de l tape 20 4 DESCRIPTION D TAILL E DE LA SHELLCODISATION extract Vous pouvez donc ajouter des d clarations de variables locales mais cette portion d assembleur inline ne doit pas tre modifi e Deux valeurs sp ciales sont galement patch es e Le DWORD 0x7a7a7a7a est patch par la taille totale du code avant la structure globale e Le DWORD 0x6a6a6a6a est patch par la taille totale du shellcode La ligne suivante extraite du code fourni permet par exemple de r cup rer l adresse de la structure globale LPGLOBAL DATA pGlobalData LPGLOBAL DATA ulLoadAddress 0x7a7aTaTa 4 3 10 2 La fonction GetKernel32Address Le prototype de GetKernel32Address est ULONG GetKernel32Address VOID Cette fonction ne prend aucun param tre et retourne l adresse de
14. sent e au d but de cette partie Comme indiqu ci dessus WiShMaster patche galement le DWORD 0x7a7a7a7a par la taille du code avant la structure globale et le DWORD 0x6a6a6a6a par celle du shellcode complet 4 6 Etape 5 G n ration des shellcodes L tape de g n ration consiste patcher certains octets de GLOBAL_DATA avec des valeurs bien parti culi res Par exemple pour le cas d un code effectuant une connexion sur un serveur la structure GLO BAL_DATA va certainement contenir l adresse IP et le port du serveur sur lequel tablir la connexion Le principe est d initialiser ces champs avec des valeurs sp ciales dans les sources puis de les rechercher et de les patcher lors de la g n ration par les valeurs d sir es Cette op ration est bien s r fortement d pendante de la structure du shellcode Plut t que d crire un lan gage de d finition de structure permettant a WiShMaster de comprendre le format de GLOBAL DATA et de patcher les bons octets cette fonctionnalit a t d port e dans une Class library une dll Pour chaque projet n cessitant une tape de g n ration vous devez donc livrer cette dll qui exportera un jeu de fonctions bien d finies 22 4 DESCRIPTION D TAILL E DE LA SHELLCODISATION Cette dll contient une classe Generate d rivant de System Windows Forms Form qui expose les fonctions suivantes e Un constructeur ne prennant pas de param tre e Init appel e just
15. 36 9 CR ATION D UN SQUELETTE DE PROJET SANS STRUCTURE GLOBALE W x90re s WiShMaster wizard Project generalites Enter generalities about this project name type and root directory Enter project name test Enter project identifier 0 Flow type From sources Select type of project executable Project root directory Enter project root directory path This directory will contains Project subdirectories sources header exe obj bin XML project files D tempitest pm FIG 21 Wizard WiShMaster D finition des propri t s du projet 9 1 3 Personnalisation du projet Cette tape vous permet de personnaliser votre projet e D claration d une structure globale e Activation des tapes facultatives Generate XOR et Integrate W x90re s WiShMaster wizard Customize projet This step allow you to customize your project C Add a global structure C Activate Generate step Activate XOR shellcode step XOR key Select type of key to use Use this key v Dx deadbabe Advance XOR a Activate Integrate step FIG 22 Wizard WiShMaster Personnalisation du projet 37 9 CR ATION D UN SQUELETTE DE PROJET SANS STRUCTURE GLOBALE 9 1 4 Fin du wizard Le wizard est alors termin W x90re s WiShMaster wizard Congratulations x90re s project wizard completed successfully Click on Finish to end it Project ske
16. LONG ulGetKernel32AddressSize LONG ulGetProcAddressCksumSize SS E ye Imported functions pointers GetCurrentThreadldTypeDef GetCurrentThreadld OutputDebugStringTypeDef OutputDebugString LoadLibraryTypeDef LoadLibrary GetProcAddressTypeDef GetProcAddress vsprintfTypeDef vsprintf printfTypeDef printf MessageBoxTypeDef MessageBox Imported functions checksum conos t ECARE SENE e typedef INT OldMainTypeDef LPGLOBAL DATA pGlobalData typedef VOID PrintDebugMsgTypeDef LPGLOBAL_DATA typedef ULONG GetKernel32AddressTypeDef VOID U HMODULE LPVOID LPVOID 9 CR ATION D UN SQUELETTE DE PROJET SANS STRUCTURE GLOBALE LONG ulGetCurrentThreadIdCksum LONG ulOutputDebugStringCksum LONG ulLoadLibraryCksum LONG ulGetProcAddressCksum LONG ulvsprintfCksum LONG ulprintfCksum LONG ulMessageBoxCksum PER GETADD_DLL array GETADD_ DLL GetAddDll NB OF IMPORTED DLLS Strings CHAR szSTRING_0 19 CHAR szSTRING_1 58 CHAR szSTRING_2 53 CHAR SszSTRING_ 3 11 GLOBAL DATA LPGLOBAL DATA 43 10 CR ATION D UN SQUELETTE DE PROJET AVEC STRUCTURE GLOBALE 10 Cr ation d un squelette de projet avec structure globale La cr ation d un squelette avec structure globale est relativement similaire Les seules diff rences notables sont e Le fichier structures_prototype h contient la d finition
17. afficher la fen tre unknow symbol pour tous les l ments inconnus cf paragraphe 4 2 e La checkbox fast copy de CREATE indique WiShMaster de ne copier un fichier que si la source est plus r cente que la destination e Les checkboxs full rebuild de COMPILE et de INTEGRATE indiquent WiShMaster d ajouter l argument CLEAN lors de l appel du script de compilation Celui ci sera typiquement interpr t au niveau du script PERL pour proc der un nettoyage nmake clean avant la compilation Au lancement de WiShMaster l tat est checkbox fast copy coch e et full rebuild d coch es permet tant ainsi de ne copier et de ne recompiler que les fichiers modifi s Il faut noter que cette configuration fonctionne bien si les modifications des fichiers sources sont limit es Si vous effectuez de grosses modifi cations ajout de fichiers de cha nes de caract res ou si vous observez des comportements anormaux faites une reconstruction compl te Le bouton START permet d ex cuter toutes les tapes s lectionn es dans la colonne Auto les unes apr s les autres en un seul click 28 7 L INTERFACE GRAPHIQUE DE WISHMASTER 7 1 2 R sultat de Panalyse du code Cette fen tre int gre galement trois boutons sur la droite permettant de visualiser les r sultats de l tape d analyse 7 1 2 1 Fen tre Internal Functions Cette fen tre affiche la lis
18. ajoutez votre projet les fichiers print_debug_msg cpp et print_debug_msg h disponibles par exemple dans l archive de RConnect ou dans les squelettes de projet Ces fichiers contiennent la d finition d une fonction PrintDebugMsg dont l objectif est de formater une cha ne et des arguments puis de l afficher soit dans stdout soit dans le debugger kernel Son prototypage est similaire celui printf VOID PrintDebugMsg const CHAR xfmt Ajoutez ensuite des traces de d bogage en l appelant PrintDebugMsg Message de d bogage avec param tre x 0xdeadbabe Une combobox dans les propri t s du projet vous permet de choisir le type de debogage que vous d si rez e Desactivate D sactive les traces e Print to stdout Active les traces et envoie la sortie vers stdout e Print to kernel debugger Active les traces et envoie la sortie vers le deboger kernel Lorsque les traces sont activ es WiShMaster traitera PrintDebugMsg comme une fonction interne et shellcodisera donc son code ses appels et les r f rences aux chaines de caracteres de d bogage Lorsque les traces sont d sactiv es WiShMaster ne tiendra automatiquement plus compte de ces l ments Il est donc inutile de supprimer la d finition et les appels PrintDebugMsg de votre code La gestion de ce m canisme est bas e sur un param tre PRINT_DEBUG_MSG pass lors de la compi lation
19. au script batch Une valeur 0 indique que le d bogage doit tre d sactiv 1 il est redirig vers stdout et 2 vers le kernel d boguer Ce param tre est transmis au makefile sous la forme du param tre PRINT DEBUG MSG qui le transformera en une macro pour la compilation 35 9 CR ATION D UN SQUELETTE DE PROJET SANS STRUCTURE GLOBALE 9 Cr ation d un squelette de projet sans structure globale 9 1 Cr ation du squelette avec le wizard 9 1 1 Lancement du wizard Cette partie d crit la g n ration d un squelette de projet partir du wizard pour une premi re prise en main Lancez WiShMaster et appuyez sur Ctrl N pour commencer le wizard W x90re s WiShMaster wizard Welcome to WiShMaster s project wizard This wizard will help you to create a new project skeleton Press Next to continue FIG 20 Wizard WiShMaster Fen tre d accueil 9 1 2 D finition des propri t s du projet En appuyant sur Next vous passez l tape d finissant les propri t s du projet e Le nom du projet qui d finit notamment les noms de fichiers XML e Lidentifiant du projet pass en param tre la class library generate pour le cas o plusieurs projets utiliseraient la m me dll Vous pouvez le mettre 0 e Le type de flux depuis les sources e Le type de projet laissez executable l autre option tant pour g n rer des modules pour x90re s backdoors e Le r pertoire racine
20. chargement de kernel32 dll 4 3 10 3 La fonction GetProcAddressCksum Le prototype de GetProcAddressCksum est ULONG GetProcAddressCksum ULONG HMODULE LPVOID LPVOID Cette fonction prend en param tre Param tre Type Description 1 ULONG Checksum de la fonction rechercher 2 HMODULE HMODULE retourn par LoadLibrary adresse de chargement de la librai rie LPVOID Pointeur vers LoadLibrary LPVOID Pointeur vers GetProcAddress Les deux derniers param tres permettent de traiter le cas des forwarders c est dire quand la r f rence dans l export directory pointe vers une fonction dans une autre librairie La fonction GetProcAd dressCksum va alors charger cette nouvelle libraire et effectuer la recherche de la fonction point e 4 3 10 4 Personnalisation de ces fonctions Ces trois fonctions sont plac es chacune dans un fichier texte s par dont le chemin est d fini au ni veau des options du projet Vous pouvez donc les adapter aux besoins sp cifiques de votre application En revanche leurs noms ne doivent pas tre chang s Si WiShMaster d couvre une fonction interne GetKer nel32Address ou GetProcAddressCksum lors de l analyse des sources celle ci sera automatiquement utilis e la place de celle point e par le projet 4 4 Etape 3 Compilation du code Pour r aliser l tape de compilation WiShMaster lance simplement un b
21. d un mini programme et compiler celui ci Ces op rations seront r it r es pour chaque shellcode xor Le principe est tr s similaire l tape build WiShMaster va lancer un batch qui ex cutera un script PERL qui lancera lui m me la compilation via un nmake Comme plusieurs versions doivent tre g n r es une par shellcode WiShMaster passe automatiquement le nom du shellcode retourn par generate au batch via le param tre NAME 49 Fonctionnement d taill conclusion La version actuelle de WiShMaster impose certaines contraintes sur l criture du code Certaines pour ront tre supprim es dans de futures versions en fonction des retours des utilisateurs Le fonctionnement interne reste assez complexe car WiShMaster se veut relativement souple Pour facili ter son utilisation il int gre un wizard qui vous permet de rapidement cr er un squelette de projet Vous pavez alors qu compl ter cette mini arborescence avec vos propres fichiers en adaptant le code s il le faut Je vous recommande cette approche qui vous permet de partir d une base compatible et d int grer progressivement votre code 24 5 LES DIFF RENTS FLOTS D EX CUTION 5 Les diff rents flots d ex cution 5 1 La d sactivation d tapes Tous les projets ne requi rent pas l ex cution des tapes de g n ration de XOR et d int gration Il est donc possible de d sactiver celles dont vous n avez pas besoin Pa
22. d une structure globale de test WISHMASTER INTERNAL FUNC YPEDEF IONS E T MP DESE WISHMASTER IMPORTED FUNCTIONS typedef struct _GLOBAL_DATA NICOLE char saberse le WISHMASTER GLOBAL_DATA ADD FIELDS e Un fichier global_data cpp contenant l initialisation de la structure est ajout Pengsan structures_prototype h include include GLOBAL_DATA GlobalData l IN at COME e hello char exter EG WISHMASTER SKIP STRINGS ql Le fichier structures_prototype h patch sera alors le suivant 44 typedef struct _GLOBAL DATA LPGLOBAL_DATA Internal functions typedef typedef VOID BuildReferencesTypeDef VOID typedef VOID DisplayMessageBoxTypeDef LPGLOBAL DATA CHAR x szMsg typedef INT OldMainTypeDef LPGLOBAL DATA pGlobalData typedef ULONG GetKernel32AddressTypeDef VOID typedef ULONG GetProcAddressCksumTypeDef ULONG HMODULE LPVOID LPVOID Imported functions typedef typedef HMODULE WINAPI LoadLibraryTypeDef LPCSTR typedef FARPROC WINAPI GetProcAddressTypeDef HMODULE LPCSTR typedef INT __cdecl sprintfTypeDef char const char x ae typedef int WINAPI xMessageBoxTypeDef HWND LPCSTR LPCSTR UINT typedef struct _ORIG_GLOBAL_ DATA bal PRE char szText 6
23. ex cutable pr c demment g n r et les rassemble pour cr er une premi re version du shellcode 1 Le verbe shellcodiser sera utilis dans la suite pour parler de l op ration de cr ation du shellcode 2 c est dire pouvant produire un ex cutable par compilation 2 PR SENTATION DE WISHMASTER Etape 5 Generate Lors de cette tape WiShMaster cr e plusieurs versions du shellcode en patchant certaines donn es de la structure GLOBAL_DATA Etape 6 Xor Chacun des shellcodes g n r s est xor avec une cl diff rente Etape 7 Integrate Enfin WiShMaster va successivement inclure chaque shellcode xor dans un fichier header d une autre arborescence de fichiers sources sous forme d un tableau de char et lancer la compilation de cet autre programme A la fin de cette ultime tape nous obtenons un ensemble de fichiers ex cutables contenant des versions xor es de notre shellcode 2 PR SENTATION DE WISHMASTER Le sch ma ci dessous r sume les l ments produits lors des diff rentes tapes 1 ANALYSE Etablit la liste des references Sources 2 CREATE 3 BUILD Patche les sources Compile les sources et ajoute la structure GLOBAL_DATA patchees 4 EXTRACT Extraction des fonctions et de GLOBAL_DATA Y 6 XOR q 5 GENERATE Xor les differents Cree differentes shellc
24. la structure globale De plus si l appel correspond une fonction interne dont la d claration a t modifi e le pointeur vers la structure globale est ajout en premier param tre MyFunc szText strlen szText Deviendra pGlobalData gt MyFunc pGlobalData szText pGlobalData gt strlen szText 17 4 DESCRIPTION D TAILL E DE LA SHELLCODISATION 4 3 5 Modification des fichiers sources r f rences aux cha nes de caract res Les r f rences aux cha nes de caract res seront galement remplac es par le pointeur vers le champ correspondant dans la structure GLOBAL DATA NACE suclen MaslloW4 MAL a che s Yj arriya yu Deviendra pGlobalData gt MyFunc pGlobalData pGlobalData gt szSTRING_0 pGlobalData gt strlen pGlobalData gt szSTRING_0 pGlobalData gt szSTRING_1 4 3 6 Modification des fichiers sources r f rences aux champs de la structure globale Les r f rences aux champs de l ventuelle structure globale d origine sont galement modifi es void IncrementCounter void GlobalData iCount Deviendra void IncrementCounter LPGLOBAL DATA pGlobalData pGlobalData gt iCount 4 3 7 Modification des fichiers headers d finition des pointeurs de fonctions Les champs ajout s dans la structure globale n cessitent la d finition des pointeurs de fonctions dans un fichier header Cette liste est automa
25. E GRAPHIQUE DE WISHMASTER W WiShMaster Project configuration Generalities Project pathes Regular expressions Optionnal steps Files list Create environment regular expressions Internal functions regex a z4 Z0 3_ _declspect naked a z4 Z_ a 24 20 9_ HIS Imported functions regex a z4 20 3_ M Internal functions prototype regex TM LAMAS Function call regex la z4 Z0 3_ A CreateT hread call regex CreateThreadX MLPTHREAD_START_ROUTINEX CH Extract data regular expressions Function detection regex Lo l EHEEr 0 3a f Data detection regex 0 4 J 0 9a f Test regular expressions String to test FIG 17 Onglet Regular expressions Le premier jeu d expressions est utilis lors de l analyse le second pour trouver les adresses des diff rents l ments dans le fichier map lors de l tape d extraction 7 3 4 Onglet Optionnal steps Cet onglet permet d activer les tapes optionnelles Generate XOR et Integrate W WiShMaster Project configuration Generalities Project pathes Regular expressions Optionnal steps Files list Generate Generate patched shellcode from extracted shellcode Path to generate library WISHMASTER_RDOT iGenerateShellcodeDefault dil Path to directory where to dump binary XML_ROOT temphexe Path to backdoors parameters file
26. LDS GLOBAL_DATA 4 3 9 Modification des fichiers sources ajout des fonctions d initialisation Le fichier source contenant le point d entr e subit plusieurs modifications Tout d abord trois fonctions utilis es pour initialiser le shellcode sont ajout es e BuildReferences le point d entr e du shellcode Cette fonction a la t che de retrouver l adresse de la structure GLOBAL_DATA et d initialiser certains de ses champs Les pointeurs vers les fonctions internes qui sont calcul s de proche en proche partir du d but du shellcode en ajoutant les tailles des fonctions internes Les pointeurs vers les fonctions import es les dlls sont charg es puis les adresses des fonctions sont retrouv es en parcourant l export directory et en comparant les checksums des noms de fonctions Elle va ensuite appeler la fonction principale d finie dans le fichier projet e GetKernel32Address une fonction r cup rant l adresse de chargement de kernel32 dll dans le processus courant partir du PEB e GetProcAddressCksum une fonction r cup rant l adresse d une fonction dans une dll partir du checksum de son nom Ensuite la fonction principale main _tmain WinMain est renomm e en OldMain et une fonction WinMain vide est ajout e Prenons un premier exemple o la fonction principale main est le point d entr e fonctionnel du shell code d clar dans les option
27. OOL LPCSTR typedef HANDLE WINAPI CreateMutexT ypeDef LPSECURITY_ATTRIBUTE typedef BOOL WINAPI ReleaseSemaphoreT ypeDef HANDLE LONG LPLO typedef HANDLE wINAPI CreateSemaphoreTypeDef LPSECURITY_ATTRI typedef HANDLE WINAPI CreateEventTypeDef LPSECURITY_ATTRIBUTE typedef BOOL WINAPI SetEventTypeDef HANDLE typedef BOOL WINAPI ResetE ventTypeDef HANDLE typedef DWORD WINAPI waitForSingleObjectTypeDef HANDLE DWORD typedef DWORD WINAPI waitForMultipleObjectsTypeDef DWORD const H typedef BOOL WINAPI ReleaseMutexTypeDef HANDLE typedef UINT WINAPI CloseHandleTypeDef HANDLE typedef DWORD WINAPI SetFilePointerT ypeDef HANDLE LONG PLONG typedef HANDLE wINAPI OpenProcessT ypeDef DWORD BOOL DWORD typedef LPYOID WINAPI Virtual llocExTypeDef HANDLE LPYOID SIZE T typedef LPYOID WINAPI virtualallocTypeDef LPYOID SIZE_T DWORD D tunedef RANI WINAPI writePrnressMemnruTuneDef HANDI F_IPANID IP w FIG 14 Edition de la liste de la base de donn es des fonctions import es e La premi re colonne repr sente le nom de la dll e La deuxi me est le nom de la fonction utilis e dans votre code e La troisieme est le nom de la fonction dans la dll Par exemple CreateFile est en r alit Create FileA e La derniere repr sente la d finition d un type pointeur de fonction correspondant au prototypage de la fonct
28. OR Step 7 Integrate Y INTEGRATE O fui rebuild 8888 8E888 E Starting step analyse files f EPEESSEEEEE PASSED Internal functions list successfully build PASSED Imported function file analysis successfull PASSED Strings analysis successfull 888 888888888 Starting step create environment fSESSESSEESEE INFO Copying and patching file D tempitest temp headers structures prototype h INFO 1 Copying and patching file D tempitest temp headers stdafx h INFO Copying and patching file D tempitest tempisources stdafx cpp INFO 1 Copying and patching file D temp itest temp sourcesitest cpp 1 D 1 INFO Copying and patching file D itempitestitempisourcesiglobal_data cpp INFO Copying and patching file D tempitest temp makefile INFO Environment created successfully 888888888888 Starting step compile EESSEEEEEE FIG 10 Fen tre principale de WiShMaster 7 1 1 La partie principale La partie principale est form e d un tableau constitu par les colonnes Shellcode creation steps Auto Manual State et Options Chaque ligne de ce tableau repr sente une des 7 tapes pr c demment d crites Par exemple en appuyant sur le bouton ANALYSE vous allez lancer l analyse des fichiers La colonne Options permet de modifier rapidement une caract ristique d une tape e La checkbox display warning de ANALYSE indique WiShMaster d
29. Wizard WiShMaster Fin du Wizard kk 38 24 Arborescence cr e parle wizard A 38 25 Allure de la fen tre principale apr s la cr ation du squelette de projet 39 26 Allure de la fen tre principale apr s la shellcodisation 39 27 Boite de dialogue affich e lors du lancement de l ex cutable issu de l int gration 40 28 Activation des messages de d bogage 40 29 R sultat de la shellcodisation avec le m canisme de traces activ 41 30 Message de d bogage affich dans DebuView 41 81 Seconde boite de dialogue affich e lors du lancement de l ex cutable issu de l int gration 45 1 PR AMBULE 1 Pr ambule 1 1 Objectif du document Ce document est le manuel d utilisation de WiShMaster Il pr sente l interface graphique les diff rentes fonctionnalit s ainsi que certains aspects techniques indispensables conna tre pour son utilisation Il s agit donc d un document technique qui s adresse aux d veloppeurs souhaitant utiliser cet outil dans le cadre de projets personnels Il consid rera que vous avez lu l article de pr sentation de WiShMaster 2 ainsi que celui montrant la shellcodisation de RConnect 3 il utilisera directement des notions introduites dans ces documents sans revenir sur leur d finition par exemple la structure GLOBAL_DATA je vous conseille donc forteme
30. atch sp cifi dans les options du projet en lui passant certains param tres e CLEAN si l utilisateur a coch la case full rebuild dans l interface principale e PRINT_DEBUG_MSG NUM avec NUM prenant la valeur 0 si Putilisateur a choisi de d sactiver le debogage Desactivate 1 si Putilisateur a choisi d afficher les messages de debogage sur stdout Print to stdout 2 si Putilisateur a choisi d afficher les messages de debogage sur le debugger noyau Print to kernel debugger La description d taill e de l ajout de traces de debogage sera faite dans la partie 8 DISABLE_GS 1 si Putilisateur a coch la case disable GS dans les propri t s de WiShMaster 21 4 DESCRIPTION D TAILL E DE LA SHELLCODISATION e MANUAL O pour que le script PERL sache qu il s agit d une compilation automatique par WiSh Master e les param tres indiqu s dans les options du projet WiShMaster fournit un ensemble de scripts permettant la compilation de la majorit des projets e WiShMaster lance un batch build bat e Ce batch ex cute un script PERL build pl e Le script PERL analyse les param tres et ex cute un ou plusieurs nmake conduisant la compi lation si le param tre CLEAN est d tect le script PERL effectue un nmake clean avant le nmake les valeurs de PRINT_DEBUG_MSG et MANUAL sont pass es e
31. diff rentes tapes W WiShMaster by x90re D Mempltestltest xml File Project Import functions Generation Help Shellcode creation steps Options View Edit results Step 1 Analyse files ANALYSE C display warning Internal functions Step 2 Create environment M CREATE M fast copy Imported functions Step 3 Compile COMPILE C fuit rebuild Step 4 Extract EXTRACT Step 5 Generate GENERATE Step 6 Xor shellcode XOR Step 7 Integrate M INTEGRATE full rebulld START INFO Build successfull H SHESSENSHHHHIS Starting step extract H SHPSAIHPNPIS Adding internal function BuildReferences 0 bytes Adding internal function DisplayMessageBox 1 bytes Adding internal function OldMain 2 bytes Adding internal function GetKernel3ZAddress 3 bytes Adding internal function GetProc ddressCksum 4 bytes Adding global structure bytes Total buffer size bytes INFO Extraction successfull WARNING Xored shellcode not found Step Xor shellcode not complete E 8ESSESSEE Starting step xor shellcode s INFO 1 Shellcode D 4tempitest tempiexeltest bin successfully xored INFO 1 All shellcode successfully xored FIG 26 Allure de la fen tre principale apr s la shellcodisation 39 9 CR ATION D UN SQUELETTE DE PROJET SANS STRUCTURE GLOBALE Notez les tailles des diff rents l ments extraits qui sont affich es dans la fen tre de log A la fin de
32. e apr s le constructeur permet d initialiser un delegate vers la fonction de logs e LoadData appel e lors de l ouverture d un projet Son r le est de charger un fichier contenant les param tres actuels e CloseData appel e lors de la fermeture du projet courant e GenerateShellcode Ex cute l tape de g n ration e GetGeneratedShellcodeList Retourne sous forme d un ArrayList la liste des noms des shellcodes g n r s Cette classe affiche de plus une fen tre permettant l utilisateur de saisir ses param tres lors de l appel de sa m thode ShowDialog A titre d exemple voici la fen tre affich e par le Generate de x RConnect Generate Backdoors Parameters Backdoor Name RConnect Server IP 127 0 0 1 Server Port 8080 FIG 7 Fen tre Generate de RConnect Celle ci permet tout simplement la saisie du nom de la backdoor utilis dans l tape d int gration de l adresse IP et du port du serveur patch s dans la structure globale Au niveau des fichiers sources l initialisation de la structure globale est faite via le code suivant GLOBAL_DATA GlobalData if MANUAL 0x0100007F ulServerAddr 0x5000 ulServerPort else Oxaaaaaaaa ulServerAddr Oxbbbbbbbb ulServerPort endif Lors d une compilation manuelle MANUAL 1 ladresse IP sera fix e 127 0 0 1 et le port 80 permet tant ainsi de tester la backdoor Lors d une compila
33. ect ne g re la g n ration que d une seule backdoor la fois Le code de GetGeneratedShellcodeList retourne donc simplement le nom d fini par l utilisateur dans un tableau return new string GenerateDataset BackDoorParamsRow generateDataset BackDoorParams Rows 0 szBackdoorName L criture de ces class libraries peut sembler peu complexe au premier abord je vous conseille donc de vous appuyer sur les class libraries de RConnect et de Injecter disponibles sur mon site 4 7 Etape 6 XOR des shellcodes L tape de XOR consiste encoder les shellcodes avec un algorithme appliquant des op rations de type XOR Deux algorithmes sont disponibles e Le premier applique simplement un XOR avec une cl sur l int gralit du shellcode Cet algorithme est tr s simple mais il g n re un mauvais brouillage DWORD orealil A DWORD oreali 1 DWORDIi A DWORDIi 1 Si DWORDIi DWORDIi 1 alors DWORD oreali DWORD orcali 1 e Le second algorithme comporte une boucle retroactive la cl de XOR varie A chaque it ration en fonction de la valeur du DWORD qui vient d tre chiffr e Vous pouvez choisir l algorithme que vous souhaitez et sp cifier la cl XOR ou demander WiShMaster d en g n rer une al atoirement 4 8 Etape 7 Int gration des shellcodes L int gration consiste transcrire le shellcode sous forme d un tableau de char l int grer dans le fichier header
34. erait directement le shellcode partir du code source Apr s une premi re version tr s li e Parsifal j ai choisi de rendre cet outil beaucoup plus g n rique et de le transformer en un g n rateur de shellcodes pour Windows ce d veloppement a conduit WiShMas ter 2 3 Principe de la shellcodisation par WiShMaster La shellcodisation effectu e par WiShMaster est compos e de 7 tapes Diff rents flots d ex cution peuvent tre suivis en fonction du r sultat recherch Le flot le plus complet part d un ensemble compilable de fi chiers sources et produit un ex cutable contenant le shellcode sous forme d un tableau encod par une cl XOR Cet ex cutable va typiquement d chiffrer le shellcode puis transf rer l ex cution sur son premier octet Etape 1 Analyse Cette premi re tape consiste parser les fichiers sources pour rep rer e Les fonctions internes les fonctions crites par le d veloppeur e Les fonctions import es les r f rences aux fonctions externes dans les dlls e Les cha nes de caract res Etape 2 Create Lors de cette deuxi me tape WiShMaster cr e une copie de l arborescence des fichiers sources en modi fiant le code pour que la compilation produise un code binaire relocalisable Etape 3 Compile WiShMaster compile ensuite ces sources patch es afin de produire un ex cutable Etape 4 Extract Au cours de cette tape WiShMaster extrait diff rentes parties de l
35. esse IP et le port d un serveur qui doivent tre hardcod s dans la structure globale Dans un premier temps vous crivez le code de votre application en C compatible avec WiShMaster Vous utilisez ensuite WiShMaster pour g n rer le shellcode cr par l tape extract qui contient deux valeurs sp ciales une pour l adresse IP et une pour le port Vous crivez ensuite la class library generate qui affiche une fen tre de dialogue permettant de saisir une adresse IP et un port et qui patche les valeurs sp ciales avec ces donn es Vous pouvez alors mettre disposition votre shellcode et la class library correspondante sous la forme d un projet WiShMaster du second type Une autre personne int ress e par votre d veloppement r cup re ce projet et l ouvre avec WiShMaster Il peut alors g n rer un shellcode avec les valeurs d adresse IP et de port adapt es sa situation et en faire ensuite ce qu il d sire le xorer l int grer dans un ex cutable dans une page html contenant un exploit le tout sans avoir acc s au code d origine Ce principe permet d obtenir une r elle s paration entre le c ur du programme le fonctionnel crit par la premi re personne et l enveloppe la partie encodage d codage le contenant crit par la seconde 25 6 INSTALLATION DE WISHMASTER 6 Installation de WiShMaster 6 1 Mise en place de l environnement WiShMaster L installation de WiShMaster consiste simpleme
36. h to BuildReferences function WISHMASTER_ROOT Pentypointsentrypoint general txt Path to GetKemel324ddress function WISHMAST ER_RO D Tlientrypointsfunction_G elKemel324ddress txt Path to GetProc ddressCksum function MISHMASTER ROOT PentypointVunction GetProcAddressCksum txt FireBreaker control Activate FireBreaker Path to FireBreaker code Add FireBreaker fields in GLOBAL structure Compilation Path to compilation command PML_ROOT build bat Arguments Extraction Path to compiled executable exe dil Path to generated map file XML_ROOT Jitemprexettest map Path to extracted shellcode XML_ROOT Memptexettest bin FIG 16 Onglet Project pathes Avec e Shellcode functions d fini les chemins vers les fichiers contenant les fonctions BuildReferences GetKernel32Address et GetProcAddressCksum e FireBreaker control permet d activer FireBreaker voir 3 pour une description de ce m ca nisme et de d finir le chemin vers le fichier contenant son code e Compilation d fini le chemin vers le script de compilation e Extraction d fini le chemin vers l ex cutable issu de la compilation le fichier map g n r par la compilation le shellcode issu de l extraction 7 3 3 Onglet Regular expressions Cet onglet permet de d finir les diff rentes expressions r guli res 32 7 L INTERFAC
37. i re MessageBox puis une seconde affichant les valeurs des champs de la structure globale d origine x90re s WiShMaster This is the content of the global structure hello and O FIG 31 Seconde boite de dialogue affich e lors du lancement de l ex cutable issu de l int gration 45 R F RENCES R f rences 1 DebugView Outil r cup rant les logs envoy es au noyau http www microsoft com technet sysinternals utilities debugview mspx 2 Benjamin CAILLAT Pr sentation de WiShMaster http benjamin caillat free fr ressources wishmaster WiShMaster_Presentation paf 3 Benjamin CAILLAT WiShMaster RConnect http benjamin caillat free fr ressources wishmaster WiShMaster_Presentation paf 4 Benjamin CAILLAT x90re s backdoors attaques cibl es d entreprises via des backdoors http benjamin caillat free fr backdoors php 46
38. inition des pointeurs de fonctions 4 8 8 Modification des fichiers headers Principe des balises 4 3 9 Modification des fichiers sources ajout des fonctions d initialisation 4 3 10 D tails des fonctions d initialisation 4 4 Etape 3 Compilation du code 4 5 Etape 4 Extraction du shellcode 4 6 Etape 5 G n ration des shellcodes 4 7 Etape 6 XOR des shellcodes 4 8 Etape 7 Int gration des shellcodes 4 9 Fonctionnement d taill conclusion 5 Les diff rents flots d ex cution 5 1 La d sactivation d tapes 5 2 Redistribuer un shellcode compil 6 Installation de WiShMaster 6 1 Mise en place de l environnement WiShMaster 6 2 Mise en place de l environnement de compilation 6 3 Configuration des chemins 7 L interface graphique de WiShMaster 7 1 Fen tre principale 7 1 1 7 1 2 7 1 3 La partie principale R sultat de l analyse du code Menus ori er ekk une ns 7 2 Fen tre Import functions database 7 3 La fen tre Projet configuration 7 3 1 7 3 2 7 3 3 7 3 4 7 3 5 Onglet Generalities Onglet Pr
39. ion 30 7 L INTERFACE GRAPHIQUE DE WISHMASTER 7 3 La fen tre Projet configuration Cette fen tre comporte plusieurs onglets permettant de r gler les propri t s du projet Lors de la d finition du chemin vers un fichier vous devez sp cifier un chemin absolu Cependant la pr sence de chemins en dur rendrait un projet trop d pendant de votre environnement et n est pas adapt e si vous souhaitez distribuer votre projet Pour viter cela vous pouvez utiliser deux variables sp ciales qui seront remplac es lors de l ex cution e WISHMASTER_ROOT sera remplac par le chemin vers le r pertoire de lancement de WiShMas ter e XML_ROOT sera remplac par le chemin vers le r pertoire contenant le fichier XML Par exemple pour sp cifier le chemin vers l ex cutable issu de la compilation au lieu d crire C temp test temp exe test ex Utilisez XML_ROOT Xtemplexeltest ex Si vous devez r f rencer un fichier dans un autre r pertoire vous pouvez galement utiliser un chemin contenant XML_ROOT temp cmd cmd exe mymodule dll 7 3 1 Onglet Generalities Cet onglet regroupe les propri t s g n rales du projet W WiShMaster Project configuration Generalities Project pathes Regular expressions Optionnal steps Files list Generalities Project Name test Projectld 0 Project type executable v Flow type From sources
40. l tape d int gration un ex cutable test exe aura t cr dans le r pertoire D temp test integration exe Si vous le lancez il affichera la fen tre suivante x90re s WiShMaster This is a program skeleton generated by WiShMaster wizard FIG 27 Boite de dialogue affich e lors du lancement de l ex cutable issu de l int gration 9 3 Activation du debogage Editez les propri t s du projet Ctrl E W WiShMaster Project configuration Generalities Project pathes Regular expressions Optionnal steps Files list Generalities Project Name test Projectld 0 Project type executable Flow type From sources Path to project root directory XML_ROOTI Create environment Path to project root shellcode directory XML_ROOT Mempt Path to shellcode directory object KML ROOT Memptobjs Path to shellcode directory executable XML_ROOT JMemprexes Debug message mode Print to kernel debugger v Informations on code Main function name WinMain C Source code include a definition of a global data structure Global structure name Global variable name Skip keywords if sizeof for while switch tmainWinMain va starva end FIG 28 Activation des messages de d bogage Changez le Debug message mode pour Print to kernel debugger et validez vos changements Relancez ensuite l int gralit des tapes en d
41. leton will be created in D Mtempitests FIG 23 Wizard WiShMaster Fin du wizard 9 2 Shellcodisation du programme squelette 9 2 1 Arborescence cr e A la fin du wizard vous retournez alors sur la fen tre principale de WiShMaster Le fichier projet g n r est automatiquement charg Si vous regardez dans le r pertoire que vous avez d fini en root vous allez trouver l arborescence sui vante 3 a Dexe D exe headers headers integration E integration obj bin sources D exe temp D headers Ebuild bat obj J build pl D sources EJ makefile obj 2 test xml B sources CO temp FIG 24 Arborescence cr e par le wizard 38 9 CR ATION D UN SQUELETTE DE PROJET SANS STRUCTURE GLOBALE 9 2 2 Ex cution de l analyse La fen tre principale de WiShMaster est alors la suivante W WiShMaster by x90re D tempitest test xml File Project Import functions Generation Help Shelicode creation steps Options Step 1 Analyse files O display warning Step 2 Create environment CREATE fast copy Step 3 Compile COMPILE C fuli rebuiid Step 4 Extract XTRACT Step 5 Generate GENERATE Step 6 Xor shellcode Step 7 Integrate INTEGRATE O Awi rebuiid WARNING No internal functions in database Create environment desactivated FIG 25 Allure de la fen tre principale apr s la cr ation du squelette de projet Appuyez sur START pour lancer Tex cution des
42. mesure du pos sible je vous conseille cependant de ne pas trop les modifier au risque de perturber le fonctionnement de WiShMaster Si vous le souhaitez vous pouvez galement tester la reconnaissance d une ligne avec l encart Test regu lar expressions Par exemple dans la figure suivante la d claration de la fonction MyFunction n est pas reconnue car l accolade a t plac e a la fin de la ligne Une modification de l expression r guli re Internal functions regex sera donc n cessaire ou une modification du code 11 4 DESCRIPTION D TAILL E DE LA SHELLCODISATION W WiShMaster Project configuration AAA A Generalities Project pathes Regular expressions Optionnal steps Files list Create environment regular expressions Internal functions regex la 2 20 9 JH 4 declspect naked a z4 Z_ J a 24 20 9 MINS Imported functions regex fa 24 20 3_ M Internal functions prototype regex NE COM AE Function call regex erz4 Z0 8_ M i CreateT hread call regex CreateT hreadX MLPTHREAD_START_ROUTINEX Extract data regular expressions Function detection regex H CEHEC J 0 3a f Data detection regex EG J 0 3a4 z Test regular expressions String to test int MyFunction INT a INT b 1 FIG 4 Test de la reconnaissance d une d claration de fonction Les fonctions internes Celles ci sont rep r es l
43. n param tre du nmake de compilation le makefile les transformera respectivement en macros PRINT_DEBUG_MSG et MANUAL et les passera en argument au compilateur option D A noter que e le passage par un script PERL permet d analyser les param tres de mani re beaucoup plus ais e qu en batch e le lancement direct d un script PERL ne fonctionne pas e la sortie standard des scripts est r cup r e et affich e dans la fen tre de log de WiShMaster Lorsque le script bat est lanc manuellement sans argument le programme d origine est compil Lorsque le script bat est lanc par WiShMaster avec l argument MANUAL 0 la version patch e dans le r pertoire temp est compil e L criture de ces scripts peut s av rer relativement fastidieuse je vous conseille de vous appuyer au maxi mum sur les exemples fournis notamment dans RConnect ou sur les fichiers g n r s par le wizard 4 5 Etape 4 Extraction du shellcode Les diff rentes parties du shellcode sont extraites en m moire et non partir du fichier ex cutable sur le disque WiShMaster lance une instance du programme en mode suspendu extrait les parties d sir es en s ap puyant sur le fichier map puis r sume l ex cution du programme qui se termine instantan ment puisque la fonction principale a t remplac e par une fonction WinMain vide lors de l tape creation La structure du shellcode g n r a t pr
44. nt d compresser l archive wishmaster X XX zip dans le r pertoire de votre choix 6 2 Mise en place de l environnement de compilation WiShMaster requiert les l ments suivants e un systeme Windows comprenant le framework net version gt 2 0 e les outils permettant de compiler le code source le compilateur de Microsoft Visual C 2005 qui peut tre t l charg gratuitement sur http msdn microsoft com vstudio express visualc download l environnement SDK contenant toutes les librairies et headers qui peut tre t l charg gratui tement sur le site de microsoft e PERL pour pouvoir facilement crire des programmes analysant les param tres Par exemple celui d ActiveState peut tre t l charg gratuitement sur http www activestate com Products ActivePerl 6 3 Configuration des chemins Lors du premier lancement WiShMaster va afficher une alerte indiquant que les chemins vers Visual C et le SDK sont vides WARNING FIG 8 Message d alerte affich lorsque l environnement de compilation n est pas configur Une fois sur l interface principale de WiShMaster appuyez sur F7 pour afficher la bo te de configuration et remplissez le chemin complet vers Visual C Visual installation directory et le SDK SDK installation directory 26 6 INSTALLATION DE WISHMASTER Par exemple pour une installation standard W WiShMaster Configuration Variables values
45. nt de les lire avant de poursuivre cette lecture 1 2 License WiShMaster est un freeware Vous pouvez lutiliser dans tout projet restant dans un cadre l gal L usage de WiShMaster pour cr er des outils d attaque utilis s ensuite pour mener un quelconque acte ill gal est formellement interdit En dehors de cette restriction vous pouvez utiliser WiShMaster et ses ressources dans tout contexte gratuit comme commercial La seule condition tant qu une r f rence vers WiShMas ter soit faite dans la documentation du projet L ensemble des donn es programmes et informations mis disposition dans le cadre de ce projet sont fournis tels quels et sans aucune garantie Je ne donne aucune garantie l effet que ces l ments soient complets justes exacts exhaustifs fiables et jour Je ne donne de plus aucune garantie l effet que ces l ments puissent convenir ou tre adapt s une situation particuli re pr cise par un usager Je d cline toute responsabilit face une quelconque perte faisant suite l utilisation de ces informations ou programmes Vous utilisez ce programme vos propres risques 1 3 ChangeLog 1 10 Nouvelle version mai 2007 e WiShMaster a t enti rement recod pour que le code soit plus clair et plus modulaire Cette refonte reste cependant relativement transparente pour Tutilisateur e Ajout du m canisme de chargement dynamique des class libraries il n est plus n cessaire d
46. ode 11 4 Test de la reconnaissance d une d claration de fonction 12 5 Ajout d une cha ne dans la liste des symboles ignorer 14 6 Ajout de la fonction CreateNamedPipe dans la base de fonctions importables 15 7 Fen tre Generate de RConnect 23 8 Message d alerte affich lorsque l environnement de compilation n est pas configur 26 9 Exemple de configuration pour une installation standard 27 10 Fen tre principale de WiShMaster 28 11 Visualisation de la liste des fonctions internes 29 12 Visualisation de la liste des fonctions import es 29 13 Visualisation de la liste des cha nes de caract res 29 14 Edition de la liste de la base de donn es des fonctions import es 30 15 Onglet Generalities A 31 16 Onglet Project pathes rr 32 17 Onglet Regular expressions 33 18 Onglet Optionnal steps 33 19 Onglet File lists oscura US as rn e dt ok 34 20 Wizard WiShMaster Fen tre Paccueil 36 21 Wizard WiShMaster D finition des propri t s du projet 37 22 Wizard WiShMaster Personnalisation du projet 37 23
47. odes versions du shellcode 7 INTEGRATE Integre les shellcodes dans un programme lance sa compilation FIG 1 Principe de la shellcodisation par WiShMaster 00 3 LES CONVENTIONS D CRITURE DU CODE 3 Les conventions d criture du code 3 1 Conventions sur la syntaxe du code A l origine WiShMaster a t d velopp pour shellcodiser les backdoors du projet x90re s backdoors Limpl mentation de l interface de communication backdoors modules au niveau binaire m a forc faire travailler WiShMaster au niveau du code source et non du binaire produit par une premi re compilation Outre le fait qu il tait n cessaire dans le contexte de x90re s backdoors ce principe comporte l avantage d tre ind pendant de POS un portage par exemple sous Linux serait envisageable et de l architecture mat rielle type de processeur En revanche il impose certaines contreparties la principale tant que le code source qui est analys suivant des expressions r guli res doit suivre certaines conventions syntaxiques 3 2 Conventions sur les variables globales La seconde convention est que votre code ne doit contenir qu une seule structure globale ou pas du tout auquel cas elle sera ajout e par WiShMaster Si par exemple vous utilisez deux variables globales int iCount 0 et char szText hello vous avez probablement une d claration dans l un de vos fichiers
48. oject pathes Onglet Regular expressions Onglet Optionnal steps Onglet File lists 8 Le d bogage du code shellcodis 8 1 De la n cessit de d boguer 8 2 Le m canisme de traces impl ment dans WiShMaster TABLE DES MATI RES 9 Cr ation d un squelette de projet sans structure globale 36 9 1 Cr ation du squelette avec le Wizard 36 9 1 1 Lancement du wizard 36 9 1 2 D finition des propri t s du projet 36 9 1 3 Personnalisation du projet 37 9 1 4 Fin du Wizard Le nn dec a D EE ist a aa NN ala e 38 9 2 Shellcodisation du programme squelette 38 9 2 1 Arborescence cr e ll RE a mt 38 9 2 2 Ex cution de l analyse 39 9 8 Activation du debogage 40 9 4 Fichiers du projet 41 9 5 Analyse du Code sun a ls de de le kWh GW a a dd 42 10 Cr ation d un squelette de projet avec structure globale 44 TABLE DES FIGURES Table des figures 1 Principe de la shellcodisation par WiShMaster 8 2 Structure du shellcod 4 44 4308 40h he eu ae tasas daa A RE LA 10 8 Expressions r guli res utilis es pour analyser le c
49. on interne L entier contient la taille de la fonction afin de reconstruire ces r f rences de proche en proche e Un pointeur de fonction et un entier pour chaque fonction import e Le pointeur de fonction contien dra lors de l ex cution l adresse de la fonction import e L entier contient la checksum du nom de la fonction utilis e par GetProcAddressCksum pour la localiser dans la dll e Un tableau de structures GETADD_DLL utilis pour charger les dlls n cessaires e La liste des cha nes de caract res d tect es Par exemple si WiShMaster d tecte les l ments suivants dans le code du programme contenant la struc ture GLOBAL_DATA d crite ci dessus e une fonction interne MyFunc e des fonctions import es CreateFile kernel32 dll et strlen msvert dll e deux cha nes de caract res Hello et toto La d claration de la structure sera compl t e et deviendra typedef struct _GLOBAL_DATA LNC ICOUMES char szText 6 l Internal functions pointers MyFuncTypeDef MyFunc ULONG ulMyFuncSize Imported functions pointers CreateFileTypeDef CreateFile Imported functions checksum 16 4 DESCRIPTION D TAILL E DE LA SHELLCODISATION ULONG ulCreateFileCksum GETADD_ DLL array GETADD_DLL GetAddD11 NB_OF_IMPORTED_DLLS 1 Serings CHAR szSTRING_0 6 CHAR SZOLB ELUNSZNIEJ GLOBAL DATA Remarque WiShMaster conserve
50. onction ni la convention d appel Si vous relancez l analyse WiShMaster ne montera maintenant plus d alerte car tous les symboles sont connus 15 4 DESCRIPTION D TAILL E DE LA SHELLCODISATION 4 3 Etape 2 Cr ation du code 4 3 1 Sous arborescence cr e Le code modifi est cr dans un sous r pertoire du r pertoire racine du projet appel temp Les che mins sont calcul s en relatif par rapport cette racine Par exemple la mini arborescence suivante monprojet sources file cpp monprojet headers file h monprojet makefile Conduira apr s l tape de create l arborescence monprojet sources file cpp monprojet headers file h monprojet makefile monprojet temp sources file cpp monprojet temp headers file h monprojet temp makefile WiShMaster distingue trois types de fichiers e Les headers h e Les sources cpp e Les autres makefile Les modifications effectu es lors de la copie d un fichier d pendront de son type 4 3 2 Modification des fichiers headers la structure globale Le nom de la structure globale est d fini dans les options du projet WiShMaster peut alors rep rer le fichier header contenant sa d finition et compl ter celle ci avec les champs suivants e Un pointeur de fonction et un entier pour chaque fonction interne Le pointeur de fonction contiendra lors de l ex cution l adresse de la foncti
51. ors de leur d claration dans les fichiers cpp En utilisant Texpression r guli re par d faut la d claration suivante sera rep r e BOOL MyFunc CHAR szFileName UINT uiValue Mais celle ci ne le sera pas BOOL MyFunc CHAR szFileName UINT uiValue Les fonctions import es Celles ci sont rep r es lors de leur appel dans les fichiers cpp L expression r guli re par d faut est tr s large car il faut tre s r de reconna tre tous les appels Trois types de symboles vont tre reconnus e les appels aux fonctions internes e les appels aux fonctions import es e les faux appels de fonctions mot cl s du langage if while les macros va_start certaines cha nes de caract res 12 4 DESCRIPTION D TAILL E DE LA SHELLCODISATION WiShMaster s appuie sur des bases internes pour classer un symbole matchant l expression r guli re Imported functions regex dans l une de ces trois cat gories e une fonction interne sera reconnue gr ce la liste des fonctions internes pr c demment tablie e une fonction import e sera reconnue gr ce la base de fonctions importables cf paragraphe 4 2 e les symboles correspondants aux faux appels sont stock s dans les options du projet dans une liste de symboles ignorer L expression par d faut va par exemple rep rer les appels strlen et atoi dans la ligne suivante while i MyFunc szTex
52. r exemple si vous souhaitez juste produire un shellcode vous pouvez vous arr ter apr s l tape d ex traction Autre exemple si vous avez crit un code qui doit tre xor et int gr un ex cutable mais ne n cessite pas de personnalisation vous pouvez activer toutes les tapes sauf celle de g n ration Vous n aurez alors bien s r pas besoin d crire de class library Generate Le tableau suivant pr sente quelques exemples de combinaisons et le r sultat produit 5 3 8 5 lu b Hs 95 R S O lt o na dx S R sultat 11010 010010 O Un exe contenant le shellcode xor et personnalis par generate 2 OJO O O N N O Un exe contenant le shellcode en clair et non personnalis 8 O0 O O O NIN N Un bin contenant le shellcode 4010 O O O N N Un bin contenant le shellcode personnalis 5 2 Redistribuer un shellcode compil WiShMaster distingue deux types de projets e ceux travaillant sur le code source dont nous avons parl jusqu ici e ceux travaillant partir d un shellcode extrait Dans ce second cas WiShMaster ex cute directement les tapes de g n ration XOR et d int gration partir d un shellcode Ce m canisme permet de s parer d un cot le d veloppeur du code shellcodis et de l autre celui qu il l utilise Pour illustrer ce principe imaginons que vous d veloppiez un code n cessitant une personnalisation l adr
53. s du projet A l origine le code est le suivant int main int argc char argv Apr s transformation le flux d ex cution devient void BuildReferences void pGlobalData gt OldMain pGlobalData int OldMain LPGLOBAL DATA pGlobalData 19 4 DESCRIPTION D TAILL E DE LA SHELLCODISATION Ancienne fonction main Il est galement possible que le point d entr e fonctionnel ne soit pas la fonction main Dans l exemple suivant il s agit de la fonction DoAction wawe menim bone arge Caere arecw ii DoAction 0 int DoAction int paraml Apr s transformation le flux d ex cution devient void BuildReferences void pGlobalData gt ExecuteBuffer pGlobalData 0 int ExecuteBuffer LPGLOBAL DATA pGlobalData int paraml Ancienne fonction DoAction int OlMain LPGLOBAL_DATA pGlobalData Ancienne fonction main Dans les deux cas la fonction main ou _tmain ou WinMain est renomm e en OldMain et une nouvelle fonction WinMain vide est ajout e Ce m canisme permet ensuite de lancer le programme pour pouvoir extraire le code et les donn es partir du processus correspondant sans pour autant ex cuter les fonctions r elles du programme 4 3 10 D tails des fonctions d initialisation Larchive de WiShMaster contient plusieurs versions de ces trois fonctions Il est bien s
54. source PXML_ROOT JAsourceststdafx cpp source XML_ROOT Jisourcesttest cpp source XML_ROOT sources print_debug_msg cpp header lt ML_RO0T lt headers structures_prototype h source XML_ROOT sheadersiprint_debug_msg h header P lt ML_RO0T lt headerststdafx h other IXML_ROOT JAmakefile source XML_ROOT Jisourcestalobal_data cpp FIG 19 Onglet File lists Pour ajouter de nouveaux fichiers faites un double click sur la colonne de droite Une fen tre vous per mettra alors de choisir les fichiers Les types des fichiers seront automatiquement s lectionn s en fonction de lextension 34 8 LE D BOGAGE DU CODE SHELLCODIS 8 Le d bogage du code shellcodis 8 1 De la n cessit de d boguer Il est tr s probable que vous aurez besoin de d boguer vos shellcodes Mais comme l op ration de shellco disation aura bris toutes les r f rences avec les ventuels fichiers de d bogage vous n aurez acc s qu au code assembleur Il est toujours possible d ajouter des points d arr ts en inlinant une instruction int 3 mais cette tech nique s av re assez fastidieuse et ne r pond pas tous les besoins Il est parfois n cessaire de pouvoir afficher des traces 8 2 Le m canisme de traces impl ment dans WiShMaster WiShMaster impl mente un m canisme permettant de rapidement obtenir des traces de d bogage m me dans un shellcode inject dans un processus distant Dans un premier temps
55. sources similaire int iCount 0 char szText hello void IncrementCounter void COIE re Pour rendre ce code compatible avec WiShMaster vous devez placer ces variables dans une structure globale dont vous pr ciserez ensuite le nom dans les options du projet Dans un fichier header vous d clarez votre structure typedef struct _GLOBAL DATA ENT COUMES char szText 6 l GLOBAL DATA Puis dans le fichier source d origine vous instanciez cette structure globale et vous l initialisez GLOBAL DATA GlobalData 0 Count UNEJIOH szText 7 void IncrementCounter void GlobalData iCount 4 DESCRIPTION D TAILL E DE LA SHELLCODISATION 4 Description d taill e de la shellcodisation Cette partie d crit de mani re technique chaque tape de la shellcodisation 4 1 Structure du shellcode g n r Le shellcode g n r est consitu de deux parties e La premiere est form e par la fonction BuildReferences ajout e par WiShMaster suivie de toutes les fonctions internes e La seconde regroupe la structure globale constitu e des donn es du programme d origine et de don n es ajout es par WiShMaster Fonction 1 Fonction 2 Fonctions internes gt Structure globale Donnees initialisees Donnees du programme d origine Chaines de caracteres EG Donnees ajoutees par WiShMaster
56. t strlen szText atoi szValue gt 0 MyFunc ne sera en revanche pas reconnue comme une fonction import e car il s agit d une fonction interne while sera galement cart car il fait partie de la liste des symboles ignorer Les chaines de caract res Celles ci sont rep r es via le caract re WiShMaster n utilise pas une expression r guli re car il existe des cas particuliers difficiles g rer par exemple le cas o la cha ne contient elle m me un caract re backslash Dans la ligne suivante WiShMaster rep rera deux cha nes diff rentes hello et il a dit EE j arrive Myrna WMascllo EM Msllo il a che 3 arriya w Il peut arriver que votre code contienne des cha nes de caract res dont WiShMaster ne doivent pas te nir compte Par exemple les cha nes utilis es lors de l initialisation de instance de la structure GLO BAL_DATA ne doivent pas tre prise en compte sinon la shellcodisation chouera En reprenant l exemple pr c dent GLOBAL_DATA GlobalData OF IN Co hello szText y La cha ne hello sera reconnue et ajout e dans la partie Cha nes de caract res comme une cha ne normale Cet ajout fera cependant chouer la shellcodisation Vous pouvez indiquer WiShMaster de ne pas tenir compte des cha nes d tect es sur une ligne en ajou tant une balise WISHMASTER SKIP STRINGS
57. t functions database vous permet de modifier la liste des fonctions importables Comme d crit dans le paragraphe 4 2 les ajouts sont normalement effectu s via la fen tre unknow symbol Cette fen tre vous permet cependant de modifier tous les champs ou de supprimer une entr e W WiShMaster Import functions database advapi32 dll advapi32 dll advapi32 dll advapi32 dll kemel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kemel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kermel32 dll Avec RegQueryY alue RegQueryWalueEx FiegSetYalueEx RegCloseKey FindClose ExitProcess LoadLibrary DutputDebugString GetProc ddress WirtualQuery VirtualProtect VirtualFree GetCommandLine FreeLibrary GetModuleHandle WriteFile ReadFile OpenMutex CreateMutex ReleaseSemaphore CreateSemaphore CreateE vent SetEvent ResetE vent WaitForSingleObiject WaitForMultipleDbjects FieleaseMutex CloseHandle SetFilePointer DpenProcess Virtual llocEx Virtual lloc WiritePracessMemaru RegQuers alue RegQueryWalueEx4 RegSetValueE x RegCloseKey FindClose ExitProcess LoadLibrary DutputDebugString GelProc ddress VirtualQuery VirtualProtect Vir
58. tat de la shellcodisation avec le m canisme de traces activ Lancez un outil affichant les logs kernel comme par exemple DebugView 1 et relancez l ex cutable dans le r pertoire integration Au niveau de l outil de debogage vous verrez le message suivant DebugView on MWISMERHILL local File Edit Capture Options Computer Help id KR 3 A SARI OP M Time Debug Print D 0 00000000 1096 This string is send to debug output Temp value deadbabe FIG 30 Message de d bogage affich dans DebuView 9 4 Fichiers du projet WiShMaster sauve les donn es d un projet dans 5 fichiers XML Nom du fichier Description NAME xml Fichier principal ouvrir avec WiShMaster Contient toutes les options du projet NAME _importedfunctions xml Contient la liste des fonctions import es NAME internalfunctions xml Contient la liste des fonctions internes NAME stringslist xml Contient la liste des cha nes de caract res NAME_generation_params xml Contient les donn es g n r es par la class library generate 41 9 CR ATION D UN SQUELETTE DE PROJET SANS STRUCTURE GLOBALE 9 5 Analyse du code Au niveau du code le seul point noter est le fichier structures_prototype h qui contient WISHMASTER ADD GLOBAL DATA Le fichier patch sera alors 42 typedef Imported functions typedef typedef DWORD WINAPI x GetC
59. te des fonctions internes d tect es W WiShMaster list of internal functions Use Ctrl Up Down to move items and define functions order Name TypeDef BuildReferences typedef VOID BuildReferencesT ypeDef VOID DisplayMessageB ox typedef VOID DisplayMessageBoxT ypeDef CHAR szMsg OldMain typedef INT OldMainTypeDef LPGLOBAL DATA pGlobalData GetKemel324ddress typedef ULONG GetKemel32AddressT ypeDef VOID GetProc ddressCksum typedef ULONG GetProc ddressCksumT ypeDef ULONG HMODULE LPYOID LPVOID FIG 11 Visualisation de la liste des fonctions internes Les fonctions internes seront plac es dans le shellcode dans le m me ordre que dans cette fen tre Vous pouvez s lectionner une fonction puis la d placer en utilisant les combinaisons de touches Ctrl UP et Ctrl DOWN Cette fonctionnalit a t ajout e car cet ordre est primordial lors de la cr ation d interfaces binaires La fonction BuildReferences doit rester la premi re 7 1 2 2 Fen tre Imported functions Cette fen tre regroupe la liste des fonctions import es W WiShMaster list of imported functions Dll name Function name Function real name TypeDef kemel32 dll LoadLibrary LoadLibrary typedef HMODULE WINAPI LoadLibraryT ypeDef LPCSTR kemel32 dll GetProc ddress GetProc ddress typedef FARPROC wINAPI GetProc ddressT ypeDef HMODULE LPCSTR msycrt dll sprintf sprintf typedef INT _cdecl sprintfT ypeDef
60. ter unknow symbol Unknow symbol Unknow symbol CreateNamedPipe File path D Atempitestisourcesitest cpp Line CreateNamedPipef 144 Mpipe Amypipe PIPE_ACCESS_OUTBOUND PIPE_TYPE_MESSAGE PIPE _UNLIMITED_INSTANCES sizeof DWORD 0 NMPWAIT_USE_DEFAULT_WAIT sa Action to execute How this symbol must be handled O Close this window and continue O Add to strings to skip Add in import functions database Function prototype WINBASEAPI out HANDLE WINAPI CreateNamedPipe LPCSTR IpName DWORD dwOpenMode DWORD dwPipeMode DWORD nMaxlnstances DWORD nOutBufferSize DWORD ninBufferSize DWORD nDefaultTimeDut UPDATE i __in qe LPSECURITY_ATTRIBUTES IpSecurity ttributes Y CLEAR 5533533333 Dll name kemel32 dll Function name CreateN amedPipe Typedef typedef HANDLE WINAPI CreateNamedPipeTypeDef LPCSTR DWORD DWORD DWORD DWORD DWORD DWO Function real name CreateN amedPipeA FIG 6 Ajout de la fonction CreateNamedPipe dans la base de fonctions importables Le nom de la librairie exportant la fonction peut tre trouv dans la documentation MSDN Copiez ensuite le prototypage de la fonction extrait des fichiers headers du SDK dans la partie function prototype et cliquez sur UPDATE pour remplir automatiquement les autres champs Attention n uti lisez pas le prototypage du MSDN qui ne contient pas le v ritable nom de la f
61. tion via WiShMaster MANUAL 0 l adresse IP et le port seront fix s aux valeurs sp ciales Oxaaaaaaaa et Oxbbbbbbbb Une fois le shellcode extrait l tape de g n ration remplacera ces valeurs par celles indiqu es dans la bo te de dialogue ci dessus La class library Generate de RConnect contient le code suivant Patch parameters if PatchBuffer FindAndPatch bData IPAddress Parse rBackDoorParams szServerIP GetAddressBytes Oxaa PrintData PrintMsg Error in generation failed to find address bytes PrintData MSG_LEVEL_ INFO return false if PatchBuffer FindAndPatch bData ulServerPort 0xbb PrintData PrintMsg Error in generation failed to find port bytes PrintData MSG LEVEL INFO return false 23 4 DESCRIPTION D TAILL E DE LA SHELLCODISATION Il est possible en complexifiant un peu le code de Generate de proposer l utilisateur de g n rer si multan ment plusieurs backdoors avec des param tres diff rents L interface affich e doit alors permettre de saisir un nom unique de shellcode et d associer chacun un jeu de param tres Pour effectuer les tapes suivantes de XOR et Integate WiShMaster r cup rent la liste des shell codes en appelant la fonction GetGeneratedShellcodeList de Generate qui retourne un tableau contenant les noms des shellcodes g n r s La class library actuelle de RConn
62. tiquement construite et ajout e 4 3 8 Modification des fichiers headers Principe des balises Certains ajouts de code se font l emplacement de balises que vous devez ajouter C est une modifica tion tr s rapide du code qui permet de mieux contr ler les insertions automatiques de WiShMaster Si votre code ne contient pas de structure globale Dans l un de fichiers h ajoutez la ligne suivante WISHMASTER ADD GLOBAL DATA Cette balise va marquer l ajout des d finitions de pointeurs de fonctions internes et import es et de la structure globale Si votre code contient une structure globale e WISHMASTER ADD FIELDS doit tre ajout la fin de votre structure globale pour marquer l ajout des nouveaux champs e WISHMASTER INTERNAL FUNCTIONS TYPEDEF sera remplac par les d finitions de poin teurs de fonctions internes e WISHMASTER IMPORTED FUNCTIONS TYPEDEF sera remplac par les d finitions de poin teurs de fonctions import es 18 4 DESCRIPTION D TAILL E DE LA SHELLCODISATION Typiquement la d finition de la structure globale typedef struct _GLOBAL_DATA inte 1UCOWINE char szText 6 GLOBAL DATA Deviendra WISHMASTER INTERNAL FUNCTIONS TYPEDEF WISHMASTER IMPORTED FUNCTIONS TYPEDEF typedef struct _GLOBAL DATA ima 1LCONWMIE y char szText 6l WISHMASTER ADD FIE
63. tualFree GetCommandLine FreeLibrary GetModuleH andle WiteFile ReadFile DpenMutex CreateMutex ReleaseSemaphore CreateSemaphore CreateEvent SetEvent ResetE vent WwaitForSingleObject WaitForMultipleO bjects ReleaseMutex CloseHandle SetFilePointer DpenProcess Virtual llocEx Virtual lloc WiritePracessMemaru typedef LONG WINAPI RegQueryValueTypeDef HKEY LPCSTR LPCSTR typedef LONG wINAPI RegQueryValueExTypeDef HKEY LPCSTR LPDW typedef LONG WINAPI RegSetValueE xT ypeDef HKEY LPCSTR DWORD typedef LONG WINAPI RegCloseKeyTypeDef HKEY typedef BOOL WINAPI FindCloseTypeDef HANDLE typedef VOID wINAPI ExitProcessTypeDef UINT typedef HMODULE WINAPI LoadLibraryTypeDef LPCSTR typedef VOID wINAPI DutputDebugStingTypeDef LPCSTR typedef FARPROC WINAPI GetProcAddressTypeDef HMODULE LPCSTR typedef DWORD WINAPI VirtualQueryTypeDef LPCYOID PMEMORY_BASI typedef BOOL WINAPI VirtualProtectTypeDef LPVOID SIZE_T DWORD P typedef DWORD wINAPI VirtualFreeTypeDef LPVOID SIZE_T DWORD typedef LPSTR WINAPI GetCommandLineT ypeDef VOID typedef BOOL WINAPI FreeLibraryTypeDef HMODULE typedef HMODULE WINAPI GetModuleHandleT ypeDef LPCSTR typedef BOOL WINAPI writeFileTypeDef HANDLE LPCYOID DWORD LP typedef BOOL WINAPI ReadFileT ypeDef HANDLE LPYOID DWORD LPD typedef HANDLE WINAPI OD penMutexTypeDef DWORD B
64. urrentThreadldTypeDef VOID typedef VOID WINAPI xOutputDebugStringTypeDef LPCSTR typedef HMODULE WINAPI LoadLibraryTypeDef LPCSTR typedef FARPROC WINAPI GetProcAddressTypeDef HMODULE LPCSTR typedef INT __cdecl vsprintfTypeDef char const char va_list typedef INT __cdecl printfTypeDef const char x typedef int WINAPI x MessageBoxTypeDef HWND LPCSTR LPCSTR UINT define NB_OF_INTERNAL_FUNCTIONS 6 define NB_OF_IMPORTED_DLLS 3 define NB_OF_IMPORTED_FUNCTIONS 7 define NB OF INTERNAL _FUNCTIONS_ALREADY_DEFINED 0 typedef struct _GLOBAL DATA LPGLOBAL_DATA Internal functions typedef typedef VOID BuildReferencesTypeDef VOID typedef VOID DisplayMessageBoxTypeDef LPGLOBAL DATA CHAR x szMsg LONG GetProcAddressCksumTypeDef ULONG Structure pour les dlls import es typedef struct ULONG ulNbOfFunctions CHAR szDl1lName 20 GETADD_DLL LPGETADD_DLL Global structure typedef struct _GLOBAL_DATA Internal functions pointers BuildReferencesTypeDef BuildReferences DisplayMessageBoxTypeDef DisplayMessageBox OldMainTypeDef OldMain PrintDebugMsgTypeDef PrintDebugMsg GetKernel32AddressTypeDef GetKernel32Address GetProcAddressCksumTypeDef GetProcAddressCksum LONG ulBuildReferencesSize LONG ulDisplayMessageBoxSize LONG ulOldMainSize LONG ulPrintDebugMsgSize
65. utomatiquement les champs DevEnvDir et MSVCDir V rifiez cependant la coh rence avec votre installation e Les ent es PATH INCLUDE et LIB indiquent les valeurs que vont prendre les variables d environnement correspondante Par exemple DevEnvDir au d but de PATH indique que la valeur entr e dans la bo te DevEnv Dir sera ajout e au PATH Une fois les diff rents chemins saisis appuyez sur APPLY Vous pouvez alors tester la configuration en appuyant sur TEST Vous devriez voir appara tre le message suivant cl Command line error D2003 missing source filename Attention si vous obtenez galement le message suivant vous devez imp rativement d cocher la case Disable GS cl Command line warning D4002 ignoring unknown option G 27 7 L INTERFACE GRAPHIQUE DE WISHMASTER 7 L interface graphique de WiShMaster 7 1 Fen tre principale La fen tre principale de WiShMaster est la suivante W WiShMaster by x90re D Mempltestltest xml File Project Import functions Generation Help Shellcode creation steps Options View Edit results Step 1 Analyse files ANALYSE O display warning Internal functions Step 2 Create environment CREATE fast copy Imported functions Step 3 Compile COMPILE Y full rebuiid Step 4 Extract EXTRACT Strings Step 5 Generate GENERATE Step 6 Xor shellcode X
66. v Path to project root directory XML_ROOT A Create environment Path to project root shellcode directory PML_ROOT temp Path to shellcode directory object XML_ROOT Mtemp obi Path to shellcode directory executable XML_ROOT Memprexeh Debug message mode Desactivate Informations on code Main function name WinMain M Source code include a definition of a global data structure Global structure name GLOBAL_DATA Global variable name GlobalData Skip keywords if sizeof for while switch _tmainWinMain va_start va_end FIG 15 Onglet Generalities A priori les seuls champs que vous pourriez tre amen s modifier sont e Debug message mode qui sp cifie le mode de debugage cf partie 8 e Main function name qui sp ficie le point d entr e du shellcode qui peut tre diff rent de la fonction main e Global structure name variable qui sp cifient respectivement le nom du type et de la variable de la structure globale 31 7 L INTERFACE GRAPHIQUE DE WISHMASTER e Skip keywords qui repr sente la liste des symboles dont WiShMaster ne doit pas tenir compte lors de l tape d analyse 7 3 2 Onglet Project pathes Cet onglet d fini les diff rents chemins utilis s lors de la shellcodisation W WiShMaster Project configuration Generalities Project pathes Regular expressions Optionmal steps Files list Shellcode functions Pat

Download Pdf Manuals

image

Related Search

Related Contents

National Instruments PCIe-6361 Datasheet  イエローフィン 取扱説明書  RATIOfresh 200 Frischwasserstation  Design Document  Panduit GPQC10-1/0  Grundig MM 6050  

Copyright © All rights reserved.
Failed to retrieve file