
Inspectez visuellement et forcez le décodage des correspondances YARA et regex trouvées dans les données binaires et textuelles avec des couleurs. Beaucoup de couleurs.

Inspectez visuellement toutes les correspondances d'expressions régulières (et leurs cousins plus sexy et plus ésotériques, les correspondances YARA) trouvées dans des données binaires et/ou du texte. Voyez ce qui se passe lorsque vous forcez différents encodages de caractères sur ces octets correspondants. Avec des couleurs.
pipx install yaralyzer
# Analyser avec des définitions YARA dans un fichier :
yaralyze --yara-rules /secret/vault/sigmunds_malware_rules.yara lacan_buys_the_dip.pdf
# Analyser avec une expression régulière arbitraire :
yaralyze --regex-pattern 'good and evil.*of\s+\w+byte' --regex-modifier wide the_crypto_archipelago.exe
# Analyser avec un motif hexadécimal YARA arbitraire
yaralyze --hex-pattern 'd0 93 d0 a3 d0 [-] 9b d0 90 d0 93' one_day_in_the_life_of_ivan_cryptosovich.bin
'/.+/' et obtenir immédiatement une fenêtre sur tous les octets du fichier qui se trouvent entre des barres obliques. Même histoire pour les guillemets, les BOM, etc. Toute expression régulière que YARA peut gérer est supportée, donc le ciel est la limite.chardet est une bibliothèque sophistiquée pour deviner les encodages de caractères et elle est utilisée ici.chardet sera également utilisé pour voir si les octets correspondent au motif d'un encodage connu. Si chardet est suffisamment confiant (configurable), une tentative de décodage des octets avec cet encodage sera affichée.La fonctionnalité du Yaralyzer a été extraite de The Pdfalyzer lorsqu'il est devenu évident que visualiser et décoder les correspondances de motifs dans les binaires avait plus d'utilité que simplement dans un outil d'analyse de PDF.
YARA, pour ceux qui ne le savent pas1, est présenté comme un outil d'analyse/d'alerte de logiciels malveillants, mais c'est en réalité à la fois beaucoup plus et beaucoup moins que cela. Une façon de le considérer est que YARA est un moteur de correspondance d'expressions régulières amélioré. Il peut localiser des correspondances regex dans des binaires comme n'importe quel moteur regex, mais il peut aussi faire des choses bien plus farfelues comme combiner des regex en groupes logiques, comparer des regex contre les 256 versions XORées d'un binaire, vérifier la présence d'encodages base64 et autres du motif, et plus encore. Peut-être le plus important, YARA fournit un format textuel standard pour que les gens partagent leurs regex 'roidées avec le monde. Toutes ces fonctionnalités sont particulièrement utiles lors de l'analyse ou du rétro-ingénierie de logiciels malveillants, dont les auteurs ont tendance à investir beaucoup de temps à rendre les choses difficiles à trouver.
Mais... c'est aussi tout ce que fait YARA. Tout le reste dépend de l'utilisateur. YARA n'est qu'un moteur de correspondance et si vous ne savez pas quoi chercher (ou même quel encodage de caractères vous pourriez utiliser pour chercher), il ne vous mène pas très loin. Je me suis retrouvé un peu frustré en essayant d'utiliser YARA pour examiner toutes les correspondances de quelques motifs critiques :
\".+\" et \'.+\')/.+/). Les barres obliques délimitent une expression régulière dans de nombreuses implémentations et j'essayais de voir si certains des octets correspondant à ce motif étaient réellement des regex.YARA vous donne juste la position de l'octet et la chaîne correspondante, mais il ne peut pas vous dire si ces octets sont en UTF-8, UTF-16, Latin-1, etc. (ou rien de tout cela). Je voulais aussi comprendre ce qui se passait dans la région des octets correspondants et pas seulement dans les octets correspondants. En d'autres termes, je voulais délimiter les octets immédiatement avant et après ce qui a été trouvé.
C'est là qu'intervient Le Yaralyzer, qui vous permet de scanner rapidement les régions autour des correspondances tout en vous montrant à quoi ressembleraient ces régions si elles étaient forcées dans divers encodages de caractères.
Le Yaralyzer n'est pas un outil de rétro-ingénierie de logiciels malveillants. Il ne peut pas faire les choses qu'un outil comme CyberChef fait et il n'essaie pas. Il vise plutôt à vous donner un aperçu visuel rapide des régions suspectes dans le binaire afin que vous puissiez cibler les zones que vous souhaitez inspecter avec un outil plus sérieux.
Installez-le avec pipx ou pip3. pipx est une solution légèrement meilleure car elle garantit que tous les paquets installés avec celui-ci seront isolés du reste de votre environnement Python local. Bien sûr, si vous n'avez pas vraiment d'environnement Python local, ce point est sans objet et vous pouvez librement installer avec pip/pip3.
pipx install yaralyzer
Exécutez yaralyze -h pour voir les options de ligne de commande (capture d'écran ci-dessous).

Pour des informations sur l'exportation d'images SVG, HTML, etc., voir Exemple de sortie.
Si vous placez un fichier nommé .yaralyzer dans votre répertoire personnel ou le répertoire de travail courant, les variables d'environnement spécifiées dans ce fichier .yaralyzer seront ajoutées à l'environnement à chaque invocation de yaralyzer. Cela fournit un mécanisme pour configurer en permanence diverses options de ligne de commande afin d'éviter de devoir les taper encore et encore. Consultez les commentaires dans le fichier exemple .yaralyzer.example pour plus d'informations.
Un seul fichier .yaralyzer sera chargé et le .yaralyzer du répertoire de travail prime sur celui du répertoire personnel.
Yaralyzer est la classe principale. La documentation auto-générée pour les différentes classes et méthodes de Yaralyzer se trouve ici. Elle dispose d'une variété de constructeurs alternatifs supportant :
.yara)bytes)Si vous souhaitez itérer sur les objets BytesMatch (comme un objet re.Match pour une correspondance YARA) et BytesDecoder (suit les statistiques des tentatives de décodage) utilisés par le Yaralyzer, vous pouvez le faire ainsi :
from yaralyzer.yaralyzer import Yaralyzer
yaralyzer = Yaralyzer.for_rules_files(['/secret/rule.yara'], 'lacan_buys_the_dip.pdf')
for bytes_match, bytes_decoder in yaralyzer.match_iterator():
do_stuff()
Si vous obtenez une yara.Error avec un code d'erreur numérique, vous pouvez vérifier ce que ce code peut signifier ici.
Le Yaralyzer peut exporter des visualisations vers HTML, texte ANSI coloré, et des images vectorielles PNG et SVG en utilisant la fonctionnalité d'exportation de fichiers fournie par Rich ainsi qu'un format JSON texte brut (quelque peu limité).
Si vous souhaitez exporter des images .png comme celles ci-dessous directement depuis Yaralyzer, vous devrez faire l'une de ces choses :
brew install --cask inkscape)img lors de l'installation de Yaralyzer, ce qui installera cairosvg : pipx install yaralyzer[img]. Vous devrez également installer manuellement l'exécutable CairoSVG de différentes manières selon votre système d'exploitation, voir la documentation CairoSVG pour les détails.Dans notre expérience, Inkscape et CairoSVG fonctionnent tous deux, bien que nous ayons observé quelques problèmes d'affichage dans la sortie rendue avec CairoSVG sur les SVG rendus par Yaralyzer, donc Inkscape est l'option recommandée.


chardet.detect() pense de la probabilité que vos octets soient dans un encodage/langue donné :
Les contributions sont plus que bienvenues ; voir CONTRIBUTING.md pour les détails sur la configuration de l'environnement, l'exécution de la suite de tests, etc. Il y a aussi une liste de tâches à faire (TODO) sur le travail nécessaire.
Comme je l'étais jusqu'à récemment. ↩