"无服务器" 体系架构正是打破了人们的习惯思维, 让服务器不可见, 从而让整个开发部署过程更为安全高效, 给所有开发部署运维人员带来的是软件架构和应用程序部署的新大陆. 相反地, 它也会导致一系列新的安全问题和挑战.
所谓 "范式转换"(Paradigm Shift)指的就是长期形成的思维习惯, 价值观的改变和转移. 而 "无服务器"(Serviceless)体系架构正是打破了人们的习惯思维, 让服务器不可见, 从而让整个开发部署过程更为安全高效, 给所有开发部署运维人员带来的是软件架构和应用程序部署的新大陆. 不过,"无服务器" 架构方法并非能够解决所有问题, 相反地, 它也会导致一系列新的安全问题和挑战.
如果你问软件开发人员何谓软件架构, 可能会得到五花八门的答案: 软件架构 "是蓝图或计划","概念模型" 或 "大局", 不一而足. 毫无疑问, 架构或缺少架构关系到软件的成败. 良好的架构有助于扩展 web 或移动应用程序, 而糟糕的架构可能导致严重问题, 势必需要重写, 花费高昂成本.
而 "无服务器" 体系架构最大的一个安全优势就是, 可以帮助开发者摆脱运行后端应用程序所需的服务器设备的设置和管理更新工作. 这些任务都由无服务器体系架构提供商负责, 然后再以服务的方式为开发者提供所需功能, 例如数据库, 身份验证等.
然而, 尽管现在开发者不用再对许多由无服务器云提供商处理的安全任务负责, 但他们仍然需要负责为那些有服务器端逻辑的应用程序编写强大的代码, 并确保这些应用程序代码不会存在应用程序层漏洞. 而且现在看来, 这种任务并不会很快消失.
至于云供应商方面, 将负责提供用于运行这些代码的服务器, 并在必要时对服务器进行缩放. 执行完毕后, 承担这些功能的容器会立刻停用, 并且执行过程以 100 毫秒为单位进行度量, 用户只需为运行代码过程中所消耗的资源付费, 一些人将这种模式叫做功能即服务(FaaS).
此外, 任何与应用程序本身或与之交互的云服务相关的配置同样需要安全防护. 因为任何错误的设置和云服务的误配置都有可能成为无服务器体系架构的攻击入口, 导致敏感机密信息的泄漏, 以及为潜在的中间人攻击 (MiTM) 提供入口点. 同样地, 这项任务也属于应用程序所有者的责任.
在 "无服务器" 的世界中, 云供应商会和你一起分担安全责任. 下图就展示了共享无服务器安全责任模型:
应用程序所有者:
为 "云内部" 的所有者 (Owner "in" the Cloud) 负责. 包括客户端, 云端数据, 传输数据(包含在公共或不可信网络 - 如互联网 - 上流动的信息, 以及在私有网络 - 如企业或企业局域网 - 范围内流动的数据), 应用程序, 身份和访问管理, 云服务配置等.
FaaS(功能即服务)提供商:
为 "构成云" 的所有者 (Owner "of" the Cloud) 负责; 包括操作系统 + 虚拟设备 + 容器, 计算, 存储, 数据库, 网络, 地域, 可用性区域 (AZ), 边缘位置(edge location) 等.
虽然无服务器体系结构引入了简捷和高效, 但同时也引入了一系列新的问题和应用程序挑战:
1. 不断增加的攻击面
无服务器功能消耗来自各种事件源的数据, 例如 HTTP APIs, 消息队列 (message queues), 云存储以及物联网(IoT) 设备通信等. 而且无服务器体系架构几乎不像 Web 环境那样, 开发人员知道哪部分消息不应该被理解被信任的 (GET / POST 参数, HTTP 标头等). 这大大增加了无服务器体系结构的潜在攻击面, 特别是当消息使用协议和复杂的消息架构时, 其中许多不能通过标准的应用程序层防护(如 Web 应用程序防火墙) 进行检查.
2. 攻击面的复杂性
无服务器体系架构中的攻击面对于某些人来说可能很难理解, 因为这样的体系架构还是比较新的. 许多软件开发人员和架构师尚未获得足够的安全风险经验, 以及保护此类应用程序所需的适当防护措施.
3. 整体系统复杂性
针对无服务器体系架构的可视化和监控工作仍然要比监控标准软件环境更复杂. 在侦察攻击的阶段, 威胁实施者会试图击破网络防御和弱点, 这对网络安全解决方案检测可疑行为并关闭该行为也是一个关键点. 由于无服务器架构是驻留在云环境中的, 所以 "本地" 实时网络安全解决方案是多余的, 这意味着可能会错过发现早期的攻击迹象. 而且尽管无服务器系统通常提供了日志记录功能, 但可能不适合安全监视或审计的目的.
4. 安全测试不足
对无服务器体系架构执行安全测试要比测试标准应用程序更为复杂, 尤其是当这些应用程序与远程第三方服务或后端云服务 (如 NoSQL 数据库, 云存储或流处理服务) 交互时. 另外, 自动扫描工具目前也不适用于扫描无服务器应用程序.
传统的安全防护措施并不适用: 由于使用无服务器体系架构的组织无法访问物理 (或虚拟) 服务器或其操作系统, 因此他们无法部署传统防护层, 如端点保护, 基于主机的入侵防御, Web 应用程序防火墙或是 RASP(实时应用程序自我保护)解决方案 -- 它是一种新型应用安全保护技术, 它将保护程序像疫苗一样注入到应用程序, 并和应用程序融为一体, 能实时检测和阻断安全攻击, 使应用程序具备自我保护能力, 当应用程序遇到特定漏洞和攻击时不需要人工干预就可以进行自动重新配置应对新的攻击.
正是这最后一条 (即传统的安全防护措施并不适用) 要求在无服务器体系架构的应用程序安全性方面进行大幅度的范式转换. 根据定义, 在无服务器体系架构中, 您只能控制应用程序的代码, 而且它几乎是您所拥有的唯一东西. 这也就意味着, 如果您需要保护自己的无服务器代码, 唯一的选择就是确保自己编写了安全的代码, 并将这这种安全性融入到应用程序中.
这实际上并不是一件坏事 -- 无服务器计算迫使软件架构师和开发人员以将安全性构建其中的方式来解决安全问题, 而不是在发生问题时再去进行安全防护. 很显然, 这是一种更为积极主动的方式.
来源: http://netsecurity.51cto.com/art/201804/571317.htm