Форум: "Прочее";
Текущий архив: 2007.10.07;
Скачать: [xml.tar.bz2];
ВнизПереполнение буфера/кучи Найти похожие ветки
← →
Галинка © (2007-09-08 17:03) [0]Где почитать по сабжу? Желательно на русском.
← →
tesseract © (2007-09-08 17:10) [1]буфера или таки стэка ?
← →
Инс © (2007-09-08 17:11) [2]
> или таки стэка ?
А я прочел "кучи"...
← →
Вася Правильный (2007-09-08 17:17) [3]переполнение где?
← →
Kerk © (2007-09-08 17:20) [4]Чего там читать? Там пол-абзаца на все. Хотя, наверно, новомодные авторы всяких паттернов напридумывали
← →
tesseract © (2007-09-08 17:22) [5]
> А я прочел "кучи"...
её можно переполнить ?
← →
Anatoly Podgoretsky © (2007-09-08 17:30) [6]> tesseract (08.09.2007 17:22:05) [5]
Можно все
← →
oxffff © (2007-09-08 17:31) [7]HeapCreate, HeapReAlloc?
VirtualAllocEx,VirtualFreeEx?
← →
Dib@zol © (2007-09-08 17:31) [8]Вруби бесконечную рекурсию и подожди часок другой - узнаешь.
← →
Инс © (2007-09-08 17:36) [9]
> её можно переполнить ?
Можно. Посмотри последний параметр HeapCreate. Даже если его установить нулевым, АП не резиновое.
PS: АП - это адресное пространство, а не Анатолий Подгорецкий ;)
← →
Anatoly Podgoretsky © (2007-09-08 17:37) [10]> Инс (08.09.2007 17:36:09) [9]
Я тоже не резиновый!
← →
Галинка © (2007-09-08 17:38) [11]В том то и дело, что есть буфер, который в стэке, а есть буфер - в "куче". Скорее всего это вопрос терминологии.
Имеется в виду "залезание" в неположенное место. Например, при попытке сохранения строки длинны большей, чем под нее выделено место, произойдет переписывание данных в памяти, следующей за выделенной под эту строку. Будет ошибка, и по логике, процедура будет завершена, и система перейдет на адрес возврата. Если нужным образом переадресовать точку выхода, то можно вызвать "нужную" программу.
Но пока у меня все как-то в кучу собрано. Хочется почитать что-то написанное более менее человеческим языком, чтобы понять и разложить все для себя по полочкам.
← →
Инс © (2007-09-08 17:40) [12]
> Например, при попытке сохранения строки длинны большей,
> чем под нее выделено место, произойдет переписывание данных
> в памяти, следующей за выделенной под эту строку
Совсем не факт. Очень даже вероятно не перезаписывание, а сразу же AV. Если виртуальная память по этим адресам не спроецирована, например.
← →
Инс © (2007-09-08 17:41) [13]
> [11] Галинка © (08.09.07 17:38)
Что такое виртуальная память знаете вообще?
← →
oxffff © (2007-09-08 17:41) [14]
> Имеется в виду "залезание" в неположенное место
Это называется page fault
← →
DrPass © (2007-09-08 17:43) [15]
> Будет ошибка, и по логике, процедура будет завершена, и
> система перейдет на адрес возврата. Если нужным образом
> переадресовать точку выхода, то можно вызвать "нужную" программу.
>
Будет или AV, или ничего не будет
← →
Галинка © (2007-09-08 17:45) [16]Инс, Вы мыслите в категориях дельфи. А я говорю про языки более низкого уровня. Пока я понимаю так, что именно этим и отличается новая концепция "управляемого" кода.
Короче вот нашла статейку
http://www.osp.ru/os/2001/05-06/180186/_p2.html
может еще кому-то интересно будет.
← →
oxffff © (2007-09-08 17:46) [17]
> Хочется почитать что-то написанное более менее человеческим
> языком, чтобы понять и разложить все для себя по полочкам.
>
Открыть любую документация по защищенному режиму начиная с 386.
Прочитать Page Translation and Protection в том числе и на русском.
← →
Anatoly Podgoretsky © (2007-09-08 17:46) [18]> Галинка (08.09.2007 17:45:16) [16]
Управляемый код доступен для большинства языков, включая ассеблер.
Это дисциплина программирования.
← →
Инс © (2007-09-08 17:47) [19]
> Инс, Вы мыслите в категориях дельфи. А я говорю про языки
> более низкого уровня. Пока я понимаю так, что именно этим
> и отличается новая концепция "управляемого" кода.
Я мыслю в категориях операционной системы, вообще-то.
← →
Инс © (2007-09-08 17:48) [20]А вы мыслите в категориях реального режима микропроцессора.
← →
oxffff © (2007-09-08 17:49) [21]
> Галинка © (08.09.07 17:45) [16]
> Инс, Вы мыслите в категориях дельфи. А я говорю про языки
> более низкого уровня. Пока я понимаю так, что именно этим
> и отличается новая концепция "управляемого" кода.
А что уже есть новая концепция управляемого кода?
Не поделитесь ссылочкой.
← →
DrPass © (2007-09-08 17:50) [22]
> Инс, Вы мыслите в категориях дельфи. А я говорю про языки
> более низкого уровня
Я, правда, не совсем Инс... но в данном случае поведение Delphi ничем не отличается от не-Delphi. Такой механизм работы с памятью задается даже не операционной системой, а архитектурой PC-компьютера. Единственное исключение - виртуальные машины или использование какого-либо специализированного менеджера памяти. Там "хозяин-барин" в лице их разработчика может задать любой механизм работы с памятью
← →
Галинка © (2007-09-08 17:51) [23]Тогда это что? Мания? На эту тему куча статей и даже целые ресурсы посвещены этой проблеме.
Инс, тогда посоветйте, что почитать на эту тему. Я не спорить пришла. И очень извиняюсь, если пока так выглядело ))
← →
J_f_S (2007-09-08 17:51) [24]
> Галинка © (08.09.07 17:45) [16]
Все проще, вики из элайв йет:
http://ru.wikipedia.org/wiki/Переполнение_буфера
← →
Инс © (2007-09-08 17:51) [25]
> Такой механизм работы с памятью задается даже не операционной
> системой, а архитектурой PC-компьютера
Поддержу, Windows, как известно, работает под управлением процессора, работающего в защищенном режиме, со всеми вытекающими.
← →
Anatoly Podgoretsky © (2007-09-08 17:52) [26]> Галинка (08.09.2007 17:51:23) [23]
Просто старые языки накладывают проблемы, плюс опасные конструкции в АПИ, когда размер не контролируется и позволяет делать переполнение.
← →
Инс © (2007-09-08 17:53) [27]
> Инс, тогда посоветйте, что почитать на эту тему.
Рихтера.
← →
Галинка © (2007-09-08 17:54) [28]"Можно выделить два типа ошибок переполнения: одни приводят к чтению не принадлежащих к массиву ячеек памяти, другие — к их модификации. В зависимости от расположения буфера за ним могут находиться:
* другие переменные и буферы;
* служебные данные (например, сохраненные значения регистров и адрес возврата из функции);
* исполняемый код;
* незанятая или несуществующая область памяти.
Несанкционированное чтение не принадлежащих к массиву данных может привести к утере конфиденциальности, а их модификация в лучшем случае заканчивается некорректной работой приложения (чаще всего «зависанием»), а в худшем — выполнением действий, никак не предусмотренных разработчиком (например, отключением защиты). Еще опаснее, если непосредственно за концом массива следуют адрес возврата из функции; в этом случае уязвимое приложение потенциально способно выполнить от своего имени любой код, переданный ему злоумышленником. И, если это приложение исполняется с наивысшими привилегиями (что типично для сетевых служб), взломщик сможет как угодно манипулировать системой." (с)
Может я что-то не понимаю? Или неправильно интерпретирую?
← →
oxffff © (2007-09-08 17:55) [29]
> Галинка © (08.09.07 17:51) [23]
Создайте класс, обертку буфера. И делайте Range checking в каждом потенциально опасном методе доступа к буферу.
← →
Инс © (2007-09-08 17:56) [30]
> "Можно выделить два типа ошибок переполнения: одни приводят
> к чтению не принадлежащих к массиву ячеек памяти, другие
> — к их модификации.
А третие - к немедленному AV.
← →
Галинка © (2007-09-08 17:56) [31]Инс, что именно у Рихтера? Поисковик дает на десяток страниц про дотнет. Но мне предстоит писать на чистом Си.
← →
oxffff © (2007-09-08 17:57) [32]Есть еще червертые. Например double page Fault и синий экран
← →
oxffff © (2007-09-08 17:58) [33]
> Но мне предстоит писать на чистом Си.
Читать [29]
← →
Галинка © (2007-09-08 17:58) [34]Инс © (08.09.07 17:51) [25]
если бы речь шла про Винду ((( В моем случае это Линукс. Там что-то за этим следит?
← →
J_f_S (2007-09-08 17:59) [35]
> Галинка © (08.09.07 17:56) [31]
Почитайте ссылку, которую я вам дал. Там все написано, и к тому же приведены ссылки на методы атаки путем переполнения буфера и защиты от него. Инс говорит немного о другом, как мне кажется.
← →
Инс © (2007-09-08 17:59) [36]
> Инс, что именно у Рихтера?
Да просто, как операционная система работает с памятью. Зная теорию, все практические проблемы сами решатся. Вот ссылка:
http://wm-help.net/books-online/print-page/59464/59464.html
← →
J_f_S (2007-09-08 18:01) [37]А полностью тема "сисек" раскрыта в статьях на соответсвующем форуме ;)
http://wasm.ru/publist.php?list=20
← →
Инс © (2007-09-08 18:03) [38]Не знаю как в Линуксе, но в Windows можно уменьшить вероятность повредить данные поместив их в отдельную кучу.
← →
Галинка © (2007-09-08 18:15) [39]Хоть что-то можно поставить в заслугу программистам Микрософт. Может Уинда не такая уж и плохая.
А есть что-то подобное про Линукс?
← →
Zeqfreed © (2007-09-08 18:53) [40]Мнда. Вы чего боитесь то? Система (даже этот ужасный и плохой Линукс!) не даст вам испортить ничьи чужие данные, если только вы не подгрузите свой модуль в ядро. Каждому процессу выделяется свой Виртуальный Анатолий Подгоретский размером до 4 Гб на 32-битных платформах (в Виндоус 2 вроде, в Линукс 3, кажется, но тут не уверен). Почитать можно, например, "Linux: азбука ядра" в соавторстве Стивена Смолски, Гордона Фишера и Клаудии Зальзберг или "Операционные Системы" Таненбаума.
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2007.10.07;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.055 c