Результаты летней стажировки в Digital Security. Отдел исследований

a900648a7388417aafd61e00b6313897.png

Наша компания в конце апреля этого года объявила об открытой стажировке в трех самых технических отделах: исследований, анализа защищенности и безопасности бизнес-систем. Этот опыт был для нас новым, и хочется поделиться им.

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

Краткая информация
Мы — отдел исследований (Исследовательский центр) компании Digital Security. В первую очередь, мы занимаемся задачами reverse engineering, поиском уязвимостей в бинарных приложениях и написанием эксплоитов. Если вы любите сидеть в дизассемблере или отладчике, если хотите автоматизировать различные задачи для поиска уязвимостей, если вам нравится писать fuzzers, то вы близки нам по духу.Введение
К нам в отдел поступали заявки на стажировку как от студентов, так и от тех, кто твердо стоит на ногах, но хочет «прокачать» свои навыки или попробовать силы в сфере ИБ. Ведь после каждого шумного «взлома» наша сфера становится всё популярней :)

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

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

На темах остановимся подробнее. Перед запуском программы стажировки мы внутри своего отдела провели мозговой штурм и сгенерировали темы, соответствующие следующим критериям:

  1. по окончанию стажировки ребята могли опубликовать результаты своих исследований (github, gitlab и другие репозитории для проектов с открытым исходным кодом) и/или выступить перед публикой на конференции
  2. связаны с реальными практическими задачами

По результатам ответов на вопросы мы предлагали стажёру тему (или несколько), наиболее подходящую под его навыки и интересы из постоянно обновляемого перечня. В случае, если задача не устраивала или кто-то просил «огласить весь список», мы шли навстречу.

Если честно, большинство стажёров ожидало от нас заданий по поиску «крутых» уязвимостей по типу Heartbleed, Ghost и т.п. Однако, чтобы найти такие ошибки, недостаточно запустить какую-нибудь готовую программу, надо ещё разобраться в механике её работы. Ведь со временем у каждого уважаемого исследователя появляется свой набор ПО, как из готовых, но «доведенных до ума» под свои задачи инструментов, так и написанных лично. Также важно, напомним, чтобы исследование можно было делать сразу публичным (это уже решали сами стажеры).

В рамках программы было проведено несколько митапов. Часть из них была основана на старых выступлениях, но обновлена под текущие реалии или дополнена демонстрацией непубличных уязвимостей ;):

  • «No Symbols =(» (Дмитрий Евдокимов и Георгий Носенко)
  • «Light and Dark side of Code Instrumentation» (Дмитрий Евдокимов)
  • «Testing CAN network with help of CANToolz» (Алексей Синцов)
  • «The boot process in x86-compatible PC» (Александр Ермолов)
  • Митапы от коллег из отдела аудита

А в середине лета уже сами стажёры провели для нас подобный митап, представив свои результаты. По окончанию каждого выступления мы с коллегами и другими стажёрами задавали вопросы, благодаря этому появлялись другие пути решения поставленной задачи и новые темы для будущих исследований.
d41869b93add4ecf92c88cf90c59e7e0.JPG

Часть ребят ещё не до конца реализовала намеченные планы, но это не означает, что они не справились. Просто некоторые темы оказались шире, и они захотели реализовать дополнительные задачи в них. Мы довольны результатами и будем работать над качеством процесса стажировки. Некоторым стажёрам предложили начать работать в нашей компании уже сейчас.

Руководили стажёрами:

  • Дмитрий Евдокимов d1g1
  • Георгий Носенко
  • Егор Литвинов Xarlan
  • Борис Рютин dukebarman
Вопросы для мини-интервью
  1. Почему решили стажироваться именно в DSec? Чем привлекла вас компания?
  2. Понравилась ли стажировка? Что особенно запомнилось? Насколько реальность совпала с вашими ожиданиями?
  3. Расскажите о своей задаче/задачах.
  4. Показались ли интересными задачи, над которыми вы работали в процессе стажировки? Было ли что-то, чем вы хотели заняться, но не удалось?
  5. Готовы ли вернуться в компанию на стажировку или на работу?

Ниже представлены ответы некоторых стажёров.

Localhost стажёры

Игорь Кириллов (Студент 4 курса Санкт-Петербургского Политехнического Университета)


c58041380d204b398570a6b0c2e58bbe.JPG

Тема: «Изучить возможности плагина hexrays-tools для дизассемблера IDA Pro, портировать его для новых версий IDA Pro. Рассмотреть возможность переноса плагина с C++ на IDAPython.»

Интервью:

  1. Мне нравится разбираться в устройстве сложных систем. И хотя программировать тоже интересно, но меня больше привлекают внутренние процессы, происходящие в ОС, устройство ОС. Мне кажется, лучшее место для развития и применения моих интересов — это исследовательский отдел DSec. К тому же, DSec — компания международного уровня, а в сфере информационной безопасности в России этим званием разве что Лаборатория Касперского может похвастаться.
  2. Понравилось. Больше всего запомнилось собеседование. Я готовился к тому, что будут проверять мои знания, но я получил их посредством самообразования, поэтому мне было сложно оценить стартовые требования. Однако, после рассказа о том, как я обходил защиту у игрушки, которая шифрует трафик и не дает модифицировать код, мы сразу перешли к обсуждению возможных тем для стажировки и того, что стоит изучать для дальнейшего развития. Здорово, что есть возможность показать себя в деле, а не в неких абстрактных условиях. Настроен был, что будет трудно, и действительно, сначала, когда приступил к заданию, «утопал» в цепочках функций и структур. Смотрел на код и пытался понять, что он делает. Залезал в функции и определения участвующих структур, понимал, что и они из чего-то состоят. И так далее по рекурсии…
    У IDA еще есть особенность в виде не слишком качественной документации, а также в структурах, название которых мало о чём говорит. Тем не менее, прошло несколько дней и все эти tinfo_t, vdui_t, cvar.idati и т.д. стали моими лучшими друзьями.
  3. Нужно было портировать плагин-победитель соревнования, устраиваемого разработчиками IDA. Ну и задуматься о переносе его на Python. Плагин был заточен под версию 6.3 (Hex-Rays 1.8) и при попытке скомпилироваться под 6.6 выдавал около 500 ошибок. Еще штук 50 набегало при переносе с 6.6 на 6.8. В общем, починить его удалось за 2 недели, но поскольку код был практически нечитабельным (одни hardcoded вызовы функций чего стоили) и плохо расширяемым, то я взялся за написание своей версии на Python, добавив несколько существенных изменений. На данный момент, плагин уже обладает следующими возможностями:
    • Позволяет интерактивно реконструировать структуры и классы, а также помогает разбираться в назначении полей.
      be6c1ce515154029ab854450ae3a2698.jpg

    • Создает список классов, позволяющий держать перед глазами виртуальные функции, а также централизовано редактировать их имена и сигнатуры.
    • При смещениях, указывающих за пределы структуры, составляет список из подходящих расширенных структур и заменяет код на CONTAINING_RECORD макро (Список можно составить в том используя любую Type Library).
    • Строит симпатичный граф из взаимосвязанных структур и позволяет перемещаться по нему.
      a3b4518cc8cf4f2bb89f855285277b3e.jpg

    • Множество прочих вспомогательных возможностей.

    Сам плагин будет представлен на конференции ZeroNights 2016
  4. Поскольку IDA — основная программа для reverse engineering, и хочется хорошо знать её возможности, я выбрал задание по починке полезного C++ плагина для свежих версий IDA. И в дальнейшем перенес его на Python, изрядно усовершенствовав. Задание сильно увлекло и приходилось сдерживать себя, чтобы не заниматься этим с утра до вечера. Хотелось бы поискать уязвимости в реальных программах (особенно в драйверах и ООП коде, где можно заодно всесторонне протестировать мой плагин), но пока нужно «переварить» некоторое количество литературы и прочей информации.
  5. Однозначно — да.

Михаил Колесов (Студент 6 курса в СПбГЭТУ «ЛЭТИ»)


f2065e95955b4f098a478279aef9d057.JPG

Тема: «Разработка семантического движка поиска ROP-гаджетов на основе Фреймворка Triton.»

Интервью:

  1. Почитал описание того, чем занимается отдел исследований. И понял, что как раз тем, что мне интересно.
  2. Стажировка очень понравилась. Интересные задачи, радушный и отзывчивый коллектив, уютный офис, новые знакомства, 27 встреча Defcon Russia, крейсер «Аврора» за окном. Супер!
  3. В качестве задания на стажировку мне был предложен ряд тем, из которых наиболее интересной мне показалась разработка движка для семантического поиска ROP-гаджетов на основе Фреймворка Triton. Чтобы лучше разобраться в вопросах, касающихся ROP-эксплуатации, я приступил к изучению теоретических материалов и соответствующих практических заданий. Невероятно полезными оказались материалы, которые нам постоянно подкидывали сотрудники компании. Далее, приступил к анализу и изучению исходных кодов программ, предназначенных для сбора гаджетов в исполняемых файлах. Самыми интересными из них оказались ROPGadget и Ropper, реализованные на Python. Однако, из-за того, что они не предоставляли детальной (необходимой нам) информации о гаджетах, было принято решение написать свою утилиту (GadgetFinder).
    Анализ ROP-гаджетов при помощи Фреймворка Triton. 1

    Для этого мне понадобилось подтянуть свои знания по форматам исполняемых файлов, познакомиться с Фреймворком Сapstone, продумать формат входных\выходных данных и написать несколько сотен строк кода. Одновременно с этим, совместно с руководителем, мы изучали материалы, посвященные Фреймворку Triton, реализовывали небольшие скрипты, дабы лучше ознакомиться с его возможностями.
    Анализ ROP-гаджетов при помощи Фреймворка Triton. 2

    Также разбирались с применением SMT решателей в области ИБ и продумывали архитектуру будущего приложения (RopFinder). На данный момент ведется работа над RopFinder, а именно:
    • реализация простых семантических запросов
      (eax == ebx, [esi] == 0xdeadbeef)

    • обдумывание технологии, с помощью которой можно объединять гаджеты в ROP-цепочки, исходя из требуемых ограничений.

    Работа с Фреймворком Triton через IDA Pro

    Работа с Фреймворком Triton через IDA Pro
  4. Решение каждой из предложенных задач — инструмент, который облегчит жизнь исследователю и повысит производительность. Так что задачи не только интересны, но и актуальны. Достигать цели самостоятельно — здорово, но вдвойне круто — осуществить комплексное, всестороннее исследование какого-нибудь объемного ПО в составе команды профессионалов. Поэтому хотелось бы поучаствовать в реальном проекте, которым занимаются в отделе исследований. Но, будучи стажером, такое вряд ли возможно.
  5. Конечно!

Евгений Рассказов (Студент 4 курса в СПбГЭУ)


e833e84c7b394e1f8f013da1ca10362a.jpg

Тема: «Реализация программно-аппаратной части для MITM-атак и fuzzing knx-tp»

Интервью:

  1. О компании знаю давно, поскольку знакомые из вуза стажировались у вас, некоторые остались работать. Положительные отзывы со стороны знакомых, которые полностью оправдали себя.
  2. Стажировка однозначно понравилась. Собеседование запомнится надолго, с хорошей стороны, очень классная, дружеская атмосфера. Ожиданий как таковых не было, все прошло так, как прошло, и я этим очень доволен.
  3. Моей задачей на стажировке была реализация программно-аппаратной части для проведения MITM-атак и fuzzing KNX-TP. Ее выполнение я начал с изучения KNX. Что это? Как работает? Какова структура пакетов, бегающих по сети? Как можно со всем этим взаимодействовать?
    e8057c39a7fa4d0f98bb0ef125a1d22e.png

    трансивер KNX-TP для RaspberryPi

    Изучив работу ETS5, я собрал KNX-сеть и настроил её работу. Вооружившись осциллографом и логическим анализатором, я наблюдал работу KNX-TP сети на более низком уровне. Следующей моей целью было сделать проект печатной платы KNX-трансивера на основе чипа NCN5120 для Raspberry PI. В качестве САПР был выбран Altium Designer. Разобравшись с AD и изучив работу NCN5120, я принялся за проектирование платы. В процессе возникали разные трудности в работе с AD, но плата была завершена и отправлена в производство. В итоге, мы получили плату с двумя NCN5120, что позволяло вклиниваться в разрыв линии связи в KNX-TP. Благодаря этому, возникла возможность реализации MITM-атаки. Плата подключается к Raspberry PI с помощью SPI. В процессе углубленного изучения Raspberry PI выяснилось, что инструмент не поддерживает работу SPI в режиме slave (скорее даже не он, а сам Linux не поддерживает SPI slave, хотя можно так же заметить, что и процессор на Raspberry PI может сделать slave только на 1 из 2 SPI, что нас тоже не особо устраивает), а NCN5120 работает только в режиме master. Было решено написать программную реализацию SPI slave. После попыток работы с Python было решено реализовать все на чистом C. К сожалению, поставки комплектующих задержали, и собрать до конца работающую плату не удалось. Как следствие, протестировать работу программного SPI slave вместе с платой так же не получилось.

    cfc10cfcf1a34b4d8aa69764ce427763.png

  4. Да, задачи были интересные, периодически менялись и корректировались. Думаю, всегда можно найти то, чем хотелось бы еще позаниматься. В моем случае получилось так, что я шел с мыслью о реверсе программ, а в итоге изучал мануалы на чипы и занимался разработкой печатной платы. Хотя мне это понравилось куда больше.
  5. Как стажер — скорее нет, чем да. А как сотрудник — с удовольствием.

Евгений Минибаев (Студент 4 курса в Университете Иннополис, l4l)


e5f6effe212c44f8b600dae163834a6a.jpg

Тема: «Разобраться с утилитами Joern / Bjoern и составить запросы по их правилам для поиска уязвимостей различного типа. Для начала на примере уже найденных ранее»

Интервью:

  1. DSec — одна из немногих известных мне компаний, которая занимается интересной для меня областью; помимо этого, достаточно часто видел качественные публикации от компании на Хабрахабре. Отчасти плюсом стало и то, что офис находится в СПб, а я безумно люблю этот город.
  2. Да, очень-очень понравилось стажировка :) Мало того, что я получил много новых знаний (порой из совершенно неожиданных областей), так еще все это проходило в дружеской атмосфере. Больше всего, наверное, запомнились презентации стажерских успехов, когда у меня чудом заработало то, что я даже не тестировал. Небольшая рекомендация на будущее: стоит объединять презентации смежных отделов, дабы все смогли лишний раз познакомиться и пообщаться.
  3. В рамках летней стажировки мне было поручено изучить возможности статических анализаторов joern и bjoern по поиску уязвимостей в приложениях. В процессе работы ознакомился с внутренним устройством данных инструментов, а также на практике изучил особенности языка поисковых запросов. Был произведен анализ и верификация существующих запросов для поиска уязвимостей следующих классов: Integer Overflow, Buffer Overflow. Вдобавок, я разработал и протестировал собственные запросы.
    7f57f8f068bb4d068879b93f19e846f9.png

    Графовое представление уязвимой функции в Linux 3.1

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

    541f9c477c7a4349be5fb3ce6035e366.png

    Поиск уязвимости CVE-2013–4512

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

  4. Задачи были крутыми и необычными, причем в хорошем смысле. Очень понравилось, что на нас [стажеров] не свалили какой-нибудь монструозный энтерпрайз-продукт в сотни мегабайт и не поручили разбираться с ним, а дали интересные и вполне актуальные проекты из опенсорса, до анализа которых мы бы вряд ли дошли без этих задач. С другой же стороны, лично мне не хватало побольше реверса, ибо очень хотелось поковыряться в каких-нибудь экзотичных прошивках и все в таком роде.
  5. Конечно, готов вернуться! Я даже пропуск себе оставил : D

Remote стажёры

Следующие ребята занимались, по сути, одной темой. Им надо было разобраться в архитектуре TMS 320LF2407 и реализовать её поддержку в популярных средствах для Reverse Engineering. Один стажёр был сконцентрирован на уже упомянутом не раз выше диззасемблере IDA Pro, а второй выбрал Фреймворк с открытым исходным кодом Radare2.

8d0eaba0f83f4276bf4efc55d6917d1c.jpg

Источник: www.ti.com/product/TMS320LF2407

Антон Бояркин


Тема: «Добавить поддержку архитектуры микроконтроллера TMS 320LF2407 в IDA Pro (процессорный модуль на языке Python)»

Интервью:

  1. На форуме reverse4you.org промелькнула тема стажировки, решил попробовать свои силы. Компания проводит классную конференцию ZeroNights.
  2. Из стажировки запомнился микроконтроллер TMS320LS2407 и тонны технической документации. Поскольку темы можно было выбрать, ожидания совпали.
  3. TMS320LF2407 — это цифровой сигнальный процессор от компании Texas Instruments, используется очень часто. Задача — добавить поддержку архитектуры микроконтроллера в IDA Pro и radare2 с целью дизассемблирования прошивки для электросчётчика, оснащённого PLC модемами и предназначенного для организации сетей сбора данных. Микроконтроллер также осуществляет сетевой поиск электросчётчиков, маршрутизацию информационных пакетов, хранение и передачу данных через выбранный канал связи в центральный диспетчерский пункт. Написав процессорный модуль, сможем понять логику микроконтроллера, попробовать выявить слабые места.
  4. Задача интересная, но на данный момент пока еще не решена.
  5. Готов

Александр Пыхов


Тема: «Добавить поддержку архитектуры микроконтроллера TMS 320LF2407 в Фреймворк Radare2»

Интервью:

  1. Лучшая компания по ИТ-безопасности в России. Всегда приятно работать с профессионалами.
  2. Стажировка очень понравилась. Было приятно личное знакомство. Совпало полностью.
  3. Задача состояла в изучении и анализе прошивки под МК TMS 320LF2407. В качестве первого шага было решено интегрировать данный МК в Radare 2. Для этого была изучена документация по процессору, пытались найти native компилятор и\или toolchain для работы с данным процессором. По документации были восстановлены ассемблерные инструкции и проводилось тестирование на полученной прошивке. На данный момент, идет отладка и тестирование модуля.
  4. Задача оказалась интересной, но трудно реализуемой. Хотелось бы больше заняться непосредственно реверсом и анализом :)
  5. Да, с удовольствием.
Вывод
Для нашего отдела это была первая столь масштабная стажировка. Многое мы совершенствовали по ходу процесса. Но очень рады, как все в итоге прошло, что ребята сами довольны. Планируем и в дальнейшем продолжать такую практику.

Комментарии (0)

© Habrahabr.ru