0
点赞
收藏
分享

微信扫一扫

Java最新面试题100道,包含答案示例(41-50题)

夏木之下 2023-04-23 阅读 101

声明

本文是学习GB-T 39412-2020 信息安全技术 代码安全审计规范. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们

代码实现安全缺陷审计列表

面向对象程序安全

审计指标:不宜混用具有泛型和非泛型的数据类型。

审计人员宜检查代码是否存在泛型和非泛型之间数据类型的混用现象,应避免泛型和非泛型数据类型的混用。代码规范/不规范示例参见附录B.3.1。

审计指标:包含敏感信息的类不应可复制和可序列化。

审计人员应检查代码中包含敏感信息类的相关行为是否安全,具体要求包括但不限于:

  1. 应检查代码中包含敏感信息的类是否可复制,如Java语言中实现了Clonenable接口,使类可复制。包含敏感信息的类不应被复制;
  2. 应检查代码中包含敏感信息的类是否可实现了序列化接口,使类可序列化。包含敏感信息的类不应可序列化。

审计指标:在类进行比较时,不宜只使用名称比较。

审计人员宜检查代码中当判定一个对象是否属于特定的类或两个对象的类是否相同时,宜比较类对象,不能仅基于类名称进行判定。

审计指标:应禁止返回类的私有可变成员的引用。

审计人员应检查代码中是否存在返回类私有可变成员的引用的情况。如结果为肯定,则可能存在内部状态被非预期修改的风险。

审计指标:不应将不可序列化的对象存储到磁盘。

审计人员应检查代码是否试图将不可序列化的对象写到磁盘中,将不可序列化的对象存储到磁盘上,会导致对象反序列化失败,可能引起任意代码执行风险。代码的不规范/规范用法示例参见附录B.3.2。

并发程序安全

审计指标:代码应避免不同会话之间发生信息泄露。

审计人员应检查代码在应用的不同会话之间是否会发生信息泄露,尤其是在多线程环境下。

审计指标:不宜发布未完成初始化的对象。

审计人员宜检查代码在多线程环境中,是否存在对象初始化尚未完成前,就可被其他线程引用的情况。

审计指标:宜对共享资源使用正确的并发处理机制。

审计人员应检查代码中共享资源的使用及并发处理的过程,具体要求包括但不限于:

  1. 宜检查代码在多线程环境中对共享数据的访问是否为同步访问,如果结果为否定,则提示存在安全风险;
  2. 宜检查代码中线程间的共享对象是否声明正确的存储持续期,如果结果为否定,则提示存在安全风险;
  3. 宜检查代码中是否在并发上下文中使用不可重入的函数,如果结果为肯定,则提示存在安全风险;
  4. 宜检查代码中是否避免了检查时间与使用时间资源冲突;
  5. 宜检查代码中多个线程中等待彼此释放锁的可执行片段是否避免了死锁情况发生,如果结果为否定,则提示存在安全风险;
  6. 宜检查代码对共享资源执行敏感操作时是否检查加锁状态,如果结果为否定,则提示存在安全风险。代码规范/不规范示例参见附录B.3.3;
  7. 宜检查代码是否将敏感信息存储在没有被锁定或被错误锁定的内存中,(将敏感信息存储于加锁不恰当的内存区域,可能会导致该内存通过虚拟内存管理器被写入到在磁盘上的交换文件中,从而使得数据更容易被外部获取),如果结果为肯定,则提示存在安全风险;
  8. 宜检查代码中是否存在关键资源多重加锁,如果结果为肯定,则提示存在安全风险;
  9. 宜检查代码中是否存在关键资源多重解锁,如果结果为肯定,则提示存在安全风险;
  10. 宜检查代码中是否存在对未加锁的资源进行解锁,如果结果为肯定,则提示存在安全风险;
  11. 宜检查代码中在异常发生时是否释放已经持有的锁,如果结果为否定,则提示存在安全风险。

审计指标:在调用子进程之前应关闭敏感文件描述符,避免子进程使用这些描述符来执行未经授权的I/O操作。

审计人员宜检查代码是否存在调用子进程之前有未关闭敏感文件描述符的情形。当一个新进程被创建或执行时,子进程继承任何打开的文件描述符,如不关闭则可能会造成未经授权的访问。代码规范/不规范示例参见附录B.3.4。

审计指标:应及时释放线程专有对象。

审计人员应检查代码是否及时释放线程专有对象,防止内存泄漏造成拒绝服务攻击。

函数调用安全

审计指标:应避免外部控制的格式化字符串。

审计人员应检查代码中是否存在函数接受格式化字符串作为参数的情况,格式化字符串是否来自外部,如果是,则可能引起注入类安全风险。代码规范/不规范示例参见附录B.3.5。

审计指标:宜对方法或函数的参数进行验证。

审计人员宜检查代码是否存在对方法或函数的参数进行合法性或安全性校验。代码规范/不规范示例参见附录B.3.6。

审计指标:函数功能调用宜正确指定参数。

审计人员宜检查函数/方法调用时参数指定是否正确,是否存在如下情况:

  1. 不正确数量的参数;
  2. 参数顺序不正确;
  3. 参数类型不正确;
  4. 错误的值。

以上检查项的任一结果为肯定,则提示存在安全风险。

审计指标:宜检查函数的返回值,避免忽略函数的返回值。

审计人员宜检查代码是否对方法或函数调用的返回值做了检查,如未检查函数的返回值,则提示代码存在无法检测非预期状态的风险。

审计指标:不宜返回栈变量地址。

审计人员宜检查代码中是否存在在函数中返回栈变量地址的情形。因栈变量在函数调用结束后就会被释放,再使用该变量地址时可能会出现意想不到的结果。代码不规范示例参见附录B.3.7。

审计指标:不宜使用具有不一致性实现的函数或方法。

审计人员宜检查代码是否存在使用了在不同版本具有不一致实现的函数或方法。因使用在不同操作系统或不同版本实现不一致的函数或方法,可能导致代码被移植到不同环境时改变行为。

审计指标:不应暴露危险的方法或函数。

审计人员应检查代码中的应用程序编程接口(API)或与外部交互的接口是否暴露了危险方法或函数,暴露危险的方法或函数可能会带来非授权访问攻击。危险方法或函数暴露的形式主要包括方法/函数原本设计为非外部用户使用、原本设计为部分用户访问等。代码的不规范/规范用法示例参见附录B.3.8。

异常处理安全

审计指标:宜恰当进行异常处理。

审计人员宜检查代码中异常处理是否安全,具体要求包括但不限于:

  1. 宜检查是否对异常进行检查并处理;
  2. 宜检查是否采用标准化的、一致的异常处理机制来处理代码中的异常;
  3. 宜检查错误发生时,是否提供正确的状态代码或返回值来表示发生的错误;
  4. 宜检查是否对执行文件I/O的返回值进行检查;
  5. 宜检查是否对函数或方法返回值是否为预期值进行了检查;
  6. 宜检查是否返回定制的错误页面给用户来预防敏感信息的泄露。

如上检查项的任一结果为否定,则提示存在安全风险。

指针安全

审计指标:不宜使用不兼容类型的指针来访问变量。

审计人员宜检查代码是否使用不兼容类型的指针来访问变量。通过不可兼容类型的指针修改变量可能会导致不可预测的结果。代码的不规范用法示例参见附录B.3.9。

审计指标:宜避免使用指针的减法来确定内存大小。

审计人员宜检查代码是否采用一个指针减去另一个指针的方式来确定内存大小。如果两个指针不是同一类型,那么使用指针的减法来确定内存大小的计算可能会不正确,导致不可预测的结果。代码的不规范/规范用法示例参见附录B.3.10。

审计指标:不宜把固定地址赋值给指针。

审计人员宜检查代码是否将一个NULL或0以外的固定地址赋值给指针。将固定地址赋值给指针会降低代码的可移植性,并为攻击者进行注入代码攻击提供便利。

审计指标:不应把指向非结构体类型指针强制转换为指向结构类型的指针并访问其字段。

审计人员应检查代码是否将指向非结构体类型的指针,强制转换为指向结构类型的指针并访问其字段,如果结果为肯定,则可能存在内存访问错误或数据损坏的风险。

审计指标:不应使用偏移越界的指针。

审计人员应检查代码在使用指针时是否存在偏移越界的情况,因指标偏移越界可能会造成访问缓冲区溢出风险。

审计指标:应避免无效指针的使用。

审计人员应检查代码是否存在使用无效指针的情况,因使用无效指针,可能会产生非预期行为。

代码生成安全

审计指标:应构建安全的编译环境。

审计人员应检查编译环境安全,具体要求包括但不限于:

a)应检查编译器是否从官方或其他可靠渠道获取,并确保其安全可靠;

b)宜检查编译器是否存在不必要的编译功能。

审计指标:应构建安全的链接环境。

审计人员应检查链接环境安全,具体要求包括但不限于:

  1. 应检查编译后的目标文件是否安全,确保链接后生成的可执行文件的安全;
  2. 应检查链接依赖库是否安全,避免引入不安全的依赖库。

延伸阅读

更多内容 可以 GB-T 39412-2020 信息安全技术 代码安全审计规范. 进一步学习

联系我们

DB65-T 3018-2009 设施农业生产水肥调控技术规程 新疆维吾尔自治区.pdf

举报

相关推荐

0 条评论