これは、2014年に書かれたAndroidアプリケーションの共同高度な欠陥評価フレームワーク(JAADS、潜在的な商標問題を避けるために改名された元の名前のJade)です。Jaadasは、Sootの力を持つJavaとScalaで、Androidアプリケーションのためのinterprocedureとaprocedure static Analysisの両方を提供するツールです。その機能には、API誤用分析、ローカル産業(意図的なクラッシュ)分析、断続的な汚染フロー分析(意図からデリケートなAPIへ、つまり、意図から区切ることができ、それを使用してアクティビティを開始する)が含まれます。
Jaadasは、マルチデックスを1つに組み合わせて分析することもできます。 Jaadasの検出機能のほとんどは、Groovy Configファイルとテキストファイル(Sootのソースおよびシンクファイル)で定義できます。
Jaadasは単一のJARアーカイブに詰め込まれており、デフォルトの脆弱性ルールファイルを提供します。 Jaadasには2つの主要なモードがあります。
FullAnalysis 、断続的な全体的なアプリケーション分析と断片間データフロー分析を含む、JaadasとSootの全力を解き放ちます。しかし、それはまた多くの時間を消費する可能性があり、小さなメモリ(<16GB)のマシンで終了しない場合があります。デフォルトはフルモードです。
FastAnalysis通常、1分未満で終了し、大規模なバッチ分析を目的としています。メキシウムの柔軟性を実現するために、断線間分析が無効になっています。通常の状況では、このモードは一般的な監査に十分です。
- ファスタナリシスは、凝集を可能にし、完全分析を無効にします。
分析用コマンドライン: java -jar jade-0.1.jar vulnanalysis -f 1.apk -p /xxx/android-sdks/platforms/ -c /xxx/JAADAS/jade/config/ --fastanalysis
### -Cオプション-Cは、汚染ルール、ソース、シンク、脆弱なAPI説明など、構成ファイルのディレクトリとして提供する必要があります。構成ファイルのコンテンツを理解していない場合は、それらを変更せず、そのままにしておきます。
### -Pオプション-PオプションAndroidプラットフォームディレクトリを指定します。これは通常、$ {android_sdk}/platforms/を指すだけです。
SOOTでは、特定のバージョンのPlatform.jarを提示する必要があります。たとえば、分析ターゲットにTargetSDK = 22がある場合、SootはPlatforms/Android-22/Android.jarを探します。特定の瓶を持っていない場合、実際にあなたがすでに持っているものを指しているその位置で象徴的なものを作ることができます。分析の結果精度には影響しません。
-fオプション分析するAPKを指定します。
Jaadasは結果に出力し、コンソールのリストになり、json-edの結果を出力/ディレクトリに書き込みます:{md5_of_input_apk} .txt。このレポの出力ディレクトリでサンプルを見つけることができます:https://github.com/flankerhqd/jaadas/blob/master/output/92db77bbe1cae9004f11ef9d3d6cbf08.txt
スニペット:
}, {
"desc" : " sensitive data flow " ,
"sourceStmt" : " $r24 = virtualinvoke $r2.<android.content.Intent: java.lang.String getStringExtra(java.lang.String)>($r24) " ,
"custom" : " " ,
"vulnKind" : 2 ,
"destMethod" : " <cn.jpush.android.service.PushReceiver: void onReceive(android.content.Context,android.content.Intent)> " ,
"paths" : [],
"destStmt" : " virtualinvoke $r1.<android.content.Context: void sendBroadcast(android.content.Intent,java.lang.String)>($r27, $r24) " ,
"sourceMethod" : " <cn.jpush.android.service.PushReceiver: void onReceive(android.content.Context,android.content.Intent)> "
}, {
"desc" : " sensitive data flow " ,
"sourceStmt" : " $r4 = virtualinvoke $r2.<android.content.Intent: android.os.Bundle getExtras()>() " ,
"custom" : " " ,
"vulnKind" : 2 ,
"destMethod" : " <com.fugao.fxhealth.receiver.JPushReceiver: void onReceive(android.content.Context,android.content.Intent)> " ,
"paths" : [],
"destStmt" : " virtualinvoke $r1.<android.content.Context: void startActivity(android.content.Intent)>($r2) " ,
"sourceMethod" : " <com.fugao.fxhealth.receiver.JPushReceiver: void onReceive(android.content.Context,android.content.Intent)> "
}, {
"desc" : " sensitive data flow " ,
"sourceStmt" : " $r6 = virtualinvoke $r2.<android.content.Intent: java.lang.String getStringExtra(java.lang.String)>($r6) " ,
"custom" : " " ,
"vulnKind" : 2 ,
"destMethod" : " <cn.jpush.android.data.x: void a(android.content.Context)> " ,
"paths" : [],
"destStmt" : " virtualinvoke $r1.<android.content.Context: void startActivity(android.content.Intent)>($r2) " ,
"sourceMethod" : " <cn.jpush.android.service.PushReceiver: void onReceive(android.content.Context,android.content.Intent)> "
}, {
"desc" : " sensitive data flow " ,
"sourceStmt" : " $r9 = virtualinvoke $r2.<android.content.Intent: java.lang.String getStringExtra(java.lang.String)>($r9) " ,
"custom" : " " ,
"vulnKind" : 2 ,
"destMethod" : " <cn.jpush.android.data.x: void a(android.content.Context)> " ,
"paths" : [],
"destStmt" : " virtualinvoke $r1.<android.content.Context: void startActivity(android.content.Intent)>($r2) " ,
"sourceMethod" : " <cn.jpush.android.service.PushReceiver: void onReceive(android.content.Context,android.content.Intent)> "
}]}OOMを回避するには、コマンドラインに-xmxオプションを追加します。
JaadasはGradleによって組織されています。ソースディレクトリのルートでgradle fatJarを実行し、シングルバンドルされたJARは./jade/build/で生成されます。各ディレクトリは、実際には元々Gitサブモジュールを表します。簡単にするために、私はそれらを同じルートディレクトリに組み合わせています。希望どおりに変更して、上流のすすの変更を追跡できます。
https://speakerdeck.com/flankerhqd/jade-joint-advanced-defect-assesment
https://github.com/flankerhqd/jaadas/wiki
https://github.com/flankerhqd/jaadas/releases/download/release0.1/jaadas-0.1.zip
Sootの著者(https://github.com/sable/soot)に感謝します。
これは単なる研究プロトタイプであり、お客様の責任で使用してください。結果には、静的分析の性質により、誤検知と偽陰性が含まれる場合があります。自由にフォークして引っ張ってください。
jdk> = 1.8(必須)
Scala> = 2.11テスト