Се­год­няшняя статья зат­рагива­ет мало­изу­чен­ную тему — раз­работ­ку вре­донос­ного ПО на язы­ке Go. Обыч­но он исполь­зует­ся для сис­темно­го прог­рамми­рова­ния. Одна­ко мы погово­рим о вирусе, нацелен­ном на облачные инфраструк­туры, которые позици­они­руют­ся как «бес­сервер­ные». Их популяр­ность рас­тет, и, конеч­но же, хакеры ищут под­ходы к их экс­плу­ата­ции.

«Бес­сервер­ный» — это не более чем фигура речи. У сис­тем вро­де AWS Lambda есть сер­верная часть, и она работа­ет на Linux. Одна­ко раз­работ­чиков это в теории не каса­ется. Для них при­мене­ние Lambda эко­номит вре­мя, пос­коль­ку под­дер­жка сис­темы ложит­ся на Amazon. В теории оста­ется толь­ко писать код и не задумы­вать­ся ни о чем. Впро­чем, думать о безопас­ности все же при­дет­ся.

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

Итак, в Cado Labs об­наружи­ли вре­донос, ата­кующий акка­унты AWS Lambda. Он получил имя Denonia — по наз­ванию того домена, с которым обме­нива­ется информа­цией. Вре­донос исполь­зует новей­шие при­емы раз­решения адре­сов для вза­имо­дей­ствия с C2, что поз­воля­ет ему усколь­зать от типич­ных механиз­мов обна­руже­ния.

Denonia в целом безоби­ден — он все­го‑нав­сего гоня­ет прог­рамму для май­нин­га крип­товалю­ты. Рас­простра­нен он пока, по дан­ным Cado Labs, тоже не слиш­ком широко. Одна­ко Denonia демонс­три­рует потен­циал экс­плу­ата­ции окру­жений Lambda, резуль­тат которой может ока­зать­ся и более гнус­ным.

 

Технический анализ

Впер­вые обра­зец Denonia был най­ден на ресур­се с таким хешем SHA-256:

a31ae5b7968056d8d99b1b720a66a9a1aeee3637b97050d95d96ef3a265cbbca

Хо­тя в име­ни фай­ла при­сутс­тву­ет python, на самом деле этот вре­донос написан на Go и, по‑видимо­му, содер­жит кас­томизи­рован­ный вари­ант май­нин­гового соф­та XMRig, а так­же обла­дает дру­гими невы­ясненны­ми фун­кци­ями. Вот что показа­ло более тща­тель­ное иссле­дова­ние.

Во вре­мя динами­чес­кого ана­лиза вре­донос быс­тро прек­ратил выпол­нять­ся и выдал в лог сле­дующую ошиб­ку.

Та­кие перемен­ные окру­жений спе­цифич­ны для «лямбд» — поэто­му отчасти поз­воля­ют судить о показа­телях той сре­ды, для выпол­нения в которой пред­назна­чен этот вирус. Даль­нейший ана­лиз бинар­ника выявил, что это 64-раз­рядный исполня­емый файл ELF для архи­тек­туры x86-64. Вре­донос так­же исполь­зует ряд сто­рон­них биб­лиотек, сре­ди которых есть и AWS Lambda for Go. Она пред­назна­чена для выпол­нения в окру­жени­ях AWS Lambda.

 

Вредоносы на Go

Вре­донос­ное ПО, написан­ное на язы­ке Go, стре­митель­но на­бира­ет популяр­ность. Этот язык прив­лека­ет раз­работ­чиков вре­доно­сов сра­зу по нес­коль­ким при­чинам — в том чис­ле потому, что на нем чрез­вычай­но прос­то писать кросс‑плат­формен­ные исполня­емые фай­лы. К тому же прог­раммы на Go ста­тичес­ки слин­кованы, что облегча­ет деп­лой.

Ви­рус­ным ана­лити­кам, стол­кнув­шимся с мал­варью на Go, нуж­но знать о некото­рых осо­бен­ностях. Из‑за ста­тичес­кой свя­зан­ности бинар­ники получа­ются боль­шими, что зат­рудня­ет ста­тичес­кий ана­лиз. Кро­ме того, Go сво­еоб­разно обра­щает­ся со стро­ками. Они не завер­шают­ся нулем — в отли­чие от того, как при­нято в С‑образных язы­ках. Стро­ки здесь пред­став­ляют собой боль­шой блоб и струк­туру с ука­зате­лем на стро­ку в бло­бе и целым чис­лом, которое озна­чает дли­ну стро­ки. Это может запутать некото­рые инс­тру­мен­ты ста­тичес­кого ана­лиза.

 

Анализ лямбда-вредоносов

У ана­лиза бинар­ника, пред­назна­чен­ного для запус­ка на AWS Lambda, тоже есть ряд осо­бен­ностей.

Denonia явно спро­екти­рова­на для выпол­нения в лям­бда‑окру­жени­ях, но мы пока не зна­ем, как имен­но она раз­верты­вает­ся. Воз­можно, от нее все­го‑то и тре­бует­ся ском­про­мети­ровать дос­туп к AWS и сек­ретные клю­чи, пос­ле чего зло­умыш­ленник вруч­ную раз­вернет ее в ском­про­мети­рован­ном лям­бда‑окру­жении, как уже делали с более прос­тыми скрип­тами на Python.

Инс­тру­мент redress поз­волил выявить некото­рые инте­рес­ные сто­рон­ние биб­лиоте­ки Go, встра­иваемые этим вре­доно­сом. По ним мож­но час­тично вывес­ти, как имен­но он фун­кци­они­рует:

  • lambda — биб­лиоте­ки, образцы и инс­тру­мен­ты для написа­ния лям­бда‑фун­кций на Go;
  • lambdacontext — вспо­мога­тель­ные фун­кции для извле­чения кон­текс­тной информа­ции из зап­роса, акти­виру­юще­го лям­бда‑фун­кцию;
  • aws — общий инс­тру­мен­тарий AWS SDK для язы­ка Go;
  • doh-go — кли­ент DNS over HTTPS на Go, под­держи­вает такие про­вай­деры, как Quad9, Cloudflare и про­чие.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    2 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии