문제

얼마 전에 소프트웨어 A의 일부가 동일한 소프트웨어 A의 다른 부분에 들어가면 프로그램이 올바르게 작동하는 것을 막을 때 메모리 침입에 대해 들었습니다.

기억 침입이 실제로 존재합니까? 내 ~ 위에 다른 구조? 배열이 MI를 생성하지 않으면 어떻게됩니까?

도움이 되었습니까?

해결책

당신은 a 버퍼 오버 플로우, 그리고 그렇습니다. 소프트웨어의 보안 문제의 큰 원인입니다. 누군가가 임의의 데이터로 프로그램 코드를 과도하게 작성할 수 있고 해당 임의의 데이터에 공격자 선택의 실행 가능한 코드가 포함되어 있으면 오버플로가 발생한 프로그램의 특권 수준으로 기계 코드를 실행할 수 있습니다.

이 문제는 일반적으로 고정 된 양의 스토리지가 알려지지 않은 양의 입력에 대해 (키보드, 네트워크, API 호출 등) 할당되며 입력량은 스토리지 크기보다 커질 때 발생합니다. 배열 액세스에 대한 바운드 점검을 수행하지 않는 프로그래밍 언어에서는 코드의 실행 가능한 영역이 덮어 쓰기가 될 수 있습니다. 같은 기술 DEP 메모리의 쓰기 보호 영역을 작성 하여이 위험을 완화 할 수 있습니다.

다른 팁

스택 오버플로 도이 문제를 일으킬 수 있습니다.

자동으로 메모리를 관리하지 않는 언어는 드물지 않습니다. 예를 들어, a 버퍼 오버 플로우 침략의 아주 좋은 예입니다.

특정 유형의 침략에 대한 몇 가지 보호가 있습니다 (예 : 다른 자료를 넘기보다는 스택 오버플로를 얻을 수 있습니다). 그러나 언제든지 포인터가 참여할 때마다 예상하지 못한 메모리 나 코드를 넘어가는 것은 매우 쉽습니다. 입장.

Java 및 C#과 같은 언어로 인해 메모리를 낮은 수준으로 조작하여 위험이 완화됩니다.

"메모리 침입"을 버퍼 또는 스택 오버플로라고합니다. 보안 결함을 찾기 위해 악용 할 수있는 가장 중요한 취약점 일 것입니다.

표준 C 라이브러리는 입력이 할당 된 버퍼 공간을 넘치지 않는다고 가정하는 기능으로 가득합니다. 입력시 ~이다 버퍼보다 더 큰 메모리의 다른 부분으로 버퍼 오버플로가 있습니다. 이 프로그램은 더 이상 올바르게 작동하지 않으며 미묘한 방식으로 손상 될 수 있습니다.

이것을 읽으십시오 : http://www.owasp.org/index.php/a5_2004_buffer_overflow

C ++에서는 어레이가 무기한으로 성장할 수 없습니다. 무제한 메모리가 없습니다. 메모리 침입은 다음과 같은 것에 의해 야기됩니다.

int foo[100];
foo[100]=5; // writing outside the array. This might cause some problems.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top