Технології

Після вірусу Petya буде "МегаЦарБомба": усі подробиці кібератаки в Україні

4 лип•Zrada.today

Весь світ говорить про атаку на Україну (основний вектор атаки) новим штамом ransomware відомого як Petya, NonPetya, etc. Спеціально для zrada.today експерти розповіли, що це за вірус такий, і головне - чого очікувати далі.

Отже, на думку спеціалістів, - в Україні щойно була проведена спецоперація РФ, основною метою якої була демонстрація можливості перетворити світову економіку в "радіоактивний попіл" за допомогою застосування кіберзброї. І вторинної метою було нанесення шкоди політиці і економіці саме України. В результаті чого були зроблені такі висновки?

Подивимося на факти. До антивірусної лабораторії «САЙБЕР ДЕФЕНС ЛАБ» штам вірусу Petya ransomware потрапив ще в 2016 році і був успішно описаний як представник малварного сімейства. Вранці 27 червня 2017 року розпочинається масове зараження комп'ютерних мереж державних і комерційних організацій. За 5-6 годин було уражено до 30% підприємств різної форми власності. В цей день до експертів надійшли перші зразки нового, як ми на початку вважали, штаму #зловред Petya. В результаті дослідження коду "зловреда" фахівцями були встановлені наступні факти та фактори роботи "зловреда" (

далі йде суто технічна частина, важлива насамперед для фахівців кіберзахисту, її можна пропустити, перейшовши відразу до Аналізу ситуації

Технічне пояснення

Існує три модифікації цього "зловреда" (з прив'язкою до історії його виникнення), так звані:

- Red Petya - найперша варіація (версія), яку змогли перемогти завдяки тому, що в коді реалізації алгоритму Salsa20 існувала помилка / прорахунок програмістів, з огляду на якій криптостійкість падала в рази, що дозволило отримати доступ до коду. Сенс полягав у тому, що використовуваний крипто-вектор був зменшений компілятором рівно два рази, що призводило до «обертання» не 32 бітних значень, а 16 бітних. Як підсумок, значущі розряди в криптоключі були лише парні. Також були допущені інші помилки, що допомогло за допомогою генетичного алгоритму обчислити криптоключ за 30 секунд.

- Green Petya - друга реалізація (версія), яка усунула попередній «баг» у коді. Однак як виявилося, не всі проблеми коду були усунені і існувала помилка, в реалізації перекладу LittleEndian -> BigEndian, знову ж зменшувалась криптостійкість.

В даному випадку на отримання ключа йшло близько 3 днів.

- Golden Petya - остання з реалізацій (версія), що атакувала інформаційні системи приблизно 17 липня 2016 року. У цій версії усунутий і цей «недолік», мало того, число «Сигма», яке використовується для ініціалізації матриці шифровки, також було видозмінено. Перше ж поверхове вивчення зловреда показало, що даний продукт намагається мімікрувати під Petya. Ретельне ж вивчення привело команду «САЙБЕР ДЕФЕНС ЛАБ» до висновку про те, що спроби написати зловредів схожим на Petya зроблені нарочито непрофесійно Ми спеціально виділяємо це твердження, так як вважаємо, що тим самим світовій спільноті був донесений головний меседж цієї атаки.

Отже, перша новина:

При знаходженні певних процесів в пам'яті зловредів замість того, щоб встановити в бутсектор шифрувальник, просто знищує бутсектор на ньому. Це можна побачити за наступною ознакою:

perfc_1 (точка входу) виконує всередині себе InitProcess, який в свою чергу виконує FindoutSomeProcesses, ця функція обчислює хеші з імен процесів. При наявності деяких з них виставляється прапор.

Цей прапор впливає на поведінку:

if (! (badFlag & 8) || (result = InstallEncryptor ())! = 0)

result = CorruptVolume ();

Тобто при наявності певного процесу, або помилку установки, перші 10 секторів затираються «сміттям».

Друга новина:

Зловред завжди очікує на те, що отримає достатньо привілеїв, користуючись «ядерним» експлоїтом, однак при недостатній кількості  прав, все ж намагається завдати шкоди, шифруючи файли на диску. Як виявилося, він дбайливо викладає файл README.TXT в кореневому каталозі диска, або щодо місця свого розташування. В який, як виявилося, в текстовому вигляді потрапляє ключ шифрування файлів. Також його можна знайти в бінарному вигляді в тілі трояна:

text:10001BF3 03C                push  offset pszString "MIIBCgKCAQEAxP/VqKc0yLe9JhVqFMQGwUITO6W"...

text:10001BF8 040                 call    edi ; CryptStringToBinaryW

text:10001CC9 034                 push    dword ptr ; hKey

text:10001CCC 038                call    edi ; CryptExportKey

text:10001CCE 020                 test    eax, eax

text:10001CD0 020                 jz      short loc_10001D21

text:10001CD2 020                 mov     esi, ds:CryptBinaryToStringW

text:10001CD8 020                 lea     eax, [ebp+pcchString]

text:10001CDB 020                 push    eax             ; pcchString

text:10001CDC 024                 push    ebx             ; pszString

text:10001CDD 028                 push    1               ; dwFlags

text:10001CDF 02C                 push    [ebp+pdwDataLen] ; cbBinary

text:10001CE2 030                  mov     [ebp+pcchString], ebx

text:10001CE5 030                  push    [ebp+pbBinary]  ; pbBinary

text:10001CE8 034                  call    esi ; CryptBinaryToStringW

Так як ключ використовується в симетричному варіанті, то їм же можна зашифровані файли і розшифрувати, але це за умови, що не виконається фінальна частина шифрування (в бутсекторі).

Третя новина:

Як вже говорилося, помилок в коді багато, з яких:

1. ОС Windows повинна бути встановлена ​​на диск C.

2. При наявності файлу C: \ Windows \ perfc.dat самокопіюваня трояна не відбудеться і як наслідок, не буде зараження.

Четверта новина:

Нас довго мучило питання, чому, для двох необхідних ключів для дешифрування файлів використовуються випадкові числа,

адже за правилами асиметричного шифрування, для отримання гідного криптоключа на сервер повинен бути переданий ключ, зав'язаний на загальний відкритий ключ. Але як виявилося, дані, які копіюються з основної частини в бутсектор, всього лише фікція. Спочатку ми припускали, що робота криптоалгоритму знаходиться в бутсекторі, але ж там не так багато місця для цього. Ще раз вивчивши аргументи, наведені в статті https://securelist.com/petya-the-two-in-one-trojan/74609/ ми переконалися в тому, що даних для остаточного виведення недостатньо і вирішили ще раз проаналізувати роботу нового Petya. Більш детальний аналіз показав, на наш подив, що це різновид Golden Petya, перероблена під Red Petya, мало того, з обрізаними частинами.

Висновок:

1. Ділянка коду, яка відповідає за малювання «черепа», обрізана, це можна бачити по функції, наведеної нижче:

seg000:86E0                       PrintSkuLLAndWait proc near; CODE XREF: MainWindow+6p

seg000:86E0

seg000:86E0                       var_1 = byte ptr -1

seg000:86E0

seg000:86E0 000                 enter   4, 0

seg000:86E4 006                 push   si

seg000:86E5 008                 xor     si, si

seg000:86E7 008                 mov   [bp+var_1], 0

seg000:86EB 008                 jmp    short @@SkipSkuLL

seg000:86ED                         ; ---------------------------------------------------------------------------

seg000:86ED 008                call    GetTimeOfDay

seg000:86F0 008                 lea     cx, [si+1]

seg000:86F3 008                 cmp     ax, cx

seg000:86F5 008                 jbe     short loc_8715

seg000:86F7 008                 mov     si, ax

seg000:86F9 008                 cmp     [bp+var_1], 1

seg000:86FD 008                 jnz     short loc_8703

seg000:86FF 008                 mov     al, 0C0h ; 'L'

seg000:8701 008                 jmp     short loc_8705

seg000:8703                           ; ---------------------------------------------------------------------------

seg000:8703

seg000:8703                          loc_8703: ; CODE XREF: PrintSkuLLAndWait+1Dj

seg000:8703 008                 mov     al, w_red

seg000:8705

seg000:8705                          loc_8705: ; CODE XREF: PrintSkuLLAndWait+21j

seg000:8705 008                 push    ax

seg000:8706 00A                call    PrintSkuLL

seg000:8709 00A                pop     bx

seg000:870A 008                cmp     [bp+var_1], 1

seg000:870E 008                sbb     al, al

seg000:8710 008                 neg     al

seg000:8712 008                 mov     [bp+var_1], al

seg000:8715

seg000:8715                          loc_8715: ; CODE XREF: PrintSkuLLAndWait+15j

seg000:8715 008                 call    CheckFroKeyPresed

seg000:8718 008                 or      al, al

seg000:871A 008                 jz      short loc_86ED

seg000:871C

seg000:871C                         @@SkipSkuLL: ; CODE XREF: PrintSkuLLAndWait+Bj

seg000:871C 008                 push    w_red           ; color

seg000:871E 00A                 call    ClearScreenAndSetCursor

seg000:8721 00A                 pop     bx

seg000:8722 008                  pop     si

seg000:8723 006                  leave

seg000:8724 000                  retn

seg000:8724                           PrintSkuLLAndWait endp ;

​

Як ми бачимо, безумовний перехід (86EB) переставлено, таким чином,

що малюнок черепа не відбудеться ніколи. Досвідчений програміст відразу ж скаже, що цей код створювався компілятором і це місце просто пропало при перекомпіляції. Мало того, творці, швидше за все його б прибрали. Мало того, сама функція малювання черепа використовує покажчики на рядки, в яких знаходяться лінії, ці покажчики вказують в нікуди, що ще раз говорить про те, що дана ділянка в програмі не отримала бажаних даних.

2. Параметр функції, що відповідає за зміну кольору, в деяких місцях виправлений. Так, після успішного введення коду, екран повинен був стати жовтим, як в Gold Petya:

seg000:8212     CodeAcceptedScreen proc near

seg000:8212 000                 push    yellow; color

seg000:8214 002                 call    ClearScreenAndSetCursor

seg000:8217 002                 pop     bx

seg000:8218 000                 push    offset aPleaseRebootYourComputer ; string

seg000:821B 002                 call    PrintString

seg000:821E 002                 pop     bx

seg000:821F 000                 retn

seg000:821F     CodeAcceptedScreen endp

​

Однак, в інших місцях цей колір був поміняний на червоний.

3. Ну і тепер найголовніше. Ті, хто це запустив вірус - і не хотіли відновлення даних. Ще раз звернемося до статті https://securelist.com/petya-the-two-in-one-trojan/74609/ У ній видно, що всередині так званого Onion Sector передається чотири параметри, останній з яких ec_data. Тут, особливо не вдаючись в криптографію, можна сказати, що це і є основа для відновлення стану диска. Без цих даних сервер вимагачів ніколи не відновить пароль від диска. Так ось, в цьому самому місці завжди були присутні нулі, а той код, який «вимагачі» видають за персональний ключ шифрування і який в попередніх версіях формувався на підставі криптографічних операцій, тепер формується за спрощеною програмою:

text:100015AC 9AC               push  3Ch ; dwLen

text:100015AE 9B0                lea     eax, [ebp+personalKey]

text:100015B4 9B0                 push  eax ; pbBuffer

text:100015B5 9B4                 call    GenerateRandom

Висновок, процедуру відновлення даних ніхто не збирався робити і зловмисники не ставили це собі за мету!

4. Ну і нарешті таблиця «Сигма» складається із значень з Petya Gold:

seg000:96DA 01C               mov     [bp+var_11], 31h ; '1'

seg000:96DE 01C               mov     [bp+var_10], 6Eh ; 'n'

seg000:96E2 01C                mov     [bp+var_F], 76h ; 'v'

seg000:96E6 01C                mov     [bp+var_E], 61h ; 'a'

seg000:96EA 01C               mov     [bp+var_D], 6Ch ; 'l'

seg000:96EE 01C                mov     [bp+var_B], 64h ; 'd'

seg000:96F2 01C                 mov     [bp+var_A], 20h ; ' '

seg000:96F6 01C                 mov     [bp+var_9], 73h ; 's'

seg000:96FA 01C                mov     [bp+var_8], 33h ; '3'

seg000:96FE 01C                mov     [bp+var_7], 63h ; 'c'

seg000:9702 01C                 mov     [bp+var_6], 74h ; 't'

Підвівши підсумки, можна зробити наступні висновки:

1. Відсутній механізм відновлення зашифрованих даних і зловмисники не мали мети це робити.

2. Частина коду була написана непрофесійно.

3. Використовувався декомпілятор. Ми знайшли достатньо доказів того, що даний код був запозичений.

Аналіз ситуації

Пропустивши технічну частину і перейшовши до аналізу ситуації, можна сміливо припустити, що розробники вірусу дуже поспішали в написанні частини коду,

а це значить, що терміни «випуску» зловреда були скорочені і було завдання «випустити» його до конкретної дати. Якщо подивитися на календар, то найближчою великою світовою подією є самміт G-20, який починається 7 липня, в рамках якого, мабуть, відбудеться зустріч між главами держав США і Росії.

Здійснюючи невеликий екскурс в історію, на думку спадає одна весела історія, яку хотілося б згадати: в 1966 році в СРСР приїжджав президент Франції Шарль де Голль і Леонід Брежнєв показував йому пуск міжконтинентальної балістичної ракети. Для цього була проведена спеціальна операція під назвою «Пальма-1». "Така ж ракета і на Париж націлена?" - нібито запитав приголомшений видовищем де Голль. Брежнєв посміхнувся і поспішив "втішити" генерала: "Не турбуйтеся. Не ця" ... В результаті цієї спеціальної операції в тому ж році Франція за рішенням де Голля вийшла з військової організації НАТО, а штаб НАТО довелося перевести з Парижа до Брюсселя.

І так перейдемо до нашої теми, виходячи з логіки роботи стандартних антивірусів, які мають на сьогодні максимальне поширення на світовому ринку,

вірусорозробники знали, що епідемія буде зупинена протягом проміжку часу від 4-х годин до 2-х діб. Цей час йде на написання сигнатур провідними антивірусними вендорами і поновлення відповідних баз. Вірусописьменники могли обійти блок на поширення малварі методом перекриптовки коду, але не зробили цього.

За інформацією від https://labsblog.f-secure.com/2017/06/29/petya-i-want-to-believe/ використовуються експлоїти, які були куплені в лютому 2017 року, тобто до того моменту, коли Shadow Brokers виставила ці коди в безкоштовний доступ. Це говорить про те, що розробники або їхні шефи спокійно витрачають великі суми грошей, що виражаються в сотнях тисяч доларів. Розробники малварі слідують алгоритму розробки софта і видно, що частина коду, що відповідає за поширення і шифровку файлів, виконано на високому професійному рівні, а ось частина, що відповідає за монетизацію малварі, виконана зухвало непрофесійно. Перераховані вище факти говорять про те, що ми зіткнулися з вірусом, написаним професійною групою осіб, які не обмежені у фінансуванні. Це може говорити лише про те,

що отримання грошей було ширмою для даної атаки. Причому цей факт навіть і не намагалися прикрити. Це виглядає цілком розумним тільки в одному випадку - якщо це неприкрита загроза з боку Російських спецслужб світовій спільноті. І при цьому полігон України був обраний невипадково. З одного боку Путін «карає» Україну за її погану поведінку, з іншого боку дозволяє світовій антивірусної індустрії підготуватися до цієї атаки і не допустити серйозного поширення на інших територіях. На даний факт так само вказує відсутність заміни коду криптувальника своїми перепакованими деривативами, так як впровадження механізму перепаковки малварі призвело б до неможливості антивірусними компаніями зупинки даного зараження, що призвело б до колапсу світової економіки. На те, що малваропісателі спочатку впровадили механізми зупинки поширення малварі говорить так само ось цей текст-98% sure that the name is is perfc.dll Create a file in c: windows called perfc with no extension and #petya #Nopetya will not run ! Запустивши показово даний вірус в українські інформаційні мережі,

Росія тим самим показує, що вона підготувалася до наступного витка гібридної війни. У разі погроз з боку світової спільноти про посилення проти Росії санкцій, наприклад, у вигляді відключення банківської системи від Свіфта, Путін або його соратники можуть повідомити про те, що група патріотично налаштованих хакерів, які природно не мають ніякого відношення до урядових служб Росії, можуть з патріотичних почуттів повністю розтрощити світову економічну систему.

Чи може хто-небудь цю загрозу дійсно здійснити? На жаль, такий сценарій можливий і це твердження вже не з фантастики. Давайте гіпотетично розглянемо атаку таким зловредом - назвемо його МегаЦарБомба. Береться алгоритм даної проведеної атаки і з зловреда забираються всі баги.

Ось що, теоретично, отримаємо:

- МегаЦарБомба буде перепаковуватись 1 раз в 10 хвилин. Це буде збивати статичну сигнатуру більшості антивірусних продуктів.

- Будуть використані 0-day експлоїти які розроблені хакерами у власних лабораторіях, так і куплені на чорному ринку.

- Точка, з якої почнеться поширення МегаЦарБомби буде не одна, як у випадку з Україною,

а їх буде десятки тисяч.

- МегаЦарБомба не буде морочитися з криптуванням файлів. Вона буде просто безповоротно видаляти файли і «вбивати» машину, так званий екран смерті.

- Недавній випадок виплати викупу південнокорейської хостинг-компанією в розмірі 1 млн. доларів показує, що і сервера на платформі Лінукс також схильні до зараження шифрувальником даних, а значить буде і лінукс версія МегаЦарБомби.

У разі проведення такої атаки, виходячи зі статистики, отриманої в Україні, можна припустити, що буде заражено до 30% всіх комп'ютерних мереж в світі, що призведе до однозначного колапсу не тільки світової економіки, а й до повного всепоглинаючого інформаційного хаосу з усіма витікаючими наслідками. Так що, якщо на саміті G-20 хтось комусь буде загрожувати відключенням Свіфта, в разі поганої поведінки, то цей хтось може показати фото на своєму смартфоні, де будуть стояти симпатичні фігуристі дівчата з написами на джинсах - "Не смішіть наші МегаЦарБомби".

Звіт підготовлений у Антивірусній лабораторії cyd-lab.com.ua за сприяння компанії Romad Cyber ​​Systems Inc.

Читайте ще