Ostorlabの検出エンジン
Ostorlabが提供する検出機能の概要
Ostorlabの脆弱性検出技術は、3つの主要コンポーネント、すなわち静的解析エンジン、動的・振る舞い解析エンジン、 そしてバックエンド解析エンジンに基づいています。

静的解析エンジンは次の機能を実行します。
-
設定チェック:例えば、アプリケーションがデバッグモードを無効にしているか、安全なApache Cordovaのホワイトリストなど 適切な本番フレームワーク設定を備えているか、あるいは安全なネットワークセキュリティポリシーを持っているかを確認します。
-
依存関係チェック:一部のフレームワークが親切に提供するバージョンファイルを通じて、あるいはOstorlabチームが 手作業で作成した特定の識別子をバイナリから調べることによって、依存関係とそのバージョンを特定することに重点を置きます。 これらの依存関係は既知の脆弱性についてスキャンされます。
-
テイント解析:Ostorlabが提供する高度で独自の機能の一つが、高性能かつ本番レベルのテイント解析エンジンです。 このエンジンはAndroidバイトコードなど一連の技術をカバーし、アプリケーション全体にわたって解析を計算して、数十もの メソッド呼び出しの中に隠された脆弱性を探し出すことができます。これらの脆弱性には、ECBブロックモードやDES アルゴリズムの使用のような安全でない暗号の使用、URLスキームやコンテンツプロバイダーを通じて露出したSQL インジェクション、サービスやコンテンツプロバイダーを通じて露出したコマンド実行が含まれます。

動的解析エンジンはいくつかのアクションを実行します。
-
アプリケーションの準備:解析のためにアプリケーションを再パッケージします。これにはデバッグモードの有効化、 アプリケーションの再署名、解析を妨げる可能性のある問題のあるチェックの無効化が含まれます。
-
端末の準備:実機にアプリケーションをインストールし、アプリケーションをデバッガー待機状態に設定します。 これはAndroidとiOSの両方に適用されます。Ostorlabは性能と再現性のために実機に依存しています。
-
デバッグプロトコル解析:JDWPやLLDBといったデバッグプロトコルを使ってアプリケーションを計装します。Ostorlabは アプリケーションと低レベルで対話できるよう独自のスタックを維持しています。計装とは、ソース(信頼できない入力の)と シンク(脆弱性につながる可能性がある)として知られる戦略的なAPIにトレースを設置することからなります。Ostorlabは 安定性と拡張性の両面から、インメモリ解析と比較してデバッグプロトコルに依存した解析を行います。デバッグプロトコルは、 APIをフックするためにメモリを操作するのと比べてリスクが低く、また新しいOSバージョンにわたっても安定しています。 デバッグプロトコルはアプリケーションを遅くするため性能上のペナルティがありますが、そのペナルティは脆弱性検出の 文脈では許容範囲にとどまります。拡張性は、swiftやobjective Cのメモリレイアウトを理解するといったデバッガーが提供する 機能に由来し、これによって明確で簡潔な計装コードを書くことができます。
-
トレースと解析:トレースが収集され、安全でないメソッドで暗号APIを呼び出す、あるいはハードコードされた鍵を使う、 といった既知の脆弱なパターンがないかをその場で解析します。このステップでは、TLS/SSL APIとSocket APIに直接フックすることで トラフィックも収集します。このアプローチはSSLピンニングを回避します。収集されたトラフィックはその後バックエンド解析 エンジンへ送られます。レポートの例はこちらをご覧ください。
-
モンキーテスト:テストモンキーが、認証ページを検出する一連のヒューリスティックを用いて、あるいはアプリケーション内を ランダムにクリックして、アプリケーションとの対話を開始します。複雑なUI操作の場合は、その対話をスクリプト化するために BDDを使ってUI自動化ルールが記述されます。


バックエンド解析エンジンはトラフィックの収集を動的解析に依存しており、その後エンジンは次のアクションを実行します。
-
パッシブ検出:これは、Cookie属性の欠如、安全でないCORS、推測されたバージョンから分かる脆弱なコンポーネントなど、 リクエストとレスポンスの属性、例えばボディやヘッダーを解析して脆弱性を見つけることに依存します。
-
アクティブ検出:Ostorlabはモバイルファーストのセキュリティスキャナーとして、GraphQLやProtobufのような、モバイル アプリケーションでよく使われるいくつかのシリアライゼーションプロトコルを理解することに重点を置いています。これらの シリアライゼーションプロトコルは、SQLインジェクション、XXE、テンプレートインジェクションなどの脆弱性についてファジングされます。
これらの段階は順次実行されるわけではありません。各段階の背後には、特定のタスクに特化した複数のマイクロエージェントが 存在するためです。これらのエージェントは共有バスを使って通信し、イベントベースのアーキテクチャに依存しています。
これらの各解析の間、アプリケーションのスクリーンショット、端末ログ、逆コンパイルされたソースコードといったアーティファクトが 収集されます。

3つの解析エンジンは、アプリケーションのアタックサーフェスを網羅的にカバーし、それぞれの解析が単独で持つ固有の 欠点を補い合います。例えば静的解析はアプリケーションのアタックサーフェスを非常によくカバーしますが、同時に複雑な 実行経路やデッドコードのために誤検知を生じることがあります。動的解析は実際の挙動を観察するため誤検知がはるかに 少ないものの、アプリケーション表面の完全なカバレッジを保証することはできません。そしてバックエンド解析は、 ほとんどの場合モバイルアプリケーション専用であるバックエンド固有の脆弱性を検出します。