Challenge SSTIC 2015

Challenge SSTIC 2015

Millescamps Auteur :

Damien

R?f?rence : OPPIDA/DOC/2015/INT/716/1.0

17/04/2015

Challenge SSTIC 2015

Table des mati?res

Table des mati?res

1

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3

2

Prologue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

2.1 Outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

2.2 Inspection du syst?me de chier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

2.2.1 Montage du disque . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

2.2.2 Recherche des chiers eac?s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4

3

USB Rubber Ducky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

3.1 Outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

3.2 D?codeur Rubber Ducky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

3.3 En r?sum? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6

4

OpenArena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7

4.1 Outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7

4.2 Contenu de l'archive r?cup?r?e au stage pr?c?dent . . . . . . . . . . . . . . . . . . . . . .

7

4.3 Analyse du contenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7

4.3.1 Analyse de la carte OpenArena . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7

4.4 Le jeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8

4.5 La clef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8

4.6 D?chirement du chier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

9

5

Paint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

5.1 Outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

5.2 Contenu de l'archive r?cup?r?e au stage pr?c?dent . . . . . . . . . . . . . . . . . . . . . . 10

5.3 Analyse du contenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

5.4 Analyse du chier PCAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

5.5 Reconstruction de l'image Paint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

5.6 Calcul de la clef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

5.7 D?chirement du chier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

6

JSFuck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

6.1 Outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

6.2 Contenu de l'archive r?cup?r?e au stage pr?c?dent . . . . . . . . . . . . . . . . . . . . . . 14

6.3 Analyse du contenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

6.4 La m?thode d'obfuscation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

6.5 Analyse du constructeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

6.6 Extraction du script JS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

6.7 Calcul de la clef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

6.7.1 Generation de User-Agent pouvant provenir de Firefox . . . . . . . . . . . . . . . . 19

6.7.2 R?cup?ration du vecteur d'initialisation et de la clef . . . . . . . . . . . . . . . . . 20

6.8 D?chirement des donn?es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

7

I love ST20 architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

7.1 Outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

7.2 Documents de r?f?rence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

7.3 Contenu de l'archive r?cup?r?e au stage pr?c?dent . . . . . . . . . . . . . . . . . . . . . . 22

7.4 Analyse du contenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

7.5 Analyse du binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

7.5.1 Identication du jeu d'instruction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

7.5.2 R?cup?ration du chier chir? et format de la sortie . . . . . . . . . . . . . . . . . 24

7.6 ST20 Embedded Toolset R2.3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

7.6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

7.6.2 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

7.6.3 Analyse dynamique du code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

7.6.4 D?sassemblage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

7.7 Analyse dynamique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

7.8 Extraction des programmes des transputeurs . . . . . . . . . . . . . . . . . . . . . . . . . 34

7.9 R?tro-ing?nierie du code des transputeurs . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

7.9.1 Transputeur 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

7.9.2 Transputeurs 1, 2 et 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

7.9.3 Transputeur 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

OPPIDA/DOC/2015/INT/716/1.0

1 / 48

Challenge SSTIC 2015

Table des mati?res

7.9.4 Transputeur 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

7.9.5 Transputeur 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

7.9.6 Transputeur 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

7.9.7 Transputeur 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

7.9.8 Transputeur 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

7.9.9 Transputeur 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

7.9.10 Transputeurs 11 et 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

7.10 R?cup?ration de la clef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

7.11 D?chirement des donn?es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

8

?pilogue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

8.1 Outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

8.2 congratulations.jpg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

8.3 congratulations.png . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

8.4 congratulations.ti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

8.5 congratulations.gif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

OPPIDA/DOC/2015/INT/716/1.0

2 / 48

Challenge SSTIC 2015

1 INTRODUCTION

1 Introduction

Le d? consiste ? analyser la carte microSD qui ?tait ins?r?e dans une cl? USB ?trange. L'objectif est d'y retrouver une adresse e-mail (...@challenge.).

La solution pr?sent?e ici se d?roule en 5 ?tapes principales, appel?s stage dans le challenge, ainsi que d'un prologue et d'un ?pilogue.

github L'ensemble du code pr?sent? ici pourra ?tre mis ? disposition. Probablement par le biais de

.

OPPIDA/DOC/2015/INT/716/1.0

3 / 48

Challenge SSTIC 2015

2 PROLOGUE

2 Prologue

2.1 Outils

mount hte

2.2 Inspection du syst?me de chier

2.2.1 Montage du disque

Il est possible de directement monter l'image disque par :

mount -o loop sdcard.img /mnt/sdcard

Le syst?me de chier est au format FAT16, et ne contient qu'un seul chier : inject.bin.

2.2.2 Recherche des chiers eac?s

En ?ditant le chier sdcard dans un ?diteur hexad?cimal, ? partir de l'oset contenant le root directory, on s'aper?oit rapidement qu'un chier est eac? (octet 0xE5 en pr?xe de son entr?e). Le nom complet du chier se retrouve dans l'entr?e LFE (Long Format Entry), qui contrairement ? l'entr?e 8.3

ne perd pas l'information du nom de chier en cas d'eacement. Le chier est build.sh, et il se trouve

dans le cluster 2. Toujours ? l'aide de l'?diteur hexad?cimal, il est possible de restaurer le chier avec les modications suivantes sur l'image de la microSD :

--- sdcard.img +++ sdcard_recover.img @@0x00000200 -F8 FF FF FF 00 00 00 00 05 00 06 00 07 00 08 00 |................| +F8 FF FF FF 00 00 FF FF 05 00 06 00 07 00 08 00 |................| --- sdcard.img +++ sdcard_recover.img @@0x0001EA00 -F8 FF FF FF 00 00 00 00 05 00 06 00 07 00 08 00 |................| +F8 FF FF FF 00 00 FF FF 05 00 06 00 07 00 08 00 |................| --- sdcard.img +++ sdcard_recover.img @@0x0003D200 -E5 62 00 75 00 69 00 6C 00 64 00 0F 00 BD 2E 00 |.b.u.i.l.d......| +41 62 00 75 00 69 00 6C 00 64 00 0F 00 BD 2E 00 |Ab.u.i.l.d......| --- sdcard.img +++ sdcard_recover.img @@0x0003D220 -E5 55 49 4C 44 20 20 20 53 48 20 20 00 00 2D 1E |.UILD...SH....-.| +42 55 49 4C 44 20 20 20 53 48 20 20 00 00 2D 1E |BUILD...SH....-.|

Si on remonte le syst?me de chier apr?s ces modications, on pourra copier build.sh. Ce chier contient

la commande suivante :

java -jar encoder.jar -i /tmp/duckyscript.txt

OPPIDA/DOC/2015/INT/716/1.0

4 / 48

Challenge SSTIC 2015

3 USB RUBBER DUCKY

3 USB Rubber Ducky

3.1 Outils

egrep iconv base64 gcc

3.2 D?codeur Rubber Ducky

Le chier restaur? ? l'?tape pr?c?dente contient un indice pour la suite. Le binaire inject.bin a ?t? g?n?r? ? partir d'un chier source /tmp/duckyscript.txt. C'est donc tr?s probablement le r?sultat

du codeur pour USB Rubber Ducky. Le binaire contient alors des codes de touches clavier, avec leurs modicateurs (shift, control, etc.).

Il est possible de d?coder le binaire avec l'outil ducky-decode.pl que l'on peut retrouver dans la suite

logiciel de Rubber Ducky, mais sa sortie n'est pas directement utilisable. ? la place, on peut ?crire notre propre d?codeur. Il n'y a besoin de g?rer qu'un sous ensemble des codes :

Modicateurs : Super, Shift Touches : A-Z/a-z, -/ _, =/+, 0-9, , \n, \b, \t Le but est d'obtenir une sortie directement utilisable pour pouvoir ?tre trait?e.

$ make decode $ ./decode ../prologue/inject.bin >duckyscript.txt

La sortie est une s?rie de commandes sous la forme powershell -enc $BASE64 :

// wait 2000 ms GUI r // wait 500 ms ? // wait 1000 ms cmd // wait 50 ms powershell -enc ZgB1AG4AYwB0AGkAbwBuACAAdwByAGkAdABlAF8AZgBpAGwAZQBfAGIAeQB0AGUAcwB7AHAAYQB[...] // wait 10 ms powershell -enc ZgB1AG4AYwB0AGkAbwBuACAAdwByAGkAdABlAF8AZgBpAGwAZQBfAGIAeQB0AGUAcwB7AHAAYQB[...] [...]

La sortie de la base64 donne des commandes et d?clarations de fonctions powershell encod?es en UTF16LE. Pour faciliter la suite, il est pr?f?rable de convertir le tout directement en UTF8 :

grep powershell duckyscript.txt | cut -d' ' -f3 | base64 -d | iconv -f utf-16 -t utf-8 > script. psh

Le script r?cup?re le nom d'utilisateur et le r?pertoire courant de l'environnement. En fonction du r?sultat, une des deux cha?nes cod?es en base64 sera d?cod?e et ajout?e ? la n d'un chier. L'une de ces cha?nes est constantes entre toutes les invocations de powershell et une fois d?cod?e donne : TryHarder. La derni?re invocation de powershell par le Ducky Script sert ? v?rier le r?sultat du hachage du chier de sortie. La fonction utilis?e est SHA1, et le r?sultat doit donner : EA-9B-8A-6F-5B-52-7E-72-65-2019-31-3C-25-B5-6A-D2-7C-7E-C6.

OPPIDA/DOC/2015/INT/716/1.0

5 / 48

Challenge SSTIC 2015

3 USB RUBBER DUCKY

function write_file_bytes {

param([Byte[]] $file_bytes, [string] $file_path = ".\stage2.zip"); $f = [io.file]::OpenWrite($file_path); $f.Seek($f.Length, 0); $f.Write($file_bytes, 0, $file_bytes.Length); $f.Close(); } function check_correct_environment { $e = [Environment]::CurrentDirectory.split("\"); $e = $e[$e.Length - 1] + [Environment]::UserName; $e -eq "challenge2015sstic"; } if (check_correct_environment) { write_file_bytes([Convert]::FromBase64String('UEsDBAoDAAAAADa[...]dXtOh6gUsBzWnXw==')); } else { write_file_bytes([Convert]::FromBase64String('VAByAHkASABhAHIAZABlAHIA')); } [...] function hash_file { param([string]$filepath); $sha1 = New-Object -TypeName System.Security.Cryptography.SHA1CryptoServiceProvider; $h = [System.BitConverter]::ToString($puteHash([System.IO.File]::ReadAllBytes( $filepath))); $h } $h = hash_file(".\stage2.zip"); if($h -eq "EA-9B-8A-6F-5B-52-7E-72-65-20-19-31-3C-25-B5-6A-D2-7C-7E-C6") { echo "You WIN"; } else { echo "You LOSE"; }

An de sortir la bonne cha?ne cod?e en base64, le script v?rie que l'environnement est, par exemple :

utilisateur = sstic

r?pertoire courant = challenge2015

Dans ce cas, le contenu en base64 est d?cod?, et la sortie doit donner le chier : .\stage2.zip, dont le

r?sultat du hachage SHA1 est : EA-9B-8A-6F-5B-52-7E-72-65-20-19-31-3C-25-B5-6A-D2-7C-7E-C6

Finalement, la commande suivante permet d'extraire le chier stage2.zip du script powershell :

$ egrep -o "correct_environment\){write_file_bytes\(\[Convert\]::FromBase64String\('[^']+" script.psh | cut -d"'" -f2 | base64 -d >stage2.zip

$ sha1sum stage2.zip ea9b8a6f5b527e72652019313c25b56ad27c7ec6 stage2.zip

3.3 En r?sum?

make decode && ./decode ../intro/inject.bin | grep powershell | cut -d' ' -f3 | base64 -d | iconv -f utf-16 -t utf-8 | egrep -o "correct_environment\){write_file_bytes\(\[Convert\]:: FromBase64String\('[^']+" | cut -d"'" -f2 | base64 -d >stage2.zip && sha1sum stage2.zip

OPPIDA/DOC/2015/INT/716/1.0

6 / 48

Challenge SSTIC 2015

4 OPENARENA

4 OpenArena

4.1 Outils

OpenSSL

Autres :

OpenArena (avec support \devmap)

4.2 Contenu de l'archive r?cup?r?e au stage pr?c?dent

memo.txt sstic.pk3 encrypted

4.3 Analyse du contenu

Le chier memo.txt contient l'?nonc? suivant :

Cipher: AES-OFB IV: 0x5353544943323031352d537461676532 Key: Damn... I ALWAYS forget it. Fortunately I found a way to hide it into my favorite game !

SHA256: 91d0a6f55cce427132fc638b6beecf105c2cb0c817a4b7846ddb04e3132ea945 - encrypted SHA256: 845f8b000f70597cf55720350454f6f3af3420d8d038bb14ce74d6f4ac5b9187 - decrypted

4.3.1 Analyse de la carte OpenArena

Le chier sstic.pk3 est un chier de carte pour OpenArena. Le format des .pk3 est en fait une

archive Zip. Une fois d?compress?, cela permet d'obtenir les textures ainsi que la carte au format BSP.

La carte est une modication d'une d?j? existante : 085am_underworks2.

Deux op?rations peuvent s'av?rer utiles pour la suite : Parcourir les textures ? la recherche d'indices

Chercher la partie script?e du jeu via un strings sur le chier BSP.

Les textures Dans les ressources on retrouve les textures sous forme d'image.

Certaines images paraissent int?ressantes pour la suite. Elles contiennent :

Une ic?ne, il y en a 8 di?rentes : drapeau, signal, disquette, goutte, maillon, wi, t?l?viseur et

soleil.

Trois mots de 32 bits, aux couleurs : verte, orange et blanche.

Pour chacune des ic?nes disponibles, il existe 10 images associ?es. M?me si un bruteforce ne semble pas

envisageable

(

Akn

=

n! (n-k)!

1019, n

=

240, k

=

8

),

la

recopie

(sans

erreurs)

de

chacun

de

ces

mots

inscrits serait de toute fa?on bien trop fastidieuse.

OPPIDA/DOC/2015/INT/716/1.0

7 / 48

................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download