• Главная
  • Карта сайта
Не найдено

Аналіз поведінки трояна Pegasus в мережі

  1. Intro
  2. Domain Replication
  3. Mailslot works
  4. Pipe works
  5. CnC traffic
  6. Detection

У цій статті я дам докладний опис механізмів поширення по мережі і взаємодії між копіями Pegasus.

нещодавно був опубліковано вихідний код банківського трояна Pegasus. Незважаючи на згадку групи Carbanak в назві архіву, дослідники з компанії Minerva Labs спростували причетність трояна до цієї групи і довели причетність до групи Buhtrap (Ratopak). Всередині архіву знаходиться короткий опис роботи трояна, його вихідні коди, опис системи банківських платежів і дані співробітників багатьох російських банків.
Архітектура вихідного коду цього шкідливий досить цікава. Функціональність поділена на модулі, що збираються в єдиний "binpack" на етапі компіляції. Процес компіляції також включає в себе підпис виконуваних файлів сертифікатом з файлу tric.pfx, який відсутній в архіві.
Не менш цікава і мережева активність Pegasus, який, після зараження, намагається поширитися усередині домена і вміє проксіровать дані між машинами, використовуючи пайпи і транспорт Mailslot. Ми сфокусувалися на вивченні особливостей мережевої активності трояна і оперативно додали детектив для Pegasus в продукт PT Network Attack Discovery . Це дозволить всім його користувачам своєчасно виявляти активність цього трояна і його модифікацій у своїй мережі. У цій статті я дам докладний опис механізмів поширення по мережі і взаємодії між копіями Pegasus.
нещодавно був   опубліковано   вихідний код банківського трояна Pegasus

Intro


Потрапивши на машину, головний модуль InstallerExe впроваджує код в svchost.exe за допомогою техніки Process Hollowing і, після ініціалізації головних модулів, Pegasus запускає кілька паралельних процесів:

  1. Domain Replication - займається розвідкою всередині мережі та спробами поширитися на інші Windows машини.
  2. Mailslot Listener слухає широкомовні mailslot повідомлення, за допомогою яких Pegasus розсилає здобуті облікові записи. Ім'я слота генерується під час компіляції.
  3. Pipe Server Listener слухає Windows Pipe з ім'ям, що генерується від імені машини. Ці пайпи використовуються в основному для виявлення інших копій Pegasus в мережі і їх взаємодії
  4. Logon Passwords періодично раз в кілька хвилин намагається сдампіть дані облікових записів модулем з Mimikatz.
  5. Network Connectivity відповідає за зв'язок з CnC сервером і періодичний обмін повідомленнями.

// start transports which links data with our CB-manager pwInitPipeServerAsync (dcmGetServerCallback ()); mwInitMailslotServer (dcmGetServerCallback ()); ... // start broadcasting creds to other machines cmStartupNetworkBroadcaster ();

Domain Replication


Одна з підсистем в Pegasus відповідає за горизонтальне поширення (Lateral Movement) в Windows мережі. Поширення ділиться на два важливих етапи:

  1. Виявлення сусідніх машин.
  2. Спроба реплікації на машину.

Виявлення сусідніх машин в домені відбувається через два API виклику:
Виявлення сусідніх машин в домені відбувається через два API виклику:   NetServerEnum, що вимагає для роботи сервіс Browser і виклики WNetOpenEnum / WNetEnumResource NetServerEnum, що вимагає для роботи сервіс Browser і виклики WNetOpenEnum / WNetEnumResource.
Всі виявлені в домені машини підлягають перевірці, якщо вони вже заражені. Pegasus опитує сгенерированное ім'я пайпа раз в 200 мілісекунд більш ніж 20 раз поспіль. Таке аномальне поведінка була використано нами в якості одного з індикаторів активності Pegasus в домені. Не виявивши ознак зараження, зловредів переходить до наступного кроку - спробі реплікації.
Реплікація відбувається наступним чином. За допомогою знайдених облікових записів (УЗ) на хості Pegasus робить спробу авторизуватися на машині по протоколу SMB до куль IPC $ і ADMIN $, причому якщо доступ до IPC $ є, а до ADMIN $ немає, то Pegasus робить висновок про те, що прав облікового запису недостатньо і їх необхідно позначити як невалидность. Отримавши доступ до кулі ADMIN $, що є аліасом для папки% windir%, шкідливий намагається визначити архітектуру машини щоб надалі використовувати відповідний модуль.
Алгоритм визначення архітектури грунтується на заголовках PE файлів на віддаленій машині. В якості такого файлу Pegasus намагається прочитати перші 4 кілобайти notepad.exe з папки% windir%. Неочевидний недолік такого методу полягає в тому, що на Windows Server 2012 блокнот знаходиться по шляху% windir% \ System32.
Місцезнаходження notepad.exe на Windows 7:
C: \ Users \ Administrator> where notepad.exe C: \ Windows \ System32 \ notepad.exe C: \ Windows \ notepad.exe

На Windows Server 2012:
C: \ Users \ Administrator> where notepad.exe C: \ Windows \ System32 \ notepad.exe

Не виявивши notepad.exe, Pegasus не може заразити сервер, навіть маючи дані облікового запису з необхідними правами. Просте відсутність блокнота в% windir% може зупинити поширення Pegasus на Windows Server 2012. Використання regedit.exe в цьому плані більш надійно.
Після успішного визначення архітектури цільового сервера, Pegasus завантажує невеликий дроппер RSE (Remote Service Exe) розміром близько 10 кілобайт, завдання якого - завантажити binpack з модулів від Pegasus через пайп у відкритому вигляді і передати управління на модуль Shellcode. Ім'я Дроппер складається псевдовипадковим чином і складається з рядка шістнадцятирічних символів довжиною від 8 до 15 символів. Псевдовипадковий генератор инициализируется в залежності від імені цільової машини і буде однаковим між запусками для уникнення можливого засмічення% windir% минулими копіями Дроппер.

Дроппер перевіряється на цілісність і можливе видалення антивірусом, після чого запускається одним з двох реалізованих механізмів - SCM або WMI, причому в в першу чергу Pegasus робить спробу запуску RSE через механізм WMI, а тільки потім за допомогою Service Control Manager (SCM). Робиться це з тієї причини, що SCM залишає більше слідів в журналах Windows. У планах творців Pegasus були і інші методи поширення - Wsh Remote, Powershell remoting, Task Scheduler, а модуль для виконання команд через RDP знаходився в стадії розробки.
Як було згадано вище, після успішного запуску дроппер перевіряє і відкриває пайп на прослуховування і передає управління на прийшла корисне навантаження.

Оскільки код Pegasus інжектується методом Process Hollowing в процес svchost.exe, на диску не повинно залишитися ні початкового модуля InstallerExe в разі первинного зараження, ні Дроппер RSE в разі поширення. Якщо дроппер все ще доступний за відомим шляху, Pegasus видаляє його власним способом:

  1. перезапис вмісту файлу випадковими даними;
  2. перезапис порожніми даними (нулями);
  3. перейменування файлу;
  4. видалення файлу.


Після успішного зараження процес поширення Domain Replication починається знову.

Mailslot works


Після того, як Pegasus отримає доступ до даних облікових записів або від іншої копії Pegasus, або від модуля mod_LogonPasswords, він почне трансляцію розсилку даних УЗ по домену. Розсилка здійснюється за допомогою заснованого на SMB механізму Mailslot, який дозволяє здійснити односпрямовану трансляцію розсилку невеликої порції даних по домену. Розсилка відбувається по випадково згенеровані імені слота і, щоб всі заражені машини в домені могли відправляти і отримувати дані по єдиному імені, псевдовипадковий генератор для імен инициализируется від змінної TARGET_BUILDCHAIN_HASH, що задається в конфіги при білді.
Оскільки механізм Mailslot накладає обмеження на максимальний розмір пакета, розсилається за раз тільки одна УЗ за принципом останнього часу розсилки: серед всіх наявних УЗ по домену розсилається та, чия дата останньої розсилки найстаріша.
Після того, як Pegasus отримає доступ до даних облікових записів або від іншої копії Pegasus, або від модуля mod_LogonPasswords, він почне трансляцію розсилку даних УЗ по домену Дані в Mailslot-ах передаються не у відкритому вигляді, а загорнуті трьома шарами XOR-шифрування, причому ключі передаються разом з даними. Перший шар даних це конверт NetMessageEnvelope з перевіркою цілісності даних алгоритмом SHA1, який використовується для всіх даних переданих по локальній мережі. 4 байта даних на початку пакета є ключем, який змінюється бітовими зрушеннями на 5 біт вправо за цикл. Усередині конверта міститься XOR кодированная структура даних з безпосередньо полями УЗ і датою їх додавання. 8и байтовий ключ також знаходиться на початку структури, але застосовується без зрушень. Після декодування структури УЗ залишиться лише десеріалізовать окремі поля з структурах ENC_BUFFER такі як ім'я комп'ютера, домен, користувача і його пароль. Шифрування цих полів здійснюється 8и байтовим ключем із зсувами. Скрипт для розшифровки пакета Mailslot і приклад такого пакета можна знайти тут: скрипт , PCAP .
Період розсилки Mailslot повідомлень в релізной версії коливається від 20 секунд до 11 хвилин.
// some random wait before making next step DbgPrint ( "going to sleep"); #ifdef _DEBUG // debug - 2-5 s Sleep (rg.rgGetRnd (& rg, 2000, 5000)); #else // release - 20 - 650 s //Sleep(rg.rgGetRnd(&rg, 2000., 65000) * 10); Sleep (rg.rgGetRnd (& rg, 2000., 15000)); #endif

Крім обміну обліковими записами, механізм Mailslot використовується для пошуку зараженої машини з доступом в інтернет і анонсування доступу в інтернет. Конверт NetMessageEnvelope зберігає в собі тип розсилається повідомлення. Сам обмін даними між машиною без доступу і машиною з доступом в інтернет здійснюється через пайпи.

Pipe works


Для двостороннього зв'язку або передачі великих обсягів даних копії Pegasus використовують пайпи як канал спілкування. Ім'я пайпа, хоч і теж генерується псевдовипадковим генератором, але залежить від імені машини і билда і, тим самим, дозволяє клієнтської і серверної частини використовувати одне і те ж ім'я.
При односторонньому спілкуванні, наприклад, передачі binpack під час реплікації на іншу машину, дані не шифруються і передаються у відкритому вигляді. Binpack починається зі структури SHELLCODE_CONTEXT довгою 561 байт.
Для двостороннього зв'язку або передачі великих обсягів даних копії Pegasus використовують пайпи як канал спілкування
Під час двосторонньої передачі, наприклад, проксінг даних між копією Pegasus без доступу в інтернет і CnC сервером, використовується та ж структура конверта NetMessageEnvelope з XOR шифруванням, як і в разі Mailslot, тому що вона дозволяє розрізняти різні типи повідомлень в поле id.
Архітектурно проксінг даних виконується через запит на передачу порції даних (PMI_SEND_QUERY), отримання id запиту у відповідь і опитування стану завдання по id (PMI_CHECK_STATUS_QUERY). Як правило, в якості навантаження передається інша Envelope структура, що додає різні функціональні можливості і ще один шар шифрування.
Крім того, робота з пайп не закінчується на взаємодії між зараженими машинами. Модуль mod_KBRI_hd Інжект в процеси cmd.exe код, що перехоплює виклики MoveFileExW і аналізує всі копійовані дані, оскільки це частина механізму проведення платежів. Якщо копіюється файл містить цікаві зловмисникам дані - дані з платежами, нотифікація про це відправляється на CnC сервер. Спілкування між інжектіруемого в cmd.exe модулем mod_KBRI і копією Pegasus здійснюється всередині зараженої машини через пайп, ім'я якого не генерується, а жорстко задано в вихідному коді:
\. \ Pipe \ pg0F9EC0DB75F67E1DBEFB3AFA2

У функціональність модуля також входить підміна даних рахунків на льоту за шаблоном. Приклад патернів для пошуку на скріншоті.

CnC traffic


За безпосередній обмін даних з CnC сервером відповідає окремий потік, який раз у кілька хвилин перевіряє чергу чанкі даних від внутрішніх процесів або від інших копій шкідливий і відправляє їх на сервер.
Під час ініціалізації модуля mod_NetworkConnectivity він проводить багатоступеневу перевірку працездатності мережевого підключення:
1) Виявлення налаштувань проксі сервера і спроба з'єднання з www.google.com :

  • У гілці реєстру \\ Software \\ Microsoft \\ Windows \\ CurrentVersion \\ Internet Settings.
  • Через WPAD (виклик WinHttpGetProxyForUrl).
  • Через конфігурацію проксі-сервера для поточного користувача (виклик WinHttpGetIEProxyConfigForCurrentUser).

2) Перевірка з'єднання з серверами оновлень Microsoft і повертаються даних ( authrootseq.txt , authrootstl.cab , rootsupd.exe )
3) Тестування HTTPS з'єднань з одним з 6і адрес:

Тільки після проходження всіх перевірок Pegasus вважає, що має необхідний доступ в зовнішню мережу і може анонсувати це по домену Mailslot повідомленням. Причому Pegasus може маскуватися і спілкуватися з CnC сервером тільки в робочі години - з 9 до 19І годин за місцевим часом.
Чанкі даних, обгорнутих в конверт з підрахунком хеш суми, Pegasus посилає в зашифрованому вигляді з використанням DES шифрування в режимі CRYPT_MODE_CBC / PKCS5_PADDING. Ключ шифрування залежить тільки від змінної під час компіляції, і таким чином ми можемо розшифровувати трафік між зловредів і сервером знаючи тільки його BUILDCHAIN_HASH. У вихідних кодах всередині архіву ця змінна мала значення 0x7393c9a643eb4a76. Скрипт для розшифровки отстука (Check-in) на сервер і приклад такого пакета можна знайти тут: скрипт , PCAP .
Такий контент (структура INNER_ENVELOPE) він передає на CnC сервер під час Check-in, або разом з будь-якими даними. Спочатку знаходяться 28 байт конверта з полем довжини і SHA1 сумою.
2) Перевірка з'єднання з серверами оновлень Microsoft і повертаються даних (   authrootseq
Ті ж самі дані передаються між машинами під час проксінг через пайпи, але загорнуті всередину відомого нам конверта NetMessageEnvelope з хеш сумою і XOR шифруванням.
Оператор CnC може розсилати команди для виконання на копії Pegasus і повідомлення з командами або іншими даними, наприклад EID_CREDENTIALS_LIST можуть утримувати свої власні шари шифрування полів, як ми вже бачили на прикладі широкомовної розсилки облікових записів.

Detection


В першу чергу нас цікавило виявлення активності Pegasus в мережі і, після ретельного вивчення вихідних кодів і запуску в тестовому оточенні, ми виявили ті мережеві аномалії і артефакти, які явно говорять про присутність цього складного шкідливий в мережі. Pegasus дійсно можна назвати різнобічним - він активно використовує протокол SMB для розсилки повідомлень і встановлення зв'язку з іншими копіями, поширюється на інші машини і коммуницирует з CnC сервером на свій особливий лад. Встановлюючи однорангові з'єднання в домені, копії Pegasus прокладають шлях до зовнішньої мережі і спілкуються з CnC сервером проксіруя трафік через один одного. Використання сертифікатів для підпису виконуваних файлів і звернення до ресурсів компанії Microsoft і Mozilla під час перевірки з'єднання ускладнює виявлення його активності та виявлення на хості.
Проект вихідного коду Pegasus досить добре структурований і описаний, тому в недалекому майбутньому можна очікувати запозичення частин його коду іншими шкідливими програмами і появи модифікацій.
Багато з механізмів віддаленого виконання команд і пошуку даних облікових записів залишилися нереалізованими, розробники також збиралися додати можливість зміни шеллкода під час впровадження в процес на льоту. І це не все їх задумки.
Ми розробили кілька сигнатур для PT NAD і IDS Suricata, що дозволяють виявити специфічну для Pegasus активність в мережі на різних стадіях, починаючи з найперших секунд його активності. Знайти відкриті сигнатури для Suricata IDS можна на нашому github і Twitter , Вони автоматично потраплять до вашої Suricata, якщо ви використовуєте механізм оновлень suricata-update.
Те, як спрацьовують сигнатури на активність Pegasus можна подивитися на скріншоті нижче. Це наш новий продукт PT Network Attack Discovery , Що виявляє інциденти і допомагає в їх розслідуванні:
В першу чергу нас цікавило виявлення активності Pegasus в мережі і, після ретельного вивчення вихідних кодів і запуску в тестовому оточенні, ми виявили ті мережеві аномалії і артефакти, які явно говорять про присутність цього складного шкідливий в мережі
Крім того, для виявлення можна використовувати такі індикатори компрометації (IC):
MAILSLOT \ 46CA075C165CBB2786 pipe \ pg0F9EC0DB75F67E1DBEFB3AFA2 hxxp: //denwer/pegasus/index.php hxxp: //mp3.ucrazy.org/music/index.php hxxp: //support.zakon-auto.net/tuning/index.asp hxxp : //video.tnt-online.info/tnt-comedy-tv/stream.php

Провайдеры:
  • 08.09.2015

    Batyevka.NET предоставляет услуги доступа к сети Интернет на территории Соломенского района г. Киева.Наша миссия —... 
    Читать полностью

  • 08.09.2015
    IPNET

    Компания IPNET — это крупнейший оператор и технологический лидер на рынке телекоммуникаций Киева. Мы предоставляем... 
    Читать полностью

  • 08.09.2015
    Boryspil.Net

    Интернет-провайдер «Boryspil.net» начал свою работу в 2008 году и на данный момент является одним из крупнейших поставщиков... 
    Читать полностью

  • 08.09.2015
    4OKNET

    Наша компания работает в сфере телекоммуникационных услуг, а именно — предоставлении доступа в сеть интернет.Уже... 
    Читать полностью

  • 08.09.2015
    Телегруп

    ДП «Телегруп-Украина» – IT-компания с 15-летним опытом работы на рынке телекоммуникационных услуг, а также официальный... 
    Читать полностью

  • 08.09.2015
    Софтлинк

    Высокая скоростьМы являемся участником Украинского центра обмена трафиком (UA — IX) с включением 10 Гбит / сек... 
    Читать полностью