unix4fun

Aller au contenu | Aller au menu | Aller à la recherche

samedi 15 septembre 2012

Et voici MoisiFS !

Salut les gens !

Oui oui, vous l'aurez deviné, je présente (façon de parler) ici un truc que je viens de coder : un filesystem FUSE au-dessus des fichiers au format ELF.

Bon alors là, tout de suite, logiquement vous me dites "euh ok c'est bien gentil ton truc mais ça sert à quoi ?", ce à quoi je réponds "rien !". Plus sérieusement, ça sert à se faire un peu la main sur FUSE (donc vous pouvez regarder le code pour vous faire une idée, j'ose espérer qu'il n'est pas trop cracra). Ça peut également servir à des fins pédagogiques : voir la structure d'un fichier ELF, tout ça...

Bon, le but avoué, c'est qu'à terme, on puisse modifier un binaire, ou carrément un processus en cours via le point de montage. Par exemple en faisant un truc du genre :


echo 0x424242 > /mnt/elf/entrypoint
sed -i "s:generic_func:myhook_func:g" /mnt/elf/symbols

Ou autres trucs du genre ! Amusant non ? Non ? Bon.. ok... j'retourne coder d'autres crottes en silence...

Sinon pour l'instant on peut juste faire 2-3 trucs en read-only:

  • monter un binaire sur disque ou un process en cours d'exécution (expérimental, tout ça...)

$ elfs /usr/bin/screen /mnt/elf
ou
$ sudo elfs -p $(pidof screen) /mnt/elf

  • lister les lib (répertoire /mnt/elf/libs/)

$ ls -l /mnt/elf/libs
total 0
-rwxrwxrwx 0 root root  9 1970-01-01 01:00 libc.so.6
-rwxrwxrwx 0 root root  9 1970-01-01 01:00 libm.so.6
-rwxrwxrwx 0 root root 11 1970-01-01 01:00 libX11.so.6
-rwxrwxrwx 0 root root 11 1970-01-01 01:00 libXaw.so.7
-rwxrwxrwx 0 root root 11 1970-01-01 01:00 libXft.so.2
-rwxrwxrwx 0 root root 15 1970-01-01 01:00 libxkbfile.so.1
-rwxrwxrwx 0 root root 11 1970-01-01 01:00 libXmu.so.6
-rwxrwxrwx 0 root root 15 1970-01-01 01:00 libXrender.so.1
-rwxrwxrwx 0 root root 10 1970-01-01 01:00 libXt.so.6

  • visualiser le header ELF à-la readelf -h (fichier /mnt/elf/info)

$ cat /mnt/elf/info
Ident:                             7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
Version:                           1
Class:                             64
Type:                              EXEC (Executable file)
Version:                           1
ELF Header size:                   64 bytes
Entry point:                       0x402550
Program Header offset:             64 bytes
Program Header entry size:         56 bytes
Number of Program Header entries:  9
Section Header offset:             40768 bytes
Section Header entry size:         64 bytes
Number of Section Header entries:  28
SH string table index:             27

  • lister les sections, dans /mnt/elf/sections : bss, data, symtab, dynsym, etc

$ ls -l /mnt/elf/sections/
total 0
drw------- 1 root root 0 1970-01-01 01:00 bss
drw------- 1 root root 0 1970-01-01 01:00 ctors
drw------- 1 root root 0 1970-01-01 01:00 data
drw------- 1 root root 0 1970-01-01 01:00 dtors
drw------- 1 root root 0 1970-01-01 01:00 dynamic
dr-------- 1 root root 0 1970-01-01 01:00 dynstr
dr-------- 1 root root 0 1970-01-01 01:00 dynsym
[...]

  • lister les symboles dans /mnt/elf/sections/symtab et /mnt/elf/sections/dynsym

$ ls -l /mnt/elf/sections/dynsym/|tail -5
d--------- 1 root root 0 1970-01-01 01:00 XtStrings
d--------- 1 root root 0 1970-01-01 01:00 XtWidgetToApplicationContext
d--------- 1 root root 0 1970-01-01 01:00 XtWindow
d--------- 1 root root 0 1970-01-01 01:00 XtWindowOfObject
d--------- 1 root root 0 1970-01-01 01:00 XUnionRectWithRegion

  • pour chaque symbole, lire ses infos (STT_FUNC, etc) et son code, au format binaire ou asm (code.bin et code.asm)... mieux vaut que le binaire soit compilé en debug, ou du moins avec les symboles, et non stripé, sinon vous allez vous retrouvez en galère d'infos

$ ls -l /mnt/elf/sections/symtab/dup_regex_free/
total 0
---------- 0 root root 363 1970-01-01 01:00 code.asm
---------- 0 root root  78 1970-01-01 01:00 code.bin
---------- 0 root root  69 1970-01-01 01:00 info

$ cat /mnt/elf/sections/symtab/dup_regex_free/code.asm
push rbp
mov rbp, rsp
sub rsp, 0x10
mov [rbp-0x8], rdi
mov rax, [rbp-0x8]
mov rax, [rax+0x48]
test rax, rax
jz 0x35
mov rax, [rbp-0x8]
mov rax, [rax+0x48]
mov rdi, rax
call dword 0xfffffd9c
mov rax, [rbp-0x8]
mov qword [rax+0x48], 0x0
mov rax, [rbp-0x8]
mov eax, [rax+0x50]
test eax, eax
jz 0x4c
mov rax, [rbp-0x8]
mov rdi, rax
call dword 0xfffffeac
leave 
ret 

Ouala pour l'instant c'est tout....

J'essaie d'ajouter des trucs quand j'ai le temps mais bon, d'une part j'suis pas mal occupé à faire des trucs pas intéressants, et en plus je code comme une buse et à la lenteur d'un cloporte arthritique, c'est pas gagné...

Le code : c'est par ici !

Bref, see ya dudes!

Ah j'oubliais un truc important : c'est Linux-only... hey ouais, j'ai pas trouvé de truc plus malin que checker /proc/pid/exe pour avoir l'adresse de mapping du binaire depuis le PID. On me souffle dans l'oreille de faire des trucs sioux avec ptrace() + les registres, qui donnent un emplacement dans le code, puis checker en arrière les adresses modulo _sysconf(_SC_PAGESIZE) pour essayer de retomber sur les 4 bytes ELF_MAGIC du header. Plus tard plus tard... déjà on va essayer de faire en sorte que ça SIGSEGV pas trop :P

EDIT: hop, apparemment maintenant ça compile/tourne sous freebsd (j'ai pas pu tester mais le bon sbz m'a envoyé un patch qui fait le taff)

mercredi 16 février 2011

mirrroiiirr, mon bon mirrroir, donne moi la clef de ce routeur!

Un document marrant, une analyze du recovery des clef WEP qui sont generees a partir d'un algo "secret" mais en fonction de parametre public comme la MAC.

C'est marrant a lire: http://websec.ca/blog/view/mac2wepkey_huawei

enjoy!

vendredi 21 août 2009

et si pour cette fin de vacances, on explorait à l'envers l'univers des binaires

L'été sera chaud, l'été sera chaud, tellement chaud qu'on va se rappeler le kit de survie de l'unxien pour réaliser l'exploration de binaire. So, re en veux-tu, en voilà.

On commence par les trucs de bases gdb, objdump, readelf, elfdump, etc puis on s'attadera sur une suite ddd (le front end à gdb), kcachegrind (utile pour recomposer les call graphs), biew, xxd, od, hexedit (pour l'édition hexadécimale) et pour finir sur l'outil radare qui fait tout à la fois avec même des possiblités de scripting.

Et puis ici, une petite liste sympa des opcodes des caractères imprimables x86 et x64. Ah au fait un concept intéressant c'est les WAF, ca se passe ici.

A plus, en tongue sur la plage ;)

y a pas de driver, mgrlgmrlb que faire salete de $#@!$#@!

wai toujours pareil, un type (poilu) il s'ennuie et il a un clavier drole, mais qui ne marche que sous win32, alors il se dit bon je vais reverser ce $#@!$#@! de driver win32 et faire un driver open avec... gentil et poilu le monsieur, il explique ce qu il a fait ici:

comme quoi c'est accessible a n'importe qui, meme a des tubbes comme moi... nom de dieu!$#@!$@! :)

jeudi 7 mai 2009

DOS 1.0 et le reversing du dimanche matin!

Le soleil vient de se lever,

Encore une belle journée,

et il va bientôt arriver,

l'ami Ricoré !

Tuluuuuulululululutulutuut

Un joli debut de post d'un type sympa qui reverse des programmes "pour le plaisir" le dimanche!
Marrant a lire, sympa pour demarrer son p'tit bout d'OS dans son coin, c'est un peu comme deterrer des momies on apprends pleins de choses!

mardi 5 mai 2009

le botnet qui boite!

Ca pourrait etre un WEF, mais on est pas en week end alors ca sera juste un lien, un paper sympathique d'une equipe de recherche qui a "takeover" un botnet, marrant a lire!

ca se passe ici.

++

jeudi 26 février 2009

Confi! confi! confipote!

Conficker est un worm recent, il n'est pas aussi "Stealth" que son confrere (qui n'est pas vraiment un confrere mais bon... comme j'ai qu'un panier y a tout dedans) rustock.C mais il fait deja de belles choses sympathiques.

tout ca est analyse la: http://mtc.sri.com/Conficker/

merci dave pour le lien!

mardi 2 décembre 2008

Quand on est stupide comme moi...

Je cherchais a comprendre des choses, jusque la rien de surprenant, j'ai commence a matter comment je pourrais differencier certains pattern d'autres, au sein d'un meme fichier.

C'est un probleme "classique", je sais!, vous avez une reponse, j'imagine bien (au pire commentez), mais comme je suis un peu stupide, j'essaye de comprendre.

Alors en posant la question autour de moi, une des reponses m'a intrigue, c'est: "mesure l'entropie!"

Wai alors pour la definition, je dois vous avouer, apres qqes debats et discussions sur la definition de l'entropie, il y en a qqes unes, voir meme pleins, ca depend des donnees a analyser, de la taille de la lune, de la couleur de la farine apres une journee au soleil, etc.. bref (allez voir wikipedia, theorie de l'information blablabla)...

Mais surtout aujourd'hui on m'a parle d'un outil "stan" qui semblerait pourrait donner l'illustration d'une (parmis d'autres) reponse a mes questions, alors je matte et je fais un test tout bete :

$ ./stan -b test.txt.gz
General statistics for the stream, bytes 75
   Arithmetic mean:       101.786667  ~  0x65(e)
   Median:                115.000000  ~  0x73(s)
   Deviation:              69.466979  ~  0x45(E)
   Chi-Square test:       520.023529
   Entropy per byte:        5.241939
   Correlation co.:         0.390945
[...]

VS

$ ./stan -b testrnd
General statistics for the stream, bytes 75
   Arithmetic mean:       113.720000  ~  0x71(q)
   Median:                106.000000  ~  0x6a(j)
   Deviation:              74.741610  ~  0x4a(J)
   Chi-Square test:       205.423529
   Entropy per byte:        5.925420
   Correlation co.:        -0.148000
[...]

Et on observe qqes "debut" de difference... c'est marrant, maintenant faut essayer de comprendre... quand on est stupide comme moi...

$ vim stan.c bits.c pattern.c stats.c
[...]

mercredi 2 juillet 2008

Linux, Cisco, Poils!

C'est peut etre "vieux" (y'en a qui aiment dire ca le plus souvent possible pour bien souligner qu'il sont tres contemporains), en tout cas, moi je connaissais pas et je trouve ca fun, fendart meme, mouahhahah j'en ris :)

uClinux sur du cisco muah!

Y a des gens qui commencent des trucs sexy, je suis sur qu'il y a ou va y avoir une suite c'est pas possible! ca date de 2001! (je faisais des avions en papier en disant que j'etais trop fort a cet epoque).

Et puis y a ca aussi.

have fun..

mardi 26 février 2008

convi debug disass et consorts..

Prrrrt,

Je viens de decouvrir ce projet en lisant un forum convivial

http://radare.nopcode.org/

Une suite de tools autour d'un editeur hexa avance, pour faire du disass, du tracing etc... il est meme capable de bosser sur du java bytecode et/ou des format PE.

Enfin voila marrant, je regarde et je teste pour le moment..

mardi 20 novembre 2007

IDA!

Wai y a du freeware et ca fonctionne sous WINE les mecs.. :)

hop hop on recup le bon warez free legit, tooo legit, too legit to quit!!

par ici le bon w-a-r-e-z

jeudi 11 octobre 2007

IDA, Hexblog

Le seul logiciel qui m'a fait garder un Windows est IDA Pro de DataRescue. Il est inégalé. En cherchant les nouvelles fonctionnalités apportées par les versions 5.x je suis tombé sur le Hexblog "about IDA pro, decompilation, programming, binary program analysis, information security", le blog d'Ilfalk, principal développeur du projet. Donc, dans les nouveautés de la 5.x, il y a notamment la décompilation et les graphs. Que du bonheur.

mercredi 19 septembre 2007

uninformed #8 out!

Au sommaire de uninformed #8 :

  • Covert Communications : Real-time Steganography with RTP
  • Engineering in Reverse : PatchGuard Reloaded: A Brief Analysis of PatchGuard Version 3
  • Exploitation Technology : Getting out of Jail: Escaping Internet Explorer Protected Mode, OS X Kernel-mode Exploitation in a Weekend
  • Rootkits : A Catalog of Windows Local Kernel-mode Backdoors
  • Static Analysis : Generalizing Data Flow Information

mardi 11 septembre 2007

reverse == marrant !

À lire !!$#@#@!

vendredi 7 septembre 2007

Week-end food #3

Comme Mr week-end food est en vacance je lui pique la vedette.

Les choix de la semaine pour le week-end food, deux petits PDFs par forcément simples (en tout cas pour moi qui n'est pas une lumière, mais je vais me les lire ce week-end et "tenter" de comprendre).

Retenus :

Bon app' !