{{Header}}
{{intro|
'''This page is Obsolete since not needed. See [[Advanced_Deanonymization_Attacks]] for explanation.'''
}}
{{archived}}
= Latency-Obfuscator =
== Summary ==
This package is supposed to implement the mitigation discussed in https://phabricator.whonix.org/T530 using tc netem. Package WIP at https://github.com/HulaHoop0/latency-obfuscator
Packet latency (as observed by an adversary outside Tor) drops significantly when the CPU is stressed as can be observed in ICMP and TCP traffic. This is caused by c-state transitions. Non-solutions: Running a stress process with a high nice-level or disabling c-state because both solutions would heavily impact battery life and CPU temperature.
The chosen solution is to add a random delay per packet to mask the this effect for best results.
== Implementation Details ==
* Use of /etc/NetworkManager/dispatcher.d hooks to run the tc command whenever any NIC goes up: https://askubuntu.com/questions/1111652/network-manager-script-when-interface-up
* Interface names must be filtered to exclude lo
virbr*
devices or virtual environments and local daemons will incur a needless penalty.
* No need to react to "down" events because tc remains running in cases where the NIC goes down then up again. It declares "Error: Exclusivity flag on, cannot modify." in that situation when the command is re-run again.
* The limit parameter must be [https://stackoverflow.com/questions/18792347/what-does-option-limit-in-tc-netem-mean-and-do raised] from the default of 1000 or else packets get dropped as traffic demand increases. 12500 covers connection speeds of up to 1Gbps.
* sudo tc qdisc
indicates all the default queues setup for interfaces on Linux
* Info on various qdisc filter properties: https://wiki.archlinux.org/title/advanced_traffic_control
== Relevant Commands and Testing ==
* Setup a VPN connection in {{project_name_long}} WS then run ping .com
* Simulate CPU load with stress ctrl + c
to stop:
{{CodeSelect|code=
sudo apt install stress
stress -c 4
}}
You will notice latency markedly dropping and staying there.
* Run this command for mitigation. It will mask the latency patterns induced by the stress
command:
{{CodeSelect|code=
sudo tc qdisc add dev eth0 root netem limit 12500 slot 75ms 200ms packets 1
}}
* To test with [https://serverfault.com/questions/14376/ping-alternative-for-tcp TCP ping]:
{{CodeSelect|code=
sudo apt install hping3
sudo hping3 -S -p 80 www.sunet.se
}}
* For [https://serverfault.com/questions/794948/how-to-check-all-active-netem-rules checking] queue properties / [https://tldp.org/en/Traffic-Control-HOWTO/ar01s06.html details]:
{{CodeSelect|code=
sudo tc qdisc
}}
{{CodeSelect|code=
sudo tc -s qdisc ls dev eth0
}}
* To detach tc from the interface
{{CodeSelect|code=
sudo tc qdisc delete dev eth0 root
}}