「オープンソースだから安全だよ。」
私はよくこんなことを聞く。考え方はシンプルだ:コードが公開されれば、誰かがそれをレビューしたはずだ。脆弱性が見つかる。コミュニティがそれを修正する。
私は実際のデータでこの仮説を検証することにした。
私たちはF-Droidから10個の人気のあるオープンソースAndroidアプリを取り出しました—毎日何百万人もの人が使っているアプリ—それらを私の静的解析セキュリティスキャナーで走らせました。その後、私はデコンパイルされたAPKコードに対して、一つ一つの発見を手動で確認しました.
結果は10個のアプリから60個の確認された脆弱性です.
アプリ
私は意図的に、さまざまなカテゴリーでよく知られている、活発にメンテナンスされているアプリを選びました:
- AntennaPod — パodcastマネージャー
- Bitcoin Wallet — クリプトカレンシーワレット
- DAVx5 — CalDAV/CardDAV同期
- GnuCash Android — 財務会計
- K-9 Mail — メールクライアント
- KeePassDX — パスワードマネージャー
- NewPipe — YouTubeフロントエンド
- Nextcloud — クラウドストレージクライアント
- Signal — 暗号化メッセージング
- VLC — メディアプレイヤー
これらは放棄されたサブプロジェクトではありません。これらは成熟し人気のあるアプリで、活発な開発者コミュニティがあります。それらのうちのいくつかは非常に機密性の高いデータを扱っています——パスワード、暗号通貨、プライベートメッセージ、財務記録.
方法論
各アプリについてI:
- APKをF-Droidからダウンロード
- 私の静的解析スキャナーを実行(マニフェスト分析、smaliコード分析、ネイティブライブラリ検査、汚染分析、暗号チェックをカバーする自動SAST)
- APKをapktoolを使用して逆コンパイルしてsmaliコード、マニフェスト、リソースを取得
- 実際の逆コンパイルされたコードと比較して、マニュアルで各発見を検証フラグ付けされたコードが本当に脆弱性だったか、誤検知だったかを確認
この最後のステップは重要です。自動スキャナーは多くの候補を生成します。手動の検証がないと、何が本物で何がノイズなのか分かりません.
私が発見したもの:最も一般的な5つの脆弱性
10つのアプリケーションについてすべての発見を手動で検証した後、明確なパターンが現れました。同じ間違いが繰り返し現れた——アプリの人気や扱うデータの機密性に関わらず。
1. 許可保護なしでエクスポートされたコンポーネント
発見箇所:10のアプリのうち9つ
Androidコンポーネント(アクティビティ、サービス、リシーバー、コンテントプロバイダー)が、それらと相互作用するためのいかなる許可も要求せずにexported="true"として宣言されている。これは、同じデバイスにインストールされているいかなるアプリもこれらのコンポーネントを起動したり、データを送信したり、データを受信したりできることを意味する。
この危険な理由は何ですか:金融アプリでは、悪意のあるアプリが「お金を送る」画面を起動できる可能性があります。パスワードマネージャーでは、データベースのロック解除フローをトリガーできる可能性があります。メールクライアントでは、事前に埋められたデータで作成画面を起動できる可能性があります。
対処法は簡単です——外部アクセスが必要ないコンポーネントにはexported="false"を設定するか、追加します。android:permission は、それらとどのようにやり取りできるかを制限する属性として使用されます。
2. 過度に広範な FileProvider パス
見つかりました:10 アプリのうち 4件
Android の FileProvider は、アプリ間でファイルを安全に共有するために設計されています。しかし、プロバイダーのパス設定が <root-path path="." /> を含んでいる場合<external-path path="." />は、コンテントURIを通じて効果的に全体のファイルシステムやすべての外部ストレージへのアクセスを提供します。
ファイルプロバイダの設定が許可するアプリがあったので、/storage/(すべての外部ストレージ)、アプリ全体の内部ディレクトリ、最悪の場合はデバイス全体のファイルシステムへのアクセスが可能です。
これらのプロバイダは通常エクスポートされていないにもかかわらず、使用します。grantUriPermissions="true" — それで、もしexportされたアクティビティがURI権限を転送する場合(一般的なAndroidパターン)、広範なパスは悪用可能になる。
3. 平文トラフィックが許可されている + ユーザーCA信頼
見つかった場所:10のアプリのうち6つ
多くのアプリは、ネットワークセキュリティ設定でcleartextTrafficPermitted="true"を許可していた。それ以外にも、いくつかのアプリは明示的にユーザーがインストールしたCA証明書を信頼していた<certificates src="user" />.
自托管サーバー(CalDAV、メール、クラウドストレージ)に接続するアプリケーションについては、一部意図的にそうなっている——ユーザーは自分のサーバーに接続する必要があり、これらはHTTPを使用したり、自己署名の証明書を使用したりする可能性があるからだ。しかし、この設定はグローバルに適用され、自托管エンドポイントだけに適用されない。アプリケーションが行うすべての接続——API呼び出し、分析、更新チェックを含む——は、デフォルトで傍受を許可する。
特に懸念すべきケース:メディアプレイヤーが平文HTTPで更新ファイルをダウンロードした。同じネットワーク上のマルウェアを中間者攻撃者が悪意のあるAPKとして正当な更新として提供できる。
4. 弱い暗号化実装
見つかった場所:10のアプリのうち3つ
これらは危険なものから時代遅れのものまで様々だった:
- SSL検証が完全に無効化されていた — すべての証明書を受け入れるメソッドを呼び出すアプリ。金融アプリ。現金を扱っている。
- ECB暗号モード — メディアプレイヤーのリモートアクセス機能がAESをECBモードで使用している。同じ平文ブロックが同じ暗号文ブロックを生成する。これは教科書の暗号ミスである。
-
java.util.Random暗号学的文脈 — その代わりにSecureRandomにより出力が予測可能になります. - 信頼まず使用 (TOFU) なしでピン留め — サーバー証明書が受け入れられたら、永遠に信頼され、証明書が変更される場合(これはMITM攻撃を示す可能性がある)でもそうします.
5. 缺少タップジャッキング(オーバーレイ攻撃)保護
見つかった場所:10のアプリのうち8つ
ほとんどのアプリが設定していませんfilterTouchesWhenObscured="true" は、機密性の高い UI 要素において機能します。これは、オーバーレイ権限を持つ悪意のあるアプリが、アプリの上に目に見えないレイヤーを描画し、ユーザーのタップをキャプチャできる、あるいはユーザーを意図しないボタンをタップさせることに騙せることを意味します。
これは特に以下のものにとって懸念されるものです:
- パスワードマネージャー(マスターパスワードの入力をキャプチャ)
- クリプト通貨ウォレット(取引の確認)
- 悪意ある証明書の受諾に関する対話画面
- OAuth/ログイン画面(アクセスの承認)
これはどういう意味ですか
オープンソースであるからといって安全であるとは限りません。コードが公開されていることを意味するだけで、それが検証されているとは限りません はレビューされました。これらは人気があり、維持状態が良いアプリで、活発なコミュニティがあり、それらにはシステム的なレビューで見つけられるセキュリティ上の問題がまだあります。
これは開発者を恥辱させることについてではありません。オープンソースのメンテナはしばしば素晴らしい仕事をしているボランティアです。ポイントは、セキュリティには専念し、集中した注意が必要であるということです。機能を構築するためのスキルセットとは異なるスキルセットであり、専用のツールと専門知識の恩恵を受けることができます。
Androidアプリが機密データ(財務情報、資格情報、個人情報、健康データ)を扱っている場合、セキュリティレビューを受ける価値があります単なる自動スキャンで数百の候補を生成して終わりではなく、すべての発見が検証され文脈で解釈される適切な評価です
主要なポイント
自動スキャナーは候補を発見するだけで、確認された脆弱性ではありません 手動検証なしでは、何が本物か分からない。
同じ5つの脆弱性パターンがほぼ全てのアプリケーションに見られる。 エクスポートされたコンポーネント、広範なファイルプロバイダー、平文トラフィック、弱い暗号化、欠落したオーバーレイ保護。これらはあらゆるセキュリティレビューで見逃せない低垂り果実だ。
コンテキストは非常に重要だ。 メディアプレイヤーで公開動画をストリーミングしている際の平文トラフィックは、バンキングアプリでの平文トラフィックとは異なるリスクです。文脈のないセキュリティの発見は、単なる報告書の一行に過ぎません.
オープンソースはセキュリティレビューを可能にしますが、それを置き換えるものではありません. コードが公開されていることは、徹底的な分析の前提条件ですが、分析が行われていることを保証するものではありません.
私はモバイルセキュリティ研究者で、Androidアプリケーションセキュリティ評価を専門としています。アプリのセキュリティ体制について話し合いたい場合は、yehor.mamaiev@gmail.comまでお気軽にご連絡ください。











