华为云DevOps系列之 —— 持续安全与审计(三)编码安全与工具

举报
ruochen 发表于 2021/08/22 12:35:11 2021/08/22
【摘要】 华为云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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。