?

Log in

No account? Create an account

Программистский вопрос залу - Общество дровосеков Бердичева по изучению Мишны

Nov. 16th, 2010

12:37 pm - Программистский вопрос залу

Previous Entry Share Next Entry

Comments:

From:rezkiy
Date:November 17th, 2010 04:00 am (UTC)
(Link)
ну как... В чем главная опасность оверранов на стеке -- в том, что злоумышленники перепишут адрес возврата и удачно попадут в функцию которая скачает эксплойт. А тут помимо адреса возврата появляются стотыщ интересных переменных, и если попасть в любую из них, то эффект примерно аналогичен. Ну то есть вот буфер, так получилось что он лежит прямо перед адресом возврата; перелетели, привет. Если он лежит не прямо перед адресом возврата, а между ними еще какой-нить указатель, то не факт, что прокатит, потому что ты этот указатель попортишь, оно прямо тут в функции и грохнется. Если на фрейме есть куча таких переменных как fn_Х, можно вместо адреса возврата загадить их, эффект будет примерно такой же, и кука (которое положики на стек в прологе и проверяют в эпилоге перед тем как сделать рет) уже не спасет.

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

Причем тут размер фрейма, я честно говоря не понял.

Ясное дело, что если код без ошибок, то ничего этого не надо, но где вы видели код без ошибок?
(Reply) (Parent) (Thread)
[User Picture]
From:spamsink
Date:November 17th, 2010 04:26 am (UTC)
(Link)
Если по адресу в коде эксплойта перейдут не командой возврата, как предполагал автор, а командой вызова, то данные, которые передадутся функции, окажутся не те, которые нужно, и эксплойт не сработает.

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

Впрочем, все это уводит от темы. Я-то Верилог компилирую, мне все эти эксплойты и оверраны до лампочки.
(Reply) (Parent) (Thread)
From:rezkiy
Date:November 17th, 2010 06:52 am (UTC)
(Link)
Все правильно, с той только разницей, что в обычном софтвере злоумышленник всегда прекрасно представляет себе устройство фрейма (бинарник есть, отладчик есть, что еще надо?), и наличие команд вызова никак не мешает ему поиграться с командой возврата, И добавляет команды вызова.

Это и есть новый вектор атаки про который я пишал выше, причем такой вектор который нельзя mitigate куками.

Я не знаю верилога вообще, но подозреваю, что там еть свой собственный класс секурити дыр. Берем малформд код, исполняем, и внезапно часть кода исполняется как будто в режиме ядра.
(Reply) (Parent) (Thread)
[User Picture]
From:spamsink
Date:November 17th, 2010 07:29 am (UTC)
(Link)
внезапно часть кода исполняется как будто в режиме ядра.

Это вряд ли. :)
(Reply) (Parent) (Thread)
From:rezkiy
Date:November 17th, 2010 07:31 am (UTC)
(Link)
ну и хорошо, буду спать спокойно. А от темы ушло, потому что я стал рассказывать про то, что такое вектор атаки.
(Reply) (Parent) (Thread)