Сегодня мы поделимся итогами четвертой по счету программы летнего обучения Summ3r 0f h4ck в нашей компании в отделе исследований.
За прошлые годы результаты можно почитать тут: 2016, 2017. Отдела аудита в отдельной статье тут и совместной статье за 2018.
Итак начнем с цифр, фактов и другой интересной информации.
- 76 заявок со всей России и ближнего зарубежья
- 10 отобранных кандидатов
- Кандидаты представляли такие города как Саратов, Калининград, Ростов-на-Дону, Москва, Владивосток, Санкт-Петербург, Краснодар.
- Университеты: СГУ (им Чернышевского), БФУ им И. Канта, ЮФУ, НИУ ВШЭ МИЭМ, Дальневосточный федеральный университет (ДВФУ), СПбГЭТУ, МТКП МГТУ им. Н. Э. Баумана, Санкт-Петербургский политехнический университет Петра Великого, КрУ МВД РФ.
За период обучения от нашего отдела с 15.07 по 15.08 были прочитаны лекции на такие темы как:
- Введение в поиск уязвимостей в бинарных приложениях и по исходному коду
- Статический анализ безопасности больших проектов с открытым исходным кодом
- Восстановление символьной информации в процессе reverse engineering
- Безопасность прошивок (о UEFI BIOS)
- Знакомство с инструментом бинарного анализа Ghidra
- Фазинг с помощью KLEE, libfuzz, AFL
- Введение в атаки по сторонним каналам на микроархитектуру
Также один из студентов выступил с внутренней лекцией по теме “Обзор защиты с помощью виртуализации кода на примере VMProtect”. Спасибо ребятам за интересные вопросы, бурный интерес к лекциям. Отдельно стоит отметить, что посещать лекции могли студенты обоих отделов и участвовать в мини-CTF, о котором более подробно можно будет прочитать в статье от отдела аудита.
Что касаемо тем этого года, то были такие:
- Трассировщик на базе аппаратных возможностей Intel процессора
- Плагин для Clang Analyzer
- Расширение возможностей Pigaios
- Фреймворк для исследования безопасности прошивок uefi
- State-based API fuzzing
- Side-channel атаки на микроконтроллеры
- Фреймворк для автоматического восстановления имен функций
- Адаптация AFL фазера для работы с сетевыми приложениями
- Декомпиляция eBPF в Ghidra
Стоит отметить, что в процессе работы над темой сама тема и ее направление порой эволюционировали и видоизменялись по тем или иным обстоятельствам. Можно сказать, что все ребята молодцы и постарались выжать максимум за этот довольно небольшой срок программы. Хотя самое главное это приобрести новые знания и опыт (и знакомства).
Важно понимать, что наша программа Summ3r 0f h4ck это обучающая программа, а не программа стажировки (хотя ради простоты некоторые ее так и называют). В процессе, ребята делают совместно с наставниками тему проекта, слушают лекции, решают разные лабы, получают различные советы по разным аспектам ИБ и, конечно, ответы на свои вопросы.
Перейдем как всегда к нередактируемым отзывам наших студентов о их месяце внутри нашей компании (кто их захотел публиковать).
Вопросы для мини-интервью были такими
- Почему решили стажироваться именно в Digital Security? Чем привлекла вас компания?
- Понравилась ли стажировка? Что особенно запомнилось? Насколько реальность совпала с вашими ожиданиями?
- Расскажите о своей задаче/задачах.
- Показались ли интересными задачи, над которыми вы работали в процессе стажировки? Было ли что-то, чем вы хотели заняться, но не удалось?
- Готовы ли вернуться в компанию на стажировку или на работу?
И вот какие ответы дали некоторые из студентов
Новосельцева Алёна
- Digital Security – ведущая компания в России в области ИБ с самой крупной и дружной командой реверсоров. Всегда хотелось попасть в среду людей, близких тебе по духу. Здесь настоящие профессионалы, и у них многому стоит поучиться. Тем более, что в моем крае нет подобных компаний и вообще сообществ, которые хоть как-то бы касались реверс-инжиниринга.
- Стажировка очень понравилась. Самое потрясающее – атмосфера, в которой работает компания. Особо внимательные ребята согласятся со мной – на столах у сотрудников не было ни единой бумажки, кроме собственного блокнота с мыслями и идеями. Это о многом говорит, и огромнейшая редкость в нашем бюрократическом мире!
Тебе предоставляют наилучшие условия для работы – тишина, уют, и самое главное – люди. Сотрудники и их исследования очень вдохновляют. Очень понравилось работать над проектом в команде с наставниками – мы решали проблемы и днем, и ночью, вместе искали решения, вместе радовались, когда что-то получалось. Я давно не испытывала такого счастья. Саша, Коля – низкий вам поклон. - Моей исследовательской работой была разработка на языке Sleigh системы трансляции байткода eBPF в pCode для возможности проводить дизассемблирование, а также декомпиляцию. Нужно было разработать расширение для Ghidra, которое позволило бы дизассемблировать и декомпозировать eBPF-программы. Пришлось освоить язык процессорной спецификации Sleigh, разобраться в особенностях архитектуры eBPF и взаимодействии eBPF-программ с ядром, получить опыт разработки расширений для Ghidrа и работы с Eclipse, и многое другое
Задача выполнена успешно! Проект находится в открытом доступе и опубликован на Github. Результат можно протестировать любому желающему, скачав сборку расширения из репозитория по ссылке ниже. Более подробно можно ознакомится в отдельной статье. - Да, задачи были сложными и интересными, безумно понравился сам процесс разработки и работа в команде. Очень хотелось бы изучить тему автоматического анализа программ и поиска бинарных уязвимостей еще глубже, интересно символьное исполнение.
- С огромным удовольствием! Поскольку в университете предстоит еще учиться несколько лет, то буду готовиться для следующей стажировки! На работу – безусловно и по скорее бы уже
Буковский Виктор
Решил стажироваться в Digital Security потому, что это компания являлась организатором моей любимой конференции по ИБ — ZeroNight.
Стажировка запала в душу. Все прошло как нельзя лучше. Тот самый редкий случай, когда реальность превзошла мои ожидания. Особенно запомнилось то, как в последний день стажировки провели викторину на знание компании и экстрасенсорные способности :), за победу в которой получил коробку печенюх и футболку.
Моя задача заключалась в написании плагинов для IDA PRO 7 при помощи Hex-Rays API. Задачей одного из них было выведение в специальную таблицу (Рис. 1) функций, которые в себе содержали небезопасные на усмотрение исследователя функции (тавтологию обойти не удалось). Целью другого, можно сказать, основного на этой стажировке плагина, было восстановление имен функций из стрипнутых ( -s ) исполняемых файлов при помощи вспомогательной информации. В моем случае имена функций мы брали из параметров, которые передавались функции ведения лога (Рис. 2).
Задачи для меня были абсолютно нетривиальны, что только подогревало интерес к их выполнению. По иронии судьбы я был одним из немногих счастливчиков, которым выпала честь работать с тремя кураторами. В начале это был Артем, который ввел меня в эту тему, подготовил Bitbucket для хранения проекта, доску в Trello, с начальными задачами и целями, и также рассказал, как работать с языком разметки Markdown. Затем моим куратором стал Дмитрий Евдокимов, который в недалеком прошлом уже имел дело с восстановлением имен функций, навел меня на нужные мысли и более глубоко раскрыл проблему. Ну и крайним моим куратором стал Борис Рютин, человек, проводивший со мной собеседование и благодаря которому я и оказался на этой стажировке. С ним я уже получал точные задачи, направленные на получение необходимого результата. Все происходило в очень бодром темпе, и все, что мы запланировали, было осуществлено, за что еще раз огромное спасибо.
На счет стажировки не уверен, так как месяца в этой компании мне показалось слишком мало. Хочется оставаться в ней как можно дольше, поэтому да, я готов вернуться на работу.
Ссылка на проект: https://github.com/o0Starley0o/HexRaysPlugins
Пожелал остаться неизвестным
- ZeroNights / были знакомые
- Естественно, очень понравилось. Ожидания были оправданы и даже больше.
Первое что стоит отметить, это тема, которой я занимался. Я планировал посмотреть что-то, что не смог бы (не стал бы) делать в домашних условиях и, собственно, тема идеально этому соответствовала.
Хотя я не могу сказать, что уделил ей достаточно много времени, результатом и полученными в процессе знаниями я полностью доволен (по факту — чуть больше недели и основной результат был получен=).
Радует, что на любой вопрос вопрос по теме можно было сразу получить ответ у наставника (и ответный вопрос "хочешь попробовать/изучить подробнее?").
Второе — это много интерестных людей вокруг, не только из сотрудников, но и из стажеров, по которым можно судить о будущем ИБ.
Третье — пентестеры сделали очень крутую подборку машин с уязвимыми настройками/сервисами (от xss тасков с ботами, поднятия привелегий, до последовательного захвата доменного админа).
Всем позволили играть и это стало отличным развлечением на еще 2 недели. Те, кто не уделил ей достаточно любви, очень сильно просчитались.
Четвертое — лекции, было приятно заполнить пробелы в знаниях или открыть что-то новое для себя.
Реверсерские лекции почти все были очень серьёзные, у пентестеров раздавали еду и были интерактивные задания. - Задача о снятии трассы исполнения в режиме SMM (ring-2). Включить трассировку из менее привелигированного режима нельзя, нужно чтобы сам код SMM её включил. Естественно, он этого не умеет делать.
Сделали патч, закинули его в SMM (для этого потребовалось перепрошить UEFI) и уже с помощью существующих средств (WinIPT) смогли записывать то, как происходит исполнение кода в SMM. - Сейчас такое огромное количество технилогий, что невозможно просто брать и пробовать все подряд. Всегда нужен стимул или задача, которые станут причиной взглянуть на что-то новое.
Потом уже появляюется естественное желание "А могу ли я использовать эту технологию для своих задач? может с ней будет проще/эффективнее?".
Поэтому я доволен своей темой.
Стоило все-таки довести проект до хотябы примитивного фаззера. Это еще одна из тех вещей, что у меня не получается попробовать без внешнего стимула. - no comment
Хабаров Олег
- По-моему мнению, в России компании, которые используют реверс-инжинииринг в профессиональной деятельности — единицы, а те, которые используют его для нахождения уязвимостей, а не для анализа вирусов, еще меньше — Digital Security и Positive Technologies.
- Стажировка помогла сформировать ориентиры, куда стоит двигаться, если хочешь быть ресёрчером, а не абстрактным "специалистом по ИБ". Запомнилось какие были относительно простые лекции по пентесту и грузящие голову лекции от реверсеров.
- Моей задачей была доработка инструмента реверс-инжинириинга Pigaios. Его цель — нахождение функций open-source библиотек в статически скомпилированном бинарнике путем сравнения. Однако я занимался не самим механизмом сравнения, а доработкой той части функциональности, которая извлекала из исходников определения структур, типов, объединений и т.п. В итоге я доработал парсер этих элементов и добавил поддержку для проектов, которые собираются с помощью make. Решил не заниматься интеграцией этих доработок в Pigaios, а создать отдельный инструмент, потому что его отдельно разбирать легче, чем копаться в коде Pigaios.
- Не скажу, что мне понравилась задача, но она позволила улучшить понимание кода на Си, и благодаря этой задаче я узнал, что можно заниматься парсингом си-кода не разбираясь в теории компиляторостроения, а просто использовать libclang. Поэтому вряд ли буду дорабатывать свой инструмент. Если кто захочет, то я старался писать чисто и оставлял везде комментарии.
Благодаря лекциям от реверсеров я осознал чем хочу заниматься, а именно динамическим бинарным анализом (фаззингом, инструментацией). - Буду рад, если в будущем получиться устроиться на работу в Digital Security, так как там очень много профессионалов своего дела.
Ссылка на проект: https://github.com/Barkhat26/decl-exporter
Забелина Маргарита
- Я уже прежде проходила стажировку в другой компании в качестве сотрудника службы ИБ. Там мне приходилось больше заниматься вопросами веб-безопасности. Но в цтф команде я всегда решала реверсные таски, часто из интереса читала про бинарные атаки. Мне стало интересно посмотреть как работают реверсеры, посмотреть, как я буду справляться с такой работой. Плюс интересно было посмотреть на DSEC изнутри.
- Стажировка хорошая. Больше всего понравились лекции. Т.к. почти всё время ты занят проектом, возможность отвлечься и порешать маленькие таски, очень освежает голову. Плюс я узнала много новых вещей, где-то закрепила старые знания.
Ожидания/реальность вполне совпали. - Я занималась реализаций чекера для Clang Static Analyzer. Задача не рокетсаинз, но полученные наработки, я могу применить для своей дипломной работы. В первую очередь мне предстояло познакомиться с инструментом, посмотреть что может clag'овская либа, научиться собирать простые тестовые чекеры. Далее было решено, что я возьмусь за реализацию чекера для детекта integer overflow. Идея такого чекера была указана в списке потенциальных чекеров clang'а, я подумала, что вещь полезная и взялась. Мною был выбран подход с анализов AST и проверкой cast'ов. Но такое решение определяет только потенциальные переполнения. Для точной проверки можно использовать taint анализ и SMT solver'ы. Готовых инструментов для работы с taint'ом в либе нет, были наработки других исследователей, которые я взяла в основу. К сожалению, я не успела закончить свою задачу за месяц, но я собираюсь закончить проект в рамках дипломной работы.
- Сама идея, что ты реализуешь то, что потом будет применимо и полезно в реальной работе, уже подогревает интерес к проекту. Хочу переписать taint чекер, чтобы потом его можно было использовать не только в моём проекте.
- Команда DSEC отличная, все специалисты крутаны. На работу я бы пришла. Но на стажирвоку снова не хотела бы, менторство подкачало на мой взгляд. Учитывая что у нас был всего месяц, в нужное время от ментора фидбека я не получала. И потратила много времени на самостотельные копания, хотя могла получить ответ от опытного наставника. Просто если нет менторства, то зачем мне стажировка, я могу сама дома пилить свой проект.
Ссылка на проект: https://github.com/dR3m/IntOverflow-CSA-plugin
Санкин Никита
- Digital Security привлекла темами проектов и отзывами участников с предыдущих стажировок, а также множеством статей на Хабре, написанных сотрудниками. Вообще, из поста на Хабре я и узнал о стажировке. Ещё было желание сменить обстановку, пройдя стажировку в другом городе и попробовав проекты, которыми не занимаюсь на основной работе.
- Стажировка прошла не так, как я ожидал, по большей части благодаря неудачному съёму квартиры, что помешало сосредоточиться на проекте и сделать всё в срок. Кроме того, поначалу смутило, что задача была больше про написание кода, нежели про исследование, но тут наверное дело в несовпадении ожиданий и других личных факторов
- Нам требовалось реализовать фреймворк по тестированию уязвимостей прошивки UEFI на основе существующего решения chipsec. Проблема была в том, что поддерживать код chipsec трудно, поэтому нужно было всё красиво переписать на python 3.x и, возможно, добавить какой-то новый функционал.
- В задаче мне показалось интересным не столько писать код, сколько изучать технологии, с которыми приходилось работать. Хотелось дописать проект до стадии HAL (hardware abstraction layer) и доскональнее изучить работу hardware-устройств и их интерфейсов. К сожалению, этому помешали причины, указанные в пункте 2, но я планирую продолжить проект и после стажировки.
- Готов вернуться на стажировку либо чтобы доделать и показать нынешний проект, либо если встретится интересная идея. Однозначно рассмотрю компанию одной из первых при трудоустройстве в Питере, но на данный момент мне это не нужно.
Комаров Никита
- Я уже какое-то время следил за Digital Security, началось это с момента, когда я впервые услышал о Zeronights, подумал, что такое может сделать только действительно крутая компания. Не сразу, но заметил, что проводятся стажировки, однако поехать сначала не смог. В этом же году случайно увидел, что на рекламном постере прямо по центру находится мой неизвестно как попавший туда хороший друг, подумал, что это отличный знак, чтобы, наконец, посетить стажировку.
- Вышло действительно интересно, а главное время постоянно было чем-то наполненно. Запомнились, конечно, доклады и сервис с вулнбоксами. На самом деле не ожидал, что будет так много всего, каждый вечер было чем заняться помимо основного проекта, это хорошо разбавляло атмосферу и давало разнообразие в задачах.
- В рамках стажировки моей задачей было написание фреймворка по тестированию безопасности uefi. Тема интересная, особенно учитывая то, что в рамках обычной деятельности мне еще не приходилось так глубоко погружаться на этот уровень абстракции.
- Задачи были, безусловно, интересными, скорее всего, от того, что приходилось узнавать много нового или давным давно забытого за ненадобностью старого. К сожалению, были вещи, которые не успелись, зато теперь есть стимул продолжать работу над проектом в течение года.
- Надеюсь посетить стажировку и в следующем году. Спасибо вам большое.
Уваров Кирилл
- Читаю блог компании на Хабре. Поэтому это первый вариант был, где можно было пощупать сферу изнутри
- Стажировка понравилась. Понравилась атмосфера очень. Я раньше не был связан с безопасностью никак. Поэтому очень хотелось все самому потрогать "руками".
- Занимался атакой по сторонним каналам на микроконтроллеры. Реализация криптоалгоритмов, анализ энергопотребления и получение ключа.
- Задача очень близка к моим интересам, поэтому занимался темой с удовольствием.
- Благодаря стажировке, я знаю, куда надо развиваться, так что однозначно готов вернуться в компанию:)
Заключительное слово
Во время летней программы случались и форс-мажорные обстоятельства, от которых никто не застрахован, но все студенты отнеслись к этому с пониманием (за что им спасибо), а мы взяли себе это на карандаш, чтобы в будущем такое минимизировать.
Ждите анонса Summ3r 0f h4ck 2020 в следующем году!
P.S. Позже по ряду проектов ребят мы опубликуем их отдельные технические статьи.