На кой черт может понадобиться таск-менеджер, реализованный стандартными средствами Excel? Хороший вопрос. Известному специалисту по информационной безопасности Дидье Стивенсу пришлось сделать подобную штуку, когда он столкнулся с системой, в которой было запрещено буквально всё. Взаимодействие с ОС осуществлялось через специальную оболочку, препятствующую запуску большинства приложений, в том числе и стандартного таск-менеджера (через который ее легко можно было бы отрубить), да и локальные политики ограничивали его использование. Увидев, что Excel входит в число разрешенных для запуска приложений, Дидье подумал, почему бы не задействовать встроенные в Office VBA-макросы, чтобы управлять запущенными процессами в системе? Подумал-подумал и сделал полноценный таск-менеджер.

Как это выглядит?

PoC представляет собой обычный Excel-файл — TaskManager.xls. Идея проста: если в системе ограничен запуск таск-менеджера, но при этом есть возможность открывать Excel-таблицы с макросами, то управлять процессами можно через несложный макрос, реализованный на VBA (Visual Basic для приложений). Открыв файл, ты увидишь две кнопки: List processes (Отобразить процессы) и Execute commands (Выполнить команду). Собственно, жмем первую и видим, как таблица быстро заполняется информацией о процессах (название исполняемого файла, ID процесса, путь к бинарнику, пользователя, под которым запущен процесс, время создания процесса, а также разрядность —32 или 64 бита). Любой из процессов можно выгрузить, приостановить и, соответственно, возобновить. Для этого в колонке Command напротив процесса надо поставить флаг нужной команды (например, терминейту процесса соответствует буква t) и нажать на кнопку Execute commands. Получается реально полезная штука. Тут даже не надо фантазировать по поводу пентеста и ограниченных окружений, чтобы представить, зачем она может понадобиться. Вспомни хотя бы winlocker’ы — любая подобная дрянь блокирует запуск таск-менеджера.

Простейший код на VBA позволяет с легкостью управлять процессами в системе
Простейший код на VBA позволяет с легкостью управлять процессами в системе

Как это работает?

Все макросы полностью написаны на чистом 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) и имеет цифровую подпись.

TaskManager.xls в действии
TaskManager.xls в действии

Бери на вооружение линк для загрузки: blog.didierstevens.com/2011/11/30/signed-taskmanager. Остается только сказать Дидье спасибо за классный PoC, который многим наверняка пригодится для решения конкретных задач.

 

Оставить мнение

Check Also

Хакер ищет авторов. Читатель? Хакер? Программист? Безопасник? Мы тебе рады!

Восемнадцать лет мы делаем лучшее во всем русскоязычном пространстве издание по IT и инфор…