L4 より上の内容を適切に ringbuf へコピー
先週実施したこと
- M1バトル参加
- L4 より上の内容を適切に ringbuf へコピーする(途中)
L4 より上の内容を適切に ringbuf へコピーする
- sk_buff を userspace からアクセスすることは難しい
- eBPF ヘルパー関数のうち、__sk_buff の reference counter を増やすような機能を提供しているものはない
- eBPF は特定のバージョンのカーネルにおける機能に依存すべきでない
- 現状:bpf_skb_load_bytes を用いたコピーを試みている
- bpf_skb_load_bytes はコピー先として eBPF の stack 上しか指定できないため、一度そこにコピーしてから ringbuf にコピーする必要がある
- 小分けにして stack にコピー → ringbuf へコピー を繰り返す
- 一時的なバッファにパケットの中身をコピーできた
- ヘルパー関数 bpf_probe_read_kernel を利用して、一時的なバッファから ringbuf memory へのコピーを試みている
今後の予定
- eBPF プログラムから BPF map へパケットを適切にコピーする
- tcpdump, Wireshark のコピーの手法をソースコードで見てみる
- SSLKEYLOGFILE 環境変数の指定で得られる TLS 共通鍵でキャプチャしたパケットを復号する
- ルールの追加・削除をユーザができる CLI ツールを作成する