Читаем между строк или Гибридная война в киберпространстве

Весь мир говорит об атаке на Украину (основной вектор атаки) новым штаммом ransomware известного как Petya, NonPetya, etc. Сразу изложим основную идею данной статьи и далее перейдем к ее обоснованию, подтверждая каждое предположение фактами. Итак, по нашему мнению, – в Украине, некой спецслужбой, некоего государства была проведена спецоперация, основной целью которой была демонстрация возможности превратить мировую экономику в “радиоактивный пепел” посредством применения кибероружия.

И вторичной целью было нанесение вреда политике и экономике именно Украины.

Cui Prodest?

Здесь пусть каждый для себя решит. В результате чего были сделаны такие выводы? Посмотрим на факты чем была атакована Украина.

В антивирусную лабораторию «САЙБЕР ДЕФЕНС ЛАБ», штамм вируса Petya ransomware попал еще в 2016 году и был успешно описан нашей секвенцией (малварное семейство). Забегая вперед отмечу тот факт, что коммерческие компании, защищенные нашим антивирусным решением, в этой эпидемии не пострадали.

Утром 27 июня 2017 года начинается массовое заражение компьютерных сетей государственных и коммерческих организаций. За 5-6 часов было поражено до 30% [2] компаний разных форм собственности. В этот день к нам поступили первые образцы нового, как мы в начале считали, штамма зловреда 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 [esi+14h] ; 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] под названием «Пальма -1». "Такая же ракета и на Париж нацелена?" — будто бы спросил потрясённый зрелищем де Голль. Брежнев улыбнулся и поспешил "утешить" генерала: "Не беспокойтесь. Не эта" …

В результате этой специальной операции в, том же году, Франция по решению де Голля вышла из военной организации НАТО, а штаб НАТО пришлось перевести из Парижа в Брюссель.

И так перейдем к нашей теме, исходя из логики работы стандартных антивирусов имеющих, на сегодняшний день, максимальное распространение по мировому рынку, вирусописатели знали, что данная эпидемия будет остановлена в течении промежутка времени от 4-х часов и до 2-х суток. Это время уходит на написание сигнатур ведущими антивирусными вендорами и обновления соответствующих баз.

Вирусописатели могли обойти блок на распространения малвари методом перекриптовки кода, но не сделали этого.

По информации от labsblog.f-secure.com используются эксплоиты, которые были куплены в феврале 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 won’t run! 

Запустив показательно данный вирус в украинские информационные сети, Россия тем самым показывает, что она подготовилась к следующему витку гибридной войны. В случае угроз со стороны мирового сообщества об усилении против России санкций, например, в виде отключения банковской системы от свифта, Путин или его соратники могут сообщить о том, что группа патриотично настроенных хакеров, естественно не имеющих никакого отношения к правительственным службам России, могут из патриотических чувств полностью уронить мировую экономическую систему.

Может ли кто-либо эту угрозу действительно осуществить?  К сожалению такой сценарий возможен и это утверждение уже не из области фантастики. Давайте гипотетически рассмотрим атаку таким зловредом – назовем его МегаЦарьБомба.  Берется алгоритм данной проведенной атаки и из зловреда убираются все баги. Вот что, теоретически, получим:

–  Распространяющийся МегаЦарьБомба будет перепаковываться раз в 10 минут. Это будет сбивать статическую сигнатуру большинства антивирусных продуктов.

–  Будут использованы 0-day эксплоиты как разработанные атакующими в собственных лабораториях, так и купленные на черном рынке.

–  Точка из которых начнется распространение МегаЦарьБомбы будет не одна, как в случае с Украиной, а их будет десятки тысяч.

–   МегаЦарьБомба не будет заморачиваться с криптовкой файлов. Она будет просто безвозвратно удалять файлы и «убивать» машину, так званый экран смерти.

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

В случае проведения такой атаки, исходя из статистики, полученной в Украине [2], можно предположить, что будет заражено до 30% всех компьютерных сетей в мире, что приведет к однозначному коллапсу не только мировой экономики, но и к полному всепоглощающему информационному хаосу со всеми вытекающими последствиями.

Так, что если на саммите G-20 кто-то кому-то будет угрожать отключением свифта, в случае плохого поведения, то этот кто-то может показать фото на своем смартфоне где будут стоять пару симпатичных фигуристых девушек с надписями на джинсах – Не смешите наши МегаЦарьБомбы.

P.S. В следующей статье мы затронем вопросы восстановления информационных систем после подобных атак, а главное внимание уделим вопросу – как не допустить и блокировать подобные атаки на Ваши информационные системы, опишем методы и средства, с помощью которых возможно добиться достойной информационной защиты. 


[1]. Хромова Е.Б. Шарль де Голль в СССР: к юбилею визита 1966 года // Вестник Пермского национального исследовательского политехнического университета. Культура. История. Философия. Право. – 2016. – № 3. – с.30–40. Khromova E.B. Charles de Gaulle in USSR: the anniversary of the visit in 1966. Bulletin of Perm National Research Polytechnic University. Culture. History. Philosophy.Law. 2016. No. 3. Pp. 30–40.

[2]https://forum.pravda.com.ua/index.php?topic=971772.0;viewresults

 

Отчет подготовлен антивирусной лабораторией cyd-lab.com.ua при содействии компании Romad Cyber Systems Inc. для «УК»

You may also like...