Introduction à la Stéganographie

Alex GARRIDO - @Zeecka_

WHOAMI

Alex GARRIDO - Zeecka

Sommaire

  • Historique
  • Aujourd'hui ?
  • Couleurs
  • MSB - LSB
  • Aperi'Solve
  • Aperi'CTF -  Sudo Ku
  • Pixel Indicator Technique
  • Pour aller plus loin

Définitions

© ECW 2018

Définitions

Stéganographie :

Procédé de dissimulation d'un message confidentiel au sein de données.

Cryptographie :

Ensemble des techniques de chiffrement qui assurent l'inviolabilité de textes et, en informatique, de données.

Historique

Historique

Historique

Aujourd'hui ?

  • Échanges terroristes
  • Contre la censure
  • Malware
  • Watermarking
  • Renseignements ?

Cas d'utilisation - Drogue

Cas d'utilisation - Drogue

  • 2008 : Juan Carlos Ramirez Abadia

Cas d'utilisation - Malware

OceanLotus (APT 32 - Vietnam) - 16/10/2019

 

Watermarking "Visible"

Source: Charles Préaux

Watermarking "Invisible"

  • 1990 : XEROX

Watermarking "Invisible"

  • 2005 : EFF

Watermarking "Invisible"

  • 2017 : Reality Winner

Watermarking "Invisible"

  • 2019 : Genius & Google

Bases de la stéganographies

Couleurs

Est composée de

Plusieurs nuances pour chaque layer

Plusieurs "layers"

Couleurs RGB(A)

  • 256 Nuances par layer [0-255]
  • >16 Millions de couleurs (256 ³)
  • Couches RGB (Red, Green, Blue)
  • Couche "Alpha" pour la transparence (optionnelle)

Couleurs : Vision "Binaire"

112
48
160
01110000
00110000
10100000
RGB(112,48,160)
MSB : Most Significant Bit
LSB : Least Significant Bit

Codage sur tous les bits

~ 75 lignes

Codage sur tous les bits

Couleurs Aléatoires

Texte ASCII

Texte Chiffré (AES)

MSB : Most Significant Bit

MSB : Most Significant Bit

Originale

MSB = 0

MSB = 1

MSB : Most Significant Bit

"Lorem Ipsum"

en boucle

Text ASCII

Text Chiffré (AES)

MSB : Most Significant Bit

Text ASCII

(Couche Rouge)

Text ASCII

(Couche Verte)

Text ASCII

(Couche Bleu)

LSB : Least Significant Bit

LSB : Least Significant Bit

Originale

LSB = 0

LSB = 1

LSB : Least Significant Bit

"Lorem Ipsum"

en boucle

Text ASCII

Text Chiffré (AES)

LSB : Least Significant Bit

Text ASCII

( Couche Rouge )

Text ASCII

( Couche Verte )

Text ASCII

( Couche Bleu )

Une image dans une image ?

00110011
Bit de poids forts
Image 1
Bit de poids forts
Image 2

Une image dans une image ?

12345678
12345671
12345612

Une image dans une image ?

12345123
12341234
12312345

Une image dans une image ?

12123456
11234567
12345678

Aperi'Solve -  Demo

Aperi'CTF -  Sudo Ku

Aperi'CTF -  Sudo Ku

Aperi'CTF -  Sudo Ku

Aperi'CTF -  Sudo Ku

Aperi'CTF -  Sudo Ku

Aperi'CTF -  Sudo Ku

Aperi'CTF -  Sudo Ku

  • Dupliquer le sudoku pour passer d'une matrice 9*9 à une matrice 420*696 (taille de l'image de la marionnette)
  • Chaque coordonnées M y,x correspond à une valeur comprise dans [1;9]

(Documentation fournie avec le challenge)

Aperi'CTF -  Sudo Ku

x

y

M10,16 = 4

0

16
10

Aperi'CTF -  Sudo Ku

N = 8 premiers pixels = taille du message

  • 8 px = (0;0;0);...;(0;1;188)
  • Taille = 444
    • ((256^2) * 0) + ((256^1) * 1) + ((256^0) * 188)

Sudo Ku

data = ""

  • Pixel n° 9 : rgb(30,19,11)
    • M30,19 = 4
    • data = data + "4"

data = "4"

  • Pixel n° 10 : rgb(30,19,10)
    • M30,19 = 3
    • data = data + "4"

data = "44"

  • Pixel n° 11 : rgb(30,20,10)
    • M30,20 = 8
    • data = data + "8"

data = "448"

 

448698889698142461797114359818718295749193976356246828431713266883865884813536116113228227172158629127645191314333928897979526221926644675171894387725291228175758913362588121832172535464849119981385237187344111176386852197453559664676895773485183645619736422684187734353651433414632764185256777265567995655785718963269749967586821574647158395219312475132736787935653714421491515159272113187713996731235888942269276477538857378333943479497592394

Aperi'CTF -  Sudo Ku

Après 444 pixels...

Aperi'CTF -  Sudo Ku

Conversion en texte

  • Changer le charset [1;9] 🡆 [0;8]  (base 9)
  • Convertir base 9 🡆 base 10
  • Convertir base10 (long) 🡆 texte
Bravo ! Vous pouvez valider le challenge avec le flag suivant: APRK{*5UD0KU_M4ST3R*}.
Congratz ! You can validate the challenge with the following flag: APRK{*5UD0KU_M4ST3R*}.

Pixel Indicator Technique (P.I.T)

N = 8 Premiers octets = Taille du message (en Bit)

Parité binaire : Parité du nombre de 1 dans l'écriture binaire du nombre.

56

00111000

3 nombres "1"

Parité binaire = Non

N paire ?

N premier ?

N impaire

Channel

"Indicateur" = R

Channel

"Indicateur" = B

Channel

"Indicateur" = V

Parité binaire ?

Parité binaire ?

Parité binaire ?

Oui

Non

Oui

Non

Oui

Non

Ch1 = V
Ch2 = B

Ch1 = B
Ch2 = V

Ch1 = R
Ch2 = V

Ch1 = V
Ch2 = R

Ch1 = B
Ch2 = R

Ch1 = R
Ch2 = B

P.I.T.

P.I.T.

2 LSB de IC

= '00'

= '01'

= '10'

= '11'

Pixel Suivant

Secret += 2LSB de CH1

Pixel Suivant

Secret += 2LSB de CH2

Pixel Suivant

Secret += 2LSB de CH1 et CH2

Pixel Suivant

Oui
Oui
Oui
Oui
Non
Non
Non

IC = Channel « Indicateur »

CH1 = Channel 1

CH2 = Channel 2

Note: On débute à la deuxième ligne.

Pour aller plus loin

  • Stéganographie dans le Son (Spectre, Fréquences inaudibles, ...)
  • Fichiers polyglottes
  • Angecryption, PVD, Stereogrammes, ...
  • Stéganographie fréquentielle
  • Résistance à la compression/détérioration
  • Résistance à la modification

Lien des slides/scripts

Ressources

Ressources

Ressources

Ressources

Outils

Introduction à la Stéganographie

By Zeecka

Introduction à la Stéganographie

  • 2,068