
Cadre de traitement distribué de logiciels malveillants basé sur Python, Redis et S3.
Framework distribué de traitement de malwares basé sur Python, Redis et S3.
Karton est un framework robuste pour créer des backends d'analyse de malwares flexibles et légers. Il peut être utilisé pour connecter des systèmes d'analyse de malwares* dans un pipeline robuste avec très peu d'effort.
Nous sommes dans le domaine 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 rafistolés avec du scotch chatterton et du WD-40. Ces scripts sont écrits par des analystes dans le feu de l'action, fragiles et peu élégants - mais ils fonctionnent, et produisent du renseignement qui doit être stocké, traité davantage, envoyé à d'autres systèmes ou partagé 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 aussi surveiller leur exécution, centraliser la journalisation, 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 avec l'analyse de malwares à l'esprit, il fonctionne parfaitement dans tout projet orienté microservices.
L'installation est aussi simple qu'une seule commande pip install :
pip3 install karton-core
Afin de configurer l'environnement backend complet, vous aurez également besoin d'un stockage compatible S3 et de Redis, consultez 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 paquet 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 à tout le monde. Nous avons décidé de les partager avec la communauté.
Ce dépôt. Il contient le service karton.system - service principal, responsable de la distribution des tâches au sein du système. Il contient également le module karton.core, qui est 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 divers types de tâches selon le format du fichier. Grâce à cela, les autres systèmes peuvent ne surveiller que les tâches d'un format spécifique (par exemple, uniquement les archives zip).
Décompresseur d'archives générique. Les archives téléversées dans le système seront extraites, et chaque fichier sera traité individuellement.
Extracteur de malwares. Il utilise des règles Yara et des modules Python pour extraire la configuration statique à partir d'échantillons de malwares et d'analyses. 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 durant l'analyse à MWDB. Si vous n'utilisez pas encore MWDB ou préférez simplement 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 tague 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 croiriez pas à quel point c'est courant).
Un petit wrapper autour de AutoIt-Ripper qui extrait les scripts et ressources AutoIt embarqués dans les exécutables AutoIt compilés.
Système automatisé d'analyse de malwares en boîte noire avec le moteur DRAKVUF sous le capot, qui ne nécessite pas d'agent sur l'OS invité.
Voici comment ces systèmes peuvent être utilisés pour former un pipeline d'analyse de malwares basique :
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 pour l'extraction de configuration de malwares pour MalDuck
Classificateur Detect-It-Easy pour le framework Karton
Module de décompression RetDec pour le framework Karton
Plateforme de similarité de malwares pensée pour la modularité.