코드/소프트웨어가 메모리 내에서 허용되지 않는 위치에 어떻게 액세스할 수 있습니까?

코드/소프트웨어가 메모리 내에서 허용되지 않는 위치에 어떻게 액세스할 수 있습니까?

기본적으로 애플리케이션이 실행될 때 액세스할 수 있는 RAM의 양이 제한됩니다. 그렇죠? 기술적으로 내 VLC는 Chrome에서 사용되는 메모리 주소에 액세스할 수 없습니다. 그러나 운영 체제/컴파일러가 실수로 코드가 허용되지 않는 주소에 대한 액세스를 허용하는 것이 어떻게 가능합니까? 나는 많은 '익스플로잇'과 '페이로드'가 이 사실을 이용하여 너무 많은 공간을 차지하고 다른 주소로 '오버플로'되는 변수를 생성한다는 것을 알고 있지만 실제로 어떻게 이런 일이 발생합니까?

일부 프로그램은 다른 프로그램보다 이 문제가 더 많이 발생합니까? 어떤 언어로 코딩되어 있는지가 중요합니까? 예를 들어, C는 메모리를 가지고 놀 수 있지만 Java는 그렇지 않다는 것을 알고 있습니다.

또한, 이것의 장점은 무엇입니까? 누군가가 메모리 어딘가에 접근하기 위해 악성 코드를 작성했다면 어떻게 될까요? 내가 생각할 수 있는 유일한 것은 RAM에 저장된 비밀번호/키뿐입니다.

추신나는 이것을 스택 오버플로에 넣는 것에 대해 생각했지만 내 질문은 프로그래밍 관점과 관련된 것보다 훨씬 더 광범위합니다. 잘못된 위치에 배치했다면 죄송합니다.

답변1

이상하게도 오버플로가 발생합니다.스택 오버플로- 대상 프로그램의 동작을 변경하거나 충돌을 일으키기 위해 신중하게 제작된 프로세스를 사용하여 필요한 것 이상으로 공간을 사용합니다.

답변2

특정 사항: 일반적으로 관심을 끄는 "오버플로"는 한 응용 프로그램(프로세스)이 다른 응용 프로그램(프로세스)을 덮어쓰는 것을 허용하지 않습니다. 오히려 프로세스가 처리 중인 데이터일 뿐이므로 프로그램이 해당 데이터로 자신의 일부(대개는 간접적으로 스택)를 덮어쓰게 됩니다.그 과정.

그런 다음 해당 프로세스는 일반 IPC 및 시스템 호출을 통해 상호 작용하여 계정이 액세스할 수 있는 다른 모든 항목을 인수할 수 있습니다. VLC는 일반 주소로는 Chrome의 메모리 공간에 접근할 수 없습니다.할 수 있다:

  • 디버거인 척하고 Chrome 프로세스에 연결하고 수정합니다.
  • 나중에 로그인할 때마다 코드가 실행되도록 파일과 계정 설정을 다시 작성하세요.
  • 네트워크 연결을 열고 다른 시스템으로 확산됩니다.

가끔 예외를 제외하고 불행히도 최신 운영 체제에서는 실행하는 모든 프로그램과 계정의 모든 내용을 완전히 신뢰한다고 가정합니다. 이는 네트워크에 연결되지 않은 시간 공유 시스템이 전문가들에 의해서만 사용되던 시절(OS에서 제공하는 보호 기능이 있는 경우) 이후로는 사실이 아닌 가정입니다.사용자를 서로 보호했습니다., 자체 소프트웨어가 아님).

관련 정보