1、基于Scrapy框架的威胁情报抓取以及处理系统的设计与实现内容摘要随着安全技术的发展,网络安全防御措施成为了一种重要资产,如何通过现有的威胁情报数据进行快速有效的提取和分析数据是目前的一个研究热点。针对开源威胁网站以及博客等海量安全数据采用Scrapy框架设计网络爬虫对数据进行提取,并将其以知识图谱所需要的底层数据存储,通过scrapy爬虫技术,可以使得通过对各个数据源的爬虫文件,针对性的爬取所需要的信息以及信息的解析整合入库,从而在这个基础上进行多方向的研究。安全防范的目标不仅仅是在攻击到达前阻挡它,还应该包括阻断它达到其最终目的。本次的毕业设计课题将围绕基于对开源威胁情报网站的爬取与数据解
2、析系统进行设计与实现。系统将实现由Scrapy爬虫框架爬取开源威胁情报网站上公开的数据进行解析入库,通过Flask_admin+nginx以及pyecharts来展示所抓取的数据以及相对于的查询与导出功能;本系统由爬虫模块、数据解析模块以及数据展示模块组成,很大程度上实现了APT知识图谱的数据需求。关键词:APT知识 Scrapy 爬虫技术 AbstractWith the development of security technology, network security defense measures have become an important asset. How to ex
3、tract and analyze data quickly and effectively through the existing threat intelligence data is a research hotspot at present. For massive security data such as open-source threat websites and blogs, we use the scrapy framework to design web crawlers to extract data, It can store the bottom data nee
4、ded by knowledge map, and through the technology of crawler, it can integrate the crawler files of each data source, the information needed for targeted crawling and the analysis of information into the database, so as to carry out multi-directional research on this basis. The goal of security is no
5、t only to block the attack before it arrives, but also to block it to achieve its ultimate goal.This graduation project will focus on the design and implementation of crawling and data analysis system based on open source threat information website. The system will be implemented by scrapy crawler f
6、ramework to crawl open-source threat information website open data for analysis and storage, and display the captured data and relative query and export functions by flask_admin + nginx and pyecharts; the system is composed of crawler module, data analysis module and data display module, which large
7、ly realizes the data requirements of APT knowledge map.Key words: APT knowledge Scrapy Crawler Technology第一章 绪论1.1 课题背景及意义高级持续攻击(APT)是指高级持续攻击的概念,由美国于2006年首次正式提出,APT攻击目前被认为是一种具备顶级安全技术和富有资源的强劲对手。它们主要的任务是有目的地去扩大信息根据地,实现更多披露信息或者摧毁和阻碍运营计划或组织,以实现关键任务,或者将它们放在未来能够发挥作用的地方。此外,为了实现其目标,高级持续性威胁将反复持续很长时间,并通过各种手段(
8、自动升级)抵抗防御者的努力。同时与外界保持一定程度的互动以实现其目标。这类型攻击目前大多数已经上升为国家性的网络安全,如何做好抵抗APT攻击已然成为各个国家网络安全建设的重中之重。本系统的设计目的主要是为了尝试使用当前流行的scrapy框架爬虫技术对开源网站上与APT知识图谱有关的知识根据需求解析与入库,为APT知识图谱的知识做底层数据支持。1.2 国内外研究现状目前,在安全领域中认为那些具备高技术与安全资源的APT攻击皆来自于国家层次的有目的的间谍活动抑或是民间黑客组织,这些APT攻击具有高级,持久性,以及高威胁的特点。APT攻击目标通常是国家层次重大的信息,高新科研领域技术,国家中的巨型商
9、业公司,无论是哪一方,若是遭受到了APT攻击,将会付出惨痛的代价,这个代价 最高可以影响到国家安全。因而各个国家都开始上升对APT攻击的安全防御以及态势感知,在这个方面上的投入不亚于现实中的军备竞赛。国家对于APT攻击的重视有助于提升整个国家对于APT攻击的研究和防御意识的培养,提升国家对于APT攻击的防御能力。APT攻击具有很强的隐蔽性,并且都是以国家级的支持来进行攻击行为,所以传统的一般态势感知系统等安全防御措施很难检测发现得到。APT的单兵的隐藏能力极高,随身携带的IP以及恶意代码都是可更改的,根据某一特征来识别基本是很难检测得到。1.3 课题研究内容从震网事件到乌克兰停电事件,再到NS
10、A的方程式组织的行动,APT组织慢慢的跟各国情报机构越来越紧密,例如俄罗斯支持的APT28组织多次影响美国大选,诞生一个“选举安全”的新词。而现在,保障2020选举安全成为美国的政治任务,推特和Facebook忙着删帖,微软等忙着跟踪处理APT28的C&C。而越南政府资助的海莲花组织主要以中国政府、科研等重要部门为攻击对象;顺便攻击了宝马等著名车企。中国工程院院士戴浩在2019CNCERT中国网络安全年会上指出,过去以国家名义发起的网络战鲜有发生,APT攻击属于“暗战”,但近年来为了加强震慑意义,开始出现以国家名义公开宣称发动网络战,网络战开始出现“明暗交织”的情况。基于此,作为一名爱国青年,
11、我将尝试使用当前流行的爬虫技术对开源威胁情报中心的相关数据进行爬取以及按照网上的相关知识进行建表解析入库,为国家安全献上属于自己的力量。本文系统采用Scrapy-redis框架技术进行开发,该框架通过模块化爬虫的各个流程,使得开发简便,只需要编写相对于的爬取规则以及解析入库规则,辅以中间件来反爬虫。系统使用Flask-admin+nginx+bootstrap+ sqlalchemy技术来快速搭建展示模块,flask轻小便捷,适合业务逻辑不复杂的web应用,bootstrap可达成快速开发的需求,sqlalchemy的ORM技术可以减少原生sql语句的编写工作。第二章 开发技术与工具 2.1
12、Scrapy技术简介本系统的数据爬取框架使用的是scrapy+redis,而Scrapy 是一套基于Twisted的异步处理框架,充分利用了python的语言优势来实现的爬虫框架,用户只需要定制开发几个模块就可以轻松的实现一个爬虫,例如针对所爬取网页的页面结构分析后编写的爬虫代码,数据管道的设计,爬取过程中的中间件编写等。Scrapy用来抓取大量的网页数据亦或是媒体资源等来说是非常之方便,辅之以redis可在项目后期拓展单机为分布式爬取,加大爬取的速率以及躲避部分反爬虫措施。2.2 Python语言介绍Python是目前最为流行的语言之一,目前大多数应用于高新技术领域,就如人工智能与深度学习以
13、及数据处理,但是不置可否的是它在轻量的web应用上面的优势。它适合用于快速开发一个小型的web应用,主流框架Django更是在CMS领域大行其道,在本文中我将使用另外一种基于Python的web框架来进行开发,它比Django还要轻,它就是Flask。2.3 Mysql数据库简介在本文中我将使用mysql来作为数据驱动系统,Mysql在我最初接触web的时候就已经在使用了,那个时候PHP+MYSQL是web应用开发的首选,DZ论坛,dede织梦系统都是使用mysql来作为数据库。虽然现在越来越多的程序员转向其他语言,没有使用PHP,但还是无法动摇Mysql在轻量级应用上的地位,它入手快,简洁明
14、了的安装过程,同时还支持在各种web框架中应用,支持范围广。在github上的各种开源项目中,它无处不在。本文中需要用到数据与数据之间的关联关系,所有采用mysql这种sql型数据库是再适合不过了。2.4 redis数据库简介Redis是一个no-sql型的数据库,它常用于缓存,在scrapy中它是另外一个身份,不过也跟缓存差不多的功能,它用于爬虫队列的管理,以及指纹信息的录入。它可以建立一个连接池,目前常用于分布式爬虫的部署中,在本系统中虽然是单机爬取,但是我还是选择了用scrapy+redis的框架来爬取,因为redis在爬虫的断点续爬和指纹信息去重中的用处也是极大的。我之前有使用过其他去
15、重方案,例如BerkeleyDB的deltafetch,但是这种方案在爬取任务大的情况下延展性不高,而且如若爬虫被强制中断,会导致相关缓存文件损坏,指纹信息丢弃,去重效果便没有了。Redis在去重环节的使用是十分灵活的,我将在文中着重提到这一点。其次,本系统所使用到的代理池也是基于redis数据库的,将可用代理放入redis中,随机进行抽取,可以很好的筛选和使用代理。2.5 Flask_admin简介作为一个微框架,Flask允许您用很少的开销构建Web服务。它给你(设计者)以一种适合你的特定应用的方式实现项目的自由。在微服务和应用编程接口的世界里,Flask-Admin解决了在现有数据模型之
16、上构建管理接口的无聊问题。无需任何努力,它使您能够通过用户友好的界面管理网络服务的数据。Flask-Admin的基本概念是,它允许您通过将类中的视图分组在一起来构建一个复杂的接口:您在前面看到的每个网页都代表一个已经明确添加到接口类中的方法。当绑定到特定的数据库模型时,这些视图类特别有用,因为它们使您能够在逻辑上将所有传统的创建、读取、新,删除(CRUD)视图分组到每个模型的单个独立类中。2.6 Nginx简介Nginx是一个反向代理网络服务器,它一开始是主要用来做邮箱服务器的,再后来慢慢的变成了一个高性能的网络服务器,现在得到了更多的普及,很多大型的互联网公司也采用了这种简单高效,配置还相当
17、简单的服务。事实上,它的确是值得信赖的,在大多数情况下,如果具有相同服务器资源配置下,nginx服务器会使得并发的性能更好,负载均衡更优秀,也更稳定。2.7 开发环境介绍2.7.1 软件环境序号名称版本备注1UbuntuUbuntu 18.04.4 LTS操作系统2Mysql5.7数据库3Redis4.0.9爬虫支持4Nginx1.14.1Web容器2.7.2 硬件环境序号名称版本备注1战神K650D-i5D38G内存+Core i52CPUIntel i5-4210M双核处理器2.7.3 开发环境序号名称版本备注1Python3.6.9编程语言2Pycharm2019.1.4编译器3Navi
18、catForMysql11.1.13Mysql管理工具4RedisDeskTopManager2019.0.0Redis管理工具5Putty0.72服务器连接工具第三章 系统分析与设计3.1 可行性分析可行性分析主要是从项目的立项出发,分析项目未来能够取得的收益与面临的风险,项目如何在当前的社会环境经济环境下生存,以及项目后续会面临的财务风险等等,从各个角度出发去分析项目的可行性,并给出决策意见以及各方面的措施。可行性分析需要做到客观,科学化,也要更具有远见。3.1.1 技术可行性技术可行性分析主要是评估以目前的技术条件和开发者掌握的技术能力水平,能否满足系统的使用条件和需求。个人比较熟悉Py
19、thon语言以及scrapy技术的项目构建和代码编写,熟悉爬虫代码以及对html界面结构的掌握良好,熟悉Scrapy框架运行过程,可针对性编写相关中间件,本系统采用的Flask-admin是一个极其强大的开源框架,可快速搭建数据库展示,集成了web服务器以及前端bootstrap框架。Nginx是一个轻量的web服务器,安装以及配置都十分简单。整体来说,开发者技术水平跟软件的灵活性、安全性和易用性都是满足系统平台的开发需要的。3.1.2 操作可行性本系统的目的是给后续的安全与大数据开发人员提供数据支持,展示模块主要用于基本的分析以及相关字段的简易查询,无需设置用户相关权限,只需按照后续开发人员
20、的数据格式要求解析好相关的字段以及文件即可。3.1.3 运行可行性运行可行性分析即系统对组织及人员的适应性分析;本系统实现的功能主要为采集数据,即是为后续的APT知识图谱构建做准备。其中字典规范作为对不同类型知识属性的描述约束,便于知识的统一表达理解,同时也是外部数据融合消歧的标准。目前APT知识图谱技术对于元数据的要求比较高,需要在元数据的基础上再进行人工决策筛选,展示功能的重要性并不大,所以主要实现数据采集模块便可算是符合。3.1.4 经济可行性经济可行性分析包含市场需求、配套成本、资源供应。市场需求:目前各大安全厂商都已经有自身的威胁情报态势感知系统,这也说明基于现有威胁情报知识体系的构
21、建是十分有必要的。配套成本:由于系统主要模块是数据采集,Scrapy框架强大的多线程以及指纹信息录入去重机制可以充分节省服务器资源,目前只需要单机模式便可以符合要求,本系统目前运行于阿里云轻量应用服务器。资源供应:本系统爬虫主要是从开源威胁网站中爬取资源,目前不涉及任何侵权以及需要偿还的内容。3.2 系统总体设计本系统的系统总体框架如图3-1所示。图3-1系统框架图1)爬虫模块:针对github上公开的MISP报告编写爬虫规则进行爬取,与开源威胁情报平台的数据信息相匹配关系解析入库,由于scrapy-redis框架自带指纹信息去重,所以不需要再自行去重,在爬取的过程使用各种中间件代理池可以实现
22、高效爬取,在Linux系统中可以使用crontab实现定时爬取。(2)展示模块:使用Flask-admin搭建数据可视化平台,对定义的模型类(即数据库表)进行查看,筛选,搜索以及导出等功能。同时利用pyecharts生成数据统计图表,使用nginx服务器实现轻量的web应用。3.3 数据库设计3.3.1 数据库需求分析知识图谱所需要的数据是要从大体的决策战术到基本的元数据来构建,从对每个APT组织对象画像构建,属性和关系构建,然后基于APT定义的属性 进行去重以及将有关联的关系关联起来,无关的杂数据进行去除,从而输出APT知识库。半结构化数据(如阿利耶夫、MISP和ATTCK)和非结构化数据(
23、如塔罗斯安全博客和Github APT报告)。结构化智能数据库通常识别数据类型,因此信息提取方法使用字段映射和其他方法将相似的关联不同字段的数据关联到特定属性的内容 中,使用scrapy等网络爬虫技术从开源威胁网站中提取非结构性数据,结合AI智能或是人工决策进行APT对象属性的研究分析,将这些散乱的数据规整起来,输出特定知识表示。除此之外,还可以将各个实体之间的数据有类似于 “利用”、“包含”、“模块相似性”等知识关系。APT报告和安全博客等非结构化数据主要使用正则表达式来提取威胁指标(IP、域名、文件哈希,等)。),然后是关键字匹配,以提取报告和组织之间的关系。在对所提取的知识形成了一种统一
24、的表达输出后,仍然存在不少问题。例如不同的安全厂商的信息差不一样,MISP目前来说是收录较多APT威胁主体相关知识的公开报告,但是在类似于ATTCK这类安全研究网站中,对同一个APT组织的定义是会不同的,没有一个统一的APT威胁主体id来定义一个在A网站是张三,B网站是李四的主体,假设A网站记录了张三攻击了一个私营企业,而B网站记录了李四攻击了一个政府企业,由于定义名字的不同,那就无法有效的将两者所持有的属性和行为操作关联起来。3.3.2 数据库的配置sudo apt install mysql-server -y #安装mysqlsudo apt-get install python-dev
25、 default-libmysqlclient-dev #安装mysqlclient依赖sudo mysql_secure_installation修改mysql默认字符集,使用你喜欢的编辑器,如vim或者nano,打开/etc/mysql/conf.d/f,配置文件,注意,需要使用root权限,如vim:sudo vim /etc/mysql/conf.d/f删除该文件的mysql行并贴入如下内容:mysqldcharacter-set-server=utf8mb4collation-server=utf8mb4_unicode_ciclientdefault-character-set =
26、 utf8mb4mysqldefault-character-set = utf8mb4退出并保存,重启mysql服务,终端下执行:sudo /etc/init.d/mysql restart第四章 系统实现4.1 系统前端实现本系统采用Flask-admin框架快速开发,前端技术用到了bootstrap3,作为一个微框架,Flask允许以很少的开销构建Web服务。它提供了以适合特定应用程序的方式实现项目的自由。在微服务和API的世界中,Flask-Admin解决了在现有数据模型之上构建管理界面的无聊问题。它可以毫不费力地通过用户友好的界面来管理Web服务的数据。Flask-Admin的基本概
27、念是,它允许您通过将类中的各个视图分组在一起来构建复杂的界面:在前端看到的每个网页都代表已明确添加到界面的类上的方法。这些视图类在绑定到特定数据库模型时特别有用,因为它们可以将所有常规的创建,读取,更新,删除(CRUD)视图逻辑分组 到每个模型的单个独立类中。4.1.1 主页界面用户可以看到整个页面系统,其界面如图4-1所示图4-1主页图可以看到导航栏上的选项:首页:返回首页的按钮Threator至Report_Substance是所有数据库表的界面点击Substance进入Substance表界面如图4-24.1.2 模型类界面图4-2 Substance表界面点击Id,type_name,
28、type_cn_name,Value,DetectTime,ModifiedTime这些亮色的字段可以使表格按照所选字段正序或倒序排列。图4-3 查看详情页面按钮点击记录数旁边的如图4-3所示的图表,可进入该记录的详情页。如图4-4所示。图4-4 记录的详情页面详情页面图可以显示更多字段,例如Substance Id,source等。图4-5 搜索栏点击如图4-5所示的搜索栏,可以根据搜索栏上的字段搜索需要的数据,例如图4-6所示,搜索id为300的substance。图4-6 搜索id为300的substance 点击新增筛选器,可以弹出下拉框,如图4-7所示图4-7 新增筛选器选择需要筛选
29、的字段,如id,再设置条件后点击应用即可得到反馈,如图4-8图4-8 筛选id大于200的数据在这样的筛选条件下,可以点击导出,导出id大于200的substance到一个csv文件中,如图4-9所示,导出的字段和数据便是点击导出时页面显示的字段和数据。图4-9 导出id大于200的substance数据统计图点击有下拉如图4-10所示图4-10 统计图下拉框4.1.3 统计图界面点击可得到由pyecharts生成的图表,导航栏的统计图是指向了几个在服务器启动之时便生成的html文件,运用了pyecharts模块和flask-admin自带的ORM管理。page1 = Page()page1.
30、add(a).add(e)page1.render(/root/python/flask-admin/examples/sqla/admin/templates/showAll.html)我在这里使用了绝对路径,因为本系统只是使用了flask-admin中的一个例子,使用相对路径很大可能找不到文件所在,另外使用了page模块,可以让多张图表在一个html中展示。如图4-11,4-12,4-13,4-14,4-15图4-11 近30天指示器增长趋势图4-11显示的是在过去的30天中指示器每日的增长数量,这是通过指示器的发现时间来决定的,而指示器的发现时间由取决于包含它的报告,所以导致增长速度波动
31、有点大是属于正常现象。图4-12 昨日指示器增长类型比例(昨日无新增)图4-12是统计了在昨天新增的指示器类型中,各个类型的比例占多少,截图中的日期昨日没有新增,所以数据量都零,各个类型的指示器的增长速度有助于加强安全防范人员对该类型攻击手法的安全预警。图4-13 近30天指示器增长类型比例 由图4-13可以看出domain和url类型是过去三十天里新增较多的指示器类型图4-14 所有指示器类型比 从图中可以看到ip和domain指示器类型比较多,这也是因为这是最常见的IP域名信誉类情报,这类情报目前来说还上升不到可以利用作为决策分析。但是可以利用起来作为安全态势感知,针对这类指示器,可以用来判断这个IP是否为恶意IP,这个IP是否被人恶意攻击过了,这方面也是需要通过各个安全厂商的数据来进行深一层的分析判断,因为这类IP常有可能是被人攻入后利用其来进行非法流量攻击等等。 图4-15 所有数据表的数量总和图4-15可以直观的看出目前库中各类数据的记录数,有助于观察最新威胁情报态势。4.1.4 威胁情报源界面图4-16 其他威胁情报源的链接4.2 系统后台实现4.2.1 数据库实现(1) threator(威胁主体)表包括(id、threator_id、name、
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1