Page 1 sur 1

Cauchemars de RAR bizarres

Publié : 22 févr. 2014 20:32
par ѠOOT
Bonjour,

Je prends quelques minutes pour vous raconter l'anecdote de la semaine et comme à l'habitude je vais aller à l'essentiel en vous passant certains détails. Le problème rencontré concernait un code hostile stocké arbitrairement dans un fichier au format RAR. J'ai donc re-créé un exemple inoffensif nommé mak.rar ( d4dbd148371d6012b2e83944f39187fda98eb931 ) afin que nous puissions étudier et manipuler sans danger.

unrar t mak.rar
"Enter password (will not be echoed) for mak.rar:"

L'option "t" permet de tester une archive. L'archive est protégée par un mot de passe.
N'étant pas en mesure de lister le contenu cela indique qu'elle est également cryptée.
Pour les utilisateurs Windows qui utilisent Winrar, le message est plus explicite:
"Entrer le mot de passe pour le fichier crypté:"

Le problème ? Personne ne connait le mot de passe.
Casser un mot de passe demande des ressources (temps, calculs, etc...)

Et le plus ahurissant, c'est que nous ne l'aurions jamais trouvé.
Sans certains éléments, nous n'aurions jamais compris comment reconstruire ce puzzle.
Il est temps de révéler le subterfuge: la structure du RAR n'est autre qu'un camouflage !

"L'entité" génère un faux entête de fichier RAR.
Les drapeaux suivants sont activés:
→ LOCKED
→ HEADERS_ENCRYPTED

D'où le message, archive verrouillée et cryptée.
Ensuite le "mystérieux contenu" est ajouté.
Puis les CRC sont recalculés.

L'exemple inoffensif mak.rar que j'ai fabriqué est extrêmement simple afin que ça soit à la portée du quidam moyen mais le fichier que nous avons observé était OMG... sophistiqué ^^

→ "lirar.py" est un bout de python rédigé à l'arrache qui permet de lire le contenu de l'exemple "mak.rar" ; J'utilise "seek" pour me positionner à l'offset 14h car le block MARKER + le block ARCHIVE du format de fichier RAR font 20 bytes.

Code : Tout sélectionner

#!/usr/bin/env python
import base64,zlib
rar=open('mak.rar','rb')
rar.seek(20)
print base64.b32decode(zlib.decompress(rar.read()))
rar.close()
python lirar.py > mak.mp3

Ou pour écouter directement...
./lirar.py | mplayer -

La morale de l'histoire c'est qu'avant de bourinner en force brute, on a le droit de se concerter entre "amis" et d'utiliser le cluster de neurones disponibles.

Re: Cauchemars de RAR bizarres

Publié : 24 févr. 2014 09:19
par Malekal_morte
Si je comprends bien, c'est un "faux" RAR qui se comporte comme tel en affichant un message "blalba verrouille" qui peux permettre de stocker du code malicieux et être executé comme tu le fais avec ton script python ?

Re: Cauchemars de RAR bizarres

Publié : 25 févr. 2014 01:03
par ѠOOT
Bonjour,

Tu peux voir ainsi la méthode utilisée, sous sa forme la plus simple.