BPF
All your Packets belong to Me
@_xhr_
xhr@giessen.ccc.de
xhr GPN 2014 2
BPF ?
xhr GPN 2014 3
tcpdump ?
xhr GPN 2014 4
NIC
¯
Link-Layer Driver
¯
Protocol Stack
¯
Userland
Packet Flow
xhr GPN 2014 5
Smart Idea
xhr GPN 2014 6
NIC
¯
Link-Layer Driver
¯
Filter
¯
Buffer
¯
Userland
Packet Flow
xhr GPN 2014 7
BPF is rather old...
McCanne. Jacobson.The BSD Packet Filter:
A New Architecture for User-level Packet
Capture. in USENIX. 1993.
xhr GPN 2014 8
Have you met ...
xhr GPN 2014 9
tcpdump -i eth0 ip6
That's the filter
xhr GPN 2014 10
0 ldh [12]
1 jeq #0x86dd jt 2 jf 3
2 ret #65535
3 ret #0
Ethernet Protocol Type
0x86dd == IPv6
Accept Packet
Drop Packet
xhr GPN 2014 11
Linux got a BPF JIT in 2011
Check net/core/filter.c
xhr GPN 2014 12
Packet Filter only for
Packets?
xhr GPN 2014 13
seccomp?
xhr GPN 2014 14
xhr GPN 2014 15
So, how does this work?
xhr GPN 2014 16
Attach a filter to a socket
xhr GPN 2014 17
[...]
struct sock_filter code[] = {
{ 0x28, 0, 0, 0x0000000c },
[...]
};
struct sock_fprog bpf = {
.len = ARRAY_SIZE(code),
.filter = code,
};
sock = socket(PF_PACKET, SOCK_RAW,
htons(ETH_P_ALL));
ret = setsockopt(sock, SOL_SOCKET,
SO_ATTACH_FILTER, &bpf, sizeof(bpf));
[...]
xhr GPN 2014 18
So, how can I use this?
xhr GPN 2014 19
Need for Space
xhr GPN 2014 20
A 32 bit wide accumulator
X 32 bit wide X register
M[] 16 x 32 bit "scratch
memory"
xhr GPN 2014 21
Some Instructions
xhr GPN 2014 22
ld*
st*
j*
ret
$alu
Load Instructions
Store Instructions
Jumps
Return
ALU instructions
xhr GPN 2014 23
Hmm … k. IDE anyone?
xhr GPN 2014 24
tools/net/
bpf_asm
bpf_dbg
xhr GPN 2014 25
Demo
xhr GPN 2014 28
What now?
xhr GPN 2014 29
Packet Filtering
xhr GPN 2014 30
Can I haz xt_bpf, plz?
xhr GPN 2014 31
iptables -A <CHAIN> 
-m bpf 
--bytecode "…" 
-j <TARGET>
xhr GPN 2014 32
And Why?
Because we can!!1
Full packet control
Fine grained filters
xhr GPN 2014 33
Q & A
xhr
xhr@giessen.ccc.de
@_xhr_

BPF - All your packets belong to me

  • 1.
    BPF All your Packetsbelong to Me @_xhr_ xhr@giessen.ccc.de
  • 2.
    xhr GPN 20142 BPF ?
  • 3.
    xhr GPN 20143 tcpdump ?
  • 4.
    xhr GPN 20144 NIC ¯ Link-Layer Driver ¯ Protocol Stack ¯ Userland Packet Flow
  • 5.
    xhr GPN 20145 Smart Idea
  • 6.
    xhr GPN 20146 NIC ¯ Link-Layer Driver ¯ Filter ¯ Buffer ¯ Userland Packet Flow
  • 7.
    xhr GPN 20147 BPF is rather old... McCanne. Jacobson.The BSD Packet Filter: A New Architecture for User-level Packet Capture. in USENIX. 1993.
  • 8.
    xhr GPN 20148 Have you met ...
  • 9.
    xhr GPN 20149 tcpdump -i eth0 ip6 That's the filter
  • 10.
    xhr GPN 201410 0 ldh [12] 1 jeq #0x86dd jt 2 jf 3 2 ret #65535 3 ret #0 Ethernet Protocol Type 0x86dd == IPv6 Accept Packet Drop Packet
  • 11.
    xhr GPN 201411 Linux got a BPF JIT in 2011 Check net/core/filter.c
  • 12.
    xhr GPN 201412 Packet Filter only for Packets?
  • 13.
    xhr GPN 201413 seccomp?
  • 14.
  • 15.
    xhr GPN 201415 So, how does this work?
  • 16.
    xhr GPN 201416 Attach a filter to a socket
  • 17.
    xhr GPN 201417 [...] struct sock_filter code[] = { { 0x28, 0, 0, 0x0000000c }, [...] }; struct sock_fprog bpf = { .len = ARRAY_SIZE(code), .filter = code, }; sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL)); ret = setsockopt(sock, SOL_SOCKET, SO_ATTACH_FILTER, &bpf, sizeof(bpf)); [...]
  • 18.
    xhr GPN 201418 So, how can I use this?
  • 19.
    xhr GPN 201419 Need for Space
  • 20.
    xhr GPN 201420 A 32 bit wide accumulator X 32 bit wide X register M[] 16 x 32 bit "scratch memory"
  • 21.
    xhr GPN 201421 Some Instructions
  • 22.
    xhr GPN 201422 ld* st* j* ret $alu Load Instructions Store Instructions Jumps Return ALU instructions
  • 23.
    xhr GPN 201423 Hmm … k. IDE anyone?
  • 24.
    xhr GPN 201424 tools/net/ bpf_asm bpf_dbg
  • 25.
    xhr GPN 201425 Demo
  • 26.
    xhr GPN 201428 What now?
  • 27.
    xhr GPN 201429 Packet Filtering
  • 28.
    xhr GPN 201430 Can I haz xt_bpf, plz?
  • 29.
    xhr GPN 201431 iptables -A <CHAIN> -m bpf --bytecode "…" -j <TARGET>
  • 30.
    xhr GPN 201432 And Why? Because we can!!1 Full packet control Fine grained filters
  • 31.
    xhr GPN 201433 Q & A xhr xhr@giessen.ccc.de @_xhr_