____ __ __ _ _
| _ __ _ _ __ ___ _ __ | / | __ _ ___| |__ ___| |_ ___ ________
| |_) / _` | '_ / _ '__| | |/| |/ _` |/ __| '_ / _ __/ _ /_______/
| __/ (_| | |_)| __/ | | | | | (_| | (__| | | | __/ || __/ _______
|_| __,_| .__/___|_| |_| |_|__,_|___|_| |_|___|_____| /_______/
|_| @==|;;;;;;>
Paper Machete (PM) orchestre le ninja binaire et le grakn.ai pour faciliter l'analyse binaire statique dans le but de trouver des bogues dans les logiciels. PM exploite le Ninja Mlil SSA binaire pour extraire une signification sémantique sur les instructions individuelles, les opérations, le registre / l'état variable et le flux de contrôle global.
PM migre ces données dans GRAKN - un graphique de connaissances qui nous donne la possibilité de définir des ontologies spécifiques au domaine pour les données et d'écrire des règles d'inférence puissantes pour former des relations entre les données que nous ne voulons pas (ou ne pouvons pas) stocker explicitement. Heeh, à quel point est-ce bien?
Ce projet a été publié conjointement avec un discours DerbyCon 2017 intitulé "Aider Analysis statique: Découvrir les vulnérabilités dans les cibles binaires à travers des inférences de graphiques de connaissances". Vous pouvez regarder cette conversation ici.
Le prototype initial de Paper Machete et la base de code public ont été développés par des chercheurs en sécurité au Battelle Memorial Institute. À mesure que ce projet mûrit, nous espérons que vous le trouverez utile dans vos propres recherches et envisagez de contribuer au projet.
La suite BNIL d'ILS est facile à travailler avec, agréablement verbeux et lisible par l'homme. À tout moment, nous pouvons décider de tirer parti d'autres niveaux et formes de l'IL avec peu d'efforts de développement de notre part. Lorsque vous ajoutez à cela la possibilité de soulever plusieurs architectures et d'écrire des haltérophiles personnalisés, nous avons peu de raisons de ne pas utiliser BNIL.
Le langage des requêtes de Grakn (Graql) est facile à apprendre et intuitif, ce qui est extrêmement important dans les premiers stades de cette recherche tandis que nous réduisons encore les requêtes pour modéliser les modèles de vulnérabilité que les chercheurs recherchent lors de l'analyse statique.
La capacité d'écrire nos propres ontologies spécifiques au domaine nous permet d'expérimenter rapidement avec de nouvelles idées de requête et des façons de rendre nos requêtes moins complexes. Lorsque nous rencontrons un cas où nous pensons "Gee, si j'avais juste accès à la relation entre ...", nous pouvons modifier nos règles d'ontologie et d'inférence pour obtenir ces informations.
Bien que le jeu final de PM soit d'éliminer le besoin de requêtes écrites par l'homme, le fait est que nous partons de la case départ. Ce qui signifie la recherche à la main beaucoup de requêtes pour modéliser les modèles que les chercheurs de vulnérabilité humaine recherchent lors de la chasse aux insectes.
Paper Machete nécessite BinaryNinja V1.1, Grakn V1.4.2, le pilote Grakn Python et le Java Jre
Nous avons inclus quelques requêtes de base pour vous aider à démarrer si vous voulez jouer avec PM. Comme vous pouvez l'imaginer, il n'y a pas de requête "Silver Sulte" qui trouvera toutes les manifestations d'une classe de vulnérabilité spécifique. Pour cette raison, nous avons inclus des versions pour chaque requête CWE. Alors que nous ajoutons de nouvelles méthodes pour trouver le même CWE, nous ajouterons des scripts avec les numéros de version incrémentés à différencier.
cwe_120_v1.py - Tests d'utilisation de la fonction «get ()» dangereuse (CWE-120)
cwe_121_v1.py - Tests pour les débordements de tampon (CWE-121)
cwe_129_v1.py - Tests pour les vérifications des limites manquantes (CWE-129)
cwe_134_v1.py - Tests pour les vulnérabilités de chaîne de format (CWE-134)
cwe_788_v1.py - Tests pour les limites manquantes Vérifier les index de tableau (CWE-788)
Pour une utilisation de base, exécutez le script paper_machete.py et suivez les invites. Pour une utilisation plus avancée, veuillez lire le wiki.
En règle générale, vous commencerez par l'option [1] et vous vous dirigez vers l'option [3] . Si vous rencontrez des problèmes avec l'option d'utilisation de GRAKN [4] pour réinitialiser GRAKN à un état propre et réessayer.
... banner ...
[1] Analyze a binary file
[2] Migrate a JSON file into Grakn
[3] Run all CWE queries
[4] Clean and restart Grakn
[5] Quit
L'option [1] répertorie tous les fichiers exécutables dans le répertoire /analysis . Placez donc tous les exécutables que vous souhaitez analyser en /analysis . Cette option exécutera pmanalyze.py et générera un fichier JSON dans le répertoire /analysis .
Une fois que vous avez analysé des fichiers avec [1] et produit des fichiers JSON résultant, ils apparaîtront comme un choix dans l'option [2] . La sélection d'un fichier JSON dans l'option [2] migrera les données dans GRAKN.
Maintenant que vous avez des données dans GRAKN, vous pouvez utiliser l'option [3] . Cela lancera tous les scripts /queries contre l'espace de votre choix. Si vous écrivez vos propres modèles de requête, jetez-les simplement dans /queries et l'option [3] les exécuteront également.