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