Skype: скрытая угроза
Я не пользуюсь Skype, а пользуюсь Google Talk. И другим советую.
Skype: скрытая угроза
Skype представляет собой одну из самых популярных VoIP-программ, установленную на миллионах компьютеров по всему миру, владельцы которых даже и не подозревают, какая опасность им грозит. А опасность им грозит весьма серьезная: от утечки конфиденциальной информации до проникновения червей и “попадания” на трафик, не говоря уже о таких мелочах.
Skype, созданный отцами-основателями скандально известной Kazaa и унаследовавший от своей прародительницы самые худшие ее черты, работает по принципу самоорганизующейся распределенной пиринговой сети (distributed self-organized peer-to-peer network, P2P). Skype – это чёрный ящик с многоуровневой системой шифрования, напичканного антиотладочными приёмами, считывающий с компьютера конфиденциальную информацию и передающий её в сеть по закрытому протоколу. Последний обходит брандмауэры и сурово маскирует свой трафик, препятствуя его блокированию. Всё это превращает Skype в идеального переносчика вирусов и червей, создающих свои собственные распределенные сети внутри Skype-сети. К тому же, Skype довольно бесцеремонно обращается с ресурсами твоего компьютера, используя его для поддержания связи между остальными узлами Skype-сети, занимая процессор и генерируя мощный поток трафика, так что кажущаяся бесплатность звонков весьма условна.
Skype активно изучается в хакерских лабораториях и security-организациях по всему миру, и большинство исследователей единодушно сходятся во мнении, что Skype – это дьявольски хитрая программа, написанная в стиле Black Magic. Skype не брезгует грязными трюками, создающими огромные проблемы, о которых я и собираюсь рассказать.
Анализ исполняемого файла Skype
Исполняемый файл Skype-клиента представляет собой настоящий шедевр хакерского искусства, вобравший в себя множество интересных и достаточно могучих защитных механизмов. Двоичный файл полностью зашифрован и динамически расшифровывается по мере загрузки в память. Причем сброс дампа затруднен тем обстоятельством, что стартовый код после выполнения очищается, в результате чего мы получаем exe, который не запускается. API-функции подключаются уже в процессе распаковки. Проверка целостности кода выполняется из разных мест, поэтому поиск защитных процедур представляет собой весьма нетривиальную задачу. Тем более что они основаны на криптографических RSA-сигнатурах и снабжены полиморфными генераторами, которые в случайном порядке переставляют инструкции ADD, XOR, SUB и др. А вот про отладчик следует сказать отдельно. Skype обнаруживает программные точки останова, а для предотвращения пошаговой трассировки Skype осуществляет замеры времени выполнения определенных участков кода. Когда исполняемый файл распакован и все проверки пройдены, защита вычисляет контрольную сумму и преобразует ее в указатель, по которому передается управление, пробуждающее Skype. Skype очень следит за своей целостью, поэтому попытка исправления jnz на jmp short работает только до первого входящего звонка, после которого Skype падает и обратно уже не поднимается.
На атомарном уровне структура Skype-сети состоит из обычных узлов (normal node), обозначаемых аббревиатурой SC (Skype Client), и super-узлов (super node), которым соответствует аббревиатура SN. Любой узел, который имеет публичный IP-адрес (тот, который маршрутизируется в интернет) и обладает достаточно широким каналом, автоматически становится super-узлом и гонит через себя трафик обычных узлов, помогая им преодолеть защиты типа брандмауэров или трансляторов сетевых адресов (NAT) и распределяя нагрузку между хостами. В этом и состоит суть самоорганизующейся распределенной децентрализованной пиринговой сети, единственным централизованным элементом которой является Skype-login-сервер, отвечающий за процедуру авторизации Skype-клиентов и гарантирующий уникальность позывных для всей распределенной сети.
Важно подчеркнуть, что связь между узлами осуществляется не напрямую, а через цепочку super-узлов. Серверов в Skype-сети нет. Любой узел с установленным Skype-клиентом является сервером, которым он автоматически становится при наличии достаточных системных ресурсов (объема оперативной памяти, быстродействия процессора и пропускной способности сетевого канала). Каждый узел Skype-сети хранит перечень IP-адресов и портов известных ему super-узлов в динамически обновляемых кэш-таблицах (Host Cache Tables, HC-tables).
Как Skype обходит брандмауэры
Протокол обмена между Skype-клиентами недокументирован. Сразу же после своего запуска Skype-клиент открывает TCP- и UDP-порты. Их номера случайным образом задаются при инсталляции и могут быть в любой момент изменены, что затрудняет блокирование Skype-трафика на брандмауэре. Ситуация осложняется тем, что Skype шифрует трафик, активно используя продвинутые технологии обфускации, препятствующие выделению постоянных сигнатур в полях заголовков. Алгоритмы шифрования меняются от версии к версии. Skype-клиенты крайне обходятся с брандмауэрами и трансляторами сетевых адресов, просачиваясь сквозь них через хорошо известные протоколы STUN и TURN.
Администраторы закрывают UDP-трафик (тем более что большинству нормальных программ он не нужен), но Skype автоматически переключается на TCP, “отрубить” который администратор не может. Единственный выход — обрубить прямой доступ в интернет (proxy-сервер), однако даже такие меры не решат проблемы, поскольку Skype просто читает конфигурацию браузера и воспользуется proxy-сервером.
Разработчики Skype говорят администраторам, что заблокировать Skype-трафика не получится. И действительно, распознать Skype-трафик очень сложно, а заблокировать его можно только по содержимому, которое зашифровано и не содержит никаких предсказуемых последовательностей. Таким образом, чтобы заблокировать UDP-трафик, генерируемый Skype, достаточно добавить в брандмауэр следующее правило: iptables -I FORWARD -p udp -m length –length 39 -m u32 –u32 ’27&0 x8f=7′ –u32 ’31=0 x527c4833 ‘ -j DROP
К сожалению, блокировка UDP-трафика ничего не решает, поскольку Skype автоматом переходит на TCP. Заголовки входящих IP-пакетов, относящиеся к протоколу обмена SSL-ключами (SSL key-exchange packets), содержат нехарактерный для «нормальных» приложений идентификатор 170301h, возвращаемый в ответ на запрос с идентификатором 160301h (стандартный SSL версии 3.1).
Как “зомбировать” Skype
Дешевизна голосовых разговоров вызвала рост популярности Skype, сеть которого составила свыше 100 миллионов зарегистрированных пользователей. Совершают Skype-звонки в день свыше 700 тысяч человек. Поэтому уже давно догадались использовать Skype для распространения вирусов и организации распределенных атак, которым очень сложно воспрепятствовать – Skype-трафик надежно зашифрован и не может быть проанализирован антивирусами, заблокирован брандмауэрами или распознан системами обнаружения вторжения. Другая опасная «вкусность» Skype заключается в его API. Создатели Skype предусмотрели возможность интеграции любой прикладной программы со Skype-клиентом. Локальный антивирус распознать неизвестный вирус не в состоянии даже при наличии антивирусных баз. Созданы хакерские инструменты, позволяющие взаимодействовать со Skype-узлами в обход стандартных Skype-клиентов, и даже без сервера регистрации. Существует принципиальная возможность создания своих собственных сетей на базе распределенной Skype-сети, главная ошибка разработчиков которой заключается в том, что Skype-узлы безоговорочно доверяют друг другу.
Заключение
Что же все-таки скрывают создатели Skype в своём коде? Почему они закрывают исходные тексты и используют закрытый протокол, вызывая тем самым недоверие специалистов по безопасности? Для чего бесплатной программе столь навороченная защита, снижающая производительность и потребляющая большое количество памяти? Почему вообще Skype-клиент реализован как чёрный ящик?
Источник (там же есть схемы и таблицы): www.xakep.ru/post/38543/default.asp?print=true