HN 日本語サマリー

← 一覧へ戻る
プログラミング

Flatpak – an Insecurity Nightmare

Flatpak – An Insecurity Nightmare (oro.gay)

52 pointsby jannesan42 コメント

要約

この記事は、Linuxデスクトップ環境におけるパッケージングシステムであるFlatpakのセキュリティについて論じています。Flatpakは、サーバーのコンテナ技術をデスクトップに応用し、アプリケーションの分離と依存関係の管理を改善しましたが、古いアプリケーションや不十分なAPIへの依存がセキュリティ上の懸念を生むという批判に対し、Flatpak自体はサンドボックスであり安全であると主張しています。問題はアプリケーション側のセキュリティであり、Flatpakの改善とサンドボックス機能の強化に注力すべきだと提言しています。

全文翻訳

Flatpak - セキュリティの悪夢

(Flatpack とは異なります)。

20年以上、Linuxはサーバーから組み込みデバイスまで、あらゆる場所で使用されてきました。しかし、デスクトップ分野では長らく弱点がありました。WindowsとmacOSは、特にゲームやコンテンツクリエイターの利用において、Linuxを市場から締め出してきました。

過去10年間で、Linuxデスクトップは劇的に改善されました。Flatpak、Wayland、Portals、PipeWire、FreeDesktopはすべて、Linuxを現代的な(デスクトップ)システムに適したオペレーティングシステムにするために貢献してきました。今回はそれらすべてを網羅するのではなく、タイトルが示す通り、Flatpak について掘り下げていきます!

歴史

サーバーの世界を簡単に見てみましょう。数十年(時には数十年!)古いカーネルやライブラリで稼働しているサーバーを見ることは珍しくありません。これは理にかなっています。サーバーの起動時間は長く、システムアップデートのたびに破損のリスクがあり、デバッグが必要になるため、特にGoogleのような大規模なサービスでは貴重な稼働時間が失われます。当然、彼らは最も関連性の高いシステム部分を迅速にパッチする方法を進化させ、セキュリティ問題を最小限に抑えました。

しかし、そこで実行されるソフトウェアは、古い、時代遅れのソフトウェアではなく、新しいライブラリの新しい機能しか利用できない場合があります。では、彼らはどのように解決したのでしょうか?

コンテナです。通常、ソフトウェアを複数の顧客に一貫性があり、より安全な方法で出荷するために使用されますが、ソフトウェアを、必要な依存関係をすべて指定されたバージョンで含み、ホストシステムへのアクセスが制限された小さな箱に分離することを可能にします。

現在

Android、macOS、iOSはすべてシステムへのアクセスが制限されており、特定のファイルにアクセスするにはユーザーの介入が必要です。しかし、Linuxデスクトップはどうでしょうか?

2015年、Flatpakがリリースされ、サーバーのコンテナ化技術をすべて取り込み、デスクトップシステムに応用しました。これに伴い、Portals と Freedesktop SDK が登場しました。これにより、開発者にとって、以前は様々な依存関係のバージョン、コアシステムライブラリ、パッケージング形式の戦場だった状況から、一貫性のある汎用的なプラットフォームとAPIが提供されました。

もちろん、ディストリビューションと開発の状況が数十年変わらなかった後では、これは一度に行うにはあまりにも大きな変化でした。必要なAPIの多くは存在しますが、開発者はそれらに移行するために時間を割く必要があります。また、一部のユーザー(特にFlatpakを嫌うユーザー)は、古いやり方に固執し、何千もの異なるシステムのためにソフトウェアを何百回も再パッケージ化することを主張し、状況の改善に協力することを断固として拒否しています。

簡単に言えば、まともな考えを持つ誰も気にかけませんでした。多くの新しいアプリケーション開発者は、閉じられた環境を念頭に置いてアプリを作成し、Flathubにソフトウェアを出荷しています。これにより、ソフトウェアは迅速かつ安全にエンドユーザーに届けられます。

アプリケーションの分離

では、古いアプリケーションはどうでしょうか?結局のところ、Flathubでは10年前のアプリも見つけることができます。これらのアプリケーションから、Flatpak - セキュリティの悪夢 のような記事が生まれました(おや、この名前に見覚えがあるかもしれません!)、そしてFOSS分野の著名な個人からの様々な応答が、これらの記事からの誤情報や攻撃に対抗するために意図されていました。私はそれをここで取り上げたいと思います。

これらのアプリケーションは、分離されていない環境で設計されており、それらに必要なAPIは当時存在しなかったか、新しいAPIを使用するように更新されていませんでした。それらを都合よく選び出して、Flatpakサンドボックスが「サンドボックスではない」(https://hanako.codeberg.page/) と言うのは有効な議論ではなく、アプリケーション自体が安全でないことを示しているだけです。

もちろん、古いアプリだけが問題なのではありません。新しいAPIが十分に成熟していない可能性があるため、新しいアプリも古いアプリも、適切に機能するために静的パーミッションに頼らざるを得ない場合があります。ほとんどの新しいアプリケーションにとってはこれは問題ありません。古いアプリケーションよりもはるかに多くのパーミッションを制限できるからです。

Flatpakはサンドボックスです。そしてFlatpakは安全です。安全でないのはアプリケーションです。「サンドボックス」の意味を変えても誰も助かりません。一部のアプリが使用するサンドボックスがiOSやAndroidに匹敵しないからといって、それがサンドボックスであることを否定するものではありません。そのことについてFlatpakを責めたいのであれば、ご自由にどうぞ。アプリが静的パーミッションに依存しているという事実は、アプリケーションが安全でなく、一貫性のないインターフェースに依存していることを示しており、場合によっては現在のAPIがまだそれらのユースケースに十分に対応できていないことを示しています。私たちは、それを破壊しようとするのではなく、その状況を改善することに焦点を当てるべきです。

部分的なサンドボックスが依然として効果的である実際の例を知りたい場合:「fractureiser」マルウェア。マルウェアはそもそもLinuxでは機能しなかったとしても、現代のデスクトップシステムにはシステムが侵害される多くの方法があるという事実に対処できていないという点で、依然として例となります。「信頼している」ソフトウェアを実行するだけでは、自分自身を保護するには十分ではありません。関連する投稿からの引用です。

Linuxを使用している場合は、PrismLauncher Flatpakを使用し、Flatsealなどのユーティリティを介してアクセスを許可するものに細心の注意を払ってください。デフォルトでは、システムを侵害するために必要なディレクトリへのアクセス権はありません。

逆コンパイルされたソースコードを簡単に確認すると、デフォルトのPrismLauncher Flatpakサンドボックス内では機能しないことがわかります。現在のマルウェアはユーザーの~/.config/ディレクトリをハードコードしています。アプリがその実際のパスにアクセスできない場合、Flatpakサンドボックス内にファイルを作成すると、それは再起動時にワイプされるtmpfsに書き込まれます。systemdもFlatpakサンドボックス内では利用できないため、そのコマンドの実行は失敗します。マルウェアはこれらの制限を回避しようとしないようで、サンドボックス化されていない環境で実行されていると想定しています。

免責事項:以下の注釈は私が書きました :)

静的パーミッションとPortalsの詳細については、TheEvilSkeleton による Flatpakのパーミッションモデルの概要 を参照してください。

古い依存関係

古い依存関係を持ち出す人もいます。いいえ、それは問題ではありません。ランタイム自体は、必要なセキュリティアップデートが利用可能になると更新されます(場合によっては、それが大きな問題であればABIを壊すことさえあります)。アプリケーション開発者は、自動更新チェック を使用して手動でバンドルされた依存関係を更新することを気にする必要はありません。また、GPUドライバーのような多くの主要なライブラリは、必要に応じてランタイムとは別に更新できます。古い依存関係はそもそも議論の対象になりません。

アプリケーションが古いライブラリを使用している場合、アップデートがビルドプロセスを壊したか、開発者がデータチェッカーの設定を忘れたかのいずれかである場合、すべてのFlatpakアプリケーションの周りにあるサンドボックスが、開発者がそれらを修正している間にこれらの問題を軽減するのに役立ちます。

未来

Linuxデスクトップが、開発者やサンドボックスに優しいソフトウェア配布およびプログラミング方法に移行することが期待されています。PipeWireにより、オーディオやビデオの多くの便利な機能(複数のアプリが同時にカメラを使用するなど!)への道が開かれ、FreeDesktopも進歩しましたが、Linuxが開発者にとってターゲットとしてソフトウェアを出荷するのに実行可能なプラットフォームになるまでには、間違いなく道のりは長いです。

Xorgと従来のパッケージングで状況を修復したいとどれだけ願っても、WaylandやFlatpakのような現代的なソフトウェアなしでは前進できません。古いやり方に戻ろうとし続けると、開発者にはLinuxが考慮する価値のあるプラットフォームではないことが示されるだけで、エンドユーザーにとってはより悪い状況になり、「どちらが先か:鶏か卵か?」という状況に戻り、非常に悪いUXにつながります。

私たちはそれが起こることを望んでいません。

関連記事

Flatpakや、その仕組み、現在の状況についてさらに詳しい情報が必要な場合は、以下の記事を読む価値があります。