Защита от хакеров корпоративных сетей. Коллектив авторов
Чтение книги онлайн.
Читать онлайн книгу Защита от хакеров корпоративных сетей - Коллектив авторов страница 49
Согласно этому методу от исследователя требуется просмотреть исходный текст программы в соответствии с гипотетической последовательностью ее выполнения. Гипотетическая последовательность выполнения отражает различные условия выполнения программы, определяемые ее входными данными. Ход выполнения программы визуально прослеживается исследователем, мысленно отслеживающим обработку данных различными функциями по мере их вызова программой.
Анализ различий – метод определения уязвимостей программы, который применяется, если производитель сообщил об уязвимости, не детализируя ее сути. С помощью этого метода определяется, был ли изменен файл программы, a если был, то где именно.
diff – одна из лучших утилит, реализующая рассматриваемый метод. Она поставляется с большинством версий операционных систем UNIX и благодаря Фонду свободно распространяемого программого обеспечения (Free Software Foundation) реализована на многих платформах. diff сравнивает две копии данных и отображает любые различия между ними, то есть она позволяет найти различия в двух исходных файлах программ и их местонахождение.
Обычно метод различий применяется для уточнения сути и последствий уязвимости, о которой производитель опубликовал какие-либо детали. Например, в оперативных сообщениях об обновлении программного обеспечения часто содержатся неопределенные детали обновления программ, которые могут оказать влияние на их безопасность, как это было продемонстрировано последним сообщением об обновлении программы axspawn.
Про патч уязвимости было заявлено, что он исправляет возможную ошибку переполнения буфера. При этом ни слова не было сказано о каких-либо подробностях. Детали прояснились после сравнения версий 0.2.1 и 0.2.1a программы при помощи утилиты diff:
elliptic@ellipse:~$ diff axspawn-0.2.1/axspawn.c axspawn-
0.2.1a/axspawn.c
491c491
< envc = 0;
–
> envc = 0;
493c493
< sprintf(envp[envc++], “AXCALL=%s”, call);
–
> sprintf(envp[envc++], “AXCALL=%.22s”, call);
495c495
< sprintf(envp[envc++], “CALL=%s”, (char *)user);
–
> sprintf(envp[envc++], “CALL=%.24s”, (char
*)user); 497c497
< sprintf(envp[envc++], “PROTOCOL=%s”, protocol);
–
> sprintf(envp[envc++], “PROTOCOL=%.20s”,
protocol); 500c500
< envp[envc] = NULL;
–
> envp[envc] = NULL;
Видно, что в первой версии программы axspawn.c используется функция sprintf без всяких ограничений на длину выводимой строки данных, а во второй – введено ограничение на длину выводимой строки в спецификации преобразования.
В некоторых случаях производитель может выпустить