セキュリティアーキテクチャは、 Debian と The Update Framework で実証されたモデルを、Android OSがすでに提供している仕組みに統合する形を基盤としています。F-Droidの運用方法は、Debian、Fedora、Ubuntuなど、信頼性の高いGNU/Linuxディストリビューションがどのように運用されているかという事実上のセキュリティモデルに大きく影響を受けています。公開の場で運用し、すべてを公開することを非常に重視しています。バイナリを公開する際には、ソースtarballとビルドログも含めています。これらは事後レビューのため、可能な限り長くアーカイブされます。そして、これらすべては多くの異なる当事者によって、インターネット上のさまざまな場所にミラーされています。
- リポジトリは、何よりもまず、一意の署名キーを持つことで定義されます
- デフォルトでHTTPS接続
- サーバーはHTTPSでのみ動作し、HTTPはリダイレクトです
- APKファイル全体の内容に対して、すべてのアプリに有効な署名が必要であることをAndroidが強制しています
- Androidはアップデートを検証します。その際、インストール済みアプリの署名に基づいて検証します
- ファイルの整合性は、署名済みメタデータによって保護されます
- index-v2以降、リポジトリ内のファイルは、アイコンやスクリーンショットなども含めてSHA-256に基づいて検証されます。
- index-v2
は、apksigner
と
android-23
以降でサポートされている任意のアルゴリズムを使用し、現在有効な署名アルゴリズムの維持についてはOpenJDKとGoogleに依存しています。index-v2
のリリース時に使用されていた署名アルゴリズムは
SHA256withRSAで、ダイジェストアルゴリズムはSHA-256でした。index-v1 はSHA1withRSAで署名されています。この記事の執筆時点では、SHA1は第二原像攻撃に対してはまだ強いと考えられており、index JARに関係するのはこの点です。 - 本番用の署名は、Debianの apksigner の再現性のあるビルドによって処理されます。
- 署名済みメタデータには、アプリとその署名キーのハッシュが含まれます
- 署名済みメタデータは別のマシンで生成されます(f-droid.orgとguardianproject.infoでは完全にオフラインです)
- メタデータ署名を検証するための公開キーは、F-Droid clientアプリに組み込まれています
- 署名済みメタデータには、タイムスタンプと有効期限が含まれます
- Settingsから簡単にTorをサポート
- ETagがユーザーの追跡に悪用されないようにするためのクライアント側HTTP ETagキャッシュチェック
- 公式ミラーの一覧は署名済みメタデータに含まれ、その後クライアントは、Torを使用しているかどうかなどのローカルな条件に基づき、可用性と鮮度を考慮してミラーを選択します
- クライアントは、f-droid.orgおよびリポジトリやミラーで一般的に使用されるその他のドメインで、TLS証明書透明性が有効になっていることを要求します。
現在のセットアップはすでに堅実な基盤ですが、実装する価値のある改善点がいくつかあります:
- インデックスの有効期限、別名「最大有効期間」の処理改善
- クライアントアプリに組み込まれたピン留めTLS証明書
アプリリポジトリの署名鍵を保持する攻撃者から守るには、比較対象となる信頼できる情報源が必要です。再現可能ビルドとは、同じソースコードを持つ人なら誰でも、まったく同じバイナリを生成できることを意味します。監査システムと組み合わせることで、XCodeGhostのように、ソースコードではなくビルドプロセス中に挿入されたマルウェアを簡単に検出できます。再現可能ビルドにより、リリースバイナリのすべてのビルドがまったく同じハッシュを持つようにすることも可能になります。これにより、どのアプリリポジトリでもソースコードのみからアプリをビルドし、同じアプリをビルドしている他のアプリリポジトリから検証データの情報源を得ることができます。ソースからソフトウェアをビルドすることは十分に低コストになっており、gitlab.comやTravis CIのような多くの企業が、クラウド上で無料の自動ビルドサービスを提供しています。F-Droidのツールセット全体は自由ソフトウェアであり、セットアップしやすいように設計されているため、自動監査を設定するための障壁はかなり低くなっています。世界の異なる地域にいて、リスク特性も異なる人々が検証サーバーを運用することで、より信頼できる情報を提供できます。
ビルドサーバーのセットアップと署名プロセスのセキュリティモデルは、別々に文書化されています。
アプリの署名
- ビルドが完全に再現可能な場合、アプリは開発者自身の署名を使用して配布できます。
- デフォルトでは、「publish」サーバーが各アプリごとに署名鍵を生成し、管理します。これらの署名鍵は、config.yml の keyaliases 仕組みを使用して共有するよう明示的に設定されている場合にのみ、アプリ間で共有されます。
- アップストリームが複数のアプリを同じ鍵で署名するよう明示的に要求し、fdroiddata のメンテナーがそれを承認した場合を除き、すべてのアプリはそのアプリ専用の鍵で署名されます。
- f-droid.org では、すべてのアプリ署名は専用のエアギャップされたオフラインマシンで行われます。
- 再現可能ビルドが実現されれば、いつでも f-droid.org 内のアプリに開発者自身の署名を追加できます。さらに、f-droid.org の鍵で署名されたリリースも引き続き配布されます。
- 公式のF-Droidクライアントアプリでは、新規インストール時のデフォルトは開発者自身の署名です。
- アプリ開発者やメンテナーには、他のバージョンとの競合を避けるため、f-droid.org で公開する際にアプリ用の特別なApplication
IDを使用するかどうかを検討することをおすすめします。一般的な方法の1つは、Gradle Build Flavorを使ってApplication
IDの末尾に
.fdroidを追加することです。
初回インストール
F-Droidのほとんどのユーザーは、f-droid.org からAPKをダウンロードしてインストールします。これは、組み込みのアプリストアにはない潜在的な攻撃経路です。そのため、この経路を悪用することを可能な限り難しくするために、多くの追加のセキュリティ対策が講じられています。
- HSTS preload listに含まれているため、主要なブラウザーは f-droid.org へのすべての接続で常にHTTPSのみを使用します
- 堅牢なTLS/HTTPS構成
- ドメイン名レコードのDNSSEC署名
- DNS認証局認可(CAA)ポリシー
- 堅牢なHTTP Content Security Policy
- 初回インストール用のダウンロードリンクに対するPGP署名
- F-Droid.apk が改ざんされていないことを確認する、自動化された定期およびランダムな監査
- F-Droid Limitedは、fdroid.org、f-droid.com、f-dro1d.org など、フィッシングに悪用される可能性のある多くのドメインを管理しています。(追加のドメイン寄付も歓迎します!)
- 攻撃対象領域を大幅に減らすため、ウェブサイトは静的に生成されています
- ブラウザーでJavaScriptを無効にしてもウェブサイトは完全に機能するため、XSS攻撃の可能性をすべて排除できます
組み込みアプリストアとしてのF-Droid
F-DroidがROMの一部として、またはOTA更新をフラッシュすることによってAndroidに組み込まれている場合、機能するために「提供元不明のアプリ」を有効にする必要はなくなります。これは推奨される運用方法であるため、ユーザーができるだけ簡単にこの方法でF-Droidを実行できるようにすることを目指しています。F-Droid Privileged Extension のOTAパッケージをフラッシュすることは、多くの人がカスタムROMにフラッシュしている標準の「gapps」パッケージをインストールする場合と同等、またはそれ以下のリスク特性です。そのため、この配布方法によってそれらのユーザーのリスク特性が高まることはありません。
これに加えて、F-DroidはROMプロジェクトに組み込みやすくするための取り組みも行っています。すでにCalyxOS、Replicant、LineageOS for microG、Fairphone Openに含まれています。
悪意のあるコントリビューター生成データからの保護
アプリの説明文はさまざまな人から提出されるほか、アプリのソースリポジトリから取得されることもあります。このデータは最終的に、f-droid.org を通じてAndroidクライアントまたはユーザーのブラウザーに配信されます。
- Androidクライアントは、画像の読み込みを無効にした状態で
android.text.Html.fromHtml()を使ってHTMLを表示するため、CSS、JavaScript、危険なHTMLタグを実行することはありません - f-droid.org ウェブサイトは、厳格なHTTP Content Security Policyにより、悪意のあるCSS/HTML/JavaScriptインジェクションから保護されています。
- Repomakerは、Mozillaの bleach を通してテキストをフィルタリングし、優れたHTTP Content Security Policyを備えています。
HTTPS/TLS構成
F-Droidには、現在も稼働しているすべてのAndroid端末を長くサポートしてきた歴史があります。つまり、可能な限り互換性を維持するということです。その目的のため、現在のAndroidバージョンを実行しているユーザーがリスクにさらされない限り、古いTLS構成も引き続きサポートしています。これが、F-DroidのウェブサイトでTLSv1.0とTLSv1.1を有効のままにしている理由です。ソフトウェアを最新の状態に保っている人にとって、追加のリスクはないと考えています。また、Android 1.6を実行している端末でも、古いバージョンのF-Droidをインストールし、アプリストアとして動作できるべきです。
一部のセキュリティスキャナーは、TLSv1.1とTLSv1.0がまだサポートされているため、このサイトに警告を出す場合があります。より重要なのは、このサイトがTLSv1.3とTLSv1.2をサポートしており、そのどちらにもダウングレード保護が備わっていることです。さらに、最新のブラウザーとF-Droidクライアントは、TLSv1.1とTLSv1.0を完全に無効化しているため、それらの端末に脆弱なTLSバージョンの使用を強制することはできません。つまり、古いTLSバージョンを使用している接続は、実際に動作のためにその古いバージョンを必要としているものだけです。まだTLS 1.0または1.1を使用する必要がある端末を使っている場合、その端末にはすでによく知られたセキュリティ脆弱性が非常に多く存在するため、この点は特に注目すべき問題ではありません。
お使いのブラウザーがまだTLS 1.0または1.1をサポートしているかどうかをテストしたい場合は、以下のリンクをクリックして、エラーメッセージが表示されるか確認してください。
セキュリティ監査
-
2013年に、当時大学院生だったDaniel McCarney(別名 pd0x)によって、簡易的かつ非公式なセキュリティ監査(アーカイブ)が行われました。
-
Open Tech Fundの資金提供を受けた最初の「Bazaar」プロジェクトには、Cure53による外部公開監査が含まれていました
-
Open Tech Fundの資金提供を受けた2番目の「Bazaar 2」プロジェクトには、Radically Open Securityによる外部公開監査が含まれていました
-
NLnetの資金提供を受けたプロジェクト「Tracking the Trackers」と「The Search for Ethical Apps」では、Radically Open Securityによる監査が提供されました
