您好, 访客   登录/注册

基于Python的网络空间安全扫描系统的设计与实现

来源:用户上传      作者:周耀鹏 王晖 陈嘉伦

  摘要:本文设计了一种针对企业网络空间安全需求的扫描平台。首先介绍了常见的网络系统安全问题,然后介绍了系统的主要功能,通过7x24小时主动扫描实时分析资产信息,查看端口开放情况、banner等,使得企业网管安全人员能够通过平台快速了解安全情况。实现通过网络扫描的方式来提高对计算机系统的安全防护,是一款适用于局域网的漏洞快速应急、漏洞拦截,SQL注入漏洞扫描,同时对搜索结果进行快速漏洞检测并输出信息报表。平台主体分为端口扫描、SQL注入漏洞扫描、漏洞拦截三部分,端口扫描器采用Python语言开发。最后通过SQLMAP介绍和相关借口列表展示了部分核心代码,并给出了系统成效与后续完善方向。
  关键词:网络安全;漏洞扫描;SQL注入测试;SQLMAP
  中图分类号: TP311        文献标识码:A
  文章编号:1009-3044(2020)31-0059-03
  Abstract:This paper has designed a scanning platform that addresses the security needs of corporate cyberspace. First introduced the common network system security issues, then introduced the main functions of the system, through 7x24 hours active scanning real-time analysis of asset information, view port opening, banner, etc., so that enterprise network security personnel can quickly understand the security situation through the platform. It realizes the security protection of the computer system through network scanning. It is a rapid emergency response, vulnerability interception, and SQL injection vulnerability scanning for local area network. It also performs rapid vulnerability detection on the search results and outputs information reports. The main body of the platform is divided into three parts: port scanning, SQL injection vulnerability scanning, and vulnerability interception. The port scanner is developed in Python. Finally, part of the core code was displayed through the introduction of SQLMAP and the list of related excuses, and the system effectiveness and subsequent improvement directions were given.
  Key words: Network security;Vulnerability scanning; SQL injection testing; SQLMAP
  在信息化时代计算机网络已全面深层融入社会生活的方方面面,网络安全威胁渗透至各个层面,人们对网络安全的重视程度也在不断提高,然而市面上针对企业内部扫描平台少之又少。[6]
  1常见网络系统安全问题
  我们根据日志分析对每次黑客攻击事件进行追溯后,往往发现基本是系统、Web、弱口令、配置这四个方面中的其中一个出现的安全问题导致黑客可轻松入侵。原因大致如下:
  1)操作系统的版本落后、没及时更新系统补丁,导致安全问题暴露;
  2)Web 问题因使用公有代码,代码编写不合规导致的安全问题;
  3)系统配置不遵循流程规范导致严重泄露了各类隐私数据。
  1.1 系统漏洞
  系统漏洞问题导致的安全问题有两种起因:第一种属于未知的,被黑客最新发现的安全漏洞。第二种属于安全漏洞已经被软件厂商进行公布并进行了修复,但漏洞一直存在,并被黑客发现后利用后,窃取重要数据并发生安全事件。
  1.2 Web 漏洞
  Web 漏洞的范围比较广,主要涉及代码、中间件软件、数据库等软件搭建的网站环境。代码问题主要涉及公有代码和代码编写不规范。中间软件主要是 Apache、Tomcat这类软件。数据库的问题主要是黑客使用 SQL 语句让数据库报错,从而发现安全漏洞。
  1.3 弱口令
  原因在于几乎所有设备在出厂时,往往默认密码都十分简单或是账户和密码相同。简单的密码使得黑客破解的时间缩短,破解简单。
  2系统原理及特点
  鉴于上述网络安全问题,我们设想可设计实现一种网络安全掃描系统。从设计原理来讲系统可划分为漏洞扫描器和端口扫描器。扫描后实施拦截,端口与进程一一对应,通过端口扫描器同时监听等待连接的进程,由此可以判断目标服务器有哪些通行进程正在等待连接。系统实现特点如下:
  1)用户可基于云端,实时查看网络空间信息,并可以生成可视化图表;   2)通过环境可以根据企业特性灵活配置,支持多线程等;
  3)针对SQL安全漏洞测试可以批量化实现。使用户更方便操作安全防护。
  3系统主要功能
  3.1 端口扫描
  3.1.1 常用端口介绍
  网络端口是一个16bit的地址,用端口号进行标识不同作用的端口。端口一般分为两类,熟知端口号:范围从0到1023,这些端口号一般固定分配给一些服务。动态端口号:范围从1024到65535,这些端口向系统提出访问网络申请,系统就可以从这些端口号中分配一个供该进程使用,在关闭程序进程后,就会释放所占端口号。
  3.1.2 入侵端口扫描基本方式
  攻击者在入侵计算机系统的大致流程步骤:
  1)获取目标信息(利用各种扫描器);
  2)查找系统漏洞,编写方案(通过邮件、线上的消息提示等发布);
  3)先获得用户权限(利用口令爆破,伪装);
  4)或提升权限,获取超级用户权限;
  5)清除入侵痕迹,删除系统log信息;
  6)作为跳板攻击另一目标。
  收集目标信息后攻击者会通过其他途径获取系统的配置信息。攻击者通过手动扫描软件对目标进行过滤,收集目标系统的相关资料,最后过滤得到目标系统可能存在的可利用的漏洞。[5]这些信息对于入侵者制定下一步攻击至关重要。
  3.1.3 网络端口扫描方法对策
  网络端口扫描一方面可供网络管理员了解当前网络安全状态并发现漏洞,另一方面也是入侵者进行攻击的初步方案。因此对于远程非法扫描如能早发现、早阻断,将对保护系统关键信息免于被利用,进而预防网络攻击有重大意义。[3]
  在配置主机端口时除了关注必备服务端口外,应关闭其他所有网络服务端口。对一些无须为公众开放的网络服务端口,可以更改其默认端口号。这样普通用户就无法使用该网络服务。同样攻击者也无法通过正常的途径来攻击这些网络服务。在设置防火墙或路由器上采用更严格的过滤规则,可阻止大部分扫描数据报文进入系统。利用端口检测技术对外来的数据包进行监听审核。在嗅探到一个TCP数据包后,记录分析它的原始IP、目的IP及端口。对来自请求的一个IP进行多个端口请求行为判断为恶意扫描请求。在排查到非法请求时,可以针对该IP进行黑名单策略拒绝访问。
  3.2 SQL注入检测方法
  可以采用模拟黑客攻击的方式来检测是否存在SQL注入漏洞。根据sqlmapapi实现sql注入离线批量化扫描。对常见端口进行端口识别并对返回数据包进行特征匹配。对常见容器组件进行返回包识别关键词。[2]
  1)在检测过程中,采用网络爬虫技术,先将整个网站的所有网页抓取完成。再将重复的 URL及链接在被检测网站外的URL剔除后,存入网页的URL数据库。
  2)访问网页URL的数据库,获得一条URL。
  3)对网页URL数据库中存储的URL进行检测,采用模板参数填充的方法,可提高检测速率。可根据实际情况需要对SQL 注入模板的参数进行填充,以构成可执行的SQL攻击语句。
  4)以MySQL4及以上版本为例,列出检测信息,构建SQL语句,进一步获取基本信息,猜解数据和列名,并读取和写入文件。
  5)如果网页URL的数据库的每一条URL都检测过后,算法终止。
  3.3 漏洞拦截处理
  3.3.1 搜索功能
  因掃描结果多样,搜索功能可以方便地找到自己想要的内容。可按照IP、端口、服务类型、banner进行查询。[4]这种查询方式比用文本框或者list占满整个页面要方便很多。
  3.3.2 创建扫描任务
  对于扫描IP的设置是在爬虫引擎进行配置的。这里创建的扫描任务,主要是针对漏扫。把漏扫和资产发现分离的设计,是因为资产发现的成本比较高,且资产变化一般不大,但服务可能经常变化,定期进行漏扫很有意义。注入口检测的结果,提供管理控制台,利用可视化方便排查注入漏洞。
  通过Nginx和Lua防护方式,二者区别在于nginx高并发、低耗内存、高可靠性、易拓展。流程如图1所示。
  漏洞成因:YARN提供默认情况下在8088和8090中打开的REST API(默认为前者),允许用户通过API创建执行相关的程序,任务上传等其他操作。如果配置不正确,REST API将在公共网络中打开并导致未经授权的访问。任何黑客都可以使用它进行远程命令执行,从而进行挖矿等其他行为。
  实施防御:通过iptables或者安全组配置访问策略,限制对8088等端口的访问如无必要,不要将接口开放在公网,改为本地或者内网调用升级Hadoop到2.x版本以上,并启用Kerberos权限认证功能,禁止匿名用户访问。
  4核心代码
  4.1 SQLMAP介绍
  SQLMAP是一个强大的SQL漏洞注入自动检测系统,可以利用此工具进行自动化SQL注入漏洞扫描。它具备大的扫描引擎,为渗透测试人员提供了强大的功能,从数据库中获取敏感数据进行Web后台登录等,同时也可以利用相关数据库漏洞进行系统命令执行操作。
  4.2 相关接口列表
  用户方法
  @get("/task/new") Create new task ID.
  @get("/task/<taskid>/delete") Delete own task ID.
  管理函数
  @get("/admin/<taskid>/list") List task pull.
  @get("/admin/<taskid>/flush") Flush task spool (delete all tasks).   核心交互函数
  @get("/option/<taskid>/list") List options for a certain task ID
  @post("/option/<taskid>/get") Get the value of an option (command line switch) for a certain task ID
  @post("/option/<taskid>/set") Set an option (command line switch) for a certain task ID
  @post("/scan/<taskid>/start") Launch a scan
  @get("/scan/<taskid>/stop") Kill a scan
  @get("/scan/<taskid>/status") Return status of a scan
  @get("/scan/<taskid>/data") Retrieve the data of a scan
  @get("/scan/<taskid>/log/<start>/<end>") Retrieve a subset of log messages
  @get("/scan/<taskid>/log") Retrieve the log messages
  @get("/download/<taskid>/<target>/<filename:path>") Download a certain file from the file system
  sqlmapapi具体的接口用法从源码中的注释中摘录了出来,这些接口方法都在sqlmap/lib/utils/api.py文件中可以查阅,如有兴趣可详细翻阅。
  开启 sqlmapapi,我们使用-s(server)参数让sqlmapapi以服务端模式运行。这里我们只使用-s参数,可以发现sqlmapapi默认运行在8775端口,后端使用的bottle框架,bottle是一个python web快速开发框架。Admin ID是用来管理task所用的token值,每次重启sqlmapapi应用都会改变,也可以通过修改其源码的方式将其唯一,或是写入本地文件供第三方程序读取。
  4.3 基本用法
  这些api的使用方法相对比较简单,注意其中有几个api是post的方法。调用过程大致如下:
  1)创建新任务
  使用@get("/task/news")接口方法创建一个新的漏扫任务。返回信息中的taskid就是之前创建的漏扫任务的id,是我们后面需要用的id。
  2)指定参数
  使用@post("/options/<taskid>/set")接口方法设置参数,HTTP METHOD是POST方法类型,使用GET方法的话会返回405状态码,在这里设置一下目标的URL,再次使用AWVS靶场做SQL注入漏洞测试。如果想获取全部的设置列表,使用@get("/option/list")接口来获取,如果想获取指定的某设置,可以使用@post("/option/get")接口来获取。
  3)开始扫描
  使用@post("/scan/<taskid>/start")方法开始扫描。开始的时候可以指定参数,也可以将上一步中的设置扫描URL放在这里,发送一次请求就可以。
  4)轮询扫描是否结束
  使用@get("/scan/<taskid>/status")获取探测是否结束,可以看到结果是terminated,表示探测已经结束了。如果漏扫程序还在扫描进行中,则结果为running标识。
  5)如果结束则获取结果
  使用@get("/scan/<taskid>/data")获取探测结果,如果不能注入,则获取到的结果为空,可能是这样:
  {u'data': [], u'success': True, u'error': []}
  5系统成效与后续完善
  系统实现了漏洞发现、端口扫描、web安全、SQL注入等实验。实现了nginx负载均衡、多線程并发。针对测试数据进行数据清洗、数据分析,实现后端代码,并测试平台稳定性、安全性。可运用到实际环境中,编写相关使用说明书等,已达到预期效果。
  在这次系统设计实现过程后,针对扫描规则将完善常规漏洞检测规则与业务逻辑漏洞模式;针对扫描误报率将发现漏洞进行二次验证,如:awvs+sqlmap验证SQL注入漏洞;针对造成脏数据将使用扫描器时过滤POST提交参数请求;针对造成服务不可用将合理选择扫描策略,避开业务高峰期扫描。
  参考文献:
  [1] 邢立国,刘玉坤.网络安全机制研究与Python实现[J].科学与信息化,2018(27):57-58.
  [2] 张鑫,张婷,段新东,林玉香.Web应用SQL注入漏洞检测工具的设计与实现[J].信息安全与技术,2014,5(8):45-47,57.
  [3] 易永红.计算机网络安全中的漏洞扫描技术运用[J].电子技术与软件工程,2017(7):217.
  [4] 叶磊,文涛,刘立亮,等.基于python的网络及信息系统安全过程管理工具[J].数字技术与应用,2017(10):187-188.
  [5] 刘健,曹耀钦.网络隐蔽扫描技术研究[J].计算机工程与设计,2004,25(2):239-242,270.
  [6] 徐贵江,黄媛媛,陈子豪,等.基于Python的Web漏洞扫描器[J].软件工程,2020,23(4):19-21,11.
  【通联编辑:唐一东】
转载注明来源:https://www.xzbu.com/8/view-15377084.htm