云端典型的开发流程一般采用敏捷开发,典型的流程是DevOps(第 7 章),如下图所示:
图 486
可以看到:比较完整的云安全需要包括上云安全和云上安全。
●云上的安全需要:
云设施安全建设标准。这是关键,相当于小区安防系统,重点写。(上节)
云运维安全配置基线。这是保障,相当于小区保安操作手册,举例写。(本节)
还需要更多云上标准规范,比如服务器部署指南、安全运营指南等,略。
●上云的安全需要:
云端应用安全规范。这是根本,打铁必须自身硬,这是要保护的家,简要写。(第 4 章)
云平台安全设计要点就是云平台几个重点地方的安全,整体上的几点要求,可能和云端应用安全规范有重叠的地方,但更加实用,简单写。(本节)
还需要更多上云标准规范,比如:安全编码规范、安全测试规范,数据跨境指南等,略。
以Linux系统说明系统的运维基线的配置,如下图所示:
图 487
对于运维,口令和用户的基础安全是必须保证的,毕竟只要稍微有点计算机知识,就能破解弱口令。必须限制登录的次数、时间等,及时退出登录状态是安全的基本保障,而root必须只有一个才对,假如有多个root用户,那么管控就非常麻烦,说不清楚;用户配置的权限、访问控制配置等这些配置文件的权限必须保证只有root才能访问;及时记录登录的情况、操作的情况,有利于出现问题后查找问题在哪以及责任归属;而地址空间的随机化是算是一个比较高的要求了,但由于配置简单,所以也纳入基线要求。
Tomcat 服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。(百度百科)
所以以Tomcat服务器说明其运维基线的配置,如下图所示:
图 488
●只要有身份鉴权,就不能有弱口令;
●也需要禁止部署,要不哪个恶意程序就可以启动它;
●目录权限是被窥探的入口,需要被控制,特别是避免root权限;
●假如ROOT启动tomcat服务,就很容易被攻破,需要禁止;
●调试信息往往包含很多系统的很多信息;
●不管做什么,审计都是需要的,可以溯源和分析攻击手段等;
●删除无关的文件有利于节省资源,文件越少,出安全问题的地方也会越少。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。(百度百科)
所以以Docker容器说明其运维基线的配置,如下图所示:
图 489
●各个容器之间的网络通信必须隔离,这尤为重要,只有这样一个容器出问题了才不会影响到其他容器的安全;
●容器里限制挂载系统目录,不要挂载系统的敏感目录,避免容器出现问题影响到系统;
●必须限制容器的资源使用,要不一个容器出现内存问题,会影响到一个系统的稳定性;
●内容信任提供数字签名机制,可以运行客户端验证资源的完整性;
●容器相关的权限必须合适设置,避免除root外其他用户可启动;
●设定合适的日记级别,审计需要;
●对IP地址的限制,可以在很大程度上提高网络安全级别,也是访问控制需要。
常用的数据库有三个:MySQL、redis、MongoDB。三种数据库有不同的使用场景。
图 490
Redis是一种基于内存的数据结构存储系统,因其高速、稳定的特点被广泛应用于缓存解决方案中;是一个内存数据库,数据都放在内存中。(来自网络)
MongoDB则是一种文档型数据库,使用JSON格式存储数据。MongoDB适合于海量数据存储和处理,具有高扩展性和灵活性,常用于大规模分布式系统中;数据实际上是存放在硬盘的,所有要操作的数据通过mmap的方式映射到内存某个区域内。(来自网络)
MySQL是一种关系型数据库,被广泛应用于Web应用程序开发。它支持SQL语言,具有强大的数据处理能力,可以处理包括多表联合查询、事务处理等在内的各种复杂数据操作;无论数据还是索引都存放在硬盘中。到要使用的时候才交换到内存中。(来自网络)
选择MySQL说明其运维基线的配置,其他数据库类型类似:
图 491
●必须删除匿名账户,已有账户的密码复杂度必须做要求,这是身份鉴别的基本要求;
●需要现在所有账户都可以访问数据库;
●需要进行网络隔离,避免数据库暴露到公网;
●需要对权限做控制,最小权限运行数据库服务;
●需要修改常用端口,减少被扫描工具扫描到的风险;
●需要设置日记,可以进行调试和安全审计,也要防止密码被审计看到;
●需要删除无用的数据库,防止密码设置在配置中。
每个需要运维的云端配件应该都需要运维安全基线。
要期望云开发工程师完全按照规范去开发确实有点难,但几个设计要点就肯定要落实到位。
(1)要求
●TLS要求:
采用双向身份认证或SSL-pining;
采用TLS v.12 以上版本。
●证书要求:
采用CA证书或自发证书;
证书有效期不超过 24 个月。
(2)方案
●申请某公有云免费HTTPS证书
局限:支持单页面网站。
证书类型:DV SSL。
有效期 1 年。
●采用自建密钥管理系统证书
局限:和第三方互信困难,只能局限于自有网络。
(1)要求
●Token要求
唯一性:每次生成的Token不一样。
时间性:需要设置超期时间。
●时间戳要求
每次请求都要带上时间戳,防重放攻击和DDOS攻击;
超时规则 2 分钟。
●URL签名要求
需对明文参数做签名,防止被篡改;
登录、支付、刷新token等接口需增加URL签名。
●防重放要求
对时间戳加上签名,防止重复攻击;
登录、支付、刷新token、物端控制等接口需增加防重放机制。
●数据脱敏
对敏感数据(手机号、姓名、身份证等)进行模糊处理,如 135*****282。
(2)方案
●Token方案
采用Token + JWT方式;
access_token、refresh_token根据用户ID、时间戳、随机数等的哈希方式生成;
所有请求需携带access_token;
access_token有效期小于 2 小时;
refresh_token有效期小于 14 天。
●时间戳方案,略。
●URL签名,略。
●数据脱敏,略。
●数据传输要求
加密密钥应保证随机性;
密钥长度 128 位以上;
加密算法采用AES、模式为CFB或OFB、IV为随机数。
●个人敏感信息要求
HMAC-SHA256 方式进行HASH处理;
根据实际应用场景去标识化、匿名化等。
●消息认证要求
时间戳为毫秒级;
有效期为前后 10 秒;
签名采用HMAC-SHA256 对数据内容进行校验。
●数据过滤要求
采用PUT或POST传输JSON数据,请求头应指明Application/json;
使用明确的字符集,并验证数据范围、长度、类型;
JSON的所有参数应使用强类型或固定长度;
应使用白名单对所有参数进行安全过滤;
对包含特殊字符和注入攻击行为进行严格检测。
●错误信息处理要求
通过错误编码表示错误类型;
不能暴露敏感数据。
●证书要求
证书的生命周期通过PKI(Public key Infrastructure)来管理;
通过密钥管理系统来管理;
设置专人管理证书。
●服务器密钥要求
限制其访问权限;
分段进行存储。
●客户端密钥要求
使用复杂的算法生成私钥;
对私钥进行加密、分散、安全区域等方式进行保护。
●日志系统
应具备自动化请求日志收集和审计的系统,能通过分析识别发现潜在的攻击行为。
●日志内容
应包括API接口日志、业务服务日志、流量日志;
不应记录用户敏感信息。
●审计系统
应明确审计记录内容、实施审计;
妥善保存审计记录、定期分析和审查审计记录;
防止非法授权、篡改、删除审计记录。
●日志保存时间
不少于 6 个月。
●异常日志处理
应自动告警运维人员;
应该及时分析与处理。
●应采用最新的安全的版本;
●如无人维护的三方库,应及时自行修复;
●定期对三方依赖进行漏洞扫描。
通过了云上安全建设标准核心级、配置基线、安全设计要点后的平台合规情况如何呢,这就要看等保评测了。