华为云DevOps系列之 —— 持续安全与审计(三)编码安全与工具
【摘要】 华为云DevOps系列之 —— 持续安全与审计(三)编码安全与工具
安全编码理念
- 安全编码(Secure Coding)是一种开发计算机软件的实践,可以防止意外引入安全漏洞。缺陷、错误和逻辑缺陷始终是导致可被普遍利用的软件漏洞的主要原因
软件组成分析
- 许多组织都使用 WordPress,Mangento,Drupal 甚至 jQuery 之类的开源库/框架/解决方案,他们每天都在发现新的漏洞
软件研发安全的目标
- 机密性(Confidentiality)
- 确保数据不被非法访问与窃取
- 可用性(Availability)
- 要求保护资源在需要时可访问
- 比如我们遭受了 DDoS 攻击,就会让系统产生拒绝服务
- 完整性(Integrity)
- 确保数据是完整的,未被篡改的
典型案例
C/C++ 案例
- C/C++ 语言里面,常见的Top安全问题,一直都是内存的安全问题
- 字符串操作不当带来的风险
- 源字符串长度大于目标缓冲区
- 整数溢出
- 危险的堆操作及带来的风险
- 危险的堆操作
- 内存拷贝时未判断目标内存长度的有效性(目标内存过小)
- 内存申请完毕后未判断空指针(空指针引用)
- 使用已经释放的内存
- 调用不匹配的内存管理操作(new,delete 与 malloc,free 混用)
- 重复释放内存(double free)
- 堆管理不当带来的风险
- 拒绝服务攻击:
- 由于堆被破坏,可导致程序崩溃
- 如果被攻击者通过恶意输入控制这种情况,攻击者可以使程序崩溃从而让合法用户无法继续使用
- 执行任意代码:攻击者输入的恶意数据被当做指令执行
- 拒绝服务攻击:
- 危险的堆操作
- 命令注入
- 不安全函数使用
- 比如 memcpy、strcpy … 这些函数往往没有对内存拷贝行为做一个保护,导致容易造成编码上的安全漏洞
- 像 Linux 系统都整理输出了它的一个替换的安全函数集,如
memcpy
替换成memcpy_s
,通常都是以_s
结尾
Java 案例
- mybatis 使用不当导致 SQL 注入风险
- OS 命令注入
- 字符串操作不当带来的风险
- 目录遍历攻击
- 如果我们没有对操作的文件目录和路径做标准化操作,黑客往往会利用进行目录遍历攻击,获得我们整个系统文件的内容和对应的一些信息
- XML 文件使用相关安全风险:如 XXE 攻击
典型错误
重复释放内存
- 释放内存时需要注意是否是已释放过的内存,注意不要重复释放
- 重复释放内存(double-free)会导致内存管理器出现问题。在一定情况下重复释放内存,有可能导致“堆溢出”漏洞,可以被用来执行恶意代码,具有很大的安全隐患
直接执行命令,未对命令字符串做校验
-
使用 Runtime.ext() 调用命令解释器执行命令时,未对命令字符串做校验
-
系统中应该尽量避免使用Runtime.exec(),通常建议使用系统的JDK提供的API来实现对应的功能能,若涉及到一些JDK未提供API的平台强相关的特性(如windows注册表访问),可优先考虑使用本地方法调用实现
开源静态代码分析工具
- 对于基于 Java 的应用程序,我们可以使用一个名为
FindSecBugs
的工具,该工具对代码进行深入分析(而不会给出过多的误报),并针对已在代码中识别出的所有漏洞提供全面的报告。可以根据漏洞的数量和严重性来做出决定,以继续运行管道或在管道可以继续之前无法修复漏洞
立体的华为云安全编码检查服务 —— 华为云实践
- 华为建立了从开发者桌面到版本构建各级检查、从公司到产品的各组织层面立体运营,在“九宫格”的每一段都有各自不同的策略,同时又有延续性,保证工具的检查效果,同时又不过份打扰开发者,让工具真正有用
安全编码检查工具需要具备的能力
- 流程支撑
- 从开发人员桌面至版本构建,提供嵌入流程的全自动安全编码检查
- 根据检查结果提供部分自动修复能力,并定向推送培训服务
- 检查服务
- 支持各类华为安全规范、checklist的自动化检查
- 通过词法、语法、语义、数据流、控制流分析,具备业界知名安全编码问题全种类检查拦截能力
- 通过工程定制、AI等技术手段控制检查误报率远好于业界平均水平
- 能力扩展
- 各类安全知识、能力例行完善,有效归纳,支撑上层检查能力,并可向最终用户提供有针对性的知识参考
- 发现的问题、告警可审计、可管理
- 能力、规则可定制、可扩展,灵活应对各类检查场景;精确制导,快速响应拦截需求,分层定制
静态代码检查
- 代码检查(CodeCheck)是基于云端实现代码质量管理的服务,软件开发者可在编码完成后执行多语言的代码静态检查和安全检查,获取全面的质量报告,并提供缺陷的改进建议和趋势分析,有效管控代码质量,帮助产品成功
最后,欢迎大家关注我的个人微信公众号 『小小猿若尘』,获取更多IT技术、干货知识、热点资讯。同时,我在公众号中分享了精心整理的一些视频资料(包括 Python全栈教程、AI教程、前端、数据库等),大家回复相应关键词即可获取网盘视频链接,感谢大家的关注😊
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)