Защита от хакеров корпоративных сетей
Шрифт:
Теперь если изменить один или два файла из группы, то их атрибут «Архивный» будет установлен снова, как это показано на следующем примере:
C:\date>attrib
A HEX-EDIT.EXE C:\date\Hex-edit.exe
HEXEDIT.EXE C:\date\hexedit.exe
HEXEDI~1.GZ C:\date\hexedit-0_9_7_tar.gzИз примера видно, что у файла HEX-EDIT.EXE после его изменения опять установлен атрибут «Архивный». Хорошей возможностью команды attrib является переключатель /s, который позволяет обработать файл с указанными именами в текущей директории и во всех ее поддиректориях. После этого можно воспользоваться командой dir /a: a (вывод файлов с указанным атрибутом a — файлы для архивирования) для просмотра измененных файлов. Исследование контрольных сумм и кэш-значений
Одна из центральных проблем обеспечения безопасности заключается в определении
Алгоритмы подсчета контрольных сумм, например алгоритмы контроля с помощью циклического избыточного кода CRC (CRC – cyclical redundancy check), легко фальсифицируются, если злоумышленник или его программа знает используемый для контроля файлов алгоритм. Поэтому вместо контрольных сумм рекомендуется использовать криптографически стойкие алгоритмы кэширования. Важная особенность алгоритмов кэширования состоит в том, что возможность получения для двух различных кэшируемых файлов одной и той же величины кэш-значения ничтожно мала. Практически невозможно подменить один файл другим с той же самой величиной кэш-значения. Величина кэш-значения – это обычно 128-битовое или 160-битовое двоичное число, для хранения которого требуется значительно меньше места, чем для кэшируемого файла.
Алгоритмы кэширования позволяют определить модификацию файла, несмотря на все попытки скрыть это. Для каждого контролируемого файла вычисляется величина кэш-значения до и после некоторого события. Если эти две величины различаются, то файлы были изменены, несмотря на то что атрибуты файлов остались прежними.
Очевидно, этот метод имеет хорошие перспективы для обеспечения безопасности систем. Чтобы быть совершенно точным, автор должен частично отречься от своего утверждения, что при помощи алгоритмов кэширования можно определить изменения файлов, выполненные программами типа root kit. Они позволят определить изменения файлов, выполненные при помощи наивных программ этого типа. Действительно, хорошая программа типа root kit, предполагая о возможности кэширования, вынуждает операционную систему работать с разными файлами в разное время. Например, при чтении файла (кстати говоря, программой кэширования), измененная операционная система передает реальный исходный файл. При запросе на выполнение выполняется модифицированный файл.
Примеры подобной технологии можно найти на сайте rootkit.com в разделе «EXE Redirection» («Переадресация выполнимых файлов»). Этот сайт посвящен разработке открытых исходных текстов программ типа root kit для NT.Другие инструментальные средства
В конечном счете цель хакера заключается во внесении в программу изменений, которыми можно управлять. Если цель заключается в увеличении золотого запаса игрока в описанной ранее игре, то вполне возможно, что хакер захочет сделать это без использования поиска различий. Возможно, он не имеет ничего против использования шестнадцатеричных редакторов, хотя может и не использовать их. Если это так, то, возможно, он хотел бы расширить свой арсенал используемых инструментальных средств.
Если хакер когда-либо занимался программированием, то наверняка он захочет воспользоваться каким-нибудь средством или языком программирования. Как и в случае редакторов, выбор средств программирования – дело очень личное и субъективное. Сгодится любой язык программирования с полным набором функций, который позволяет получить доступ к любым файлам или адресам памяти. Если злоумышленнику потребуется доступ к специальным файлам, например к реестру Windows (Windows Registry), ему потребуется язык программирования, который предоставляет средства работы с ними. В случае реестра Windows это может быть компилятор языка C с соответствующими библиотеками, предоставляющими программный интерфейс приложения API (API – application programming interface), ActiveState Perl for Windows и, возможно, многие, многие другие. Те, кто заинтригован, могут найти ActiveState Perl for Windows в Интернете по адресу www.activestate.com/Products/ActivePerl/index.html.
Программа Game Wizard 32 была создана во время господства DOS на рынке компьютерных игр. Эта программа предоставляет игрокам ряд дополнительных возможностей, но сейчас будет рассказано только об одной из них, относящейся к теме обсуждения. Эта программа обладает возможностью поиска различий для игр. Это резидентная программа, постоянно присутствующая в оперативной памяти после ее запуска. После старта Game Wizard 32 можно начинать игру. В процессе игры игрок записывает на свой счет некоторые величины (набранные очки, золотой запас, запас энергии и т. д.), изменяя параметры игры. В результате будет составлен список найденных параметров
В настоящее время большинство игроков называет подобные игры тренерами или редакторами памяти. Принцип их работы аналогичен рассмотренному ранее принципу работы с файлами. Широкий диапазон программ этого класса может быть найден по адресу http://gamesdomain.telepac.pt/directd/pc/dos/tools/gwiz32.html.
Другие инструментальные средства, которые могут оказаться чрезвычайно полезными при работе в Windows, – это программы File Monitor (FileMon) и Registry Monitor (RegMon) компании Sysinternals. Если читатель работает с NT, то пусть он попробует программу HandleEx, которая предоставляет похожие возможности. Сайт компании находится по адресу www.sysinternals.com. На сайте много полезных утилит, большинство из которых свободно распространяются вместе с исходными текстами.
FileMon – программа, которая позволяет отслеживать обращение различных программ к файлам и их работу с файловой системой (чтение, запись, изменение атрибутов и т. д.), как это показано на рис. 5.13.
Рис. 5.13. Отчет программы FileMon
Применяя фильтрование, можно узнать о действиях выбранной для анализа программы, сократив объем выводимой информации. Обратите внимание, что при фильтрации во время чтения файла отображаются смещение и длина читаемых данных, что помогает определить их адрес в файле. Таким образом, программа FileMon предоставляет еще один способ сокращения списка просматриваемых файлов.
RegMon – другая программа компании Sysinternals. Как и следовало ожидать, она аналогична FileMon, но работает с реестром Windows, как это показано на рис. 5.14.
Во время подготовки этого примера автор слушал приложение Spinner с сайта spinner.com, который использует Real Audio для воспроизведения музыки. Во время своего выполнения Real Audio находится в состоянии «занято». В строчке с номером 472 можно увидеть работу протокола динамической конфигурации хоста DHCP (DHCP – Dynamic Host Configuration Protocol). Протокол динамической конфигурации хоста является сетевым стандартом, регламентирующим процесс присваивания сервером IP-адресов и другой конфигурационной информации машинам-клиентам. Программа RegMon особенно полезна для проверки подозрений о записи приложением чего-либо интересного где-нибудь в потаенном местечке реестра или при попытке определить действия Троянского коня. Программа также информирует при копировании и сравнении всего реестра в целом.
Поиск неисправностей
Можно назвать несколько схожих причин, по которым непосредственное редактирование двоичных файлов невозможно. Чтобы понять их, надо детально рассмотреть их происхождение. Суть их заключается в невозможности изменения части контролируемого файла до тех пор, пока не будут предприняты специальные меры.
Проблемы контрольных сумм и кэширования
Первое, с чем может столкнуться читатель, – это то, что вместе с файлом запоминается служебная информация: контрольная сумма или кэш-величина. В данном случае служебная информация предохраняет файл от несанкционированного изменения и представлена двоичными данными небольшой разрядности, которые описывают контролируемую часть файла. При поступлении запроса на чтение программа обрабатывает часть данных и получает контролирующую их величину. Обычно эта величина занимает от 4 до 20 байт и запоминается вместе с файлом.
При чтении файла программа читает данные вместе с их контрольными суммами / кэш-величинами. Если вновь вычисленные величины совпали со старыми, то программа предполагает, что файл корректен. В противном случае программа, скорее всего, сообщит об ошибке, выдав приблизительно следующее диагностическое сообщение: «Файл некорректен».
В некоторых случаях этот же самый механизм может быть применен разработчиком программного обеспечения для защиты своих данных. Во-первых, для обнаружения случайных повреждений файла данных. Некоторые приложения не смогут правильно обработать поврежденные данные. Во-вторых, как попытка предотвратить некоторые запрещенные действия со стороны пользователей приложения, начиная от попыток обмануть игру до изменения файлов паролей.
Конечно, этот метод защиты не отвечает всем требованиям безопасности. Все, что нужно сделать злоумышленнику, – это определить используемый алгоритм подсчета контрольной суммы, или алгоритм кэширования, и выполнить те же самые действия, что и программа. Местонахождение кэш-величины в файле не является тайной, поскольку, наблюдая за изменениями в файле при определении местонахождения изменяемых величин, всегда найдется одна или несколько последовательностей постоянно изменяющихся байт. Одна из них и является контрольной суммой.