AF_ALG制限強化、Linux 7.3で新sysctl導入
LinuxカーネルのAF_ALGインターフェースが7.2で非推奨化された後、7.3で新たなsysctlパラメータ「af_alg_restrict」によりさらに制限される。3段階の制御でセキュリティリスク低減を図る。
Linuxカーネルの暗号APIをユーザー空間から直接操作できるAF_ALGインターフェースが、悪夢のようなセキュリティリスクを抱える問題として、次期Linux 7.3でさらに厳しい制限を受けることになった。
GoogleのLinux暗号専門家であるEric Biggersが提案した新しいsysctlパラメータ「af_alg_restrict」により、AF_ALGの機能を3段階で制御できるようになる。この変更は、すでにLinux 7.2で非推奨(deprecated)とされたAF_ALGへの対処をさらに推し進めるものだ。
AF_ALGはカーネル内の暗号処理をアプリケーションから直接呼び出せるインターフェースとして長年提供されてきた。しかしBiggersはパッチの説明で「AF_ALGは脆弱性の頻繁な発生源であり、保守上の悪夢だ」と指摘。特に、カーネル内部の実装詳細である「authencesn」のような機能がユーザー空間からアクセス可能であることが問題視されている。
脆弱性多発の実態
AF_ALGはユーザー空間プログラムがLinuxカーネルの暗号APIと直接やり取りできるように設計された。当初から利便性は評価されていたものの、Biggersによれば「特権を持たないプロセスに対して、本来なら決して公開すべきではなかった機能が広く露出している」状態が続いていた。
近年のエクスプロイトでは、ユーザー空間からのアクセスに実用的な利用価値がほとんどないカーネル内部実装が標的となっている。AF_ALGはこうした攻撃の侵入口として悪用され続けてきた経緯がある。
Phoronixの報道によれば、このインターフェースは「巨大な攻撃対象領域(massive attack surface)」と評価されており、実際に複数のセキュリティ脆弱性が報告されている。
af_alg_restrictの詳細
新たに導入されるsysctlパラメータ「af_alg_restrict」は、/proc/sys/crypto/af_alg_restrictとしてカーネルに実装される。その値は0から2の3段階で設定可能だ。
- 0: 制限なし(従来の動作)
- 1: 機能制限あり(デフォルト値)
- 2: 完全無効
デフォルト値である「1」では、非特権プロセスに対して許可されるアルゴリズムの限定リストが適用される。特権プロセスにはやや長い許可リストが提供されるが、完全なアクセスは認められない。
この許可リストは将来調整される可能性があるが、現時点では一般的なユースケースであるiwd(Intel Wireless Daemon)やbluez(Bluetoothスタック)が正常に動作するよう考慮されている。Biggersは「iwdでAF_ALGが正しく動作することを確認済み」と述べている。
「2」を設定すればAF_ALGを完全に無効化でき、最大限のセキュリティを求める環境に適する。一方、何らかの理由でAF_ALGに依存するアプリケーションを運用しているユーザーは「0」を設定することで従来通りの動作を維持できる。
特権とアルゴリズムの階層分け
af_alg_restrictの設計上の特徴は、特権の有無に応じてアクセス可能なアルゴリズムリストを分けている点にある。カーネル内の暗号APIは、本来カーネル空間で動作するドライバやファイルシステムなどが利用するために存在する。ユーザー空間からのアクセスは補助的な位置づけにすぎない。
Biggersは「ユーザー空間の暗号ライブラリがすでに存在しており、AF_ALGは実際にはほとんど使われていない」と強調する。実際にAF_ALGが使用される場合でも、iwdのようにCAP_NET_ADMINケーパビリティを保持したプロセスが、既知のアルゴリズムリストに限定して利用しているケースが大半だという。
この現実を踏まえた制限は、セキュリティ研究者やLinuxディストリビューションのメンテナからはおおむね歓迎されている。ただし、AF_ALGに依存する独自アプリケーションを開発している企業や組織にとっては、移行計画の見直しが必要になる。
影響を受けるソフトウェア
最も広く知られているAF_ALGの利用例が、Intelのワイヤレスデーモン「iwd」だ。iwdはネットワーク管理の際にカーネル暗号APIを直接利用しており、デフォルト設定でも動作が保証されている。
Bluetoothスタックのbluezも同様にAF_ALGを使用している。これらの主要なシステムコンポーネントについては、デフォルトの制限レベル「1」で問題なく動作することが確認されている。
一方で、ユーザー空間暗号ライブラリ(OpenSSL、GnuTLS、libsodiumなど)は独自の暗号実装を持っており、AF_ALGに依存していない。こうしたライブラリを利用するほとんどのアプリケーションには影響がないと見られる。
影響を受ける可能性があるのは、特定のハードウェア暗号アクセラレータをAF_ALG経由で利用している特殊な環境や、カーネルの暗号プリミティブに依存する独自開発のアプリケーションだ。こうした環境では、af_alg_restrict=0への設定変更やアプリケーションの修正が必要となる。
カーネル開発の方向性
AF_ALGの制限強化は、Linuxカーネル全体のセキュリティ向上策の一環と位置づけられる。最近のLinuxカーネルでは、Linux Cache Aware Scheduling拡張によるMySQLの高速化など、パフォーマンス最適化と同時にセキュリティ強化も並行して進められている。
AF_ALGはLinux 7.2で非推奨となり、一部の機能はすでに削除されている。7.3でaf_alg_restrictが導入された後、将来的にはデフォルト値が「2」(完全無効)へと引き上げられ、最終的にはカーネルコードベースから完全に削除される可能性が高い。
Biggersのパッチは現在「cryptodev」Gitリポジトリに取り込まれており、Linux 7.3サイクルでのマージが見込まれている。Linux 7.3では、Nova Lake S向けのGPU ID追加など、他の変更も予定されている。
移行の実務
AF_ALGに依存しているシステム管理者は、以下の対応を検討する必要がある。
-
依存関係の確認: AF_ALGを利用しているアプリケーションを特定する。
lsofやstraceを用いて/proc/sys/crypto/af_alg_restrictの状態を確認する方法が有効だ。 -
代替手段の評価: ユーザー空間の暗号ライブラリ(OpenSSL、GnuTLS、NSSなど)への移行を検討する。これらのライブラリはAF_ALGに依存せず、かつ定期的にセキュリティ監査を受けている。
-
制限レベルの調整: どうしてもAF_ALGが必要な場合は、
af_alg_restrict=0を設定ファイル(例:/etc/sysctl.d/99-afalg.conf)に記述して永続化する。 -
テストの実施: 制限レベル「1」での動作確認を行い、問題がなければデフォルト設定のまま運用する。将来の完全削除に備え、移行計画を策定することが推奨される。
この変更は、カーネル開発コミュニティがセキュリティを優先する方向へとシフトしている明確な証拠だ。AF_ALGは利便性のために導入されたが、その設計上の判断が後に大きなセキュリティ負債となった例の一つといえる。
編集部の見解
短期的には、Linux 7.3へのaf_alg_restrict導入により、デフォルトでAF_ALG経由の攻撃経路が大幅に閉ざされる。iwdやbluezはデフォルト設定で動作するため、一般ユーザーへの影響は軽微だが、カスタムアプリケーションでAF_ALGを利用している開発者は即座に対応を迫られる。2026年後半の7.3リリースまでに、依存関係の棚卸しと代替手段への移行計画を完了すべきだ。 長期的に見ると、AF_ALGの完全削除は既定路線と言える。今回のsysctl導入はその前段階であり、数年以内にコードベースからの削除が現実味を帯びる。この動きは、カーネルがユーザー空間に公開するAPIに対するセキュリティ基準の厳格化を示しており、他のカーネルAPIにも波及する可能性がある。ハードウェア暗号アクセラレータの直接利用に依存していた産業機器や組込みシステムへの影響は特に大きいと見られる。 編集部としては、AF_ALGの制限強化がもたらすセキュリティ向上自体は評価する。しかし、非推奨から削除に至る期間が比較的短い点には懸念が残る。
参考
- Phoronix — 2026-07-07T10:24:22.000Z公開
よくある質問
- af_alg_restrictのデフォルト値はいくつですか
- デフォルト値は「1」で、非特権プロセスに対してアルゴリズムの限定リストが適用されます。特権プロセスにはやや長いリストが提供され、主要なユースケースであるiwdやbluezは正常に動作します。
- af_alg_restrictを無効化(0)に戻す方法はありますか
- /proc/sys/crypto/af_alg_restrictに0を書き込むか、/etc/sysctl.d/配下の設定ファイルに「crypto.af_alg_restrict = 0」を記述してsysctl -pを実行することで永続的な設定が可能です。
- AF_ALGに依存するアプリケーションを特定するにはどうすればよいですか
- lsof /proc/sys/crypto/af_alg_restrictで開いているファイルハンドルを確認するか、strace -e socket,open,ioctlでAF_ALGソケットの作成を監視する方法が有効です。また、カーネルの監査ログを確認する方法もあります。
コメント