Перейти к содержимому

Qtox что это

  • автор:

Так ли безопасен Tox, как его малюют?

Tox Sux

Всем привет!

Мне нравится Tox, я уважаю участников этого проекта и их труд, который иногда даже удается использовать по назначению. В стремлении помочь сообществу, я заглянул в код, заметил потенциальные проблемы, которые могут привести людей в погонах к вам домой к весьма печальным последствиям.

В последнее время наблюдается нездоровая тенденция переоценивать защищенность подобных систем только на основании того, что они P2P. Буду излагать объективные факты и дополнять их своими комментариями, чтобы не бросаться громкими фразами в пространство. Выводы предлагаю делать самостоятельно.

Заранее отвечу на вопрос: мой pull request был принят.

Факт №1. В master-ветку попадает код, который падает на тестах

Всё началось со статей на хабре про установку ноды.
В комментах люди жаловались на сложность сборки и установки на CentOS, поэтому я решил запилить сборку на CMake. После пары дней работы я был готов презентовать своё поделие Tox-сообществу на Freenode, но меня встретили непониманием:

someone has contributed cmake initially, but other developers didn’t know how to use it and couldn’t make it build their code, so they switched to autotools (sic!), which they become to know better now.

Параллельно я отметил, что в master-ветку попадает код, который не проходит тесты в Travis CI, но мне ответили: «мы понимаем, с тестами нужно что-то делать, но пусть пока будет так».

Помогать так помогать, решил я и открыл код этого падающего надежды мессенджера.

Факт №2. memset(ptr, 0, size) перед вызовом free

Мой глаз зацепился за

memset(c, 0, sizeof(Net_Crypto)); free(c); 

Если вы помните из цикла статей PVS-Studio, memset может быть вырезан оптимизатором компилятора, если регион памяти в будущем не будет использоваться. Логика компилятора проста: «После free жизни нет, значит и обращений к памяти не будет, удалю-ка я этот бессмысленный memset».

Как прилежный ученик, я заменил вызовы memset в подобных местах на sodium_memzero, и ТЕСТЫ УПАЛИ.

Факт №3. Сравнение публичных ключей уязвимо к атакам по времени

Для сравнений публичных ключей в toxcore есть специальная функция, и это хорошо:

/* compare 2 public keys of length crypto_box_PUBLICKEYBYTES, not vulnerable to timing attacks. returns 0 if both mem locations of length are equal, return -1 if they are not. */ int public_key_cmp(const uint8_t *pk1, const uint8_t *pk2)

crypto_verify_32 — специальная функция из криптографических библиотек NaCL/Sodium, которая позволяет избежать атак по времени, т.к. работает за константное время, а не делает break при первом несовпадении байт. Использовать её следует при сравнении приватных данных: ключей, HMAC’ов и проч.

Кодовая база проекта toxcore довольно обширна, поэтому родился вот такой уродец с уязвимостью:

bool id_equal(const uint8_t *dest, const uint8_t *src)

Но и это не всё. Имея на руках функции id_equal или public_key_cmp или crypto_verify_32, разработчики все равно предпочитают сравнивать ключи своим способом.
Вот краткая выжимка из кода DHT, onion маршрутизации и других критичных подсистем:

if (memcmp(ping->to_ping[i].public_key, public_key, crypto_box_PUBLICKEYBYTES) == 0) < if (memcmp(public_key, onion_c->friends_list[i].real_public_key, crypto_box_PUBLICKEYBYTES) == 0) if (memcmp(public_key, onion_c->path_nodes_bs[i].public_key, crypto_box_PUBLICKEYBYTES) == 0) if (memcmp(dht_public_key, dht_public_key_temp, crypto_box_PUBLICKEYBYTES) != 0) if (Local_ip(ip_port.ip) && memcmp(friend_con->dht_temp_pk, public_key, crypto_box_PUBLICKEYBYTES) == 0) 
Факт-домысел №4. Функция increment_nonce уязвима к атаке по времени
/* Increment the given nonce by 1. */ void increment_nonce(uint8_t *nonce) < uint32_t i; for (i = crypto_box_NONCEBYTES; i != 0; --i) < ++nonce[i - 1]; if (nonce[i - 1] != 0) break; // > 
void sodium_increment(unsigned char *n, const size_t nlen) < size_t i = 0U; uint_fast16_t c = 1U; for (; i < nlen; i++) < c += (uint_fast16_t) n[i]; n[i] = (unsigned char) c; c >>= 8; > >

Ирония заключается в том, что функция increment_nonce лежит в файле, который начинается со слов:

This code has to be perfect. We don’t mess around with encryption.

Давайте присмотримся к этому идеальному файлу пристальней.

Факт №5. В стеке можно найти ключи и приватные данные

Подозрительное место:

/* Precomputes the shared key from their public_key and our secret_key. * This way we can avoid an expensive elliptic curve scalar multiply for each * encrypt/decrypt operation. * enc_key has to be crypto_box_BEFORENMBYTES bytes long. */ void encrypt_precompute(const uint8_t *public_key, const uint8_t *secret_key, uint8_t *enc_key) < crypto_box_beforenm(enc_key, public_key, secret_key); // Nacl/Sodium function >/* Encrypts plain of length length to encrypted of length + 16 using the * public key(32 bytes) of the receiver and the secret key of the sender and a 24 byte nonce. * * return -1 if there was a problem. * return length of encrypted data if everything was fine. */ int encrypt_data(const uint8_t *public_key, const uint8_t *secret_key, const uint8_t *nonce, const uint8_t *plain, uint32_t length, uint8_t *encrypted) < uint8_t k[crypto_box_BEFORENMBYTES]; encrypt_precompute(public_key, secret_key, k); // toxcore function return encrypt_data_symmetric(k, nonce, plain, length, encrypted); // toxcore function >

encrypt_data_symmetric вызывает crypto_box_detached_afternm из Nacl/Sodium, код приводить не буду, вот ссылка для желающих проверить мои слова.

Казалось бы, где можно накосячить в 4 строчках кода?

Давайте заглянем в исходный код Sodium:

 int crypto_box_detached(unsigned char *c, unsigned char *mac, const unsigned char *m, unsigned long long mlen, const unsigned char *n, const unsigned char *pk, const unsigned char *sk) < unsigned char k[crypto_box_BEFORENMBYTES]; int ret; (void) sizeof(int[crypto_box_BEFORENMBYTES >= crypto_secretbox_KEYBYTES ? 1 : -1]); if (crypto_box_beforenm(k, pk, sk) != 0) < return -1; >ret = crypto_box_detached_afternm(c, mac, m, mlen, n, k); sodium_memzero(k, sizeof k); return ret; > 

Если вырезать все проверки, получится:

 unsigned char k[crypto_box_BEFORENMBYTES]; int ret; crypto_box_beforenm(k, pk, sk); ret = crypto_box_detached_afternm(c, mac, m, mlen, n, k); sodium_memzero(k, sizeof k); return ret; 

Ничего не напоминает? Да это же слегка измененный код функции encrypt_data из toxcore, только ребята забыли почистить за собой ключик на стеке функцией sodium_memzero… Таких мест полным-полно: handle_TCP_handshake, handle_handshake, возможно где-то еще, но я уже устал.

Факт №6. Варнинги компилятора созданы для дураков!

В проекте toxcore категорически отрицают необходимость включения всех предупреждений компилятора. Ну или они про них не знают. Я не берусь ответить на вопрос, какое из этих двух предположений хуже.

Неиспользуемые функции (особенно радует срабатывание такого предупреждения в тестах):

../auto_tests/dht_test.c:351:12: warning: unused function 'test_addto_lists_ipv4' [-Wunused-function] START_TEST(test_addto_lists_ipv4) ^ ../auto_tests/dht_test.c:360:12: warning: unused function 'test_addto_lists_ipv6' [-Wunused-function] START_TEST(test_addto_lists_ipv6) ^ ../toxcore/TCP_server.c:1026:13: warning: unused function 'do_TCP_accept_new' [-Wunused-function] static void do_TCP_accept_new(TCP_Server *TCP_server) ^ ../toxcore/TCP_server.c:1110:13: warning: unused function 'do_TCP_incomming' [-Wunused-function] static void do_TCP_incomming(TCP_Server *TCP_server) ^ ../toxcore/TCP_server.c:1119:13: warning: unused function 'do_TCP_unconfirmed' [-Wunused-function] static void do_TCP_unconfirmed(TCP_Server *TCP_server) ^ 
../toxcore/Messenger.c:2040:28: warning: comparison of constant 256 with expression of type 'uint8_t' (aka 'unsigned char') is always false [-Wtautological-constant-out-of-range-compare] if (filenumber >= MAX_CONCURRENT_FILE_PIPES) ~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ ../toxcore/Messenger.c:2095:28: warning: comparison of constant 256 with expression of type 'uint8_t' (aka 'unsigned char') is always false [-Wtautological-constant-out-of-range-compare] if (filenumber >= MAX_CONCURRENT_FILE_PIPES) ~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ ../toxcore/Messenger.c:2110:28: warning: comparison of constant 256 with expression of type 'uint8_t' (aka 'unsigned char') is always false [-Wtautological-constant-out-of-range-compare] if (filenumber >= MAX_CONCURRENT_FILE_PIPES) ~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ 
../auto_tests/TCP_test.c:205:24: warning: unsequenced modification and access to 'len' [-Wunsequenced] ck_assert_msg((len = recv(con->sock, data, length, 0)) == length, "wrong len %i\n", len); ^ ~~~ /usr/include/check.h:273:18: note: expanded from macro 'ck_assert_msg' _ck_assert_msg(expr, __FILE__, __LINE__,\ ^ 

И еще несколько десятков разных варнингов про неиспользуемые переменные, сравнение знакового и беззнакового и проч.

Мои выводы

Цитата из репозитория:

We want Tox to be as simple as possible while remaining as secure as possible.

Если я, человек, несведущий в криптографии, смог найти такие ужасы за день, сколько сможет найти профессионал, который будет целенаправленно рыть в течение месяца?

Этот проект представляет большую опасность для пользователей, которые полагаются на защищенность Tox. Когда-нибудь разработчики не глядя примут код, который помножит вашу приватность на ноль.

Как быть?

Можете присоединиться к нашему проекту 2tox, который мы потихоньку пилим с Halt на замену toxcore.

2tox оказался мертворожденным. Решили переписать на Rust’е: tox-rs. Уже есть рабочая нода, пишем прототип клиентского ядра.

  • свобода слова в интернете
  • уязвимости в tox
  • libsodium
  • за вами уже выехали

Безопасная и конфиденциальная связь – реально ли это?

Уже никто не скрывает, что большая часть мессенджеров и приложений для звонков по типу Skype не применяют действительно надежные системы шифрования. Например, в США определили, что сервис Zoom обманывал собственных пользователей, заявляя о надежной защите, которой в реальности не было. Что же делать, чтобы обеспечить собственную конфиденциальность?

Если не Skype, то что?

Альтернатива популярным мессенджерам и видеосервисам – непопулярное и малоизвестное приложение для конфиденциального общения – qTox. Программа работает на основе протокола Tox для децентрализированной P2P на базе разношерстного шифрования. При помощи данного сервиса можно не только открывать чаты, но и выполнять аудио, видеозвонки.

Если не Skype, то что?

Чтобы связаться с другим человеком не нужна регистрация или подключение к общедоступному серверу – достаточно выслать свой личный идентификатор, позволяющий установить связь напрямую между устройствами пользователей.

Благодаря открытому исходному коду программа постоянно дорабатывается и может быть использована на всех наиболее известных операционных системах: Windows, Android, Linux, FreeBSD, macOS.

Протокол Tox

Tox – это относительной новый протокол, работа над которым ведется с середины 2013 года. Он помогает пользователям обмениваться сообщениями, аудио и видео материалами. Tox стал безопасным аналогом Skype и других подобных сервисов.

Например, тот же Skype с 2011 года находится под четким контролем спецслужб разных государств. Tox предлагает пользователю все те же функции, но без рекламы и угрозы утечки личной информации.

О сервисе qTox

qTox – это один из клиентов, работающих на основе протокола Tox. Программа разработана на языке С++ с применением фреймфорка Qt 5. Наиболее актуальная версия на данный момент – 1.2. С процессом установки клиента справиться любой пользователь (он аналогичен и в Ubuntu и в Debian):

  1. Нужно добавить в файл sources.lis, который находится по пути /etc/apt/ в директиве Tox, ключ к программе и установке Tox через панель пакетов APT.
  2. Потребуется заменить $CODENAME на release – это правило актуально и для Ubuntu и для Debian.

Размер сообщений в чат клиента – до 1 372 байт. Поддерживается видео и аудиосвязь, фильтрация шума и эха от сигнала (пригодится, если пользователь работает со встроенным микрофоном и колонками от компьютера). Есть эмотиконы и прокси – все аналогично Skype.

Основное преимущество qTox на фоне других клиентов – высокая скорость связи. Его можно назвать самым быстрым приложением для работы с протоколом Tox. Внешний вид qTox похож на интерфейс другого клиента для этого же протокола – uTox. Единственное, приложение выглядит более проработанным и комфортным для пользователя. Интерфейс похож на Skype, но без рекламы. Пользоваться им легко. Настроек немного, они логичны и они должны быть интуитивно понятны каждому.

О сервисе qTox

«Вылеты» в qTox случаются реже, чем в других клиентах. Обновления «прилетают» каждый день, иногда и в выходные. Единственное – сигнал аудио и видео в том же uTox передается лучше, но в qTox выше стабильность. Пользователи отмечают, что ожидают в новых версиях функцию смены шрифта, используемого в поле для ввода текста. Не будет лишней и возможность корректировать статус через контекстное меню иконки приложения в системной панели.

Интересно! Все клиенты, предназначенные для работы с протоколом Tox, базируются на общей папке аккаунта, в которой и хранятся их настройки. Однако, контакт, добавленный в uTox, никак не будет показываться в qTox. Его придется добавлять в список заново. Можно допустить, что этот нюанс вызван тем, что файлы настроек qTox отличаются от других клиентов.

По сути, это полноценное приложение для работы с протоколом Tox. Его на самом деле можно назвать лучшим из клиентов, доступных на сегодняшний день.

Выводы

Если бы корпорация Microsoft не выкупила Skype, сделав его более коммерческим и менее безопасным, то протокол Tox вряд ли был бы разработан. Самое приятно в нем – это полноценная конфиденциальность связи. Этим сейчас не может отличиться ни один из популярных мессенджеров.

Выводы

Клиенты, предназначенные для работы с протоколом Tox, (не только qTox, но и другие) активно обновляются и дорабатываются, улучшая функционал. Логично, что на данный момент в программе много недостатков, так как она была разработана совсем недавно, но базовые функции мессенджера работают без каких-либо претензий.

Инсталлирование любого официального клиента отличается простотой – достаточно набрать в консоли несколько простых команд. Можно предположить, что когда Tox станет действительно стабильным — этот протокол и некоторые его приложения станут частью основных Linux- дистрибутивов. На данный момент qTox считается лучшим пользовательским клиентом – он стабилен, реже обваливается и отличается красивым интерфейсом.

Наиболее существенное достоинство протокола Tox – это невозможность какого-либо контроля со стороны каких-либо компаний. На данный момент никто не способен установить монополию. Это хорошо, так как помогает сгладить недостатки системы. Анонимность и безопасность данных – это то, чего очень не хватает современному интернету.

Мгновенные сообщения, видеоконференции и многое другое

Всегда под рукой.
Легкий способ всегда иметь возможность зашифрованной переписки.

Звонки

Оставайтесь на связи.
Совершайте бесплатные и безопасные звонки с qTox на qTox.

Видео

Лучше один раз увидеть.
Общайтесь лицом к лицу при помощи безопасных видеозвонков.

Безопасность

qTox серьезно относится к вашей безопасности.
С использованием высококлассного шифрования , вы можете быть уверены, что ваши сообщения прочтут только те, кому они адресованы.

Удобство

В отличие от других безопасных программ для общения, Вам не нужно быть специалистом, чтобы использовать qTox — он уже «из коробки» предоставляет удобный интерфейс, позволяющий вам сосредоточиться на разговорах.

Свобода

qTox и бесплатен для пользования, и свободен для изменений. Вы можете совершенно свободно использовать и модифицировать qTox. Более того, qTox никогда не станет донимать вас рекламой или требовать плату за функционал .

Ссылки для разработчиков

Начните свой проект и свяжитесь с нами на GitHub , или в чате IRC!

qTox — отличный клиент для обмена мгновенными сообщениями, ориентированный на конфиденциальность.

Настоящее время использование клиентов обмена мгновенными сообщениями стало довольно популярным и это в значительной степени в смартфонах, даже некоторые из наиболее важных приложений для обмена сообщениями имеют свою версию для операционных систем настольных компьютеров.

Все это тоже стало точкой атаки для получения информации. актуально для хакеров, До этого также появились некоторые приложения для обмена мгновенными сообщениями, ориентированные на конфиденциальность.

Поэтому Сегодня мы поговорим о qTox. Это полностью клиент обмена мгновенными сообщениями p2p, он поддерживает текст, видео и имеет множество функций безопасности и конфиденциальности.

Протокол Tox имеет открытый исходный код, и проект поощряет разработчиков создавать собственные сторонние приложения AppImage. использовать чат. Из всех клиентов qTox — один из самых популярных.

Tox — это децентрализованная сквозная коммуникация. Для хранилища сообщений пользователя вообще нет центральных серверов.

При использовании Tox на устройстве вам необходимо создать профиль. Другими словами, этот профиль идентифицирует устройство, а не его самого.

Таким образом, вам нужно загрузить и установить клиент Tox на свой компьютер (или qTox UTOX), на свой телефон (или Antox Antidote), а затем создать профиль, и вы сможете общаться со своими друзьями и семьей.

Технически говоря, Tox — это просто основная библиотека, которая предоставляет протокол и API Tox. Есть несколько реализаций Tox. Вот список реализаций для разных платформ.

Linux: qTox, UTOX

Mac OS X: qTox, UTOX.

Windows: qTox, UTOX

Андроид: Антокс

iOS: противоядие

Тем не менее, мы поговорим о том, как установить qTox в наших системах.

Как установить qTox в Linux?

Чтобы иметь возможность установить eЭтот клиент обмена мгновенными сообщениями в нашей системе Необходимо следовать инструкциям, которые мы предоставляем в соответствии с используемым вами дистрибутивом Linux.

Si являются пользователями Debian, Ubuntu, Linux Mint или производных от них дистрибутивов, необходимо установить некоторые зависимости перед компиляцией приложения в системе.

qtox

Мы должны открыть терминал и выполнить в нем следующую команду:

sudo apt-get install build-essential cmake libavcodec-dev libavdevice-dev libavfilter-dev libavutil-dev libexif-dev libgdk-pixbuf2.0-dev libglib2.0-dev libgtk2.0-dev libkdeui5 libopenal-dev libopus-dev libqrencode-dev libqt5opengl5-dev libqt5svg5-dev libsodium-dev libsqlcipher-dev libswresample-dev libswscale-dev libvpx-dev libxss-dev qrencode qt5-default qttools5-dev-tools qttools5-dev git

В то время как для Те, кто являются пользователями Fedora и производных, должны установить эти зависимости:

sudo dnf install autoconf automake check check-devel ffmpeg-devel gtk2-devel kf5-sonnet libexif-devel libsodium-devel libtool libvpx-devel libXScrnSaver-devel openal-soft-devel openssl-devel opus-devel qrencode-devel qt5-linguist qt5-qtsvg qt5-qtsvg-devel qt-creator qt-devel qt-doc qtsingleapplication sqlcipher sqlcipher-devel git

Для тех кто Пользователи openSUSE должны установить эти зависимости:

sudo zypper install libexif-devel libffmpeg-devel libopus-devel libQt5Concurrent-devel libqt5-linguist libQt5Network-devel libQt5OpenGL-devel libqt5-qtbase-common-devel libqt5-qtsvg-devel libQt5Xml-devel libsodium-devel libvpx-devel libXScrnSaver-devel openal-soft-devel patterns-openSUSE-devel_basis qrencode-devel sqlcipher-devel sonnet-devel git

Сделал это мы можем приступить к компиляции клиента qTox в нашей системе.

Прежде чем перейти к этому, для пользователей Arch Linux, Manjaro, Antergos или любые производные от Arch Linux, мы можем установить клиент qTox из репозиториев AUR.

Для этого вам нужно только установить помощника, вы можете проконсультироваться следующая статья, где я рекомендую некоторые.

к установить qTox, нам нужно только ввести в терминал следующее:

aurman -S qtox-git

Уже объяснено для Arch Linux и производных, мы переходим к компиляции для других дистрибутивов Linux.

Сначала мы загрузим код с помощью:

git clone https://github.com/qTox/qTox.git

Сейчас мы переходим к входу в каталог и компилируем с:

cd qTox cmake . make -j$(nproc) sudo make install

Как только это будет сделано, мы можем начать использовать qTox в нашей системе.

Нам просто нужно запустить приложение qTox на рабочем столе. После завершения загрузки приложения откроется окно входа в систему. Если у вас уже есть учетная запись Tox, вы можете получить доступ к своей пользовательской информации. Либо нажмите кнопку «Новый профиль», чтобы иметь возможность создать нового пользователя.

Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

Полный путь к статье: Любители Linux » Общие » Программное обеспечение Linux » qTox — отличный клиент для обмена мгновенными сообщениями, ориентированный на конфиденциальность.

Будьте первым, чтобы комментировать

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *