
Framework d'analyse du tas de processus - Windows/Linux - inférence de type d'enregistrement et forensique
################################
|travis| |coverage| |landscape| |pypi| |docs|
Guide d'utilisation rapide <docs/Haystack_basic_usage.ipynb>_ dans le dossier docs/.
Haystack-reverse CLI <docs/Haystack_reverse_CLI.ipynb>_ dans le dossier docs/.
Plus de documentation <http://python-haystack.readthedocs.io/en/latest/>_
python-haystack est un framework d'analyse du tas (heap), axé sur la recherche et le rétro-ingénierie de structures C dans la mémoire allouée.
La première fonction/API est la fonction SEARCH. Elle permet de rechercher des types d'enregistrements connus dans un vidage mémoire d'un processus ou dans la mémoire d'un processus en direct.
La deuxième fonction/API est la fonction REVERSE dans l'extension python-haystack-reverse <https://github.com/trolldbois/python-haystack-reverse>_
Elle vise à aider un analyste à rétro-ingénier les types d'enregistrements mémoire présents dans le tas d'un processus.
Elle se concentre sur la reconstruction et la classification des structures C classiques à partir de la mémoire.
Elle tente de recréer les définitions de types.
Quelques points d'entrée existent pour gérer le format de votre vidage mémoire.
haystack-live-dumphaystack-find-heap permet d'afficher les détails sur le tas Windows.haystack-search interface CLI de recherchehaystack-show interface CLI d'affichage pour un type d'enregistrement spécifique à une adresse donnéeVous pouvez utiliser les URL suivantes pour désigner votre gestionnaire/ vidage mémoire :
dir:///chemin/vers/mon/dossier/de/vidage/haystack pour utiliser le format de vidage haystackdmp:///chemin/vers/mon/fichier/minidump pour utiliser le format minidump (Microsoft ?)frida://nom_ou_pid_du_processus_à_attacher pour utiliser frida afin d'accéder à la mémoire d'un processus en directlive://nom_ou_pid_du_processus_à_attacher pour tracer (ptrace) un processus en directrekall:// pour charger une image rekallvolatility:// pour charger une image volatilitycuckoo:// pour charger un vidage mémoire produit par Cuckoo (bêta, peut nécessiter un correctif)Sous Windows, le plus simple est d'obtenir un Minidump. La suite d'outils Microsoft Sysinternals
fournit soit un CLI (procdump.exe) soit une interface graphique (Process Explorer).
En utilisant l'un de ces outils (avec l'option de vidage mémoire complet), vous produirez un fichier
qui peut être utilisé avec la liste de points d'entrée haystack-minidump-xxx.
Bien que techniquement vous puissiez utiliser de nombreux outils tiers, haystack a en réalité
besoin des informations de mappage mémoire pour fonctionner.
C'est pourquoi un outil de vidage est inclus : haystack-live-dump :
.. code-block:: bash
# haystack-live-dump <pid> myproc.dump
haystack-live-dump capture un vidage mémoire d'un processus vers un dossier (format haystack)haystack-rekall-dump vide un processus spécifique vers un vidage de processus haystackhaystack-volatility-dump vide un processus spécifique vers un vidage de processus haystackVous pouvez facilement reproduire le format du vidage : il s'agit d'un dossier/archive contenant chaque carte mémoire dans un fichier séparé :
Ou vous pouvez coder une implémentation de haystack.abc.IMemoryMapping pour votre format préféré.
Sinon, si vous avez déjà un vidage mémoire système provenant de Volatility ou Rekall,
vous pouvez utiliser les familles de points d'entrée haystack-rekall-xxx ou haystack-volatility-xxx
pour extraire la mémoire d'un processus spécifique dans un fichier.
Le point d'entrée haystack-find-heap permet d'afficher les détails sur le tas Windows.
Il devrait prendre en charge :
et afficher les détails de la liste de côté (LAL) et du tas à faible fragmentation (LFH) frontal (frontend).
Vous pourriez être surpris de constater que parfois, un seul processus peut mélanger les deux types de TAS (32 et 64).
Pour rechercher un enregistrement spécifique, vous devez d'abord définir ce type d'enregistrement. Un [guide d'utilisation rapide](docs/Haystack basic usage.ipynb) est disponible pour parcourir les étapes de base allant d'un fichier d'en-tête C à une définition Python ctypes. Ou vous pouvez le faire vous-même, avec des enregistrements Python ctypes traditionnels.
L'API de recherche est disponible via la famille de scripts haystack-xxx-search mais
aussi via une API afin que vous puissiez intégrer cette recherche dans votre propre code.
En résumé, la recherche haystack parcourra chaque décalage (offset) de la mémoire du programme pour tenter de trouver un décalage 'valide' pour ce type d'enregistrement spécifique.
La validité de l'enregistrement est déterminée par des contraintes de type telles que :
.. code-block:: bash
$ python haystack/cli.py dir:///home/user/project/python-haystack/test/src/test-ctypes6.32.dump ctypes6_gen32.struct_usual
Les contraintes suivantes sont prises en charge :
Exemple :
.. code-block:: python
[struct_name]
myfield: [1,0xff]
ptr_field: NotNull
Vous pouvez consulter haystack/allocators/win32/winxpheap32.constraints, où
les contraintes d'un TAS Windows XP x32 sont définies.
Évidemment, plus il y a de contraintes, meilleurs seront les résultats.
Vous pouvez également créer des contraintes plus complexes en utilisant du code Python en implémentant
une classe haystack.abc.interface.IRecordTypeDynamicConstraintsValidator et en la transmettant à
ModuleConstraints.set_dynamic_constraints
Le dépôt sslsnoop nécessite une mise à jour pour être compatible avec les versions > v0.30 - en attente
Par exemple, cela videra les structures session_state ainsi que les structures enfants pointées sous forme d'un objet Python avec lequel nous pouvons jouer. Supposons que nous ayons un client ou serveur ssh avec le pid 4042 :
.. code-block:: bash