1 ポイント 投稿者 GN⁺ 2025-12-01 | 1件のコメント | WhatsAppで共有
  • Landlock は、アプリケーションがアクセス可能なリソースを明示的に宣言し、カーネルレベルで自己サンドボックス化を実行する Linux セキュリティ API です
  • 既存の SELinuxAppArmor よりもシンプルで、開発者権限なしでランタイムにポリシーを作成・適用できます
  • ポリシーはアクセス可能なファイル・ディレクトリ・ポートなどを**明示的な許可リスト(allowlist)**として定義し、階層的な制限により段階的なセキュリティ強化が可能です
  • Rust、Go、Haskell などでバインディングが提供されており、GUI アプリ、サーバー、デスクトッププロセスなどさまざまな環境できめ細かなアクセス制御を実装できます
  • Linux のセキュリティエコシステムで、シンプルで実用的な無権限サンドボックスツールとして、今後 Linux デスクトップセキュリティ強化の中核要素として注目されています

Landlock の概要

  • Landlock は、Linux アプリケーションがアクセス可能なリソースを明示的に宣言することを要求する API
    • OpenBSD の unveil()pledge() の概念に近く、「必要なリソースだけを許可し、残りはブロックする」という原則に基づいています
  • 既存の Linux セキュリティメカニズムより理解と統合が容易な開発者フレンドリーな防御層を提供します
  • 目的はアクセス可能なリソースを明示することで Landlock の利用を促進することです

動作方式

  • Linux Security Module(LSM) 形式として、Linux 5.13 から利用可能です
  • SELinuxAppArmor と異なり、**プロセス単位の一時的制限(transient restriction)**を適用します
    • ポリシーはランタイムで生成され、現在のスレッドと子プロセスにのみ適用され、プロセス終了時に消失します
  • ポリシー構成要素
    1. Handled accesses: 制限する操作カテゴリ(例: ファイルシステムの読み取り/書き込み)
    2. Access grants: 許可するオブジェクトの明示的なリスト
  • ポリシー例
    • /home/user 読み取り専用
    • /tmp 読み書き
    • ポート 2222 のバインド許可
  • landlock_restrict_self() 呼び出し時、対象スレッドと子プロセスは永続的な制限領域に入ります
    • 制限は解除不可で、最大 16 層(layer)まで重ねて適用可能
    • 下位層はアクセスをさらに削減できますが、上位層で削除された権限は復元できません
  • **非権限(unprivileged)**方式なので、一般アプリケーションでも自己サンドボックス化できます
  • ABI バージョン管理により、旧カーネルでも可能な範囲で動作します
  • Stackable LSM であり、SELinux や AppArmor と併用可能です

利用理由

  • 予測可能なファイルアクセスパターンを持つアプリケーションに適しています
    • 例: Web サーバーが /var/www/html/tmp のみアクセスするよう制限
  • 管理者の介入やシステム全体の設定は不要で、コード内で直接ポリシーを定義できます
  • 権限昇格なしで利用でき、ほとんどのプログラムに容易に統合可能です
  • Rust、Go、Haskell 用バインディングがあり、unveil スタイルのラッパープロジェクトも多数
  • 公式 C ライブラリはまだありませんが、複数の非公式実装が利用できます
  • Rust のサンプルコードでは /usr/etc/dev が読み取り専用、/home/tmp が読み書き可能に設定されています

Linux のサンドボックス化の現状と必要性

  • Linux 利用の増加に伴い、デスクトップ向けマルウェアも増えています
  • Linux の相対的な安全性は、構造的な強さというより市場シェア技術的ハードルによるものです
  • 一般的なディストリビューションの問題点
    • 信頼されていないバイナリを実行できる
    • インターネットからスクリプトを直接実行できる
    • パスワードなしで sudo を使う
    • 一般アプリケーションが $HOME 内の機密ファイルにアクセスできる
    • X11 環境でキー入力監視が可能
    • 任意ポートへのバインドが可能

既存のセキュリティツールの限界

  • Containerization(Docker、Podman): サービス分離には適しているが、デスクトップアプリには不向き。--privileged オプションで分離が無効化される事例があります
  • Flatpak / Snap: GUI アプリには適しているが権限範囲が広すぎ、CLI ツールには不適切です
  • Firejail: アプリごとのプロファイルが必要で、毎回明示的な呼び出しが必要

開発者視点での既存のメカニズム

  • seccomp: 強力だが設定が複雑で、ブラックリスト方式は脆弱です
  • SELinux: 強力だが複雑で、管理者ポリシーが必要。多くのディストリビューションでデフォルト無効
  • AppArmor: SELinux よりはシンプルだが、なお管理者プロファイルが必要で、一部のディストリビューションでは無効

Landlock の利点まとめ

  • 非権限アプリケーション中心統合しやすいデフォルト拒否(deny-by-default)
  • Linux 5.13 以降で広くサポートされ、下位/上位互換性の維持
  • 完璧ではないものの、シンプルで独立した無権限サンドボックスツールとしてその空白を埋める

Landlock の適用可能性

  • 高権限デーモンプロセスの長時間実行時、Landlock によりアクセス範囲を制限できます
  • PDF リーダー、画像ビューア、Web ブラウザ、ワードプロセッサなどは開いたファイルのみアクセスするよう制限可能
  • FTP / HTTP サーバーも必要なファイルだけにアクセスするよう設定できます
    • 例: nginx が root で実行されていても、攻撃者がシェルを奪取してもポリシー外のファイルにはアクセスできません
  • Supervisor 提案が導入されれば、Linux デスクトップに Android 風の権限システムを実装できます
    • GUI と権限保存システムを組み合わせれば、より安全なユーザーエクスペリエンスが実現できます

Landlock の進行中機能開発

  • Supervise Mode: ユーザー空間でアクセス許可/拒否を対話的に決定し、Android の権限プロンプトに近い挙動
  • Socket Restrictions: プロセスが使えるソケット種類とポートをきめ細かく制御
  • LANDLOCK_RESTRICT_SELF_TSYNC: 制限をプロセス内のすべてのスレッドに伝播
  • LANDLOCK_ADD_RULE_QUIET: 特定オブジェクトの監査ログメッセージを抑止
  • LANDLOCK_ADD_RULE_NO_INHERIT: 親ディレクトリ権限が子へ継承されないようにし、ファイルシステム制御を細分化

要約

  • Landlock はシンプルで非権限ベースのデフォルト拒否型サンドボックスメカニズム
  • 理解と統合が容易で、Linux デスクトップおよびアプリケーションセキュリティ向上に大きな潜在力を持っています
  • 開発者はアプリケーションに Landlock を直接適用して、セキュリティレベルを強化できます

1件のコメント

 
GN⁺ 2025-12-01
Hacker Newsの意見
  • Landlock を使って望まないテレメトリーを遮断した
    Cで簡単なプログラムを書き、特定の1つのポートだけを受信できるようにして、その他のネットワーク接続はすべて遮断した
    sandboxer.c の例を参考にし、ファイルアクセス制限には手を付けず、ネットワークだけを制御している
    dmesg に遮断された接続が表示されるが、おそらく audit機能 のおかげだと思う
    このツールは 非特権ユーザーモード で動作し、コンテナ内でもファイアウォール設定なしでうまく動く
    ただし、悪意あるプログラムを完全に防ぐ用途には向いていないと思う
    • ソースコードを共有してもらえるか気になる
  • Landlockは完璧ではない
    issue #28関連メールスレッドを見ると、サンドボックス規則が 存在しないディレクトリ を参照できないという問題がある
    たとえば ~/.ssh がまだ存在しないときに規則を追加すると、あとからディレクトリが作成されてもアクセスは遮断されない
    つまり、セキュリティ上の穴が生じる可能性がある
  • itch.ioのゲームを bwrap でサンドボックス化してみている
    最小権限で実行しようとするとかなり厄介だ
    「Microlandia」は動かないが、他のUnityゲームは問題なく動く
    Landlockベースのツールがもっと増えて、こうした作業が簡単になることを期待している
  • コンテナランタイムにおけるLandlockの サポート状況 が気になる
    CRIは独自インターフェースを定義しようとしているようだが、カーネル対応より常に遅れざるを得ない
    ほとんどのインフラ担当者はアプリごとにサンドボックスポリシーを保守しないと思う
    アプリケーションが直接Landlockを使うほうが現実的だと考える
    • runc issueruntime-spec issue に触れつつ、
      ランタイムがシステムコールをそのまま通す場合、アプリが自分でロックダウンすることを 信頼しなければならない問題 が生じると説明している
    • Landlockはもともと コンテナランタイム向け ではなく、別の目的を持つ機能だと思う
  • 医療機器開発者として、このアプローチはとても歓迎できる
    社内では似たようなAPIを使って 重要プロセス管理 を行っている
    こうした研究は規制産業にも大いに役立つはずだ
  • 「公式のCライブラリがない」という話は奇妙に聞こえる
    カーネル機能なら当然C APIが先にあるはずなのに、なぜないのか気になる
    • カーネルの基本インターフェースは syscall(uapi)
      libcはその上に載る層にすぎず、今でも多くのsyscallにはlibcのラッパーが存在しない
    • ここで言っているのはglibcやmuslのような 標準Cライブラリ を意味する
      自分でヘッダーを作って _syscallN マクロで呼び出すこともできる
    • C APIがなくても大きな問題ではない
      landbox のような簡単なラッパーを使えばよく、
      RustやGoもC FFIを公開できる
      カーネルの sandboxer.c の例 を参考にすれば十分だ
    • man7ドキュメント に大半の内容がまとまっている
    • カーネル開発者は ユーザーランドソフトウェア を直接作らないので、C APIがないのだ
  • LandlockはTCPソケットだけを制限し、UDPやrawソケット は防がない点に注意が必要だ
    • それはかなり大きな セキュリティ上の穴 に見える。理由が気になる
    • rawソケットには権限が必要で、iptables によるUIDベースの遮断も可能だ
      Landlockとは別物だが、補完的に使える
    • それでもかなり大きな穴に感じる
    • 変わった制約だが、知れてよかった
  • Landlockが /sys 設定の代わりに 新しいsyscall を追加したのは興味深い
    おそらく 非特権の原則 のためだろう
    seccompでLandlockのsyscallを遮断できるのかも気になる
    古いseccompポリシーにLandlockの番号が含まれていなければ、SIGSYSが発生するのではないか?
    • 他のLSMも徐々にsyscallベースへ移行している
      ファイルシステムベースのAPIには footgun が多く、dirfdベースのアクセス制御にはsyscallのほうが適している
      うまく書かれたseccompフィルタは -ENOSYS を返すため、単に「未対応」のように見える
    • seccompでLandlockのsyscallを制限することはできるが、実用性は低い
      Landlockは既存の権限をさらに制限するだけで、新たな権限を与えるわけではないからだ
  • Linuxセキュリティに興味を持ち始めたばかりだ
    Macから離れてLinuxへ完全移行する準備をしていて、malware対策 にLandlockがどう役立つのか気になる
    たとえば ~/.ssh へのアクセスを自動で拒否する環境を作りたい
    また、これで アプリランチャー を作れるのかも知りたい
    • Landlockの脅威モデルは マルウェアそのもの ではなく、正規アプリの コード実行脆弱性
      アプリが自ら不要な権限を制限し、攻撃者がシステムを掌握できないようにするためのものだ
    • ~/.ssh へのアクセス拒否のような用途には、AppArmorSELinux のようなMACモデルが必要だ
      Landlockはアプリ自身、あるいは子プロセスを制限するときに有用だ
      たとえばnpmがpost-installスクリプトをビルドディレクトリ内だけに制限するような使い方だ
      OpenBSDの pledge のように、アプリ開発者が直接使うAPIだ
      ただしLinuxはエコシステムが分散しているため、普及は遅いだろう
      それまでは ラッパーやランチャー の形で使うのが現実的だ
    • パッケージマネージャーがビルドスクリプト向けポリシーを指定するか、ユーザー自身がラッパーを使う必要がある
      結局のところ、プログラムが自分の権限を把握している場合 にしか効果がない
    • macOSやiOSの sandboxing とほぼ同じ考え方だ
      アプリが実行初期に必要なリソースだけをホワイトリスト指定し、それ以外を遮断する
      悪意あるプログラム対策ではなく、自己プロセス保護 のためのものだ
  • 「公式のCライブラリがない」という話はおかしく聞こえる
    標準ライブラリにはすでにsyscallがあるのに、わざわざ別ライブラリが必要なのか?
    man7ドキュメント も存在する
    単に 抽象化レイヤー を求めているという意味なのだろうか
    • libcはsyscall番号の管理や副作用の処理を担うので、
      glibcがまだLandlockインターフェースを提供していないのは意外だ
      おそらく 非Linux互換性 の問題が理由だと思われる