Pages

Saturday, March 19, 2011

Get password from memory dump

To explain how we can get password from memory dump, I will use forensic challenge #2 from "Nuit du Hack 2010" as example.
Aim : extract Administrator password from the Windows XP memory dump

We will use a great tool to extract this password which is : Volatility. Volatility has a plugin called "hashdump" to extract password hashes. So we have to use it, but before we have to locate virtual address of SYSTEM and SAM hive.

Find physical adresses of registry hives (hivescan plugin) :

user@ubuntu-vm:~/Desktop/volatility$ python volatility.py -f ../xp_forensics.vmem --profile=WinXPSP3x86 hivescan
Volatile Systems Volatility Framework 1.4_rc1
Offset          (hex)        
44666888        0x02a99008
44694368        0x02a9fb60
[...]
380343784       0x16ab95e8
424820744       0x19524008

Then locate virtual addresses (hivelist plugin) :

user@ubuntu-vm:~/Desktop/volatility$ python volatility.py -f ../xp_forensics.vmem --profile=WinXPSP3x86 hivelist
Volatile Systems Volatility Framework 1.4_rc1
Virtual     Physical    Name
0xe1cf9008  0x19524008  \??\C:\Documents and Settings\mr_esclave\Local Settings\Application Data\Microsoft\Windows\UsrClass.dat
[...]
0xe15fdb60  0x0688ab60  \Device\HarddiskVolume1\WINDOWS\system32\config\software
0xe15ebb60  0x06708b60  \Device\HarddiskVolume1\WINDOWS\system32\config\default
0xe15fd008  0x0688a008  \Device\HarddiskVolume1\WINDOWS\system32\config\SECURITY
0xe15f2658  0x066cf658  \Device\HarddiskVolume1\WINDOWS\system32\config\SAM
0xe12eb288  0x02d58288  [no name]
0xe1035b60  0x02a9fb60  \Device\HarddiskVolume1\WINDOWS\system32\config\system
0xe102e008  0x02a99008  [no name]
0x8066e904  0x0066e904  [no name]

Now we have SYSTEM and SAM virtual addresses, so we can run hashdump plugin :

user@ubuntu-vm:~/Desktop/volatility$ python volatility.py -f ../xp_forensics.vmem --profile=WinXPSP3x86 hashdump -y 0xe1035b60 -s 0xe15f2658
Volatile Systems Volatility Framework 1.4_rc1
Administrateur:500:a94c6377a507e293d87f0f06a65161cd:ca5cf9cfc07ec43a78d00bc936242594:::

Last step is to use ophcrack with rainbow tables to crack this password :


We have easily got Administrator's password which is "cuirmoustache".


Nuit du Hack challenges : http://wargame.nuitduhack.com/
Volatility plugin list : http://code.google.com/p/volatility/wiki/CommandReference

Sunday, February 27, 2011

Use Metasploit as email client

This metasploit plugin is my first piece of Ruby code and is a very basic email client. With this plugin you can send emails (by smtp), and receive unread mails by imap. Download my metasploit plugin.

Send mails :

msf > load mail_client
[*] Mail Client plugin loaded.
[*] Successfully loaded plugin: MailClient
msf > send_mail
Enter your smtp password :
Use ';' for multiple recipients
To : email@mail.com
Subject : Test metasploit plugin
Message :
Is my plugin working ?? We will see ...

Send ...
msf >


Get mails :

msf > get_mails

0. Sun, 27 Feb 2011 00:11:58 +0000 - Test metasploit plugin
? read 0
Is my plugin working ?? We will see ...

Sent from Metasploit
----------
? help
read X
list
help
exit
?

This plugin uses basic Net::IMAP from Ruby, so authentication is limited to "LOGIN" and "CRAM-MD5" authentication mechanisms. I have not added OAUTH used by Gmail or others kinds of "high level" authentication methods.

Wednesday, October 6, 2010

Ma première application Android

Suite à la rédaction de mon précédent article, j'ai voulu m'essayer au développement sous l'OS mobile de Google : Android. Cet article a donc pour but de partager ma petite application avec les rouennais et rouennaises pouvant en avoir besoin.

Lien de téléchargement : http://code.google.com/p/rouentransport/downloads/detail?name=TCAR.apk&can=2&q=


Application
L'application et le widget

Tout d'abord je souhaite préciser plusieurs choses concernant mon projet :
 - le design de l'application n'était pas ma priorité
 - la fiabilité des horaires affichés par l'application et le widget ne dépend pas de moi mais de la TCAR (société des Transports en Commun de l'Agglomération de Rouen). De plus les horaires de certaines lignes sont "en temps réel" alors que d'autres sont fixes et ne tiennent donc pas compte des retards possibles.


L'application affiche l'heure de passage prévue suivant la direction (terminus) que vous avez choisi ainsi que à la station à laquelle vous vous trouvez.


Configuration du widget
Widget

Le widget affiche les mêmes informations que l'application avec la possibilité en plus de le rafraichir automatiquement toutes les X minutes.


PS : les tests ont été réalisés sur un Motorola Milestone uniquement, il est donc possible que des bugs existent sur d'autres modèles.



L'installation

Puisque mon application n'est pas disponible sur l'Android Market, il faudra pour l'installer, autoriser l'installation d'applications de sources inconnues (Préférences>Applications>Sources inconnues). 
Ensuite pour l'installer, vous pouvez utiliser par exemple AppMonster (disponible sur le Market). Cette application vous permettra d'installer une application à partir du fichier .apk. Pour celà, dans le menu d'AppMonster, faites Install>Whole SD puis sélectionner TCAR et cliquer sur Install.



Si mon application vous a plu, si vous souhaitez faire des critiques, si vous trouvez des bugs ... n'hésitez pas à me laisser un commentaire.

Friday, September 17, 2010

Profiter du code d'un widget iGoogle

Ayant récemment déménagé à Rouen pour mes études, un de mes premiers besoin était de pouvoir consulter les horaires des transports en commun de la ville. Malheureusement, je n'ai pas trouvé d'application remplissant ce rôle pour mon téléphone sous Android. La seule chose que j'ai trouvé, c'est un lien vers un widget iGoogle. Ce widget permet de connaître les différentes perturbations du réseau de transport ainsi que les horaires des prochains métros, tramways, bus... J'ai donc observé son fonctionnement pour pouvoir obtenir ce que je recherche, c'est-à-dire les horaires des transports.


1 - Analyse du widget

Le widget se situe à l'adresse suivante (http://www.tcar.fr/gadget/gadget.xml). Ce fichier contient un certain nombre de choses dont les adresses d'images, d'une feuille de style, d'un fichier javascript ... Ce dernier est d'ailleurs l'élément le plus important du widget, car c'est au sein de ce fichier que l'on trouve toute les fonctions permettant au widget d'être interactif et de renvoyer des informations à l'utilisateur.

Les fonctions intéressantes du fichier javascript (http://www.tcar.fr/gadget/_js/widgetEngine.js) sont les suivantes :

- getLines() retourne des informations (id de la ligne, numéro de ligne, type, pictogramme) sur chaque ligne du réseau (métro, THEOR, bus, taxi ...)
www.tcar.fr/gadget/getAllLinesWithType.asp

- getDirections() retourne le numéro de ligne, les noms des terminus, et la direction suivant le terminus
www.tcar.fr/WebServices/xgoatService/xLine/getDirections.asp?uId=TCAR01&ligID=6 (exemple pour la ligne de métro)

- getStops() retourne tous les arrêts d'une ligne
www.tcar.fr/WebServices/xgoatService/xLine/getLineStops.asp?uId=TCAR01&ligID=6&ligSens=1 (exemple pour la ligne de métro avec en terminus l'arrêt Technopôle)

- getLineCode() retourne plusieurs informations dont le code de la ligne qui nous sera utile pour récupérer ensuite les horaires
www.tcar.fr/WebServices/xgoatService/xLine/getLineInfos.asp?uId=TCAR01&ligID=6

- callbackLineCode() permet de sélectionner les "identifiants transporteurs" de la ligne à partir du code retourné par getLineCode(). Cette fonction récupère seulement les deux derniers chiffres du code de la ligne.

- updateScheduleData() retourne les horaires de tous les métros, bus ... passant après l'heure actuelle (jusqu'à la fin de la journée). Suivant la ligne, les horaires peuvent être actualisé en tant réel ou non.
www.tcar.fr/SiriSoapClient/getStopTimetable.aspx?uId=INEO:Operator:Cityway:LOC&ligno=90&ptano=10126&sens=1 (en temps réel)
www.tcar.fr/WebServices/xgoatService/xHour/getLineStopNextHours.asp 


2 - Script python

J'ai fait un petit script en python afin de tester les éléments de la partie précédente. Le script n'est pas du tout flexible car il récupère l'horaire du prochain métro en direction du sud de Rouen et passant à l'arrêt le plus proche de chez moi. Lorsque le script à trouvé l'horaire du prochain métro, la synthèse vocale annonce l'horaire et la destination de celui-ci (fonctionnel sous Mac grâce à la commande "say").



Si tout se passe bien vous devriez entendre (sous Mac) une phrase semblable à celle-ci : "Next subway is at 20 hours 45 minutes for Technopôle."

Cet article et ce script ne me permettent pas de consulter les horaires des prochains métro à partir de mon téléphone comme je le souhaite, mais cela me permet d'avoir une meilleure idée de comment je pourrais  faire pour développer un widget ou une application pour Android (si je trouve le temps).

Maj : Il existe un site internet adapté aux téléphones mobiles pour consulter les horaires, cependant il faut entrer le nom de l'arrêt pour en connaître les horaires, ce qui est peu pratique lorsque l'on n'est pas sûr du nom, de l'orthographe ... 

Saturday, July 24, 2010

Obtenir l'accès à un réseau Wifi sans effort ou presque

Il y a quelques mois, suite à un problème de carte graphique sur mon macbook (et oui, il est équipé de la fameuse 8600M GT, victime d'un problème de surchauffe) je l'ai emporté chez un réparateur agréé par Apple pour faire un diagnostique. Par chance, la réparation fût gratuite grâce à la reconnaissance d'Apple du problème sur les cartes graphiques Nvidia. Enfin bref, ceci n'est guère important, venons en à la partie la plus "fun" de l'histoire.


Donc quelques semaines après avoir récupéré mon mac, je suis allé dans l'application "Keychain Access", fournie avec Mac OS, qui stocke tous les mots de passe saisis dans les applications et que l'on ne souhaite pas ressaisir à chaque instant, mais aussi ceux des partages réseaux (ex : serveur SMB ...) et les clés des points d'accès Wifi. C'est ainsi que j'ai pu trouver celui utilisé dans le centre de réparation où mon petit macbook avait séjourné quelques jours.




Quelques infos concernant la clé, elle fait dix caractères (lettres et chiffres) dont le nom du réparateur ce qui est pas top niveau sécurité (en plus d'entrer cette clé sur les ordinateurs des clients ...). J'espère pour eux qu'ils n'enregistrent pas la clé de leur réseau Wifi sur tous les ordinateurs qu'ils réparent, autrement ils se mettent réellement en danger.

Pour conclure, on pourrait se poser la question si au niveau de la loi, sachant que la clé m'a été (involontairement) communiquée, j'ai le droit d'utiliser leur réseau pour accéder à Internet ?

Saturday, July 10, 2010

Ann's Aurora, un challenge d'investigation numérique proposé par le SANS

Au mois de juin, le SANS a proposé sur son site un challenge d'investigation numérique sur une capture de traffic réseau. Ce challenge n'est pas le premier que le SANS organise, mais c'était d'après eux l'un des plus compliqué.
Le but de ce challenge était donc de répondre a un peu plus de 10 questions en analysant le fichier evidence06.pcap. Dans cette capture, seulement 2 machines intéragissent entre elles, l'une est victime (10.10.10.70) d'une attaque similaire à "l'opération Aurora" et l'autre (10.10.10.10) est la machine contrôlée par l'attaquant.

Si vous souhaitez faire ce challenge, ne lisez pas la suite avant d'avoir cherché, car je vais vous donner les réponses et indiquer les erreurs que j'ai commis.



1) What was the full URI of Vick Timmes' original web request? (Please include the port in your URI.)
Answer : http://10.10.10.10:8080/index.php

2) In response, the malicious web server sent back obfuscated JavaScript. Near the beginning of this code, the attacker created an array with 1300 elements labeled "COMMENT", then filled their data element with a string. What was the value of this string?
Answer : vEI

3) Vick's computer made a second HTTP request for an object.
   a) What was the filename of the object that was requested?
Answer : index.phpmfKSxSANkeTeNrah.gif

   b) What is the MD5sum of the object that was returned?
Answer : df3e567d6f16d040326c7a0ea29a4f41

4) When was the TCP session on port 4444 opened? (Provide the number of seconds since the beginning of the packet capture, rounded to tenths of a second. ie, 49.5 seconds)
Answer : 1.3 seconds

5) When was the TCP session on port 4444 closed? (Provide the number of seconds since the beginning of the packet capture, rounded to tenths of a second. ie, 49.5 seconds)
Answer : 87.6 seconds

6) In packet 17, the malicious server sent a file to the client.
   a) What type of file was it? Choose one:
  • Windows executable
  • GIF image
  • PHP script
  • Zip file
  • Encrypted data
Answer : Windows executable

   b) What was the MD5sum of the file?
Answer : b062cb8344cd3e296d8868fbef289c7c

7) Vick's computer repeatedly tried to connect back to the malicious server on port 4445, even after the original connection on port 4444 was closed. With respect to these repeated failed connection attempts:
   a) How often does the TCP initial sequence number (ISN) change? (Choose one.)
  • Every packet
  • Every third packet
  • Every 10-15 seconds
  • Every 30-35 seconds
  • Every 60 seconds
Answer : Every third packet

   b) How often does the IP ID change? (Choose one.)
  • Every packet
  • Every third packet
  • Every 10-15 seconds
  • Every 30-35 seconds
  • Every 60 seconds
Answer : Every packet

   c) How often does the source port change? (Choose one.)
  • Every packet
  • Every third packet
  • Every 10-15 seconds
  • Every 30-35 seconds
  • Every 60 seconds
Answer : Every 10-15 seconds

8) Eventually, the malicious server responded and opened a new connection. When was the TCP connection on port 4445 first successfully completed? (Provide the number of seconds since the beginning of the packet capture, rounded to tenths of a second. ie, 49.5 seconds)
Answer : 123.7

9) Subsequently, the malicious server sent an executable file to the client on port 4445. What was the MD5 sum of this executable file?
Answer : b062cb8344cd3e296d8868fbef289c7c

10) When was the TCP connection on port 4445 closed? (Provide the number of seconds since the beginning of the packet capture, rounded to tenths of a second. ie, 49.5 seconds)
Answer : 198.4


J'ai donc commis 2 erreurs : l'une à la question 2 et l'autre à la question 7a. 
Pour la seconde question, j'avais indiqué une chaine de caractères commençant par "\u0c0f\u0c0d..." car au début, le tableau est bien initialisé avec "vEI" mais plus loin dans le code javascript cette chaine de caractère est remplacée par celle que je croyais être la bonne réponse. 
Concernant la question 7a), Wireshark m'indiquait "Sequence number : 0 (relative sequence number) ce qui m'a induis en erreur. Pour trouver le numéro de séquence correct, il fallait que je regarde le contenu du paquet au format héxadécimal puis que je convertis en décimal, la valeur correspondant au numéro de séquence recherché. Une autre solution plus intuitive aurait été de désactiver l'option "Relative sequence numbers and window scaling" en faisant un clic droit dans la partie affichant une vue détaillée du paquet puis en allant dans le sous-menu "Protocol Preferences".

J'ai trouvé ce petit challenge très intéressant et j'espère que d'autres suivront, afin que cette fois-ci je sois dans les finalistes :)

Billet annonçant les gagnants du challenge : http://forensicscontest.com/2010/07/09/puzzle-6-winners

Thursday, June 17, 2010

OpenOffice en mode pare-feu : OOwall

Début avril 2009, lors de la création du projet de loi Hadopi, Christine Albanel, notre (ex) ministre de la culture nous apprenait que son ministère était protégé par le pare-feu OpenOffice. A l'époque cet événement a fait un gros buzz sur le net, car des millions de personnes utilisent la suite bureautique OpenOffice, mais personne ne savait comment l'utiliser comme pare-feu (a part Christine).


Depuis hier, la technique utilisée par le ministère de la culture (joke inside) a été révélée par Pierre Chifflier (alias Pollux), un expert en sécurité français.

Pour faire fonctionner ce pare-feu next-gen, on a besoin de :
- OpenOffice qui permet de choisir les ports à filtrer et de générer en temps réel des graphiques récapitulant les paquets bloqués et ceux autorisés
- python-uno pour manipuler OpenOffice
- nfqueue afin de filtrer les paquets en langage de haut niveau
- netfilter

Ci-dessous, un schéma montrant les relations entre les différents composants de ce pare-feu :
Sur le schéma, on peut remarquer une communication client-serveur XML-RPC, elle permet aux outils de la partie "pare-feu" exécutés en root, de communiquer avec la Console d'administration sans que cette dernière ne soit elle-même exécutée en root.

Ci-dessous, un aperçu de l'interface "d'administration" du pare-feu OpenOffice :



Pour ceux qui souhaitent avoir plus d'informations et télécharger les sources d'OOwall, cela se passe sur le blog de Pollux.