Мы находимся в поиске Reverse инженера, которому предстоит заниматься анализом двоичного кода с целью поиска ошибок реализации, уязвимостей и/или восстановления логики работы программ. Объекты для анализа могут поставляться другими отделами, выявляться в ходе расследования инцидентов, анализа патчей и т.п. От соискателя ожидается пытливость ума, склонность к анализу и постоянное желание изучать новое.
Требования:
- Понимание принципов проектирования и построения вычислительных систем;
- Знание типов уязвимостей в бинарном коде, причины их появления, способы обнаружения и эксплуатации;
- Хорошее знание архитектуры и внутреннего устройства OC хотя бы одной популярной операционной системы (Windows/UNIX/Linux/MacOS);
- Желательно знание архитектуры и внутреннего устройства хотя бы одной популярной мобильной операционной системы (Windows/Android/iOS);
- Хорошее знание языка ассемблера для как можно большего числа архитектур процессоров (x86, AMD64, ARM, AArch64, MIPS);
- Желательно базовое знание байткода популярных сред выполнения (IL, Java);
- Умение "читать" и понимать код на популярных языках программирования (С/C++/C#/Delphi/Java/Python/PHP/JavaScript);
- Знание особенностей кодогенерации современных компиляторов;
- Умение программировать на C/C++ и, желательно, на Python (для прототипирования);
- Понимание особенностей применения криптографии и возникающих при этом проблем;
- Технический английский (чтение документации);
- Базовое знание алгоритмов и структур данных;
- Базовое знание форматов файлов и методов компрессии;
- Базовое знание сетевых протоколов и методов их анализа, стека TCP/IP (WireShark);
- Базовое знание протоколов HTTP, SOAP;
- Знание инструментов и методов анализа кода;
- Владение IDA Pro и средствами ее расширения (плагины, IDAPython);
- Хорошие навыки отладки двоичного кода;
- Умение самостоятельно разрабатывать недостающий инструментарий.
Задачи:
- Анализ логики работы отдельных частей приложения;
- Написание функциональных прототипов, повторяющих работу реконструированного кода;
- Анализ изменений, вносимых патчами;
- Обнаружение логических ошибок и уязвимостей в двоичном коде;
- Разработка PoC-эксплойтов и способов безопасной проверки на наличие/отсутствие уязвимости;
- Анализ функционала вредоносного кода и документирование способов его взаимодействия со средой выполнения;
- Документирование обнаруженных проблем.