Почему это имеет смысл?
С одной стороны, клиент Bitcoin должен быть онлайн и связан со многими коллегами. С другой стороны, она обрабатывает данные, которые должны храниться в тайне любой ценой.
Таким образом, клиент обрабатывает сообщения от неизвестных сверстников всего времени. Если есть ошибка в обработке, не может быть переполнение буфера. Это может быть использовано, чтобы взять на себя клиент.
Есть три общих измерения в данный момент от таких атак:
- NX бит: функция процессора, что предотвращает данные от интерпретируется как код
- адрес рандомизация: ядро Linux дает каждому процесс разной стеку Адресу каждый раз
- НКА стек протектор: буфера на стеке окружены тестовыми данными, что делает его трудно переполнить буфер, не будучи обнаруженным
В то время как первые два выполнены с помощью аппаратных средств и операционной системы, третья настроено во время компиляции.
Код:
-fstack-протектор
Выделяют дополнительный код для проверки переполнения буфера, такие как стек
разбивая атаки. Это делается путем добавления переменного охранника
функции с уязвимыми объектами. Это включает в себя функцию,
называть ALLOCA и функции с буферами размером более 8 байт.
Охранники инициализируются, когда функция введена и затем проверяется
при выходе из функции. Если проверка охранник не удается, появляется сообщение об ошибке
распечатывается и программа завершается.
Примечание: В Ubuntu 6.10 и более поздних версиях эта опция включена по
по умолчанию для C, C ++, ObjC, ObjC ++, если ни один из -fno-стек-протектором,
-nostdlib, ни -ffreestanding найдены.
Выделяют дополнительный код для проверки переполнения буфера, такие как стек
разбивая атаки. Это делается путем добавления переменного охранника
функции с уязвимыми объектами. Это включает в себя функцию,
называть ALLOCA и функции с буферами размером более 8 байт.
Охранники инициализируются, когда функция введена и затем проверяется
при выходе из функции. Если проверка охранник не удается, появляется сообщение об ошибке
распечатывается и программа завершается.
Примечание: В Ubuntu 6.10 и более поздних версиях эта опция включена по
по умолчанию для C, C ++, ObjC, ObjC ++, если ни один из -fno-стек-протектором,
-nostdlib, ни -ffreestanding найдены.
Любые недостатки?
Конечно, каждое измерение такого рода влияет на производительность. Но это касается только функции, которые имеют буфера более чем 8 байт.
И если вы не построили его на Ubuntu до сих пор, вы должны были это активировано в любом случае, не зная.