Весь світ говорить про атаку на Україну (основний вектор атаки) новим штамом 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.