На кой черт может понадобиться таск-менеджер, реализованный стандартными средствами Excel? Хороший вопрос. Известному специалисту по информационной безопасности Дидье Стивенсу пришлось сделать подобную штуку, когда он столкнулся с системой, в которой было запрещено буквально всё. Взаимодействие с ОС осуществлялось через специальную оболочку, препятствующую запуску большинства приложений, в том числе и стандартного таск-менеджера (через который ее легко можно было бы отрубить), да и локальные политики ограничивали его использование. Увидев, что Excel входит в число разрешенных для запуска приложений, Дидье подумал, почему бы не задействовать встроенные в Office VBA-макросы, чтобы управлять запущенными процессами в системе? Подумал-подумал и сделал полноценный таск-менеджер.
Как это выглядит?
PoC представляет собой обычный Excel-файл — TaskManager.xls. Идея проста: если в системе ограничен запуск таск-менеджера, но при этом есть возможность открывать Excel-таблицы с макросами, то управлять процессами можно через несложный макрос, реализованный на VBA (Visual Basic для приложений). Открыв файл, ты увидишь две кнопки: List processes (Отобразить процессы) и Execute commands (Выполнить команду). Собственно, жмем первую и видим, как таблица быстро заполняется информацией о процессах (название исполняемого файла, ID процесса, путь к бинарнику, пользователя, под которым запущен процесс, время создания процесса, а также разрядность —32 или 64 бита). Любой из процессов можно выгрузить, приостановить и, соответственно, возобновить. Для этого в колонке Command напротив процесса надо поставить флаг нужной команды (например, терминейту процесса соответствует буква t) и нажать на кнопку Execute commands. Получается реально полезная штука. Тут даже не надо фантазировать по поводу пентеста и ограниченных окружений, чтобы представить, зачем она может понадобиться. Вспомни хотя бы winlocker'ы — любая подобная дрянь блокирует запуск таск-менеджера.
Хакер #157. Деньги на багах в Chrome
Как это работает?
Все макросы полностью написаны на чистом VBA. Для манипуляции с процессами вызываются WIN32-функции из соответствующих системных библиотек. Нужные функции вначале объявляются путем подгружения из DLL, которое осуществляется примерно таким образом:
Private Declare Function OpenProcess Lib
"kernel32.dll" (ByVal dwDesiredAccessas
As Long, ByVal bInheritHandle As
Boolean, ByVal dwProcId As Long) As Long
После этого их можно использовать без ограничений. К примеру, следующая функция выгружает процесс из памяти:
Private Sub TerminateProcessByID(
ByVal lProcessID As Long)
hProcess = OpenProcess(
PROCESS_TERMINATE, 0, lProcessID)
If hProcess <> 0 Then
TerminateProcess hProcess, 0
CloseHandle hProcess
End If
End Sub
Последняя версия TaskManager.xls работает как в 32-, так в 62-битных системах, отлично себя чувствует в любых Офисах (вплоть до 64-битной версии Office 2010) и имеет цифровую подпись.
Бери на вооружение линк для загрузки: blog.didierstevens.com/2011/11/30/signed-taskmanager. Остается только сказать Дидье спасибо за классный PoC, который многим наверняка пригодится для решения конкретных задач.