На кой черт может понадобиться таск-менеджер, реализованный стандартными средствами 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, который многим наверняка пригодится для решения конкретных задач.

 

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии