中間報告書提出・L4 より上の内容を適切に ringbuf へコピー・留学生チューター
先週実施したこと
- 中間報告書提出
- L4 より上の内容を適切に ringbuf へコピーする(途中)
- 留学生のチューター
中間報告書提出
- 10/20(金)で 2 回目のレビューを受けた
- 提出済み
L4 より上の内容を適切に ringbuf へコピーする
- https://git.softlab.cs.tsukuba.ac.jp/ichiki/ebpf-afw-rust/issues/20
- 「PSH フラグが立っているパケットを dissect する実験」で egress を流れるパケットのうち L4 より上の内容が適切にコピーできていなかった。しかし ingress については動作していた
- 原因:今までは bpf_probe_read_kernel を呼び出していたが、__sk_buff 構造体からパケットをコピーする BPF プログラムは bpf_skb_load_bytes を呼び出す必要があった
- bpf_probe_read_kernel は、与えられたカーネル空間のポインタから指定された長さのデータを eBPF stack や ringbuf へコピーする
- __sk_buff へのアクセスは、対応する sk_buff に対してマッピングされる。BPF プログラムを実行する側(カーネル)がしている
- ingress 側で今までコピーできていたのは、たまたま
- 現状:bpf_skb_load_bytes を用いたコピーを試みている
- bpf_skb_load_bytes はコピー先として eBPF の stack 上しか指定できないため、一度そこにコピーしてから ringbuf にコピーする必要がある
- eBPF program の stack space の size は 512 bytes
- 小分けにして stack にコピー → ringbuf へコピー を繰り返す
- やること
- __sk_buff が reference counter もっているなら ringbuf で pointer の値のみを格納できるかもしれない
- Wireshark の capture 機能
- キャプチャする機能の部分で BPF program のコンパイルをしている箇所を見たので、もうちょっと注意深く見る
留学生のチューター
今後の予定
- eBPF プログラムから BPF map へパケットを適切にコピーする
- SSLKEYLOGFILE 環境変数の指定で得られる TLS 共通鍵でキャプチャしたパケットを復号する
- ルールの追加・削除をユーザができる CLI ツールを作成する