当社のAIエンジンNeutronが、UCバークレーのCyberGymベンチマークで97.1%のスコアを記録しました。 詳細を見る

製品

製品

プライバシー分析の拡充、Attack Surfaceのスキャンプロファイル、GitHubソースマッピングの改善

Ostorlabの2025年5月のアップデートでは、21の新しいデータ収集カテゴリと強化された検証ツールにより、包括的なプライバシー分析機能を提供します。今回のリリースでは、セキュリティ評価を最適化するAttack Surface専用のスキャンプロファイルを導入し、脆弱性を正確にマッピングするためのGitHubソースコード連携を追加し、スキャンを制御するQPSレート制限を実装しました。そのほか、モバイルスキャンのURL正規表現による制御、Jira連携の効率化、検出精度を高めるフィンガープリント機能の拡充などの改善も含まれます。

📈 レポートとエクスポートの強化

  • PDFレポートの命名を改善:PDFエクスポートの命名方法を改善し、レポートを整理・識別しやすくしました。
    PDFエクスポートの命名

🎯 Attack Surface

  • Attack Surfaceスキャン向けに2つの新しいスキャンプロファイルを導入:スキャンの深さと重点をより適切に制御できます。
    • Attack Surface KEV Scan:既知の悪用された脆弱性(Known Exploited Vulnerabilities、KEV)に焦点を当てたスキャンで、最も重大で実際に悪用されているセキュリティ問題を特定します。
    • Attack Surface Exhaustive Scan:組織の外部に対するセキュリティ態勢を網羅的にカバーする包括的なスキャンです。 新しいAttack Surfaceスキャンを作成する際は、スキャンプロファイルの選択が必要になりました。
      Attack Surfaceのスキャンプロファイル

🔗 連携

  • GitHub連携を強化し、コード内の脆弱性をコメントとして表示:OstorlabのGithub App連携では、プラットフォームがセキュリティ問題を検出すると、脆弱性が検出された正確な位置でプルリクエストに直接コメントを追加し、ワンクリックで修正を適用できるボタンを表示します。 これにより、開発者はコードベース上で脆弱性に関するコンテキストをすぐに把握でき、ツールを切り替えることなくセキュリティ問題を理解し、修正しやすくなります。

🛡️ スキャンと脆弱性管理

  • 脆弱性スキャン中の送信ネットワークトラフィックに対するQPS(Queries Per Second)レート制限を制御するオプションを実装しました。 この機能により、Web App、Web API、Network、Attack Surfaceの各スキャンで、毎秒のクエリ数の上限を指定できます。
  • 監視ルールにスコープURLの正規表現を追加:モバイルスキャンで、正規表現パターンを使って特定のドメインを許可リストに登録できるようになりました。これにより、テストの対象をアプリケーションの関連する部分だけに絞り込めます。 ルールの作成:
    Androidでのルールの作成
    ルールの更新:
    Androidでのルールの編集

🎫 修復

  • Jira連携のエクスペリエンスを効率化:Jiraチケットの作成プロセスのUIを改善し、より直感的で一貫性のあるインターフェースにしました。
    Jira連携のUI

🔒 コンプライアンスとプライバシー

プライバシー分析の強化

  • 新しいプライバシースキャンのサマリーテーブル:アプリのデータ収集の実態を示す包括的なテーブルを追加しました。内容は次のとおりです。
    • プライバシーポリシーで宣言されている内容
    • 検証のためのポリシーの実際の引用
    • 当社のスキャンがアプリ内で検出した内容
    • 不一致が見つかった場合のエビデンス

これにより、プライバシーコンプライアンスの問題をひと目で把握しやすくなります。

プライバシー分析テーブル

プライバシーポリシー分析の拡充

  • 21の新しいデータ収集カテゴリでプライバシースキャンを強化し、より包括的なプライバシーポリシー分析を実現しました。現在のカテゴリには次のものが含まれます。
    • 機微な個人情報(EMAIL、PERSONAL_IDENTIFIERS)
    • 金融データ(PAYMENT_FINANCIAL)
    • 機微な属性(BIOMETRIC_DATA、GENDER_IDENTITY、RELIGIOUS_BELIEFS、POLITICAL_AFFILIATIONS、PHILOSOPHICAL_BELIEFS、CRIMINAL_RECORD)
    • 位置情報の追跡(CURRENT_LOCATION、LOCATION_HISTORY)
    • メディアへのアクセス(USER_PHOTOS_MEDIA)
    • ユーザー行動の監視(SEARCH_QUERIES、APP_USAGE、BROWSING_ACTIVITY)

この拡充により、プライバシー上の懸念をより徹底的に特定でき、コンプライアンスの検証が改善され、アプリケーションに潜むプライバシーリスクをより深く理解できるようになります。

🔍 検出

フィンガープリントの強化

  • ネイティブライブラリのフィンガープリントを追加:プライバシーを重視したメッセージングアプリケーションによく同梱される、3つの重要なライブラリの検出機能を強化しました。

    • libsignal_jni:セキュアなメッセージングのための中核となる暗号ライブラリ
    • libsqlcipher:端末内のメッセージストレージを保護するデータベース暗号化ライブラリ
    • libringrtc:セキュアな音声通話とビデオ通話のためのWebRTC実装
  • フィンガープリントを追加:mojoPortal、Craft CMS、FastCGIを検出できるようになりました。

生体認証のセキュリティ
  • 安全でない生体認証の検出を追加:新しいスキャナーは、適切な暗号的バインディングなしに指紋認証や顔認証を使用しているアプリを特定します。生体認証による検証が暗号鍵に安全に紐付けられていない状態を検出します。これは、AndroidとiOSの両方で、攻撃者がセキュリティ制御をバイパスするために悪用できる脆弱性です。

安全でない生体認証のコード例

以下は、CryptoObjectを生体認証プロンプトに渡しているものの、実際にはユーザーデータの復号に使用していない、安全でない生体認証の実装例です。

// VULNERABLE IMPLEMENTATION: Biometric authentication with CryptoObject but without actually using it

public class MisusedCryptoObjectAuthenticator {
    private static final String ENCRYPTED_DATA_KEY = "encrypted_data";
    private SharedPreferences preferences;
    private Cipher cipher;
    private SecretKey secretKey;

    public MisusedCryptoObjectAuthenticator(Context context) {
        this.preferences = context.getSharedPreferences("app_prefs", Context.MODE_PRIVATE);
        try {
            // Initialize crypto components
            KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
            keyGenerator.init(256);
            secretKey = keyGenerator.generateKey();
            cipher = Cipher.getInstance("AES/GCM/NoPadding");
            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void authenticateUser(final AuthenticationCallback callback) {
        try {
            // We create a CryptoObject and pass it to the biometric prompt
            BiometricPrompt.CryptoObject cryptoObject = new BiometricPrompt.CryptoObject(cipher);

            BiometricPrompt biometricPrompt = new BiometricPrompt(activity,
                    executor,
                    new BiometricPrompt.AuthenticationCallback() {
                        @Override
                        public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) {
                            // VULNERABILITY: We have the cryptoObject but don't use it!
                            // Instead, we just set a flag or retrieve data directly

                            // The CryptoObject from the result is ignored
                            BiometricPrompt.CryptoObject cryptoResult = result.getCryptoObject();

                            // Simply set authentication flag without using the CryptoObject
                            setAuthenticated(true);
                            callback.onSuccess();
                        }

                        @Override
                        public void onAuthenticationFailed() {
                            callback.onFailure("Authentication failed");
                        }
                    });

            // We pass the cryptoObject to authenticate
            biometricPrompt.authenticate(promptInfo, cryptoObject);

        } catch (Exception e) {
            callback.onFailure("Error: " + e.getMessage());
        }
    }

    private void setAuthenticated(boolean authenticated) {
        preferences.edit().putBoolean("is_authenticated", authenticated).apply();
    }

    // VULNERABILITY: This method retrieves sensitive data without requiring the
    // cryptoObject that was used during authentication
    public String getSensitiveData() {
        // Simply checks a boolean flag instead of using crypto binding
        if (preferences.getBoolean("is_authenticated", false)) {
            // Get data without using the CryptoObject for decryption
            String encryptedData = preferences.getString(ENCRYPTED_DATA_KEY, null);
            // We manually decrypt using our stored secretKey instead of
            // using the key bound to biometric authentication
            return decryptWithStoredKey(encryptedData);
        }
        return null;
    }

    private String decryptWithStoredKey(String encryptedData) {
        // Decrypt using the stored key, not the one from biometric authentication
        try {
            // This uses the class-level secretKey, not anything from the biometric result
            Cipher decryptCipher = Cipher.getInstance("AES/GCM/NoPadding");
            decryptCipher.init(Cipher.DECRYPT_MODE, secretKey);
            return new String(decryptCipher.doFinal(Base64.decode(encryptedData, Base64.DEFAULT)));
        } catch (Exception e) {
            return null;
        }
    }
}

脆弱性の説明: 1. コードはCryptoObjectを作成し、生体認証のプロセスに渡している 2. しかし、認証に成功した後、CryptoObjectは無視される 3. アプリはCryptoObjectを使って機密データを復号する代わりに、次の処理を行う - 単純なブール値のフラグを設定する - 生体認証による検証に紐付いていない、別に保存された鍵を復号に使用する 4. これにより、攻撃者は保存されたフラグを直接操作したり、復号鍵にアクセスしたりして、生体認証のセキュリティをバイパスできる

GraphQLのセキュリティ

  • GraphQLアナライザーを強化し、脆弱性が検出されなかった場合には「Secure」の脆弱性として報告するようにしました。セキュリティ評価の結果をより確信を持って判断できます。

Threat Center

複数のCVEへの対応を追加しました。

  • CVE-2025-2825/CVE-2025-31161:CrushFTPの重大な認証バイパス。CrushFTPのバージョン10.0.0-10.8.3および11.0.0-11.3.0に影響する深刻な脆弱性(CVSS 9.8)で、S3形式の認証ヘッダーとCookieを操作することで認証を完全にバイパスできます。

  • CVE-2025-22457:Ivantiのスタックベースのバッファオーバーフロー。X-Forwarded-For HTTPヘッダーの検証が不十分なことにより、Ivanti Connect Secure、Policy Secure、ZTA Gatewaysに影響する重大なリモートコード実行の脆弱性です。

  • CVE-2025-2636:InstaWP ConnectプラグインのLFI脆弱性。30,000件以上のアクティブなインストールがある人気のWordPressプラグイン、InstaWP Connectにおける重大なローカルファイルインクルージョンの脆弱性です。

  • CVE-2025-32432:Craft CMSのリモートコード実行。アセット変換処理における安全でないデシリアライゼーションにより、複数のバージョンのCraft CMSに影響する、認証不要の重大なRCE脆弱性です。

  • CVE-2024-12847:Netgearルーターのコマンドインジェクション検出の強化。ランダム化されたトークンを含む動的なechoペイロードを使って検出を改善し、正確な脆弱性検出を維持しながら誤検知を排除しました。

  • CVE-2019-9874:SitecoreのAnti-CSRFにおけるデシリアライゼーションの脆弱性。Sitecore CMSにおける重大なRCE脆弱性で、認証されていない攻撃者が安全でないデシリアライゼーションを通じて任意のコードを実行できます。

  • CVE-2017-3066:Javaのデシリアライゼーションを介したAdobe ColdFusionのRCE。特別に細工したシリアライズ済みのJavaオブジェクトを送信することで、認証されていない攻撃者が任意のコードを実行できる重大な脆弱性です。

  • CVE-2017-12637:SAP NetWeaver AS Javaのディレクトリトラバーサル。認証されていない攻撃者がパストラバーサルの操作によってサーバー上の機密ファイルにアクセスできる、重大度「高」の脆弱性です。