
Paper, dados e código da investigação sobre a manifestação potencial de vulnerabilidades de segurança por meio de diversas análises e inferências referentes a RFCs da Internet
Artigo original e scripts auxiliares para ajudar a analisar aspectos de segurança dos RFCs da Internet.
Este repositório contém uma revisão da segurança de RFCs (escrita no estilo de um RFC), além de vários scripts auxiliares em python que foram usados para obter os dados necessários para a análise subjacente e para gerar o código Cypher (banco de dados de grafos neo4j) necessário para apoiar a análise do corpus de RFCs num banco de dados de grafos.
Os scripts neste repositório são apenas scripts rápidos que extraem as informações necessárias para o whitepaper e as colocam num formato CSV que pode ser usado para importação em um banco de dados de grafos neo4j (neste caso). Os scripts não são de forma alguma exaustivos em termos dos dados extraídos, servindo apenas como exemplos/modelos.
Para extrair as relações de e-mail e obsolescência entre RFCs, execute os seguintes scripts no corpus de RFCs, que irão gerar arquivos CSV das relações:
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
Em seguida, importe os arquivos CSV para o neo4j, por exemplo:
MERGE (rfc:RFC {name: csvLine.rfc})
MERGE (email:Email {name: csvLine.email})
CREATE (email)-[:CONTRIBUTED_TO]->(rfc)
Para as relações de obsolescência, importe-as no neo4j, por exemplo:
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)
Em seguida, podem ser utilizadas várias consultas, conforme documentado no whitepaper, para obter as informações necessárias e criar os grafos conectados de relações desejados.
Postagem de blog relacionada: https://research.nccgroup.com/?p=6870