【问题标题】:custom fortify rule with android使用 android 自定义强化规则
【发布时间】:2012-10-16 07:38:29
【问题描述】:

我想编写一个强化规则,在 android 代码库中查找“addJavascriptInterface”实例。

<?xml version="1.0" encoding="UTF-8"?>
<RulePack xmlns="xmlns://www.fortifysoftware.com/schema/rules">
    <RulePackID>80B927D2-5408-41B4-B47C-B4958DAAECBD</RulePackID>
    <SKU>SKU-80B927D2-5408-41B4-B47C-B4958DAAECBD</SKU>
    <Name><![CDATA[android.xml]]></Name>
    <Version>1.0</Version>
    <Description><![CDATA[Description for android.xml]]></Description>
    <Rules version="3.13">
        <RuleDefinitions>
            <SemanticRule formatVersion="3.13" language="java">
                <MetaInfo>
                    <Group name="Accuracy">5.0</Group>
                    <Group name="Impact">5.0</Group>
                    <Group name="RemediationEffort">15.0</Group>
                    <Group name="Probability">5.0</Group>
                </MetaInfo>
                <RuleID>CC4B8F82-0824-4DF1-8A5F-513DC6820B99</RuleID>
                <VulnCategory>Testjsinterface</VulnCategory>
                <DefaultSeverity>5.0</DefaultSeverity>
                <Description/>
                <Type>default</Type>
                <FunctionIdentifier>
                    <NamespaceName>
                        <Pattern>\w*</Pattern>
                    </NamespaceName>
                    <ClassName>
                        <Pattern>WebView</Pattern>
                    </ClassName>
                    <FunctionName>
                        <Pattern>addJavascriptInterface</Pattern>
                    </FunctionName>
                    <ApplyTo implements="true" overrides="true" extends="true"/>
                </FunctionIdentifier>
            </SemanticRule>
        </RuleDefinitions>
    </Rules>
</RulePack>

当我尝试针对代码库运行 fortify 时,我得到以下信息:-

[warning]: The following references to java classes could not be resolved. Please make sure to supply all the required jar files that contain these classes to SCA.
    Override
    android.app.Activity
    android.content.res.AssetManager
    android.os.Bundle
    android.util.Log
    android.view.KeyEvent
    android.webkit.WebSettings
    android.webkit.WebView
    android.webkit.WebViewClient

所以我尝试如下运行强化:-

bin/sourceanalyzer ~/repos/android-rule-tests/WebViewTest -cp ~/android-sdks/platforms/android-16/android.jar

警告消失了,但规则似乎仍然没有触发——可能出了什么问题?

编辑 为清楚起见,WebViewTest 是一个使用 addJavascriptInterface 的示例项目。

EDIT2 为了清楚起见,添加了一些代码

package org.infil00p.phoneTest;

import java.io.IOException;

import com.infil00p.phoneTest.R;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.content.res.AssetManager;

public class TestActivity extends Activity {

    WebView appView;
    TestWebViewClient testClient;
    String TAG="FAILTAG";
    Bolt data = new Bolt();
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        testClient = new TestWebViewClient();

        appView = (WebView) findViewById(R.id.appView);
        appView.getSettings().setDatabaseEnabled(true);
        appView.getSettings().setJavaScriptEnabled(true);
        appView.addJavascriptInterface(data, "test");

        appView.setWebViewClient(testClient);

        appView.loadUrl("file:///android_asset/index.html");

    }
    ....

EDIT3 我对此进行了一些尝试,最终得出结论,在我的特定情况下,语义规则不会触发,直到它看到在同一文件中的类中定义的函数。获取 android 源并复制 WebView.java 的源会导致规则触发(这是一件可怕的事情,但我只是在玩弄)。

【问题讨论】:

  • 缺少的 JAR 与自定义规则不起作用无关。这是扫描 Java 应用程序时的常见错误。
  • 能否提供代码 sn-p 或 URL 用于 WebViewTest 的源代码?
  • 为了清晰起见,我添加了部分代码。
  • 我还尝试在多个开源库上运行它,例如 github.com/beaucollins/android-hybrid-demo ;效果还是一样的。
  • 语义规则不是直接的 GREP。它只查看程序中使用的代码。程序的入口点是什么? Android 没有传统的“main()”,所以它应该类似于“onCreate”。 developer.android.com/reference/android/app/…

标签: android rules fortify


【解决方案1】:

首先我建议命名空间的模式为.*。其次,您将自定义规则文件保存到哪里?如果不在&lt;SCA install&gt;/Core/config/customrules 中,则需要使用-rules 选项指定。 此外,您缺少构建 ID,您的命令应类似于:

sourceanalyzer -b test -clean
sourceanalyzer -b test -source 1.6 ~/repos/android-rule-tests/WebViewTest -cp ~/android-sdks/platforms/android-16/android.jar -rules /path/to/rules/file.xml
sourceanalyzer -b test -scan -f myResults.fpr

我认为在 Android 中还会在运行时创建一个 R 类文件。因为 SCA 不这样做,所以应该首先构建项目,以便可以在某个地方的类路径中指定它。

【讨论】:

    【解决方案2】:
    1. 清理缓存:~/sourceanalyzer -b test -clean

    2. TRANSLATE(代码翻译时无需提及-filter、-rules、-project-template):~/sourceanalyzer -b test -source 1.6 ~/repos/android-rule-tests/WebViewTest -cp ~ /android-sdks/platforms/android-16/android.jar

    3. SCAN(指定规则/过滤器/模板):~/sourceanalyzer -b test -filter 'absolute_path_file.txt' -rules 'absolute_path_rulename.xml' -scan -f myResults.fpr

    如果将 custom_rule.xml 放在 FORTIFY_HOME/Core/config/rules/ 目录(连同 HP 规则包),则可以在扫描期间省略 -rules 参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 2017-09-21
      • 2017-08-03
      • 2021-03-17
      • 2013-05-20
      • 2016-02-22
      相关资源
      最近更新 更多