The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Проект grsecurity опубликовал реализацию механизма защиты RA..., opennews (ok), 07-Фев-17, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


20. "Проект grsecurity опубликовал реализацию механизма защиты RA..."  +/
Сообщение от . (?), 07-Фев-17, 17:33 
> Ранее предлагаемые способы защиты от атак с использованием методов возвратно-
> ориентированного программирования, как правило, основывались на рандомизации адреса
> загрузки библиотеки, который при технике ASLR меняется при каждом запуске программы.

что-то тут у них концы с концами не сходятся?

> Слабая сторона такого способа в том, что атакующий может подобрать точку входа в

и как ее подбирать - код исполнять мы не можем, пока не узнаем адрес, адрес узнать не можем, пока не исполним код (проба должна быть выполнена именно из этого инстанса,
потому что рандом у нас при каждой загрузке новый, так что менять адрес вслепую, пока не угадаешь, не вариант)

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

или все же ему мешает ненужность? ;-)

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


Ответить | Правка | Наверх | Cообщить модератору
Часть нити удалена модератором

30. "Проект grsecurity опубликовал реализацию механизма защиты RA..."  –2 +/
Сообщение от Аноним (-), 07-Фев-17, 19:12 
Может, ещё как может. Стандарты защиты таковы, что системный код разбивают на две части: ядро + системная библиотека. В Windows это ntoskrnl + *.dll, причём системная библиотека грузится в адресное пространство программы. Т.к. системные библиотеки у всех общие, то системные библиотеки грузятся в разделяемую память, общую для всех программ, доступную программам только для чтения. Ядро в теории вообще не должно быть доступно, т.к. SYSCALL позволяет вынести его в недоступное адресное пространство, но обычно его ложат вместе с системными библиотеками.

А вот теперь карнавал!

Зная адреса, можно передать управление напрямую в системный код. Обычно, это бесполезно, т.к. кольца защиты надёжно режут права и ничего серьёзного выполнить не получится, а при первой же ошибке ОС закроет программу. Но в ряде случаев удаётся "пошалить". Так Windows 95 (и не только он) не защищал дескрипторы памяти, и можно было перезаписать дескриптор памяти, сделать любой системный вызов, а по возвращению стать программой 0-ого кольца. Сейчас таких дыр больше не допускают, но принцип остаётся.

Ответить | Правка | К родителю #26 | Наверх | Cообщить модератору

45. "Проект grsecurity опубликовал реализацию механизма защиты RA..."  +1 +/
Сообщение от пох (?), 08-Фев-17, 00:24 
> Может, ещё как может. Стандарты защиты таковы, что системный код разбивают на
> две части: ядро + системная библиотека.

я не знаю что ты такое называешь "системной библиотекой".
libc состоит из вполне банальных сишных функций - позиксных оберток, никакой совершенно "системной" мистики там нет. Ты можешь ими не пользоваться, а изобрести собственный велосипед с квадратным колесом, вот прямо в userspace, это ни на йоту не увеличит права твоей программы.
Вход в ядро возможен только через гейт, на x86/64 архитектуре это, внезапно, вызов int80, опять таки, у нас тут не винда, совершенно не нужно быть libc чтобы его вызвать, и да, пространство адресов ядра - отображается в твое, но ни прочитать что-то оттуда в обход гейта, ни тем более записать, ни исполнить, у тебя не получится, прилетит sig11 (наоборот тоже есть фокусы, в принципе, ядро умеет читать/писать твое адресное пространство, но старается этого не делать). Смысла флэт-модели ты тоже так и не осилил понять.

> *.dll, причём системная библиотека грузится в адресное пространство программы. Т.к.

libc -_самая_обычная_ библиотека, из самых обычных функций - можешь считать, что она и есть твоя программа. Так же, как если бы ты впрямую ее исходники себе в код воткнул.
(у винды все в разы сложнее, но в сторону еще больших ограничений, а не наоборот)
Разница только в том, что она есть не только у тебя, и как правило, байт-в-байт одинаковая, никто у себя это не пересобирает, поэтому гаджеты пресловутые проще собирать из ее частей, чем из неведомой твоей.

> библиотеки у всех общие, то системные библиотеки грузятся в разделяемую память,

мля, как все запущено.
Еще одна страшная новость: ВСЕ, включая только что тобой полученный из mycoolproga.c a.out - грузится "в разделяемую память". Запустишь 500 экземпляров - код в памяти будет все равно только один.
А на самом деле даже и не грузится, а mmap'ается прямо с диска.
И нет, он (при некоторых ограничениях) доступен и на запись тоже. Как это происходит и почему при этом не рушатся все остальные 499 - написано в том же учебнике, который ты так и не прочитал за эти пять часов дальше первого абзаца.
И нет, libc в этом плане ничем от твоей программы не отличается.

Не сдашь ты завтра информатику, даже не пытайся.

> Зная адреса, можно передать управление напрямую в системный код. Обычно, это

нет, нельзя. И про "кольца защиты" тоже забудь, их не используют по прямому назначению двести лет как.

Итого - даже про суть проблемы, которую решает патч - ты не понял ровным счетом ничего. Она не имеет ни малейшего отношения ни к ядру, ни к системным библиотекам.

Ответить | Правка | Наверх | Cообщить модератору

47. "Проект grsecurity опубликовал реализацию механизма защиты RA..."  –1 +/
Сообщение от Аноним (-), 08-Фев-17, 01:22 
Ты бы хоть книжки почитал раз даже в терминологии плаваешь... Дам наводку: адресное пространство (твой "флэт") в 32-битной ОС обычно делится на две части. Найди и почитай зачем и что именно находится в верхней его части.

Вариантов вызова ядра много, также как и вариантов передачи параметров. Здесь основные: http://wiki.osdev.org/System_Calls И применительно к Линукс: https://blog.packagecloud.io/eng/2016/04/05/the-definitive-g.../ Надеюсь, ты знаешь английский и ассемблер, иначе зачем ты лезешь в системное программирование?

Ответить | Правка | Наверх | Cообщить модератору

61. "Проект grsecurity опубликовал реализацию механизма защиты RA..."  –1 +/
Сообщение от пох (?), 08-Фев-17, 14:59 
> Ты бы хоть книжки почитал раз даже в терминологии плаваешь

я эти книжки писал.
А вот ты дальше первой страницы так и не продвинулся, хотя я тебе уже трижды намекал, что ты не дочитал дальше довольно многое. Ну молодец, зазубрил "терминологию" (неведомо чью), а понять ничего так и не понял.

> Дам наводку: адресное пространство (твой "флэт") в 32-битной ОС обычно делится на две
> части. Найди и почитай зачем и что именно находится в верхней его части.

Теперь попробуй передать управление в эту самую "вторую часть", или из нее, и удивись результату.

А потом почитай что-нибудь еще, потому что описываемая технология не имеет, вот удивительно-то, ни малейшего отношения к передачам управления в код ядра, там речь исключительно о передачах управления внутри обычного пользовательского кода - но не туда, куда планировал автор.
То есть и тут ты не понял ровно ничего.
Я на этом с тобой спорить заканчиваю, тем более что модераторы тщательно оберегают душевное здоровье школоло, вместо того чтобы их глупости стирать.

Ответить | Правка | Наверх | Cообщить модератору

62. "Проект grsecurity опубликовал реализацию механизма защиты RA..."  –1 +/
Сообщение от пох (?), 08-Фев-17, 15:03 
>> Дам наводку: адресное пространство (твой "флэт") в 32-битной ОС обычно делится на две
>> части. Найди и почитай зачем и что именно находится в верхней его части.
> Теперь попробуй передать управление в эту самую "вторую часть", или из нее,
> и удивись результату.

а, да - для менее упертых и более любознательных школьников - рекомендую все же подумать (и поискать, но это непросто) а зачем, собственно, при этом все равно используют flat-модель абсолютно везде и все (и чем кончились попытки использовать сегментную, а они были)

Ответить | Правка | Наверх | Cообщить модератору

72. "Проект grsecurity опубликовал реализацию механизма защиты RA..."  +/
Сообщение от добрый (?), 09-Фев-17, 18:30 
Справедливости ради, попытки использовать разные сегменты были и вполне успешные, хоть и нишевые: это и PaX UDEREF для x86_32, и ядра редхата, позволявшие юзерспейс-процессам использовать все 4 ГБ адресуемой памяти.

Отказ от сегментации в AMD64 с целью упрощения архитектуры негативно сказался как минимум на аспекте безопасности: тот же UDEREF до появления процессоров с PCID и SMAP на x86_64 был (и остаётся - на процессорах без этих фич) основан на релокации пользовательских страниц по смещению, задаваемому единожды случайно. Такой UDEREF до сих пор носит заслуженное звание weak and slow. При этом даже SMAP считается авторами Grseucrity более слабым механизмом, чем его старый 32-битный аналог на базе сегментов, из-за каких-то деталей реализации (я узнавал, не вдаваясь в подробности).

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру