Гостевая статья AutoPwn - Автоматизация повторяющихся задач для Fuzzing

fuzzing.jpeg


Предупреждение
Полностью переписываю это прямо сейчас. Основное внимание будет уделено интерактивным приложениям Linux, которые только для начала получают ввод от стандартного ввода. Попытка использовать функциональность Shellphish Driller и .
autoPwn в своем текущем состоянии сделает это в ограниченной форме. Просто запустите и autoPwn ./binary выберите опцию «Пуск».

Установка
Учитывая все проблемы с зависимостями, самый простой способ запустить и запустить autoPwn - это использовать сборку Docker. Обратите внимание, что вы можете удалить операторы --security-opt и --cap-add, но некоторые аспекты могут не сработать.
Код:
$ sudo docker pull bannsec/autoPwn
 $ sudo docker run -it -v $PWD:/mount --security-opt="apparmor=unconfined" --cap-add=SYS_PTRACE bannsec/autoPwn

В сборке Docker все должно быть готово к работе. Вы можете просто запустить инструмент с:
Код:
$ autoPwn ./file

Компиляция источника для фаззинга
autoPwn пытается упростить компиляцию источника для фаззинга проекта. Чтобы помочь с этим, [B]autoPwnCompile[/B] был создан. Просто укажите его на свой исходный код и задайте ему параметры, и он выведет исполняемый файл, готовый к распылению.
Код:
usage: autoPwnCompile [-h] [--file FILE] [--ASAN | --MSAN] [--UBSAN]
                       [--fuzzer FUZZER]
 
 Compile source to binaries for use in autoPwn.
 
 optional arguments:
   -h, --help       show this help message and exit
   --file FILE      Single file to compile.
   --ASAN           Enable ASAN (default off)
   --MSAN           Enable MSAN (default off)
   --UBSAN          Enable UBSAN (default off)
   --fuzzer FUZZER  (optional) What fuzzer to compile for. Options are:
                    ['AFL']. Default is AFL.
Ниже приведена старая версия autoPwn.

Обзор
autoPwn - хорошее имя для простого скрипта. Работая с fuzzing и afl-fuzz, я заметил, что буду выполнять одни и те же задачи снова и снова. Имея это в виду, я хотел создать скрипт, который бы выполнял следующее:
  1. Автоматизируйте и упростите задачу запуска фаззера с помощью интеллектуальных подсказок.
  2. Автоматизируйте и упростите задачу перезапуска фаззера через файл конфигурации
  3. Полностью автоматизировать процесс минимизации всех очередей
  4. Полностью автоматизировать процесс извлечения и минимизации всех возможных путей использования
  5. Полностью автоматизировать процесс извлечения и минимизации всех возможных путей в целом.
  6. Полностью или частично автоматизировать генерацию начальных значений пути.
Пока что сценарий способен к первым 5. Часть 6 является спекулятивной и пытается сейчас развиваться. Это позволило бы использовать движок angr для создания возможных начальных путей. На этом этапе сценарий теоретически может полностью автоматизировать простые задачи фаззинга.

Пример
Давайте посмотрим на недавний вызов TUCTF под названием «WoO2». Хотя он не обязательно находит нужный эксплойт, он показывает, как autoPwn можно использовать для упрощения обнаружения пути.
Вот основной прогон через программу:
Код:
$ ./e67eb287f23011a40ef5bd5c2ad2f48ca97834cf
 Welcome! I don't think we're in Kansas anymore.
 We're about to head off on an adventure!
 Select some animals you want to bring along.
 
 Menu Options:
 1: Bring a lion
 2: Bring a tiger
 3: Bring a bear
 4: Delete Animal
 5: Exit
 
 Enter your choice:
 1
 Choose the type of lion you want:
 1: Congo Lion
 2: Barbary Lion
 1
 Enter name of lion:
 Test
 Menu Options:
 1: Bring a lion
 2: Bring a tiger
 3: Bring a bear
 4: Delete Animal
 5: Exit
 
 Enter your choice:
 5
Давайте создадим простой входной тестовый пример:
Код:
$ cat in/1
 1
 1
 Test
 5

Теперь мы можем легко запустить фаззер:
Код:
$ autoPwn
 Setting up fuzz configuration
 Target Binary (full or relative path): e67eb287f23011a40ef5bd5c2ad2f48ca97834cf
 Command line args:
 Number of cores (default: 8):
 Test Case Dir (default: 'in/'):
 Test Case Dir (default: 'out/'):
 Max memory (default: 200): 4096
 Starting fuzz
 autoPwn> s
 status check tool for afl-fuzz by
 
 Individual fuzzers
 ==================
 
 >>> SESSION007 (0 days, 0 hrs) <<<
 
   cycle 1, lifetime speed 1 execs/sec, path 0/1 (0%)
   pending 1/1, coverage 0.15%, no crashes yet
 
 >>> SESSION000 (0 days, 0 hrs) <<<
 
   cycle 1, lifetime speed 1 execs/sec, path 0/1 (0%)
   pending 1/1, coverage 0.15%, no crashes yet
 
 >>> SESSION002 (0 days, 0 hrs) <<<
 
   cycle 1, lifetime speed 1 execs/sec, path 0/1 (0%)
   pending 1/1, coverage 0.15%, no crashes yet
 
 >>> SESSION006 (0 days, 0 hrs) <<<
 
   cycle 1, lifetime speed 1 execs/sec, path 0/1 (0%)
   pending 1/1, coverage 0.15%, no crashes yet
 
 >>> SESSION004 (0 days, 0 hrs) <<<
 
   cycle 1, lifetime speed 1 execs/sec, path 0/1 (0%)
   pending 1/1, coverage 0.15%, no crashes yet
 
 >>> SESSION001 (0 days, 0 hrs) <<<
 
   cycle 1, lifetime speed 1 execs/sec, path 0/1 (0%)
   pending 1/1, coverage 0.15%, no crashes yet
 
 >>> SESSION005 (0 days, 0 hrs) <<<
 
   cycle 1, lifetime speed 1 execs/sec, path 0/1 (0%)
   pending 1/1, coverage 0.15%, no crashes yet
 
 >>> SESSION003 (0 days, 0 hrs) <<<
 
   cycle 1, lifetime speed 1 execs/sec, path 0/1 (0%)
   pending 1/1, coverage 0.15%, no crashes yet
 
 Summary stats
 =============
 
        Fuzzers alive : 8
       Total run time : 0 days, 0 hours
          Total execs : 0 million
     Cumulative speed : 8 execs/sec
        Pending paths : 8 faves, 8 total
   Pending per fuzzer : 1 faves, 1 total (on average)
        Crashes found : 0 locally unique
 
 
 autoPwn> h
 autoPwn
      s == fuzzer (s)tatus
      e == collect (e)xploits
      a == collect (a)ll paths
      m == (m)inimize corpus
      q == (q)uit

Таким образом, сценарий создал некоторые значения по умолчанию (включая определение количества доступных ядер). Мы изменили одно значение по умолчанию из-за необходимости в дополнительной памяти для запуска в QEMU. AutoPan создал конфигурационный файл, который затем передал afl-utils ( ). В файле config он также устанавливает аффинность ЦП, так что fuzzing будет оптимальным по умолчанию.
В этот момент ваш компьютер отцепляется от раздувания. Однако одним из ключевых аспектов фузирования является минимизация корпуса. С учетом этого autoPwn наблюдает за экземпляром afl-fuzz, чтобы следить за тем, когда последовательность мутаций завершена. Когда это произойдет, он прекратит фузирование (неоптимальное, но пока прекрасно), минимизирует корпус, затем вновь начнет фузирование. Он делает это без вмешательства человека.
В какой-то момент вы, возможно, захотите взглянуть на то, какие пути за спиной нашли. При выполнении команды "a" autoPan копирует все известные пути, минимизирует корпус, а затем минимизирует сами случаи и предоставляет их в выходной каталог.

 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!