Практика
Отравленного NUL Байты первоначально был дублирован как таковой Олафа Кирха в должности в fa.linux.security группы новостей. Встраивая NULL-байты / символы в приложения, которые не обрабатывают должным образом постфиксные терминаторы NULL, злоумышленник может использовать систему, используя такие методы, как включение локальных файлов .
Эксплойт Poison Null Byte использует преимущества строк известной длины, которые могут содержать нулевые байты, и независимо от того, использует ли атакованный API-интерфейс строки с нулевым завершением. Помещая байт NULL в строку в определенный байт, строка заканчивается в этой точке, обнуляя оставшуюся часть строки, например расширение файла.
Относительно высокий
умеренный
Существует несколько способов использования эксплойта Poison Null Byte, включая следующие:
rain.forest.puppy в выпуске Phrack 55 рассказал об использовании NUL Byte Injection в Perl и о том, как их можно использовать. Результаты были очень похожи в PHP.
Ниже приведен пример уязвимого PHP-скрипта с нулевым байтом:
$ file = $ _GET [ 'file' ] ; require_once ( "/ var / www / $ file .php" ) ;
Хотя приведенный выше сценарий защищен путем принудительного расширения файла «.php», его можно использовать следующим образом:
Вышеуказанное внедрение байтов NULL приведет к удалению обязательного расширения добавляемого файла (.php) и загрузке файла / etc / passwd.
Использование уязвимости переполнения буфера в компоненте ActiveX, поставляемом с Acrobat / Acrobat Reader от Adobe Systems Inc., позволяет удаленным злоумышленникам выполнять произвольный код.
Проблема, в частности, возникает при получении ссылки в следующей форме:
Где [длинная строка] - это длинная строка, созданная вредоносным ПО, содержащая допустимые символы URI. Запрос должен быть отправлен на веб-сервер, который усекает запрос до нулевого байта (% 00), в противном случае указывается недопустимое имя файла и возвращается страница «файл не найден». Примеры веб-серверов, которые усекают запрошенный URI, включают Microsoft IIS и Netscape Enterprise. Хотя запрашиваемый URI усекается для целей поиска файла, длинная строка по-прежнему передается в компонент Adobe ActiveX, отвечающий за отображение страницы. Это, в свою очередь, вызывает переполнение буфера в RTLHeapFree (), позволяя злоумышленнику перезаписать произвольное слово в памяти. Ответственные инструкции от RTLHeapFree () показаны здесь:
0x44F83AE5 MOV EAX , [ EDI + 8 ]
0x44F83AE8 MOV ECX , [ EDI + C ]
...
0x44F83AED MOV [ ECX ] , EAX
EDI регистра содержит указатель на предоставленную пользователем строку. Таким образом, злоумышленник контролирует регистры ECX и EAX, используемые в показанной инструкции MOV.
Успешная эксплуатация позволяет удаленным злоумышленникам использовать произвольное перезапись слова, чтобы перенаправить поток управления и в конечном итоге получить контроль над уязвимой системой. Выполнение кода будет происходить в контексте пользователя, который создал уязвимую версию Adobe Acrobat.
Злоумышленнику не нужно создавать вредоносный веб-сайт, так как его использование может происходить путем добавления вредоносного содержимого в конец любой встроенной ссылки и ссылки на любой веб-сервер Microsoft IIS или Netscape Enterprise. Нажатие на прямую вредоносную ссылку также не требуется, поскольку она может быть встроена в тег IMAGE, IFRAME или скрипт автозагрузки.
Успешная эксплуатация требует, чтобы полезная нагрузка была написана так, чтобы определенные области ввода были приемлемыми для URI. Это включает в себя начальные введенные инструкции, а также некоторые перезаписанные адреса. Это увеличивает сложность успешной эксплуатации. Хотя это не тривиально, эксплуатация определенно правдоподобна.
В конце 2007 года Аршан Дабирсиаги провел ограниченное исследование, в котором описал инъекции нулевого байта в Java. Аршан обнаружил два метода, которые Java неправильно обрабатывает NULL-байт.
Следующий код был выделен на веб-сайте Arshan как уязвимый:
Строка path_to_file = запрос. getParameter ( "target" ) + ".xls" ; Файл f = новый файл ( path_to_file ) ; delivery_to_user ( contentsOf ( f ) ) ;
В аналогичном коде PHP / C / C ++ можно было бы быстро использовать печально известный нулевой байтовый ядр для просмотра любого произвольного файла в системе. Но это также работает в Java, потому что File (file_path) передает пользовательский ввод в open (1) или его эквивалент Windows, который написан на C.
См. Контрольный пример Аршана для получения дополнительной информации.
В нескольких разделах пространства имен .NET есть несколько функций .NET, которые уязвимы для атак Poison Null Byte. Когда .NET CLR не обрабатывает предоставленные пользователем нулевые байты должным образом, могут произойти успешные инъекции.
Нулевые байты рассматриваются как данные в .NET CLR, поэтому нулевые байты не заканчиваются в строках .NET. Однако строки в первом найденном нулевом байте завершаются в вызовах функций, которые являются собственными POSIX-совместимыми. Проблемы, связанные с совместимостью, возникают, когда данные, содержащиеся в нулевом байте, используются для непосредственного вызова собственной функции C через .NET.
Может быть сформирована удаленная атака, которая произвольно завершает параметр, который используется в уязвимом методе (методах), путем завершения вызовов нативных функций с введением нулевого байта.
Существует ряд известных функций .NET, которые уязвимы для нулевых байт-инъекций:
Server.MapPath завершит любую возвращаемую строку, когда байт Null введен в параметре имени файла, таким образом обнуляя любые данные, добавленные к пользовательскому вводу.
Ниже приведен пример внедрения нулевого байта Server.MapPath, использованного Полом Крейгом в его оценке внедрения нулевого байта .NET :
Sub Page_Load ( ) тусклое имя в качестве строки тусклого REALNAME как строки имя = запрос ( "имя" ) и ".uploaded" RealName = MapPath ( "" ) & "\" & имя ответ . написать ( "Mappath значение переменной name:" & MapPath ( name ) & "<br>" ) ответ ."Реальное значение:" & realname & "<br>" ) End Sub
Если к переменной name добавляется нулевой байт (name = c: \ boot.ini% 00), строка завершается до объединения .uploaded.
Есть несколько способов предотвратить инъекции Poison Null Byte в PHP. К ним относится экранирование байта NULL с обратной косой чертой, однако наиболее рекомендуемый способ сделать это - полностью удалить байт с помощью кода, подобного следующему:
$ file = str_replace ( chr ( 0 ) , '' , $ string ) ;
Как и в PHP, в Perl есть несколько вариантов работы с NUL-инъекциями. Также как и в PHP, рекомендуется не экранировать байт, а полностью удалить его, используя код, подобный следующему:
$ data = ~ s / \ 0 // g ;
Обновите Adobe до последней версии. Или измените настройки Adobe Acrobat / Acrobat Reader, чтобы файлы PDF не открывались автоматически при доступе через веб-браузер. При появлении запроса сначала сохраните файл на диск, прежде чем открывать, тем самым закрывая описанный вектор эксплуатации.
Это можно сделать, используя следующие шаги:
Проблемы .NET были исправлены следующими исправлениями:
KB928365 (Обновление безопасности для Microsoft .NET Framework 2.0)
KB928366 (Обновление безопасности для Microsoft .NET Framework 1.1)
Обратите внимание, что они не исправляют проблемы с нулевым байтом в каждом случае.
Комментарии
Оставить комментарий
информационная безопасность - Криптография и Криптоанализ. Стеганография. Защита Информации
Термины: информационная безопасность - Криптография и Криптоанализ. Стеганография. Защита Информации