Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.07;
Скачать: CL | DM;

Вниз

Переполнение буфера/кучи   Найти похожие ветки 

 
Галинка ©   (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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.018 c
15-1189053276
ZeroDivide
2007-09-06 08:34
2007.10.07
Turbo вернулись.... и снова пропали, я правильно понял?


2-1189500997
RomanH
2007-09-11 12:56
2007.10.07
Бвстрая замена символа на символ


1-1185116122
Al_delta
2007-07-22 18:55
2007.10.07
TreeView: неправильно создаются дочерние узлы. Помогите!


1-1185554019
Ice-T
2007-07-27 20:33
2007.10.07
Беда OPenDialog а


2-1189263131
Надуев Алексей
2007-09-08 18:52
2007.10.07
Поиск файлов