安全架构4--SDL安全与企业办公安全落地实践
安全开发生命周期的管理是保障互联网企业业务正常运营的重要举措,直接关系到企业线上业务运行的安全性。而企业办公安全涉及的安全隐患则更加复杂多样,各种数据泄露、人员违规、外部入侵、物理安全等问题数不胜数。
一、安全开发生命周期
互联网公司的SDL必须和现有的CI/CD(持续集成/持续部署)系统(如IDE、Gitlab、Jenkins、JIRA等)集成才能产生较好的效果。
SDL 的建设必须置于敏捷开发、持续交付、技术运营之中,也就是要符合安全融于设计的思想。
SDL 在实际落地中大体上可以分为4个阶段:计划阶段
、编码阶段
、测试阶段
、部署阶段
。
1.1 计划阶段
计划阶段需要做的工作有明确安全需求,进行安全设计、威胁建模、供应商安全评估、安全培训等。安全需求需要融入软件需求度量、UML建模、条目化项目管理等工作中。
安全设计原则包括:
原则 | 解释 |
---|---|
最小化攻击面 | 尽量减少系统脆弱面的暴露 |
建立默认安全机制 | 在初始情况下,系统的相关设置应该默认是安全的 |
执行最小权限原则 | 建议账户具有执行其业务流程所需的最少权限 |
执行纵深防御原则 | 以更多不同的控制措施处理同一个风险 |
安全处理异常事物 | 正确处理程序异常 |
应对第三方的不可控情况 | 应对外部系统不可控情况的安全处理措施 |
职责分离 | 针对不同管理角色做权限分离 |
避免安全保密化 | 关键系统的安全性不应该只依赖于保密 |
保持安全简单化 | 业务逻辑应尽量简单有效 |
正确修复安全问题 | 找出产生问题的根本原因,修复彻底,并进行安全测试 |
威胁建模工具:
SeaSponge
是Mozilla提供的开源web威胁模型建模工具,通过浏览器就能很方便的建立web威胁模型。Threat Dragon
是由OWASP提供的免费开源威胁建模工具。Microsoft Threat Modeling
是微软提供的免费威胁建模工具。
第三方安全评估:
可以使用Google开源的VSAQ
(供应商安全评估调查问卷)评估工具。
安全培训:
安全培训是一项长期的工作,从员工入职开始就应该进行。
1.2 编码阶段
编码阶段的主要工作有:
- 建立安全编码规范
- 静态源代码安全分析
- 开源组件安全扫描(OSS)
- 安全过滤库&中间件
- 安全编译检查
公开的安全编码规范参考:
OWASP Secure Coding Practice
IDE代码检测插件:
- Java编码规范方面的插件:
P3C IDE
- Java漏洞检测方面的插件:
Findbugs
及继任者Spotbugs
- .NET漏洞检测方面的插件:
Puma Scan
- 支持C/C++的插件:
cppcheck
开源组件安全扫描(OSS)工具:
- OSS方面的商业产品:
BlackDuck
- 开源授权协议合规检查产品:
FOSSology
- 组件漏洞检查方面的开源产品:
Dependency-Check
(可以结合maven或[enkins使用) - 组件漏洞检测产品:
synk
(可以扫描node.js nmp、ruby、java依赖中的漏洞) - 依赖方面的安全检查最为丰富的是SourceClear公司的:
EFDA
安全过滤库&中间件:
- 常见的java安全过滤库:
ESAPI
- Node.js的web安全过滤库可以参考:
egg-security
- 浏览器端的过滤库有:
DOMPurify
安全编译检查:
- 通过Visual studio编译选项中的
/GS
选项检查缓冲区溢出,/guard:cf
选项检查控制流安全。 - iOS APP安全编译选项有
-fobjc-arc
、-fstack-protector-all
、-pie
1.3 测试阶段
1.3.1 自动化安全测试
自动化安全测试又包括静态应用安全测试(SAST)、动态应用安全测试(DAST)、交互应用安全测试(IAST)
静态应用安全测试
即对应用进行白盒测试。
- 商业产品有:
Fortify
、奇安信代码安全卫士
- 开源PHP源代码漏洞扫描产品:
RIPS
、progpilot
- 针对Python、Ruby、Go语言的安全扫描的综合工具:
huskyCI
- 针对java的安全扫描工具主要有:
spotbugs
以及相关插件fb-contrib
、find-sec-bugs
- 针对C/C++的安全扫描综合工具:
flawfinder
- 支持多种语言的综合安全扫描工具:
Infer
- 静态应用安全测试的综合平台:
SonarQube
动态应用安全测试
即对应用进行黑盒测试。
- 商业产品有:
AWVS
、AppScan
、绿盟漏洞扫描器
- 开源产品有:
Arachni
- 针对REST API自动化测试的产品:
Astra
- 针对Web Service进行安全测试的产品:
WSSAT
- 针对Android的开源DAST测试产品:
Qark
交互应用安全测试
作用于应用内部的安全漏洞测试。
- 商业产品有:
Synopsys Seeker
、Veracode
、CxIAST
- 针对PHP的开源产品有:
PHP taint
、PHP Aspis
- 针对Java的开源产品有:
security_taint_propagation
1.3.2 人工安全测试
代码审计和模糊测试
- 人工代码审计:
OWASP代码审计指南
- 针对协议的常用模糊测试工具:
Peach fuzzer
(可以对各种文件和协议进行黑盒测试) - 针对二进制漏洞的模糊测试工具有:
Asan
、Tsan
、Msan
、UBsan
- 开源的Fuzz测试平台有:
OSS-Fuzz
web安全测试
- web安全测试:
OWASP安全测试指南
- 主要使用的工具:
BurpSuite
、Fiddler
移动安全测试
- 移动安全测试:
OWASP移动安全测试指南
- 开源的产品有:
MobSF
- Android人工测试的工具有:
Drozer
、AppUse
、Xposed
、Frida
- ios人工测试的工具有:
needle
、iOSSecAudit
1.4 部署阶段
部署阶段主要保证开发的产品可以安全发布,相关的工作有:证书密钥管理、安全配置加固、操作审计、渗透测试。互联网公司应建立安全可控的发布平台,保证配置的自动化,且保证发布是可信和可审计的。
证书密钥管理:
证书密钥管理系统(KMS)主要用来负责API私钥、云IAM/STS证书、数据库密码、X.509证书、SSH证书、应用签名证书、加密通信密钥等的安全保存、发放和撤销。这些证书密码的泄露直接关系到公司的数据安全。
开源的KMS产品:Vault
操作审计:
主要保证发布过程的可控和可安全审计。与操作审计配套的技术有DMS数据库管理系统、堡垒机等。
DMS数据库管理系统可用来负责互联网公司统一的数据管理、认证授权、安全审计、数据趋势、数据追踪、BI图表和性能优化,解决了以往运维和研发对数据库访问的不可控和不可审计的问题。支持MySQL的开源产品有:Yearning
堡垒机对运维操作进行记录和追踪,并对主机访问提供细粒度和集中的权限控制,同时减少了关键业务主机对外的暴露面。开源的堡垒机产品有:JumpServer
、Guacamole
渗透测试:
通过对业务、系统、网络的综合渗透测试来保证业务上线后的安全,这是一个长期持续的过程。
二、企业办公安全
办公安全历来是信息安全的薄弱环节,常见的威胁还有数据泄露、内部恶意人员、APT攻击、病毒蠕虫等。相比线上业务安全,企业内部办公安全更为复杂,如存在移动办公、自带设备BYOD办公等场景。
2.1 人员管理
在员工入职前,企业就应该对员工进行背景审查、入职后应对其进行安全意识培训,研发等岗位还应该进行专门的安全开发培训,严格一点还应该进行考试。
宣扬企业安全文化,定期组织安全周、安全月等活动。应将安全违规的处理和安全审批流程等纳入流程制度,并制定必要的处罚和KPI考核制度。此外,还应当对各种办公活动进行安全审计,对企业内部环境和外部业务服务进行合规审查,以满足法律和行业规范的要求。
2.2 终端设备
企业应该部署集中管理式的AV杀毒软件和EDR终端检测与响应产品,以抵御病毒和APT攻击。开源的EDR产品有Facebook的Osquery
和Mozilla的MIG
。
重要业务部门应该部署DLP数据防泄露、DRM数据版权管理产品,防止企业关键资产(如数据、代码、文档)泄露。
现在使用移动终端工作的情况也很普遍,因此,移动办公产品也应当加强管控,常见的移动终端安全产品有MDM移动设备管理和MAM移动应用管理。商业产品有IBM MaaS360
、SAP Mobile Secure
等,开源产品有flyve-mdm
等。
广义的终端设备还包括门禁系统、打印和传真系统、电话会议系统、视频监控系统、Wi-Fi路由系统等,应当对这些设备也考虑安全方案。
最后,可以通过SIEM产品(如Splunk
)的UEBA用户实体和行为分析发现由用户主动行为或账号被盗、终端被控制引起的异常安全行为攻击。
2.3 办公服务
办公服务是指企业内部的办公支撑服务平台,如企业邮箱、企业网盘、CRM、ERP、OA、HR、BOSS等系统和研发支撑平台。
渗透测试是检验办公服务的安全的有效途径,通过渗透测试可以发现企业办公网络中的各种薄弱点,以便于不断改进和完善自身安全。