neo4j的介绍和数据导入
因研究需要引入了对图数据库neo4j的应用,本文主要介绍为为什么在安全威胁中引入图数据库,以及图数据库neo4j的优点,同时介绍了neo4j的数据导入,基于python操作neo4j。
1.安全背景
大型入侵检测基础设施中产生的大量误报使操作人员很难将误报与真正的攻击区分开来。减少这一问题的一种方法是使用元警报或规则,它们可以识别报警流中的已知攻击模式。这种方法的明显风险是,规则库可能不完整,对于每个真正的攻击配置文件,特别是那些新的。分析的目的是找出构成网络真正攻击的各种攻击特征和IP地址之间的关联,可以将网络抽象成有向图处理(图1)。多日志的关联,复杂的知识(图2)未来不得不引入图数据库,本篇介绍图数据库了neo4j。
2.Neo4j的特点
Neo4j是一个开源,无Schema,没有SQL的图形数据库。图形数据库是以图形结构的形式存储数据的数据库。它以节点,关系和属性的形式存储应用程序的数据。 存储的节点和关系非常的大(图3),图数据库主要用于存储更多的连接数据,非常适合网络安全场景。
3.数据的导入:
3.1csv数据集的导入:
导入数据关系命令:
-----------1.导入节点
LOAD CSV WITH HEADERS FROM "file:///node.csv" AS line
MERGE (ip:addr{ip:line.node,name:line.node})
----------2.导入关键字段关联数据
LOAD CSV WITH HEADERS FROM "file:///realtionship.csv" AS line
MATCH (from:addr{ip:line.src_ip}),(to:addr{ip:line.dst_ip})
MERGE n=(from)-[r:attacking{id:line.id,a1:line.a1,a2:line.a2,.....}]->(to)
RETURN n limit 100
3.2 python操作
(1)安装python第三方库
1.pip install py2neo
(2)相关代码
from py2neo import Graph,Node,Relationship
graph = Graph(host = 'localhost',auth =('account','password'))
#创建节点
a = Node('ip',name ='ip1',city = 'hangzhou')
b = Node('ip',name = 'ip2',city = 'france')
graph.create(a)
graph.create(b)
#创建关联和之间的安全属性关系
a_attack_b = Relationship(a,'signature',b,since = '2020/04/20')#对应图1
graph.create(a_attack_b)