Результати стажування в Digital Security. Відділ досліджень



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

Питання освіти в галузі інформаційної безпеки варто, на наш погляд, дуже гостро. Тому ми в рамках стажування хотіли не тільки навчити хлопців і показати їм щось нове і актуальне з технічної точки зору, але і навіть прищепити наш технічний погляд на дослідження в області ІБ.

Коротка інформація
Ми – відділ досліджень (Дослідний центр) компанії 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-сумісний PC» (Олександр Єрмолов)
  • Митапы від колег з відділу аудиту
А в середині літа вже самі стажисти провели для нас подібний митап, представивши свої результати. По закінченню кожного виступу ми з колегами та іншими стажистами задавали питання, завдяки цьому з'являлися інші шляхи вирішення поставленої задачі і нові теми для майбутніх досліджень.

Частина хлопців ще не до кінця реалізувала намічені плани, але це не означає, що вони не впоралися. Просто деякі теми виявилися ширше, і вони захотіли реалізувати додаткові завдання в них. Ми задоволені результатами і будемо працювати над якістю процесу стажування. Деяким стажистам запропонували почати працювати в нашій компанії вже зараз.

Керували стажистами:
  • Дмитро Євдокимов d1g1
  • Георгій Носенко
  • Єгор Литвинов Xarlan
  • Борис Рютин dukebarman


Питання для міні-інтерв'ю
  1. Чому вирішили стажуватися саме в DSec? Чим привабила вас компанія?
  2. Сподобалася стажування? Що особливо запам'яталося? Наскільки реальність збіглася з вашими очікуваннями?
  3. Розкажіть про свого завдання/завдання.
  4. Здалися чи цікавими завдання, над якими ви працювали у процесі стажування? Чи було щось, що ви хотіли зайнятися, але не вдалося?
  5. Готові повернутися в компанію на стажування або на роботу?
Нижче наведено відповіді деяких стажистів.

Localhost стажисти

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

Тема: «Вивчити можливості плагіна 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, додавши кілька суттєвих змін. На даний момент, плагін вже володіє наступними можливостями:
    • Дозволяє інтерактивно реконструювати структури і класи, а також допомагає розбиратися в призначенні полів.

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

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


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

Тема: «Розробка семантичного ядра пошуку 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 курсу СПбГЭУ)

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

Інтерв'ю:
  1. Про компанії знаю давно, оскільки знайомі з вузу стажувалися у вас, деякі залишилися працювати. Позитивні відгуки з боку знайомих, які повністю виправдали себе.
  2. Стажування однозначно сподобалася. Співбесіда запам'ятається надовго, з хорошого боку, дуже класна, дружня атмосфера. Очікувань як таких не було, все пройшло так, як пройшло, і я цим дуже задоволений.
  3. Моїм завданням на стажуванні була реалізація програмно-апаратної частини для проведення MITM-атак і fuzzing KNX-TP. Її виконання я почав з вивчення KNX. Що це? Як працює? Яка структура пакетів, що бігають по мережі? Як можна з усім цим взаємодіяти?

    трансивер 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 разом з платою так само не вийшло.

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


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

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

Інтерв'ю:
  1. DSec — одна з небагатьох відомих мені компаній, яка займається цікавою для мене областю; крім цього, досить часто бачив якісні публікації від компанії на Хабрахабре. Частково плюсом стало і те, що офіс знаходиться в СПб, а я шалено люблю це місто.
  2. Так, дуже-дуже сподобалося стажування :) Мало того, що я отримав багато нових знань (іноді зовсім несподіваних областей), так ще все це проходило у дружній атмосфері. Найбільше, напевно, запам'яталися презентації стажерських успіхів, коли у мене дивом запрацювало те, що я навіть не тестував. Невелика рекомендація на майбутнє: чи варто об'єднувати презентації суміжних відділів, щоб всі змогли зайвий раз познайомитися і поспілкуватися.
  3. В рамках стажування мені було доручено вивчити можливості статичних аналізаторів joern і bjoern з пошуку вразливостей в додатках. У процесі роботи ознайомився з внутрішнім пристроєм даних інструментів, а також на практиці вивчив особливості мови пошукових запитів. Був проведений аналіз та верифікація існуючих запитів для пошуку вразливостей наступних класів: Integer Overflow, Buffer Overflow. До того ж, я розробив і протестував власні запити.

    Графове подання вразливою функції у Linux 3.1

    У процесі стажування була створена документація по установці, налаштуванні і експлуатації даних інструментів. За підсумками, було отримано уявлення про сучасних методологіях пошуку вразливостей в програмних продуктах, а також досвід застосування інструментів статичного аналізу. До того ж, вдалося освоїти науковий базис перерахованих статичних аналізаторів (основи роботи компіляторів, проміжне представлення вихідного коду, графові моделі тощо).

    Пошук уразливості CVE-2013-4512

    Крім основної теми практики, були уважно прослухані доповіді, що безпосередньо стосуються діяльності аналітика інформаційної безпеки (инструментация бінарного коду, прийоми ефективної роботи з виконуваними файлами без символьної інформації, аналіз захищеності шини CAN в автомобілях).
  4. Завдання були крутими і незвичайними, причому в хорошому сенсі. Дуже сподобалося, що на нас [стажистів] не звалили який-небудь монструозний ентерпрайз-продукт сотні мегабайт і не доручили розбиратися з ним, а дали цікаві і цілком актуальні проекти з опенсорса, до аналізу яких ми б навряд чи дійшли без цих завдань. З іншого ж боку, особисто мені не вистачало побільше реверсу, бо дуже хотілося длубатися в яких-небудь екзотичних прошивках і все в такому роді.
  5. Звичайно, готовий повернутися! Я навіть пропуск собі залишив :D


Remote стажисти

Такі хлопці займалися, по суті, однією темою. Їм треба було розібратися в архітектурі TMS 320LF2407 і реалізувати її підтримку в популярних засобах для Reverse Engineering. Один стажист був сконцентрований на вже згаданому не раз вище диззасемблере IDA Pro, а другий вибрав Фреймворк з відкритим вихідним кодом Radare2.


Джерело: 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 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.