Реверс-инженер – это хакер.Но белый и пушистый::Журнал СА 1-2.2015
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Дата-центры  

Дата-центры: есть ли опасность утечки данных?

Российские компании уже несколько лет испытывают дефицит вычислительных мощностей. Рост числа проектов,

 Читать далее...

Книжная полка  

Защиты много не бывает

Среди книжных новинок издательства «БХВ» есть несколько изданий, посвященных методам социальной инженерии

 Читать далее...

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6410
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 7116
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4393
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 3085
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3881
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3897
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6385
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3232
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3528
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7363
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10724
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12443
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 14095
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9192
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7140
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5446
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4683
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3494
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3211
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3449
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3090
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Реверс-инженер – это хакер. Но белый и пушистый

Архив номеров / 2015 / Выпуск №1-2 (146-147) / Реверс-инженер – это хакер. Но белый и пушистый

Рубрика: Разработка /  Реверс-инжиниринг

Реверс-инженер – это хакер

Но белый и пушистый

Мы решили побеседовать о том, что значит быть реверс-инженером, какие перспективы у этой профессии и можно ли ее отнести к «белому хакерству», с теми, кто уже много лет этим занимается. Знакомьтесь – реверс-инженеры компании Parallels Михаил Филиппов и Василий Жданов.

Василий Жданов
Василий Жданов, реверс-инженер компании Parallels, работает над продуктами: Parallels Desktop для Mac и Parallels Access. Интересовался реверс-инжинирингом с юности: в частности, еще будучи студентом, обнаружил уязвимость в таксофонных картах. Именно благодаря его работе в таком кроссплатформенном продукте, как Parallels Desktop для Mac, появился, например, режим Coherence (позволяющий полностью «растворить» Windows в интерфейсе Mac OS X). Это отличный пример функциональности, которую нельзя реализовать иначе, чем только методами реверс-инжиниринга (хотя такого рода функций в продукте очень много).
Михаил Филиппов
Михаил Филиппов, руководитель разработки продукта Parallels Containers for Windows. Контейнеры под Windows начали делать в Parallels за десять лет до того, как планы по их выпуску анонсировала сама компания Microsoft (это произошло лишь осенью 2014 года). Все эти годы одной из основных технологий работы над продуктом был именно реверс-инжиниринг: хотя в Microsoft с благодарностью учли большое количество сообщений об обнаруженных ограничениях и просто ошибках в компонентах ядра Windows, присланных командой Михаила, тем не менее на инициативы о расширении сотрудничества в корпорации пойти не решились.

Сегодня многие российские ИТ-компании вполне спокойно и официально признают наличие в своем штате позиции реверс-инженера (недавно «Системный администратор» опрашивал ИТ-компании о том, что необходимо знать и уметь такому человеку). Тем не менее профессия считается и редкой, и одновременно хорошо оплачиваемой и востребованной [1].

– Расскажите подробнее, чем вы занимаетесь в Parallels?

– Василий Жданов (В.Ж.): Я работаю над двумя продуктами: Parallels Desktop для Mac и Parallels Access. Если говорить более конкретно, то занимаюсь поиском способов реализации и реализацией решений, направленных на интеграцию операционных систем между собой. У нас над этим классом задач работает целая команда. Мне достаются, так скажем, самые сладкие куски пирога: когда нет очевидного способа реализовать тот или иной функционал, и для поиска ключа порой приходится «зарываться по уши» в недра компонентов операционных систем. Для примера можно назвать несколько функций режима Coherence. Это интеграция иконок области уведомлений Windows (тех самых, что обычно располагаются внизу «возле часов») в панель статуса Mac OS X. Или, например, интеграция уведомлений Windows 8 с центром уведомлений Mac. Не обошлась без реверс-инжиниринга и специальная интеграция для Outlook. Особых усилий потребовала интеграция приложений Windows 8. Из менее «заметных» функций, но потребовавших определенных усилий и изобретательности, можно назвать прозрачное переключение профильных папок («Рабочий стол», «Мои документы» и т.д.) во время входа пользователя в систему, возможность показывать в «Проводнике» ОС Windows USB-устройство, воткнутое в Mac, именно там, где Windows-пользователь привык его видеть (в силу особенностей нашей реализации шаринга USB-дисков оно для Windows является сетевым устройством и поэтому раньше отображалось в разделе для сетевых устройств).

– Михаил Филиппов (М.Ф.): Последние несколько лет я отвечаю за проект Parallels Containers for Windows – это независимая от Microsoft реализация концепции серверной виртуализации уровня ОС. Наш подход основан на виртуализации ядра ОС, которое после модификаций способно запускать произвольное количество пользовательских окружений Windows. Таким образом, наши контейнеры (напомню, что в компании также разрабатываются контейнеры для ОС на базе ядра Linux) полагаются на модификации в ядре. И если в случае Linux сообщество разработчиков приняло от нас большинство этих изменений в главную ветку исходных кодов ядра, то компания Microsoft не смогла быть настолько открытой.

– Почему вы стали специализироваться на реверс-инжиниринге? Что стало определяющим?

– В.Ж.: Я бы не стал называть это специализацией. Это просто то, что у меня неплохо получается. Интерес к тому, «как оно устроено», родился вперед меня. Еще в детстве «реверсил» игрушки. Позже увлекся электроникой, и мне было интересно исследовать электронные устройства. Иногда это было единственным доступным способом найти неисправность в устройстве и починить его. Интерес «как оно устроено» сопровождался интересом «как это можно использовать», и я повторял своими силами некоторые узлы существующих устройств, чтобы составить из них что-то новое. Позже увлекся компьютерами. Но серьезно исследованием программ занялся уже здесь. И это лишь один из моих интересов. Другие – это язык C++, метапрограммирование, проектирование сложных программ. И каждому из них в большей или меньшей степени находится применение в нашей компании.

– М.Ф.: Для меня реверс-инжиниринг тоже не специализация, а инструмент познания мира – мира компьютерных технологий. Наша вузовская программа предполагала параллельное изучение языка С и языка ассемблера для тогда еще 16-битных процессоров семейства x86. На лабораторных работах с помощью отладчика мы изучали, как работают (а чаще не работают) наши программы. В процессе изучения внутреннего устройства программ и того, как они взаимодействуют с ОС и аппаратурой, меня глубоко впечатлила гибкость программ – внести исправления и проверить результат получалось легко и быстро.

Самостоятельная сборка из комплектующих в 1995 году собственного персонального компьютера (единственно верный способ для студента) позволила не ограничиваться учебными часами в лаборатории. Конечно же, я начал запойно играть в компьютерные игры – Doom, Railroad Tycoon и Dune II, которую мне никак не удавалось закончить. Проблема была в том, что на последнем уровне приходилось играть сразу против трех противников, а кредиты и игровая валюта неизменно заканчивались, что приводило к поражению. Выход был найден путем редактирования файла сохранения игры и вписывания нужного количества кредитов. Это, собственно, был мой первый опыт применения реверс-инжиниринга.

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

– Расскажите о том, как вы понимаете реверс-инжиниринг, и для чего он используется в ИТ?

– В.Ж.: Когда я уже вовсю «запускал ручки», я еще не знал слова «реверс-инжиниринг» и не припомню, чтобы вообще как-то выделял этот процесс с целью обозначить его неким словом. С моей точки зрения этим словом обозначают исследование внутреннего устройства некой рукотворной сущности в контексте ее воспроизведения или модификации. Если говорить о реверс-инжиниринге программных продуктов, то одной из высокоуровневых целей его использования в нашей компании я могу назвать реализацию интеграционной функциональности в наших продуктах Parallels Desktop и Parallels Access.

Если спуститься уровнем ниже, то мы можем увидеть аспекты применения реверс-инжиниринга в этом контексте более детально. Это, например, поиск недокументированных функций и интерфейсов, поиск способов и точек внедрения своего кода для модификации поведения некоего компонента операционной системы и т.п.

Если отвлечься от наших задач, то принципиально возможно использовать реверс-инжиниринг, например, для извлечения некоего «know how», чем могут промышлять конкуренты. Пираты используют реверс-инжиниринг для взлома программ. Антивирусные компании могут использовать его для исследования вредоносной активности вирусов. Список примеров можно продолжать долго.

М.Ф.: На мой взгляд, реверс-инжиниринг – это прежде всего инструмент, который может применяться совершенно произвольным образом и даже для целей, не совсем совместимых с достижением общего блага. Как инструмент реверс-инжиниринг помогает удовлетворить любопытство пытливого ума, что «ежели один человек построил, другой завсегда разобрать может», а цель этих усилий в применении найденного знания о внутреннем устройстве для недокументированного использования, поиска уязвимостей или просто программных ошибок.

Пояснение от компании: контейнеры для Windows

Косвенно мы тоже участвуем в разработке компонентов ядра Windows: за время работы над контейнерами мы направили в Microsoft множество сообщений об обнаруженных ограничениях и просто ошибках в компонентах ядра Windows, и часть из них была учтена в следующих версиях Windows, а для решения более десятка проблем Microsoft выпустила отдельные пакеты исправлений. В частных беседах инженеры Microsoft отзывались о нашем проекте как о самом технически сложном для ядра Windows. Но, к сожалению, до совместной разработки дело пока не дошло. Так как же это работает, если Microsoft не принимает изменения и не предоставляет доступ к исходным кодам ядра Windows? При разработке контейнеров Parallels центральное место занимают две технологии: реверс-инжиниринг и обновление программного кода во время исполнения (Dynamic software updating, реализацией этой технологии мы по-настоящему гордимся, считая ее одной из лучших в мире, и защищаем патентами).

Благодаря этим двум подходам вся технология виртуализации работает в ядре ОС, что позволяет разделять объекты ядра между контейнерами, тем самым изолируя контейнеры друг от друга. Каждый контейнер имеет свой собственный набор процессов, сессий и драйверов, а также реестр и дерево объектов ядра. В итоге опыт взаимодействия пользователя с ОС в контейнере ничем не отличается от взаимодействия с самой операционной системой Windows, и штатные инструменты ОС, такие как Диспетчер задач, Редактор Реестра и набор утилит Sysinternals Марка Руссиновича, можно использовать для управления контейнерами и их мониторинга.

– Можно ли выделить его разновидности?

– В.Ж.: Мой ответ покажется бесполезным. Сколько угодно. Все зависит от цели такого разделения. Например, если мы хотим оценить долю реверс-инженеров по отраслям промышленности, то будем делить реверс-инжиниринг по отраслям. Это может быть, скажем, реверс-инжиниринг в электронике или в автомобилестроении, или в ИT, или в пошиве сумок. В свою очередь, в каждой из отраслей можно поделить еще мельче, если того требует поставленная цель. Если же я просто занимаюсь исследованием чего-либо, я не думаю о том, к какой разновидности реверс-инжиниринга относится моя задача, не думаю о каком-то разделении вообще.

– М.Ф.: Для меня важно, какие цели преследует исследователь, поэтому я провожу только этическую границу, всецело поддерживая мотивацию «белого» хакинга в получении новых знаний для поддержания прогресса, а вот быть, что называется, criminal mind – это, пожалуй, не по мне.

– Какой объем знаний необходим реверс-инженеру?

– В.Ж.: Встречный вопрос: необходим для чего? Если мы хотим обучаться реверс-инжинирингу, то, на мой взгляд, для начала достаточно всего лишь желания. Если это вопрос «по достижении какого объема знаний можно называть себя реверс-инженером?», то моим ответом будет «а какая разница?». Каждая новая задача – это новые знания, и всегда есть чему учиться. Если вам это интересно, то вы этим просто занимаетесь.

– М.Ф.: Наличие высшего профильного ИТ-образования очень важно как основы структуры знаний, но, по-видимому, не обязательно, поскольку велико число просто талантливых самоучек. То есть дело не в каком-то тайном знании, а в самой личности инженера, которого увлекает сам процесс получения новых знаний. Сильными сторонами реверс-инженера являются внимательное отношение к деталям, умение находить неочевидные причинно-следственные связи и воображение, способное воссоздать целиком даже очень сложную систему. Я очень рад, что среди моих коллег есть такие замечательные люди.

– Особенности реверс-инжиниринга на платформах Linux, Windows, OS X?

– В.Ж.: Даже на одной платформе от задачи к задаче можно выделить множество особенностей. С другой стороны, можно и на разных платформах найти похожие задачи, без лишних особенностей. Если различия в наборе инструментальных средств можно назвать особенностями, то пусть ими будут эти различия.

– М.Ф.: Пожалуй, я выделил бы такой момент – наши Linux-коллеги по Parallels предпочитают носить бороды и свитера с оленями, но свитера с оленями мне тоже нравятся, хотя я и специализируюсь на Windows.

– Какие тренды в области обратной разработки можно выделить на сегодняшний день?

–М.Ф.: Виртуализация и создание доверенных вычислительных систем (Trustworthy computing) в облаках – вот области, в которых много неисследованных деталей.

– Сейчас получают распространение облачные инструменты для реверс-инжиниринга. Например, CrowdRE. Используете ли вы какие-либо из них? Можете ли, применительно к реверс-инжинирингу, выделить их преимущества и недостатки, особенности?

– В.Ж.: Если правильно понимаю, это инструменты для совместной работы распределенной команды. Нет, такие инструменты я пока не использую.

– М.Ф.: В силу специфики наших задач мы с такими инструменты в своем проекте также не работаем.

Пояснение от компании: Parallels Desktop для Mac

Вот, например, почему нам пришлось влезть во внутренности Windows, чтобы дать возможность пользователю увидеть USB-устройство, присоединенное к Mac, в «Проводнике» ОС Windows, причем именно там, где он привык его видеть. У нас есть технология SmartMount, и вот зачем она нужна. Если пользователь вставляет, например, флешку в компьютер Mac, то она появляется только на маковском десктопе. Человек, работающий в режиме Coherence, хочет полной интеграции – то есть видеть содержимое своей флешки и в Windows. Но, чтобы она там появилась, ее нужно переконнектить в виртуальную машину, а делать это каждый раз очень неудобно. Мы решили использовать Shared Folders. Поскольку эта функция представляет собой драйвер сетевой файловой системы и показывается в Windows как сетевой носитель, то, когда флешка коннектится в Мас, мы пробрасываем ее через Shared Folders в Windows. Тогда она автоматически попадает в Network location. Но пользователю непонятно, что свою флешку он должен найти именно там: он привык, что USB-девайс выглядит определенным образом и показывается именно там, где и все removable media. Стандартными способами невозможно сделать так, чтобы сетевая шара показывалась в списке устройств как подключаемый девайс и при этом еще и отражалась как USB. Именно для этого Василию пришлось «внедриться» в «Проводник» и «объяснить» ему, что вот эту вещь надо показывать именно так. И теперь у нас SmartMount показывает USB-флешки как внешние накопители.

– Какие инструменты предпочитаете, программное обеспечение?

– В.Ж.: В исследованиях чаще всего мне хватает IDA, windbg, lldb. Иногда это всякие мониторы активности (например, утилиты от Sysinternals или малоизвестные под OSX). Иногда пишу тестовые программки для проверки гипотез.

– М.Ф.: Я всегда применял отладчики – это были Borland Turbo Debugger, NuMega SoftICE, Windows Debugger. Работая в Parallels, начал использовать инструменты для анализа кода, такие как IDA Pro. Сейчас мы широко используем скриптовые языки, например, Python, для автоматизации анализа кода и аварийных дампов с помощью расширения PyKd для WinDbg.

– Ваше мнение о GNU Radare? Что этому инструменту не хватает?

– М.Ф.: Мы не применяем GNU Radare, но, как всякий проект с открытым исходным кодом, он силен сообществом, его поддерживающим. Участие в конференциях и проведение воркшопов – это, я полагаю, правильный путь развития продукта.

– Есть ли предпочтения в отношении аппаратной составляющей?

– В.Ж.: Здесь нет никаких изысков. На моем рабочем месте старенький Mac Pro 1.1, на котором не работают современные версии Mac OS X в связи с устаревшей версией UEFI, и на него я установил Windows. А также есть старенький iMac 2010 года. На этих двух машинках я и работаю. С первой использую удобную компактную клавиатуру от Lenovo, совмещенную с трекпоинтом.

– М.Ф.: Мобильность – поэтому ноутбук, при этом ноутбук может быть любого цвета, при условии, что этот цвет – черный, если перефразировать Генри Форда.

– Участвовали ли вы в программах Bug Bounty? Есть ли в вашей компании такая программа, и связана ли она с реверс-инжинирингом?

– В.Ж.: Нет, лично я не участвовал.

– М.Ф.: Я сам никогда не участвовал в программах Bug Bounty, но при этом мы с коллегами нашли и сообщили в Microsoft о более чем двух десятках багов в ядре Windows. В Parallels, конечно же, есть система премирования за найденные уязвимости в наших программных продуктах, есть внутренний ценник вознаграждения. Наш архитектор по безопасности Антон Дедов говорил, что даже был случай, когда человек нас открыто шантажировал – заплатите или выложу. Но, естественно, в этом случае он уже попал совсем под другую статью, и против него возбудили следствие. Вообще уязвимость может быть у кого угодно. Есть две шкалы представлений об уязвимости в продукте – продукт уязвим, и мы еще не знаем, насколько он уязвим. Признак плохой компании – игнорирование или замалчивание (работа через маркетологов) публично найденных инцидентов.

В Россию еще только начинает проникать понимание, что попасть в компанию и работать в ее интересах по поиску уязвимостей – это цивилизованный способ реализовать свою страсть к разбору всего и вся, как у маленького ребенка. Мы нанимаем и в штат, и вне штата людей, которые отличаются плодовитостью в поиске дыр в наших продуктах.

Конечно, эта задача тоже связана с реверс-инжинирингом.

– Как вы считаете, есть ли в вашей работе некий этический момент, ответственность? Что вы думаете об отношении к реверс-инженерам как к «хакерам»?

– В.Ж.: Этический момент? Будто реверс-инженеры делают что-то плохое. А разве реверс-инженер и хакер не есть одно и то же? Ответственность, безусловно, есть. Это ответственность перед нашими пользователями. Если по результатам реверса не удается создать стабильное решение, нужно реверсить еще или в другом направлении, или не решать задачу вовсе.

– М.Ф.: Как я уже говорил выше, для меня важнейший критерий – это мотив разработчика. То есть реверс оправдан, если стоит именно созидательная задача.

– Что вы посоветуете начинающим? На какие книги, курсы обратить внимание?

– В.Ж.: Чтобы суметь что-то извлечь из исследуемой сущности, в большинстве случаев нужно хорошо ориентироваться в среде, в которой она функционирует, и в зависимости от глубины исследования предметной области, с которой она имеет дело. Скажем, если мы имеем машинный код некоторой библиотеки и хотим понять, какие аргументы имеет некоторая недокументированная функция, содержащаяся в этой библиотеке, то мы должны хорошо разбираться в машинных инструкциях той машины, под которую эта библиотека создана, способах передачи аргументов на этой машине, соглашениях вызовов и т.д. В некоторых случаях подобные задачи можно решить с помощью автоматических средств и без особых знаний, но в других случаях потребуется разбираться основательно. В свете сказанного, можно рекомендовать учиться сначала «форвард-инжинирингу», а реверс-инжиниринг придет сам.

– М.Ф.: Развиваться и совершенствоваться гармонично, свет клином на реверсинге не сошелся!

  1. Реверс-инженер – профессия в цене – http://samag.ru/uart/more/258.

Беседовал Игорь Штомпель


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru