Skip to content

Commit 270e153

Browse files
authored
Merge pull request #6 from ispras/update-crusher-info
Update crusher info
2 parents 14a4fff + ea22394 commit 270e153

File tree

160 files changed

+660
-437
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

160 files changed

+660
-437
lines changed
File renamed without changes.
Lines changed: 74 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,74 @@
1-
Нахождение аварийного завершения OpenSSL-сервера, соответствующего уязвимости `CVE-2016-6309`.
2-
3-
Демонстрируются следующие возможности фаззера:
4-
5-
1) Описание формата данных с помощью `Peach Pit` (модифицированного для `Crusher`);
6-
7-
2) Замена вызовов некоторых функций целевой программы пользовательскими во время фаззинга.
8-
Т.к. речь идёт о сетевых функциях, которые работают медленно - обеспечивается ускорение запусков в десятки раз.
9-
Более подробно - см. раздел `"PRELOAD"` в документации фаззера.
10-
11-
Ниже представлены все этапы от подготовки к фаззингу до воспроизведения креша.
12-
13-
# Сборка OpenSSL со статической инструментацией
14-
Выполните команды в терминале (обратите внимание, что нужно указать актуальный путь до фаззера):
15-
```bash
16-
wget https://github.com/openssl/openssl/archive/OpenSSL_1_1_0a.tar.gz
17-
tar xvf OpenSSL_1_1_0a.tar.gz
18-
mkdir openssl
19-
cd openssl-OpenSSL_1_1_0a
20-
CC=/path/to/crusher/bin_x86-64/isp-gcc ./config --prefix=$PWD/../openssl/
21-
make -j 4
22-
make install
23-
cd ..
24-
```
25-
26-
# Генерация SSL-сертификатов
27-
```bash
28-
mkdir keys
29-
./openssl/bin/openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout keys/key.pem -out keys/cert.pem -batch
30-
```
31-
32-
# Фаззинг
33-
Скомпилировать разделяемую библиотеку для замены некоторых сетевых функций (для ускорения фаззинга):
34-
```bash
35-
cd custom_lib/
36-
make
37-
cd ..
38-
```
39-
40-
Для правильного детектирования аварийных завершений целевой программы со статической инструментацией выполнить:
41-
```bash
42-
sudo su
43-
echo core >/proc/sys/kernel/core_pattern
44-
exit
45-
```
46-
47-
Запустить фаззинг (`"-c 4"` - запуск на 4 ядрах):
48-
```bash
49-
ISP_PRELOAD=$PWD/custom_lib/custom_lib.so ./fuzz.sh -f /path/to/crusher/bin_x86-64/fuzz_manager -c 4
50-
```
51-
52-
Запустить в другом терминале UI фаззера:
53-
```bash
54-
/path/to/crusher/bin_x86-64/ui -o out
55-
```
56-
57-
В правом верхнем углу окна пользовательского интерфейса можно наблюдать окно `Stats`. В нём обратите внимание на поле `unique_crashes`.
58-
Как только будет найдено аварийное завершение, значение поля `unique_crashes` станет ненулевым. Пока значение поля нулевое - не останавливайте фаззинг.
59-
Желательно дождаться, когда значение поля будет больше 1. После этого можно остановить фаззинг:
60-
61-
* в терминале с `UI` (пользовательский интерфейс) - для выхода из `UI` нажмите кнопку `q`;
62-
* в терминале с запущенным фаззингом завершите фаззинг по комбинации клавиш `Ctrl+C`.
63-
64-
# Воспроизведение аварийного завершения
65-
1) Получить список креш-файлов:
66-
```bash
67-
find out -name id_crash_*
68-
```
69-
70-
2) Запуск сервера (будет слушать порт 4444):
71-
````bash
72-
./run_server.sh
73-
````
74-
75-
3) Запуск клиента (в другом терминале):
76-
```bash
77-
python run_client.py --ip 127.0.0.1 --port 4444 --crash-path <crash_path>
78-
```
79-
80-
где `<crash_path>` - один из файлов, полученных в п. 1)
81-
82-
4) В терминале с сервером наблюдаем его аварийное завершение.
83-
Если аварийного завершения не произошло, то повторяем п. 3) с другим файлом из п. 1)
1+
Нахождение аварийного завершения OpenSSL-сервера, соответствующего уязвимости CVE-2016-6309.
2+
3+
Демонстрируются следующие возможности фаззера:
4+
5+
1) Описание формата данных с помощью Peach Pit (модифицированного для Crusher).
6+
7+
2) Замена вызовов некоторых функций целевой программы пользовательскими во время фаззинга.
8+
Т.к. речь идёт о сетевых функциях, которые работают медленно - обеспечивается ускорение запусков в десятки раз.
9+
Более подробно - см. раздел `"PRELOAD"` в документации фаззера.
10+
11+
Ниже представлены все этапы от подготовки к фаззингу до воспроизведения креша.
12+
13+
# Подготовка OpenSSL сервера для фаззинга
14+
Включает следующие этапы:
15+
1) Сборка компилятора для статической инструментации OpenSSL.
16+
`Crusher` совместим со статической инструментацией, реализованной в `AFL++`.
17+
На этом этапе скачивается и собирается `AFL++` - в нём будет нужен только `afl-gcc`.
18+
2) Сборка OpenSSL со статической инструментацией.
19+
Скачивается (уязвимая) версия OpenSSL v1.1.0a и собирается с помощью `afl-gcc`.
20+
3) Генерация SSL-сертификата и ключа.
21+
Необходимы для работы OpenSSL сервера.
22+
4) Компиляция разделяемой библиотеки для замены некоторых сетевых функций (для ускорения фаззинга).
23+
24+
Для выполнения этих действий запустите:
25+
```shell
26+
./build.sh
27+
```
28+
29+
# Запуск фаззинга
30+
Для правильного детектирования аварийных завершений целевой программы со статической инструментацией выполнить:
31+
```shell
32+
sudo su
33+
echo core >/proc/sys/kernel/core_pattern
34+
exit
35+
```
36+
37+
Запустите фаззинг через `fuzz.sh`, указав путь до `fuzz_manager` (опция `-f`) и число ядер для фаззинга (опция `-c`):
38+
```shell
39+
ISP_PRELOAD=$PWD/custom_lib/custom_lib.so ./fuzz.sh -f /path/to/crusher/bin_x86-64/fuzz_manager -c 4
40+
```
41+
42+
# Мониторинг фаззинга
43+
Запустите в другом терминале UI фаззера:
44+
```shell
45+
/path/to/crusher/bin_x86-64/ui -o out
46+
```
47+
48+
В правом верхнем углу окна пользовательского интерфейса можно наблюдать окно `Stats`. В нём обратите внимание на поле `unique_crashes`.
49+
Как только будет найдено аварийное завершение, значение поля `unique_crashes` станет ненулевым. Пока значение поля нулевое - не останавливайте фаззинг.
50+
Желательно дождаться, когда значение поля будет больше 1. После этого можно остановить фаззинг:
51+
52+
* в терминале с `UI` (пользовательский интерфейс) - для выхода из `UI` нажмите кнопку `q`;
53+
* в терминале с запущенным фаззингом завершите фаззинг по комбинации клавиш `Ctrl+C`.
54+
55+
# Воспроизведение аварийного завершения
56+
1) Получить список креш-файлов:
57+
```shell
58+
find out -name id_crash_*
59+
```
60+
61+
2) Запуск сервера (будет слушать порт 4444):
62+
````shell
63+
./run_server.sh
64+
````
65+
66+
3) Запуск клиента (в другом терминале):
67+
```shell
68+
python run_client.py --ip 127.0.0.1 --port 4444 --crash-path <crash_path>
69+
```
70+
71+
где `<crash_path>` - один из файлов, полученных в п. 1)
72+
73+
4) В терминале с сервером наблюдаем его аварийное завершение.
74+
Если аварийного завершения не произошло, то повторяем п. 3) с другим файлом из п. 1)
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Download & build afl-gcc
2+
wget https://github.com/AFLplusplus/AFLplusplus/archive/3.0c.tar.gz
3+
tar xvf 3.0c.tar.gz
4+
cd AFLplusplus-3.0c/
5+
make -j4
6+
cd ..
7+
8+
# Build OpenSSL
9+
wget https://github.com/openssl/openssl/archive/OpenSSL_1_1_0a.tar.gz
10+
tar xvf OpenSSL_1_1_0a.tar.gz
11+
mkdir openssl
12+
cd openssl-OpenSSL_1_1_0a
13+
CC=../AFLplusplus-3.0c/afl-gcc ./config --prefix=$PWD/../openssl/ no-shared
14+
make -j4
15+
make install
16+
cd ..
17+
18+
# Create SSL certificate & key
19+
mkdir keys
20+
./openssl/bin/openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout keys/key.pem -out keys/cert.pem -batch
21+
22+
# Compile custom library (for ISP_PRELOAD)
23+
cd custom_lib/
24+
make
25+
cd -
File renamed without changes.
File renamed without changes.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@ echo "OpenSSL analysis"
2020
echo ""
2121
clean_result
2222

23-
COMMAND="$FUZZMANAGER --start $CORES -T IspPreloadNetworkToFile -I StaticForkSrv --port __free_port -t 2000 -o out --peach-pit $PWD/ClientHello.xml -F -i in -- $PWD/openssl/bin/openssl s_server -cert $PWD/keys/cert.pem -key $PWD/keys/key.pem -accept __free_port -www -naccept 1 @@"
23+
COMMAND="$FUZZMANAGER --start $CORES --eat-cores 1 --dse-cores 1 --dse-threads 0 -T File -I StaticForkSrv -t 2000 -o out --peach-pit $PWD/ClientHello.xml -F -i in -- $PWD/openssl/bin/openssl s_server -cert $PWD/keys/cert.pem -key $PWD/keys/key.pem -accept 1111 -www -naccept 1"
2424
echo $COMMAND
2525
$COMMAND
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)