夕立
- 关注
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9

最近又从0到1开始做SDL建设,又是一穷二白没有任何资源的情况,总结了下整个环节中可以用到的各种工具框架以及工作的几个阶段和大家分享。
互联网公司的SDL必须和现有的CI/CD(持续集成/持续部署)系统(如IDE、Gitlab、Jenkins、JIRA等)集成才能产生较好的效果。
SDL的建设必须置于敏捷开发、持续交付、技术运营之中,也就是要符合安全融于设计的思想。
SDL在实际落地中大体上可以分为4个阶段:计划阶段、编码阶段、测试阶段、部署阶段。
1、计划阶段
计划阶段需要做的工作有明确安全需求,进行安全设计、威胁建模、供应商安全评估、安全培训等。安全需求需要融入软件需求度量、UML建模、条目化项目管理等工作中。
安全设计原则包括:
原则 | 解释 |
---|---|
最小化攻击面 | 尽量减少系统脆弱面的暴露 |
建立默认安全机制 | 在初始情况下,系统的相关设置应该默认是安全的 |
执行最小权限原则 | 建议账户具有执行其业务流程所需的最少权限 |
执行纵深防御原则 | 以更多不同的控制措施处理同一个风险 |
安全处理异常事物 | 正确处理程序异常 |
应对第三方的不可控情况 | 应对外部系统不可控情况的安全处理措施 |
职责分离 | 针对不同管理角色做权限分离 |
避免安全保密化 | 关键系统的安全性不应该只依赖于保密 |
保持安全简单化 | 业务逻辑应尽量简单有效 |
正确修复安全问题 | 找出产生问题的根本原因,修复彻底,并进行安全测试 |
威胁建模工具:
SeaSponge是Mozilla提供的开源web威胁模型建模工具,通过浏览器就能很方便的建立web威胁模型。
Threat Dragon是由OWASP提供的免费开源威胁建模工具。
Microsoft Threat Modeling是微软提供的免费威胁建模工具。
第三方安全评估:
可以使用Google开源的VSAQ(供应商安全评估调查问卷)评估工具。
安全培训:
安全培训是一项长期的工作,从员工入职开始就应该进行。
2、编码阶段
编码阶段的主要工作有:
1、建立安全编码规范
2、静态源代码安全分析
3、开源组件安全扫描(OSS)
4、安全过滤库&中间件
5、安全编译检查
公开的安全编码规范参考:OWASP Secure Coding Practice
IDE代码检测插件:
Java编码规范方面的插件:P3C IDE
Java漏洞检测方面的插件:Findbugs及继任者Spotbugs
.NET漏洞检测方面的插件:Puma Scan
支持C/C++的插件:cppcheck
开源组件安全扫描(OSS)工具:
OSS方面的商业产品:BlackDuck
开源授权协议合规检查产品:FOSSology
组件漏洞检查方面的开源产品:Dependency-Track(可以结合maven或Jenkins使用)
组件漏洞检测产品: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
3、测试阶段
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
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
4、部署阶段
部署阶段主要保证开发的产品可以安全发布,相关的工作有:证书密钥管理、安全配置加固、操作审计、渗透测试。互联网公司应建立安全可控的发布平台,保证配置的自动化,且保证发布是可信和可审计的。
证书密钥管理:
证书密钥管理系统(KMS)主要用来负责API私钥、云IAM/STS证书、数据库密码、X.509证书、SSH证书、应用签名证书、加密通信密钥等的安全保存、发放和撤销。这些证书密码的泄露直接关系到公司的数据安全。
开源的KMS产品:Vault
操作审计:
主要保证发布过程的可控和可安全审计。与操作审计配套的技术有DMS数据库管理系统、堡垒机等。
DMS数据库管理系统可用来负责互联网公司统一的数据管理、认证授权、安全审计、数据趋势、数据追踪、BI图表和性能优化,解决了以往运维和研发对数据库访问的不可控和不可审计的问题。支持MySQL的开源产品有:Yearning
堡垒机对运维操作进行记录和追踪,并对主机访问提供细粒度和集中的权限控制,同时减少了关键业务主机对外的暴露面。开源的堡垒机产品有:JumpServer、Guacamole
渗透测试:
通过对业务、系统、网络的综合渗透测试来保证业务上线后的安全,这是一个长期持续的过程。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
