http://www.corporacia.ru/pages/page/show/2427.htm
Skype является одной из самых распространенных программ в мире, основанных на протоколе VoIP. Миллионы компьютеров оснащены этой системой, но большинство пользователей даже не предполагают, какую опасность содержит в себе Skype. В список угроз можно включить следующее: утечка конфиденциальной информации, проникновение "червей", попадание на трафик, отказ от работы с активным дебаггером SoftICE. Так, каким же образом всеми любимая программа Skype может навредить, и как это происходит?
К созданию Skype приложились те же люди, которые разработали первую программу для файлообмена KaZaA. К сожалению, Skype унаследовал худшие черты своего предшественника: VoIP-программа работает как самоорганизующаяся распределенная пиринговая сеть (P2P). Skype представляет собой эдакий "черный ящик", в котором есть многоуровневая система шифрования. Также система использует антиотладочные приемы исполняемого файла, что, в свою очередь, предоставляет возможность скачивания с компьютера конфиденциальной информации и передачи ее в сеть, используя закрытый протокол. Упомянутый протокол имеет возможность обходить межсетевые экраны, а также ловко маскирует свой трафик, что препятствует его блокированию. Все эти "супер-способности" Skype делают его отличным разносчиком вирусов, червей и дронов, которые основывают внутри сети Skype свои персональные распределенные сети. Вдобавок к этому, Skype достаточно нагло использует ресурсы узла пользователя, напрягая центральный процессор и формируя мощный поток трафика, который редко, а в особенности в России, бывает бесплатным. Получается, что звонки являются бесплатными весьма условно.
Программа Skype уже давно стала объектом исследований, и многие специалисты пришли к одному и тому же выводу: Skype – это очень хитрая программа, разработанная талантливыми людьми и соответствующая стилю Black Magic Art. Эта система не боится использования не совсем честных трюков, которые порождают разного рода угрозы.
Исполняемый файл Skype
Анализируя программу, специалисты поставили следующий диагноз: исполняемый файл Skype – это одно из лучших "творений" хакерского искусства. Он оснащен огромным количеством интересных, а также сильных защитных механизмов. Для того чтобы оказать противодействие им, необходимо: а) мощные инструментальные средства типа отладчиков, дизассемблеров, дамперов и т.д.; б) знания и навыки; в) много свободного времени.
Бинарный файл зашифрован от начала и до конца, а расшифровка его происходит динамически в процессе загрузки в память. При этом сбросить дамп практически невозможно из-за того, что стартовый код очищается, вследствие чего получается файл с расширением .exe, который невозможно запустить. В оригинальной таблице импорта нет никаких интересных деталей, а функции интерфейса программирования приложений подключаются уже в течение процесса распаковки. Целостность кода проверяется в разных местах в произвольном порядке (в большинстве случаев - при входящих звонках), поэтому процесс поиска защитных процедур составляет весьма незаурядную задачу. Вдобавок к этому они имеют в основе криптографические RSA-сигнатуры и оснащены полиморфными генераторами, которые переставляют инструкции ADD, SUB, XOR и др., таким образом, перемешивая их с "левыми" машинными командами.
Статический вызов функций, осуществляемый по жестко прописанному адресу, - явление довольно таки редкое, и вызов всех важных процедуры происходит по динамически вычисляемому указателю, который пропущен через программу запутывания кода - обфускатор. Из этого можно сделать вывод, что дизассемблер не сможет помочь, в бой идет отладчик.
Следует отметить, что Skype распознает SoftICE даже когда установлен IceExt, при этом не запускаясь. В этом случае можно воспользоваться другими инструментами подобного рода: The Rasta Ring 0 Debugger (Skype-клиент не может обнаружить этот отладчик, работающий на уровне ядра) или OllyDbg(отладчик прикладного уровня). Не стоит забывать о том, что Skype запросто может обнаружить программные точки останова (однобайтовая машинная инструкция с кодом операции CCh, которая записывается поверх отлаживаемого кода). Для устранения пошаговой трассировки Skype производит замеры времени выполнения определенных участков кода, требующих полноценные эмуляторы компьютера с интегрированным отладчиком (например, BOCHS).
Когда исполняемый файл "расчехлен", все проверки позади, защита вычисляет контрольную сумму, преобразуя ее в указатель, по которому передается управление для запуска Skype.
В связи с тем, что Skype "блюдет" свою целость, исправление jnz на jmp short действует только до первого входящего звонка, после чего Skype падает и вернуться обратно уже не может. Специально для таких хитроумных случаев разработали технику онлайн-патча, при которой программа исправляется именно в оперативной памяти, а после того, как проверка на наличие SoftICE успешно пройдена, происходит откат для того, чтобы не волновать процедуру проверки целости.
Структура Skype-сети
В структуре Skype-сети можно обнаружить: обычные узлы (SC – Skype Client) и супер-узлы (SN – Super Node). Узел, имеющий публичный IP-адрес и обладающий довольно широким каналом, автоматически переходит в разряд супер-узлов и служит для прогонки трафика узлов SC, содействуя им в преодолении защиты (например, преодоление межсетевых экранов или трансляторов сетевых адресов) и одинаково распределяя нагрузку между хостами. Эта самоорганизующаяся распределенная децентрализованная пиринговая сеть обладает централизованным элементом - Skype-login-сервером, который является ответственным за авторизацию Skype-клиентов и дает гарантию уникальности позывных для этой распределенной сети.
Связь между узлами происходит через цепочку супер-узлов. Серверов в широком смысле этого слова в Skype нет. Каждый узел – это потенциальный сервер, которым он автоматически становится, если имеются необходимые системные ресурсы (объем оперативной памяти, быстродействие процессора и др).
У каждого узла Skype-сети есть список IP-адресов и портов знакомых ему супер-узлов в виде динамически обновляемых кэш-таблицах, которые представляют собой простой XML-файл, хранящийся на диске в домашней директории пользователя в незашифрованном виде.
Как Skype борется с межсетевыми экранами
Протокол обмена между Skype-клиентами недокументирован, вследствие чего вся информация о нем получена благодаря дизассемблированию, анализу перехваченного сетевого трафика и т.п. Существует огромное количество версий Skype-клиентов, которые значительно различаются между собой, именно поэтому описание протокола может быть неточным.
При запуске Skype-клиента открываются TCP- и UDP-порты, номера которым присваиваются при установке случайным образом и могут измениться в любой момент через диалог конфигурации, а этот факт затрудняет блокирование Skype-трафика на межсетевом экране. Помимо этого, открываются порты 80 (HTTP) и 443, но они не составляют особую важность, поэтому их блокировка никак не отразится на работе программы.
Сложность ситуации заключается в том, что Skype шифрует трафик с помощью современных технологий запутывания кода, которые препятствуют отбору постоянных сигнатур в полях заголовках. Алгоритмы шифрования модифицируются от версии к версии, этот случай усложняется еще и тем, что в разных странах мира есть специальные версии с определенной длиной ключа или выбранными криптографическим алгоритмами, которые соответствуют законодательству. В целом механизм шифрования выглядит следующим образом:
Skype-клиенты очень осторожно относятся к брандмауэрам и трансляторам сетевых адресов, проникая сквозь них с помощью протоколов STUN и TURN. Это подтверждает, что юридически Skype действует вполне законно.
У протокола STUN, несмотря на его безупречность, есть слабые места. Он не работает в том случае, если есть брандмауэр, преграждающий путь во внешнюю сеть и режущий весь UDP, и если имеется симметричный транслятор сетевых адресов.
Если UDP закрыт, то брандмауэр невозможно открыть. А NAT – это обыкновенный симметричный транслятор, который требует совпадения целевого IP-адреса и порта транслируемого пакета с внешним IP-адресом и портом. Если в процессе отправки пакетов с одинаковыми исходными IP-адресами и портами в разные направления будет использоваться один и тот же узел, то NAT будет вынужден переводить их на другие порты. Следуя из этого, для того, чтобы отправить UDP-пакет внутреннему узлу, внешний узел первоначально должен принять запрос от внутреннего узла. Самостоятельно запустить соединение внешний узел не может, поскольку NAT не имеет понятия, на какой внутренний IP и порт нужно передавать появившийся из ниоткуда UDP-пакет.
Появившуюся проблему можно решить с помощью протокола TURN. Этот протокол повышает латентность и возможность потери большого количества UDP-пакетов, а это пагубно отражается на качестве и устойчивости связи.
В этом случае администраторы закрывают UDP-трафик. Skype, тем временем, автоматически подключается на новый TCP. Администратор, конечно, может закрыть все неиспользуемые порты, но не тут-то было, ведь таких портов нет. Соединяясь с удаленным узлом, операционная система присваивает клиенту любой свободный TCP/UDP-порт, который будет использоваться для получения пакетов. В случае если закрыть все порты, установить TCP/UDP-соединения окажется невозможным.
Выход из этой ситуации только один – отключить прямой доступ в Интернет и заставить всех пользователей заходить через proxy-сервер. Хотя и эти меры окажутся бесполезными: Skype "ознакомится" с конфигурацией браузера и будет использовать proxy-сервер как свой родной.
Блокирование трафика Skype
Разработчики Skype предупреждают администраторов, что любые попытки выявления и блокирования его трафика окажутся безуспешными, так как распознавание Skype-трафика очень сложный процесс, а его блокировка возможна только по зашифрованному и не содержащему никаких логичных последовательностей содержимому. Но, в связи с тем, что разработчики Skype пропустили некоторые моменты, есть и незашифрованная часть трафика. Анализатор трафика может выявить UDP-соединение, использующее открытый протокол с целью получения публичных IP-адресов супер-узлов, а RC4-поток дважды используется TCP-соединением, что предоставляет возможность расшифровать часть постоянных полей заголовков протокола Skype и вычислить 10 первых байт ключа путем расшифровки части постоянных полей заголовков Skype-протокола. К сожалению, на данный момент не существует полностью готового блокиратора Skype-трафика.
UDP-трафик намного проще распознаваем, и его легче заблокировать. Двухбайтовый идентификационный номер (ID) и тип пакета (payload) идут в начале каждого фрейма. В UDP-пакете есть 39-байтный NACK-пакет, который пропущен через программу, производящую обфускацию, и содержит в себе данные идентификатора пакета, номера функции (func), который пропущен через обфускатор, IP отправителя и IP получателя.
Из этого следует, что для блокировки UDP-трафика необходимо добавить в брандмауэр следующее правило:
Для распознавания и блокирования Skype-трафика подойдут и другие средства, но все они малоэффективны. Ведь если появляется реальный способ заблокировать трафик, разработчики Skype сразу же на это реагируют, и в новой версии трафик возвращается!
Вирусная опасность
Столь популярная программа Skype уже давно стала инструментом хакеров для распространения различных вирусов. Таким атакам очень сложно противостоять, ведь, как говорилось выше, Skype-трафик зашифрован, не анализируется антивирусами, не распознается системами обнаружения вторжения и не поддается блокировке брандмауэрами.
Может быть, Skype и хитрая программа, но все равно при ее разработке были допущены ошибки, которыми могут воспользоваться хакеры для организации вирусных атак, как это было сделано в 2005 году. Хакер мог овладеть любым Skype-узлом благодаря возможности передачи управления на shell-код. Тогда эту проблему решили, но, как известно, беда не приходит одна: если появилась одна ошибка, значит, будет другая, третья и т.д.
Например, открытость API представляет собой некоторую опасность. Skype может интегрироваться с любой другой прикладной программой, при этом появляется предупреждение об использовании Skype API. Большинство пользователей, не обращая внимания на это предупреждения, разрешают использование, а, собственно, что они этим добиваются?
Для использования Skype API, вирусная программа должна быть на компьютере. Ранее для этого использовалась электронная почта. Сейчас сам Skype может рассылать вирусы. Единственным средством защиты в этой борьбе может стать локальный антивирус, но и он не всегда сможет помочь: даже свежая антивирусная программа не сможет распознать неизвестную зловредную атаку.
Необходимо отметить, что протокол Skype уже расшифровывается, а хакерские инструменты, которые могут взаимодействовать со Skype-узлам без стандартных Skype-клиентов и сервера регистрации, уже создаются. Несмотря на то, что сейчас происходит просто сбор адресов супер-узлов, все это представляет собой огромную опасность создания собственных сетей на базе Skype. Ведь разработчики совершили непоправимую ошибку: Skype-узлы полностью доверяют друг другу, а безопасность состоит только из закрытости протокола.
Одна из самых популярных программ Skype ставит перед специалистами одинакового рода вопросы: почему бесплатная программа зажимает исходные тексты и использует закрытый протокол? Почему у нее столь крепкая защита, которая наносит урон производительность и съедает огромное количество памяти? Все эти вопросы, к сожалению, являются риторическими, но ведут к одной и той же мысли: все это непросто так!