Home

WiShMaster - Manuel - Benjamin Caillat

image

Contents

1. WaitForSingleObject T ypeDef HANDLE DWORD typedef DWORD wlNAPI waitForMultipleDbiectsTypeDef DWORD const H typedef BOOL WINAPI ReleaseMutexTypeDef HANDLE typedef UINT wINAPI CloseHandleT ypeDef HANDLE typedef DWORD WINAPI SetFilePointerTypeDef HANDLE LONG PLONG typedef HANDLE wINAPI OpenProcessTypeDef DWORD BOOL DWORD typedef LPYOID WINAPI Virtual amp llocE xT ypeDef HANDLE LFPVDID SIZE typedef LPVOID virtual amp llacTypeDef LPVOID SIZE T DWORD D typedef BOOL wINAPI writeProcessMemoryT ypeDef HANDLE LPVDID LP typedef HANDLE CreateRiemoteT hreadT ypeD ef HANDLE LPSECU typedef BOOL wINAPI ReadProcessMemoryTypeDef HANDLE LPCYOID L typedef VOID WINAFI SleepTypeDef DWORD typedef BOOL wINAPI CreatePipeT ypeDef PH NDLE PHANDLE LPSECU typedef BOOL wINAPI CresteProcessT ypeDef EPCTSTR LPTSTR LPSEC typedef HANDLE WIN amp PI GetProcessHeapTypeDef VOID typedef BOOL PeekNamedPipeT ypeDef H amp NDLE LPVDID DWOR typedef BOOL wINAPI GetExitCodeProcessT ypeDef HANDLE LPD Ww ORD J typedef BOOL wINAPI GetE xitCodeThreadT ypeDef HANDLE LPDwW ORD typedef HANDLE WIN amp PI GetCurrentProcessT ypeDef VOID typedef DWORD wINAPI GetCurrentProcessldT ypeD ef VOID typedef DWORD wINAPI GetModuleFileNameTypeDef HMODULE LPTST Y Edition de la liste de la base de donn es
2. WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation Auteur x90re Version 1 00 Date 18 09 2006 Contact x90re yahoo fr Site web http benjamin caillat free fr WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation Table des mati res 1 Pr sentation de WiShMaster 4 1 1 Objectif du document 4 1 2 Principe de l outil 4 1 3 Origine du projet 4 1 4 Rappel Principe de la shellcodisation par WiShMaster 4 2 Lesconventions d criture du code 7 2 1 Conventions sur la syntaxe du code 7 2 2 Convention sur les variables globales 7 3 Description d taill e de la shellcodisation 8 3 1 Rappel Structure du shellcode g n r 8 3 2 Etape 1 L analyse du code 8 3 3 Etape 2 Cr ation du code 9 3 4 Etape 3 Compilation du code 15 3 5 Etape 4 Extraction du shellcode 16 3 6 Etape 5 G n ration des shellcodes 16 3 7 Etape 6 des shellcodes 17 3 8 Etape 7 Int gration des shellcodes 18 3 9 Fonctionnement d taill conclusion 18 4 Les diff rents flots d ex cution 19 4 1 La d sactivation d tapes 19 4 2 Redistribuer un shellcode compil 19 5 Installation de WiShMaster 20 5 1 Mise en place de l environnement WiShMaster 20 5 2 Mise en place de l environnement de compilation 20 5 3 Configuration des chemins 20 6 L interface graphique de WiShMaster 22 6 1 Fen
3. GLOBAL DATA 0 char szText 6 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 ULONG ulNbOfFunctions CHAR szDllName 20 GETADD DLL LPGETADD DLL typedef struct GLOBAL DATA dide LECONTE 35 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation char szText 6 Internal functions pointers BuildReferencesTypeDef BuildReferences DisplayMessageBoxTypeDef DisplayMessageBox OldMainTypeDef OldMain GetKernel32AddressTypeDef GetKernel32Address GetProcAddressCksumTypeDef GetProcAddressCksum LON ulBuildReferencesSize LON ulDisplayMessageBoxSize LON ulOldMainSize LON ulGetKernel32AddressSize LON ulGetProcAddressCksumSize e ej e e e Q Imported functions pointers LoadLibraryTypeDef LoadLibrary GetProcAddressTypeDef GetProcAddress sprintfTypeDef Sh iris MessageBoxTypeDef MessageBox Imported functions checksum ULONG ulLoadLibraryCksum ULONG ulGetProcAddressCksum ULONG ulsprintfCksum ULONG ulMessageBoxCksum GETADD DLL array DLL GetAddD11 NB OF IMPORTED DLLS O Strings szSTRING 01191 HAR szS
4. 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 adresse 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 canari 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 canaris avec ces donn es D s lors vous pouvez mettre disposition votre shellcode et la class library correspondante Une autre personne int ress e par votre d veloppement peut alors r cup rer votre shellcode et remplacer la librairie generate dll par d faut de WiShMaster par la v tre II peut alors personnaliser le shellcode sans avoir acc s au code source de votre programme puis en faire ce qu
5. 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 szFileName UINT uiValue 10 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation Deviendra BOOL MyFunc LPGLOBAL_DATA pGlobalData CHAR szFileName UINT uiValue Remarques e sila fonction prend d j le pointeur vers la structure globale en premier param tre l ajout n est pas effectu 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 le pointeur vers GLOBAL DATA une fonction dont le nom se termine par l un des suffixes suivants o Thread fonction correspondant un point d entr e de thread o Hook gt fonction de hook o RawFunction gt autres cas 3 34 Modification des fichiers sources appels de fonctions Que ce soit un appel de fonction interne ou externe tous les appels de fonctions sont transform s pour tre effectu s via le pointeur de fonction correspondant de GLOBAL DATA De plus si l appel correspond une fonction interne dont la d claration a t modifi e le pointeur vers la structure GLOBAL DATA
6. les unes apr s les autres en un seul click 6 1 2 R sultat de l analyse du code Cette fen tre int gre galement trois boutons sur la droite permettant de visualiser les r sultats de l tape d analyse 6 1 2 1 Fen tre lt Internal Functions Cette fen tre affiche la liste des fonctions internes d tect es W WiShMaster List of internal functions Name TypeDef BuildReferences typedef VOID BuildBeferencesT ypeDef VOID DisplayMessageBox typedef VOID DisplayMessageBoxT ypeDef CHAR szMsg DldMain typedef INT DldMainTypeDef LPGLOBAL DATA pGlobalD ata GetKemel324ddress typedef ULONG GetKemel32AddressTypeDef MOID BetProc amp ddressCksum typedef ULONG GetProc amp ddressCksumT ypeDef ULONG HMODULE LPVOID LPVOID Fig 11 Visualisation de la liste des fonctions internes Les boutons UP DOWN vous permettent de d finir l ordre dans lequel ces fonctions seront mises dans le shellcode Cette fonctionnalit a t ajout e car cet ordre est primordial lors de la cr ation des interfaces binaires pour les modules x90re s backdoors A priori vous n en aurez pas besoin La fonction BuildReferences doit rester la premi re 6 1 2 2 Fen tre Imported functions Cette fen tre regroupe la liste des fonctions import es W WiShMaster List of imported functions List of imported functions DII Function name Function typedef MessageBox user32 dll typedef int M
7. Pointeurs de fonctions internes Pointeurs de fonctions import es de caract res Donn es du programme d origine Donn es ajout es par WiShMaster Fig 2 Structure du shellcode 3 2 Etape 1 L analyse du code L op ration de shellcodisation commence par une analyse du code afin de rep rer Les fonctions internes Celles ci sont rep r es lors de leur d claration dans les fichiers cpp L expression r guli re utilis e est la suivante a zA Z0 9_ declspec naked a zA Z0 9_ Par exemple la d finition suivante sera rep r e BOOL MyFunc CHAR szFileName UINT uiValue Mais celle ci ne le sera pas BOOL MyFunc CHAR szFileName UINT uiValue 8 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation e Les fonctions import es Celles ci sont rep r es lors de leur appel dans les fichiers cpp L expression r guli re utilis e est la suivante a zA Z20 9 4 N Cette expression est tr s large car il faut tre s r de reconnaitre tous les appels WiShMaster s appuie ensuite sur une base contenant toutes les fonctions import es pour v rifier que la chaine correspond bien une fonction import e Cette expression va par exemple rep rer les appels strlen et atoi dans la ligne suivante i MyFunc szText strlen szText atoi szValu
8. Use a random key Advance XORI Activate Integrate step Fig 18 Wizard WiShMaster Personnalisation du projet 28 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation 8 1 4 Fin du wizard Le wizard est alors termin W x90re s WiShMaster wizard WisAMaster Congratulations x90re s project wizard completed successfully Click on Finish to end it Project skeleton will be created in D Mempmytests Fig 19 Wizard WiShMaster Fin de la configuration 82 Shellcodisation du programme squelette 8 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 suivante som D exe headers integration Le r pertoire int gration contient le mini programme dans lequel bin sera int gr le shellcode sous forme de tableau C 2 exe C3 headers lt Le s shellcode s sera crit sous forme de tableau C dans un fichier h D obj dans ce r pertoire headers C3 sources obj sources E 2 temp lt Le r pertoire temp contient la version patch e des sources du projet CD exe juste apr s la g n ration du squelette ce r pertoire est vide headers obj sources Fig 20 Arborescence cr e par le wizard 29 37 WiShM
9. XML regroupant le nom et le prototypage de toutes les fonctions import es Cette base doit donc tre compl t e au fur mesure de vos projets Actuellement elle contient d j un nombre relativement cons quent de fonctions Vous pouvez utiliser la fen tre Import functions database pour l diter W WiShMaster Dil name advapi32 dll advapi32 dll advapi32 dll advapi32 dll advapi32 dll kernel32 dll kemel32 dll kemel32 dll kemel32 dll kemel32 dll kernel32 dll kernel32 dll kernel32 dll kemel32 dll kernel32 dll kemnel32 dll kernel32 dll kemel32 dll kemel32 dll kemel32 dll kernel32 dll kemel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kemel32 dll kernel32 dll kemel32 dll kernel32 dll kernel32 dll kernel32 dll kemel32 dll kernel32 dll kemel32 dll kernel32 dll kemel32 dll kemel32 dll kemel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll kernel32 dll Import functions database Function name RegOpenKey RegQuer alue RegQuery4alueE z RegSetValueE RegCloseKey FindClose LoadLibrary DutputDebugString GetProc ddress VirtualQuery VirtualProtect VirtualFree GetCommandLine FreeLibrary GetModuleHandle WiiteFile ReadFile penMutes CreateMutex RieleaseSemaphore CreateSemaphore CreateE vent SetE vent FiesetE vent WaitForSingleDbject W aitForMultipleObjects ReleaseMutex CloseHandle SetFilePointer penProcess Virtual
10. ajouts de code se font l emplacement de balises que vous devez ajouter C est une modification 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 WISHMASTER ADD FIELDS doit tre ajout la fin de votre structure globale et marquera l ajout des nouveaux champs WISHMASTER INTERNAL FUNCTIONS fonctions internes EF sera remplac par les d finitions de pointeurs de WISHMASTER IMPORTED FUNCTIONS fonctions import es Typiquement la d finition de la structure globale YP ED EF sera remplac par les d finitions de pointeurs de typedef struct GLOBAL DATA char szText 6 GLOBAL DATA Deviendra WISHMASTER INTERNAL FUNCTIONS TYPEDE WISHMASTER IMPORTED FUNCTIONS TYPEDE typedef struct GLOBAL DATA 1 int char szText 6 WISHMASTER ADD FIELDS GLOBAL DATA 8 3 9 Modification des fichiers sources ajouts des fonctions d initialisation Le fichie
11. de Generate gt de proposer l utilisateur de g n rer simultan ment plusieurs backdoors avec des param tres diff rents L interface affich e doit permettre l utilisateur 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 shellcodes en appelant la fonction lt GetGeneratedShellcodeList gt de lt Generate gt qui retourne un tableau contenant les noms des shellcodes g n r s La class library actuelle de RConnect ne g re la g n ration que d une seule backdoor la fois Le code de lt GetGeneratedShellcodeList gt retourne donc simplement le nom d fini par l utilisateur dans un tableau return new string GenerateDataset BackDoorParamsRow generateDataset BackDoorParams Rows 0 szBackdoorName 3 7 Etape 6 des shellcodes L tape de consiste encoder les shellcodes avec un algorithme appliquant des op rations de type Deux algorithmes sont disponibles e Le premier applique simplement un avec une cl sur l int gralit du shellcode Cet algorithme est tr s simple mais il g n re un mauvais brouillage o DWORDxor i DWORDxor i 1 DWORD i DWORD i 1 SiDWORD i DWORD i 1 alors DWORDxor i DWORDxor li 1 e second algorithme comporte une boucle retroactive la cl de varie chaque it ration en f
12. de nombreux inconv nients le principal tant que le code C des fonctions inject es devait tre crit de mani re sp ciale pour g n rer un code binaire relocalisable J ai donc d cid d crire un outil annexe qui cr 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 WiShMaster 1 4 Rappel Principe de la shellcodisation par WiShMaster La shellcodisation effectu e par WiShMaster est d coup e en 7 tapes Diff rents flots d ex cutions peuvent tre Suivis en fonction du r sultat recherch Le flot le plus complet part d un ensemble de fichiers sources et produit un ex cutable contenant le shellcode sous forme d un tableau encod par une cl XOR Cet ex cutable va par exemple d chiffrer le shellcode puis transf rer l ex cution sur son premier octet Le point d entr e de WiShMaster est un ensemble de fichiers contenant du code C compilable c est dire pouvant produire un ex cutable par compilation 1 4 1 Etape 1 Analyse Cette premi re tape d analyse consiste parcourir 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 1 42 Etap
13. des fonctions import es A noter que si une fonction utilis e ne figure pas dans cette base la r f rence la fonction ne sera pas trait e et le shellcode risque de planter 24 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation Pour d tecter ces oublis vous pouvez cocher la case display warning de l tape ANALYSE WiShMaster vous affichera alors tous les l ments matchant l expression r guli re des appels de fonctions mais qui ne correspondent ni une fonction interne ni Une fonction import e connue dans la base 6 3 La fen tre lt Projet configuration gt Cette fen tre permet de modifier les diff rentes propri t s du projet W WiShMaster Project configuration Generalities Project Name test Projectid 0 Project type executable v Flow type From sources Path to project root directory Create environment Path to project root shellcode directory Path to shellcode directory object C temptestitemp obi Path to shellcode directory executable Debug message mode Print to kernel debugger Informations on code Main function name C Source code include a definition of a global data structure Global structure name Global variable name Skip keywords Shellcode functions Path to BuildReferences function C Memp W
14. diff rences notables sont e Le fichier lt structures prototype h gt contient la d finition d une structure globale de test WISHMASTER INTERNAL FUNCTIONS TYPEDEF WISHMASTER IMPORTED FUNCTIONS TYPEDEF typedef struct GLOBAL DATA abe Coine char szText 60 WISHMASTER ADD FIELDS GLOBAL DATA e Un fichier lt global data cpp gt contenant l initialisation de la structure est ajout include stdafx h include structures prototype h GLOBAL DATA GlobalData jJ 3E SU char szText 6 WISHMASTER SKIP STRINGS Le fichier structures_prototype h patch sera alors le suivant typedef struct _GLOBAL_DATA LPGLOBAL DATA Internal functions typedef typedef VOID BuildReferencesTypeDef VOID typedef VOID DisplayMessageBoxTypeDef LPGLOBAL DATA CHAR szMsg typedef INT WINAPI 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 VD JW eim F OS Giu V5 scs p typedef int WINAPI MessageBoxTypeDef HWND LPCSTR LPCSTR UINT typedef struct
15. e L criture de ces scripts peut s av rer relativement fastidieuse je vous conseille de vous appuyer au maximum sur les exemples fournis notamment dans RConnect ou sur les fichiers g n r s par le wizard 3 5 Etape 4 Extraction du shellcode L extraction des diff rentes parties du shellcode se fait 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 appuyant 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 sent e au d but de cette partie Comme indiqu ci dessus WiShMaster patche galement le DWORD Ox7a7a7a7a par la taille du code avant la structure globale et le DWORD 0x6a6a6a6a par celle du shellcode complet 3 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 particuli res Par exemple pour le cas d un code effectuant une connexion sur un serveur la structure GLOBAL 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 canari dans les sources puis de les rechercher et de les patcher lors de la g n ration par les valeurs d
16. est ajout en premier param tre MyFunc szText strlen szText Deviendra pGlobalData MyFunc pGlobalData szText pGlobalData gt strlen szText 3 3 5 Modification des fichiers sources r f rences aux cha nes de caract res Les r f rences aux chaines de caract res seront galement remplac es par le pointeur vers le champ correspondant dans la structure GLOBAL DATA iig wie wii e j arriya e Deviendra pGlobalData MyFunc pGlobalData pGlobalData szSTRING 0 pGlobalData strlen pGlobalData szSTRING 0 pGlobalData szSTRING 1 3 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 3 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 automatiquement construite et ajout e 11 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation 3 3 8 Modification des fichiers headers Principe des balises Certains
17. il d sire le xorer l int grer dans un ex cutable dans une page html contenant un exploit Il est important de noter que la partie est bien r alis e par cette seconde personne peut donc loisir soit accomplir un d chiffrement imm diat du shellcode soit introduire quantit de code pour par exemple d jouer les analyses antivirales par mulation Ce principe permet d obtenir une r elle s paration entre le coeur du programme le fonctionnel crit par la premi re personne et l enveloppe la partie encodage d codage le contenant crit par la seconde 19 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation 5 Installation de WiShMaster 5 1 Mise en place de l environnement WiShMaster L installation de WiShMaster consiste simplement d compresser l archive WiShMaster zip dans le r pertoire de votre choix 5 2 Mise en place de l environnement de compilation WiShMaster requiert les l ments suivants un syst me Windows comprenant le framework net version gt 1 1 e les outils permettant de compiler le code source o le compilateur de Microsoft Visual C 2005 qui peut tre t l charg gratuitement sur http msdn microsoft com vstudio express visualc download o l environnement SDK contenant toutes les librairies et headers qui peut tre t l charg gratuitement sur le site de microsoft e PERL pour pouvoir facilement crire des programmes analysan
18. la liste des chaines de caract res Edition de la liste de la base de donn es des fonctions import es Fen tre de configuration des options du projet Wizard WiShMaster Fen tre d accueil Wizard WiShMaster D finition des propri t s du projet Wizard WiShMaster Personnalisation du projet Wizard WiShMaster Fin de la configuration Arborescence cr e par le wizard Allure de la fen tre principale apr s la cr ation du squelette de projet Allure de la fen tre principale apr s la shellcodisation Fen tre affich e lors du lancement de l ex cutable issu de l int gration Fen tre des options du projet Message de debuggage affich dans le kernel debugger Seconde fen tre affich e lors du lancement de l ex cutable int gr 3 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation 1 Pr sentation de WiShMaster 11 Objectif du document Ce document s adresse aux personnes souhaitant utiliser WiShMaster dans le cadre de projets personnels Il a pour objectif de pr senter de mani re technique et d taill e le fonctionnement de cet outil afin de faciliter son utilisation II consid rera que vous avez lu l article pr sentant WiShMaster et la shellcodisation de RConnect disponible sur le site de SecuObs 1 et utilisera directement des principes introduits dans ce document sans revenir sur leur d finition par exemple la structure GLOBAL DATA
19. re assez fastidieuse est souvent beaucoup plus pratique de pouvoir afficher des traces de debuggage 7 2 Le m canisme impl ment dans WiShMaster WiShMaster impl mente un m canisme permettant de rapidement obtenir des traces de debuggage m me dans un shellcode inject dans un processus distant Dans un premier temps ajoutez votre projet les fichiers print debug msg cpp et print debug msg h disponibles par exemple dans larchive de RConnect Ces fichiers contiennent la d finition d une fonction PrintDebugMsg dont l objectif est de formater une chaine et des arguments puis de l afficher soit dans stdout soit dans le debugger kernel Son prototypage est similaire celui printf 120 eomsi 200 Ajoutez ensuite des traces de debuggage l appelant PrintDebugMsg Message de debuggage avec param tre x Oxdeadbabe Une combobox dans les propri t s du projet vous permet de choisir le type de debuggage que vous d sirez e Desactivate D sactive les traces e Print to stdout Active les traces et envoie la sortie vers stdout Print to kernel debugger Active les traces et envoie la sortie vers le debugger 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 caract res de debugga
20. sir es Cette op ration est bien s r fortement d pendante de la structure du shellcode Plut t que d crire un langage de d finition de structures permettant 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 Cette dll contient une classe Generate d rivant de System Windows Forms Form qui expose les fonctions suivantes 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 RConnect Generate Backdoors Parameters Backdoor Name RConneci Server IP 1 27 0 0 1 Server Port 80 Fig 7 Fen tre lt Generate gt de lt HConnect gt 16 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation Celle ci permet tout simp
21. ATA ulLoadAddress 0x7a7a7a7a 14 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation 3 3 10 2 La fonction GetKernel32Address Le prototype de GetKernel32Address est ULONG GetKernel32Address VOID Cette fonction ne prend aucun param tre et doit retourner l adresse de chargement kernel32 dll 3 3 10 3 La fonction GetProcAddressCksum Le prototype de GetProcAddressCksum est ULONG GetProcAddressCksum ULONG HMODULE LPVOID LPVOID Cette fonction prend en param tre Param Type Description 1 ULONG Checksum de la fonction rechercher HMODULE HMODULE retourn par LoadLibrary adresse de chargement de la librairie 2 3 LPVOID Pointeur vers LoadLibrary 4 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 GetProcAddressCksum va alors charger cette nouvelle libraire et effectuer la recherche de la fonction point e 3 3 10 4 Personnalisation des fonctions Ces trois fonctions sont plac es chacune dans un fichier texte s par dont le chemin est d fini au niveau des options du projet Vous pouvez donc les adapter aux besoins sp cifiques de votre application L archive de WiShMaster contient l origine plusieurs versio
22. DRSACrptcEntityBuilder CryptoE ntityBuilderNbin D ebugkentryp es Path to GetProc ddressCksum function E PROJETS BACKDOORS CiyptoEntityBuilder CryptoEntityBuilder bin Debug entiyp la r FireBreaker control Activate FireBreaker Path to FireBreaker code Add FireBreaker fields in GLOBAL structure r Compilation Fig 24 Fen tre des options du projet Changez le Debug message mode pour Print to kernel debugger et validez vos changements Relancez ensuite l int gralit des tapes d cochant fast et en cochant full rebuild La taille du shellcode g n r est alors plus lev e Cette augmentation est due l int gration des fonctions et des chaines de debuggage Lancez un outil affichant les logs kernel comme par exemple WinDbg et relancez l ex cutable dans le r pertoire integration Au niveau de l outil de debuggage vous verrez un affichage du type x Time Debug Print 0 0 00000000 3756 This string is send to debug output Temp value deadbabe Fig 25 Message de debuggage affich dans le kernel debugger 32 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation 8 4 Fichiers du projet WiShMaster sauve les donn es d un projet dans 5 fichiers XML Nom du fichier Description PROJECT Fichier principal ouvrir avec WiShMaster Contient toutes les options du projet PROJECT NAME import
23. Microsoft Visual Studio 8 Common NMDEN C NProgram Files Microsoft Visual Studio C NwINDO WSSsystem32 C WINDOWS NWIND WSSSystem32Nw bem INCLUDE C Program Files Microsoft Visual Studo 8WC Ninclude C NProgram Files Microsoft Visual Studio 8 Files Microsoft Platform SDK for Windows Server 2003 R2 include C Program Files Microsoft Visual Studio SXvC Wib C Program Files Microsoft Visual Studio 8 NVCSSPlatformSDKMlib C Program Files Microsoft Platform SDK for windows Server 2003 R2NMib Test configuration You should see an error missing source filename TEST WARNING lf you see an error ignoring unknown option G the disable GS box MUST be UNCHECKED Disable GS Fig 9 Fen tre de configuration de WiShMaster Normalement vous ne deviez pas avoir modifier les autres champs e WiShMaster tentera de remplir automatiquement les champs lt DevEnvDir gt et lt MSVCDir gt V rifiez cependant la coh rence avec votre installation 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 boite DevEnvDir 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 apparaitre le mess
24. TRING 1 58 HAR szSTRING 2 56 CMOS GLOBAL DATA Lors de l ex cution vous obtiendrez la premi 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 0 Fig 26 Seconde fen tre affich e lors du lancement de l ex cutable int gr 36 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation 10 R f rences 1 Article sur le site de SecuObs pr sentant WiShMaster http www secuobs com news 16092006 wishmaster shtml 37 37
25. age 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 gt cl Command line warning D4002 ignoring unknown option G 21 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation 6 L interface graphique de WiShMaster 6 1 Fen tre principale La fen tre principale de WiShMaster est la suivante W WiShMaster by x90re D MempWmytestumytest xml File Project Import functions Generation Help Shellcode creation steps Manual Step 1 Analyse files _anaLvse Step 2 Create environment create Step 3 Compile Step 4 Extract v Extract Step 5 Generate Step B shellcode x Step 7 Integrate v Options View Edit results display warning Internal functions fast copy Imported functions D fuli rebuild Strings D Fig 10 Fen tre principale de WiShMaster 6 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 colonn
26. amp llacE x Mirtual lloc WiiteProcessMemory CreateRiemoteThread RieadProcessMemory Sleep CreatePipe CreateProcess GetProcessHeap PeekWamedPipe GetE xitCodeProcess GetExitCodeThread GetCurrentProcess GetCurrentProcessld GetModuleFileN ame Fig 14 Function real name Reg penKey amp Reg uer alue RegSelValueE x RegCloseKey FindClose LoadLibrary DutputDebugString amp GetProc amp ddress VirtualQuery VirtualProtect VirtualFree GetCommandLine FreeLibrary GetModuleHandie WiiteFile ReadFile Openbutex CresteMutex ReleaseSemaphore CreateSemaphore CreateE vent SetEvent ResetE vent WaitForSingleObject WwaitForMultipleObjects ReleaseMutex CloseHandle SetFilePointer penProcess Virtual amp llocE x Virtual amp lloc WiiteProcessMemory CreateRemoteThread ReadProcessMemory Sleep CreatePipe CreateProcess GetProcessHeap PeekNamedPipe GetEsitCodeProcess GetExitCodeT hread GetCurentProcess GetCurrentProcessid GetModuleFileN ames La premi re colonne repr sente le nom de la dll La deuxi me est le nom de la fonction utilis e dans votre code La troisi me est le nom de la fonction dans la dll Par exemple CreateFile est en r alit CreateFileA La derni re repr sente le prototypage de la fonction TypeDef typedef LONG wINAPI RegOpenKesTypeDef HKEY LPCSTR PHKEY typedef LONG WINAPI FHegQuerValueTypeDef HKEY LPCSTR LPCSTR
27. aster by x90re Windows Shellcode Generator Manuel d utilisation 8 2 2 Ex cution de l analyse La fen tre principale de WiShMaster est alors la suivante W WiShMaster by x90re 0 xml File Project Import functions Generation Help Shellcode creation steps Step 1 Analyse files Create environment v CREATE Options View Edit results display warning fast copy Step 3 Compile 7 COMPILE D fuli rebuild Step 4 Extract Step 5 Generate GEHERATE Step 6 Xor shellcode v XOR E H H H H E i Step 7 Integrate v IHTEGRATE WARNING No internal functions in database Create environment desactivated Fig 21 Allure de la fen tre principale apr s la cr ation du squelette de projet 30 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation Appuyez sur START pour lancer l ex cution des diff rentes tapes W WiShMaster by x90re D Memplmytestimytest xml File Project Import functions Generation Help Shellcode creation steps Auto Step 1 Analyse files ANALYSE Step 2 Create environment iv CREATE Step 3 Compile COMPILE Step 4 Extract Step 5 Generate Step 6 Xor shellcode Step 7 Integrate INTEGRATE Options View Edit results display warning Internal functions fast copy Imported functions D fuii rebuild Strings GEHERATE m
28. e MyFunc ne sera en revanche pas reconnue comme une fonction import e car il s agit d une fonction interne Les cha nes de caract res Celles ci sont rep r es via le caract re lt gt WiShMaster n utilise pas une expression r guli re car il existe des cas particuliers la chaine peut elle m me contenir un caract re backslash Par exemple WiShMaster rep rera deux chaines diff rentes hello et il a dit Vj arriveV dans la ligne suivante isis uae Wine L llusi le mellg viil II peut arriver que votre code contienne des chaines de caract res dont WiShMaster ne doivent pas tenir compte Typiquement les chaines utilis es lors de l initialisation de l instance de la structure GLOBAL DATA En reprenant l exemple pr c dent GLOBAL DATA GlobalData 0 Jf ion Telle szText La cha ne hello sera reconnue et ajout e dans la partie Cha nes de caract res comme une cha ne normale Cet ajout est cependant totalement inutile puisque la cha ne r ellement utilis e est dans la partie Donn es initialis es de GLOBAL DATA Vous pouvez donc indiquez WiShMaster de ne pas tenir compte des chaines d tect es sur une ligne en ajoutant une balise WISHMASTER SKIP STRINGS GLOBAL DATA GlobalData 0 Z Cons helle szText WISHMASTER SKIP STRINGS 3 3 Etape 2 Cr ation d
29. e Options permet de modifier rapidement une caract ristique d une tape La checkbox display warning de ANALYSE indique WiShMaster d afficher tous les l ments matchant l expression r guli re des appels de fonctions mais qui ne correspondent ni une fonction interne ni une fonction import e connue dans la base voir ci dessous La checkbox fast copy de CREATE indique WiShMaster de ne copier un fichier que si la source est plus r cente que la destination La checkbox lt full rebuild gt de lt COMPILE gt indique WiShMaster d ajouter l argument lt CLEAN gt 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 22 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation Au lancement de WiShMaster l tat est checkbox fast copy coch e et full rebuild d coch e permettant ainsi de ne copier et de ne recompiler que les fichiers modifi s faut noter que cette configuration fonctionne bien si les modifications des fichiers sources sont limit es Si vous effectuez de grosses modifications ajout de fichiers de chaines 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
30. e 2 Create Cette deuxi me tape consiste cr er une copie de l arborescence des fichiers sources en modifiant le code pour que la compilation produise un code binaire relocalisable 1 4 3 Etape 3 Compile WiShMaster compile ensuite ces sources patch es afin de produire un ex cutable 4 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation 1 4 4 Etape 4 Extract Cette tape consiste extraire diff rentes parties de l ex cutable pr c demment g n r et les rassembler pour cr er une premi re version du shellcode 1 45 Etape 5 Generate L tape Generate consiste cr er plusieurs versions du shellcode en patchant certaines donn es de la structure GLOBAL DATA 1 4 6 Etape 6 Chacun des shellcodes g n r s va alors tre xor avec une cl diff rente 1 4 7 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 Le sch ma ci dessous r sume les l ments produits lors des diff rentes tapes 5 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation Sources patch es Ex cutable 2 CREATE 3 BUILD Patche les sources Com
31. e 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 18 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation 4 Les diff rents flots d ex cution 4 1 La d sactivation d tapes Tous les projets ne requi rent pas l ex cution des tapes de g n ration de et d int gration Il est donc possible de d sactiver celles dont vous n avez pas besoin Par exemple si vous souhaitez juste produire un shellcode vous pouvez vous arr ter apr s l tape d extraction 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 2 9 o S S A Exemple 2 S S 9 o R sultat S 25 lt O nuo S 1 Un contenant le shellcode xor et personnalis par lt generate gt 2 O O O O NIN O Un exe contenant le shellcode en clair et non personnalis 3 Un bin contenant le shelcode 4 N Un bin contenant le shellcode personnalis 4 2 Redistribuer un shellcode compil
32. edfunctions xml Contient la liste des fonctions import es PROJECT NAME internalfunctions xml Contient la liste des fonctions internes PROJECT NAME stringslist xml Contient la liste des chaines de caract res PROJECT NAME generation params xml Contient les donn es g n r es par la class library generate 8 5 Analyse du code Au niveau du code le seul point noter est le fichier structures prototype h qui contient WISHMASTER ADD GLOBAL DATA Comme d crit pr c demment au niveau du fichier patch on trouve la d finition de la structure globale typedef struct GLOBAL DATA typedef Internal functions typedef VOID BuildReferencesTypeDef LPGLOBAL DATA VOID typedef VOID typedef INT WINAPI OldMainTypeDef typedef ULONG Get typedef ULONG Get Imported functions typedef typedef HMODULE WI typedef FARPROC WI DisplayMessageBoxTypeDef Kernel32AddressTypeDef ProcAddressCksumTypeDef API LoadLibraryTypeDef API GetProcAddressTypeDef typedef int WINAPI define NB OF INTER define NB OF IMPOR define NB OF IMPOR Messag AL FUNCTIONS 5 ED DLLS 2 BoxTypeDef LPGLOBAL DATA C HAR szMsg LPGLOBAL DATA pGlobalData U HWND define NB OF INTERNAL FUNC Structure pour les dlls import es typedef struct ULONG ulNbOfF
33. essageBoxTypeDef HWND LPCSTR LPCSTR UINT LoadLibrary kernel32 dll typedef HMODULE wINAPI LoadLibrary T ypeDef LPCSTR GetProc ddress kernel32 dll typedef FARPROC wINAPI GetProc amp ddressTypeDef HMODLILE LPCSTR Fig 12 Visualisation de la liste des fonctions import es 6 1 2 3 Fen tre Strings Cette fen tre regroupe la liste des chaines de caract res W WiShMaster List of strings String Line that contains this string xS re s WiShMaster IMessageBox NULL szMsg x90re s WiShMaster MB OK This is a program skeleton generated by wWiShMaster wizard IDisplayMessageBoxs This is a program skeleton generated by WiShMaster wizard Fig 13 Visualisation de la liste des chaines de caract res 23 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation 6 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 configuration Project regroupe les actions sur le projet ouverture fermeture dition des pr f rences Import functions permet d afficher la fen tre de gestion des fonctions import es reconnues voir ci dessous e Generation gt permet d afficher la fen tre de la class library lt Generate gt 6 2 Fen tre Import functions database WiShMaster utilise une base de donn es stock e sous forme de fichier
34. ge 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 lt PRINT DEBUG MSG gt pass lors de la compilation au script batch Une valeur 0 indique que le debuggage doit tre d sactiv 1 il est redirig vers stdout et 2 vers le kernel debugger Ce param tre est transmis au makefile sous la forme du param tre PRINT DEBUG MSQ qui le transformera en une macro pour la compilation Le code de RConnect vous donnera un exemple d utilisation 26 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation 8 Cr ation d un squelette de projet sans structure globale 8 1 Cr ation du squelette avec le wizard 8 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 90 5 WiShMaster wizard DEAR WisAMaster Welcome to x90re s project wizard This wizard will help you to create a new project file Press Next to continue Fig 16 Wizard WiShMaster Fen tre d accueil 8 1 2 D finition des propri t s du projet En Sur Next vous passez l tape d finissant les propri t s du projet Le nom du projet qui d fi
35. gine le code est le suivant int main int argc char argv Fig 3 Cas point d entr e fonctionnel est main avant transformation Apr s transformation le flux d ex cution devient void BuildReferences void pGlobalData gt 0ldMain pGlobalData int OldMain LPGLOBAL DATA pGlobalData Ancienne fonction main Fig 4 Cas o point d entr e fonctionnel est main apr s transformation 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 int main int argc char argv DoAction 0 int DoAction int paraml Fig 5 Cas o point d entr e fonctionnel est une fonction interne avant transformation 13 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation Apr s transformation le flux d ex cution devient void BuildReferences void pGlobalData gt ExecuteBuffer pGlobalData 0 ExecuteBuffer LPGLOBAL DATA pGlobalData int paraml Ancienne fonction DoAction int OlMain LPGLOBAL DATA pGlobalData Ancienne fonction main Fig 6 Cas point d entr e fonctionnel est une fonction interne apr s transformation 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 p
36. iShMasterNentrypointhentrypoint general tst Path to GetKemel32Address function C MemptWwiS hMasterNentrypointfunction G etKemel32Address txt Path to GetProc amp ddressCksum function C MempNWiShMasterNentrypointhfunction GetProc amp ddressCksum tst FireBreaker control C Activate FireBreaker Path to FireBreaker code Compilation Fig 15 Fen tre de configuration des options du projet La liste en bas de cette fen tre vous permet de d finir la liste des fichiers du projet Pour ajouter de nouveaux fichiers faites un double click sur la colonne de droite Une fen tre vous permettra alors de choisir les fichiers Les types des fichiers seront automatiquement s lectionn s en fonction de l extension 6 4 La fonctionnalit lt FireBreaker gt Le principe de FireBreaker est d crit dans la seconde partie de l article sur le site de SecuObs 1 25 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation 7 Le d buggage du code shellcodis 7 1 De la n cessit de debugger l est tr s probable que vous ayez besoin de debugger les shellcodes que vous avez crits Mais comme l op ration de shellcodisation aura bris toutes les r f rences avec les ventuels fichiers de debuggage 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 technique ne r pond pas tous les besoins et s av
37. lement 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 1 0x0100007F ulServerAddr 0x5000 ulServerPort else ulServerAddr 0xbbbbbbbb ulServerPort endif Lors d une compilation manuelle MANUAL 1 l adresse IP sera fix e 127 0 0 1 et le port 80 permettant ainsi de tester la backdoor Lors d une compilation via WiShMaster MANUAL O l adresse IP et le port seront fix s aux valeurs canari 0xaaaaaaaa 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 szServerlIP GetAddressBytes 0xaa PrintData PrintMsg Error in generation failed to find port bytes PrintData MSG LEVEL INFO return false if PatchBuffer FindAndPatch bData ulServerPort Oxbb PrintData PrintMsg Error in generation failed to find port bytes PrintData MSG LEVEL INFO return false l est possible complexifiant un peu le code
38. les 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 gt et lt char szText hello gt vous avez probablement une d claration dans l un de vos fichiers cpp similaire int iCount 0 char szText hello void IncrementCounter void EG 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 h vous d clarez votre structure typedef struct _GLOBAL_DATA ie char szText 6 GLOBAL_DATA Puis dans le fichier C d origine vous instanciez cette structure globale et vous l initialisez GLOBAL_DATA GlobalData 0 ZY enu Telle szText void IncrementCounter void GlobalData iCount 7137 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation 3 Description d taill e de la shellcodisation Cette partie d crit de mani re technique chaque tape de la shellcodisation 3 1 Rappel Structure du shellcode g n r La structure du shellcode g n r est la suivante BuildReferences Fonction interne 1 Fonctions Fonction interne 2 internes Structure Donn es initialis es globale
39. nit notamment les noms de fichiers XML e L identifiant du projet pass en param tre la class library lt generate gt pour le cas o plusieurs projets utiliseraient la m me dll Vous pouvez le mettre 0 Le type de flux depuis les sources e Le type de projet laissez lt executable gt l autre option tant pour g n rer des modules pour lt x90re s backdoors e r pertoire racine 27 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation W x90re s WiShMaster wizard Project generalities Enter generalities about this project name type and root directory Enter project name mptest Enter project identifier 0 Flow type From sources Select type of project executable Project root directory This directory will contain directories sources and headers Project files will be saved here too D tempimytest TA Fig 17 Wizard WiShMaster D finition des propri t s du projet 8 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 Add a global structure Activate Generate step Activate XOR shellcode step XOR key Select type of key to use
40. ns de BuildReferences A titre d exemple le projet injecter utilise une version de BuildReferences prenant un param tre En revanche les noms de ces fonctions ne doivent pas tre chang s Il faut galement noter que si WiShMaster d couvre une fonction interne GetKernel32Address ou GetProcAddressCksum lors de l analyse des sources celle ci sera automatiquement utilis e la place de celle point e par le projet 34 Etape 3 Compilation du code Pour r aliser l tape de compilation WiShMaster lance simplement un batch sp cifi dans les options du projet en lui passant certains param tres e CLEAN gt si l utilisateur a coch la case lt full rebuild gt dans l interface principale e PRINT DEBUG MSG NUM gt avec NUM prenant la valeur o O si l utilisateur a choisi de d sactiver le debuggage lt Desactivate gt o disil utilisateur a choisi d afficher les messages de debuggage sur stdout lt Print to stdout gt o 2sSil tilisateur a choisi d afficher les messages de debuggage sur le debugger noyau lt Print to kernel debugger La description d taill e de l ajout de traces de d buggage sera faite ult rieurement e DISABLE GS 1 gt si l utilisateur a coch la case lt disable GS gt dans les propri t s de WiShMaster e MANUAL O gt pour que le script PERL sache qu il s agit d une compilation automatique par WiShMaster e les param tres indiqu s dans les options du projet L c
41. onction de la valeur du DWORD qui vient d tre chiffr Vous pouvez choisir l algorithme que vous souhaitez et sp cifier la cl ou demander WiShMaster d en g n rer une al atoirement 17 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation 3 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 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 3 9 Fonctionnement d taill conclusion La version actuelle de WiShMaster impose certaines contraintes sur l criture du code Certaines pourront 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 faciliter son utilisation il int gre un wizard qui vous permet de rapidement cr er un squelette de projet Vous n avez alors qu compl ter cette mini arborescence avec vos propres fichiers en adaptant le cod
42. pile les sources et ajoute la structure patch es 1 ANALYSE GLOBAL DATA Etablit la liste des r f rences 4 EXTRACT Extraction des fonctions et de GLOBAL DATA Key Shellcode 1 6 XOR 5 GENERATE Xor les diff rents Cr e diff rentes Shellcode 2 shellcodes versions du shellcode Key 7 INTEGRATE Int gre les shellcodes dans un programme Ex cutable 1 Ex cutable 2 Key Key Faire pE ume Shellcode 1 Shellcode 2 Fig 1 Principe de la shellcodisation effectu e par WiShMaster 6 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation 2 Les conventions d criture du code 21 Conventions sur la syntaxe du code A l origine WiShMaster a t d velopp pour shellcodiser les backdoors du projet x90re s backdoors L impl 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 l OS 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 comme le code source est analys suivant des expressions r guli res il doit suivre certaines conventions syntaxiques 22 Convention sur les variab
43. pour chaque fonction import e Le pointeur de fonction contiendra 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 lt GETADD DLL gt utilis pour charger les dlls n cessaires e liste des cha nes de caract res d tect es Par exemple si WiShMaster d tecte dans le code du programme contenant la structure GLOBAL DATA d crite ci dessus e fonction interne lt MyFunc gt e Des fonctions import es CreateFile kernel32 dll et strlen msvcrt dll e Deux cha nes de caract res lt Hello gt et lt toto gt La d claration de la structure sera compl t e et deviendra typedef struct GLOBAL DATA 1 char szText 6 Internal functions pointers MyFuncTypeDef MyFunc ULONG ulMyFuncSize Imported functions pointers CreateFileTypeDef CreateFile Imported functions checksum ULONG ulCreateFileCksum GETADD DLL array GETADD DLL GetAddDl11 NB OF IMPORTED DLLS Strings CHAR CHAR GLOBAL_DATA Remarque WiShMaster conserve galement la d finition de la structure d origine en la renommant ORIG_GLOBAL_DATA afin de pouvoir d terminer sa taille apr s la phase de compilation et extraire les donn es initialis es 3 3 3 Modification des fichiers sources
44. r 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 gt est 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 o 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 o 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 gt est une fonction r cup rant l adresse de chargement de lt kernel32 dll gt dans le processus courant partir du PEB e GetProcAddressCksum gt est 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 vide est ajout e est renomm e en OldMain et une fonction WinMain 12 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation Prenons un premier exemple o la fonction principale main est le point d entr e fonctionnel du shellcode d clar dans les options du projet A l ori
45. riture des l ments conduisant la compilation est de votre ressort mais vous pouvez vous appuyer sur le code fourni dans l outil e WiShMaster lance un batch lt build bat gt e batch ex cute un script PERL lt build pl gt e le script PERL analyse les param tres et ex cute un ou plusieurs lt nmake gt conduisant la compilation A noter que le passage par un script PERL permet d analyser les param tres de mani re beaucoup plus ais e qu en batch e lancement direct d un script PERL ne fonctionne pas e sortie standard des scripts est r cup r e et affich e dans la fen tre de log de WiShMaster L analyse des param tres dans les scripts fournis est la suivante e si le param tre lt CLEAN gt est d tect le script PERL effectue un lt nmake clean gt avant le lt nmake gt 15 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation e les valeurs de lt PRINT DEBUG MSG gt et lt MANUAL gt sont pass es en param tres du nmake de compilation e le makefile les transformera respectivement en macros lt PRINT DEBUG MSG gt et lt MANUAL gt et les passera en argument au compilateur option D Lorsque le script bat est lanc manuellement sans arguments le programme d origine est compil Lorsque le script bat est lanc par WiShMaster avec l argument lt MANUAL 0 gt la version patch e dans le r pertoire temp est compil
46. rogramme pour pouvoir extraire le code et les donn es partir du processus correspondant sans pour autant ex cuter les fonctions r elles du programme 3 3 10 D tails des fonctions d initialisation L archive de WiShMaster contient plusieurs versions de ces trois fonctions Il est bien s r possible de les adapter aux sp cificit s de votre application Voici quelques pr cisions sur leur fonctionnement 3 3 10 1 La fonction lt BuildReferences gt 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 0 00 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 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 canari sont galement patch es Le DWORD 0x7a7a7a7a gt est patch par la taille totale du code avant la structure globale Le DWORD gt 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 D
47. sa lecture est donc fortement conseill e avant de poursuivre celle de ce manuel 1 2 Principe de l outil WiShMaster est un outil permettant de g n rer des shellcodes pour Windows prend en entr e un ensemble de fichiers sources dont la compilation conduit la g n ration d un ex cutable et cr un shellcode c est dire un bloc d octets ex cutable relocalisable et sans aucune r f rence externe Si l on transfert l ex cution sur le premier octet du shellcode celui ci accomplira exactement les m mes op rations que le programme d origine 1 3 Origine du projet Dans le cadre d une tude sur les risques de compromission d un syst me d information d entreprise via l introduction d une backdoor sur son r seau interne j ai d velopp une backdoor appel e Parsifal qui s injecte et s ex cute en tant que thread dans tous les processus de l utilisateur Cette technique d injection de thread est extr mement puissante et ouvre de nombreuses possibilit s en contrepartie le code inject doit pouvoir s ex cuter dans un processus inconnu une adresse inconnue 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 commengait par allouer un buffer qu elle remplissait avec le code des diff rentes fonctions Elle injectait ensuite ce buffer dans les autres processus Cette architecture pr sentait
48. t les param tres Par exemple celui d ActiveState peut tre t l charg gratuitement sur http www activestate com Products ActivePerl 5 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 Warning Visual or SDK installation directory are not set Use Configuration dialog box F7 to configure them Fig 8 Fen tre d avertissement affich e lorsque la configuration est incompl te Une fois sur l interface principale de WiShMaster appuyez sur F7 pour afficher la boite de configuration et remplissez le chemin complet vers Visual C Visual installation directory et le SDK SDK installation directory 20 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation Par exemple pour une installation standard W WiShMaster Configuration Variables values Visual installation directory C Program Files Microsoft Visual Studio 8 Devenir C Program Files Microsoft Visual Studio SXCommon VIDE MSVCDir C Program Files Microsoft Visual Studio 8WWCN SDK installation directory C Program Files Microsoft Platform SDK for Windows Server 2003 R 24 PATH 4DevEnvDirs2MSVCDii bin INCLUDE ZMSVCDirz include zzMSVCDirzePlatformSDK include z SDKDirzNinclude LIB MS VCDirAAPlatformS DKNib S DKDirzNlib Current variables values PATH C Program Files
49. tre principale 22 6 2 Fen tre lt Import functions database gt 24 6 3 La fen tre Projet configuration 25 6 4 La fonctionnalit FireBreaker 25 7 Led buggage du code shellcodis 26 7 1 Dela n cessit de debugger 26 72 Le m canisme impl ment dans WiShMaster 26 8 Cr ation d un squelette de projet sans structure globale 27 8 1 Cr ation du squelette avec le wizard 27 8 2 Shellcodisation du programme squelette 29 8 8 Activation du debuggage 32 8 4 Fichiers du projet 33 8 5 Analyse du code 33 9 Cr ation d un squelette de projet avec structure globale 35 10 R f rences 37 2 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation Tables des figures Principe de la shellcodisation effectu e par WiShMaster Structure du shellcode Cas o point d entr e fonctionnel est main avant transformation Cas point d entr e fonctionnel est main apr s transformation Cas o point d entr e fonctionnel est une fonction interne avant transformation Cas point d entr e fonctionnel est une fonction interne apr s transformation Fen tre Generate de RConnect Fen tre d avertissement affich e lorsque la configuration est incompl te Fen tre de configuration de WiShMaster Fen tre principale de WiShMaster Visualisation de la liste des fonctions internes Visualisation de la liste des fonctions import es Visualisation de
50. typedef LONG wINAPI ReaQuer ValueE xTypeDef HKEY LPCSTR LPDWw typedef LONG WINAPI RegSetValueExTypeDef HKEY LPCSTR DWORD typedef LONG ReaCloseKeyTypeDef HKEY typedef BOOL FindCloseTypeDef HANDLE typedef HMODULE wINAPI LoadLibrary TypeDet LPCSTR typedef VOID DutputDebugStringTypeDef LPCSTR typedef FARPROC GetProc amp ddressTypeDef HMODULE EPCSTR typedef DWORD wWINAPI VirtualuerjT ypeDef LPCVDID PMEMORY_BASI typedef BOOL wINAPI virtualProtectT ypeDef LPVOID SIZE T DWORD P typedef DWORD wlNAPI VirtualFreeTypeDef LPVOID SIZE_T DWORD typedef LPSTR WINAFI GetCommandLineTypeDef VOID typedef BODL FreeLibrar T ypeDef HAODLILE typedef HMODULE wINAPI GetkoduleHandleT ypeDef LPCSTR typedef BOOL WINAPI writeFileTypeDef HANDLE LPCYOID DWORD LP typedef BOOL WINAPI FieadFileTypeDef HANDLE LPYOID DWORD LPD typedef HANDLE wWINAPI OpenMutexTypeDef DWORD BOOL LPCSTR typedef HANDLE CreateMutesTypeDef LPSECURITY ATTRIBUTE typedef BOOL ReleaseSemaphoreTypeDef HANDLE LONG LPLO typedef HANDLE CreateSemaphoreT ypeDef LPSECURITY_ATTAL typedef HANDLE CreateE ventTypeDef LPSECURITY_ATTRIBUTE typedef BOOL WINAPI SetE ypeDef H amp NDLE typedef BOOL ResetE ventTypeDef HANDLE typedef DWORD
51. u code 3 3 1 Sous arborescence cr e Le code est cr dans un sous r pertoire temp du r pertoire racine du projet Les chemins 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 lt create gt l arborescence monprojet sources file cpp monprojet headers file h monprojet makefile monprojet temp sources file cpp monprojet temp headers file h monprojet temp makefil 9 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation WiShMaster distingue trois types de fichiers Les headers h e Les sources cpp Les autres makefile Les modifications effectu es lors de la copie d un fichier d pendront de son type 3 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 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 fonction interne L entier contient la taille de la fonction afin de reconstruire ces r f rences de proche en proche e pointeur de fonction et un entier
52. u de l int gration un ex cutable mytest exe gt t cr dans le r pertoire lt D temp mytest integration exe gt Si vous le lancez il affichera la fen tre suivante x90re s WiShMaster This is a program skeleton generated by WiShMaster wizard Fig 23 Fen tre affich e lors du lancement de l ex cutable issu de l int gration 31 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation 8 3 Activation du debuggage Editez les propri t s du projet Ctrl E W WiShMaster Project configuration r Generalities Project Name mytest Project Id Project type executable v Flow type From sources v Path to project root directory D Memphmytest M Create environment Path to project root shellcode directory 10 Path to shellcode directory object Path to shellcode directory executable Debug message mode Desactivate v C Informations on code Main function name WinhMain Source code include definition of a global data structure Global structure name Global variable name 1 Skip keywords Shellcode functions Path to BuildFieferences function EPROJETSNBACKDODRSCryptoE riityBuilderCryptoE ntityBuilderNbin D ebughentryp a Path to GetKernel324ddress function EAPROJETSXBACKDO
53. unctions CHAR szDllName 20 GETADD DLL LPGETADD DLL Structure globale typedef struct GLOBAL DATA Internal functions pointers BuildReferencesTypeDef DisplayMessageBoxTypeDef OldMainTypeDef OldMain VOID LONG LPCSTR HMODULI LPCSTR IONS ALREADY DEFINED 0 BuildReferences DisplayMessageBox GetKernel32AddressTypeDef GetKernel32Address GetProcAddressCksumTypeDef GetProcAddressCksum Imported functions pointers ULONG ulBuildReferencesSize ULONG ulDisplayMessageBoxSize ULONG ulOldMainSize ULONG ulGetKernel32AddressSize ULONG ulGetProcAddressCksumSize LoadLibraryTypeDef LoadLibrary GetProcAddressTypeDef MessageBoxTypeDef MessageBox Imported functions checksum ULONG ulLoadLibraryCksum ULONG ulGetProcAddressCksum ULONG ulMessageBoxCksum GetProcAddress HMODULE an LPVOID LPVOID LPCSTR LPCSTR UINT 33 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation GETADD DLL array ETADD DLL GetAddD11 NB OF IMPORTED DLLS Q 7 Serings HAR esee 9r 439 5 CHAR yate TIS LIESS 9 CSS GLOBAL DATA LPGLOBAL DATA 34 37 WiShMaster by x90re Windows Shellcode Generator Manuel d utilisation 9 Cr ation d un squelette de projet avec structure globale La cr ation d un squelette avec structure globale est relativement similaire Les seules
54. ytest cpp Total buffer size stdafx cpp main cpp precedence sourcesimytest sourcesimytest sources mytest INFO Build successfull fSUSSSSSESSSSSS Starting step extract fSSSSSSSSSSSSSS Adding internal function BuildReferences bytes Adding internal function DisplayMessageBox bytes Adding internal function O0ldMain bytes Adding internal function GetKernel3Z2Address bytes Adding internal function GetProc ddressCksum bytes Adding global structure bytes cpp 44 warning C4101 pFunc2 unreferenced local variable cpp 233 warning C4102 LEndCopyDll unreferenced label cpp 233 warning 4102 LHandleForwarder unreferenced label bytes INFO Extraction successfull WARNING Xored shellcode not found Step Xor shellcode not complete HHLHGHHHHHHKHHH Starting step xor shellcode 4 9494949488844 INFO Shellcode D itempimytestitempiexeWmytest bin successfully INFO 11 shellcode successfully xored fdf SSSSSSSSSSfS Starting integration fffffffSgSSSSUSS D Xitempimytestiintegration build pl NAME mytest sources imain cppi29 warning C4554 lt lt check operator precedence for possible error use parentheses to clarify INFO Build successfull INFO 11 shellcode successfully integrated Fig 22 Allure de la fen tre principale apr s la shellcodisation Notez les tailles des diff rents l ments extraits qui sont affich es dans la fen tre de log A Piss

Download Pdf Manuals

image

Related Search

Related Contents

Instructions  PVI-6000-OUTD-IT rev1.2 30-04-09 - 4i-tech  Heidelberg CD51 f      Semantic Search Webparts 1.4 User Manual    dreamGEAR i.Sound Display Case  T887 Manual - HellermannTyton  ASSMANN Electronic DN-96004-1  

Copyright © All rights reserved.
Failed to retrieve file