APP下载

微服务应用安全分析

2020-12-23何俊铧梁鸿基陈汉杰张天成雷腾龙

科学导报·学术 2020年48期
关键词:微服务安全漏洞应对策略

何俊铧 梁鸿基 陈汉杰 张天成 雷腾龙

摘  要:随着软件的不断发展,软件的开发技术也在不断地提高,如今的软件开发者所使用的开发技术不再是以前的那种单一整体架构了,更多使用的是分布式的微服务架构。使用微服务架构的方式来开发软件确实降低了软件开发过程中的复杂性,但同时也给软件带来了更多的安全隐患。本文针对微服务架构应用中存在的一些安全漏洞,简单介绍了一些开发者进行软件开发时需要考虑到的攻击方式和应对策略。

关键词:微服务;安全漏洞;应对策略

1 微服务的兴起

什么是微服务?微服务就是将单个应用程序拆分成多个小的服务的集群,每个微服务都围绕具体业务进行实现,相互之间通过轻量级通信机制,有着极少的统一管理。每个微服务可以独立部署,使用不同的编程语言,使用不同的数据存储技术。[1,2]从上面这段话我们可以知道,微服务的思想就是使用一个个独立的微服务来构成整个系统。

为什么我们不再趋向于使用以前的单一整体架构来开发?单体架构在系统规模较小时的效果确实很不错,但随着系统规模的不断扩大,出现的问题就越来越多,举一个简单的例子,技术是在不断发展的,可以说是日新月异,我们通常都会使用新的技术来更新项目,但在使用单体架构实现的项目中,各个功能模块之间是有着复杂的联系,你想用新的技术来更新项目非常困难,你必须更改每一个模块的代码,需要付出的时间和精力实在是太大了。而微服务架构恰好解决了这个问题,每个微服务都是独立的,想用什么技术就用什么技术,并且微服务的体积通常都是很小的,即使需要使用新的技术来更新也不会太过复杂。除此之外,微服务还解决了单体架构中软件扩展困难、维护困难、复杂性高等问题,这就是为什么微服务越来越受欢迎的原因。

2 微服务存在的安全问题

安全问题是每一个应用在开发过程中都不能忽视的问题,尽管微服务架构的使用解决了单体架构中的许多问题,但安全问题也会更加复杂。相比于单体架构,微服务暴露了更多的可攻击面。[3]一个基于微服务的应用中,存在的安全问题可分为两类,一类是传统的安全问题,一类是微服务架构中存在的安全问题。

第一类安全问题并不是微服务架构独有的,它也存在于以前的单体架构中,比较常见的攻击有注入攻击、XSS攻击、文件上传等。[4]但这一类的安全问题现在人们已经提出了许多相对完善的防御方法了,对于开发者来说不足为虑。第二类安全问题才是使用微服务架构时需要重视的问题,这一类的安全问题有很多个方面,本文主要讲微服务系统中微服务之间访问这一方面的问题。

3 安全漏洞的处理

通过前面的分析,我们已经把系统中存在的安全漏洞都分析出来了,下一步,我们就应该“对症下药”了。在下文,我将根据现有的研究简述这两类安全问题产生的原因以及我们应该用什么样的方法来防御。

3.1 传统的安全问题

首先说一下注入攻击,注入攻击有分好几类,其中我们听得比较多的就是SQL注入。SQL注入主要是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,实现无帐号登录,甚至篡改数据库。SQL注入的本质实际上就是对提交数据检查的不充分,将提交的非法数据当成SQL语句来执行。对于这种攻击,我们常使用字符过滤和使用参数化查询(最有效的方法)来预防。

XSS攻击,即跨站脚本攻击,它是一种最普遍的WEB安全漏洞,其原理是嵌入恶意代码到WEB页面里面,用户一旦访问这个页面就会触发这些恶意代码,这时攻击者的特殊目的就可以实现了,他们可以窃取你的cookie、会话等私人信息,严重的话会造成非常大的损失。抵御这种攻击最常用的方式就是通过添加拦截器过滤请求参数来阻止恶意代码的执行。

文件上传与表单数据重复提交也是比较常见的安全问题,前者会导致一些恶意脚本文件被上传到系统中,而后者会增加服务器负载均衡,严重的时候还会造成服务器宕机。文件上传漏洞是开发者在开发过程中仅设置文件后缀检验产生的,一些恶意脚本文件可以通过修改文件后缀名等方式通过文件后缀检验进入到系统中,所以对付文件上传漏洞的最好方式就是同时设置文件后缀校验和文件格式检验。表单数据重复提交的原因有很多,可能是用户的误操作或者网络原因,也可能是攻击者刻意而为,但不管是什么样的可能性我们都要考虑到这个问题。常用的阻止表单重复提交方法有JavaScript屏蔽提交按钮、数据库添加唯一约束、利用session设置提交有效时间和AOP自定义切入,推荐使用后面两种方式。

3.2 微服务之间的访问

不管是什么样的系统,用户访问服务前为了保证系统的安全性都需要对用户进行身份认证,认证通过后才能授权给用户去访问这个服务。在单体架构中,所有的服务都是部署在同一个服务器上的,用户想访问另一个服务服务器可以通过本地方法调用的方式来实现,用户只需要进行一次身份验证。但在微服务架構里,各个微服务通常是部署在不同服务器上的,用户想访问多个微服务就要进行多次认证,非常复杂,而且还会暴露微服务的存在,让攻击者有更多的机会来攻击,安全性不够高。有没有什么方法可以让微服务之间的访问变得更安全和更简单呢?答案是肯定的,人们提出了4种解决方法,分别是单点登录(SSO)、分布式会话(Session)、客户端令牌(Token)和API网关(Gateway)。我们经常用到的解决方法就是微服务系统中使用API网关。

API网关为微服务系统提供了统一入口,起到了客户端和后台微服务应用之间的桥接作用,是微服务架构系统的重要部分。[5]API网关有着很多功能,认证授权、访问控制、负载均衡、动态路由、过滤、日志、监控和熔断等功能都是网关需要做到的。使用API网关就意味着一切的请求都交由网关来处理,用户想访问多个微服务只需要在API网关进行一次身份验证,验证通过后网关会动态地把用户的请求转发给对应的微服务来处理,这就是网关的核心功能之一的动态路由。

猜你喜欢

微服务安全漏洞应对策略
刍议计算机软件中的安全漏洞检测技术
智能设备安全漏洞知多少
微信公众平台在医院图书馆的应用现状调查
计算机软件安全漏洞检测技术
基于微信企业号的校园移动服务
从单一模式系统架构往微服务架构迁移转化技术研究
筑牢洪灾后的舆情“堤坝”
利率市场化改革对商业银行的挑战及应对策略研究
我国信用评级业存在的问题及应对策略