Disclaimer:
Cet article est donné à but informatif. Les informations
que vous y trouverez
sont données sans aucune garantie et il est possible qu'il
contienne des erreurs. N'oubliez
pas que le détournement des moyens de protection
utilisées dans les consoles sont légaux dans le cas
où ils n'utilisent aucun logiciel, outils ou code soumis
à
copyright et que leur utilisation est faîte dans un cadre
légal. C'est le cas ici où l'exploit 007 (ou autre) peut
servir
à installer une distribution Linux sur sa XBox sans puce.
Introduction:
Cet article passe en revue les méthodes mises au point
permettant de contourner les protections de sa console de jeux sans
puce. Seules les méthodes utilisant des problèmes de
sécurité applicatifs seront analysées ici. En
effet, depuis la
découverte d'un trou de
sécurité dans le module de sauvegarde du jeux XBox
007: Agent Under Fire, de nombreux
autres exploits sont sortis permettant entre
autre de booter des isos Gamecube via une faille dans le jeux Phantasy
Star Online et d'executer des programmes PS2 stockés sur carte
mémoire via un trou de sécurité dans le module de
compatibilité des jeux Psone de la Playstation 2.
1) Mars 2003: La première sauvegarde corrompue

C'est le 29 mars 2003 qu'une team utilisant le pseudo Free-X poste un
message sur les forums de xboxhackers.net où elle explique
comment
booter n'importe quel executable xbe non signé sans puce. Pour
ça, ils fournissent le code d'une sauvegarde corrompue du jeux
007:Agent Under Fire. La
manipulation consiste (en gros) à copier la sauvegarde et
le programme à executer sur le disque
dur XBox, de lancer le jeux Agent 007, et enfin
de charger la sauvegarde corrompue. Une fois la sauvegarde
chargée l'executable se lance... Si vous connaissiez cette
méthode, vous vous êtes peut être déjà
demandé comment une telle manipulation était possible.
C'est ce que je vais tenter de vous expliquer dans les lignes qui
suivent.
2) Buffers Overflows: présentation
La technique expliquée plus haut ne marche que sur le jeux
Agent007. C'est donc grâce à ce jeux que ce hacker a
réussi a lancer des executables non signés. C'est en
effet dans le module de sauvegarde de ce jeux qu'il existe un trou de
sécurité bien connu des spécialistes de la
sécurité informatique, et qui répond au nom de
buffer overflow. Les failles de
type buffer overflow permettent entre
autre de faire executer du code sur le système visé, avec
les privilèges de l'application exploitée.
Pour vous expliquer grossièrement le fonctionnement du buffer
overflow, considérez le programme C suivant (je
n'entrerais pas dans les détails techniques d'exploitation dans
cet article,
tout simplement car je n'en ai pas les compétences et que ce
site n'est pas un site de sécurité informatique):
void main(int argc, char * argv[])
{
char chaine[20];
if(argc>0)
{
remplir_buffer(chaine,argv[1]);
printf("L'argument est: %s\n",chaine);
}
}
void remplir_buffer(char * string1, char * string2)
{
strcpy(string1,string2);
}
Le premier argument passé au programme est copié dans le
tableau de caractères chaine. Vous aurez remarqué que la
taille de ce tableau est de 20 caractères. Que se passe t-il si
je passe un argument de plus de 20 caractères à ce
programme? Sous Linux vous aurez droit à un joli "Segmentation
Fault" dans la plupart des cas. En fait la fonction strcpy n'effectue
aucune vérification quant à la taille du buffer de
destination. Si la chaîne de caractères à stocker
est plus longue que le buffer de destination, la fonction strcpy va
continuer de copier les caractères dans la mémoire
à la suite de l'espace mémoire réservé pour
le buffer de destination. Des données essentielles à la
bonne continuation du programme risquent donc d'être
écrasées par les données saisies !
Des techniques d'exploitation ont été mises au point dans
le but de tirer profit de ce problème. En effet, parmi les
données que l'on peut écraser en mémoire avec
cette technique, il en est une qui est particulièrement
interessante. Il s'agit de la copie en mémoire du registre
processeur EIP (Extended instruction Pointer), copie effectuée
lors de l'appel d'une
fonction. Voyez un registre comme une zone mémoire
stockant des données, située dans le processeur, et dont
l'accès en lecture et en écriture est extremement rapide.
Le registre EIP contient ce que l'on appelle l'adresse de retour d'une
fonction.
L'adresse de retour est en fait l'adresse à laquelle le
programme doit continuer son execution une fois que la fonction qui est
en train de s'executer est terminée: dans ce cas l'execution du
programme doit reprendre juste après l'appel de la fonction. On
a vu precedemment qu'il était possible d'écrire (et
d'effacer par là même) des
données en mémoire via un débordement de buffer.
En cherchant à réécrire l'adresse de retour
stockée en mémoire, on peut arriver à faire
continuer l'execution d'un programme
où bon nous semble!
En pratique, on s'arrange pour que l'adresse
de retour réécrite pointe vers le début de la
chaine passée en argument (en général), et que
cette chaine contienne des
instructions directement compréhensibles par le processeur (on
parle souvent de shellcode car les buffers overflow sont frequemment
utilisés pour donner une invite de commande à
l'attaquant, mais ils
peuvent être utilisés pour d'autres types d'actions comme
on va le voir pour les consoles de jeux).
Historiquement, la première grosse exploitation connue de ce
type de faille remonte à la diffusion du vers de Moris en 1988.
Il faut savoir que les vers infectant les systèmes
d'exploitation de Microsoft (Blaster, etc,...) exploitent pratiquement
tous des failles de type buffer overflow.
3) Méthode de protection des executables XBox
Voici une brève introduction à
la méthode de protection des executables XBox employée
par Microsoft. En fait, tous les jeux produits par les
sociétés de développement doivent être
envoyés à Microsoft qui va "signer" les
executables. Signer l'executable veut en fait dire que Microsoft va
apposer une marque sur le fichier en question. Cette marque est
générée grâce à ce que l'on appelle
une clef privé et dépend du fichier à signer. La
clé privé de Micro$oft est ultra-secrète et la
posséder permettrait de signer soi-même ses executables et
donc de lancer n'importe quel programme XBox de la même
façon qu'un jeux original!
La création de cette fameuse signature est basée sur
l'alogrithme RSA. La signature de microsoft est vérifiée
dans la XBox à l'aide d'une clef appelée clef publique,
chargée en mémoire dans la console. Pour
déterminer la clef privé de Microsoft, il faudrait
factoriser en produit de nombres premiers la clef publique, ce qui
necessiterait en pratique une énorme puissance de calcul (la
clef publique n'a pas été choisie au hasard)... Mais
si la clef publique était modifiée directement en
mémoire de façon à ce qu'elle soit très
facilement factorisable, il ne serait pas dur de déterminer une
clef privé et de resigner un executable... C'est ce qui a
été fait dans le hack 007 à l'aide d'un buffer
overflow.
4) Buffer overflow dans le module de gestion des sauvegardes de
007:
Agent Under Fire
Dans le jeux 007 : Agent Under Fire, il existe un problème de
type buffer
overflow dans le module de sauvegarde. En fait la faille semble
être présente dans la fonction réalisant la copie
en mémoire du nom du profil à qui appartient la
sauvegarde. Le programme executé par le processeur suite
à l'exploitation de la faille via la sauvegarde hackée va
réécrire la clef publique de la XBox en mémoire de
telle façon qu'elle soit très facilement factorisable. Il
faut ensuite récupérer la clef privé
correspondante (connue sous le nom de la clef habibi ;) et resigner
l'executable. Ainsi il est possible de lancer Linux version XBox ou
tout autre programme sans puce...
5) Les autres failles découvertes dans la XBox
Depuis la découverte de la team Free-X, d'autres
problèmes ont été
trouvés dans différents jeux et dans le dashboard
d'origine de la console:
- Jeux Splinter Cell et Mechassault
- Le 4 juillet 2003: BOF trouvé dans le module de chargement des
polices du dashboard XBox (Exploit Bert et Ernie)
- BOF trouvé dans le module audio du dashboard XBox
Il existe peut être d'autres problèmes de
sécurité trouvés ne figurant pas dans la liste
ci-dessus.
Toutes ces failles permettent d'executer des xbe non signés et
des packs sont apparus qui flashent même le bios de la console
en utilisant l'exploit. Plus besoin de puce pour modifier sa console
à long terme.
6) La Playstation 2 : l'exploit de Marcus R. Brown (PS1DRV HACK)
Le 15 août 2003, Marcus R. Brown, sur son site
http://www.0xd6.org/, annonce la "PS2 Independance". Un exploit est mis
en ligne permettant de modifier la séquence de démarrage
de la console. La faille exploitée est un buffer overflow dans
la fonction de lecture du fichier TITLE.DB du driver PS1 (PS1DRV) de la
Playstation 2. La mise en oeuvre de l'exploit est simple:
- Récupérer un jeux psone
- Patcher le fichier TITLE.DB à l'aide de Titleman avec l'ID de
son jeux psone
- Faire l'image du fichier TITLE.DB et des fichiers de l'exploit puis
graver comme une image PS2
- Booter sur ce CD avec une méthode de swap : l'exploit
s'installe alors automatiquement
- Redémarrer la console et insérer le jeux psone
Liens à visiter pour plus d'infos:
- Flasher son bios XBox sans puce:
Phoenix
Bios Loader
- Article de référence sur les buffers overflow :
Smashing
The Stack For Fun And Profit
- Analyse technique de l'exploit 007:
Technical
Analysis of 007: Agent Under Fire save game hack
- Analyse technique de l'exploit "Bert & Ernie" :
Technical
analyses of Free-X’s “Bert &
Ernie” exploit
- Page de Marcus R. Brown :
PS2 Independance
- gcdev.com :
Le Hack Gamecube PSO avec
PSO Loader
- Liste des exploits XBox:
XBox-Scene