From 8312c7c6b51bce0e05b62c7b36e11d95db833106 Mon Sep 17 00:00:00 2001 From: Daniel Date: Thu, 11 Jan 2024 10:03:40 +0100 Subject: [PATCH] Add UDPLite check to ip4_datagram_connect hook --- .../ebpf/connection_listener/bpf_bpfeb.o | Bin 32288 -> 32456 bytes .../ebpf/connection_listener/bpf_bpfel.o | Bin 32288 -> 32456 bytes firewall/interception/ebpf/programs/monitor.c | 18 +++++++++++------- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/firewall/interception/ebpf/connection_listener/bpf_bpfeb.o b/firewall/interception/ebpf/connection_listener/bpf_bpfeb.o index 4049e6dc2ad85a000ced63e516ca94b2110e7b48..7c9e91d7fc08c2f663505f09277b49d41c45a58b 100644 GIT binary patch delta 2361 zcmZ9OO>7%Q6oB81f46BXH%b$S8oD&K>!P-H3Q2m1@G1xqi69yEKo1pl!3r%+QcD$T z634Q+MIwOPsYImaU@j;J4z65@6hXBT9CEZ!4>@pHsXg?-AreSbq6psGT{mxM$%weS2WMa<>`C*syuWI0OZvn*pEFNPJnr9WzK8+j=U51mLmC)T$@j)j!_Tx$Qbt%{R?Zcl%=V9r+kg)*} z>jH?M)Ij-!nC(oK|C8cKXY!M(sP}RC7*m20V~W4RnBpspDSmN}>zg#7 zv1f1-_%+HTC9S(R8A5^XDi5g z@*lz{j1RWFg@WRHd;#@@DqqhDqjTqaHC*381FhZ<2-6!ec2|X8sppT-3vo6z&TDLG zTnutOQVJR(6^$DjH#Kf)+}7CExEtU)M4W&DBD+C$OUvFkn$Y~F#(9k`jfi*4l>rYT)CnHXWma#!2IH!== zzA;W|JgM=F#utNJFy?{=gOX^ms5i{L+y6a`Eq@qnE~EW@;+$b)%QYJo3BO z@!FbFjrpj0ymVyW(rFxzO$@2{@(*HB*~{|>?_+CxdCJef9uo*?QS{s*3S!LG>uWoxr_x7gGzu#l`F9oT| F{{a{~43+=@ delta 2207 zcmZA1UuaWj6aet^eNED&otTccrr1GT|Cl5#!0O+p|!3X#YJwZ5pXC|t;&7S_I*VDCh4I-3(6r>Tt z*B2mYlKMpT&$iSl6{*I?ejBNd%>S;;+pDA1XYnuF0;>S+6##YDOfDW((dy#je_Hib z7jI-$&Ijs+#u^>#TY!)M0CmL+Fcd|PQW7`J4}AsNk9qJr{vLF&7h}2#s*`;fhinh@ zgC3-Mn3?Ky?bLq{^h6&(4knz$6VQ{?5VJk-Ip|9VFitz(0zF6djN@NGCy!yAXFiMZ z2J?p)7ntc{i;iD`&Wz*vp~Mp17?+vp02SMVpMqW;#CV&T>N~cFUV{FSE~w5N!uT&{ zT9F3xF+4xKVF{eDe=C{?#0kpJ>UaW0{{<}}osjx*e{bp!GgE(rnffi}98H+D6T|00 z7iq#AGfjvyQ-6Y)`qRwRpJAr{JTvugw7gKH358aoNE3?8G@`u9DD@j>(G=BV;lJ?X3`w~GmXtHIN7o8DGl_tL>xzc(yw3CDzI-OhRA z?u0ijoEI(#mxL?AHQ~C;Iq>ef65wsPO`i+?ANzvBVPQ)+COpfHudXl76X>*XUbrA! z60Qi>gzL=o>G18c1i9gMJCd(Jdr&wmYzfDNXIrN8LwmfHXgV#N7cK~wge$@|;m2rt zqdd@wBVND@9F$rAZnI|{Bf90z3*+A+o59Q%IqG3gzW<%u0ea0?JvfkkKMpg~)7JbL{hXTr%uKGFH=8SmJ2F3EH*WY1sjNIuev`ImI2+?pRtjm44FwbsH|Gi94>eTYvA$_&`mf33}wVbiAE z$X@!;VdQMAgFa+0qYrzi3uDcgQpO(o7<{TQArE`#-U<^`ROa`cdt$$Qhu(AV?>ql` z{^Ta5S8DaOD#rEcsrx+z-P#2j0Iq(y4Re5Y6}$J@fa);2oA=(UBuuKQdk=m(uYk_?_a-=-n^h2*YTW;@vaKzlrB+8FIf1t__GoLnv7PbIX@%qEG zjvQ8_<-w8vwc1@CygaSEt=#~jnt~SW_bc0@pM{v4%v}Y$n6(|tw(?HWC*RX?*(;7}Vw;jUrVGSwg zQ&@ldh=#25x77ZMhDqn2&^>t#1?G>?v&?OIPeYLf!dPM6`9JL7_^gH!^A7YPa~pce z`Pe~#gL4{|ncL8-&UmYb+2!Z!lAX=gd(wxUHZLseXOy>I2lbj!gBV zqJE6oqXFuBTW^qL6=;C8^9;>kQNuarC_2L&L0@5}`dMbGKe=fSs6k;fUYb;T z=HKze{--t+u)D)cwQUuE7PJ4x_v(bH+&F)RhL5{SR7_3@$CG}b8E>t4rI@MyIp(nW zVj`hJFAb$O;#Pi^3)0CE*p} zYJ)v|7c~R`HiYf6@D-qCVvY$Xg;T<5ZX6#nJb=y$7lez#CE+FE72ztgM|)ah0rG}0 z;MWT!IvVy22*-qz!YSeOrajwXW;0-&6)p%Dg-gOq!Yjhnw|>W;QSEI2ZQ5^ty(iyd zr)=j;AG$ei^Xu(X-ajlt3-(mFnU)Gu{gc(nOpix}-xnShzR>88VXQF#dEq(X1>s1v zW7kge&E&Ivy%&$e@X3=&|JHl4-n^!PjG%xZ)q0SM%r=QJ-GXtTu314Y* gXJ$ahbLRJ%58|uievsbzl;}pkq})>59~=~a1KKSN1poj5 delta 2223 zcmZA2OK1~a6ae6JZ*5Hc{c&1#OnpGqTGOI76*U#A&98`{B2`=z6q{Ho->&?C+Cv6GvAqW=5goFWcs(t z{!*E+&R%)cl-4zCKm)+J^NX#ir_<^dx@IrtbE)UJl(;HPZpE&(TtGayR%#dH-7BPgvJXwy zPJV>-b*7;^=e2n??aC=*P=7b7JAI{ z7p&irax`RFU|CATICCvJ=Xq;AK>e_WN#^3%+eKU#J-P(h{~04f+`rh;+L6L^94I6e}#pXw)>slMQO8uJ5B%N2B|4$Kk@mpX?$VKl&Bu{w;Osz2A=7v@sz+1i)YaYLWM3&rUtemp`Ue+ppxnQ9 GivIpid = __builtin_bswap32((u32)(bpf_get_current_pid_tgid() >> 32)); - // Set src and dist ports + // Set src and dst ports udp_info->sport = __builtin_bswap16(sk->__sk_common.skc_num); udp_info->dport = sk->__sk_common.skc_dport; - // Set src and dist IPs + // Set src and dst IPs udp_info->saddr[0] = __builtin_bswap32(sk->__sk_common.skc_rcv_saddr); udp_info->daddr[0] = __builtin_bswap32(sk->__sk_common.skc_daddr); // Set IP version udp_info->ipVersion = 4; - // Set protocol. No way to detect udplite for ipv4 - udp_info->protocol = UDP; + // Set protocol + if(sk->sk_protocol == IPPROTO_UDPLITE) { + udp_info->protocol = UDPLite; + } else { + udp_info->protocol = UDP; + } // Send event bpf_ringbuf_submit(udp_info, 0); @@ -154,11 +158,11 @@ int BPF_PROG(udp_v6_connect, struct sock *sk) { // Read PID (Careful: This is the Thread Group ID in kernel speak!) udp_info->pid = __builtin_bswap32((u32)(bpf_get_current_pid_tgid() >> 32)); - // Set src and dist ports + // Set src and dst ports udp_info->sport = __builtin_bswap16(sk->__sk_common.skc_num); udp_info->dport = sk->__sk_common.skc_dport; - // Set src and dist IPs + // Set src and dst IPs for(int i = 0; i < 4; i++) { udp_info->saddr[i] = __builtin_bswap32(sk->__sk_common.skc_v6_rcv_saddr.in6_u.u6_addr32[i]); } @@ -169,7 +173,7 @@ int BPF_PROG(udp_v6_connect, struct sock *sk) { // IP version udp_info->ipVersion = 6; - // Set protocol for UDPLite + // Set protocol if(sk->sk_protocol == IPPROTO_UDPLITE) { udp_info->protocol = UDPLite; } else {