Защита от хакеров корпоративных сетей - стр. 83
>– usr.sbin/pkg_install/lib/pen.c 17 May 2001 12:33:39 -0000
>+++ usr.sbin/pkg_install/lib/pen.c 7 Dec 2001 20:58:46 -0000
>@@ -106,7 +106,7 @@
>cleanup(0);
>errx(2, __FUNCTION__ “: can’t mktemp “%s””, pen);
>}
>– if (chmod(pen, 0755) == FAIL) {
>+ if (chmod(pen, 0700) == FAIL) {
>cleanup(0);
>errx(2, __FUNCTION__ “: can’t mkdir “%s””, pen);
>}
Удаляемая патчем часть исходного текста обозначена знаком минус (-), а добавляемая – знаком плюс (+). Можно увидеть, что часть исходного текста, содержащая код создания директории с разрешениями 0755, заменяется на код, создающий директорию с разрешениями 0700.
Следует признать, что исследование уязвимости не всегда бывает таким простым. Рассмотрим анализ выполнимого кода программы.
Анализ двоичного кода
Первое, что приходит на ум при исследовании уязвимостей, – аудит исходного текста программы. Тем не менее в большинстве случаев анализ двоичного кода – единственно возможный метод поиска уязвимостей. Благодаря появлению движения за открытые исходные тексты программ и проекта создания свободно распространяемого программного обеспечения GNU License получить исходные тексты программ стало намного проще. Но не все производители поддержали открытый обмен исходными текстами. К тому же большая часть программного обеспечения по-прежнему поставляется без исходных текстов.
Один из методов определения потенциальных уязвимостей заключается в трассировке выполнения программы. Для трассировки используется различный инструментарий. Для этой цели в системе Solaris применяется специальный пакет программ truss компании Sun. В других операционных системах используются аналогичные программы, например strace для Linux.
Трассировка выполнения программы позволяет наблюдать за ее взаимодействием с операционной системой. Используемые программой переменные окружения могут быть исследованы в соответствии с режимами ее работы. Дополнительно при трассировке программы можно просмотреть используемые программой адреса памяти и получить другую полезную информацию о возможных проблемах в каких-либо частях программы.
Использование трассировки позволяет определить, где и когда проявится уязвимость в исследуемой программе.
Применение отладчиков – еще один способ поиска уязвимостей. Отладчики позволяют выявить ошибки программы во время ее выполнения. На практике применяются различные отладчики. Gnu Debugger (GDB) – один из наиболее известных среди них.
Отладчики могут управлять работой программы во время ее выполнения. С помощью отладчика может быть выполнена как вся программа целиком, так и ее часть. Отладчик может отображать содержимое регистров, память по указанным адресам и другую полезную для поиска уязвимостей информацию.