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
Бинарный файл зашифрован от начала и до конца, а расшифровка его происходит динамически в процессе загрузки в память. При этом сбросить дамп практически невозможно из-за того, что стартовый код очищается, вследствие чего получается файл с расширением .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 нет. Каждый узел – это потенциальный сервер, которым он автоматически становится, если имеются необходимые системные ресурсы (объем оперативной памяти, быстродействие процессора и др).
У каждого узла Skype-сети есть список IP-адресов и портов знакомых ему супер-узлов в виде динамически обновляемых кэш-таблицах, которые представляют собой простой XML-файл, хранящийся на диске в домашней директории пользователя в незашифрованном виде.
Как Skype борется с межсетевыми экранами
Протокол обмена между Skype-клиентами недокументирован, вследствие чего вся информация о нем получена благодаря дизассемблированию, анализу перехваченного сетевого трафика и т.п. Существует огромное количество версий Skype-клиентов, которые значительно различаются между собой, именно поэтому описание протокола может быть неточным.
Сложность ситуации заключается в том, что Skype шифрует трафик с помощью современных технологий запутывания кода, которые препятствуют отбору постоянных сигнатур в полях заголовках. Алгоритмы шифрования модифицируются от версии к версии, этот случай усложняется еще и тем, что в разных странах мира есть специальные версии с определенной длиной ключа или выбранными криптографическим алгоритмами, которые соответствуют законодательству. В целом механизм шифрования выглядит следующим образом:
Skype-клиенты очень осторожно относятся к брандмауэрам и трансляторам сетевых адресов, проникая сквозь них с помощью протоколов STUN и TURN. Это подтверждает, что юридически Skype действует вполне законно.
У протокола STUN, несмотря на его безупречность, есть слабые места. Он не работает в том случае, если есть брандмауэр, преграждающий путь во внешнюю сеть и режущий весь UDP, и если имеется симметричный транслятор сетевых адресов.
Если UDP закрыт, то брандмауэр невозможно открыть. А NAT – это обыкновенный симметричный транслятор, который требует совпадения целевого IP-адреса и порта транслируемого пакета с внешним IP-адресом и портом. Если в процессе отправки пакетов с одинаковыми исходными IP-адресами и портами в разные направления будет использоваться один и тот же узел, то NAT будет вынужден переводить их на другие порты. Следуя из этого, для того, чтобы отправить UDP-пакет внутреннему узлу, внешний узел первоначально должен принять запрос от внутреннего узла. Самостоятельно запустить соединение внешний узел не может, поскольку NAT не имеет понятия, на какой внутренний IP и порт нужно передавать появившийся из ниоткуда UDP-пакет.
Появившуюся проблему можно решить с помощью протокола TURN. Этот протокол повышает латентность и возможность потери большого количества 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-трафик зашифрован, не анализируется антивирусами, не распознается системами обнаружения вторжения и не поддается блокировке брандмауэрами.
Например, открытость API представляет собой некоторую опасность. Skype может интегрироваться с любой другой прикладной программой, при этом появляется предупреждение об использовании Skype API. Большинство пользователей, не обращая внимания на это предупреждения, разрешают использование, а, собственно, что они этим добиваются?
Для использования Skype API, вирусная программа должна быть на компьютере. Ранее для этого использовалась электронная почта. Сейчас сам Skype может рассылать вирусы. Единственным средством защиты в этой борьбе может стать локальный антивирус, но и он не всегда сможет помочь: даже свежая антивирусная программа не сможет распознать неизвестную зловредную атаку.
Одна из самых популярных программ Skype ставит перед специалистами одинакового рода вопросы: почему бесплатная программа зажимает исходные тексты и использует закрытый протокол? Почему у нее столь крепкая защита, которая наносит урон производительность и съедает огромное количество памяти? Все эти вопросы, к сожалению, являются риторическими, но ведут к одной и той же мысли: все это непросто так!