<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    Unsafe JNI

                    ABSTRACT

                    Java Native Interface(JNI)應用不當會導致 Java 應用程序容易受到其他語言的安全漏洞攻擊。

                    EXPLANATION

                    當 Java 應用程序使用 JNI 調用以其他編程語言編寫的代碼時,會發生 Unsafe JNI 漏洞。

                    例如:以下 Java 代碼定義了一個名為 Echo 的類。這個類聲明了一個本地方法(下文定義),使用 C 語言將控制臺上輸入的命令回顯給用戶。


                    class Echo {
                    public native void runEcho();

                    static {
                    System.loadLibrary("echo");
                    }

                    public static void main(String[] args) {
                    new Echo().runEcho();
                    }
                    }


                    以下 C 語言代碼定義了在 Echo 類中實現的本地方法:


                    #include <jni.h>
                    #include "Echo.h" //the java class above compiled with javah
                    #include <stdio.h>

                    JNIEXPORT void JNICALL
                    Java_Echo_runEcho(JNIEnv *env, jobject obj)
                    {
                    char buf[64];
                    gets(buf);
                    printf(buf);
                    }


                    因為這個例子是在 Java 中實現的,所以看上去似乎可以避免諸如 buffer overflow 之類的內存問題。雖然 Java 在內存安全方面做的很好,但是該保護機制并不適用于其他語言編寫的且通過 Java 本地接口 (Java Native Interface,JNI) 訪問的源代碼中出現的漏洞。盡管有 Java 提供的內存保護機制,但是這個例子中的 C 語言代碼仍然很容易受到 buffer overflow 的攻擊,因為它在沒有執行任何輸入檢查的情況下就使用了 gets()

                    Sun Java(TM) 教程對 JNI 描述如下 [1]:

                    一旦有了 JNI 框架,您的本地方法就可以像 Java 代碼那樣利用 Java 對象。本地方法可以創建 Java 對象(包括數組和字符串),并且檢查和應用這些對象,以便執行各種相關的任務。本地方法也可以檢查和應用由 Java 應用程序代碼創建的對象。本地方法甚至可以更新由自己創建的或傳遞給它的 Java 對象,且更新后的對象可以應用到 Java 應用程序中。因此,在應用程序中,無論是本地語言還是 Java 語言都能創建、更新和訪問 Java 對象,并在兩種語言間共享這些對象。

                    通過檢查本地方法實現的源代碼,可以輕松地發現上述例子中存在的漏洞。根據不同的 C 語言源代碼和項目構建方式,這種方式可能在某些情況下不可行,但是多數情況下還是可行的。然而,這種能夠在 Java 方法和本地方法間共享對象的能力會進一步加大潛在的風險。在 Java 中數據處理不當時,可能會導致本地代碼出現意想不到的漏洞,同樣本地代碼中的不安全操作會破壞 Java 的數據結構。

                    通過 Java 應用程序訪問的本地代碼中出現的漏洞,通常與由本地語言編寫的應用程序中存在的漏洞是一樣的。這種攻擊面臨的唯一挑戰是:攻擊者需要確定 Java 應用程序是否使用了本地代碼執行某些特定的操作。可以用多種方法實現上述目的,包括識別那些通常用本地代碼實現的某些特定行為,或者利用 Java 應用程序中 system information leak 的漏洞(表明系統使用了 JNI) [2]。

                    REFERENCES

                    [1] Standards Mapping - OWASP Top 10 2004 - (OWASP 2004) A1 Unvalidated Input

                    [2] Standards Mapping - Security Technical Implementation Guide Version 3 - (STIG 3) APP3510 CAT I

                    [3] Standards Mapping - Security Technical Implementation Guide Version 3.4 - (STIG 3.4) APP3510 CAT I

                    [4] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 111

                    [5] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 - (PCI 1.2) Requirement 6.3.1.1

                    [6] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 - (PCI 1.1) Requirement 6.5.1

                    [7] Standards Mapping - FIPS200 - (FISMA) SI

                    [8] B. Stearns The Java Tutorial:The Java Native Interface


                    Copyright 2013 Fortify Software - All rights reserved.
                    (Generated from version 2013.1.1.0008 of the Fortify Secure Coding Rulepacks)
                    desc.semantic.java.unsafe_jni

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频