From f09d6a698917c4cb7995d3b5c9f5da143ed28380 Mon Sep 17 00:00:00 2001 From: h3xduck Date: Tue, 14 Jun 2022 20:31:57 -0400 Subject: [PATCH] Continued with c2, bit i didnt like the structure, so it needs to be reformatted --- docs/bibliography/bibliography.bib | 5 ++ docs/chapters/chapter4.tex | 91 +++++++++++++++++++++++++++-- docs/images/ups_packet_struct.png | Bin 0 -> 10159 bytes docs/images/ups_transmission.png | Bin 0 -> 26950 bytes 4 files changed, 92 insertions(+), 4 deletions(-) create mode 100644 docs/images/ups_packet_struct.png create mode 100644 docs/images/ups_transmission.png diff --git a/docs/bibliography/bibliography.bib b/docs/bibliography/bibliography.bib index 3fb77a0..e523b4d 100644 --- a/docs/bibliography/bibliography.bib +++ b/docs/bibliography/bibliography.bib @@ -727,6 +727,11 @@ AMD64 Architecture Processor Supplement}, title={Cyclic redundancy check}, organization={Wikipedia}, url={https://en.wikipedia.org/wiki/Cyclic_redundancy_check} +}, + +@online{file_descriptors, + title={File Descriptor}, + url={http://www.cse.cuhk.edu.hk/~ericlo/teaching/os/lab/11-FS/fd.html} } diff --git a/docs/chapters/chapter4.tex b/docs/chapters/chapter4.tex index 18716e9..b89738a 100644 --- a/docs/chapters/chapter4.tex +++ b/docs/chapters/chapter4.tex @@ -76,7 +76,7 @@ This program is also responsible of creating the shared map which the backdoor w -\section{Library injection module} +\section{Library injection module} \label{section:lib_injection} In this section, we will discuss how to hijack an user process running in the system so that it executes arbitrary code instructed from an eBPF program. For this, we will be injecting a library which will be executed by taking advantage of the fact that the GOT section in ELFs is flagged as writable (as we introduced in section \ref{subsection:elf_lazy_binding} and using the stack scanning technique covered in section \ref{subsection:bpf_probe_write_apps}. This injection will be stealthy (it must not crash the process), and will be able to hijack privileged programs such as systemd, so that the code is executed as root. We will also research how to circumvent the protections which modern compilers have set in order to prevent similar attacks (when performed without eBPF), as we overview in section \ref{subsection:hardening_elf}. @@ -668,7 +668,7 @@ Apart from the XDP and TC eBPF programs which compound the core of the backdoor Note that IDSs and firewalls are usually located outside of the host, in the middle point between the router which connects to the Internet and the host. Therefore, it is not enough that we hide our rootkit packets from the kernel using XDP as we explained in section \ref{section:abusing_networking}, but rather we must aim to design packets which are not suspicious to be malicious even from the perspective of software that sits in the middle of all of our transmissions through the network. -\subsection{Backdoor triggers} +\subsection{Backdoor triggers} \label{subsection:triggers} After a machine is infected by the rootkit, the rootkit client program will be used by the attacker to initiate a connection with the backdoor. However, first and foremost the backdoor needs to be able to detect whether a packet corresponds to common traffic generated by the host applications, or if it is coming from the rootkit client. This is because the attacker may be launching the rootkit client from any IP address, and listening at any port, so the backdoor must learn this parameters from the rootkit client, whose identity must be "authenticated" before establishing a connection with it. The first packet or group of packets whose purpose is to instruct the backdoor about who is the rootkit client and initiate a connection is known as a "trigger". Although there exist a wide variety types of triggers, each type offers different advantages and drawbacks. In our rootkit, we have implemented multiple triggers with the purpose of discussing multiple authentication options, ranging from simple keywords inserted on packets, to complex packet streams that are based on triggers found in real-world rootkits. @@ -822,8 +822,91 @@ By using the previous maps, the XDP program will first wait until 3 (or 6) packe If the previous checks do not fail, it means the packet stream was a multi-stream trigger and the XDP program proceeds to execute the action corresponding to K3. -\subsection{Rootkit protocols} -The backdoor and the rootkit client program will exchange messages contianing commands and information. For this, both programs need to agree on a common protocol which is mutually understood, defining the format and content of these transmissions. + +%TODO INTRODUCE IMAGES OF SHELLS +\subsection{Command and Control} \label{subsection:c2} +%TODO REFORMAT ALL THIS SECTION. I WAS NOT SATISFIED WITH THE STRUCTURE, SO A REMODEL MUST BE MADE. +The backdoor and the rootkit client will exchange messages containing commands and information. For this, both programs need to agree on a common protocol which is mutually understood, defining the format and content of these transmissions. + +The first and most important message in the protocol is the trigger, which has been explained in section \ref{subsection:triggers}. As we mentioned, depending on the value of K3 in the trigger, a different rootkit action will be executed. Some of these actions, as we saw in table \ref{table:k3_values}, involve the creation of shell-like connections, which may involve the execution of a real shell program (bash, sh), or a user space program on the infected machine (requesting its creation from the backdoor to the rootkit user space program via the ring buffer). + +In this section, we will explore + +the different shell-like connections that we can find in our rootkit, from the simplest to the most complex. In the end, all of them have a common purpose: enabling the attacker to introduce commands from the remote rootkit client and to be executed in the infected machine, returning the output of the command back to the client. + + + +\textbf{Reverse shell}\\ +This is the simplest and most automated shell we can obtain from an infected machine. This is the shell that is spawned when we inject the malicious library of the library injection module (section \ref{section:lib_injection}), therefore the parties involved in the transmission are the rootkit client and the malicious library. + +A reverse shell is initiated from the infected machine to the attacker, that is, the infected machine initiates the connection. It is usually created in three steps: +\begin{enumerate} +\item Open a socket and setting a TCP connection with the attacker IP and listening port (other protocols may be used too). +\item Readjusting the three standard POSIX file descriptors in the infected machine (stdin, stdout, stderr) \cite{file_descriptors} so that they refer to the same file descriptor of the socket. +\item Executing a shell program (bash, sh). +\end{enumerate} + +With the above setup, any command received in the socket (which is now a duplicate of file descriptor stdin) will be used by the shell program as an input. The shell program will execute the command and return the output in stdout, which since it is now a duplicate of the socket, it will be written into the socket, sending the message to the attacker through the network. + +The attacker, for its part, can accept the TCP connection requested by the infected machine, opening a socket and writing to it to send commands, and reading from the socket to receive the output of the commands' execution on the victim. + + + +\textbf{Plaintext pseudo-shell}\\ +This shell-like connection enables the attacker to send commands, execute them in the infected machine and receive back the output without the execution of any shell program, and with all transmissions being sent in plaintext over the network. + +As we will cover more extensively in section \ref{}, this is the type of shell that is obtained by running the malicious program of the execution hijacking module of the rootkit. The rootkit currently does not incorporate a backdoor trigger that launches this module, but rather it is started automatically (see table \ref{table:k3_values}, we have not included a K3 for running an unencrypted pseudo-shell). + +For starting a plaintext pseudo-shell, the rootkit client and the malicious program from the execution hijacking module (hereafter called the rootkit, since it is part of it) will make use of a master/slave protocol where the rootkit client acts as the master (sending commands) and the rootkit acts as the slave (it only sends data in response of a client message). On each transmission, the rootkit client will send a single TCP packet (without a preceeding 3-way handshake) in which the command is embedded as the payload. The rootkit will execute this command and answer back with the output in another single TCP packet. + +Apart from the data being transmitted (the command and the output of that command), we will find a protocol header embedded in the packet payload too. This header will be positioned starting at the first byte of the packet payload, preceeding any other data, which is written in the next byte right after the header ends. Figure \ref{fig:ups_packet_struct} shows the overall structure of one of the TCP packets being used in the protocol. Table \ref{table:ups_headers} shows the different headers and their meaning in the protocol. + +\begin{figure}[htbp] + \centering + \includegraphics[width=7cm]{ups_packet_struct.png} + \caption{Packet structure in a plaintext rootkit pseudo-shell.} + \label{fig:ups_packet_struct} +\end{figure} + +\begin{table}[htbp] +\begin{tabular}{|c|>{\centering\arraybackslash}p{8cm}|} +\hline +\textbf{Header} & \textbf{Description}\\ +\hline +\hline +CC\_SYN & Sent by the rootkit client to the rootkit, requests to initiate a connection. Expects a packet with CC\_ACK in response.\\ +\hline +CC\_ACK & Sent by the rootkit to the rootkit client, indicates readiness to initiate a connection.\\ +\hline +CC\_MSG\# & Packet with data. If sent by the rootkit client, it contains a command. If sent by the rootkit, it contains the command execution output.\\ +\hline +CC\_FIN & Sent by the rootkit client. Requests to terminate the pseudo-shell connection.\\ +\hline +CC\_ERR & Sent by the rootkit. Indicates that the rootkit failed to parse the packet that the rootkit client sent.\\ +\hline +\end{tabular} +\caption{Protocol headers in the plaintext rootkit pseudo-shell.} +\label{table:ups_headers} +\end{table} + +Figure \ref{fig:ups_transmission} illustrates a common transmission following the described protocol. + +\begin{figure}[htbp] + \centering + \includegraphics[width=11cm]{ups_transmission.png} + \caption{Execution of a command using a plaintext rootkit pseudo-shell.} + \label{fig:ups_transmission} +\end{figure} + +As we can observe in figure \ref{fig:ups_transmission}, packets containing CC\_SYN and CC\_ACK act as a custom 2-way handshake. This step could be considered redundant and has been included only to share a resemblance with the TCP protocol. + +Also, note that after a successful CC\_SYN-CC\_ACK exchange there is no need to repeat it after a CC\_MSG, the transmission will consist on consecutive CC\_MSG packets until the pseudo-shell is closed from the rootkit client. + + +\textbf{Encrypted pseudo-shell} +Similarly to plaintext pseudo-shells, encrypted pseudo-shells enable the attacker to send commands, execute them in the infected machine and receive back the output, but all transmissions will be contained in the context of a secure encrypted connection using TLS. + +In our rootkit, this type of shells are spawned after the rootkit client requests such an action to the network backdoor by setting the appropiate value of K3 (see table \ref{table:k3_values}) on either a pattern-based backdoor trigger or a multi-packet trigger. diff --git a/docs/images/ups_packet_struct.png b/docs/images/ups_packet_struct.png new file mode 100644 index 0000000000000000000000000000000000000000..871aa8ca21adeed09c634f6a5610c967f918dfb5 GIT binary patch literal 10159 zcmeHtXH-*LwVjx#qi;5_-q zNhT&HP9sBzB@+`f2>7XSumLlFSv*Gqf6PQn16`)F?o0DbOvh~kpmqT`vIoWo%_OFv z_jgZBUe?Qx7$Bwq5tEmP`k>tc2!6gm7nsNSxnn#qX!pO@Cksp~=mI@pL0R$dE?HUe zIxqwF_xC{~(5@z!05N%eB?T231!Z9Rnu(z`%v4NX59s?~ywSj)0ou*m@AnpW0xC!b z;|GAtsmjR8{07(aBKY9|AbmMmfR>D+s+zKloT37-^1np;4J|M8d(H~wfg)i36S?0~ zqXST$e@h(Ti}o@h;q+ADfn*CjnBZ+sA^$CDAeunL0BZV&(*B+J@67=efArt8?&v^_ z8^8&mDkz|AcMQstfWiSFn1AZiM3<-vRZ*t6dwAPhQ^-n65D%rlvHPL`5&nVNTue_v z3@qn~@kL3?{f$e`!QI_ei5R4B1ZZ6!Vr#5o#79@8_FxXLdiHB)R#n2b#qXInk#w1@fK)E zpqT-jWP!p!a8^)re^--0eFF=BBeWHnplFOzv{n(5*R@3Z!~79SSm2)MTB%vUp!WK9 zh6w#&d4xaF!rI(IE;!iFA6P@cbbp_YvZ4co=mRF1y9F7d@a9A-U?FBwIx_J79>n#4CB)SraVrWL+-#71cb)f(u{a_!sD#aSEs)X@TL&&+=5#2pZAuun9O;DhhoN@pK;%^H;SrUxo zT)hYe9uCS7tgov-R?*)i2=8rYV?{PH2NVwo;jL>1M)~U-;Z1|BD8Lp&eIGMC4Cbq1 zWM*&V>1nKFr|)eUq~>oXYX}IdtAsK#Liq=|n%O{Xt%$Nl3OKT|8dOikNX5s-LJe#m z2)9x-wo=4;qRBp1#uPnUKRn7CY-#0XX+c!<)x*L3C@OAVo&+e$$3)-SofzN_&@_hn zdAOk==4wzscQ+fnqAf(tiwH)z>%r9k+taro5%le3eH0bt6wG`*Y+O+uPzurB*g{@O z-xmsTQ_?pGw)U{nB`O=>f;}x%Ec7khd|i#z3~{cyu5f^7qKX67Sf3IIwlh*CVimz8 zOB7TArl;$T1!??Prf6VS}-H6fBqm zHui)-bX8E^!C*I28wYfdfvud90!&`jJkZ^YQiuTxeugT+a3v*E zFFTeF$psnLBQ5zJoJHuD36X=mk;c zF5Ne*S28DAKFAb3F|>XI0_(_4rodS52zSKkMn($9Ge>dTADoHx(t#Z3&x>MViHgjN z^*Na$cH*muR9;+a$eg-O-C%KXaoK!be}BKtuTJgzUYM{?Ma)Q{)rJy~LX<}ZRoC-ZE9nOI<~T%eoBS%tYonOh}4yh16m3P+NA*@c;I z3!e~1f@3)IMVOdd6SSC^IarOD)=tX%T;OEp5JvuF=Fkx~WPvd@cdEaZ94+q;pR5C? z!CrvhozE9BKf%&TzrpR16|ED>%0=68jW^&bVr6bE;X%DK;%GHsT8jrgC$ru*<`PD^ z#K}&HvNEo|>6C1G#NcMV0cKiz0eOVyVOitWp)(S$3xc2U07#6ZFG`4T2?1RG6D+bY zF^xmPOjlS7AogFtm6*ttHvUY#ptV8FTYY->u|pC3kuY+9PeX3$d2TEUft;z*p%zPr zSe$P7#8E)Sxn~oUlCrO36Zi|$?bS9a z6NlNxS96tNr+sR1Z>wXr4DK0j8jObTq7%2hn{&d&%UuvT@8IvBHm$uYi9a*+&DEw*^z zcG3BaN4@OVkuoytt6|!&pBia6KAj3yVD>;dFYtons9Y^d`6;eLwLkbv*vp)K{bzaO z$(*@C@iz)XqZ}2%t7C+f+qCT9|o5)#;TA*Xe} z>B_NoO2JH)1LuJ)rQmjHEwXxPeVU#spKl-;$XQv)eKk7k&-P^GN^o0;Df7;H%$Q8i zy@zNw_52Smd}|+*(Rwg+4y7)&OTI2=y7VPIDP!B>EZ58Euz6}?l17?z%W^zIlG)5; zWIS)IUc}N~L zfm|j?e;}wE;@aW|3g1%1ma1cwr3)Jd*xhJ+YYUdqdOS49BjquF8&@qcmFMiabw7bUp(%{CX-Oh$}XoiNTBW z!k=crp92g$2{Zu~c3_D`R6T8z<7kBezCpc-%zoPoa6i2q%y2 z=77K_OKC9Q^E7Fd5xL+({3|<_YKQXWUWWr#!SF4?l-OZh@`QEsa(QO-d0MS0C#Ck;pP#%xr=g9vK43MOm^7Gx^a`LZe*ozd_3o61~l7KHL*XL^%=28O=W1VSA zkku79jJ7}Q52AFYfs_4k>|O|0Y#P&veY>j(E?lu$ObY)o$KdsLUpvK;0-W}hv$88- zVOxN^mnm%^4u~0W+8S?Ov){Hm@uNy^=mUeF^@;@WB=|2Va2%rtv~4gZ$ItQ=`h-=G zkJwiE_r4}jLB8u-Ez2Nt^iofWqzi9u)4mt}`$N6QWk>6EF7X?Jd-1P5w!K>yV`!xx zf1yT&vP75ns->q4lK8)V-sO?Q?i5WoDXI_KyIsbQc2nbP6DgTD7B>v2U)-}{mdj%v zjkw2SNv{MTt2}Bn4!tEFTKSj2B1s~ggu zPmNX2Z8njzZxZE3IGc?vS6Ic*U?Q@zIqV$NDjOB|H^075z9i8dF}KUD-+WU>ZX;fH z$iB^_KAaII5r2Krl-s~BJm6TIZ!Fb*u4Rtz#g-}aT3jlhrkdma@W%*ss7wO6U4FI` z|2ejtdn*$Ay0ufXMU`qppEmW|5`yznS3-+-`YYHU6cqAt<&rbDKi;qN@QOu5XOB+t zD9|{jvTf)~GmpG~6wXwL-^=ZipeC7OpCAD)elz~PHs1WEM=j#aM zo4I1+_?aa;<#+wxxM^h9402yWbXZ9i)#OoU!4uQZwO5h$o=BOs?3;MMb!YCMA+3^8 z!ecV-*_2(U9`!k~KNl90JA;&qa}5JSMz7&sFZg}+B@-^9b|j~G7`&*W4sm3eSYE3y z=v%zuNJqh<5LL4%oi4igcI6-zF|tNr^$%?muS7B5Q&++|g3QzxjsCw0aoTR^Y6v|j>tu3sD$B+giFZT5Tc!e?(Fb3&k8vn3M?O|?Py1>#ktdhvW=Fr6GjKeSW(swVnt1G;VHr*S0YMRqD zOHWv`uyA=%BQFJ=)ecGC89wEh0211>x9DdK`a&PxWnvZnbc%(OF_^);WnHS=y3qGL z6kXz1v~`;MR4ou*^4;Ehkuh9OjL0r}*O|P^CeES5#8MzCyV?*W8t5E)5W+>X)IX6A zgqz|lvHaNpEsj*+@!&op`v(h`4*mNvAb`CO_!r@~F}+-oObn<{Bok|tC~z_tmG8wc z0m17Yz{3Aw@EVJ_k9z9`aI}_p7GMj^qeG86EugQ*1h5ju^gn0iLXE`HmJt4P3Ovr> zu;Mf37hVF+^*&41%-ONrRVPbf-@bfu93+bF$<;PmQV%m-AUS`M@>B_!I*U9H2krUw zB{d!PB}lf-X;&IvA|8;-m(S47o&CHI!hdQ?R$tcmet)x#f7bN;RsEl0!{|l{!Ae7^ z*LW*Z^Wp1*Ps2+U^=AINJleS&0ebYRC!tICRbpv5zp^Uer()sHX2Lc=c2}CV5{+DcKKhn- zZfzZZie3Wo)MD_G4Z{?8q|KWyM#Im?^U-#R)c8d4((7A$pX!axVc#}Ki#>f5;E$iQ zo>@CdxAIgJTKmZH;$>SOTeYTuQDt-X%%eu1hjqnO$=w3G1QQRlt}ISt=8EO*IBHlI zbwhsHb<}PMncXGRDk)Idm;TX&-WlB#s7#9vOV6TeI#!%JT8^hKqN1`l2%3f?t|ckc z4aVc+0-SnumJ0+Avmu*`n(c2I)xqh#`N z!P%#xOI`L|juXoAHs|AkXi2PWce-c$mIy7nadF;f^2=511~=`^TlIlbo^vV=RygR7 zF0XhVP(~3|s8I!0>#eohZxp&;>^0#i*0+^$d;*pSNP1G^rPf+%SzWq&8SF(_DGwzM zF(z)4;c|0+fODXRgP5B>T6X?{kV~^^mO{`~xud88&P*Iy4UzPb`s(X)<6@CCZ$!j_ zc6S)E!tDC})zWq@R}o>lo3HnY{cVVPxvi6{x4 zJlsb#)b&em+q8IQ`H24*{u(Z}JC$xl!#OEmK?Y>V0}kWkg)|0EmmcqFmT(yu-ekSd zzWh7(dYLK^i%84MUXf%#wK*)tC2ou_MERm)#JqiP#EeMZ;rCM4 z5s5Ocum-`|0I$hzzqrHIOB4R3e(x{3j(|7*yijhozP)#~Ha3mF5&kP=M2iUdiY(-i z3x#=RZ?>IHNF&x*4m%8@Z6|N2pWjan+|HF`^KFLw{HoZ1mKDn%vkj5x{K;9}waxWb zYZoVyu90`JU9On1xK9do3V-&lds1T2NK%4^8IlPcV^a{62CJSFM(RD~`>N^84Ju!W zhDfD?74|{8_nZ)%@0ymiS1vum3a_Z@ojzdD-6I$O!o=IiNB(Je`SWJ;=g*>1%L4@+ zkMB4oxc`b%w>>rYgsZj!&N(X+M>Uyta<&;acUg<)dOM7Dm4LPz$i<-^Ker`$G=6^-YvAvCp7!#@zLXls@sX3sRA8$lF6Q~&C>4}n?1FjB znT~f)%@bC0%3={ENw^+*s_04rTt#$m+&;a%@X`9)it@S#!GE@rPcHG&E~O_D=IsS4 zQ$F(VrB9W{Tx1N!n=6%3b?F1CSpSAQyP~vg(Gb*$5X{`xk} zZVwcBTtgdy`y`CqNC`E%czXOYG8WO$%8+uovDOE##`=X4^;Sx<6ALgM`Ytl>KIfxj zMyq$L^IHEC^a;((@gjk7hFDl3iHUHL$a8SG9 z(t>=sGq->fy?*wZQ`Fb)AG-9hr@VfnpW7sn)?`~gAa1k2((9? z2#vdG81KY>aW+wrm1J+bXne&@Zp1AGTq*J!& zr#dnAm@?|ewv(h?&K73HddShFH3c`BuMFYBRa)`GrzBcGjWY=eX}3V;#3YS)X3|{L#nz3urgo1Lw!xcY-eG6gAwQfBUMjd9ra> zORD$h)59Gc?5^NrM!Gn1)?!E|2Rbudar#uN&*WJkX-{UtTAYrn0dr<9L|d#)no{GiNTx;=|Qnrxd031bxaTsSCY zYFtt{9$3T}T=1#B0w~Nzba}nT#&=CVe5pl)US=eF@2|&M!<=SzhR3H(q=WQNULENg$MkbG z3-mm?0_x+{9?rm^^)Cqbhl??BUv(gK>>d#xpo9r_-~wFI!2V7dc66keBFSrcuT zx*Dj}8A^DB9xY;Pk~1;M+2M3CseVdCt_PiUZpT@DNUeCcdTwuBzbv|OcRWT5@6GdF zM0Ba0@~3h@dF=oo*e&peQSO8?N=R7M|0~O8fQ7cEceRhtj*?);V*MO;Q^Cv9aG)mY z*IfMGM)HZY`_yKJ+ab^EYMYjtw#`#RWm(ie)Ae=M=w{foliZJd`^&%l z_0wxA9*WGR{b_lCHU=SQ&+H#&db}4(IineH_{{#}#Vz|x*Slf1mJcOUb>`blx|)oC zJ}db!dAeG9|E^b<`o3ee$moWzo20SR>hascttI@oyejFecFO50%20t z%tXoU7}FWN^dMC(&D+_&b)aA&{HK3}QmjCG@@DAei^*hCbaG}0FkB$91`mfnAZs2} z9$Og8lKx5}tV-phe4Ky}>@S6m6uW+t4ob+^Qi3`8ugtZ5NbxQ%2^_Cq!W3T0 zNstaYTmj=ZqjHt2Mw6DI>6(jlNo!)?_S5k7BDW$OVi|BtcVY|Uy7QAkJnZ3w^hZb4 zR`MrwYTG&_gkurxmm?iRi~$8OHNyj*-TL77&AW+IV;9j#dT=pG&1Aou*E0^Yztk%m z@*qNeC$d;~;;5|gjLFOWH#zDOq&idOj^z>Zq#M(d3}%XcvgG+BC%-)Gw0J*Wi-5&*wGAnm*@-+or+(y`O;^$ zo8o#jnJZ*<8nQt6#tA1AA(Queu z6JU}_f#oQIr8lSFSA9X+F6;-5qXoq3x8CP$wlhl}J%@hDDOlKZ*R1#zp-~ArG5#}b z+q`LU%QJN8PTY^h8k}R5zc={P(NL7wcn)P9(MG3bJ&Q)3>hVn4DdO>O3{Vc6aII`F z9(E5kUBmM7+i$U}OpN`25;wQQXMd$GJZaDml4J~m4Z|3N*y~VN%24lh)~&OkbPIi&l`$rSFS#xp^KLv+u=_>-8X-dyPa}$N3AIZYf8a z_}SB9FEK5cp{vBu8oN{OW-tiq?`8kndDSuAV94p zgPq0M8Pw|zH)#(^v*@0~fCY1_DO8q~xiWRtGg zOLU8q#P_gc>IviwIC|4ZyrZHw4I$r#DpCNcqx@!hH~a0f&s7nVmc@abQ%a4t#dei3 zC`gOx!(>`_8T=}nxl5PXj%-gVgT6U`P4n7j&B?mcWA0ONE!(0Ww+)*H^(`uKA(O`Y z&R1^v;$9J9;-Zd4w1#igg^Idqg^kFHvibex>t;7M^V|iX4lT$b)ZB5HW6TX?pbTux zd$w^2Cxsc8UMeW~0{TE9$?gCRTXKU4)9nfFTeE}eTUDo-IRbz(%L0>Ntu7NwicF-RK7I0J`izZgyr8F9{Tv)Pcxtb!58=J=`&{btpC* zu9VyRMN6P_xaQaTYpKPXGkJxdFd7H|s!a85k!gJA{G8K`GwSZzr1SRI1H-n@0JW0j6uI%Oi)RO5DNf$RyJx;LL8nU?FOeh#mplpKQa8XA!%Fl7iQJ7$D6_uV)QtxFYiU_ zJ1Z}9wc4^Pjxo@JY{j0`Z;%rvl>m|o^Z25BnnjM;(Knp8v%%;IT5{EpM9X7F0rmMF zt4*WS;Hq>J>Q^tP#KVQaFbTUIWJ@;#0YQ~MlZ-{QwfIUbRGua{(tk>s=2ybclH#Zu zDieHHtPCsT5o64WWe=nsx~@s`?S20YrRSY0{wjh9FBufBr6x9Vfx^-o55T8~nGr!1bN)wsav<5_|S&DKfbB wk0;3A(b*T^%Lvk)8zjJkIZFt)EgmsjG_2qM19l4re1XSg1T}+{>E4R^H#{&W(EtDd literal 0 HcmV?d00001 diff --git a/docs/images/ups_transmission.png b/docs/images/ups_transmission.png new file mode 100644 index 0000000000000000000000000000000000000000..f60000cb0e06976e60f0cf956c61f430ff9875f0 GIT binary patch literal 26950 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 HuLz3EfVruu8+ok- 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%0D@YnS8-~Q7J z!y7UC=L_c^$xj8Z(4ucZCf42n_@2m9LiW|$zu#hI<>uL_>)goALHutpQNSEgNB;fK z4nP=N2%29*PA^h(!OT`Z^hAi&LBLzY_`JruT{1yD6}FCc1ET& zg^_!F4T+zwCHa==NlQy>pGDpH-qc3~b~mnG5s8hQ%)T@hfHQkFqj5!{GeedkJbP*M zPUcW>z%4T_C?zE|@wC_|1bG4>t8kA69!X=L`ML)T`#ua1VPTK@wArbtGsv%hTV|vD z!N7cxMn#YfU7(kiYF5v&iiCeCP1MUO?kZ}DKW_Fu;eO_drN+Iy|1X