Insecure Design(不安全的设计)
这个是 OWASP 在今年新出的类别.
根据 OWASP 的说法,这一类着重于在设计与架构中的风险.来呼吁更多使用到威胁建模,安全设计模式与参考架构.
也就是说在程序设计的时候,避免无效的程序设置,暴露敏感数据.
其中著名的 CWE 中有
- CWE-209:产生的错误信息中包含敏感信息
- CWE-256:受保护的凭证不足
- CWE-502:信任边界冲突
- CWE-522:凭据保护不足
更多的 CWE 例子可以点击这里
我个人更倾向于是应用设计时的逻辑漏洞
以 CWE-209 为例
比方说 SQL 注入的错误回显
也就是说, SQL 查询报错的语句,返回显示界面
至于错误回显是怎么造成的,可以看我的博客文章里
再换个思路想
在一个登录界面,你尝试乱输入一个账号和密码
这个应用它只会返回
账户不存在
密码不正确
这就很可怕了
只要它没有爬虫限制
那么我就可以尝试爬下该应用整个所有账号
所以,现在绝大部分应用的登录,业务处理等会采取准确且模糊的说服(?
再说说 CWE-256
我们可以看一段代码
$user = $_GET['user'];
$pass = $_GET['pass'];
$checkpass = $_GET['checkpass'];
if($pass == $checkpass){
SetUserPassword($user, $pass);
//修改密码函数
}
我们可以看出这是个简单的修改密码的过程
但是这里可以触发水平越权的漏洞
因为这段函数只是校验了密码是否正确
并没有关注修改账户的一致性
也就是说,我可以直接修改 URL 值
来达到修改其他用户账户密码的目的
总的来说,不安全设计是一种广泛的类别,会呈现许多不同的弱点.
安全设计是什么?
根据 OWASP 的说法
安全设计是一种方法,不断评估威胁,并且保证代码能够通过稳健设计和测试,防止已知的攻击方法.安全设计需要安全的开发生命周期,某种形式的安全设计模式或者铺砌道路组件库或工具,以及威胁建模。
如何预防?
本人代码资历较浅,在这里只能采用 OWASP 的说法
-
与 AppSec 专业人员建立并使用安全的开发生命周期,以帮助评估和设计与安全和隐私相关的控制
-
建立和使用安全设计模式库或准备使用组件的铺好的道路
-
将威胁建模用于关键身份验证、访问控制、业务逻辑和关键流
-
编写单元和集成测试以验证所有关键流都能抵抗威胁模型
今天又是美好的一天呢 😉