Вторжение в память - PullRequest
       11

Вторжение в память

1 голос
/ 22 апреля 2009

Некоторое время назад я слышал о вторжениях в память, когда какая-то часть программного обеспечения A попадает внутрь другой части того же программного обеспечения A, что мешает программе работать правильно.

Действительно ли вторжение в память существует? Я имею в виду, что я использую C ++ и знаю, что массивы могут расти бесконечно, но могут ли они расти по другим структурам? Если массивы не будут генерировать MI, что будет?

Ответы [ 5 ]

5 голосов
/ 22 апреля 2009

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

Эта проблема обычно возникает, когда для неизвестного объема ввода (от клавиатуры, сети, вызова API и т. Д.) Выделяется фиксированный объем памяти, а объем ввода оказывается больше, чем размер хранилища. , В языках программирования, которые не выполняют проверку границ при доступе к массиву, это может привести к перезаписи исполняемых областей кода. Такие технологии, как DEP , могут снизить этот риск за счет защиты исполняемых областей памяти от записи.

2 голосов
/ 22 апреля 2009

Переполнение стека также может вызвать эту проблему.

0 голосов
/ 22 апреля 2009

В C ++ массивы не могут расти бесконечно. У вас нет неограниченной памяти. Вторжение в память может быть вызвано чем-то вроде этого:

int foo[100];
foo[100]=5; // writing outside the array. This might cause some problems.
0 голосов
/ 22 апреля 2009

«Вторжение в память» называется переполнением буфера или стека. Это, пожалуй, самая важная уязвимость, которую вы можете использовать, чтобы найти недостатки безопасности.

Стандартная библиотека C полна функций, которые беспечно предполагают, что ввод не будет переполнять выделенное буферное пространство. Когда вход на больше, чем буфер, у вас переполнение буфера в других частях памяти. Программа больше не работает правильно и может быть повреждена неуловимыми способами.

Читать это: http://www.owasp.org/index.php/A5_2004_Buffer_Overflow

0 голосов
/ 22 апреля 2009

Это не так уж редко в языках, которые не управляются автоматически памятью. Например, переполнение буфера является очень хорошим примером вторжения.

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

Такие языки, как Java и C #, не позволяют вам манипулировать памятью на низком уровне, поэтому риск снижается.

...