LinuxはBPFプログラムをカーネル内で安全に実行するため、下記を行っています(一部の機能はオプションです)。
また、「/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の開発は歴史的経緯より、基本的にLinuxのnet-nextブランチで進められてきました。現在は主にbpf-nextブランチで進められています。bpf-nextブランチの内容がnet-nextにマージされ、最終的にカーネル本体へとマージされています。
開発に関する詳細はLinuxのドキュメントを参照してください。
次回は、BPFの基礎として、Linuxで用いられるBPFのアーキテクチャについて説明します。
東京大学 大学院 情報理工学系研究科 博士課程
オペレーティングシステムや仮想化技術の研究に従事。
Copyright © ITmedia, Inc. All Rights Reserved.