0

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

だから私は次のようにfortifyを実行してみました:-

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のソースをコピーすると、ルールが実行されます(恐ろしいことですが、遊んでいるだけです)。

4

2 に答える 2

0

まず、名前空間のパターンは.*. 次に、カスタム ルール ファイルをどこに保存しますか? 含まれていない場合は<SCA install>/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 はこれを行わないため、最初にプロジェクトをビルドして、これをクラスパスのどこかに指定できるようにする必要があります。

于 2013-11-28T11:23:28.560 に答える