Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1189148703
PIG
2007-09-07 11:05
2007.10.07
Глюк с массивом PCHAR


15-1189441582
me
2007-09-10 20:26
2007.10.07
"Введение в Гудразработку и анализ алгоритмов"


3-1180927711
merko
2007-06-04 07:28
2007.10.07
Подключение к удаленной БД


15-1189290280
Kostafey
2007-09-09 02:24
2007.10.07
С днем рождения ! 9 сентября


2-1189580698
artem779
2007-09-12 11:04
2007.10.07
область видимости





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский