Java安全编码实践总结(下)

摘要: Java作为企业主流开发语言已流行多年,各种java安全编码规范也层出不穷,本文将从实践角度出发,整合工作中遇到过的多种常见安全漏洞,给出不同场景下的安全编码方式。

越权

Java通用权限框架(shiro)

进行增删改查操作时采用无法遍历的序号

对于敏感信息,应该进行掩码设置屏蔽关键信息。

垂直越权

角色权限矩阵

1592133404_5ee6071c7f053.png!small

限制匿名用户和低权限用户,执行操作前检查用户登录状态和权限清单

正确写法(判断用户权限清单是否包含请求的权限):

1592133424_5ee60730055c8.png!small

漏洞修复验证

1592133451_5ee6074bbac03.png!small

水平越权:

操作前判断下当前用户是否有对应数据权限,修复后修复前两次验证,通过返回长度不同可看到水平越权问题已解决。

1592133466_5ee6075ae9010.png!small

url重定向&ssrf

url重定向

对于白名单内的地址,用户可无感知跳转,不在白名单内的地址给用户风险提示,用户选择是否跳转

正确写法:

1592133669_5ee60825a94b8.png!small

漏洞修复验证

1592133677_5ee6082da949c.png!small

Ssrf

漏洞利用验证:

1592133787_5ee6089b3afc1.png!small

正确写法(限制请求协议,设置白名单域名,避免内网地址探测):

1592133796_5ee608a45b642.png!small

漏洞修复验证

1592133805_5ee608adf2898.png!small

拒绝服务

正则表达式拒绝服务,这种漏洞需要通过白盒审计发现,黑盒测试比较难发现。

错误写法(正则匹配时未考虑极端情况的资源消耗)

1592134342_5ee60ac615f17.png!small

漏洞利用验证,随着字符长度增加,响应时间会越来越长,cpu满负荷运转

1592134355_5ee60ad364a2b.png!small

正确写法(运行超过2秒就中止匹配):

1592134443_5ee60b2bbb707.png!small

漏洞修复验证:

1592134454_5ee60b36ac622.png!small

不安全的加密模式

需要通过白盒审计发现漏洞,直接黑盒测试比较难。

错误写法:使用ECB模式,相同明文生成相同密文

1592134558_5ee60b9ed6233.png!small

漏洞利用验证(使用选定明文攻击从后向前按位猜解):

1592134572_5ee60baccdac0.png!small

正确写法:使用CBC模式,相同明文生成不同密文

Cipher cipher =Cipher.getInstance("AES/CBC/PKCS5Padding");

不安全的随机数

需要通过白盒审计发现漏洞,直接黑盒测试比较难。

错误写法:使用伪随机,相同种子生成相同随机数序列

漏洞利用验证:

需要通过java生成前后2000毫秒内的随机数,然后使用python调用这些随机数尝试暴破

1592134682_5ee60c1a264f1.png!small

正确写法:使用Securerandom

漏洞修复验证(Securerandom不能指定seed,避免伪随机):

1592134710_5ee60c364dd8f.png!small

条件竞争

Servlet的单例模式容易导致条件竞争,也是推荐白盒方式审计漏洞。

错误写法:初始积分100个,每天限制签到1次领取1积分

1592134753_5ee60c6168931.png!small

漏洞利用验证(10个并发可实现多次签到,这里多并发跟业务功能复杂度和服务器性能有关,如果想必现漏洞,可以在读取签到次数和增加签到次数之间增加2秒延时,可以保证漏洞复现。)

1592134763_5ee60c6b21b2b.png!small

1592134777_5ee60c79c4033.png!small

正确写法:使用线程同步

1592134792_5ee60c88edc36.png!small

漏洞修复验证:

1592134804_5ee60c9451af6.png!small

修复后返回数据包速度明显变慢,不能再重复签到领积分

1592134839_5ee60cb717c0c.png!small


原文地址:https://www.freebuf.com/vuls/240172.html

上一篇:Redis未授权访问漏洞分析
下一篇:Java安全编码实践总结(上...