[Из песочницы] Крик души — «взлом» инфраструктуры LiteManager

Предисловие


Данный текст это, в первую очередь, предостережение для системных администраторов и простых пользователей. Внезапно для меня, выяснилось, что относительно известная программа для удаленного администрирования «LiteManager» (далее LM) сама по себе, без модификаций и каких-либо изменений, представляет собой backdoor для любого компьютера, где она установлена. То есть, если на ПК установлен LM и используется соединение по ID (без IP адреса), то, с очень высокой, почти 100%, долей вероятности, к этому ПК можно получить неправомерный удаленный доступ совершенно постороннему пользователю, приложив при этом минимум усилий, не обладая при этом какими-то специальными навыками взлома. Описание технологии «взлома» и работающий пример с исходным кодом ниже.


Я программист в небольшой компании, наш софт не связан с сетевыми технологиями, однако, иногда сотрудникам нужен удаленный доступ к рабочим ПК. По разным причинам, выбор пал на LM, который бесплатен для 30 сотрудников. Помимо прямых соединений в локальной сети (а-ля Radmin), LM позволяет работать и без указания IP-адреса удаленного компьютера, по ID, через сервера Компании (ха-ха) или пользовательские сервера, которые может развернуть любой желающий, при условии наличия внешнего IP адреса (на первый взгляд, похоже на TeamViewer, но это только на первый).


Как устроена сеть NOIP серверов LM


И вот мы обнаружили, что периодически, к некоторым машинам, осуществляется удаленный доступ по LM каким-то неустановленным лицом. Те, у кого были пароли доступа, физически не могли в этот момент соединиться удаленно. В общем, ситуация повторилась не раз и не два, даже после смены паролей. LM удалили со всех машин и я приступил к изучению ситуации, начав, конечно же, с того, как устроено подключения по ID. LM позаимствовали название у известной международной компании и назвали свой модуль LM NOIP сервер (еще называют «роутер»).


Соединение по ID, в программах такого рода, позволяет осуществлять связь, даже если удаленный (и/или локальный) компьютер находится за NAT. Вы указываете ID и пароль удаленного компьютера, жмете OK и получаете полный контроль над машиной. При этом, и компьютер администратора (далее Viewer) и удаленный ПК (далее Server, да, в терминологии LM именно так, не путайте с LM NOIP сервером, т.е. роутером) используют только исходящие соединения до роутера.


И вот здесь начинается самое интересное. Ниже описание с официального сайта.


85ee2e44b1bb418aa4cc5d2b7f9ee6e3.png

С официального сайта

Уловили суть? Чтобы использовать личный NOIP роутер и бесплатную версию, нужно открыть этот роутер для всех. Казалось бы, что в этом плохого? Для ответа на этот вопрос, разберемся с общей схемой NOIP роутеров LM.


У них есть один, так называемый, «Главный сервер», который координирует остальные открытые роутеры, через которые и гонит весь трафик, в т.ч. и коммерческих пользователей. Это отслеживается любой программой мониторинга TCP соединений — сначала запрос к главному серверу, потом — работа через случайный (или не случайный, в зависимости от настроек).


5c914632839b429198a7e610966aab42.png

Схема серверов LM

Цимес в том, что для работы по ID не обязательно развертывать личный NOIP сервер, мы, кстати, свой сервер не устанавливали. Все работает «из коробки» за счет наличия уже имеющихся бесплатных открытых NOIP роутеров, коих уже несколько десятков, их список доступен прямо из Viewer. Программа сама выбирает какой-то сервер (он может быть каждый раз разный) и трафик идет через него. Таким образом, очевидно, Компания решила сотворить некое подобие торрент-треккера, сэкономив на трафике и серверах.


Глобальная уязвимость


Но, как показала практика, эта идея красива лишь в виде идеи. По факту, через совершенно случайные сервера, принадлежащие случайным людям, происходит проксирование трафика, включая и пароли доступа к удаленным ПК, конечно же, а не новую серию «Звездных войн», как в случае с торрентом.


Да, естественно, трафик зашифрован.


afbde380a3a04ddaa31a4dbd3b2b420d.png

С официального сайта

RSA 2048, AES 256, все дела. Шифруется только канал Server <=> Viewer, хотя, даже если бы шифровались каналы Serve <=> NOIP и Viewer <=> NOIP, это ничего бы не изменило кардинально. Однако, никакой проверки подлинности сервера в программе и в помине нет! Да если бы даже такая проверка была, из практики работы с RDP, могу ответственно заявить, что мало кто обращает внимание на предупреждение о том, что не удается проверить подлинность удаленного компьютера.


0b8728047676439a831aeb27e1475547.png

Предупреждение по версии RDP

Но, повторюсь, даже такой проверки там нет. И тут мне на ум приходит аббревиатура MITM. Атака «человек посередине». Практически сразу стало понятно, что поиски дыры завершены.


Даже после беглого изучения трафика Wireshark«ом и просмотра модулей программы под отладчиком, стало понятно, что это оно.


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


Но LM предоставляет, прошу прощения за еще один восклицательный знак, эту инфраструктуру любому желающему, при этом, как они любят повторять на своем сайте — бесплатно! Устанавливай открытый LM роутер и «слушай» весь трафик, который через него идет. Эдакая рыбалка ID и паролей доступа к удаленным машинам. Осталось только перехватить трафик и расшифровать его.


В итоге, у нас глобальная, архитектурная уязвимость всей инфраструктуры LM. Намерено это было сделано или ввиду отсутствия элементарных знаний в области сетевой безопасности?  Вопрос открытый.


Перехват трафика


К данной статье прилагается полностью работающий пример программы, с исходным кодом, которая умеет перехватывать практически все ID и пароли соединений, проходящих через LMNOIP роутер. Единственное требование — внешний IP адрес.


9c3bb682d48c406c9cb02cba64891e1a.png

LMSoulCry.exe

LMSoulCry нужно ставить в сети перед LM NOIP роутером.


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


Нам необходимо сделать так, чтобы входящие TCP соединения принимала наша LMSoulCry (она их, в свою очередь, будет перенаправлять на LM роутер). А исходящие соединения LM роутер будет отсылать самостоятельно прямиком на Глобальный сервер, без нашего участия.


Вот типовая схема настройки. У вашего ПК внешний IP адрес. Устанавливаем виртуальную машину для запуска на ней LM NOIP роутера. Подключаем ее через встроенный NAT адаптер (он есть в VMWare) к вашему основному ПК. Настраиваем интернет на виртуальной машине (зачастую, ничего настраивать не надо, все само работает). Запускаем на физическом компьютере, с внешним IP, LMSoulCry.exe и указываем в ней внутренний адрес виртуальной машины. Далее, включаем LMSoulCry и стартуем LM NOIP роутер (который на виртуальной машине). Случайные пользователи не заставят себя долго ждать.


Если внешний IP адрес не у вашего ПК, а у маршрутизатора, то нужно, всего-навсего, указать port-forwarding в настройках этого самого маршрутизатора.


Если нет внешнего IP адреса, то на практике ничего не проверишь.


Реализация MITM


Что касается реализации MITM, там все банально. LM использует MS Crypto API, это еще больше упрощает дело подмены ключей. Исходный код LMSoulCry щедро снабжен комментариями, переносить его в статью смысла не вижу.


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


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


Тут, что называется, надо не говорить, а показывать.


Крик души, лирика и выводы


После обнаружения данной уязвимости разработчикам LM было направлено письмо. На которое так и не был получен ответ.


4e75f9cd661e4033b95ef75a229d9e62.png

Ответственные

Возможно, вам ответят. Попытайте счастье.


У меня нет уверенности в том, что разработчики поделия под названием «LiteManager» понесут заслуженную ответственность за то, что подставляют тысячи ни о чем не подозревающих пользователей (как бесплатных, так и коммерческих, что важно), в том числе и меня, на протяжении уже семи лет. Ведь нигде не написано, что программа никак не защищена и, установив ее на ПК, вы гарантированно открываете в него дверь для любого желающего, замок-то не работает.


Зато у меня есть уверенность, что профессиональные хакеры уже очень и очень давно в курсе про данную «архитектурную особенность» этого ПО и давно ее используют в своих целях.


Да, во многих продуктах используется подобная схема для обхода NAT, но во всех этих программах, сервера (роутеры) принадлежат либо самой Компании, выпускающей продукт, либо располагаются на стороне заказчика и контролируются только им. То есть нет никакой третьей стороны, всегда понятно с кого спрашивать, в случае проблем.


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


Всем пользователям настоятельно рекомендую немедленно удалить LiteManager, антивирусам рекомендую пометить сам LM и его сайт, как вредоносные.


Всем, кого беда миновала, настоятельно рекомендую «keep your eyes open», а также помнить про высказывание о бесплатном сыре и мышеловке.


→ Github

Комментарии (1)

  • 2 мая 2017 в 12:21

    0

    Удалить или отключить noIP доступ к машинам без удаления LM не получится?
    Если вы не пользуетесь noIP — то к машинам на которых установлены клиенты все равно можно получить доступ без проверки логина и пароля?

© Habrahabr.ru