連載
» 2018年11月22日 05時00分 公開

パケットフィルターでトレーシング? Linuxで活用が進む「Berkeley Packet Filter(BPF)」とは何かBerkeley Packet Filter(BPF)入門(1)(3/3 ページ)

[味曽野雅史,OSSセキュリティ技術の会]
前のページへ 1|2|3       

BPFの安全性

 LinuxはBPFプログラムをカーネル内で安全に実行するため、下記を行っています(一部の機能はオプションです)。

  • 検証器による静的なBPFプログラムの検証
  • BPFプログラム領域をread onlyなメモリ領域に配置(アーキテクチャが対応している場合)
  • JITにおけるConstant Blinding(ROP攻撃対策)
  • JITを常に有効化し、BPFインタープリタを除去する(Spectre Variant 2対策)

 また、「/proc/sys/kernel/unprivileged_bpf_disabled」を1にすると、「CAP_SYS_ADMIN」を持っていないユーザー(基本的にルートユーザー以外)はBPFシステムコールが利用できなくなります。

 2018年の年頭に公表されたSpectre variant 1およびvariant 2における、GoogleのProject ZeroのPoC(概念実証)でeBPFが利用されていたことを記憶されている人も多いかと思います。

 このことについて少し補足しておくと、PoCでは攻撃が成功しやすいように一部修正したカーネルを利用していました。また、Spectre対策用のパッチはすでに追加されています。そのため現在のカーネルで攻撃を実施することは非常に困難であると思います。

 BPFがカーネルで広く用いられるにつれ、セキュリティに対する意識も一層高まっています。現在、BPF関連のテストコードは約3万行あります。

 ただし、BPFが安全性を最優先に考慮しているといっても、100%バグがないとは言い切れません。一般論として、セキュリティ情報に気を配り、もしセキュリティに関するパッチがあれば迅速にアップデートすることが重要になります。

BPFの情報源

 最後に、BPFの情報源をまとめます。

 下記はBPFに関する公式のドキュメントです。

 また、下記も参考になります。

 下記は、BPFに関連する主要なソースです。

 BPFの開発は歴史的経緯より、基本的にLinuxのnet-nextブランチで進められてきました。現在は主にbpf-nextブランチで進められています。bpf-nextブランチの内容がnet-nextにマージされ、最終的にカーネル本体へとマージされています。

 開発に関する詳細はLinuxのドキュメントを参照してください。

次回は、BPFのアーキテクチャについて、

 次回は、BPFの基礎として、Linuxで用いられるBPFのアーキテクチャについて説明します。

筆者紹介

味曽野 雅史(みその まさのり)

東京大学 大学院 情報理工学系研究科 博士課程

オペレーティングシステムや仮想化技術の研究に従事。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。