С 28 июля по 8 сентября команда FLARE (FireEye Labs Advanced Reverse Engineering team), входящая в состав компании FireEye и занимающаяся разработкой систем защиты от угроз «нулевого дня» и таргетированных атак, проводила свой второй по счету конкурс в формате CTF (capture the flag). Основной темой заданий был реверсивный анализ, поэтому в первую очередь challenge касался специалистов в области реверсивного анализа и аналитиков вредоносного программного обеспечения, ну и всех остальных специалистов в области компьютерной безопасности тоже. Разбору заданий конкурса и будет посвящена эта статья.

 

Предыстория

Сначала пара слов о самом мероприятии. Конкурс проводился в формате CTF. Флагом, то есть ответом к каждому заданию, был адрес электронной почты в домене flare-on.com, при отправке сообщения на который присылалось письмо со следующим заданием. Все задания, а их было одиннадцать, полностью связаны с реверсивным анализом. Все они были посвящены обходу самописных алгоритмов криптографии и самодельных способов обфускации кода.

Дело осложняло еще то, что применялось большое количество разнообразных платформ и языков (.NET, Android Package, Windows-драйвер, ELF, скомпилированный под ARM), разнообразные способы конвертации основного кода в оболочки другого кода (нпример, код Python, конвертированный в EXE, скрипт AutoIt, конвертированный в EXE), а также немного стеганографии и анализа трафика. В общем, все те вещи, с которыми может столкнуться аналитик вредоносного кода в течение своего рабочего дня, — все перечисленные методы злоумышленники активно применяют для обхода антивирусных решений. Но довольно слов, давай перейдем непосредственно к заданиям и посмотрим, как надо было их проходить.

 

FLARE-On Challenge 1

Первое задание можно получить по этой ссылке. Как и положено, оно очень простое. Поэтому подробно останавливаться на нем не будем. При запуске программы она ожидает ввод строки в стандартный поток ввода. Далее строка сравнивается с эталоном, жестко прописанным в коде. Но предварительно введенная строка преобразуется путем гаммирования (в нашем случае в качестве операции суммирования открытого и закрытого текстов используется операция «исключающее или», то есть xor) с ключом 0x7d.

Для того чтобы вычислить необходимый адрес электронной почты, достаточно просто проделать операцию «исключающего или» с тем набором байтов, который указан в коде и с которым сравнивается после преобразования введенная строка. И это возможно благодаря тому, что операция xor обратима и ключ также известен (рис. 1).

Рис. 1. Алгоритм первого задания
Рис. 1. Алгоритм первого задания

Чтобы не переводить вручную, я набросал небольшой скриптик на Python, помогающий получить искомый адрес электронной почты:

ab = bytearray(open('i_am_happy_you_are_to_playing_the_flareon_challenge.exe', 'rb').read())
begin = 0x540
for i in xrange(begin, begin+24):
    ab[i] = (ab[i] ^ 0x7d) % 256
print str(ab[begin:begin+24])

В результате получаем ключ, а в итоге и второе задание.

 

FLARE-On Challenge 2

Второе задание уже придет по почте. После непродолжительного исследования выясняем, что его суть такая же, как и в первом, — вводимая строка сравнивается с эталонным значением (последовательностью байтов) после определенного преобразования. На рис. 2 как раз указан тот самый алгоритм, по которому введенная строка преобразуется в последовательность байтов. Попробуем в нем разобраться.

При анализе кода можно увидеть, что над каждым символом строки производится две основных операции: «исключающего или» и циклического сдвига влево. Так как обе эти операции обратимы, при знании ключа для «исключающего или» и количества битов для сдвига (а в данном случае оба этих значения известны, потому что жестко указаны в самом коде: 0x01c7 и от 0 до 2) можно получить искомую строку, то есть адрес электронной почты.

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

Вариант 1. Оформи подписку на «Хакер», чтобы читать все статьи на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта, включая эту статью. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи одну статью

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


1 комментарий

Подпишитесь на ][, чтобы участвовать в обсуждении

Обсуждение этой статьи доступно только нашим подписчикам. Вы можете войти в свой аккаунт или зарегистрироваться и оплатить подписку, чтобы свободно участвовать в обсуждении.

Check Also

Безумный олдскул. Самые необычные приставки и игровые аксессуары из прошлого

Если ты думаешь, что Guitar Hero, Kinect или Wii Remote — это странно, то спешим тебя заве…