버퍼 오버플로 공격

버퍼 오버플로 공격

저는 오늘 분산 시스템 수업에서 커널이 각 사용자에게 주소 공간을 할당한다는 것을 방금 배웠습니다. 사용자가 su 권한을 얻으려면 커널 주소 공간으로 전송해야 합니다.

이것이 버퍼 오버플로 공격의 기초입니까? 사용자가 주소 공간 밖으로 나가면 커널 주소 공간에 액세스할 수 있거나 덮어쓸 수 있습니까?

답변1

프로세스는 메모리 외부에서 읽거나 쓰거나 분기할 수 없습니다. 이는 다른 프로세스의 메모리, 할당되지 않은 메모리 또는 커널 메모리에 액세스할 수 없음을 의미합니다. 따라서 공격자가 프로세스에서 버퍼 오버플로를 유발하고 해당 프로세스의 컨텍스트에서 임의의 코드를 실행할 수 있더라도 공격자에게 커널 수준 액세스 권한이 부여되지는 않습니다.

해결책이 있습니다. 프로세스가 시스템 호출을 할 수 있습니다. 이것시스템 호출을 하는 정확한 방법운영 체제와 프로세서 유형에 따라 가장 간단한 형태로 프로세서에는 "시스템 호출" 명령이 있습니다. 커널이 시스템 호출 처리 코드를 설치한 특정 주소로 분기합니다.

시스템 호출을 실행하면 프로세서는 메모리에 대한 액세스 권한을 변경합니다. 이러한 방식으로 커널은 읽기, 쓰기, 모든 메모리 분기 기능, 하드웨어 장치 액세스 기능을 포함하여 높은 권한으로 실행됩니다. 마찬가지로 권한 상승이 수행되는 방법에 대한 세부 사항은 특정 플랫폼에서 시스템 호출이 구현되는 방식에 따라 크게 달라집니다. 예를 들어 프로세서는 두 개의 액세스 제어 목록(하나는 사용자 공간용, 다른 하나는 커널 공간용)과 시스템 호출 명령을 유지할 수 있습니다. 이 두 테이블 사이를 전환할 수 있습니다.

시스템 호출을 처리하는 커널 코드는 프로세스에 전달된 매개변수를 디코딩합니다. 매개변수가 전달되는 방식은 플랫폼에 따라 크게 달라집니다. 시스템 호출은 이러한 매개변수의 유효성을 올바르게 검증할 수 있습니다. 예를 들어, 커널이 배열 매개변수를 기대하고 전체 배열이 프로세스의 주소 공간에 맞는지 여부를 확인하지 않는 경우 이로 인해 일반 프로세스가 커널에 대해 버퍼 오버플로 공격을 수행하고 커널 코드 선택을 실행할 수 있게 됩니다.

원격 공격자가 커널 수준 액세스 권한을 얻으려면 일반적으로 네트워크 프로세스와 커널의 두 가지 취약점을 악용해야 합니다. 때로는 커널 네트워크 처리 코드에 원스텝 공격을 허용하는 버그가 있는 경우도 있습니다.

답변2

습관. 대부분의 아키텍처에서 커널 공간은 프로세서에 의해 보호되며 여기에 쓰려고 하면 운영 체제 오류가 발생하지 않는 한 프로세스가 종료됩니다.

버퍼 오버플로 공격은 일반적으로 함수의 반환 주소를 덮어쓰므로 공격자의 제어 흐름이 중단됩니다.

관련 정보