понедельник, 15 июня 2015 г.

Наследование привилегий при составных командах — так закрыта ли уязвимость?

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

 

Итак, при запуске интерпретатора cmd.exe можно передать ему в параметрах командной строки за один раз целую цепочку команд, разделенных знаком &, — и он их последовательно выполнит. Такой запуск легко произвести ярлыком, и подобные ярлыки достаточно популярны у злоумышленников. Этими однострочными скриптами можно нанести много вреда, в т.ч. разными способами обойти защиту CIS. Однако здесь речь пойдет только об одном виде обхода CIS — через ошибочное наследование привилегий установщика.

Когда происходит вызов интерпретатора cmd.exe, CIS рассматривает первую команду в командной строке. Если эта команда — запуск файла, то CIS отождествляет интерпретатор с этим файлом и применяет к процессу cmd.exe все те права и запреты, которые имеет указанный файл. Таким образом, если интерпретатору передается целая цепочка команд, то CIS будет считать, что все команды, начиная со второй, выполняются тем самым файлом, что указан в первой команде.

Для обхода защиты эту особенность можно использовать так: в первой команде указывается какой-нибудь доверенный инсталлятор, а в следующей — троянская программа. Предположим, в одном каталоге лежит неопознанная программа malware.exe и ярлык, содержащий следующую команду:

%WINDIR%\System32\cmd.exe /c %WINDIR%\System32\msiexec.exe /i /q & malware.exe

При запуске ярлыка интерпретатор cmd.exe сначала запустит программу msiexec.exe (благодаря ключам /i /q она запустится тихо и тут же завершится), а затем запустит программу malware.exe. При этом CIS отождествит интерпретатор с установщиком msiexec.exe. С точки зрения CIS, этот установщик запускает неопознанную программу malware.exe. В результате программа malware.exe «наследует» привилегии установщика.

Усовершенствованный вариант ярлыка:

%WINDIR%\System32\cmd.exe /c %WINDIR%\System32\msiexec.exe /i /q & copy malware.exe malware2.exe /y & malware2.exe

Здесь во второй команде происходит копирование неопознанной программы malware.exe, а в третьей — запуск копии. С точки зрения CIS, копирование осуществляет доверенный установщик msiexec.exe, поэтому неопознанная программа становится доверенной.

Так было в версиях CIS от 5.10 до 8.1, затем ситуация изменилась. В версии CIS 8.2.0.4508 интерпретаторы стали отождествляться не с любыми файлами, которые указываются в параметрах командной строки, а только с теми, которые не содержат исполняемого кода. Это значит, что при выполнении приведенных выше команд интерпретатор уже не отождествится с установщиком msiexec.exe, и поэтому копирование и запуск программы malware.exe будет производить, с точки зрения CIS 8.2, процесс cmd.exe — что и соответствует действительности. Никакого ошибочного наследования привилегий при этом не произойдет, и неопознанная программа malware.exe будет контролироваться в соответствии с настройкой CIS.

Однако рано говорить об устранении уязвимости — доверенным установщиком не обязательно должен быть exe-файл! Предположим, в одном каталоге лежит неопознанная программа malware.exe, любой доверенный файл i.msi и ярлык со следующей командой:

%WINDIR%\System32\cmd.exe /c i.msi /q & malware.exe

При запуске ярлыка интерпретатор cmd.exe будет отождествлен с файлом i.msi. CIS наделяет доверенные файлы с расширением msi привилегиями установщиков, поэтому программа malware.exe снова «унаследует» эти привилегии. Аналогично можно добавить к командам операции копирования и т.д.

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

Вспомним, что, во-первых, CIS считает установщиками любые файлы, превосходящие 40 MB, а во-вторых, доверяет этим файлам, если они имеют подпись доверенного поставщика. Попробуем найти файл, который является 1) большим, 2) подписанным и 3) неисполняемым. Мне попался файл такого рода: MSMDLOC.DLL. Следующая задача — как тихо и незаметно «запустить» его? Оказалось достаточным переименовать его в батник i.bat. Осталось поместить в один каталог файл i.bat, неопознанную программу malware.exe и ярлык со следующей командой:

%WINDIR%\System32\cmd.exe /c i.bat & malware.exe

Как видим, уязвимость до конца не устранена. Однако будет ли она использоваться? — Нет, по той простой причине, что есть более удобные способы получения привилегий установщика, чем тягание за собой пятидесятимегабайтной чушки (хотя вирусы большого размера — не такая уж редкость). Об этом методе простого обхода CIS можно будет вспомнить, только если закроют прочие: подмену неопознанным файлом доверенного (в т.ч. доверенного установщика), использование признаков установщика в именах...

И неведомый по счету раз повторяю: эта уязвимость, как и все, основанные на привилегиях установщиков, устраняется включением автопесочницы и отключением пары опций.