Борис Рютин, ведущий инжене ... Борис Рютин, Яндекс: Реверс-инжиниринг подтолкнул развитие Linux
Борис Рютин, Яндекс: Реверс-инжиниринг подтолкнул развитие Linux...
Борис Рютин, ведущий инженер по информационной безопасности, «Яндекс», рассказал порталу Cyber Media в каких областях чаще всего применяют обратную разработку, как начать путь в этой профессии и о том, почему задачи в этой области наиболее сложные в ИБ.
Cyber Media: В недавнем исследовании «Лаборатории Касперского» говорится, что задачи по реверс-инжинирингу ИБ-специалисты считают наиболее сложными. В чем заключается сложность обратной разработки?
Борис Рютин: Возможно, со стороны работа специалиста по обратной разработке выглядит очень монотонной, особенно когда ты часами сидишь в одном и том же дизассемблере, да еще и если он консольного вида. Возьмем наиболее «страшный» пример – если речь идет о статическом анализе, когда программа анализируется в шестнадцатиричном режиме, в hex – выглядит это почти как знаменитые потоки зелененьких цифр из фильма «Матрица».
Более понятный для стороннего наблюдателя вариант, если код представлен в виде набора ассемблерных инструкций. Особенно с учетом того, что еще недавно программы разрабатывались на ассемблере. И третий вариант – когда специалист по обратной разработке смог получить псевдокод исследуемой программы с помощью декомпилятора
Но эта монотонность, в любом случае, кажущаяся. Лучше всего реверс-инжиниринг описывает слово исследование. К тому же, часто реверс-инженеров называют «security researcher». На деле так и есть – специалист все время что-то исследует: ПО, прошивку или целое устройство, которое может взаимодействовать как с внутренними компонентами, так и внешними. В общем, у тебя появляется объект исследования, в который ты погружаешься все глубже и глубже.
Cyber Media: Какие задачи в компании чаще всего выполняет специалист по реверс-инжинирингу? Насколько широк диапазон применения таких специализированных знаний?
Борис Рютин: Диапазон применения навыков специалиста по реверс-инжинирингу очень широкий. Даже разработчикам приходится реверсить, в случае, когда нужно посмотреть свой код и понять почему он не запускается или работает не так, как надо.
Второй вариант – когда тебе достался legacy-код. Например, ваша компания приобрела другую компанию, а доступа к исходному коду нет или он потерялся со временем, но работать с ним необходимо, хотя бы чтобы запатчить.
Также реверс-инжиниринг может пригодиться для интеграции чего-либо или реализации нового функционала. Например, когда в продукте нужно реализовать поддержку определенного формата файлов или взаимодействие с какими-либо устройствами. Еще один пример – есть исходники, но написанные под устаревшее ПО. С помощью реверс-инжиниринга это все можно портировать выше.
Кроме того, реверс-инжиниринг помогает решить различные вопросы информационной безопасности:
- Анализ вредоносных программ или потенциально вредоносной деятельности.
- Аудит с точки зрения безопасности.
Cyber Media: Можете рассказать о наиболее интересных или примечательных на Ваш взгляд кейсах из практики?
Борис Рютин: Есть несколько интересных публичных кейсов. Отличный пример – BIOS. Когда его выпустили, код очень долго держали закрытым. Реверс-инжиниринг BIOS как мне кажется очень подтолкнул развитие персональных компьютеров. Если кому интересны подробности, то советую сериал Catch and Fire, основанный на этих событиях.
Второй хороший пример – Samba. Анализ smb протокола, который после этого по умолчанию встроился во многие дистрибутивы Linux, позволил бустануть развитие серверов на базе Unix. Люди могли спокойно продолжать пользоваться своими персональными компьютерами, а сервера держать на Linux или наоборот, пользоваться Linux и взаимодействовать с другими Windows устройствами. Вообще, как мне кажется многое для Linux-систем появилось с помощью обратной разработки.
Или если говорить про операционные системы. Есть такой проект ReactOS – по факту люди реверсят Windows и делают опенсорсный аналог. Нельзя не вспомнить Wine – эмулятор программ для Windows. Без реверса его, как и другие эмуляторы создать было бы невозможно. Благодаря Wine также увеличилось количество пользователей Linux, которые смогли запустить свои привычные программы или игры.
Также для MacOS есть средства, позволяющие использовать программы Windows, что тоже маловероятно без реверс-инжиниринга. К примеру, их новая Game Porting Toolkit (портирование Windows игр на macos и да, Baldur’s Gate 3 работает), как раз на базе Wine. Или проект Asahi Linux (портирование Linux на компьютеры Mac с процессором Apple) тоже развивается благодаря реверсингу. Линус Торвальдс даже на ней сделал релиз ядра Linux.
Еще один примечательный кейс – игры. Думаю самая популярная, которая сейчас появилась это Heroes of Might and Magic III. Исходных кодов у энтузиастов, развивающих игру, как понимаете нет. Но они с помощью реверса ее и патчат и расширяют – появляются новые герои, замки и монстры. Один сетевой режим чего стоит. Также есть пример с одной старой гоночной игрой Street Legal Racing. Люди с помощью манипуляции с кодом добавили туда мультиплеер и получили возможность играть вместе.
Cyber Media: Реверс-инжиниринг часто используется для поиска незадекларированных возможностей, бэкдоров и тд. Насколько часто встречаются подобные «артефакты»?
Борис Рютин: Как я говорил ранее, реверс-инжиниринг применяется в разных областях. Поэтому однозначно ответить на этот вопрос нельзя. Например, вирусному аналитику подобные вещи будут попадаться достаточно регулярно, в силу специфики ПО, которое он «разбирает».
Второй аспект заключается в том, что отличить сознательный бэкдор от стечения обстоятельств. Например, в моей практике были случаи, когда в ходе реверса я находил отладочные интерфейсы. Вряд ли разработчики оставили их сознательно.
Поэтому все субъективно, и к каждому случаю нужно подходить индивидуально.
Cyber Media: Если говорить о карьере специалиста по реверс-инжинирингу, насколько сложно ее выстроить и какие рекомендации Вы могли бы дать начинающим специалистам?
Борис Рютин: Как и в любой другой профессии или хобби, главное начать. Самый популярный и простой пример, что можно сделать у себя, просто сидя за компьютером – взять любимую или ту, что под рукой, среду разработки, написать классический «Hello world» и скомпилировать.
Далее загружаешь его в дизассемблер (я бы советовал обратить внимание на Rizin/Cutter или Ghidra в текущих реалиях, потому что их код открыт) и смотришь, как выглядит написанный код.
Меняешь какую-нибудь строчку или разбиваешь её на две строчки, перекомпилируешь и смотришь снова в дизассемблере. И так повторяешь. Есть специальные программы по типу godbolt, которые дают возможность прямо в браузере работать с компиляторами разных операционных систем и архитектур и сразу видеть как они выглядят в дизассемблере.
Также нужно определиться какая операционная система и архитектура тебе интересны. По операционным системам есть довольно развитые проекты, к которым можно обратиться за помощью. Например, если интересен Windows, и он хочет изучать его окружение, то ReactOS уже много лет потратил на реверс этой операционной системы и это уже есть в исходниках. Linux – эта система и так открытая. MacOS базируется на Unix и открывает часть своих исходники с некоторой периодичностью, а также упомянутый уже Asahi Linux.
Ну а на счет Архитектуры. Я бы выбирал из привычного x86-64, это большинство наших с вами ПК сейчас, или ARM: смартфоны с планшетами, интернет вещей, ноутбуки.
Кроме того, есть книги, которые описывают и учат реверс-инжинирингу. К примеру, “Practical Reverse Engineering: x86, x64, ARM, Windows Kernel, Reversing Tools, and Obfuscation”. Не все из них переведены на русский, но такие тоже существуют. Кстати плюс, что в отличие от некоторых других IT-направлений книги по реверсу довольно медленно устаревают.
Для практики - crackme-задачки, CTF-соревнования для ИБ специалистов или упомянутые проекты с открытым исходным кодом.