
Article, données et code issus de l'étude sur la manifestation potentielle de vulnérabilités de sécurité à travers diverses analyses et inférences concernant les RFC Internet.
Document original et scripts d'assistance pour analyser les aspects de sécurité des RFC Internet.
Ce dépôt héberge une revue de la sécurité des RFC (rédigée dans le style d'une RFC), ainsi que divers scripts d'assistance Python qui ont été utilisés pour obtenir les données nécessaires à l'analyse sous-jacente, et pour générer le code Cypher (base de données de graphes neo4j) nécessaire pour prendre en charge l'analyse du corpus des RFC via une base de données de graphes.
Les scripts de ce dépôt sont de simples scripts rapides qui extraient les informations nécessaires au livre blanc et les placent dans un format CSV pouvant être importé dans une base de données de graphes neo4j (dans ce cas). Ces scripts ne sont en aucun cas exhaustifs en termes de données extraites ; ils servent donc uniquement d'exemples/modèles.
Pour extraire les relations d'email et d'obsolescence entre les RFC, exécutez les scripts suivants sur le corpus de RFC, qui généreront des fichiers CSV des relations :
https://github.com/m4ttl/RFC-Security-Research/blob/main/RFC%20Email%20Processing/email-Cypher.py https://github.com/m4ttl/RFC-Security-Research/blob/main/RFC%20Precedent%20Processing/parsejsoncypher.py
Importez ensuite les fichiers CSV dans neo4j, par exemple :
MERGE (rfc:RFC {name: csvLine.rfc})
MERGE (email:Email {name: csvLine.email})
CREATE (email)-[:CONTRIBUTED_TO]->(rfc)
Pour les relations d'obsolescence, importez-les dans neo4j, par exemple :
LOAD CSV WITH HEADERS FROM 'file:///standalone.csv' AS csvLine
MERGE (rfc:RFC {name: csvLine.rfc, title: csvLine.title})
LOAD CSV WITH HEADERS FROM 'file:///updated_by.csv' AS csvLine
MERGE (rfc:RFC {name: csvLine.rfc, title: csvLine.title})
MERGE (updaterfc:Updaterfc {name: csvLine.updatedby})
CREATE (rfc)-[:UPDATED_BY]->(updaterfc)
LOAD CSV WITH HEADERS FROM 'file:///updates.csv' AS csvLine
MERGE (rfc:RFC {name: csvLine.rfc, title: csvLine.title})
MERGE (updatesrfc:Updatesrfc {name: csvLine.updates})
CREATE (rfc)-[:UPDATES]->(updatesrfc)
LOAD CSV WITH HEADERS FROM 'file:///obsoleted_by.csv' AS csvLine
MERGE (rfc:RFC {name: csvLine.rfc, title: csvLine.title})
MERGE (obsoletedbyrfc:Obsoletedbyrfc {name: csvLine.obsoletedby})
CREATE (rfc)-[:OBSOLETED_BY]->(obsoletedbyrfc)
LOAD CSV WITH HEADERS FROM 'file:///obsoletes.csv' AS csvLine
MERGE (rfc:RFC {name: csvLine.rfc, title: csvLine.title})
MERGE (obsoletesrfc:Obsoletesrfc {name: csvLine.obsoletes})
CREATE (rfc)-[:OBSOLETES]->(obsoletesrfc)
On peut ensuite utiliser les différentes requêtes documentées dans le livre blanc pour interroger les informations nécessaires et créer les graphes de relations connectés souhaités.
Article de blog récapitulatif associé : https://research.nccgroup.com/?p=6870