ESET Nod32 Antivirus | Antispyware | Console d administration
Chercher :
Newsletter :  

Sponsors :

Revues :
- Presse
- Presse FR
- Vidéos
- Twitter
- Secuobs




Stoppez les fuites de donnees ! DeviceLock

Sommaires :
- Tendances
- Failles
- Virus
- Concours
- Reportages
- Acteurs
- Outils
- Breves
- Infrastructures
- Livres
- Tutoriels
- Interviews
- Podcasts
- Communiques
- USBsploit
- Commentaires


Revue Presse:
- Tous
- Francophone
- Par mot clé
- Par site
- Le tagwall


Top bi-hebdo:
- Ensemble
- Articles
- Revue
- Videos
- Twitter
- Auteurs


Articles :
- Par mot clé
- Par auteur
- Par organisme
- Le tagwall


Videos :
- Toutes
- Par mot clé
- Par site
- Le tagwall


Twitter :
- Tous
- Par mot clé
- Par compte
- Le tagwall


Commentaires :
- Breves
- Virus
- Failles
- Outils
- Tutoriels
- Tendances
- Acteurs
- Reportages
- Infrastructures
- Interviews
- Concours
- Livres
- Communiques


RSS/XML :
- Articles
- Commentaires
- Revue
- Revue FR
- Videos
- Twitter


RSS SecuObs :
- sécurité
- exploit
- windows
- microsoft
- attaque
- réseau


RSS Revue :
- security
- microsoft
- windows
- hacker
- attack
- network


RSS Videos :
- security
- metasploit
- biomet
- biometric
- windows
- botnet


RSS Twitter :
- security
- linux
- botnet
- attack
- metasploit
- cisco


RSS Comments :
- Breves
- Virus
- Failles
- Outils
- Tutoriels
- Tendances
- Acteurs
- Reportages
- Infrastructures
- Interviews
- Concours
- Livres
- Communiques


RSS OPML :
- Français
- International









Abonnez vous � Nessus Professional Feed !


Revue de presse francophone :
- Hugh Njemanze et Jean-Charles Barbou, HP France Enterprise View vers l'interopérabilité des produits de sécurité
- OSX.Flashback How to Turn Your Botnet into
- Thieves in the Temple Android.Opfake Makes Another Run
- CERTA-2012-AVI-275 Vulnérabilité dans Opera 14 mai 2012
- CERTA-2012-AVI-276 Vulnérabilité dans IBM Rational ClearQuest 14 mai 2012
- CERTA-2012-AVI-277 Vulnérabilité dans OpenSSL 15 mai 2012
- CERTA-2012-AVI-278 Vulnérabilités dans Sympa 16 mai 2012
- CERTA-2012-AVI-279 Multiples vulnérabilités dans Google Chrome 16 mai 2012
- CERTA-2012-AVI-280 Vulnérabilités dans SPIP 16 mai 2012
- CERTA-2012-AVI-281 Vulnérabilité dans Socat 16 mai 2012
- GHANA Cybercriminalité L heure par excellence des fraudeurs repérée
- Pourquoi Facebook et Google pourraient disparaitre en 2017
- Qui pour remplacer les chefs de la DCRI et de la DGSE
- Les liens entre Google et la NSA peuvent rester secrets
- Comment les parents peuvent-ils aider leurs enfants à naviguer sur Internet en toute sérénité

Dernier articles de SecuObs :
- EMET 3.0 met l'accent sur la configuration, les notifications et le déploiement au sein des réseaux d'entreprise
- Nouveau firmware 2.0.0 disponible pour le point d'accès malicieux WiFi Pineapple MarK IV
- Après la version Mac de DNSCrypt en décembre dernier, la version Windows enfin disponible
- ZERO DAY un documentaire sur les côtés obscurs de l'Internet
- Shellcoding de fichiers PE via un script Piew, une seule détection avec VirusTotal
- Vmware ESX et ESXI, élévation de privilèges, Déni de service et exécution de code arbitraire
- Samba 3.4.x à 3.6.4, accès propriétaires à des données éventuellement sensibles
- Pas de correctif prévu de la 8i à la 11g R2 contre Oracle TNS Poison
- Une belle faille dans le système de paiements sans contact
- Les dérives illicites de l’intelligence économique

Revue de presse internationale :
- Facebook Takes Aim at Cross-Browser LilyJade Worm
- Android security Protection of Java and native apps
- Undetectable Rootkit - Csaba Barta on Hacker Halted
- No Web Security Advanced Cross Site Scripting Techniques
- Reverse engineering techniques to find security bugs
- PHP Tutorials Security - Session Hijacking
- PHP Tutorials Security - SQL Injection
- PHP Tutorials Security - Cookies
- Building Custom Disassemblers
- Intro to Olly and Olly Settings
- Intro to Ida disassembler
- From the mail bag free APO FPO shipping
- The real business of the DIY movement
- UK Police Roll Out On-the-Spot Mobile Data Extraction System
- INTERVIEW Robert Clarke on legal aspects of cyber espionage
Abonnez vous � Nessus Professional Feed !

Annuaire des videos
- Pen testing practice in a box How to assemble a virtual network
- How to Exploit the Blind SQL Injection Vulnerability in DVWA
- Biometric registration
- Oblivion Lockpicking
- APRS reception with Funcube Dongle and Gqrx
- Broadcast FM reception with Funcube Dongle and Gqrx
- Draw Something Cheat wmv
- New Electro House Mix 2011
- DEFCON 13 Top Ten Legal Issues in Computer Security
- DEFCON 13 Credit Cards Everything You have Ever Wanted to Know
- Elcomsoft advanced office recovery download
- Exploiting Symbian 25C3
- DEFCON 18 Exploitation on ARM Technique and Bypassing Defense Mechanisms 1 3
- Vulnserver test
- PDFStreamDumper pageData decodeURL

Revue Twitter
- @OK_Kat22 Desactiva el firewall de nuestro producto para entrar en Internet. Ponemos copia a @PandaTechSup para que te ayuden. Gracias!
- New Nessus Feature Added: CSV Export (Update your plugins to use this feature!)
- @samaiorca if you have PGP, sure :)
- RT @Carlos_Perez: @samaiorca @pauldotcom the treason that a PDF file can be encrypted is because the format support it, CSV is just a te ...
- Report Analyzes Concerns, Business Impact of DDoS Attacks #ddos #security #netsec
- Our own @marcmaiffret presented at #ISSA today If it's a Linux flaw, your phone is directly threatened via @CSOonline
- Maiffret: If it's a Linux flaw, your phone is directly threatened
- NEW: Cyber spies exploiting Java, Flash flaws
- Google Releases Chrome 19, Fixes More Than 20 Bugs via @threatpost
- RT @kees_cook: A write up on the USB stick I took with me to UDS:

Mini-Tagwall
Revue de presse : security, microsoft, windows, hacker, attack, network, vulnerability, google, exploit, malware, internet, remote, iphone

+ de mots clés pour la revue de presse

Annuaires des videos : security, metasploit, biomet, biometric, windows, botnet, defcon, password, vmware, tutorial, exploit, conference, crypt

+ de mots clés pour les videos

Revue Twitter : security, linux, botnet, attack, metasploit, cisco, defcon, phish, exploit, google, inject, server, firewall

+ de mots clés pour la revue Twitter

Top bi-hebdo des articles de SecuObs
- ZERO DAY un documentaire sur les côtés obscurs de l'Internet
- Vmware ESX et ESXI, élévation de privilèges, Déni de service et exécution de code arbitraire
- Shellcoding de fichiers PE via un script Piew, une seule détection avec VirusTotal
- Après la version Mac de DNSCrypt en décembre dernier, la version Windows enfin disponible
- Une belle faille dans le système de paiements sans contact
- Pas de correctif prévu de la 8i à la 11g R2 contre Oracle TNS Poison
- Samba 3.4.x à 3.6.4, accès propriétaires à des données éventuellement sensibles
- La sécurité des clés USB mise à mal par USBDUMPER
- Nouveau firmware 2.0.0 disponible pour le point d'accès malicieux WiFi Pineapple MarK IV
- [Ettercap – Partie 1] Introduction et rappels

Top bi-hebdo de la revue de presse
- zaberg.exe
- iLivid Download Manager
- Hacker steals one million user logins from YouPorn website
- web2net.exe
- CVE-2012-1847
- Detect and Remove DarkComet RAT Malware used by Syrian Government
- taskhost.exe, viewDrive.exe
- CVE-2012-0184
- Hackito Ergo Sum, le cri du hacker dans la nuit des TIC 1
- Intelligence économique ou intelligence de l économie

Top bi-hebdo de l'annuaire des videos
- Shellcode Generator for Windows
- Defcon 19 Olivier Bilodeau PacketFence The Open Source Nac What Weve Done In The Last
- Maltego tutorials the complete and official set
- How to setup openVPN on ipad iphone ipod touch
- EvilGrade or how to falsify WinUpdates and deliver your Meterpreter
- pfSense Quick Look Firewall Content Filter Block Porn Web Proxy Cache
- Tutorial: Installing VMWARE Player and Running Ubuntu As a ...
- BlackShades HTTP Botnet Instalation Blackshades Tweaks
- How to patch in ollydbg
- How to install GNURADIO on Ubuntu 10 04 4 LTS Lucid Lynx

Top bi-hebdo de la revue Twitter
- List of regrets for 2012: Unable to attend Notacon / No hugs from the con that hugs you.
- @michael_keen @Wh1t3Rabbit @christianve Again after lunch with the cloud pedantry. #CloudDiet
- @biosshadow @kriggins @wimremes @diami03 I see a new DefCon contest starting up - Get a pic of Him Smiling. He could have an entourage
- Utilize a set of management processes and management tools that spans on-prem, private, and public cloud environments. #Convcloud #HP
- @Wh1t3Rabbit @michael_keen @ITtechExec Long term value shift: #InfoSec folks say no, IT shifts to public cloud, then #InfoSec folks go away.
- RT @hushedfeet: You down with BGP? - just too much. Thx @jwgoerlich
- Anyone besides me having issues with directed load balancing and the Cisco RV042?
- RT @ekampf: OSX is for building websites, Linux is for running them, Windows is for testing IE
- @lbhuston Wireshark monitoring the USB bus? Fun, No?
- @Zap0tek v0.3-cde; Ubuntu 10.4.3 when running ./arachni I get ./arachni: 3: ../cde-exec: not found ; now trying on a new VM through gem

Top des articles les plus commentés
- [Metasploit 2.x – Partie 1] Introduction et présentation
- Microsoft !Exploitable un nouvel outil gratuit pour aider les développeurs à évaluer automatiquement les risques
- Webshag, un outil d'audit de serveur web
- Les navigateurs internet, des mini-systèmes d’exploitation hors de contrôle ?
- Yellowsn0w un utilitaire de déblocage SIM pour le firmware 2.2 des Iphone 3G
- CAINE un Live[CD|USB] pour faciliter la recherche légale de preuves numériques de compromission
- Nessus 4.0 placé sous le signe de la performance, de l'unification et de la personnalisation
- [Renforcement des fonctions de sécurité du noyau Linux – Partie 1] Présentation
- [IDS Snort Windows – Partie 1] Introduction aux IDS et à SNORT
- Origami pour forger, analyser et manipuler des fichiers PDF malicieux

Tutoriels

English version with Google Translate

[WiShMaster - Partie 1] Introduction à l'écriture de shellcodes en C

Par Benjamin Caillat, Mastère Spécialisé Sécurité ESIEA
Le 16/09/2006


Résumé : Les ressources pour les shellcodes, en assembleur, sont légions sur le net ; l’objectif est içi de montrer les problématiques liées à l'écriture de code en C et leur compilation dans le but d'en extraire un shellcode (complexe) depuis le binaire généré. - Lire l'article



Le web recèle maintenant de nombreuses ressources permettant d’obtenir assez rapidement un shellcode.

L’outil Metasploit ( lien ), par exemple, contient une base impressionnante de 75 shellcodes pour différentes plateformes directement utilisables. Une simple recherche sur google permet également de récupérer une liste conséquente de documents, d’articles et de codes commentés offrant une bonne base à la création d’un shellcode.

Ces différents éléments sont généralement orientés vers l’écriture en assembleur de shellcodes de taille très réduite exécutant des opérations relativement simples : ajout d’un utilisateur, écoute sur un port, reverse connect, …

Cependant, il existe de nombreux cas nécessitant des shellcodes effectuant des opérations beaucoup plus complexes. Par exemple, lors d’une exploitation entièrement en mémoire, un premier shellcode de taille très réduite exécuté via une faille pourra effectuer le téléchargement en mémoire d’un second shellcode offrant des fonctionnalités avancées.

Ou encore, lors du développement d’une application utilisant des techniques d’injection de thread.
La question se pose alors : comment obtenir de tels shellcodes ? Du fait de leur complexité, leur écriture directement en assembleur peut s’avérer relativement longue et fastidieuse.

Il serait beaucoup plus pratique d’écrire un code en C, de le compiler et d’extraire le shellcode du binaire généré. L’objectif de ce dossier est de montrer les problématiques liées à cette approche, d’introduire un exemple de solution, puis de présenter un développement personnel générant des shellcodes à partir de code source C. Par la suite, nous nous placerons dans le cas de Windows.


Principe de l’écriture de shellcodes en C


Analyse du code assembleur généré par les compilateurs


Analysons dans un premier temps le binaire généré par la compilation d’un programme basique affichant le message « Hello world » dans une boite de message et appelant une fonction interne « MyFunc » :


void MyFunc(int a)
{
printf("%d", a);
}

int _tmain(int argc, _TCHAR* argv[])
{
MessageBox(NULL, "Hello world", "Hello world", MB_OK);
MyFunc(7);

return 0;
}



La compilation sous Windows conduit à la génération d’un exécutable au format PE constitué de quelques entêtes contenant des informations sur le fichier et de plusieurs sections contenant le code à exécuter, les données initialisées et celles non-initialisées – désignées dans la suite par données (non) initialisées – et d’autres informations utilisées par Windows lors du chargement de l’exécutable (table d’importation, …)

De manière très schématique, l’exécutable produit a la structure suivante :






La section « .text » contiendra notamment le code des fonctions « main » et « MyFunc », la section « .rdata » la chaîne « Hello world » et la table d’importation. Le compilateur utilisé est celui fourni en standard dans la suite Visual Studio, en activant l’optimisation de taille (option /O1).

Analysons maintenant le code assembleur généré.


MessageBox(NULL, "Hello world", "Hello world", MB_OK);
00401012 6A 00 push 0
00401014 B8 00614000 mov eax,offset string "Hello world" (406100h)
00401019 50 push eax
0040101A 50 push eax
0040101B 6A 00 push 0
0040101D FF15 D4604000 call dword ptr [__imp__MessageBoxA@16 (4060D4h)]
MyFunc(7);
00401023 6A 07 push 7
00401025 E8 D6FFFFFF call MyFunc (401000h)
0040102A 59 pop ecx



Plusieurs remarques peuvent être faites sur ce code :

- Dans la deuxième instruction, nous trouvons la valeur 406100h qui correspond à l’adresse de la chaîne « Hello world », codée « en dur »,

- L’appel à MessageBoxA utilise un call à l’adresse contenue dans l’entrée « __imp__MessageBoxA » de la table d’importation, une table de pointeurs de fonctions remplie par le loader de Windows lors de la création du processus :


004060D4 77D504EA 00000000 00000000 00000000
004060E4 44FFD423 00000000 00000002 00000082



La fonction MessageBoxA se trouve réellement en 0x77D504EA :


77D504EA 8BFF mov edi,edi
77D504EC 55 push ebp
77D504ED 8BEC mov ebp,esp
77D504EF 833D BC04D777 cmp dword ptr ds:[77d704bc],0



- L’appel à la fonction MyFunc est basé sur un adressage relatif : La valeur 0xFFFFFFD6 représente la différence entre l’adresse de la fonction appelée (401000h) et l’adresse de la prochaine instruction (40102Ah) : 401000h-40102Ah = 0xFFFFFFD6.


Premier essai de shellcode

Imaginons que nous formions un buffer constitué du code de la fonction « main » suivi de celui de « MyFunc » :







Supposons maintenant que nous injections ce bloc dans un processus quelconque à une adresse quelconque et que nous transférions l’exécution dessus.

Dans l’espace mémoire de ce processus, l’adresse 406100h correspondra à des données tout autres que la chaîne « Hello world » ou même à une zone mémoire non allouée.

De même, l’adresse 4060D4h ne contiendra sûrement pas l’adresse de MessageBoxA ; le call conduira donc à une adresse arbitraire.






Il faut de plus noter qu’il est tout à fait possible que la librairie partagée user32.dll, contenant la fonction MessagBoxA, ne soit pas chargée dans ce processus.

Au niveau de l’appel de la fonction interne, la situation n’est guère meilleure. En effet la valeur de l’adressage relatif a été calculée par le compilateur pour un agencement très précis des fonctions.

Lors de l’exécution du programme d’origine, l’espace mémoire a l’allure suivante :






Cet agencement a cependant été modifié lors de la formation de notre « shellcode ». Le saut relatif conduira alors lui aussi à des instructions inconnues :






Une telle exécution conduira par conséquent à un résultat indéterminé ou à un plantage du processus.

Le code binaire généré par la compilation d’un code C « normal » ne peut donc être directement extrait et utilisé comme shellcode.


Ecriture de code C produisant un shellcode

Trois types d’opérations conduisent à la génération d’un code binaire non relocalisable et non autonome :

- Les références aux données (non)initialisées qui contiennent une adresse en « dur »,
- Les appels de fonctions internes, qui contiennent une adresse relative,
- Les appels aux fonctions importées, qui contiennent une adresse absolue représentant le pointeur de fonction dans la table d’importation.

Une solution possible pour éviter ces valeurs fixes est d’utiliser une structure contenant des pointeurs vers les fonctions internes/importées et toutes les données (non)initialisées. Cette structure, appelée dans la suite GLOBAL_DATA, serait par exemple ajoutée à la fin du shellcode.

Les appels de fonctions seraient alors effectués via les pointeurs de fonctions et les références aux données (non) initialisées porteraient sur les champs de cette structure.

En reprenant notre exemple de code, la structure GLOBAL_DATA serait typiquement :






Au niveau du code la déclaration peut être par exemple :


typedef INT (*MessageBoxATypeDef) (HWND, CHAR *, CHAR *, UINT);
typedef INT (*printfTypeDef) (CHAR *, ...);
typedef VOID (*MyFuncTypeDef) (INT);

typedef struct __GLOBAL_DATA
{
MessageBoxATypeDef MessageBoxA;
printfTypeDef printf;
MyFuncTypeDef MyFunc;
CHAR szMsg[12];
} GLOBAL_DATA, * LPGLOBAL_DATA;



Le code :


MessageBox(NULL, "Hello world", "Hello world", MB_OK);
MyFunc(7);



Devient alors :


pGlobalData->MessageBoxA(NULL, pGlobalData->szMsg, pGlobalData->szMsg, MB_OK);
pGlobalData->MyFunc(7);



Après compilation, nous obtenons :


pGlobalData->MessageBoxA(NULL, pGlobalData->szMsg, pGlobalData->szMsg, MB_OK);
00401001 A1 C0864000 mov eax,dword ptr [pGlobalData (4086C0h)]
00401006 8D48 0C lea ecx,[eax+0Ch]
00401009 6A 00 push 0
0040100B 51 push ecx
0040100C 51 push ecx
0040100D 6A 00 push 0
0040100F FF10 call dword ptr [eax]
pGlobalData->MyFunc(7);
00401011 A1 C0864000 mov eax,dword ptr [pGlobalData (4086C0h)]
00401016 6A 07 push 7
00401018 FF50 08 call dword ptr [eax+8]
0040101B 83C4 14 add esp,14h



Nous constatons que toutes les références sont basées sur pGlobalData. Ce code devient donc relocalisable et sans référence externe (puisque la structure GLOBAL_DATA fait partie du shellcode).

Cette technique impose cependant plusieurs contraintes :

- Tout d’abord, le shellcode doit avant tout pouvoir retrouver l’adresse de la structure GLOBAL_DATA puis initialiser les champs correspondant aux pointeurs de fonctions,

- Ensuite, l’écriture du code s’avère relativement fastidieuse : l’utilisation d’une fonction importée nécessite la déclaration d’un nouveau type, l’ajout du pointeur dans la structure GLOBAL_DATA et la modification du mécanisme d’initialisation pour éventuellement charger la dll et retrouver l’adresse de la fonction réelle,

- L’ajout d’une chaîne de caractères requiert de calculer sa longueur puis de déclarer un tableau de « char » dans la structure GLOBAL_DATA de la taille adéquate. Cette opération devient particulièrement longue lors de l’ajout de traces de debuggage,

- Enfin il est important de noter qu’une ligne de code ne respectant pas ces règles ne produira aucune erreur à la compilation. En revanche le code binaire généré contiendra une référence non relocalisable qui conduira à un plantage lors de l’exécution et à de longues séances de debuggage.

L’écriture de shellcodes pour Windows par cette solution semble donc techniquement possible, mais reste une opération relativement délicate et fastidieuse.

Autres ressources dans ce même dossier :

[WiShMaster - Partie 2] Principe de shellcodisation avec WiShMaster (1) - lien

[WiShMaster - Partie 3] Principe de shellcodisation avec WiShMaster (2) - lien

[WiShMaster - Partie 4] Principe et Fonctionnement - RConnect/WiShMaster Vs firewalls personnels (1) - lien

[WiShMaster - Partie 5] Principe et Fontionnement - RConnect/WiShMaster Vs firewalls personnels (2) - lien

[WiShMaster - Partie 6] Principe et Fonctionnement - RConnect/WiShMaster Vs firewalls personnels (3) - lien

[WiShMaster - Partie 7] Résultat de RConnect avec des firewalls personnels et conclusion - lien




- Article suivant : [WiShMaster - partie 2] Principe de shellcodisation avec WiShMaster (1)
- Article précédent : Axman, un nouveau fuzzer pour les ActiveX
- Article suivant dans la catégorie Tutoriels : [WiShMaster - partie 2] Principe de shellcodisation avec WiShMaster (1)
- Article précédent dans la catégorie Tutoriels : [Blink - partie 5] Scanner de vulnérabilités et conclusions du dossier

Les derniers commentaires publiés pour cet article:
- Post Exploitation Shellbag `ing ...
- simple-shellcode-generator.py ...
- ESRT @xsploitedsec - Learning Assembly Through Writing Shellcode ...
- ESRT @ChrisJohnRiley - Suggested Reading DEP Enforcing Shellcode ...
- ESRT @BorjaMerino @radareorg: Nice talk on analyzing shellcodes with r2 - by @vext01 ...

Les derniers commentaires de la catégorie Tutoriels:
- UPDATE Snort 2.9.1.1 ...
- Apache Issues Patch To Stop Reverse-Proxy Bypass Attack ...
- ESRT @HackerTheDude @r0bertmart1nez @xanda @morenops - Kernel hacking the BSD way, new post ...
- ESRT @room362 - The Dirty Little Secrets They Didn't Teach You In Pentesting Class ...
- ESRT @jcran @dkarg - Metasploit Payloads VS Libemu - Alienvault Labs ...

Les derniers articles de la catégorie Tutoriels :
- PktAnon un framework pour l anonymat des traces PCAP
- [NessusWX – Partie 2] Audits et conclusion
- [NessusWX – Partie 1] Introduction, installation et configuration
- [IDS Snort Windows – Partie 4] Conclusion et webographie
- [IDS Snort Windows – Partie 3] Exemple de fichier de configuration
- [IDS Snort Windows – Partie 2] Installation et configuration
- [IDS Snort Windows – Partie 1] Introduction aux IDS et à SNORT
- [Sécurité et PHP - Partie 5] Astuces
- [Sécurité et PHP - Partie 4] Remote PHP Vulnerabilty Scanner
- [Sécurité et PHP - Partie 3] Les failles PHP




SecuToolBox :

Mini-Tagwall des articles publiés sur SecuObs :

Mini-Tagwall de l'annuaire video :

Mini-Tagwall des articles de la revue de presse :

Mini-Tagwall des Tweets de la revue Twitter :