URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 91583
[ Назад ]

Исходное сообщение
"Watchman - новый GCC-фреймворк для защиты от переполнения бу..."

Отправлено opennews , 06-Сен-13 11:30 
Представлена (http://permalink.gmane.org/gmane.comp.security.oss.general/1...) новая надстройка над GCC - Watchman (https://github.com/ewimberley/Watchman), нацеленная на выявление выходов за допустимые границы памяти и блокирование переполнений буферов в приложениях. Принцип действия Watchman сводится к добавлению дополнительных случайных данных в кучу и стек, с последующей их периодической проверкой. Подобные проверки негативно влияют на производительность, но оправданы в ситуациях, когда безопасности уделяется первостепенное внимание.


URL: http://permalink.gmane.org/gmane.comp.security.oss.general/1...
Новость: http://www.opennet.me/opennews/art.shtml?num=37841


Содержание

Сообщения в этом обсуждении
"Watchman - новый GCC-фреймворк для защиты от переполнения бу..."
Отправлено Аноним , 06-Сен-13 11:30 
Как оно по сравнению с SSP-патчами и защитой на уровне malloc в glibc ? На первый взгляд только проверяет чаще и рандомных данных пишет больше.

"Watchman - новый GCC-фреймворк для защиты от переполнения бу..."
Отправлено pavlinux , 06-Сен-13 19:50 
От кривых рук ни один патч не спасёт, особо в С.  Так что, foreach in <limits.h> do ... вперед с песней.

"Watchman - новый GCC-фреймворк для защиты от переполнения бу..."
Отправлено AnonuS , 07-Сен-13 00:49 
> От кривых рук ни один патч не спасёт, особо в С.  
> Так что, foreach in <limits.h> do ... вперед с песней.

Павлик, переходи на C++, пользуй STL и BOOST, включи максимальный уровень предупреждений и спасёшься, ибaвaистину...


"Watchman - новый GCC-фреймворк для защиты от переполнения бу..."
Отправлено ВовкаОсиист , 06-Сен-13 12:05 
Эм, а использовать онное только для поиска выходов в процессе тестирования/дебага, не? Или виндус вей, выпускаем debug-версию, ибо в релизе падает xD

"Watchman - новый GCC-фреймворк для защиты от переполнения бу..."
Отправлено AnonuS , 07-Сен-13 00:45 
> ... Или виндус вей, выпускаем debug-версию, ибо в релизе падает xD

Вован, это ты клёво придумал, такой незамысловатый подход наверняка сберёг очень много твоего личного времени и нервов.


"Watchman - новый GCC-фреймворк для защиты от переполнения бу..."
Отправлено Вонни пух , 06-Сен-13 12:51 
grsecurity с PaX все исправит

Решать проблему нужно на уровне ядра а не софта, хотя оба варианта хороши


"Watchman - новый GCC-фреймворк для защиты от переполнения бу..."
Отправлено ___ , 06-Сен-13 21:05 
Ядро может контролировать поведение, но не всегда и не все. Очень упрощенно, вы запросили 1k памяти для массива, ядро в силу страничной организации выделило 4к, все, выход за пределы 1к это сугубо дело вашей программы. Так же не забываем что еще есть static, область стека, ядро сможет проконтроллировать сколько памяти выделить (а точнее отобразить) под стек и static, но все что происходит внутри уже выделенных страниц памяти ядру неподконтрольно.

"Watchman - новый GCC-фреймворк для защиты от переполнения бу..."
Отправлено Пампарам. , 06-Сен-13 22:25 
>Ядро может контролировать поведение, но не всегда и не все.

Всегда и все, или ядро не ядро.

> Очень упрощенно, вы запросили 1k памяти для массива, ядро в силу страничной организации выделило 4к, все, выход за пределы 1к это сугубо дело вашей программы.

Чего, чего?

>Так же не забываем что еще есть static, область стека, ядро сможет проконтроллировать сколько памяти выделить (а точнее отобразить) под стек и static, но все что происходит внутри уже выделенных страниц памяти ядру неподконтрольно.

Гуглить на тему дефрагментации памяти, менеджеров памяти, и т.д, и т.п. Много думать.


"Watchman - новый GCC-фреймворк для защиты от переполнения бу..."
Отправлено ___ , 06-Сен-13 23:14 
>>Ядро может контролировать поведение, но не всегда и не все.
> Всегда и все, или ядро не ядро.
>> Очень упрощенно, вы запросили 1k памяти для массива, ядро в силу страничной организации выделило 4к, все, выход за пределы 1к это сугубо дело вашей программы.
> Чего, чего?

Не путаем выделение памяти в ядре и оптимизации которые может сделать malloc, или другой распределитель памяти в пространстве пользователя.

>>Так же не забываем что еще есть static, область стека, ядро сможет проконтроллировать сколько памяти выделить (а точнее отобразить) под стек и static, но все что происходит внутри уже выделенных страниц памяти ядру неподконтрольно.
> Гуглить на тему дефрагментации памяти, менеджеров памяти, и т.д, и т.п. Много
> думать.

То же самое на тему mmu и страничной адресации.


"Watchman - новый GCC-фреймворк для защиты от переполнения бу..."
Отправлено qux , 07-Сен-13 14:10 
Простите, влезу.

> Всегда и все, или ядро не ядро.

Hint: почему корректность входящих параметров не проверяется во всех-всех функциях ядра (и не только его)?

> Чего, чего?

А что неясного?

> Гуглить на тему дефрагментации памяти, менеджеров памяти, и т.д, и т.п. Много думать.

Всегда приятно видеть образованных людей. Которые про гугл знают, в смысле.
Ничего, что эти вещи и в юзерспейсе расположены?


"Watchman - новый GCC-фреймворк для защиты от переполнения бу..."
Отправлено linux must _RIP_ , 06-Сен-13 14:21 
научите gcc не делать трамплины на стеке и будет вам радость с PAX.

"Watchman - новый GCC-фреймворк для защиты от переполнения бу..."
Отправлено linux must _RIP_ , 06-Сен-13 14:23 
> grsecurity с PaX все исправит
> Решать проблему нужно на уровне ядра а не софта, хотя оба варианта
> хороши

17.12 Trampolines for Nested Functions

A trampoline is a small piece of code that is created at run time when the address of a nested function is taken. It normally resides on the stack, in the stack frame of the containing function. These macros tell GCC how to generate code to allocate and initialize a trampoline.

после чего запасаемся покорном когда часть софта перестает работать.


"Watchman - новый GCC-фреймворк для защиты от переполнения бу..."
Отправлено Вонни пух , 06-Сен-13 14:29 
>> grsecurity с PaX все исправит
>> Решать проблему нужно на уровне ядра а не софта, хотя оба варианта
>> хороши
> 17.12 Trampolines for Nested Functions
> A trampoline is a small piece of code that is created at
> run time when the address of a nested function is taken.
> It normally resides on the stack, in the stack frame of
> the containing function. These macros tell GCC how to generate code
> to allocate and initialize a trampoline.
> после чего запасаемся покорном когда часть софта перестает работать.

Делаем ставки на clang + MemorySanitizer + AddressSanitizer  + valgrind и не используем gcc


"Watchman - новый GCC-фреймворк для защиты от переполнения бу..."
Отправлено qux , 07-Сен-13 14:21 
А можно несколько примеров, когда без Nested Functions вообще никак? Которые gcc extension и отсутствуют в стандарте С.

"Watchman - новый GCC-фреймворк для защиты от..."
Отправлено arisu , 08-Сен-13 02:48 
> А можно несколько примеров, когда без Nested Functions вообще никак?

можно и вооще без си. и даже без ассемблера — напрямую машинный код фигачить. только зачем? nested functions и compound statements — мегаудобные штуки. ну, нет их в стандарте — что ж теперь, кровью харкать?


"Watchman - новый GCC-фреймворк для защиты от переполнения бу..."
Отправлено none7 , 07-Сен-13 11:55 
>Принцип действия Watchman сводится к добавлению дополнительных случайных данных в кучу и стек, с последующей их периодической проверкой

Случайности не случайны. Это может защитить от ошибок переполнения буфера из за некорректных данных, но от целенаправленной атаки скорей всего не защитит.


"Watchman - новый GCC-фреймворк для защиты от переполнения бу..."
Отправлено аноня , 07-Сен-13 12:41 
Грабли Си такие грабли. И это вместо того, чтоб использовать адекватный(е) язык(и).