机器对抗知识图谱构建技术研究与实现 1 1 绪论 1.1 研究背景 近年来,随着网络技术的不断发展,网络攻击手段也在不断进化升级,勒索软件攻 击、远程数据篡改、敏感数据窃取等网络攻击事件层出不穷,攻击者根据信息设备中存 在的各种漏洞采取有针对性的攻击,不仅中断了网络平台和服务器的正常运作,也对企 业与个人造成巨额损失,为网络空间安全保障工作带来了严峻的挑战。 为了应对复杂多变的网络威胁,计算机中设立了防火墙、入侵检测系统(Intrusion Detection System,简称 IDS)和入侵检测和预防系统(Intrusion Detection & Prevention System,简称 IDPS)等安全监控设施,网络安全机构与厂商建立信息库和安全公告以共 享大量网络安全数据[12]。然而,这些网络安全数据因其多源、异构、分散化的特点导致 信息之间相互独立,即使在现代安全信息和事件管理(Security Information and Event Management,简称 SIEM)系统的帮助下,从大量计算机中收集安全日志事件并进行聚 合,也依旧存在噪声多、理解难和不可操作等问题,缺少对不同来源情报的集成和对现 有数据的有效解释[1]。因此,如何对多源异构的数据进行提取与聚合、基于数据聚合后 的结果推理挖掘潜在信息,并利用这些信息支持安全分析师做出有效决策是网络安全领 域内的重要问题。 1998 年,Tim Berners Lee 提出了语义网的概念,期望将互联网中的数据相互链接, 并使数据背后的语义能被机器所理解。随着人工智能与大数据的发展,知识图谱的概念 由 Google 于 2012 年首次提出,用以提高其搜索引擎返回结果的质量。深度学习等技术 兴起后,知识图谱的功能和应用场景也逐渐多样化,在社会医疗、金融投资、政府管理、 电子商务和安全等领域内都发挥着重要作用。作为一种知识表示方式,知识图谱能够将 真实世界中的实体抽象化,利用唯一标识符识别每个实体,将实体的内在属性抽象成键 值对进行存储,并对实体与实体之间的关系进行定义连接,从而用一种简单直观的模式 有效反映了真实世界的各种知识。 由于知识图谱以统一数据结构存储数据,大大改善了碎片化数据的冗余问题,图形 化的表示方式也使分散化数据之间的联系更加紧密、信息更加清晰明了,所以近年来在 各种领域内都得到了广泛的应用与持续性的发展。相比关系型数据库,图数据库将所有 数据都以图的形式存储起来,在数据查询和关联关系的处理上省去了多个表之间的繁琐 操作,数据的可操作性非常强,能够保证较高的处理性能,有效提升工作效率,图表示 方式也使得数据表达更加自然,符合人们对具体事物的认知。 网络安全领域是一个庞大的研究领域,包括网络安全、web 安全、移动安全、云安 全等研究方向,如果能够对大量数据进行收集、处理与分析,并有针对性的构建特定方 机器对抗知识图谱构建技术研究与实现 2 向的知识图谱,将帮助解决该领域内的一些重点问题,如攻击溯源、攻击检测、情报分 析等。同时,海量数据的整合也能够减轻安全分析师在数据搜寻方面的负担,必要时候 也能够根据现有的知识图谱给出合理的安全建议,为数据分析提供有力支撑。 1.2 国内外研究现状 1.2.1 知识图谱研究现状 近年来,国内外学术界和工业界的许多学者都在密切关注知识图谱构建与应用技术 的发展,知识图谱由人工构建过渡到群体智慧构建,再发展至自动获取构建,有许多聚 焦于知识图谱构建的研究都取得了不错的研究成果。 人工构建的知识图谱主要依靠人力,可以保证较高的数据精度,但效率相对较低。 WordNet 是普林斯顿大学开发的英文语料库,以网状结构来组织英文词汇,将含义相近 的词汇聚集成同义词集合,并用概念关系将它们连接起来,用于更好地理解语义。Cyc 项目创立时间早,基于维基百科数据构建了 320 万条断言、30 万个概念和 15000 个谓 词,是一个极具代表性的大型知识库。HowNet 则是一个网状结构的常识知识库,以汉 语和英语词汇为主,主要反映概念特性和概念间的各种关系。 借助数据获取技术,目前可以通过网络等渠道收集到大量的结构化与非结构化的数 据用于知识图谱的构建。DBpedia 主要从维基百科中提取结构化的实体和关系信息,构 建本体来组织获取到的知识,数据来源非常广泛并提供多种语言,迄今为止包含了超过 2.28 亿个实体。YAGO 是一个集成了维基百科、WordNet 和 GeoNames 等数据源的多语 言知识库,融合了多种分类体系,并加入了时间和空间知识,包括近 20 亿三元组和 6400 万实体。Freebase 的数据来源包括人工构建与网络获取两种渠道,通过从维基百科、Flickr 等网站获取结构化数据,并加以人工处理与归纳,已经包含了近 6800 万个实体和超过 24 亿条事实信息。上述知识库均以 RDF(Resource Description Framework,简称 RDF) 为数据模型,都是非常具有代表性的开放链接数据库。 近些年,国内也在知识图谱构建方面有了更进一步的研究成果。Zhishi.me 是我国在 中文通用知识图谱构建领域内的首次尝试,从三大中文百科百度百科、互动百科以及维 基百科中提取结构化数据,并借助规则链接等价实体,包含超 1000 万个实体和 1.25 亿 个三元组。清华大学在 2019 年发布了 XLORE,该图谱融合维基百科和百度百科,实现 了中英文平衡,具有丰富的概念和语义信息,并提供多种接口,拓展出了许多应用实例 与服务。 1.2.2 网络安全知识图谱研究现状 目前对于知识图谱技术的研究已经相对成熟,由于知识图谱能够减少数据冗余,有 效地将实体和实体间的关系存储在图数据库中,为人们分析处理数据提供有力支撑,在 国内外已经有许多研究将知识图谱应用于网络安全领域内,并取得了不错的成果。 机器对抗知识图谱构建技术研究与实现 3 目前为止,已经有许多学者将本体论运用在了网络安全知识图谱的构建过程中,取 得了一定成效,也充分说明了在网络安全知识图谱构建中利用本体的优势。Undercoffer[3] 等人针对网络攻击,通过对超过 4000 种计算机攻击及其攻击策略进行分析,利用 DAML+OIL 语言构建了本体模型,最终用于入侵检测。Joshi[4]等人在 Undercoffer 提出 的本体模型基础上,派生出了覆盖面更广的网络安全本体模型,包含 11 种实体类型, 消除了前者在应用范围上的局限性,可用于早期漏洞的识别、缓解及预防。More[5]等人 也将 Undercoffer 的本体模型及其知识库做了进一步扩展,在推理逻辑中增加了规则, 同时聚合大量异构数据,基于语义丰富的知识库检测网络威胁或漏洞。 此外,近些年国内外学者们也通过不断探索与实践,提出了许多结构清晰、性能出 众的网络安全知识图谱构建方案。Zhengjun Liu[2]等人就提出了一种基于 STIX 的网络安 全知识图谱本体建模方法,利用本体模型从数据中建立实体、实体属性以及实体间的相 互关系,具有数据冗余少、层次结构清晰的特点。Yixuan Wang[8]等人基于知识图谱建立 了一个网络安全态势感知模型 KG-NSSA,提供了基于资产的网络安全知识图谱的构建 方案,并通过属性图挖掘和相似度计算有效反映了攻击场景。Yan Jia[9]等人利用 Stanford NER 从非结构化数据中抽取实体并构建本体模型,通过计算公式和 path-ranking 算法进 行知识推理完善了网络安全知识图谱。 廉龙颖[13]利用 Bi-LSTM+CRF 模型进行实体识别,通过本体与知识图谱映射机制完 成知识图谱的构建并将其可视化,为基于信息检索技术的网络空间安全知识服务提供了 依据。王通[18]等人针对威胁情报,提出监督性的深度学习模型实现实体和实体关系的自 动抽取,根据威胁情报模型 STIX 和攻击模式模型 CAPEC 形成规范的本体结构,构建 了威胁情报知识图谱。高见[20]等人基于 STIX 规范,构建了一个可共享、重用和扩展的 威胁情报本体模型,使数据从非结构化转换到结构化,以知识图谱的形式表示数据,为 网络安全分析者和决策者提供了重要依据。 1.3 课题内容及意义 由于网络环境的复杂性、多变性和脆弱性,网络安全威胁是长期客观存在的。对于 不断升级进化的网络威胁与信息设备自身存在的诸多漏洞,网络安全分析师往往很难在 短时间内快速理清网络攻击之间的内在联系并针对它们做出有效的安全决策。本课题旨 在收集大量网络安全相关数据,设计构建本体模型并将数据以统一形式存储在图数据库 中,同时搭建神经网络模型实现潜在攻击的自动识别,基于知识推理补全知识图谱并给 出合理的安全建议,从而帮助网络安全分析师更有效地监测网络安全,并为其决策提供 有力的数据支撑。 本课题的研究内容主要可分为本体建模、知识图谱构建、攻击监测与应用系统搭建 四个部分。 在本体建模部分,需要根据网络安全领域内的相关知识,将实际网络安全空间中的 机器对抗知识图谱构建技术研究与实现 4 知识抽象成概念模型,对模型中的概念、概念属性和概念之间的关系做出明确的定义, 清晰规划知识图谱的整体结构,以指导后续知识图谱的构建。 在知识图谱构建部分,首先将本体模型转换成 RDF 格式导入 Neo4j 图数据库中, 形成预定义的实体、属性与关系类型。基于收集到的结构化和非结构化的数据,先对非 结构化数据进行实体抽取将其转换为结构化数据,再在预处理后将实体与实体间的关系 以指定结构存储进数据库中,完成所有实例的导入。 在攻击监测方面,对攻击数据集进行分析与理解后,根据数据特点建立一个基于 Tensorflow 框架的神经网络模型,然后对读入的数据进行数据清洗和处理整合,去掉数 据集中的无用信息,并对数据的特征进行编码,利用重采样解决样本数据不平衡的问题, 使用批量梯度下降训练模型,并在训练结束后利用数据集计算模型的各个性能指标,使 模型能够较为精确的预测出特定攻击类型。 在应用系统搭建方面,基于 Django 框架实现前后端交互,利用 ECharts 实现知识图 谱的可视化,在系统中展示构建好的知识图谱结构,允许用户对图谱进行查询并可视化 查询结果。除此之外,系统也提供对知识图谱内实体与关系的各种修改功能,帮助安全 分析师快速获取特定漏洞的解决方案,并实时监测潜在攻击。一旦识别出潜在攻击,则 将攻击添加至图谱中并在系统内给出警示,等待安全分析师的进一步处理与确认。 机器对抗知识图谱构建技术研究与实现 5 3 网络安全知识图谱构建 3.1 概述 本课题的网络安全知识图谱构建流程主要可分为以下 4 个阶段: (1) 根据网络安全领域内的相关知识,为网络安全知识图谱构建本体模型,定义 领域内的概念、概念属性以及观念之间的关系。 (2) 收集网络安全相关的结构化和非结构化数据,对非结构化数据进行实体抽取, 理解并分析数据集的内容和结构,将不同来源的数据集进行知识合并。 (3) 将本体模型从 OWL 格式转换成 RDF 格式,利用 Cypher 语句将其导入 Neo4j 图数据库中,形成实体类别、属性类别和关系类别。 (4)结合 py2neo 工具和 Cypher 语句,编写命令对数据集进行数据清洗,将实体、 属性和关系按照本体模型提供的模式批量导入 Neo4j 数据库中,构成网络安全知识图谱。 3.2 本体模型设计 图 3-1 本体组织结构 图 3-1 为本体模型的组织结构。本课题注重网络安全中的机器对抗领域,即网络攻 击与防御。通过对网络安全领域以及网络安全数据集的调研,主要设置了五种实体类型, 分别是漏洞(Vulnerability)、攻击(Attack)、产品(Product)、厂商(Producer)和用户 PC 机(PC)。实体属性方面,漏洞实体包含漏洞名称、危险系数、漏洞分类、漏洞描述 以及解决方案;攻击实体包含攻击分类、攻击 ID、攻击时间和攻击特征,需要注意的是, 攻击特征为包括连接持续时间(duration)、协议类型(protocol type)等在内的 41 个特 机器对抗知识图谱构建技术研究与实现 6 征,此处为了简化图形而统一标识为攻击特征;产品实体包含产品名称和产品版本;PC 机实体包含 PC 机特征和用户的 IP 地址,这里的 PC 机特征与攻击特征一致,用于识别 PC 机是否遭受到了攻击;厂商实体包含厂商名称。 表 3.1 本体模型通用语义关系 关系名称 关系模式 关系实例 关联 < 实体,关系,实体 > < Microsoft,开发,Microsoft Frontpage > 实例 < 概念,实例,实体 > < 漏洞,实例,CVE-1999-1016 > 属性 < 实体,属性,属性值 > < CVE-1999-1016,危险指数,中危 > 在关系方面,本体模型中概念之间的关系又可以分成通用语义关系和自定义语义关 系两类。本课题本体模型的通用语义关系如表 3.1 所示,共有“关联”、“实例”和“属 性”三种关系。其中“关联”指两实体之间存在某种关联, “实例”指某一实体是对应概 念的一个实例, “属性”则指实体具有某一属性,该属性拥有属性值。每种通用语义关系 都给出了对应的关系实例以帮助理解。 表 3.2 本体模型自定义语义关系 关系名称 特征性 关系模式 关系实例 利用 / < 攻击,利用,漏洞 > < 攻击 21,利用,CVE-2018-8896 > 具有 / < 产品,具有,漏洞 > < 2345_Security_Guard,具有,CVE-2018-8896 > 交互 对称性 < 产品,交互,PC > < 2345_Security_Guard,交互,216.58.220.99> < PC,交互,产品 > < 216.58.220.99,交互,2345_Security_Guard > 遭受 / < PC,遭受,攻击 > < 216.58.220.99,遭受,攻击 21 > 开发 / < 厂商,开发,产品 > < Microsoft,开发,Microsoft Frontpage > 除了通用语义关系之外,本课题的本体模型还自定义了一些领域相关的语义关系。 如表 3.2 所示,该本体模型的自定义语义关系包括“利用”、“具有”、“交互”、“遭受” 和“开发”五类。其中“利用”指攻击利用特定漏洞发起攻击; “具有”指某一产品具有 某种漏洞; “交互”指产品与 PC 之间的进行交互,容易看出若 PC 与产品交互,则产品 也一定与 PC 交互,因此该关系具有对称性约束; “遭受”指 PC 机遭受到某种攻击; “开 发”指厂商开发出自己的产品。类似地,每种自定义语义关系都给出了对应的关系实例 以帮助理解。 3.3 本体构建 本体模型完成设计规划之后,本课题着手真正构建一个与设计相符的本体模型。目 前已经有许多较为成熟的本体建模工具,可以非常简便而高效地完成本体建模工作。本 课题选用本体建模工具 Protégé 来进行本体的构建。 Protégé 是由斯坦福大学开发的目前主流的本体编辑和知识获取软件,是基于知识 的编辑器,可以通过插件或基于 Java 的 API 对其加以扩展,是一个非常适合开展本体 建模工作的开源工具。主要用于语义网中本体的构建,为用户提供了大量知识模型架构 机器对抗知识图谱构建技术研究与实现 7 和动作,允许创建、可视化和操纵各种形式的本体,并可以利用 Protege 将其本体从内 部表示形式转换成多种形式的文本表示格式,如 XML、OWL 等。 图 3-2 本体模型构建 如图 3-2 所示,课题基于 Protégé 依次完成了概念、关系、属性和实例的创建。在关 系创建方面,为每一类关系都按照设计的语义关系设置了域(Domains)和范围(Ranges), 例如开发关系的域是厂商,范围是产品。在属性创建方面,为每一个属性也设置了对应 的属性类型和所属域,例如攻击类别设置为 string 类型,所属域为攻击。最后,在实例 创建方面,为每一个实体都设置了对应的属性值、实体类别和实体间的关系,并通过 HermiT 推理机推理出了隐含关系,如对称关系。 图 3-3 本体模型示意图 在完成所有概念、属性及关系的设置后,最终的本体模型结构如图 3-3 所示,其中 标识为橙色的节点为概念,标识为紫色的节点为实例,实体和概念之间彼此都用有向边 连接起来,代表两者之间存在某种关联。该本体模型最终以 OWL 格式文件导出。 3.4 知识图谱构建 在知识图谱构建这一部分,本课题将选择 Neo4j 图数据库来存储知识图谱。Neo4j 是用 java 实现的高性能、NOSQL 图形数据库,它以属性图作为数据模型,其属性图由 节点、边、属性所组成,其中节点可以用来表示实体,边则用来表示实体间的关系,每 机器对抗知识图谱构建技术研究与实现 8 个节点和边都可以包含一个或多个属性。Neo4j 的底层数据存储专门针对图数据特点进 行了优化,在关系数据的处理上具有很高的性能,并配备有 Cypher 查询语言实现数据 的快速检索,具备图形化平台等工具,有助于提高开发效率。 3.4.1 本体模型导入 知识图谱构建的首要任务是将构建完成的本体模型导入图数据库中。因为 Neo4j 本 身并没有提供 OWL 或 RDF 格式文件的导入功能,本体模型的导入就需要 neosemantics 工具包的支持,该工具包主要提供 RDF 导入导出、模型验证、模型映射等功能。将上述 工具包安装至 Neo4j 中之后,实践发现如若导入 OWL 格式的本体模型将导致模型信息 的缺失,这是由于工具包主要支持 RDF 和 XML 格式文件的导入,因此还需要借助 java 工具包 rdf2rdf,通过命令将 OWL 格式文件先转化为 RDF 格式。如图 3-4 所示为本体模 型由 OWL 格式转换成 RDF 格式后的内容。 图 3-4 RDF 格式的本体模型 本体模型格式转换完成后,进入 Neo4j 图数据库,利用 Cypher 语句依次完成约束 创建和图形配置,再通过 Cypher 语句调用 n10s.rdf.import.fetch()函数实现本体模型的导 入。导入成功后,3.2 节中所描述的概念、概念属性以及概念间的关系至此已经全部存 储在了 Neo4j 图数据库中。 3.4.2 数据处理 接下来则着手往知识图谱中填充实例信息,涉及到的结构化数据集主要有国家信息 安全漏洞库 CNNVD5、通用漏洞数据集 CVE 和攻击数据集 NSL-KDD。这些数据集都 包含了大量的结构化数据,在 CNNVD5 中包括了海量的漏洞信息,具体包括漏洞名称、 漏洞类别、危险指数、解决方案等重要信息,而 CVE 中可用信息较少,包括漏洞名称、 漏洞概述、影响软件与厂商等信息。本课题将这两类异构数据集进行了数据清洗与融合, 去除了数据集中对知识图谱构建无用的信息,并提取了两数据集中的公共漏洞及对应信 息,作为知识图谱中漏洞的数据基础。对于攻击数据集,最后一列为样本的统计信息, 不需要包含进知识图谱中,因此将其删去。 除了结构化数据的处理,本课题还基于 360 网络安全响应中心(360CERT)收集了 一些非结构化的漏洞数据,并从中提取出了知识图谱所需要的一些有价值的实体信息。 机器对抗知识图谱构建技术研究与实现 9 实体抽取工作主要基于 Stanford named entity recognizer(NER)模型实现,该模型是一 种线性链条件随机场(CRF)模型,它提供了一些默认实体的识别,也支持使用者自定 义实体类型,并在训练之后用于在自研究的领域内进行实体抽取。 表 3.3 实体抽取模型指标 实体类型 准确率 召回率 F1 kind Producer Product risk Vulnerability Totals 0.8846 0.6923 0.5200 1.0000 0.9792 0.8448 0.7667 0.6667 0.3421 1.0000 0.9792 0.7500 0.8214 0.6792 0.4127 1.0000 0.9792 0.7946 Stanford NER 模型的输入为进行实体抽取的文本,而输出则是从文本中抽取得到的 实体及其类型。由于本课题采集到的非结构化数据包括中文数据,而模型对中文数据的 分词效果不佳,因此本课题的输入文本均为 Stanford Segmenter 模型分词后的文本。模 型训练方面,先对非结构文本进行中文分词,并人工添加标注,将实体与其类型一一对 应。然后配置模型参数文件并对模型进行训练,即可获得一个自训练的 NER 模型。表 3.3 为该 NER 模型对各个实体类型抽取的准确率、召回率以及 F1 值,基于该模型可以 较好地实现本课题中非结构化文本的实体抽取。 图 3-5 实体抽取流程图 图 3-5 为本课题的实体抽取流程,非结构文本经过 Stanford Segmenter 中文分词后 形成单词之间用空格分隔的文本,接着再放入训练好的 NER 模型中即可得到提取出的 信息及其类别,包括漏洞、厂商、产品、漏洞危险指数以及漏洞类别,节省了一定的人 力成本。由于抽取出的信息可能会存在错误,而数据量并不是很大,因此本课题通过人 机器对抗知识图谱构建技术研究与实现 10 工处理的方式将这些信息转化为结构化数据,以提高数据质量。 3.4.3 实例导入 知识图谱的数据填充主要依靠 py2neo 模块和 Cypher 语句实现,其中 py2neo 模块 提供了连接 Neo4j 图数据库的功能,并将 Cypher 语句实现的功能简化为接口函数,在 建立连接后可以调用接口函数实现图谱修改或查询等操作。向知识图谱中填充实体的过 程中,依次完成了漏洞实体和攻击实体的添加,在漏洞实体添加的同时可以执行产品实 体、厂商实体及它们之间对应关系的添加。这里需要说明的是,由于网络攻击与漏洞之 间的关联数据集较难获取到,本课题基于攻击类别和漏洞类别,将类别相符的两个实体 进行了连接,PC 机实体为手动填充。构建完成的部分知识图谱如图 3-6 所示,整个网络 安全知识图谱共包括 74337 个漏洞实体和 58634 个攻击实体。 图 3-6 网络安全知识图谱 机器对抗知识图谱构建技术研究与实现 11 4 网络安全知识图谱的数据可视化 4.1 可视化工具 网络安全知识图谱的可视化将以图的形式展示图谱结构,可视化图谱中的节点、关 系以及节点属性,帮助使用者对图谱整体产生一个更加清晰的认知,也便于使用者对图 谱的查看分析。 本课题使用 ECharts 作为图谱可视化的工具。ECharts 是一个基于 Javascript 的图标 库,底层依赖于 Canvas 类库 ZRender,具有显示流畅、定制图标、功能丰富、可交互等 优点,对大多数浏览器都兼容,基于 ECharts 可以绘制折线图、散点图、饼图、力导向 布局图、仪表盘等多达 12 类图表,同时能够为这些图表配备多种组件,如标题、图例、 时间轴、工具箱等,并配备有详细的文档指导每一类图形的绘制过程,对初学者友好且 绘制效果非常不错。 4.2 数据可视化流程 在本课题中,网络安全知识图谱的可视化大致可分为以下 3 个步骤: (1) 理清知识图谱的数据结构,规划数据的展示效果,确定图模型结构。 (2) 编写后台逻辑,分别处理以五种实体类型为中心实体时图谱的组织结构,查 询与中心实体相关的所有数据,筛选查询结果,将数据以 Json 格式返送前端。 (3) 在前端编写函数向后端获取数据,并在获得数据后基于 ECharts 实现图谱的 可视化,将数据转换成图形。 4.2.1 可视化流程设计 图 4-1 可视化流程时序图 机器对抗知识图谱构建技术研究与实现 12 图 4-1 为图谱数据可视化流程的时序图。首先由用户在前端发起查询或查看图谱的 请求,前端接收到请求后即刻向后台发送 POST 请求,同时也将用户输入的查询条件一 起发送给后台。后台接收到前端发送的 POST 请求后,立即与 Neo4j 图数据库建立连接, 并根据用户所输入的查询条件在图数据库中执行查询功能,收集实体和关系信息。当 Neo4j 图数据库将后台所需的数据返回后,后台再以指定的数据结构整理这些数据,以 便前端能够更好更快地显示数据。待处理完成后,后台将数据以 Json 格式返送至前端, 前端再执行可视化函数,基于 ECharts 工具绘制关系图来可视化实体节点和关系边,最 终用户即可看到可视化后的图谱结构。 4.2.2 图模型结构设计 图 4-2 部分图模型配置 网络安全知识图谱包含了大量实体、实体属性以及实体之间的关系,从图论角度来 看,知识图谱中的实体可以看作是带有属性值的节点集合,而实体间的关系则可以看作 有向边的集合,这些有向边的两端都是实体节点。 在本课题中,选用 ECharts 作为图谱可视化工具,并根据上面所描述的图结构选择 绘制关系图。在绘制关系图时,为图形配备工具箱以提供图谱还原和保存图片的功能, 添加图例以控制五类实体节点的显示,将图形的布局设置为力导图,并详细设置节点属 性、鼠标缩放与平移、边属性、力导图属性等信息,部分图模型的配置信息如图 4-2 所 示。 4.2.3 后台数据提取算法 图模型的整体框架构建完成以后,还需要向模型中填充网络安全知识图谱的相关数 据,而这些数据则需要通过后台进行数据提取后返送回前端来获得,后台主要为前端的 图谱可视化和查询可视化提供数据支持。后台提取数据的一个重要依据是中心实体的选 机器对抗知识图谱构建技术研究与实现 13 择,提取算法从中心实体出发依次找出与其直接关联和间接关联的实体,组成一个包括 中心实体、与该实体存在关联的实体和实体间关系的数据集合。中心实体共有漏洞、攻 击、产品、厂商和 PC 五种情况,系统根据这五种情况分别编写了获取关联实体的算法, 虽然这五种情况的提取过程在细节上存在一些差别,但总体的算法思路在大体上是一致 的,图 4-3 为数据提取算法的流程图,具体的算法流程如下: (1)获得中心实体的实体类型,连接 Neo4j 图数据库,判断是否存在查询条件,若 存在则生成 Cypher 查询语句并在图数据库中运行,反之则默认查询所有该类型的实体, 若获取到的中心实体总数大于 20,则只取最新生成的 20 个实体。 (2) 获得中心实体后,将所有实体添加至节点集合中,然后依次遍历每个实体节 点,找出与当前实体存在直接关联的实体,将查询得到的实体和关系分别添加至节点集 合、关系集合中去。 (3) 如果节点集合中还存在尚未查询过直接关联的实体,则继续找出与该实体存 在直接关联的实体,并将查询得到的实体和关系分别添加至节点集合、关系集合中去。 已经查询过的关系将不再做重复查询。 (4) 将节点和关系集合,以及所有节点的详细信息以 Json 格式返回至前端,完成 数据提取。 图 4-3 数据提取算法流程图 4.2.4 前端可视化算法 后台数据提取逻辑完成后,前端需要向后台发起请求,并在获取数据后实现数据的 可视化。在实现过程中,前端主要使用 ECharts 作为可视化工具,图 4-4 为可视化算法 的流程图,具体的可视化算法流程如下: 机器对抗知识图谱构建技术研究与实现 14 (1) 在图谱界面初始化时,向后台发起 POST 请求,同时向后台传输查询信息, 后台接收到请求后实行数据提取算法并将提取到的节点信息、关系信息和节点详细信息 返回至前端。 (2) 前端接收到后台返回的数据后,分别将节点信息和关系信息,按照 ECharts 所接受的格式重新组织数据结构,将修改后的节点信息、关系信息以及节点的详细信息 传送给可视化函数进行可视化。 (3) 在 4.2.2 节中,可视化函数已经构建好了图模型的整体框架,将重组后的节 点信息和关系信息填入对应区域即可实现实体和关系的可视化。对于节点详细信息,编 写节点的触发函数,使得当节点被点击时能够显示节点的详细信息。 图 4-4 可视化算法流程图 4.2.5 可视化结果 图 4-5 可视化结果-1 机器对抗知识图谱构建技术研究与实现 15 图 4-6 可视化结果-2 图 4-5、4-6 为知识图谱数据可视化的结果。图 4-5 中,知识图谱中的各实体在界面中用圆形节 点来表示,而两个实体间的关系则用有向边来表示,两个节点之间存在有向边则说明这两个实体之 间存在某种关联,以图形化的方式清晰地展现了知识图谱的内容和结构。系统提供了可视化图形的 还原和保存功能,用户也可以通过点击上方图例在界面中显示自己想查看的实体类型。 在图 4-6 中,通过点击某一节点可以触发点击事件,在图谱下方会立即显示该节点的详细信息, 即节点自带的属性内容,图中选中了漏洞实体,则下方详细信息显示了该实体的类型、名称、漏洞 描述、危险程度、解决方案和漏洞类别。点击不同类型的节点会动态显示不同的节点信息。 机器对抗知识图谱构建技术研究与实现 16 5 攻击监测模型的搭建 5.1 概述 本章节主要阐述基于神经网络的搭建实现系统攻击检测功能的过程,具体流程包括 如下: (1) 处理攻击数据集,去掉数据中的无用信息,对样本标签和数据中的文本信息 进行编码,将输入数据修改为模型所期望的形状并对样本标签进行 one-hot 编码,数据 重采样以改善样本不平衡问题,最后再将特征值归一化。 (2) 搭建神经网络模型,定义模型层数、每层神经元个数、输入输出形式等信息, 初始化参数,定义损失计算。 (3) 批量梯度下降训练模型,训练完成后绘制损失曲线图,计算模型在训练集和 测试机上的准确率。 (4) 将完成训练的模型保存在本地,编写函数在预测时取出保存好的模型,提取 模型中的参数,通过正向计算得出预测值。 5.2 数据清洗与预处理 本系统的攻击检测主要基于攻击数据集 NSL-KDD 实现。该数据集主要包括四大类 攻击及其特征,分别是端口扫描(Probing)、远程主机的未授权访问(Remote-to-Local)、 本地超级用户未授权访问(User-to-Root)和拒绝服务(Denial-Of-Service),这四类攻击 又包含了 38 种细化的攻击类型。在该数据集中,每条数据由 41 个攻击特征、1 个攻击 标签和 1 个统计信息组成,其中统计信息对攻击检测无用,因此在数据处理时将此列数 据删除。此外,该数据集在训练集上共有 23 种攻击类型,而在测试集上却出现了 38 种 攻击类型,训练后的模型对于在训练集上未出现的攻击类型将无法实现监测,因此在测 试集中删去这一类的样本。 为了使输入数据能够贴合模型所需的输入,这里对数据集中的文本类信息进行了编 码,将其从 string 类型转换成 int 型,并对样本标签进行 one-hot 编码,将样本标签转换 成 0-1 向量。编码完成后,再对 41 个攻击特征值进行归一化操作,使得模型能够更快地 通过训练得到最优参数。上述所有操作完成后,重新调整训练集与测试集数据的形状, 对于输入数据𝑋,其形状为ℝ𝑛×41 ,对于标签𝑌,其形状为𝔹𝑛×23 ,其中𝔹代表 0-1 特征, n 为样本个数。 由于 NSL-KDD 的训练数据集存在样本数据不平衡的问题,其中大部分都是 Normal 与 DOS 类别的数据,R2L、Probe 类数据较少,U2R 类数据极少,因此在将数据放入神 经网络模型中训练之前,还需对数据进行重采样操作。鉴于采取欠采样很可能会使大量 有价值的样本数据流失,因而决定对数据集进行过采样的措施。一般来说,过采样可以 机器对抗知识图谱构建技术研究与实现 17 通过复制少数类样本来扩大数据规模,使少数样本的数量增加,从而改善样本不平衡的 问题,但这种方法容易造成过拟合的问题,为了解决这种现象,现在常见的过采样方法 有 SMOTE、Borderline-SMOTE、ADASYN 等算法,这些算法采用新的方法来增加少数 样本的数量而非简单复制。其中 SMOTE 算法在少数样本的 K 近邻中随机选择一个样 本,然后在这两个样本中间随机选取一点作为新样本;Borderline-SMOTE 为处在分类别 界的少数样本创建新样本;ADASYN 则为少数样本分别生成数量不同的新样本。本系 统使用 ADASYN 方法对数据集进行过采样,以改善样本不平衡问题。 5.3 神经网络模型 由于深度学习技术日趋成熟,神经网络模型在分类问题上展现了很强的学习能力, 因此本课题通过神经网络模型在攻击数据集上的训练来检测攻击。在执行训练之前需要 先设计构建神经网络模型的整体框架,系统以 Tensorflow 作为建模工具,搭建了一个包 含一层隐藏层的三层神经网络模型。 图 5-1 神经网络模型架构图 图 5-1 为本系统的神经网络模型架构,该神经网络由输入层、隐藏层和输出层三层 所组成。 首先定义神经网络参数,输入层输入𝑥 ∈ ℝ𝑏×41 ,第一层参数𝑤1 ∈ ℝ41×50 , 𝑏1 ∈ ℝ50 , 第二层参数𝑤2 ∈ ℝ50×23 , 𝑏2 ∈ ℝ23 ,输出层输出预测结果𝑦̂ ∈ ℝ𝑏×23 ,其中𝑏为 mini-batch 的尺寸,激活函数采用 ReLU。 正向传播过程如公式(5-1)所示,其中𝑓为激活函数。为了减轻梯度消失的问题, 机器对抗知识图谱构建技术研究与实现 18 本模型采用 ReLU 作为激活函数。 𝑦̂ = 𝑤2 × 𝑓(𝑤1 × 𝑥 + 𝑏1 ) + 𝑏2 本模型的损失函数定义为交叉熵损失函数: 1 ℒ(𝑦, 𝑦̂) = − ∑ 𝑦𝑖 ln 𝑦̂𝑖 + (1 − 𝑝𝑖 ) ln(1 − 𝑝̂ 𝑖 ) 𝑁 (5-1) (5-2) 𝑖 其中𝑝是经过 Softmax 后的预测值𝑝 = 𝑆𝑜𝑓𝑡𝑚𝑎𝑥(𝑦̂)。 5.4 模型训练与评估 图 5-2 模型训练流程图 基于定义好的模型架构、正向传播过程和反向传播过程,可以开始着手对模型进行 训练。这里主要采用批量梯度下降的方法进行模型训练,并在训练完成后对其进行性能 评估,图 5-2 为模型训练的流程图,具体的算法流程如下: (1) 将输入数据随机划分成多个 mini-batch 进行批量训练,减少模型每次训练的 计算量,提升训练速度,同时允许一个批次中的所有数据共同决定梯度方向,减少了随 机性,帮助找到最优点。 (2) 初始化模型参数,其中参数权重矩阵 W 利用 Tensorflow 中的 Xavier 程序进 行随机初始化,使得每一层输出的方差尽量相等,而偏置 b 则全部初始化为 0。 (3) 根据模型架构执行正向传播过程,得出预测值 Y,并基于 Y 和样本标签计算 损失,然后利用 Adam 优化算法进行反向传播,计算梯度并更新参数值。 (4) 进行模型评估,记录每一个 epoch 的损失值并画出损失曲线,模型的损失曲 线如图 5-3 所示,损失在不断减少,说明模型正在不断地学习。对于模型的输出 Y 和真 实样本标签 Label,对它们进行 argmax 操作来获取每一列最大值的行号,然后分别计算 机器对抗知识图谱构建技术研究与实现 19 模型在训练集和测试集上的准确率。经计算,模型在训练集上的准确率为 97.1%,而在 测试集上的准确率为 83.3%。由于模型准确率已经达到预期效果,因此不再考虑添加隐 藏层数、神经元数等修改模型架构的措施。 图 5-3 模型损失曲线 5.5 模型保存与使用 在模型训练过后,为了在系统中再次使用模型进行攻击检测,需要对训练后的模型 进行保存,并编写函数实现模型的提取与使用。神经网络模型的保存与使用主要基于 Tensorflow 实现,Tensorflow 引入了会话(Session)的概念,需要首先定义计算图的结 构,然后再在会话中执行该计算图。模型保存主要利用 Tensorflow.train.Saver 工具实现, 在会话开始之前创建一个 Saver 对象,然后当模型在会话中训练完以后执行 save 方法, 将会话保存至指定目录下,该目录下则会保存模型的主要数据,包括网络结构、变量取 值等信息。图 5-4 为模型的所有保存文件,其中 checkpoint 文件保存 checkpoint 文件列 表,meta 文件保存计算图的结构,data 文件保存所有变量的值,index 文件保存 meta 文 件和 data 文件的映射关系。 图 5-4 神经网络模型文件 当需要再次使用模型时,先重新创建一遍正向传播的过程,包括输入数据处理、参 数初始化、前向传播等步骤,然后在会话开始之前创建一个 saver 对象。在会话开始以 后,先初始化全局变量,然后从保存路径中取出模型的 ckpt 文件,利用 session.run 方法 计算出我们所需要的预测值即可。图 5-5 为神经网络的运行结果示例,通过提取模型参 数并重新完成计算图的执行,模型得出了一组预测结果,其中值最大的一项对应的攻击 机器对抗知识图谱构建技术研究与实现 类型即为最终的预测类型。 图 5-5 神经网络模型运行结果 20 机器对抗知识图谱构建技术研究与实现 21 6 网络安全监测系统 系统目标 本系统期望基于 Django 框架构建一个网络安全监测系统,系统中融合已经构建好 的网络安全知识图谱和攻击检测模型,使用户可以快速对图谱进行查询、修改、可视化 等操作,也提供了一定的安全监测功能,系统的主要目标如下: (1) 可视化图谱与图谱查询结果,并为用户提供简化后的图谱管理功能,用户无 需自己编写 Cypher 语句即可对图谱进行查看与管理,具体包括实体和关系的查询、实 体增删、实体修改、关系增删的操作。 (2) 实时监测扫描系统中的 PC 机状态,若发现 PC 机状态异常,则在界面上予以 警示,并为安全分析师提供攻击处理的功能,新检测到的攻击将加入到网络安全知识图 谱中。 开发平台与工具 本系统主要在 Win10 环境下进行开发,开发语言主要用的是 Python、JS 和 HTML, 使用到的开发平台具体有 VScode、Anaconda、Jupyter Notebook,其中 VScode 是一款免 费、开源的跨平台开发工具,在本课题中主要用来进行后台开发、知识图谱搭建等, Anaconda 是一个可以安装并管理 Python 包的软件,主要用来创建虚拟环境,Jupyter Notebook 则是可以在浏览器中使用的交互式计算程序,主要用来搭建神经网络模型。 系统开发主要使用 Django 框架,它是一种基于 Python 的 web 框架,采用了 MVT 的软件设计模式,即模型-视图-模板模式,可以很方便地实现数据库建设、模板渲染和 后台逻辑,易于实现前后端的交互功能。 系统设计 图 6-2 为本系统的架构图,本系统架构可分为业务层、数据层、数据存储层和运行 环境四部分。在业务层,系统主要能够为用户提供图谱可视化、实体查询、关系查询、 实体添加、属性修改、关系添加等业务,系统功能丰富,能为用户提供多种服务。在数 据层,系统主要使用到的数据集有国家信息安全漏洞库 CNNVD5、通用漏洞数据集 CVE、 攻击数据集 NSL-KDD 以及 360CERT 平台上的数据。在数据存储层,利用 Neo4j 存储 知识图谱的相关数据,系统运行需要的一些数据则存储在 Sqlite3 数据库中。系统的运行 环境需要 Python3、Tensorflow2 和 Django 组件的支持。 机器对抗知识图谱构建技术研究与实现 22 图 6-2 系统架构图 图 6-3 系统功能模块图 (1) 在数据可视化模块,设计实现了图谱可视化和查询结果可视化,以关系图的 形式显示知识图谱结构,并编写了每类节点相应的点击事件,点击节点即可查阅实体的 详细信息。 (2) 在实体管理模块,允许用户向图谱中添加不同类型的新节点、根据节点标识 删除现有节点以及对现有实体属性的修改。 机器对抗知识图谱构建技术研究与实现 23 (3) 在关系管理模块,允许用户在图谱中为两个实体之间添加新的关系或删除现 有关系。 (4) 在攻击管理模块,实时扫描图谱中的所有 PC 机状态,并基于神经网络模型 监测是否存在网络攻击,若存在则在界面中做出警示。检测到攻击后,为用户提供攻击 处理功能,用户能够确认攻击详情,监测结果将自动添加至现有图谱中。 (5) 在数据统计模块,系统统计了现有图谱中的漏洞数、攻击数、PC 机数等实体 数量,并对系统的监测结果和已处理结果做出统计。 (6) 在图谱查询模块,用户可以通过输入查询字段实现不同类型实体的查询,也 可以通过选择不同种类的关系基于关系进行查询,系统会在界面中可视化查询结果,查 询结果包括中心实体和与其存在关联的所有实体。 6.3 系统实现 图 6-4 系统主页 机器对抗知识图谱构建技术研究与实现 24 图 6-5 图谱可视化-1 图 6-7 图谱查询
0
You can add this document to your study collection(s)
Sign in Available only to authorized usersYou can add this document to your saved list
Sign in Available only to authorized users(For complaints, use another form )