当前位置: 首页 > 科技观察

Serverless安全揭秘:架构、风险与防护措施

时间:2023-03-12 19:05:43 科技观察

Serverless简介Serverless(也称为无服务器)架构是一种新的云计算模型,它是在容器技术和当前服务模型的基础上发展起来的。更强调后端服务与功能服务的结合,让开发者无需关注后端服务的具体实现,而是更专注于自己业务逻辑代码的实现。随着云原生技术的不断发展,应用部署模式逐渐趋向于“业务逻辑实现与基础设施分离”的设计原则。Serverless架构完美诠释了这种新型的应用部署模式和设计原则。从云原生的整体发展路径来看,Serverless模式更接近云原生的最终发展方向。Serverless实现:BaaS和FaaS云计算发展历史从IaaS(InfrastructureasaService,基础设施即服务)到PaaS(PlatformasaService,平台即服务),再到SaaS(Software-as-a-Service,softwareAsaservice),去服务器化的趋势逐渐越来越明显,SaaS下一阶段可能是BaaS+FaaS+Others,也就是Serverless。说到Serverless,首先要了解什么是BaaS和FaaS。BaaS(BackendasaService,后端即服务)和FaaS(FunctionsasaService,功能即服务)是Serverless的两种主要实现方式。BaaS可以理解为一个平台,集成并开放了应用开发中所需的各种服务能力。它通过创建大量重复的代码函数来促进基于服务的快速开发和构建应用程序。FaaS是Serverless的主要实现方式。开发人员编写一段逻辑代码来定义函数调用方法。当一个事件被触发时,该函数被调用并执行。FaaS本质上是一种事件驱动和消息触发的服务。事件类型可以是HTTP请求或用户操作。函数可以看作是完成某个功能或任务的代码片段。与传统的应用运行模式相比,Serverless业务代码被划分为函数粒度,不同的函数代表不同的功能,函数之间的调用关系更加复杂。云计算的发展历史和FaaSServerless应用架构的现状通常Serverless应用都是基于Serverless应用框架ServerlessFramework构建的。开发者无需关心底层资源,即可快速部署完整可用的Serverless应用架构。同时,Serverless平台具备资源编排、自动伸缩、事件驱动等能力,覆盖编码、调试、测试、部署全生命周期,帮助开发者协同各种云组件资源,快速构建完整无服务器应用程序。目前常见云厂商的Serverless应用服务支持各种Web框架的快速创建和上云,实现Express、Next.js、PythonFlask、PHPLaravel、Koa、Egg.js、Nuxt等框架应用的快速部署.js。开发者无需复杂配置,即可通过WebFuction快速构建各种场景下的Serverless应用,轻松实现云函数、API网关、COS、DB等资源的创建、配置和部署。Serverless提供了从初始化、编码、调试、资源配置、部署发布,到业务监控告警、实时日志、故障排除的一站式解决方案。从架构上看,Serverless由BaaS和FaaS构成一个完整的应用架构。Serverless计算平台可以帮助开发者完成服务运行环境的搭建。开发者无需购买服务器,云厂商负责提供和维护基础设施资源和后端服务组件。Serverless架构具有自动扩缩容的特点。应用部署完成后,云计算平台将为Serverless应用提供足够的资源,支撑应用的稳定运行。Serverless组件架构图ServerlessCloudFunction(SCF)是为企业和开发人员提供的无服务器执行环境。开发者通过WebIDE或本地IDE编写代码,然后将代码和所需依赖打包部署到云函数平台。开发者会预先在业务代码中定义函数的具体调用方式,比如访问数据库、对象存储、第三方服务等接口。用户通过预先定义的请求方式访问相应的服务,平台会根据用户请求拉取。启动相应的计算资源运行业务代码。Serverless运行安全风险分担模型示意图由于Serverless后端基础设施和服务主要由云厂商负责,而Serverless应用则面向企业和开发者。无服务器应用程序允许开发人员将自己的代码上传到服务器。同时,允许开发者修改应用配置。如果开发者上传的代码存在漏洞或者应用配置错误,应用就会面临风险。因此,serverless的安全问题相对复杂。Serverless的安全风险责任划分可以参考Serverless安全风险分担模型。对于云厂商来说,首先需要保证云基础设施环境的安全,包括所有底层基础设施和后端服务软件的安全。同时,云厂商也负责Serverless平台应用的整体安全防护,利用API网关、云防护等优势保障Serverless应用的安全。对于用户来说,既要保证上传到服务器的代码是安全的,同时也要保证应用策略配置的安全,避免因代码漏洞或策略配置不当带来的安全风险。所以从本质上讲,Serverless的安全性需要云厂商和用户共同承担。Serverless安全风险分担模型Serverless安全风险Serverless一般攻击流程:攻击者通过应用漏洞或组件漏洞获得初始访问权限。获得服务器权限后,攻击者会尝试寻找并窃取用户凭证或服务凭证,然后利用可用的凭证进一步横向攻击其他云服务。整个攻击过程包括但不限于以下几种攻击方式:腾讯安全云顶实验室根据自身安全实践和国内外众多相关案例,总结了Serverless常见的风险项,帮助开发者和运维人员识别各种风险。这样才能有效保证Serverless应用的安全性。主要安全风险如下图:Serverless安全风险1.应用漏洞对于Serverless应用,Serverless应用中同样存在SQL注入、命令注入、XSS等传统漏洞风险。如果Serverless应用在实现过程中没有严格验证外部输入(包括用户输入和应用之间的交互),可能会出现注入风险。传统应用的注入防护一般会对用户输入进行过滤和限制,但Serverless应用的内部网络比传统网络复杂,事件输入可能来自任何云服务(如服务器、云存储、邮件、消息服务等)。),所以单纯靠编写安全代码和依赖传统WAF防护并不能完全杜绝注入风险的发生。示例:文件上传时未经过滤的用户输入会导致命令执行漏洞。由于开发者在编写代码时使用命令拼接构造路径,但没有严格过滤文件名,攻击者可以控制传入的内容,从而导致命令执行漏洞。2、拒绝钱包攻击DoW(DenialofWallet,拒绝钱包攻击)是一种针对云平台账户的DoS方式,其目的是通过高并发耗尽用户账户的可用余额。DoW攻击类似于传统的拒绝服务(DoS)攻击。恶意攻击者构造大量并发请求触发函数调用。由于Serverless是按照资源使用量和函数调用次数收费的,当产生大量调用时,服务会自动扩容,这会导致用户账户的可用余额被快速消耗。DoW攻击的一个典型场景是在用户订阅web程序上产生大量虚假用户,通过大量用户访问API端点,造成大量资源消耗,耗尽账户量。3、资源滥用风险近年来,随着Serverless的快速发展,各种服务滥用问题层出不穷,主要体现在云功能滥用和Serverless基础设施滥用上。云函数经常被恶意人员用来构建代理池、隐藏C2和构建webshel??l。恶意人员可以通过构建此类应用程序来隐藏其客户的真实IP。无服务器应用程序还经常用于构建扫描、网络钓鱼和其他攻击平台。攻击者通过构建此类应用来实现扫描检测外部系统、钓鱼窃取用户数据等目的。这些滥用行为导致云基础设施资源被恶意使用和消耗,给云服务的正常使用和监控带来极大的麻烦。示例:使用无服务器构建扫描应用程序会导致服务滥用。恶意攻击者通过上传代码构建扫描应用,通过本地调用云函数资源实现动态IP扫描的目的。4.对第三方API和组件的不安全访问。无服务器服务通常会访问多个云服务组件,包括云API、API网关和事件触发器。如果云服务或组件在访问无服务器服务时不验证组件的身份或接收的数据,可能会导致安全风险。对数据源访问的增加将导致攻击面的扩大。传统应用程序只能从单个服务器获取敏感数据,而无服务器应用程序通常会访问大量数据源。如果攻击者攻击每个数据源,他们可能会获得大量的敏感数据。5、供应链攻击风险近年来,供应链安全事件时有发生。一些严重的漏洞可能来自开源库和框架。来自nodejs生态系统的统计数据显示,通常我们部署的代码中有97%来自开源库和框架。开源组件,因此供应链攻击是Serverless非常重要的安全风险。6、运行时安全风险如果攻击者通过某种方式获得了serverless服务器权限,则可能通过替换bootloader的方式攻击serverless应用服务,导致serverless应用实例被接管。如果攻击者可以修改ServerlessACL策略,可以通过修改函数超时时间,增加服务冷启动时间,或者通过Serverless预热插件增加运行时间等方式实现持久控制。7.配置不当导致权限滥用。当Serverless存在不安全的IAM配置时,会导致恶意操作和云平台身份越权访问。使用无服务器构建的应用程序通常包含数十个或数百个功能,每个功能都有自己特定的功能和用途,这些功能交织在一起并经过编排以形成整体系统逻辑。有些功能可能会暴露公共的WEBAPI接口,因此需要一个强认证方案来为相关功能和事件触发器提供访问控制保护。在创建IAM策略时不遵循最小特权原则可能会导致分配给函数的IAM角色过于宽松,攻击者可能会利用函数中的漏洞横向移动到云帐户中的其他资源。8.日志和监控不足传统应用已经有了比较成熟的日志管理和分析工具,但serverless功能级的日志分析工具还没有被广泛采用。由于serverless应用函数数量多,生命周期短,函数间调用关系复杂,任何一点都可能成为攻击突破口。对于云厂商来说,需要完善的安全防护和应用监控体系,才能更好地保障Serverless应用和服务的安全。9.云环境网络攻击风险攻击者可以利用漏洞或错误的云平台架构配置从公有云环境横向移动到云管理内网(如公有云到IDC网络);或者从公有云网络横向移动到客户自建网络环境中,发生严重攻击。10、针对云的攻击风险利用云服务的特性,还可以发起更多的攻击。例如,通过Serverless服务窃取云服务凭证或角色临时访问凭证等信息后,可以利用这些凭证获取相应服务的相应控制权限;或利用容器逃逸漏洞进行更深入的攻击操作等。11、云资源消耗攻击风险挖矿攻击作为一种比较常见的攻击形式,也存在于云环境中。Serverless服务也存在云资源消耗攻击的风险。攻击者攻击用于挖矿操作的无服务器服务,消耗客户的资源和资金,影响客户。攻击者针对云上易受攻击的资产,将挖矿木马植入云资源进行挖矿,对客户资源造成更大的威胁。12.密钥存储风险Serverless服务也存在密钥和凭证存储安全风险。攻击者可以利用漏洞在无服务器服务环境变量中获取凭证,或者在代码中找到以明文形式编写的密钥。13.后门持久化风险利用Serverless服务的弹性原理,攻击者可以在Serverless服务中构建比传统攻击中部署的后门更多的隐蔽后门。通过使用这些后门,可以达到持续攻击的效果。Serverless防护措施我们基于大量数据和实际案例,结合Serverless的各种风险总结了Serverless风险防护措施。通过了解这些安全防护方法,可以帮助开发人员和运维人员识别和排除各种风险,从而更好地保护云上资产的安全。主要安全防护措施总结如下:Serverless安全防护1.使用安全漏洞缓解措施Serverless安全有赖于用户和云厂商的共同防护。对于开发者来说,最基本的要求是开发者在编写代码时遵循安全开发原则,确保业务代码本身不存在安全漏洞;其次,需要保证Serverless应用配置的安全性,避免因配置不当导致不安全风险的发生。对于云厂商来说,需要保证Serverless应用与其他云服务组件之间接口调用的安全性。对于重要的功能,需要在功能模块之间放置防火墙进行隔离。当基础应用出现注入等问题时,防火墙就会起到一定的作用。宽慰。其次,由于Serverless通常会访问很多应用组件和数据,所以需要使用https/tls来保证数据在传输过程中的安全,同时使用KMS(KeyManagementService,密钥管理系统)来保证数据的加密运行期间的服务。密钥使用安全,避免硬编码或将密钥等敏感数据写入环境变量。2.Dos攻击缓解和防护开发者编写高效的serverless函数来执行离散的目标任务,为serverless函数执行设置合适的超时时间和磁盘使用限制,通过为API调用设置请求限制访问控制等方式来实现合适的serverless函数来缓解Dos攻击的风险。同时使用不易受到ReDos等应用层Dos攻击的API、模块和库,避免Dos问题。3、Serverless滥用防护针对Serverless滥用问题,需要对Serverless应用本身进行限制,比如限制某些库和方法的使用,通过有效的监控和阻断来提高Serverless服务滥用的门槛,提高异常事件发现和监控机制。发现违规行为,及时报警并拦截违规行为。4、第三方依赖库防护由于Serverless依赖第三方组件和库构建应用和运行环境,第三方依赖库的安全直接影响到Serverless应用和平台的安全。构建完善的第三方依赖库保护和监控机制,对于保障Serverless应用的安全具有重要意义。5.IAM访问控制保护在Serverless中,最小的操作单元通常是函数。Serverless中的最小权限原则预先定义了一组具有访问权限的角色,并为功能分配不同的角色,从而可以实现功能级别的访问。管控避免统一权限分配带来的各种安全风险。6、Serverless平台保护对于云厂商来说,需要避免使用过时的功能和云资源。虽然资源复用有助于节省成本,但会增加Serverless的攻击面。因此,必须定期清理服务器环境,删除不用的资源。角色,身份和依赖关系等。其次,有必要避免重复使用执行环境。对于云厂商来说,保留两次调用之间的执行环境可以提高调用效率,但是保留执行环境的同时,可能会保留一些敏感数据,从而带来一定的安全隐患。7.改进安全监控和日志记录。由于函数的生命周期极短,并且随着越来越多的函数的扩展和部署,函数调用的次数不断增加,函数之间存在着复杂的关联。攻击可能源自任何ClickLaunch。因此,需要建立完善的监控机制,如使用功能级日志分析工具,提高监控能力,及时发现攻击行为。腾讯云Serverless应用服务目前拥有完善的安全防护体系。以腾讯云功能(SCF)为例,腾讯云使用密钥管理服务(KMS)进行密钥安全管理。KMS采用第三方认证的硬件安全模块HSM(HardwareSecurityModule)生成和保护密钥,实现密钥生命周期管理,保障数据安全能力。同时,云函数还完善了配套的监控告警机制,提供调用次数、内存使用、并发使用、超时、代码错误等多维度的监控告警能力,助力运维人员轻松实现应用后维护。基础设施、资源管理、安全管控、容灾等能力是云功能平台必备的基础能力,也是云平台的核心能力。密钥管理系统(KMS)产品架构图云安全攻防矩阵V3.0发布腾讯安全云鼎实验室结合自身安全实践和国内外相关案例,对云上主流应用的安全风险进行提炼,得出一个云安全攻防矩阵。企业和开发者可以参考这个矩阵了解云服务的攻击方式,帮助开发和运维人员识别各种风险。我司云安全攻防矩阵V3.0发布。这次新增了一个serverless安全矩阵模块。目前的3.0版本已经涵盖了云服务器、容器、cos存储桶、serverless等主流云服务。也欢迎您积极与我们交流,为维护云安全贡献一份力量。Matrix的详细信息可以在CloudsecLabs的官网找到:https://cloudsec.tencent.com/home/写在后面Serverless是一种新的技术和架构模型。虽然起步较晚,但发展迅速。短短几年时间,推出了多款备受开发者追捧的应用,吸引了大量开发者的关注。Serverless作为一个比较新的事物,还是有很多领域和价值值得我们去探索的。随着容器技术、IoT、5G、区块链等新兴技术的发展,技术逐渐趋向于中心化、轻量级虚拟化、细粒度计算等,Serverless也将顺势而为。相信在不久的将来,Serverless一定会在云计算的舞台上大放异彩。参考链接http://www.ccopsa.cn/QiantaiZiyuanXiazaiWendang/WenjianXiazai?key=1166d80a-da24-4a59-8fdc-9d15c01ca9afhttps://mp.weixin.qq.com/s/kNawzZowQt8hwiE5Z8wIQQhttps://mp.weixin.qq。com/s/rbS0_42RBiFu8UFFQW4kewhttps://mp.weixin.qq.com/s/dzvQQNFGBTfF7TvowaowFAhttps://mp.weixin.qq.com/s/0Lq7hX2WdC96rVQgkBXunAhttps://mp.weixin.qq.com/s/duF1Z0EDC3n_G378Aq_XYAs://owasp.org/www-project-serverless-top-10/https://github.com/neargle/my-re0-k8s-securityhttps://snyk.io/blog/10-serverless-security-best-practices/https://project-awesome.org/pmuens/awesome-serverlesshttps://toutiao.io/posts/jx6yyi3/previewhttps://github.com/puresec/sas-top-10https://mp.weixin.qq。com/s/XuAlWNhrGvRrge4JdEZ62Ahttps://www.sciencedirect.com/science/article/pii/S221421262100079Xhttps://unit42.paloaltonetworks.com/gaining-persistency-vulnerable-lambdas/