В связи с прекращением развития такого замечательного jabber клиента как Pandion (последняя доступная версия 2.6.114 вышла 10 апреля 2013 года), было решено выяснить, какая толковая альтернатива существует для связки jabber сервера Openfire и клиента Pandion, которые использовались в моём случае для обмена сообщениями внутри небольшой организации.
Клиент в лице Pandion радовал своими возможностями и удобством использования, но в последних версиях он лишился обмена файлами, а количество обнаруженных багов начинало давать о себе знать: высокая нагрузка на процессор при смене темы в ОС или удалённом подключении к ПК с использованием ПО для удалённого управления, частые вылеты со ссылкой на библиотеку msxml6.dll, проблемы в работе некоторого функционала из-за отсутствия поддержки движка новых версий Internet Explorer, ситуации с неполучением сообщений от других пользователей и некоторые другие неприятные мелочи. В принципе достаточно было бы установить новую версию OpenFire и начать использовать альтернативный клиент, например, Miranda, что в дальнейшем и было сделано, но до этого меня заинтересовал сетевой чат MyChat от украинских разработчиков из NetworkSoftwareSolutions.
В процессе углубленного знакомства с MyChat были обнаружены некоторые уязвимости. Первая уязвимость заключается в особенностях авторизации по протоколу FTP на сервере. В клиенте MyChat протокол FTP используется для получения и передачи данных напрямую между клиентами, а в сервере – для передачи данных между клиентами только через сервер (в случае включения соответствующей настройки), организации общего доступа к персонально размещённым данным и публичного доступа. Для сохранения принимаемых данных по протоколу FTP используются папки, которые по умолчанию размещаются в общем профиле в случае сервера и в персональном профиле в случае клиента.
В сервере MyChat есть несколько отличий в авторизации по протоколу FTP, и нельзя будет не описать каждый из них. У каждого пользователя MyChat есть уникальный идентификатор UIN, который имеет числовое значение и автоматически присваивается при создании учётной записи, при этом нумерация идёт по порядку, начиная с 1. Согласно документации MyChat в качестве имени пользователя и пароля для авторизации по протоколу FTP используются UIN и пароль, которые используются для авторизации клиента по внутреннему протоколу (он хорошо документирован и доступен для всеобщего обозрения). Для взаимодействия с сервером MyChat по протоколу FTP можно использовать любое поддерживающее его приложение, при этом необходимо включить в настройках пассивный режим обмена, указать IP адрес сервера MyChat, а также порт 20000 (по умолчанию), числовое значение UIN в качестве имени пользователя и пароль. После подключения к серверу с такими параметрами авторизации станет доступна в режиме чтения и записи персональная папка. Помимо такого доступа разработчиками предусмотрен доступ любому желающему в персональную папку на сервере в режиме чтения. Для этого в качестве пароля надо указать public. В MyChat также есть возможность интеграции с Active Directory, которая позволяет импортировать учётные записи доменных пользователей и использовать их для авторизации. То, как используются доменные учётные записи для авторизации, например, посредством FTP протокола нигде не указано. При помощи же сетевого анализатора протоколов Wireshark удалось выяснить, что для авторизации используется пара из присвоенного при импорте для доменного пользователя UIN и пароля, состоящего из имени пользователя для входа и строки *DomainUser* (например, если имя пользователя user1, то пароль для него будет user1*DomainUser*). Таким образом, использование доменных учётных записей в MyChat может привести к несанкционированному удалению или созданию данных на сервере. Разработчики были уведомлены об уязвимости 27.07.2014, но на текущий момент (здесь и далее – это 04.04.2016 при последней доступной версии MyChat 5.18.0 от 23.03.2016) уязвимость не устранена. Все три описанных способа авторизации по протоколу FTP на сервере также могут быть использованы в одной из далее описанных уязвимостей.
Второй обнаруженной уязвимостью является возможность получения доступа в полном режиме к папке, в которую были сохранены файлы, полученные от другого пользователя. Уязвимость начинает действовать с момента, когда один из пользователей получит хотя бы один файл от другого пользователя, и перестаёт действовать после перезапуска клиента. После того, как уязвимость начинает действовать, чтобы ею воспользоваться, достаточно подключиться по протоколу FTP в пассивном режиме обмена на порт 10000 (по умолчанию) к клиенту-жертве с использованием в качестве логина и пароля UIN отправителя. Таким образом, зная примерный диапазон идентификаторов UIN в MyChat и IP адрес клиента-жертвы, можно периодически пытаться авторизоваться, используя логин и пароль вида 2:2, 3:3 и т.д., пока не произойдёт срабатывание уязвимости. Разработчики были уведомлены об уязвимости 27.07.2014, но на текущий момент уязвимость не устранена.
Третья обнаруженная уязвимость в MyChat заключается в обходе ограничения на корневую папку при подключении по протоколу FTP. Для эксплуатации уязвимости необходимо в качестве удалённого каталога при подключении указать путь вида "/..". Это позволит попасть в папку на один уровень выше и, в зависимости от полномочий выполненной авторизации, получить доступ ко всем данным в режиме чтения или чтения и записи. Ограничением использования уязвимости является невозможность в сеансе подключения возврата из папок 2-го уровня вложенности. За счёт этой уязвимости появляется возможность доступа к логам и резервным копиям сервера MyChat, а также к данным, отправленным пользователям, которые в момент отправки не были подключены к серверу. Кроме этого становится доступной в корне папки FTP сервера специальная папка offline, внутри которой находятся папки, в качестве имён которых используется UIN пользователей. Для передачи данных пользователю достаточно в папке с его UIN создать папку с UIN отправителя и поместить в неё файлы. После запуска клиента, если хотя бы один из авторизованных пользователей отправит ему файл, будет предложено принять файлы как от этого, так и ото всех пользователей из папки offline. Таким образом, пользователи MyChat могут быть подвергнуты угрозе заражения. Для клиента же уязвимой папкой по умолчанию становиться папка со всеми принятыми от других пользователей файлами. Как удалось выяснить, уязвимость была вызвана использованием старой версии одного из компонентов, отвечающего за реализацию протокола FTP. Разработчики были уведомлены об уязвимости 27.07.2014, а 28.07.2014 уязвимость была ими устранена.
Четвёртая уязвимость в MyChat касается использования доменной авторизации. Суть уязвимости заключается в том, что, зная адрес сервера, имя домена и доменного пользователя, а также имея возможность подключения к серверу, злоумышленник может успешно авторизоваться с этими данными. Злоумышленнику достаточно внести значение строковых параметров «Domain», «IP», «Port», «ServerPassword» (пустое значение) в ветке реестра «HKEY_CURRENT_USER\Software\MyChat Client» (как ни странно, но это документированный способ включения режима доменной авторизации), создать в операционной системе локальную учётную запись, совпадающую по имени с доменной, а затем войти при помощи неё в систему. Теперь при запуске клиента MyChat произойдёт успешное подключение к серверу от имени доменного пользователя. Таким образом, можно сделать вывод о том, что в MyChat не используется безопасный вариант прозрачной авторизации NTLM или Kerberos. Разработчики были уведомлены об уязвимости 10.08.2014, но на текущий момент уязвимость не устранена.
Пятая уязвимость кроется в сервере MyChat и заключается в возможности вызова отказа в обслуживании, что связано с ошибкой в реализации получения от клиента команды-приветствия cs_hello используемого протокола. Уязвимая версия сервера MyChat позволяет получать от неавторизованного пользователя неограниченное количество команд cs_hello. Суть подверженности сервера MyChat к атаке типа «отказ в обслуживании» в данном случае заключается в том, что вновь полученная от клиента команда cs_hello увеличивает потребление памяти сервером. Сервер MyChat является 32-разрядным приложением, поэтому объём памяти, который может быть выделен для него операционной системой, составляет значение в пределах 1,8 Гбайт. Эксперимент показал, что для проведения успешной атаки на сервер требуется отправка пары миллионов команд cs_hello, что займёт очень много времени. Можно увеличить размер команды за счёт заполнения произвольными данными одного из передаваемых параметров в формате JSON, но такая атака будет также являться продолжительной по времени из-за большого размера передаваемых данных. Тем не менее, эта атака может быть ускорена в тысячи раз за счёт использования поддерживаемого протоколом обмена данными MyChat сжатия GZIP. Таким образом, строка с одинаковыми символами размером в 65 Кбайт может быть сжата до 100 байт. Многократно отправленная серверу команда cs_hello с такими данными приведёт к молниеносному потреблению оперативной памяти, достигнув предела которого, сервер не сможет выделить память для внутренних нужд, что в итоге скажется на его работоспособности. Разработчики были уведомлены об уязвимости 06.12.2014, а 08.12.2014 уязвимость была ими устранена.
Какой вывод можно сделать из этой статьи: не на все уязвимости разработчики реагируют своевременно, откладывая устранение некоторых из них в долгий ящик или просто игнорируя, а также не всегда отслеживают изменения в используемых компонентах, которые могут сыграть с их приложением злую шутку, но больше всего настораживает и расстраивает то, что многие из уязвимостей являются явным результатом нежелания или лени сделать реализацию того либо иного механизма безопасности действительно безопасным.
Клиент в лице Pandion радовал своими возможностями и удобством использования, но в последних версиях он лишился обмена файлами, а количество обнаруженных багов начинало давать о себе знать: высокая нагрузка на процессор при смене темы в ОС или удалённом подключении к ПК с использованием ПО для удалённого управления, частые вылеты со ссылкой на библиотеку msxml6.dll, проблемы в работе некоторого функционала из-за отсутствия поддержки движка новых версий Internet Explorer, ситуации с неполучением сообщений от других пользователей и некоторые другие неприятные мелочи. В принципе достаточно было бы установить новую версию OpenFire и начать использовать альтернативный клиент, например, Miranda, что в дальнейшем и было сделано, но до этого меня заинтересовал сетевой чат MyChat от украинских разработчиков из NetworkSoftwareSolutions.
В процессе углубленного знакомства с MyChat были обнаружены некоторые уязвимости. Первая уязвимость заключается в особенностях авторизации по протоколу FTP на сервере. В клиенте MyChat протокол FTP используется для получения и передачи данных напрямую между клиентами, а в сервере – для передачи данных между клиентами только через сервер (в случае включения соответствующей настройки), организации общего доступа к персонально размещённым данным и публичного доступа. Для сохранения принимаемых данных по протоколу FTP используются папки, которые по умолчанию размещаются в общем профиле в случае сервера и в персональном профиле в случае клиента.
В сервере MyChat есть несколько отличий в авторизации по протоколу FTP, и нельзя будет не описать каждый из них. У каждого пользователя MyChat есть уникальный идентификатор UIN, который имеет числовое значение и автоматически присваивается при создании учётной записи, при этом нумерация идёт по порядку, начиная с 1. Согласно документации MyChat в качестве имени пользователя и пароля для авторизации по протоколу FTP используются UIN и пароль, которые используются для авторизации клиента по внутреннему протоколу (он хорошо документирован и доступен для всеобщего обозрения). Для взаимодействия с сервером MyChat по протоколу FTP можно использовать любое поддерживающее его приложение, при этом необходимо включить в настройках пассивный режим обмена, указать IP адрес сервера MyChat, а также порт 20000 (по умолчанию), числовое значение UIN в качестве имени пользователя и пароль. После подключения к серверу с такими параметрами авторизации станет доступна в режиме чтения и записи персональная папка. Помимо такого доступа разработчиками предусмотрен доступ любому желающему в персональную папку на сервере в режиме чтения. Для этого в качестве пароля надо указать public. В MyChat также есть возможность интеграции с Active Directory, которая позволяет импортировать учётные записи доменных пользователей и использовать их для авторизации. То, как используются доменные учётные записи для авторизации, например, посредством FTP протокола нигде не указано. При помощи же сетевого анализатора протоколов Wireshark удалось выяснить, что для авторизации используется пара из присвоенного при импорте для доменного пользователя UIN и пароля, состоящего из имени пользователя для входа и строки *DomainUser* (например, если имя пользователя user1, то пароль для него будет user1*DomainUser*). Таким образом, использование доменных учётных записей в MyChat может привести к несанкционированному удалению или созданию данных на сервере. Разработчики были уведомлены об уязвимости 27.07.2014, но на текущий момент (здесь и далее – это 04.04.2016 при последней доступной версии MyChat 5.18.0 от 23.03.2016) уязвимость не устранена. Все три описанных способа авторизации по протоколу FTP на сервере также могут быть использованы в одной из далее описанных уязвимостей.
Второй обнаруженной уязвимостью является возможность получения доступа в полном режиме к папке, в которую были сохранены файлы, полученные от другого пользователя. Уязвимость начинает действовать с момента, когда один из пользователей получит хотя бы один файл от другого пользователя, и перестаёт действовать после перезапуска клиента. После того, как уязвимость начинает действовать, чтобы ею воспользоваться, достаточно подключиться по протоколу FTP в пассивном режиме обмена на порт 10000 (по умолчанию) к клиенту-жертве с использованием в качестве логина и пароля UIN отправителя. Таким образом, зная примерный диапазон идентификаторов UIN в MyChat и IP адрес клиента-жертвы, можно периодически пытаться авторизоваться, используя логин и пароль вида 2:2, 3:3 и т.д., пока не произойдёт срабатывание уязвимости. Разработчики были уведомлены об уязвимости 27.07.2014, но на текущий момент уязвимость не устранена.
Третья обнаруженная уязвимость в MyChat заключается в обходе ограничения на корневую папку при подключении по протоколу FTP. Для эксплуатации уязвимости необходимо в качестве удалённого каталога при подключении указать путь вида "/..". Это позволит попасть в папку на один уровень выше и, в зависимости от полномочий выполненной авторизации, получить доступ ко всем данным в режиме чтения или чтения и записи. Ограничением использования уязвимости является невозможность в сеансе подключения возврата из папок 2-го уровня вложенности. За счёт этой уязвимости появляется возможность доступа к логам и резервным копиям сервера MyChat, а также к данным, отправленным пользователям, которые в момент отправки не были подключены к серверу. Кроме этого становится доступной в корне папки FTP сервера специальная папка offline, внутри которой находятся папки, в качестве имён которых используется UIN пользователей. Для передачи данных пользователю достаточно в папке с его UIN создать папку с UIN отправителя и поместить в неё файлы. После запуска клиента, если хотя бы один из авторизованных пользователей отправит ему файл, будет предложено принять файлы как от этого, так и ото всех пользователей из папки offline. Таким образом, пользователи MyChat могут быть подвергнуты угрозе заражения. Для клиента же уязвимой папкой по умолчанию становиться папка со всеми принятыми от других пользователей файлами. Как удалось выяснить, уязвимость была вызвана использованием старой версии одного из компонентов, отвечающего за реализацию протокола FTP. Разработчики были уведомлены об уязвимости 27.07.2014, а 28.07.2014 уязвимость была ими устранена.
Четвёртая уязвимость в MyChat касается использования доменной авторизации. Суть уязвимости заключается в том, что, зная адрес сервера, имя домена и доменного пользователя, а также имея возможность подключения к серверу, злоумышленник может успешно авторизоваться с этими данными. Злоумышленнику достаточно внести значение строковых параметров «Domain», «IP», «Port», «ServerPassword» (пустое значение) в ветке реестра «HKEY_CURRENT_USER\Software\MyChat Client» (как ни странно, но это документированный способ включения режима доменной авторизации), создать в операционной системе локальную учётную запись, совпадающую по имени с доменной, а затем войти при помощи неё в систему. Теперь при запуске клиента MyChat произойдёт успешное подключение к серверу от имени доменного пользователя. Таким образом, можно сделать вывод о том, что в MyChat не используется безопасный вариант прозрачной авторизации NTLM или Kerberos. Разработчики были уведомлены об уязвимости 10.08.2014, но на текущий момент уязвимость не устранена.
Пятая уязвимость кроется в сервере MyChat и заключается в возможности вызова отказа в обслуживании, что связано с ошибкой в реализации получения от клиента команды-приветствия cs_hello используемого протокола. Уязвимая версия сервера MyChat позволяет получать от неавторизованного пользователя неограниченное количество команд cs_hello. Суть подверженности сервера MyChat к атаке типа «отказ в обслуживании» в данном случае заключается в том, что вновь полученная от клиента команда cs_hello увеличивает потребление памяти сервером. Сервер MyChat является 32-разрядным приложением, поэтому объём памяти, который может быть выделен для него операционной системой, составляет значение в пределах 1,8 Гбайт. Эксперимент показал, что для проведения успешной атаки на сервер требуется отправка пары миллионов команд cs_hello, что займёт очень много времени. Можно увеличить размер команды за счёт заполнения произвольными данными одного из передаваемых параметров в формате JSON, но такая атака будет также являться продолжительной по времени из-за большого размера передаваемых данных. Тем не менее, эта атака может быть ускорена в тысячи раз за счёт использования поддерживаемого протоколом обмена данными MyChat сжатия GZIP. Таким образом, строка с одинаковыми символами размером в 65 Кбайт может быть сжата до 100 байт. Многократно отправленная серверу команда cs_hello с такими данными приведёт к молниеносному потреблению оперативной памяти, достигнув предела которого, сервер не сможет выделить память для внутренних нужд, что в итоге скажется на его работоспособности. Разработчики были уведомлены об уязвимости 06.12.2014, а 08.12.2014 уязвимость была ими устранена.
Какой вывод можно сделать из этой статьи: не на все уязвимости разработчики реагируют своевременно, откладывая устранение некоторых из них в долгий ящик или просто игнорируя, а также не всегда отслеживают изменения в используемых компонентах, которые могут сыграть с их приложением злую шутку, но больше всего настораживает и расстраивает то, что многие из уязвимостей являются явным результатом нежелания или лени сделать реализацию того либо иного механизма безопасности действительно безопасным.
nikizan
Для корректного отображения групп в миранде при работе с опенфайр надо поправить jabber_iqid.cpp:
if (iqNode && pInfo->GetIqType() == JABBER_IQ_TYPE_RESULT) {
bPrivateStorageSupport = TRUE;
szGroupDelimeter = XPathFmt(iqNode, _T(«query[@xmlns='%s']/roster[@xmlns='%s']»), JABBER_FEAT_PRIVATE_STORAGE, JABBER_FEAT_NESTED_ROSTER_GROUPS);
if (szGroupDelimeter && !szGroupDelimeter[0])
szGroupDelimeter = NULL; // "" as roster delimeter is not supported :)
szGroupDelimeter = _T("::"); // ___ADD THIS LINE___
}