Читаем между строк или Гибридная война в киберпространстве
Весь мир говорит об атаке на Украину (основной вектор атаки) новым штаммом 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
Так как ключ используется в симметричном варианте, то им же можно зашифрованные файлы и расшифровать, но это при условии, что не выполнится финальная часть шифрования (в бутсекторе).
Третья новость:
Как уже говорилось, ошибок в коде много, из которых:
- ОС Windows должна быть установлена на диск C:.
- При наличии файла 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’
Подведя итоги, по выше изложенному, возможно следующее следующие выводы:
- Отсутствует механизм восстановления зашифрованных данных и злоумышленники не имели цели это делать.
- Часть кода была написана непрофессионально.
- Использовался декомпилятор. Мы нашли достаточно доказательств того, что данный код был заимствован.
Пропустив техническую часть и перейдя к анализу возможно сделать выводы, что у «писателей» была сильная спешка, в написании части кода, а это значит, что сроки «выпуска» зловреда были сокращены и была задача «выпустить» малварь к конкретной дате.
Если посмотреть на календарь, то ближайшим крупным мировым событием является саммит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. для «УК»
Tweet