Rust, Хакинг на Rust

Курс — Хакинг на Rust. #17 Инструменты хакера на Rust. Создание эксплойтов. Инструменты для анализа бинарников (например, GDB + Rust)

Здравствуйте, дорогие друзья.

Анализ бинарного кода — ключевой этап создания эксплойтов и исследования уязвимостей. В Rust, несмотря на высокий уровень абстракции, бинарники сохраняют низкоуровневые особенности, что делает их анализ схожим с C/C++. Однако есть нюансы:

  • Манглирование имён: Rust использует сложные схемы именования функций (например, _ZN4core3ptr18real_drop_in_place17h...).
  • Оптимизации LLVM: Компилятор агрессивно оптимизирует код, усложняя чтение дизассемблированного кода.
  • Структуры данных: Контейнеры вроде Vec или String требуют понимания их внутреннего устройства.

Для эффективного анализа используются:

  • Отладчики: GDB, LLDB.
  • Дизассемблеры: Radare2, Ghidra, Binary Ninja.
  • Фреймворки: Pwntools (Python), pwntools-rs (Rust).

GDB: Основной инструмент для отладки

GDB (GNU Debugger) позволяет анализировать выполнение программы, проверять регистры, память и стек. Для Rust существуют специальные расширения, упрощающие работу.

Установка и настройка

  1. Установите GDB и плагин для Rust:

2. Запустите программу в GDB:

Полезные команды GDB

  • break main: Установить точку останова на функции main.
  • run <args>: Запустить программу с аргументами.
  • disassemble: Показать дизассемблированный код текущей функции.
  • info registers: Вывести значения регистров.
  • x/20xw $rsp: Просмотреть 20 слов (4 байта) по адресу стека (RSP).
  • bt: Показать трассировку стека.

Пример: Анализ буферного переполнения

Пусть есть уязвимая программа:

Шаги анализа:

  1. Скомпилируйте программу с отладочной информацией:

2. Запустите в GDB:

3. Установите точку останова в функции vulnerable и запустите с аргументом:

4. Проверьте регистры и стек после переполнения:

Если RIP перезаписан на 0x41414141, уязвимость подтверждена.

    Работа с манглированными именами

    Rust-функции имеют длинные имена вида _ZN4core3ptr10drop_in_place17h.... Используйте rustfilt для деманглирования:

    В GDB можно автоматически деманглировать имена:

    Дополнительные инструменты

    Radare2

    Мощный открытый фреймворк для анализа бинарников. Пример использования:

    Ghidra

    Графический дизассемблер с поддержкой Rust. Позволяет:

    • Визуализировать поток управления.
    • Переименовывать функции и переменные.
    • Экспортировать скрипты для автоматизации.

    Pwntools-rs

    Rust-версия популярного фреймворка для эксплойт-разработки. Пример:

    Советы по эффективному анализу

    1. Компилируйте с отладкой: Используйте cargo build вместо --release для сохранения символов.
    2. Отключайте оптимизации: В Cargo.toml добавьте:

    3. Используйте core-дампы:

    1. Сравнивайте версии: Уязвимости могут зависеть от версии компилятора или стандартной библиотеки.

    Этический контекст

    Анализ бинарников требует разрешения владельца системы. Используйте эти навыки только для:

    • Обучения в CTF-соревнованиях.
    • Аудита собственного кода.
    • Исследований в рамках законодательства.

    Задание для самостоятельной работы:

    1. Проанализируйте уязвимую программу из примера, найдя смещение до RIP.
    2. Настройте Ghidra для деманглирования Rust-функций.
    3. Напишите скрипт на pwntools-rs для автоматизации эксплойта из предыдущего раздела.

    Итог:
    Инструменты вроде GDB, Radare2 и Ghidra раскрывают «чёрные ящики» Rust-бинарников, помогая находить уязвимости и создавать эксплойты. Успех зависит от понимания низкоуровневых механизмов и практики.

    Хакинг на языке программирования Rust

    На этом все. Всем хорошего дня!

    Цикл статей по курсу — «Хакинг на Rust».