描述
当Java应用程序使用Java Native Interface (JNI)来调用代码写在另一个编程语言,它可以使应用程序代码中的弱点,即使这些弱点不能发生在Java。
扩展描述
许多安全功能,程序员可能理所当然不申请本地代码,因此您必须仔细审查所有这些潜在问题的代码。语言用来实现本机代码可能更容易受到缓冲区溢出和其他攻击。本机代码不受保护的安全特性的运行时环境,如强类型和数组边界检查。
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
自然
类型
ID
的名字
ChildOf
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。
695年
使用低级的功能
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关观点“七有害的王国”(cwe - 700)
自然
类型
ID
的名字
ChildOf
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。
20.
不正确的输入验证
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示范例子
示例1
下面的代码定义一个名为Echo的类。类声明一个本地方法(下面定义),它使用C echo命令进入控制台返回给用户。下面的C代码定义了回声的本机方法实现类:
类回波{
公共原生空隙runEcho ();
静态{
System.loadLibrary(“回声”);
}
公共静态void main (String [] args) {
}
}
# include < jni.h >
# include”呼应。h”/ /使用javah编译上面的java类
# include < stdio . h >
JNIEXPORT空白JNICALL
Java_Echo_runEcho (JNIEnv * env jobject obj)
{
char buf [64]; 得到(buf); printf (buf);
}
因为Java实现的例子是,它可能会出现免疫记忆缓冲区溢出漏洞等问题。尽管Java做一份好工作的内存操作安全,这种保护并不延伸到漏洞发生在其他语言编写的源代码,使用Java本地接口访问。尽管内存保护提供Java, C代码在这个例子很容易受到缓冲区溢出,因为它利用了(),不检查其输入的长度。
Sun Java (TM)教程提供了以下描述的JNI(见参考):JNI框架允许您的本机方法使用Java对象在Java代码相同的方式使用这些对象。本机方法可以创建Java对象,包括数组和字符串,然后检查和使用这些对象执行它的任务。一个本地方法还可以检查和使用Java应用程序代码创建的对象。一个本地方法甚至可以更新的Java对象,它创建或传递给它,而这些更新对象是可用的Java应用程序。因此,母语的一面和Java的应用程序可以创建、更新和访问Java对象,然后在他们之间共享这些对象。
脆弱性在上面的例子中可以很容易地通过一个源代码审计发现的本机方法实现。这可能不是实际或可能根据C源代码的可用性和项目建造的方式,但在许多情况下,它可能足够了。然而,Java和本地方法之间共享对象的能力扩张的潜在风险更阴险的情况下用Java数据处理不当可能会导致意想不到的漏洞在本机代码或不安全的操作本机代码在Java中腐败的数据结构。漏洞在本机代码通过一个Java应用程序访问通常利用在同样的方式在当地语言编写的应用程序。唯一挑战这样的攻击是攻击者识别,Java应用程序使用本机代码以执行特定的操作。这可以以多种方式完成,包括确定具体行为往往是实现与本机代码或利用系统信息曝光的Java应用程序,揭示其使用JNI(见参考)。
潜在的缓解措施
实施阶段:
在JNI调用实现错误处理。
实施阶段:
不要使用JNI调用如果你不信任当地图书馆。
实施阶段:
不愿使用JNI调用。Java API可能存在。
弱点Ordinalities
Ordinality
描述
主
(其他弱点的弱点存在独立的)
检测方法
自动静态分析
自动静态分析,通常被称为静态应用程序安全性测试(科协),可以找到一些实例的这个弱点分析源代码或二进制/编译后的代码,而不必执行它。通常情况下,这是通过建立一个模型的数据流和控制流,然后寻找潜在攻击模式,连接“源”与“下沉”(输入)的起源(目的地数据与外部组件交互,较低的层,如操作系统,等等)。
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
脆弱性映射笔记
用法:允许
(CWE ID可以用来映射到现实世界的漏洞)
原因: 可接受的使用
理由是:
这个CWE条目是变体的抽象级别,这是一个首选的抽象级别映射到漏洞的根本原因。
评论:
仔细阅读这两个名称和描述,以确保此映射是一个适当的配合。不要试图“力”映射到底层基础/变体只是遵守这首选的抽象级别。
分类法映射
映射分类名称
节点ID
适合
映射节点名
7有害的王国
不安全的JNI
CERT甲骨文安全Java编码标准(2011)
SEC08-J
定义包装器本地方法
SEI CERT甲骨文Java编码标准
JNI01-J
安全地调用执行任务的标准api使用的直接调用者的类加载器实例(loadLibrary)
SEI CERT甲骨文Java编码标准
JNI00-J
不精确的
定义包装器本地方法
软件故障模式
SFP3
使用不当的API
引用
更多的信息是可用的,请编辑自定义过滤器或选择一个不同的过滤器。