Рубрика:
Карьера/Образование /
Рынок труда
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
Вакансия: реверс-инженер
В создании программных продуктов для информационной безопасности большую роль играют реверс-инженеры. Эта редкая специальность, освоить которую трудно, пройдя лишь обучение в вузе, – необходима практика. Каких специалистов хотят видеть компании на этой позиции?
- Какими знаниями и навыками должен обладать Reverse Engineer?
- Каков инструментарий Reverse Engineer?
- Каковы ваши требования к уровню образования потенциальных сотрудников?
- Какие требования предъявляются к опыту работы?
- Есть ли особые требования, которые обусловлены спецификой деятельности компании?
ВАСИЛИЙ ЖДАНОВ, ведущий разработчик и реверс-инженер в Parallels
1. Реверс-инжиниринг имеет смысл в том случае, когда одной компании может понадобиться работать с продуктами, разработанными в другой. Есть ситуации, когда определенные и стандартные процедуры, например, описанный API, не работают или не предусмотрены. Например, для устранения какой-то накладки в работе ОС нужно разобраться, как в принципе эта ОС организована изнутри.
Нашей компании пришлось прибегнуть к этой чудовищно сложной процедуре, когда создавали решение контейнерной виртуализации Parallels Virtuozzo Containers для Windows и софт для частных пользователей Parallels Desktop для Mac. В последнем случае нужно было совмещать использование разных ОС одновременно, без перезагрузки, таких действий, как копирование и вставка из ОС Windows в Mac OS X и тому подобных операций.
Есть компании, где реверс-инжиниринг – это часть бизнес-процесса, и тогда уже не обойтись без опытного реверс-инженера или даже команды. В голову сразу приходят, например, антивирусные компании, где требуется исследовать вредоносный код. Или компании, занимающиеся восстановлением данных с «полетевших» флешек, где бывает необходимо изучать алгоритмы трансляции, применяемые в контроллерах.
2. Инструментарий зависит от решаемой задачи, и он меняется в зависимости от глубины «раскопок». Иногда удается обойтись просто мониторами оконных сообщений, файловых систем, процессов, реестра и т.п. (Spy++, Process Monitor, fseventer, Event Taps Testbench) или обычными отладчиками (WinDbg, lldb). Когда нужно «залезть» по уши, использую небезызвестный IDA.
3. Здесь мы просим опыт работы от трех лет. В профессии реверс-инженера важна практика, практика и еще раз практика. Можно сходить на курсы, послушать теорию, порешать задачи и благополучно все забыть. Особенно ценным в любой работе (реверс-инжиниринг – не исключение) – это умение своевременно находить нужную информацию и уметь ею пользоваться. А курсы или какое-то особое образование только дополняют картину по соискателю. В университете я сдавал Си по шпаргалке, но уже имел за плечами найденную уязвимость в чипах тогдашних таксофонных карт.
4. О практике я уже говорил. Добавлю (и полагаю, что не открою Америку, если это скажу), что нужно обладать интересом к этой работе, желанием учиться. Когда я пришел работать в Parallels, то с трудом представлял, как осуществляется реверс-инжиниринг программ, поскольку до этого «реверсил» только «железо», да и это было лишь моим хобби. Реверс-инжиниринг программ я начал осваивать уже здесь.
Например, через реверс-инжиниринг пришлось реализовывать такую функцию, как отображение флешки, втыкаемой в компьютер Mac, в той панели Windows, где отображаются обычно все присоединяемые девайсы. Стандартными способами оказалось невозможно это сделать – пришлось поработать методами реверс-инжиниринга с «Проводником», и все получилось.
5. Безусловно. Поскольку наша команда работает над самым известным на рынке решением для виртуализации компьютеров Apple – Parallels Desktop, то у нас все задачи весьма специфические. Например, когда я попал в эту компанию в далеком 2006 году, первой моей задачей было сделать так, чтобы при открытии пользователем меню «Пуск» оно отображалось в требуемой нам позиции: возле иконки Parallels Desktop в панели Mac OS X. А чего стоит реализация режима Coherence (возможность видеть и работать с Windows-программами на Mac так, как будто это родные приложения OS X), созданного нашими ребятами? Она держится на реверсе чуть менее чем полностью.
ДМИТРИЙ СКЛЯРОВ, ведущий аналитик отдела перспективных разработок Positive Technologies
1. Главный навык – желание и способность отыскивать, усваивать и систематизировать новое. Работа в области RE – это постоянное исследование.
Хороший реверсер обычно должен быть и хорошим инженером – он обязан понимать, на каких принципах строятся те системы, которые ему придется анализировать.
Из прикладных знаний – особенности функционирования ОС и их стандартных библиотек. Языки программирования.
Принципы работы компиляторов. Особенности кодогенерации разных средств разработки. Методы оптимизации, используемые компиляторами.
Язык ассемблера (для разных платформ). Принципы функционирования виртуальных машин.
Основные алгоритмы и структуры данных (сортировка и поиск, криптография, деревья, списки и т.п.).
2. Нельзя не упомянуть IDA Pro – лучший на сегодняшний день дизассемблер, поддерживающий большое количество разных процессоров.
Кроме этого, различные декомпиляторы и дизассемблеры, программы-мониторы, логгеры событий и т.п.
Ну и, разумеется, реверсер должен уметь сам создавать недостающие инструменты, иногда просто средства автоматизации, позволяющие быстрее выполнить рутинную часть работы.
Но, если придется, и свой дизассемблер для нестандартной системы команд, и драйвер ядра, если без него не удается получить какую-то информацию…
Для разработки большинства новых инструментов обычно хватает языков программирования Си и Питон. Это тоже часть инструментария J.
3. На реверсеров в институтах не особо учат, так что специальные знания соискатель скорее всего должен был получить где-то еще.
Техническое или математическое высшее образование явно не повредит, но, наверное, можно обойтись и без него.
ДЕНИС СИЛАКОВ, начальник отдела технологических разработок и сопровождения компании «РОСА»
1. Reverse Engineer – понятие достаточно общее, обратный инжиниринг может применяться в совершенно разных областях и соответственно требовать разных навыков. Например, в «НТЦ ИТ РОСА» такое направление деятельности актуально при поиске потенциальных ошибок и уязвимостей в программных комплексах, при отладке программ и при выявлении причин их сбоев.
Также мы приветствуем людей, способных заставить работать в наших ОС ту или иную аппаратуру, чья поддержка в Linux изначально не закладывалась, а помощи от разработчиков аппаратуры ждать не приходится. Например, такое случается с устройствами, драйверы для которых писались на заказ под конкретную ОС, которая на данный момент морально устарела.
Во всех этих сферах от инженера потребуется умение детально разобраться в принципах и алгоритмах работы программы, исходный код которой недоступен.
С технической точки зрения необходимы навыки работы с отладчиками и дизассемблерами (как в Linux, так и в Windows), а также глубокое знание внутреннего устройства ОС – принципов работы ядра и драйверов, формата исполнимых файлов и так далее.
Если инженеру предстоит работать с аппаратурой, то полезным будет знакомство со специализированными открытыми инструментами, используемыми для изучения работы конкретных видов аппаратных устройств, например, инструментарием REnouveau (применяемым для анализа карт NVIDIA разработчиками свободных драйверов Nouveau).
2. Основной инструментарий Reverse Engineer – это отладчик и дизассемблер. В Linux основным средством отладки является консольный gdb, хотя есть и достойные графические интерфейсы к нему, например, отладчик из IDE CodeBlocks.
При необходимости дизассемблирования и детального погружения во внутренности программы у нас сейчас используется инструментарий Radare («The reverse engineering framework», radare.org), который поддерживает все популярные ОС и аппаратные архитектуры. Radare используется совместно с Boomerang – декомпилятором, преобразующим код в программу на языке C. Boomerang также поддерживает как Linux, так и Windows.
Наконец, нередко возникает необходимость анализа сетевого трафика, генерируемого программой. Для этой цели мы используем Wireshark.
Впрочем, если у вновь приходящего к нам инженера есть другие предпочтения в плане инструментария, то никто не запретит ему использовать любимые программы и утилиты. Единственное условие – в своей работе мы отдаем предпочтение свободным продуктам, и покупку лицензии на какое-либо проприетарное средство придется хорошо обосновать – простой отсылкой на привычку обойтись не получится.
3. Наличие диплома одного из известных технических вузов будет плюсом при первоначальном отборе кандидатов, однако его вполне может заменить ссылка на успешно реализованный проект. В любом случае кандидату на эту должность не избежать тестового задания.
4. При найме Reverse Engineer мы бы предпочли увидеть человека, тесно работающего в этой сфере хотя бы год. Формальный опыт работы не обязателен – достаточно будет и учебных проектов, главное – хорошо ориентироваться в предметной области и инструментарии.
5. Основным направлением работы «НТЦ Ит РОСА» является создание дистрибутивов Linux. Когда заходит речь о позиции Reverse Engineer в компании, занимающейся разработкой Linux, то речь обычно идет об обратном инжиниринге программ и драйверов, написанных под другие ОС; как правило, имеются в виду различные представители Windows, хотя можно встретить DOS и коммерческие UNIX. Поэтому кандидат на такую позицию должен обладать хорошим знанием внутренностей как минимум двух ОС.
БОРИС ЯМПОЛЬСКИЙ, руководитель группы сменных антивирусных аналитиков «Лаборатории Касперского»
1. Знание языков программирования Assembler x86, С/С++.
Умение работать с чужим кодом, опыт анализа исполняемых файлов для Win32.
Уверенное владение инструментами IDA Pro, WinDBG/OllyDbg.
Хорошее знание архитектуры ОС семейства Windows, Win32 API, формата PE файлов.
Технический английский.
Желателен опыт работы с недокументированными функциями и внутренними структурами ОС Windows, понимание принципов и механизмов работы в Ring-0.
Желателен хороший математический аппарат, способность к нестандартным решениям, аналитический склад ума, внимание к деталям.
2. Дизассемблер (IDA Pro), отладчик (WinDBG/OllyDbg).
3. Идеальный вариант – кандидат с техническим высшим образованием. Чаще всего речь идет о таких специальностях, как Математика/Кибернетика, Информатика/Информационные системы, ИБ/Защита информации. Причем это может быть студент старших курсов, таких примеров у нас в компании много. Также у нас работают несколько человек с гуманитарным или средним техническим образованием, но это скорее исключение.
4. Никаких. Главное для нас – желание человека учиться и становиться специалистом в области Reverse Engineering.
5. Да, в нашем случае обязательно наличие незапятнанной репутации. В «Лаборатории Касперского» действует принципиальная установка не брать на работу бывших хакеров.
СЕРГЕЙ НИКИТИН, заместитель руководителя лаборатории компьютерной криминалистики и исследования вредоносного кода в Group-IB
1. Прежде всего, это специфический склад ума, который заключается в любви разбираться во всяком непонятном и загадочном. Современные вирусописатели являются профессиональными киберпреступниками, пишут код на очень высоком в плане профессионализма уровне, активно используют методы обфускации, упаковки и антиотладки.
Что относительно знаний: остро необходимо знать WinAPI, в том числе и всякие недокументированные подробности.
2. Классика – это IDA PRO + HexRays и OllyDbg.
3. На самом деле требований к академическому образованию нет, необходимы навыки реверс-инжиниринга. Ну а вообще любой реверсер – это в том числе и отличный системный программист, так что высшее техническое образование не помешает.
4. Он должен иметь хотя бы базовые знания работы исполняемых файлов и навыки работы с отладчиками и дизассемблерами.
5. Относительно Group-IB это в первую очередь опыт исследования вредоносного кода. Как работают бот-сети? Каким образом можно заразить компьютер? Каким образом вредоносная программа может быть записана в автозагрузку? На все эти вопросы реверс-инженеру необходимо найти ответы.
ЮРИЙ ВОЛОШИН, менеджер продукта компании «1С-Битрикс»
1. Данная профессия подразумевает наличие огромного и разнообразного набора знаний. Человек должен быть значительно больше, чем просто профессионалом. Разбор чужого кода и попытка понять, с какой целью этот код был написан, – очень нетривиальная задача.
2. В арсенале у специалиста – разнообразные декомпиляторы, дебагеры, распаковщики кода и инструменты для анализа кода. Инструментарий будет различаться в зависимости от того, на чем написан продукт.
3. Образование, по сути, не сильно важно. Скорее важно наличие опыта.
4. Выше уже было сказано, что в данной профессии опыт – это самое ценное. Причем не просто опыт как стаж работы, а успешные реализованные проекты, которые выполнял данный специалист.
5. Конечно. Если это разбор кода на PHP, то уровень будет совершенно иной, чем если, например, нужно разобрать ядро и код iPhone. И требования соответственно совершенно разные.
Также продукт для разбора может быть представлен в виде исходного кода, даже если он имеет возможность компиляции. И тот же продукт может быть дан для разбора без исходного кода. Соответственно это тоже потребует разного уровня знаний.
Подготовил Игорь Штомпель
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|