BPF vs eBPF

Programming 2018.05.18 21:46

BPF: seccomp , setsocketopt 등에서 필터프로그램을 전달할때 쓰는 classic 한 ISA.

구조가 매우 단순하고 call 이나 signed, unsigned 비교등이 없고 레지스터 갯수가 작음.


eBPF: BPF 의 ISA 를 확장한 버전. 리눅스 커널 4.13인가부터 들어감. bpf() 라는 시스템콜을 통해서 프로그램을 전달할수있고, eBPF 바이트코드에 대해서는 최신커널이 JIT 도 수행해줌. eBPF 를 인터프리트하던 JIT 으로 네이티브로 돌리던 바이트코드의 안전성 검사를하는 verify 단계가 있는데, 이부분에 취약점이있어서 bypass 한뒤 악성 eBPF 프로그램을 통해 커널 임의 메모리읽기쓰기를 수행해서 루트를 따는 CVE-2017-16995 가 있었음. (https://blog.aquasec.com/ebpf-vulnerability-cve-2017-16995-when-the-doorman-becomes-the-backdoor)


아래의 커널문서에 BPF 와 eBPF 에 관해서 상세히 설명이 잘되어있음.

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/networking/filter.txt




'Programming' 카테고리의 다른 글

BPF vs eBPF  (0) 2018.05.18
OSX routing table setup  (0) 2016.08.06
ARM DACR basics  (0) 2016.07.13
Intel SGX basics  (0) 2016.07.12
Mount QEMU qcow image  (0) 2015.12.17
커널모듈 Cross Compile 주의사항  (0) 2015.12.09
Posted by daehee87

댓글을 달아 주세요