Мы получили один отчёт о найденной уязвимости безопасности, который выглядел примерно так:
В компоненте X есть уязвимость безопасности. Он загружаетЕсли вы попробуете выполнить указанные инструкции, то обнаружите, что результат будет зависеть от определения "запустить программу".shell32.dll
из текущего каталога. Иными словами, он уязвим для атаки на текущий каталог. Вот пример, иллюстрирующий проблему: скопируйте изменённуюshell32.dll
в текущий каталог и запустите программу. Заметьте, что будет запущена изменённаяshell32.dll
вместо системной.
Предположим, что программа размещается в каталоге
C:\sample\sample.exe
.
- Установим текущий каталог = каталогу приложения:
cd /d C:\sample copy \\rogue\server\shell32.dll c:\sample\sample.exe
В этом случае атака успешна. - Установим текущий каталог в любой другой каталог:
cd /d %USERPROFILE% copy \\rogue\server\shell32.dll c:\sample\sample.exe
В этом случае атака неудачна. - Запустим приложение из Проводника Windows (Windows Explorer):
copy \\rogue\server\shell32.dll
Дважды-щёлкаем по sample.exe в Проводнике.
В этом случае атака успешна.
А если мы посмотрим на случай два, то увидим, что эта атака не является атакой на текущий каталог, потому что атака была неудачна, хотя изменённая
shell32.dll
в текущем каталоге была.На самом деле мы видим атаку на каталог приложения.
Вспомните, что каталог приложения просматривается раньше системного каталога. Поэтому вы легко можете ввести перегрузку системных библиотек, разместив одноимённый файл в каталоге своего приложения (прим. пер.: за исключением DLL из списка "известных"). Это поведение - часть принципа "каталог - это пакет". Если вы размещаете некую DLL в каталоге приложения, то подразумевается, что вы хотите использовать именно её, даже если какая-то будущая версия Windows добавит системную DLL с таким же именем.
Автор отчёта признал, что, да, имеет место именно атака на каталог приложения. И привёл пример, почему это серьёзная проблема:
Если я скопирую изменённую копиюЕсли бы отчёт описывал атаку на текущий каталог, то атакующему нужно было бы поместить файлshell32.dll
в каталогC:\Program Files\Microsoft Office\Office12
, то я смогу внедрить код во все приложения Microsoft Office.
shell32.dll
в каталог со, скажем, документом Excel, а не в каталог с Excel.exe.И как раз в этот момент вы наталкиваетесь на герметичный люк: обычные пользователи, запускающие Office, не имеют прав на запись в каталог
C:\Program Files\Microsoft Office\Office12
. Только администраторы машины имеют на это право. А если у вас уже есть привилегии администратора, то вы и так владеете машиной. Нет нужды искать обходные пути, вы и так можете выполнить любые действия напрямую. То, что администратор может сделать с машиной что угодно - это не уязвимость безопасности.С другой стороны, этот отчёт поднимает вопрос безопасности, с которым вам нужно быть знакомым при проектировании своих программ: каталог вашего приложения является герметичным люком.
Убедитесь, что вы контролируете к нему доступ! Если вы сделаете каталог приложения доступным для записи для всех, то этим вы "разгерметизируете люк". Это одна из причин, почему Microsoft требует, чтобы программы устанавливались бы в каталог
Program Files
по умолчанию: описатель безопасности на подкаталоги Program Files
не разрешает запись обычным пользователям. Эти каталоги по умолчанию защищены. (прим. пер.: вторая причина)Нам приходит множество аналогичных отчётов о найденных "проблемах с безопасностью" - и почти все они часто ошибочно характеризуются как атаки на текущий каталог. Вот типичный отчёт:
ВАвтор отчёта перепутал текущий каталог и каталог приложения, потому что он не подумал, что эти каталоги могут отличаться.LITWARE.EXE
есть уязвимость внедрения DLL. Поместите "левую"SHELL32.DLL
в каталогLITWARE.EXE
. Когда стартуетLITWARE.EXE
, она загружает DLL из текущего каталога, что приводит к успешному внедрению кода.
C:\> mkdir C:\test C:\> cd C:\test C:\test> copy \\trusted\server\LITWARE.EXE C:\test> copy \\rogue\server\SHELL32.DLL C:\test> LITWARE-- заметьте, что загружается "левая" DLL
-- доказана успешная атака на текущий каталог
Но они никогда не пробуют сделать так:
C:\> mkdir C:\test C:\> cd C:\test C:\test> copy \\trusted\server\LITWARE.EXE C:\> mkdir C:\test2 C:\> cd C:\test2 C:\test2> copy \\rogue\server\SHELL32.DLL C:\test2> ..\test\LITWARE-- заметьте, что "левая" DLL не загружается
Второй эксперимент показывает, что, на самом деле, это не атака на текущий каталог. Это атака на каталог приложения.
И каждый раз, когда нам отправляют такой отчёт, мы вынуждены точно выполнять все описанные шаги, чтобы убедиться, что это не атака на текущий каталог, а атака на каталог приложения.
P.S. В частности, это означает, что нам нужно проверить все версии программы LitWare на всех версиях Windows, в любых комбинациях - просто чтобы убедиться, что все возможности были проверены. Конечно же, обычно это будет ложной тревогой, но кто знает. Может есть что-то во взаимодействии между LitWare 5.2 SP2 и Windows XP SP3, что приводит к вызову какой-то новой ветки кода, которая действительно пытается загрузить
shell32.dll
из текущего каталога - и именно эту комбинацию пытается сообщить нам автор отчёта.
Комментариев нет:
Отправить комментарий
Можно использовать некоторые HTML-теги, например:
<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>
Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку.
Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.
Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.
Примечание. Отправлять комментарии могут только участники этого блога.