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

Проблемы контрольных сумм и кэширования

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

При чтении файла программа читает данные вместе с их контрольными суммами / кэш-величинами. Если вновь вычисленные величины совпали со старыми, то программа предполагает, что файл корректен. В противном случае программа, скорее всего, сообщит об ошибке, выдав приблизительно следующее диагностическое сообщение: «Файл некорректен».

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

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

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

Даже не проводя анализа машинного кода или некоторых внешних признаков (например, сообщений программы о CRC32 ошибке), первые предположения об используемом алгоритме можно сделать, основываясь на количестве байт кэш-величины. Наиболее известный алгоритм подсчета контрольной суммы CRC32 вычисляет 32-битовую (четырехбайтовую) величину. Этот алгоритм подсчета контрольной суммы используется в ряде сетевых технологий. Примеры его программной реализации могут быть найдены повсеместно, только запустите поиск в Интернете. Например, подходящий пример может быть найден по адресу www.faqs.org/faqs/compression-faq/partl/section-26.html.

Алгоритмы MD4 и MD5 (MD - сокращения от Message Digest - профиль сообщения. Профиль сообщения - это короткая цифровая строка фиксированной длины, формируемая из более длинного сообщения с использованием специального алгоритма) генерируют 128-битовую (16-байтовую) величину, а алгоритм SHA (SHA - Secure Hash Algorithm -алгоритм аутентификации и проверки целостности информации) - 160-битовую (20-байтовую) величину.

Примечание

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

Проблемы сжатия и шифрования

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

Если проанализировать различия между исходным и сжатым или зашифрованным файлом (если используется качественный алгоритм преобразования файлов), то можно обнаружить изменение большого количества данных в файле. В начале главы автор приводил пример применения метода поиска различий для игры Heroes of Might and Magic II, хотя в то время уже продавалась игра Heroes of Might and Magic III. Дело в том, что, как кажется автору, в последней игре файлы сжимаются. Автор делает подобное предположение по следующим причинам. Во-первых, файл неразборчив (при просмотре файла не видно английских слов). Во-вторых, при сохранении игры каждый раз изменяется почти весь файл целиком, даже если между сохранением игры ничего не делается. В-третьих, с течением времени размер файла слегка изменяется. Поскольку размер сжатого файла зависит от его содержания, а размер зашифрованного файла имеет тенденцию оставаться постоянным при шифровании одинакового числа байт, то автор предполагает, что в данном случае используется сжатие вместо шифрования.

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

В случае зашифрованных данных все сказанное выше остается в силе. За исключением того, что очень велики шансы написания разработчиком своей собственной программы «шифрования». Автор намеренно взял слово «шифрование» в кавычки, потому что большинство людей не сможет написать приличную программу шифрования (в том числе и автор). Поэтому, в случае применения собственной программы «шифрования», очень велики шансы, что ее взломают. Если же для шифрования файлов использованы настоящие криптографические алгоритмы, то и их можно расшифровать. Ведь программе требуется расшифровать зашифрованные файлы, поэтому нужно только узнать, как она это делает. Подробнее этот вопрос освещен в главе 6.

Резюме

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

Поиск различий используется для определения места хранения паролей в приложениях или выяснения сути исправлений известных уязвимостей. Был рассмотрен пример патча в унифицированном формате различий и проанализирован его отчет.

Для выявления различий используются различные программные средства, например команда fc операционной системы Windows или команда diff системы UNIX. Следует обратить внимание на шестнадцатеричные редакторы, работающие на различных платформах. Например, на редактор Hackman для операционной системы Windows. Инструментальные средства мониторинга файловой системы работают с группой файлов, разделом или логическим диском. В этой главе был обсужден трудоемкий способ контроля файловых систем: копирования всей файловой системы и выполнения пофайлового сравнения. В результате исследования структуры файловой системы ext2, обсужденной в этой главе, было рассказано о средствах идентификации модифицированных файлов: команде Is системы UNIX, команде dir MS-DOS. Команда dir, используя атрибут «Архивный» файловой системы FAT, позволяет найти модифицированные файлы.

Контрольные суммы могут использоваться для контроля файлов от разрушения и несанкционированного изменения путем вычисления контрольной суммы и последующего их сравнения. Обратите внимание на то, что некоторые программы типа root kits могут обходить контрольные суммы.

Известны и другие инструментальные средства, например ActiveState Perl, FileMon и RegMon. На ActiveState Perl можно писать собственные программные средства. Утилиты операционной системы Microsoft Windows FileMon и RegMon контролируют доступ приложений к файлам и реестру Windows соответственно. Обе утилиты разработаны компанией Sysinternals.

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

Конспект

Суть поиска различий

• Поиск различий - процесс сравнения исследуемых объектов до и после свершения событий.

• Поиск различий может использоваться для обнаружения изменения файла программным путем или выяснения сути исправления уязвимости.

• Команда diff может быть применена для исследования содержимого директории путем сравнения входящих в нее файлов.

• Исследование методом поиска различий может быть применено к исходным текстам программ и двоичным файлам.

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

• В состав большинства операционных систем UNIX включена команда поиска различий diff Для этих же целей в состав операционной системы Microsoft включена команда fc.

При отправке по почте открытых исходных текстов исправлений уязвимостей программ отправитель не всегда пересылает файл различий (diff-файл), который позволил бы исправить исходный текст программы и установить исправленную версию программы.

Шестнадцатеричный редактор позволяет редактировать двоичные файлы непосредственно, минуя приложение. Шестнадцатеричные редакторы доступны на многих платформах, например редактор Hackman для Windows или hexedit для UNIX.

• Поскольку атрибуты файла легко фальсифицировать, не стоит на них полагаться при определении модифицированных файлов. Измененные файлы могут укрывать вирусы, Троянских коней или программ типа root kit. Один из способов недопущения этого заключается в использовании контрольных сумм или алгоритмов кэширования файлов, хранимых вместе с файлами.

• В состав утилит мониторинга операционной системы Windows входят утилиты RegMon и FileMon.

Поиск неисправностей

• Для защиты файлов применяются вычисление контрольных сумм, кэширование, сжатие и шифрование.

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

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

Часто задаваемые вопросы

Вопрос: Существует ли команда dif для операционной системы Windows?

Ответ: Да. Она может быть получена из дистрибутива Cygwin, распространяемого Cygnus Solutions.

Вопрос: Всегда ли нужен протокол различий исправлений выявленных уязвимостей? Ответ: И да, и нет. Ряд продавцов открытых операционных систем или систем, выпускаемых по общедоступной лицензии GPL, подобную информацию предоставляют. Коммерческие производители делают это неохотно и не всегда. Хотя автор не может указать читателю, какую операционную систему использовать, он предпочитает владеть информацией и поэтому использует свободно распространяемые открытые операционные системы.

Вопрос: Существует ли версия grep с возможностью рекурсивного построения отчета? Ответ: Да. Версии grep фонда открытых программных средств (Free Software Foundation), поддерживающие флаг рекурсии (-г), доступны по адресу www.gnu.org.

Вопрос: Что, если я захочу для создания своих собственных программных средств использовать язык С вместо Perl? Ответ: У вас будет больше возможностей. В состав большинства открыто распространяемых UNIX-подобных операционных систем входит компилятор с языка С. Для операционной системы Windows можно порекомендовать DJGPP, который можно найти по адресу www.delorie.com/djgpp.

Вопрос: Где можно найти другие свободно распространяемые утилиты? Ответ: Sourceforge.net имеет большое хранилище открытых программных средств. Кроме того, Freshmeat.net предоставляет машину поиска свободно доступного программного обеспечения.

Исследование инструментария поиска различий | Защита от хакеров корпоративных сетей | Криптография


Защита от хакеров корпоративных сетей



Новости за месяц

  • Август
    2019
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс