开发安全铁三角
为了能更好地理解今天所讲,请大家先回顾一下之前“开发安全铁三角纵横谈”内容:专栏特辑 | 开发安全铁三角纵横谈(十一)初探开发安全能力建设
(三)
安全设计和安全编码阶段
在安全设计和安全编码阶段,安全开发能力是连贯的,所以放在一起讲。从开发角度来说,对开发的支持永远是三个层次:
· 方案级
通过提供文档说明,告诉程序员应该如何设计、如何编码解决问题。
· 代码级
通过提供组件方式的代码,让程序员通过调用组件,解决问题。
· 框架级
通过提供开发框架,让程序员在框架的基础上进一步编程,而框架本身已经解决了很多问题。
而开发安全也一样,也是通过安全解决方案和安全组件、安全框架三个级别来支撑安全设计和安全编码。
· 安全解决方案
安全解决方案是企业针对安全建立的统一解决方案,比如企业实现加密算法,是调用加密机还是软加密,这些都应该统一起来,形成统一方案。
只有形成统一方案,开发安全的质量才能真正实现可管理、可提升。
安全解决方案的建立其实非常简单,对照企业的安全需求库,针对每一条安全需求,分析需要不需要建立统一的实现方案,把所有需要建立统一方案的都实现了,就形成安全解决方案库了。
防止重放攻击的解决方案
1.1 登录重放
1.1.1 前置知识
重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。重放攻击可以由发起者,也可以由拦截并重发该数据的敌方进行。攻击者利用网络监听或者其他方式盗取认证凭据,之后再把它重新发给认证服务器。重放攻击在任何网络通过程中都可能发生,是计算机世界黑客常用的攻击方式之一。
登录重放及通过重放登录请求的报文,或者将登录请求报文中的关键参数(账号、密码)修改为历史成功登录时的账号密码参数,可以成功登录系统。
威胁描述:
应用系统中常用的登录基本流程如下:
1、前端web页面用户输入账号、密码,点击登录。
2、请求提交之前,web端首先通过客户端对密码明文进行加密。
3、提交账号、加密后的密码密文
4、请求提交至后端,服务端解密,并验证账号与密码是否与数据库中的一致,一致则认为登录成功,反之失败。
上述流程看似安全,认为传输过程中的密码是加密的,即使被监听截取到,由于加密算法被保护、加密算法的不可逆性,监听者无法破解密码密文获取明文密码。
其实不然!监听者无需解密出密码明文即可登录!监听者只需将监听到的url(如:http://****/login.do?method=login&password=加密之后的密码&userid=登录账号)重放一下,即可冒充你的身份登录系统。
涉及功能点:
登录,以及密码设置、密码修改、密码重置等使用密码的功能点。
1.1.2 修复方案
对密码加密时,使用随机因子,随机因子应参与加密运算。可使用随机数或时间戳等方式。如此,每次随机数和时间戳不同,加密后密码密文也不同,实现“一次一密”。
1、使用时间戳。
(1)密码加密时,使用服务端下发的时间戳;
(2)服务端在验密时,先验证请求中的时间戳足够接近当前时刻的时间戳(适当的时间窗,越大越能包容网络传输延时,越小越能防重放攻击),再利用时间戳解密密码密文。
2、使用随机数。
(1)密码加密时,使用服务端下发的随机数;
(2)服务端在验密时,利用服务端保存的随机数(如果验密随机数从客户端获取,服务端必须验证此随机数和本次登录服务端下发的随机数一致)解密验密;
(3)随机数在使用后,服务端应立即重置,防止重复使用。
1.1.3 代码参考
安全开发实例:
(1)服务端生成随机数代码功能:生成6位由数字组成的随机数,并将其存入session中。
(2)随机数的使用
代码功能:服务端利用session内的随机数和前端上送的密码密文解密验密,并重置随机数。
建立解决方案库是安全设计和安全编码的支撑的基础,至关重要。
拓展阅读●●
原文始发于微信公众号(国舜股份):专栏特辑 | 开发安全铁三角纵横谈(十二)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论