Libfuzzer target для анализа на диске - PullRequest
0 голосов
/ 24 ноября 2018

В настоящее время я интегрирую libFuzzer в проект, который анализирует файлы на жестком диске.У меня есть некоторый предыдущий опыт работы с AFL, где использовалась такая командная строка:

afl-fuzz -m500 -i input/ -o output/ -t100 -- program_to_fuzz @@

... где @@ - это путь к сгенерированному вводу.Однако, глядя на libFuzzer, я вижу, что цели fuzz выглядят так:

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
  DoSomethingInterestingWithMyAPI(Data, Size);
  return 0;  // Non-zero return values are reserved for future use.
}

Я понимаю, что входные данные предоставляются не в виде файла, а в виде буфера в оперативной памяти.,Проблема в том, что программа, которую я пытаюсь распознать, работает с файлами и получает данные с помощью вызовов fread().В любой момент времени весь вход не должен быть загружен в память (где, в общем случае, он может даже не помещаться);поэтому я ничего не могу сделать с const uint8_t*.

Запись буфера обратно на жесткий диск для возврата файла кажется крайне неэффективной.Есть ли способ обойти это?

Ответы [ 2 ]

0 голосов
/ 20 января 2019

Вы можете сделать как в этом примере из команды безопасности Google.Файл buf_to_file, определенный здесь берет ваш буфер и возвращает char * путь к файлу, который вы затем можете передать своей цели:
(из https://github.com/google/security-research-pocs/blob/master/autofuzz/fuzz_utils.h#L27)

// Write the data provided in buf to a new temporary file. This function is  
// meant to be called by LLVMFuzzerTestOneInput() for fuzz targets that only  
// take file names (and not data) as input.  
//  
// Return the path of the newly created file or NULL on error. The caller should  
// eventually free the returned buffer (see delete_file).   
extern "C" char *buf_to_file(const uint8_t *buf, size_t size);

Убедитесь, чтоосвободить ресурс с помощью функции delete_file .

0 голосов
/ 04 декабря 2018

Вы можете использовать LD_PRELOAD и переопределить fread.

...