代码精进之路
范学雷
前 Oracle 首席软件工程师,Java SE 安全组成员,OpenJDK 评审成员
38234 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
结束语 (1讲)
代码精进之路
15
15
1.0x
00:00/00:00
登录|注册

42 | 纵深,代码安全的深度防御

应用软件落实
核防护设计
防御体系要点
信息系统安全性
多样性之间的独立性
防护的多样性
软件质量保障
机制设置
设置纵深防御体系
有效攻击的特定场景
敏感数据泄露风险
内存空间释放
敏感数据归零
OpenJDK代码修改
纵深防御
风险预案
代码规范
一起来动手
小结
多样,加固防线的双保险
机制,发挥防线的作用
防线,攻击路径的纵深
案例分析
评审案例
代码安全管理
信息安全攻防
军事战略
纵深防御

该思维导图由 AI 生成,仅供参考

前面我们聊了保持代码长治久安的两个策略,代码规范和风险预案。这一次,我们接着聊代码安全管理的另外一个策略:纵深防御。
说起纵深防御(Defence-in-Depth),我们最常想到的是军事战略。在军事上,这个概念指的是通过层层设防,以全面深入的防御来延迟敌人的进攻,通过以空间换时间的方式来挫败敌方的攻击。这有别于一战定胜负的决斗思维。决斗思维需要集中所有的优势资源在最前线,一旦前线失守,整个战争基本就宣告结束了。
信息安全的攻防,有一个很重要的特点,就是不存在没有漏洞的防线。按照决斗思维部署的信息安全防御体系,也许仅仅只能是个心理安慰。事实上,现代网络安全防御体系和应用架构,不管你是否意识到,已经在广泛使用纵深防御的思想了,或多或少,或明或暗。

评审案例

我们一起来看一段 OpenJDK 的代码修改。其中 wrap() 方法的传入参数 key 是一个不能泄露的密钥,而 key.getEncoded() 导出这个密钥的编码,以便进行下一步的加密操作。有时候,密钥的编码可以等同于密钥,也是不能泄露的。你知道这样修改的必要性吗?
byte[] wrap(Key key)
throws IllegalBlockSizeException, InvalidKeyException {
byte[] result = null;
+ byte[] encodedKey = null;
try {
- byte[] encodedKey = key.getEncoded();
+ encodedKey = key.getEncoded();
if ((encodedKey == null) || (encodedKey.length == 0)) {
throw new InvalidKeyException(
"Cannot get an encoding of " +
"the key to be wrapped");
}
result = doFinal(encodedKey, 0, encodedKey.length);
} catch (BadPaddingException e) {
// Should never happen
+ } finally {
+ if (encodedKey != null) {
+ Arrays.fill(encodedKey, (byte)0x00);
+ }
}
return result;
}
这个代码变更,是对临时私密缓冲区的更积极的管理。

案例分析

我们知道,如果一段存储空间不再使用,一般而言,操作系统或者应用程序仅仅是“忘记”或者“删除”这段存储空间的索引,并不清理存储空间里的具体内容。我们常说“释放”一段内存空间。我觉得“释放”这个词使用很贴切。释放后,那段内存空间还在,模样也没有变化,内容也没有什么变化,只是被释放了,被丢弃了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了代码安全管理的纵深防御策略,以OpenJDK的代码修改为例,阐述了对临时私密缓冲区更积极的管理的必要性。作者分析了敏感数据释放后可能被未授权的用户获取的风险,并探讨了敏感数据归零的意义和局限性。强调了纵深防御体系的重要性,并通过“八道防线”的防御场景形象地阐述了纵深防御的概念。文章还提到了防线机制的设置和防护的多样性,以及纵深防御的重要性和实施方法。总体而言,本文通过实例和理论分析,为读者提供了深度的技术思考和实践指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《代码精进之路》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • wind
    纵深防御指南的链接点过去是page not found

    作者回复: 新的链接: https://www.oracle.com/database/technologies/security.html 还有一个中文版: https://www.oracle.com/technetwork/topics/security/sol-home-084333-zhs.html

    2019-09-29
    5
  • 天佑
    核电站通用设计准则,访问不了,显示不允许访问。。

    作者回复: 😯

    2019-04-10
    2
  • 松花皮蛋me
    老师我觉得专栏的安全方面内容太多,但是技巧类的太少了

    作者回复: 😄,技巧类的太多了,而且我懂得极少,所以写的也少。

    2019-04-10
    2
  • hua168
    我们怎么防止还是会有想不到位的地方,那么我们可不可以做一点监控或者一些策略。 1.做监控是为了方便跟踪,知道对方是怎么进来的 2.做策略是补防守不周全的情况,比如前面再加多一层安全过滤层,做一些行为判断 比如定义一些异常访问,如包括一些特殊字符,异常行为 但这些会加大工作量吧,是不是等公司壮大的时候再重做?

    作者回复: 有些公司的商业模式安全很重要,早做的好。 工作量这个标尺,太耽误事!没有工作的工作量最小。做最简单的事情,把简单的事情做好。别做大量的事情,把事情做的闹心。不需要现在就做的事情不去做,我们就有时间把少量的事情做好了。

    2019-04-10
    1
  • 拉可里啦
    那么问题来了,怎么将敏感数据归零?
    2020-01-09
    2
    1
  • ifelse
    没有防御纵深的信息系统,其安全性是堪忧的;一个防御体系,需要考虑纵深和多样性,更需要确保防御体系良性运转。--记下来
    2022-08-03归属地:浙江
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部