SlideShare a Scribd company logo
1 of 35
Download to read offline
Введение в профессию исследователя
приложений без исходных кодов
Задачи обратной разработки и их монетизация
+ =
Определение термина обратной разработки
Обратная разработка (реверс-инжиниринг, RE) – процесс, целью которого
стоит изучение аспектов внутреннего устройства программного или
аппаратного обеспечения в условиях отсутствия документации, их
описывающей.
Что понимается под документацией?
Любой достоверный источник информации, предоставленный авторами системы. Форма
представления не важна и может быть, например, такой:
 книги
 вики
 переписка
 видео-материалы
 конференции
 …
Объекты обратной разработки
 Программы без исходных кодов (машинный код реальных
микропроцессорных архитектур)
 Недокументированное или плохо документированное ПО с исходными
кодами (обфусцированный исходный код, .NET/Java-приложения)
 Аппаратное обеспечение
Виды деятельности, требующие навыков RE
 Борьба с преступностью (анализ вредоносного ПО)
 Исследование проблем безопасности (поиск и эксплуатация уязвимостей)
 Обход защитных механизмов (борьба с протекторами и обфускаторами)
 Клонирование компонентов программ (изучение форматов данных)
 Восстановление поврежденной информации (анализ дампов ФС)
 Автоматизация получения исходного кода (анализ компиляторов и ВМ)
Исследование проблем безопасности: формы
 Capture The Flag (CTF)
 Red Team
 Тест на проникновение
 Поиск уязвимостей на заказ
 Bug Bounty
 No Such Agency
Примерные цены на уязвимости «нулевого дня»
Название уязвимого ПО Тип уязвимости Рыночная цена (тысяч $)
Apple iOS Удаленный Jailbreak 1500
Android Удаленный Jailbreak 200
Adobe Flash Player Удаленное выполнение кода +
обход песочницы
100
Microsoft Windows Повышение привилегий 90
Adobe Reader, Google Chrome,
Microsoft IE
Удаленное выполнение кода +
обход песочницы
80
Microsoft Office (Word, Excel) Удаленное выполнение кода 40
Исследование проблем безопасности: типовые задачи
 Написать эксплойт по публичному описанию уязвимости
 Разобраться в коде неработающего эксплойта и починить его
 Просканировать TCP-порты активных узлов локальной сети
 Написать фаззер для проприетарного протокола или формата файла
 Найти уязвимость нулевого дня
 Написать отчет по результатам ресерча
Клонирование ПО и восстановление кода: типовые задачи
 Изучить закрытый сетевой протокол и написать под него клиента
 Выяснить предназначение полей проприетарного формата файла и добавить его
поддержку в свою программу
 Изучить драйвер устройства и переписать его под другую ОС
 Разобрать код виртуальной машины и написать дизассемблер её байт-кода
 Изучить устройство компилятора и написать декомпилятор для генерируемых им
программ
Почему не перспективен взлом программ?
 Никто не будет платить больше, чем стоит одна лицензия
 Зачастую обход защит – разовая, не постоянная работа
 Мало перспектив технического роста – нечего созидать
 Нет перспектив вертикального роста – нет коллектива
 Уголовный (как минимум, теневой) характер деятельности
 Постепенный захват рынка веб-приложениями
 Смещение фокуса с программы на контент
Чем плохи соревнования CTF?
 Зачастую они оторваны от жизни и дают лишь базовые навыки проведения исследований
 У участников команды нет полноценной ответственности за отсутствие результата
 Участие в соревнованиях не является подтверждением квалификации или пропуском на
серьезные проекты
 Победы в соревнованиях котируются только среди других «спортсменов»
Промежуточные итоги
1. Обход лицензионных механизмов в ПО как направление деятельности – это дно отрасли
2. Поиск уязвимостей с целью их продажи – прибыльная тема, но для небольших команд,
из-за нестабильности дохода
3. Обратная разработка с целью создания ПО – круто и полезно, но только для обеспечения
совместимости
4. Разработка средств трансляции кода – Олимп, к которому нужно идти
5. Начинать карьеру в реверсе лучше с позиции интерна, а не CTF-игрока
Необходимые знания и навыки
Миф №1
Y: Любой специалист в RE должен уметь пользоваться программой IDA Pro.
I: Это не так:
 знание инструмента – не основной штрих портрета реверс-инженера
 интерактивная обратная разработка – это хорошо, но сейчас актуальней
автоматизация этого процесса
Миф №2
Y: Любой специалист в RE должен знать устройство ядер популярных ОС.
I: Это не так:
 Количество прикладного ПО существенно больше количества драйверов –
задач и проектов там больше
 Навыки RE в данном направлении вторичны – на первом месте разработка
компонентов ядра
Миф №3
Y: Любой специалист в RE должен хорошо разбираться в электронике.
I: Это не так:
 В корне жизнеспособности современных информационных систем лежит
абстракция – можно всю жизнь искать баги в User Mode и сытно жить
 Даже проекты по исследованию встраиваемого ПО не всегда требуют
навыков проектирования/чтения цифровых схем
Миф №4
Y: Специалист в RE не обязан уметь разрабатывать ПО.
I: Это не так:
 Экономия на кадрах вынуждает искать или растить человека-оркестра –
исследователя и разработчика в одном лице
 Понимание различных аспектов разработки и логики программистов
упрощает RE и поиск багов
Миф №5
Y: Специалист в RE не обязан хорошо знать C++.
I: Это не так:
 Крупные и требовательные к ресурсам коммерческие программы пишутся
на C++ (включая встраиваемое ПО)
 Популярные в области автоматизации анализа программ проекты LLVM и
Clang написаны на C++
Миф №6
Y: Специалист в RE не обязан разбираться в естественно-научных дисциплинах.
I: Это не так:
Что же ему нужно знать?
Настоящий Reverse Engineer – спец широкого профиля
Исследователь с большой буквы «R»
Алгоритмы и структуры данных Микропроцессорные архитектуры
Теория компиляции
Архитектуры операционных систем Сетевые протоколы
Криптография Базы данных
Языки программирования
 Отличное владение C, C++, Python. Остальное – по необходимости.
 Может пригодиться умение читать C#, Java, JavaScript.
 Может пригодиться навык разработки на Perl, Ruby, Lua.
 Не забывать про функциональные языки!
Литература и сетевые ресурсы
Алгоритмы и структуры данных
 Robert Sedgewick: Algorithms in C++
 Thomas Cormen: Introduction to Algorithms
 Alfred Aho: Data Structures and Algorithms
 Donald Knuth: The Art of Computer Programming
 http://www.compression.ru/
 http://e-maxx.ru
Теория компиляции
 Aho, Sethi, Ullman, Compilers: Principles, Techniques, and Tools
 Grune, Reeuwijk, Bal, Jacobs, Langendoen: Modern Compilers Design
 Lopes, Auler: Getting Started with LLVM Core Libraries
 http://citforum.ru/programming/theory/serebryakov/
 http://www.ispras.ru/groups/ctt/publications.php
 http://www.iecc.com/linker/
 http://llvm.org/pubs
Архитектура операционных систем
 Andrew Tanenbaum: Modern Operating Systems
 Jeffrey Richter: Programming Applications for Microsoft Windows
 Russinovich, Solomon, Ionescu: Windows Internals
 Tanenbaum, Steen: Distributed Systems. Principles and Paradigms.
Сетевые протоколы
 Andrew Tanenbaum: Computer Networks
 Ilya Grigorik: High Performance Browser Networking
 Medhi, Ramasamy: Network Routing: Algorithms, Protocols, and Architectures
 https://tools.ietf.org/area/int
Криптография
 Bruce Schneier, Tadayoshi Kohno: Cryptography Engineering. Design Principles
and Practical Applications
 Bruce Schneier: Applied Cryptography. Protocols, Algorithms, and Source Code in
C
 Menezes, Oorschot, Vanstone: Handbook of Applied Cryptography
Обратная разработка
 Dennis Yurichev: Reverse Engineering for Beginners
 Chris Eagle: The IDA Pro book (2011)
 Dang, Gazet, Bachaalany: Practical Reverse Engineering
 https://reverseengineering.stackexchange.com
 http://www.devttys0.com
Поиск уязвимостей
 Justin Seitz: Gray Hat Python
 Jon Erickson: Hacking. The Art of Exploitation
 Anley, Heasman, Linder, Richarte: The Shellcoder's Handbook
 http://www.phrack.org
 https://www.corelan.be/index.php/articles
 https://firmwaresecurity.com

More Related Content

Similar to Введение в профессию исследователя приложений без исходных кодов

Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018
Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018
Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018Timur Shemsedinov
 
пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...
пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...
пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...Andrey Prozorov, CISM, CIPP/E, CDPSE. LA 27001
 
Презентация по дисциплине технология разработки программного обеспечения
Презентация по дисциплине технология разработки программного обеспеченияПрезентация по дисциплине технология разработки программного обеспечения
Презентация по дисциплине технология разработки программного обеспеченияRauan Ibraikhan
 
презентация по дисциплине технология разработки программного обеспечения
презентация по дисциплине технология разработки программного обеспеченияпрезентация по дисциплине технология разработки программного обеспечения
презентация по дисциплине технология разработки программного обеспеченияRauan Ibraikhan
 
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.IT-Доминанта
 
Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Ваше...
Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Ваше...Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Ваше...
Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Ваше...IT Share
 
[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivation[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivationbeched
 
Req Labs'2011. Коммуникация нефункциональных требований
Req Labs'2011. Коммуникация нефункциональных требованийReq Labs'2011. Коммуникация нефункциональных требований
Req Labs'2011. Коммуникация нефункциональных требованийAlexander Kalouguine
 
School IT recruiting
School IT recruiting School IT recruiting
School IT recruiting Olga Kotova
 
Спроси эксперта. Solar inСode все, что вы хотели узнать про "дыры" в коде, но...
Спроси эксперта. Solar inСode все, что вы хотели узнать про "дыры" в коде, но...Спроси эксперта. Solar inСode все, что вы хотели узнать про "дыры" в коде, но...
Спроси эксперта. Solar inСode все, что вы хотели узнать про "дыры" в коде, но...Solar Security
 
Software craftsmanship 16: online building ml pipeline
Software craftsmanship 16: online building ml pipelineSoftware craftsmanship 16: online building ml pipeline
Software craftsmanship 16: online building ml pipelinePavel Veinik
 
Разработка требований и Проектирование интерфейсов
Разработка требований и Проектирование интерфейсовРазработка требований и Проектирование интерфейсов
Разработка требований и Проектирование интерфейсовDenis Beskov
 
Семинар ФКН: современные подходы к разработке ПО - часть 1
Семинар ФКН: современные подходы к разработке ПО - часть 1Семинар ФКН: современные подходы к разработке ПО - часть 1
Семинар ФКН: современные подходы к разработке ПО - часть 1Andrii Gakhov
 
Trpo 1 введение
Trpo 1 введениеTrpo 1 введение
Trpo 1 введениеpogromskaya
 
Lektsia 1
Lektsia 1Lektsia 1
Lektsia 1bomfan
 

Similar to Введение в профессию исследователя приложений без исходных кодов (20)

OO Design with C++: 0. Intro
OO Design with C++: 0. IntroOO Design with C++: 0. Intro
OO Design with C++: 0. Intro
 
Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018
Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018
Карта знаний инженера-программиста // Timur Shemsedinov // KharkivJS 2018
 
пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...
пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...
пр Спроси эксперта. Все, что вы хотели узнать про «дыры» в коде, но не у кого...
 
Презентация по дисциплине технология разработки программного обеспечения
Презентация по дисциплине технология разработки программного обеспеченияПрезентация по дисциплине технология разработки программного обеспечения
Презентация по дисциплине технология разработки программного обеспечения
 
презентация по дисциплине технология разработки программного обеспечения
презентация по дисциплине технология разработки программного обеспеченияпрезентация по дисциплине технология разработки программного обеспечения
презентация по дисциплине технология разработки программного обеспечения
 
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
Основные понятия связанные с разработкой ПО: просто о сложном. Лаабе Дмитрий.
 
Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Ваше...
Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Ваше...Никита Вельмаскин -  Интерпретатор или думаем над скриптовым движком для Ваше...
Никита Вельмаскин - Интерпретатор или думаем над скриптовым движком для Ваше...
 
[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivation[DagCTF 2015] Hacking motivation
[DagCTF 2015] Hacking motivation
 
пр 2 ПО.docx
пр 2 ПО.docxпр 2 ПО.docx
пр 2 ПО.docx
 
Req Labs'2011. Коммуникация нефункциональных требований
Req Labs'2011. Коммуникация нефункциональных требованийReq Labs'2011. Коммуникация нефункциональных требований
Req Labs'2011. Коммуникация нефункциональных требований
 
School IT recruiting
School IT recruiting School IT recruiting
School IT recruiting
 
Спроси эксперта. Solar inСode все, что вы хотели узнать про "дыры" в коде, но...
Спроси эксперта. Solar inСode все, что вы хотели узнать про "дыры" в коде, но...Спроси эксперта. Solar inСode все, что вы хотели узнать про "дыры" в коде, но...
Спроси эксперта. Solar inСode все, что вы хотели узнать про "дыры" в коде, но...
 
855493.pptx
855493.pptx855493.pptx
855493.pptx
 
Software craftsmanship 16: online building ml pipeline
Software craftsmanship 16: online building ml pipelineSoftware craftsmanship 16: online building ml pipeline
Software craftsmanship 16: online building ml pipeline
 
Разработка требований и Проектирование интерфейсов
Разработка требований и Проектирование интерфейсовРазработка требований и Проектирование интерфейсов
Разработка требований и Проектирование интерфейсов
 
Семинар ФКН: современные подходы к разработке ПО - часть 1
Семинар ФКН: современные подходы к разработке ПО - часть 1Семинар ФКН: современные подходы к разработке ПО - часть 1
Семинар ФКН: современные подходы к разработке ПО - часть 1
 
Trpo 1 введение
Trpo 1 введениеTrpo 1 введение
Trpo 1 введение
 
спо
споспо
спо
 
спо
споспо
спо
 
Lektsia 1
Lektsia 1Lektsia 1
Lektsia 1
 

Введение в профессию исследователя приложений без исходных кодов

  • 1. Введение в профессию исследователя приложений без исходных кодов
  • 2. Задачи обратной разработки и их монетизация + =
  • 3. Определение термина обратной разработки Обратная разработка (реверс-инжиниринг, RE) – процесс, целью которого стоит изучение аспектов внутреннего устройства программного или аппаратного обеспечения в условиях отсутствия документации, их описывающей.
  • 4. Что понимается под документацией? Любой достоверный источник информации, предоставленный авторами системы. Форма представления не важна и может быть, например, такой:  книги  вики  переписка  видео-материалы  конференции  …
  • 5. Объекты обратной разработки  Программы без исходных кодов (машинный код реальных микропроцессорных архитектур)  Недокументированное или плохо документированное ПО с исходными кодами (обфусцированный исходный код, .NET/Java-приложения)  Аппаратное обеспечение
  • 6. Виды деятельности, требующие навыков RE  Борьба с преступностью (анализ вредоносного ПО)  Исследование проблем безопасности (поиск и эксплуатация уязвимостей)  Обход защитных механизмов (борьба с протекторами и обфускаторами)  Клонирование компонентов программ (изучение форматов данных)  Восстановление поврежденной информации (анализ дампов ФС)  Автоматизация получения исходного кода (анализ компиляторов и ВМ)
  • 7. Исследование проблем безопасности: формы  Capture The Flag (CTF)  Red Team  Тест на проникновение  Поиск уязвимостей на заказ  Bug Bounty  No Such Agency
  • 8. Примерные цены на уязвимости «нулевого дня» Название уязвимого ПО Тип уязвимости Рыночная цена (тысяч $) Apple iOS Удаленный Jailbreak 1500 Android Удаленный Jailbreak 200 Adobe Flash Player Удаленное выполнение кода + обход песочницы 100 Microsoft Windows Повышение привилегий 90 Adobe Reader, Google Chrome, Microsoft IE Удаленное выполнение кода + обход песочницы 80 Microsoft Office (Word, Excel) Удаленное выполнение кода 40
  • 9. Исследование проблем безопасности: типовые задачи  Написать эксплойт по публичному описанию уязвимости  Разобраться в коде неработающего эксплойта и починить его  Просканировать TCP-порты активных узлов локальной сети  Написать фаззер для проприетарного протокола или формата файла  Найти уязвимость нулевого дня  Написать отчет по результатам ресерча
  • 10. Клонирование ПО и восстановление кода: типовые задачи  Изучить закрытый сетевой протокол и написать под него клиента  Выяснить предназначение полей проприетарного формата файла и добавить его поддержку в свою программу  Изучить драйвер устройства и переписать его под другую ОС  Разобрать код виртуальной машины и написать дизассемблер её байт-кода  Изучить устройство компилятора и написать декомпилятор для генерируемых им программ
  • 11. Почему не перспективен взлом программ?  Никто не будет платить больше, чем стоит одна лицензия  Зачастую обход защит – разовая, не постоянная работа  Мало перспектив технического роста – нечего созидать  Нет перспектив вертикального роста – нет коллектива  Уголовный (как минимум, теневой) характер деятельности  Постепенный захват рынка веб-приложениями  Смещение фокуса с программы на контент
  • 12. Чем плохи соревнования CTF?  Зачастую они оторваны от жизни и дают лишь базовые навыки проведения исследований  У участников команды нет полноценной ответственности за отсутствие результата  Участие в соревнованиях не является подтверждением квалификации или пропуском на серьезные проекты  Победы в соревнованиях котируются только среди других «спортсменов»
  • 13. Промежуточные итоги 1. Обход лицензионных механизмов в ПО как направление деятельности – это дно отрасли 2. Поиск уязвимостей с целью их продажи – прибыльная тема, но для небольших команд, из-за нестабильности дохода 3. Обратная разработка с целью создания ПО – круто и полезно, но только для обеспечения совместимости 4. Разработка средств трансляции кода – Олимп, к которому нужно идти 5. Начинать карьеру в реверсе лучше с позиции интерна, а не CTF-игрока
  • 15. Миф №1 Y: Любой специалист в RE должен уметь пользоваться программой IDA Pro. I: Это не так:  знание инструмента – не основной штрих портрета реверс-инженера  интерактивная обратная разработка – это хорошо, но сейчас актуальней автоматизация этого процесса
  • 16. Миф №2 Y: Любой специалист в RE должен знать устройство ядер популярных ОС. I: Это не так:  Количество прикладного ПО существенно больше количества драйверов – задач и проектов там больше  Навыки RE в данном направлении вторичны – на первом месте разработка компонентов ядра
  • 17. Миф №3 Y: Любой специалист в RE должен хорошо разбираться в электронике. I: Это не так:  В корне жизнеспособности современных информационных систем лежит абстракция – можно всю жизнь искать баги в User Mode и сытно жить  Даже проекты по исследованию встраиваемого ПО не всегда требуют навыков проектирования/чтения цифровых схем
  • 18. Миф №4 Y: Специалист в RE не обязан уметь разрабатывать ПО. I: Это не так:  Экономия на кадрах вынуждает искать или растить человека-оркестра – исследователя и разработчика в одном лице  Понимание различных аспектов разработки и логики программистов упрощает RE и поиск багов
  • 19. Миф №5 Y: Специалист в RE не обязан хорошо знать C++. I: Это не так:  Крупные и требовательные к ресурсам коммерческие программы пишутся на C++ (включая встраиваемое ПО)  Популярные в области автоматизации анализа программ проекты LLVM и Clang написаны на C++
  • 20. Миф №6 Y: Специалист в RE не обязан разбираться в естественно-научных дисциплинах. I: Это не так:
  • 21. Что же ему нужно знать?
  • 22. Настоящий Reverse Engineer – спец широкого профиля Исследователь с большой буквы «R»
  • 23. Алгоритмы и структуры данных Микропроцессорные архитектуры
  • 27. Языки программирования  Отличное владение C, C++, Python. Остальное – по необходимости.  Может пригодиться умение читать C#, Java, JavaScript.  Может пригодиться навык разработки на Perl, Ruby, Lua.  Не забывать про функциональные языки!
  • 29. Алгоритмы и структуры данных  Robert Sedgewick: Algorithms in C++  Thomas Cormen: Introduction to Algorithms  Alfred Aho: Data Structures and Algorithms  Donald Knuth: The Art of Computer Programming  http://www.compression.ru/  http://e-maxx.ru
  • 30. Теория компиляции  Aho, Sethi, Ullman, Compilers: Principles, Techniques, and Tools  Grune, Reeuwijk, Bal, Jacobs, Langendoen: Modern Compilers Design  Lopes, Auler: Getting Started with LLVM Core Libraries  http://citforum.ru/programming/theory/serebryakov/  http://www.ispras.ru/groups/ctt/publications.php  http://www.iecc.com/linker/  http://llvm.org/pubs
  • 31. Архитектура операционных систем  Andrew Tanenbaum: Modern Operating Systems  Jeffrey Richter: Programming Applications for Microsoft Windows  Russinovich, Solomon, Ionescu: Windows Internals  Tanenbaum, Steen: Distributed Systems. Principles and Paradigms.
  • 32. Сетевые протоколы  Andrew Tanenbaum: Computer Networks  Ilya Grigorik: High Performance Browser Networking  Medhi, Ramasamy: Network Routing: Algorithms, Protocols, and Architectures  https://tools.ietf.org/area/int
  • 33. Криптография  Bruce Schneier, Tadayoshi Kohno: Cryptography Engineering. Design Principles and Practical Applications  Bruce Schneier: Applied Cryptography. Protocols, Algorithms, and Source Code in C  Menezes, Oorschot, Vanstone: Handbook of Applied Cryptography
  • 34. Обратная разработка  Dennis Yurichev: Reverse Engineering for Beginners  Chris Eagle: The IDA Pro book (2011)  Dang, Gazet, Bachaalany: Practical Reverse Engineering  https://reverseengineering.stackexchange.com  http://www.devttys0.com
  • 35. Поиск уязвимостей  Justin Seitz: Gray Hat Python  Jon Erickson: Hacking. The Art of Exploitation  Anley, Heasman, Linder, Richarte: The Shellcoder's Handbook  http://www.phrack.org  https://www.corelan.be/index.php/articles  https://firmwaresecurity.com