Проблема Tox которая коснулась около половины форумчан на сие форумах.
Затрагивает все клиенты Tox.
Почти во всех мессенджерах, особенно с видеосвязью, данные между пользователями могут проходить через UDP напрямую друг к другу через UDP holepunching.
Из-за этого происходит разглашние IP пользователей своим собеседникам.
Фильтрация
Tox сам по себе отправляет кучу мусорного трафика, а переписывать клиент и DHT долго и сложно.
Спойлер: TCP
TCP может быть так же использован при подключении к серверу с белым IP. Это может иметь смысл атакующему, что позволит узнать IP собеседника, который был к нему подключён. Маленькие сообщения 1-4 байта будут слиты с остальным трафиком. Отсеять шум можно задав минимальный размер сообщения. (tcp && tcp.flags.ack==1 && data.len >= 59) Можно использовать то, что у каждого сообщения есть служебные байты, которые отвечают за длину сообщения. Далее сопоставить длину сообщения и сами служебные байты. Колво байт сообщенияСлужебные байтыData.len5-1200395913-2000416721-2800497629-3600518337-44005991009915500a116305891419
Спойлер: UDP
Tox проводит UDP holepunching - соеденяет пользователей напрямую. Каждый из собеседников может узнать адрес друг друга. Фильтрация мусора происходит по тому же принципу как и в случае с TCP, однако Минимальный разммер собщения, которое можно отфильтровать - 40 байт. Так же есть служебные байты. Зачем-то есть статика 1b, по которому я предлагаю идентифицировать сообщения. (udp && data.len >= 40 && data[0:1] == 1b) Далее идёт счётчик сообщений, но смысла фильтрации по нему нет.
PoC
tshark -l -n \
-Y '(tcp && tcp.flags.ack==1 && data.len >= 59) || (udp && data.len >= 40 && data[0:1] == 1b)' \
-T fields -e ip.proto -e _ws.col.Protocol -e data.data -e data.len -e ip.src -e tcp.srcport -e udp.srcport -e ip.dst -e tcp.dstport -e udp.dstport 2>/dev/null |
awk -F'\t' '
NF>=10 {
if ($1 == 6) {
F2 = substr($3, 1, 4)
if (F2 != "" && strtonum("0x" F2) + 2 == $4)
#TCP print "\033[32m" $2 " len=" $4 " " $5 ":" $6 " -> " $8 ":" $9 "\033[0m"
} else if ($1 == 17) {
print "\033[31m" $2 " len=" $4 " " $5 ":" $7 " -> " $8 ":" $10 "\033[0m"
}
}'
Айпи ребят был обнаружен этим скриптом.
Отключение противных функций:
GitHub - TokTok/c-toxcore: The future of online communications.
tox_options.c
240:
void tox_options_default(Tox_Options *_Nonnull options)
{
if (options != nullptr) {
tox_options_set_proxy_host(options, nullptr);
tox_options_set_savedata_data(options, nullptr, 0);
const Tox_Options default_options = {false};
*options = default_options;
tox_options_set_ipv6_enabled(options, false);
tox_options_set_udp_enabled(options, false);
tox_options_set_proxy_type(options, TOX_PROXY_TYPE_NONE);
tox_options_set_hole_punching_enabled(options, false);
tox_options_set_local_discovery_enabled(options, false);
tox_options_set_dht_announcements_enabled(options, false); //Может форсировать UDP
tox_options_set_experimental_thread_safety(options, false);
tox_options_set_experimental_groups_persistence(options, false);
tox_options_set_experimental_disable_dns(options, false);
tox_options_set_experimental_owned_data(options, false);
}
}
mkdir _build && cd _buildcmake ..makesudo make installПосле этого скачайте исходный код желаемого клиента и скомпилируйте его.
Воуля!
Бонус
Я проверил у каких пользователей включён UDP (378 Tox адресов из парсинга XSS.IS)
Вы можете проверить свой адрес этим скриптом.
Нашли - точно уязвимы
read -r -p "tox: " tox; base64 -d <<< 'H4sIAAAAAAAAAx2WSRYDIQgF95zGEXSJoPc/Uqqz62cc4E9k3txNcpf2xDV8yT3Hj8wzdpe7hlWp490nx9pQaW+Ysb6KyevxjgzzvUSnviJTz2wStvuVtDuX9P3ds2z0kB7Zm1yPyp0ZnPJxBzffyq8xu5vMoqtLyU4lHm9v0Vqbsh43ZYwdQ6yHXdb3Yc8JanvbJqfmHJtq2zbp6+kTa/NeKWN7lWylTnk1csi4lRvaczsS9PLV2fh1t3dCboln0iKny47+tsw7qSe0zyqrjF54PdPovQ2Xscc60pvXLeW2rfJWtyUnsx/Zd03eWssnXU9rMmsu7m+lbMl6V7L/3A/bdae0nDrY007KnkNNbD53Oac2cNbiRUyLujS/rUu7zk5r+dgTpTZpeqxIL+lDrp5xJMNnyupOF+8Vm3JHXSFrpH0rGUViW31C3WvLvTaCd6t2mfNNuqj1FHkJoGI+wAe0F3hqAb2ofoecnaGyXUsFyf5h65va1jhryX5jTplPwf96Yf2BQ0p/LEl1pwYAWEOKnWNfVShq50Rpc9XbZRefQ157DfzHRT+v1o+1cN/0u9qUVQvqemp9SI76KXPPikrz0tFVS3TYEJycl6YoUz2k7NNQ4O19Sb4Jg30f0Eg7rYlmwpSx0OhFG/q3+Bh87WwZfdwjNz2uUAH33BcfF63fDfuenF2Fszajq2j/dLJXgmRNoxKF3ilHz0Hb+A58Bm9KiRb7Y3A98L+OU6qC+bH3aa8YftnWqKeU/iFw3vk6XamSGg1ljrhFssd1epk4aGu8J3N0Vamn1u/OQNX+Wt8waAPcqp8p7i0+L6SCpzm+AzbQuKuhyfdt+qql6327BYnR4Gvc+2mjW15Ugbql4DijhqeonbKetGEFBtX43qaVrscrqFQ79eu89DV6LfjlfI4reQIdYhJeqZ8ezinHpa6kx1ZTj3j7OIqVKDwdvGU4z4tF713iEHCcwpdSm6OT2XJ/SraNCzq2IYUMLelu6P/lJj3aPeindGQqLzxQ+/vQe9crCqFTEmZkNCpBESDTYXPvoNp3DMd5sRckCVKAa3RHCul+UuMUvs+DtXEG/so9KjqcvbhoTJLNkNXngv0p5BRY0LLQTxCTpHSnJxQ77cPBvmR460M+DH/ZffAIaY778lacNf85X4xX3vi0tE4j30Z99K4EFZU/yBAKARmv3Eo9hfx06zolItgPauSGFSLgr2HYMX30i5ECTXZyqThAwPtBb+S8fnOkZpNXHi42XWh7HiOj7is4DkaD/EzHL2CKYusi2mR3RgU4+Pp2zi/hKRdtV+Xs8kO+uV5wfn3gi0nIvW9+gfCaCSMkDPmslAXm/zxkwvmFnU5KsJ1M0xiocZRKqmdcI5GcKSRGEfm5j3dvIi85hbiXu/eX6rlgjdFHVoz/9BwbGki/QYK5ldHgwg2U2kSB1g73F7pWcXyEkst0/fCsZGN+K34aTK3QnGjeyG2DcdLG8+CmVGZE7AHXDNVdPn3iU6Ys6god5K12qviQZIL0y7AUp04S0u53Q6vcsMcB7affuwWpkrGGC+V0RUvhBw/escDwlL7Bv13eqtW4Gb/hcVd9H5K3fsnWPi2l4kQKxPWF6RPkzKefC4X9768FI7XD0Wx0WtquTPPV4Hru0b89SkaVULogwlGjwRRpudCscJL/HnPH1G/iKG6KhpuuJojFHQPW1ibhYROOcBOu/AEnq47B3AgAAA==' | gzip -dc | while IFS= read -r s; do [[ $tox == *"$s"* ]] && { echo "Всё плохо"; exit; }; done || echo "Умница, всё хорошо"
Просто используйте удалённые сервера и всё будет хорошо!!!
Специально для forum.LIMB.cc
LIMB