Отключите Рандомизацию расположения адресного пространства (ASLR) для моих процессов

Вот другая стратегия, которая, возможно, нуждалась бы в тонкой настройке, но должна быть более эффективной с большими блоками данных. Идея состоит в том, чтобы выполнить syscalls в удаленном процессе для получения содержания стека. Этому будет нужен определенный код архитектуры, но если Вы только нацелены на x86 / x86_64, это не должно быть слишком много стычки.

  1. Создайте именованный канал такой как "/tmp/fifo" в Вашей обработке вызовов.
  2. Шаг в прослеженный процесс, пока это не возвращается из syscall, с помощью PTRACE_SYSCALL ступить, waitpid() ожидать и PTRACE_GETREGS/PTRACE_PEEKTEXT проверять в настоящее время выполняемый код операции.
  3. Скопируйте регистры удаленного процесса и небольшую площадь его стека.
  4. Выполните syscalls на удаленном процессе путем переопределения его стека с собственными данными: open("/tmp/fifo"), write() содержание стека, close() дескриптор.
  5. Восстановите состояние удаленного процесса.
  6. Считайте данные FIFO со своей обработки вызовов.

Могли бы быть более изящные альтернативы именованному каналу, но я не могу думать ни о ком прямо сейчас. Причина я только использую syscalls, состоит в том, потому что удаленная инжекция кода довольно ненадежна в современных системах из-за различных средств обеспечения безопасности. Недостаток состоит в том, что это зависнет, пока удаленный процесс не делает syscall (который может быть проблемой для некоторых программ, которые главным образом делают вычисления).

Вы видите, что некоторый бесплатный код реализует большую часть работы в этом исходном файле. Обратная связь на коде приветствуется!

4
30.06.2011, 23:26
1 ответ

Я думаю, что можно сделать это как это:

  • Запишите программу, которую это разветвляет
  • После ветвления необходимо сделать что-то как

    int old, rc;
    old = personality(0xffffffff); /* Fetch old personality. */
    rc = personality(old | ADDR_NO_RANDOMIZE);
    if (-1 == rc) {
        perror("personality");
    }
    
  • И затем exec Ваша программа

4
27.01.2020, 20:56

Теги

Похожие вопросы