
Cadre de traitement distribué de logiciels malveillants basé sur Python, Redis et S3.
Cadre de traitement distribué de logiciels malveillants basé sur Python, Redis et S3.
Karton est un cadre robuste pour créer des backends d'analyse de logiciels malveillants flexibles et légers. Il peut être utilisé pour connecter des systèmes d'analyse de logiciels malveillants* en un pipeline robuste avec très peu d'effort.
Nous sommes dans le métier de l'automatisation depuis longtemps. Nous faisons face à de plus en plus de menaces, et nous devons tout automatiser pour suivre le rythme des incidents. Pour cette raison, nous nous retrouvons souvent avec de nombreux scripts assemblés avec canard ruban adhésif et WD-40. Ces scripts sont écrits par des analystes dans le feu de l'action, fragiles et laids - mais ils fonctionnent, et produisent des renseignements qui doivent être stockés, traités davantage, envoyés à d'autres systèmes ou partagés avec d'autres organisations.
Nous avions besoin d'un moyen de prendre nos scripts PoC et de les insérer facilement dans notre pipeline d'analyse. Nous voulions également surveiller leur exécution, centraliser les journaux, améliorer la robustesse, réduire l'inertie de développement... C'est exactement dans ce but que nous avons créé Karton.
* Bien que Karton ait été conçu pour l'analyse de logiciels malveillants, il fonctionne très bien dans tout projet orienté microservices.
L'installation est aussi simple qu'une seule commande pip install :
pip3 install karton-core
Pour configurer l'ensemble de l'environnement backend, vous aurez également besoin d'un stockage compatible S3 et de Redis, voir la documentation pour plus de détails.
Pour utiliser Karton, vous devez fournir une classe qui hérite de Karton.
from karton.core import Karton, Task, Resource
class GenericUnpacker(Karton):
"""
Performs sample unpacking
"""
identity = "karton.generic-unpacker"
filters = [
{
"type": "sample",
"kind": "runnable",
"platform": "win32"
}
]
def process(self, task: Task) -> None:
# Get sample object
packed_sample = task.get_resource('sample')
# Log with self.log
self.log.info(f"Hi {packed_sample.name}, let me analyze you!")
...
# Send our results for further processing or reporting
task = Task(
{
"type": "sample",
"kind": "raw"
}, payload = {
"parent": packed_sample,
"sample": Resource(filename, unpacked)
})
self.send_task(task)
if __name__ == "__main__":
GenericUnpacker.main()
Ce package fournit également un utilitaire en ligne de commande appelé « karton ». Vous pouvez l'utiliser pour des tâches de gestion simples (mais il n'est pas conçu comme un outil de gestion complet).
$ karton configure # create a new configuration file
$ karton list -s # list current binds
karton name version karton
------------------------------------------------------------------------
karton.yaramatcher 1.2.0 5.3.0
karton.autoit-ripper 1.2.1 5.3.3
karton.mwdb-reporter 1.3.0 5.3.2
$ karton logs # start streaming all system logs
$ karton delete karton.something # remove unused bind (will be GCed by system during the next operation)
Certains systèmes Karton sont universels et utiles à tous. Nous avons décidé de les partager avec la communauté.
Ce dépôt. Il contient le service karton.system - le service principal, responsable de la répartition des tâches au sein du système. Il contient également le module karton.core, utilisé comme bibliothèque par d'autres systèmes.
Un petit tableau de bord Flask pour la gestion et la surveillance des tâches et des files d'attente.
Le « routeur ». Il reconnaît les échantillons/fichiers et produit différents types de tâches en fonction du format du fichier. Grâce à cela, d'autres systèmes peuvent écouter uniquement les tâches d'un format spécifique (par exemple, uniquement les archives zip).
Extracteur d'archives générique. Les archives téléchargées dans le système seront extraites, et chaque fichier sera traité individuellement.
Extracteur de logiciels malveillants. Il utilise des règles Yara et des modules Python pour extraire la configuration statique des échantillons et analyses de logiciels malveillants. C'est une canne à pêche, pas un poisson - nous ne partageons pas les modules eux-mêmes. Mais il est facile d'écrire les vôtres !
Une partie très importante du pipeline. Le reporter soumet tous les fichiers, tags, commentaires et autres renseignements produits lors de l'analyse à MWDB. Si vous n'utilisez pas encore MWDB ou préférez d'autres backends, il est facile d'écrire votre propre reporter.
Exécute automatiquement les règles Yara sur tous les fichiers du pipeline et étiquette les échantillons de manière appropriée. Règles non incluses ;).
Système Karton qui décode les fichiers encodés avec des méthodes courantes, comme hex, base64, etc. (Vous ne croirez pas à quel point c'est courant).
Un petit wrapper autour de AutoIt-Ripper qui extrait les scripts et ressources AutoIt intégrés à partir d'exécutables AutoIt compilés.
Système automatisé d'analyse de logiciels malveillants en boîte noire avec le moteur DRAKVUF sous le capot, qui ne nécessite pas d'agent sur le système d'exploitation invité.
Voici comment ces systèmes peuvent être utilisés pour former un pipeline de base d'analyse de logiciels malveillants :
Un service modulaire du framework Karton qui décompresse les packers courants comme UPX et autres en utilisant le framework Qiling.
Un utilitaire modulaire riche en fonctionnalités d'extraction de configuration de logiciels malveillants pour MalDuck
Classifieur Detect-It-Easy pour le framework Karton
Module de dépaquetage RetDec pour le framework Karton
Plateforme de similarité de logiciels malveillants avec la modularité en tête.
Un pipeline évolutif d'analyse de vulnérabilités des pilotes Windows.
