[Windows]윈도우 시스템 해킹 - 스택 버퍼 오버플로

Hyenna·2023년 5월 12일
0

Security

목록 보기
1/10

스택

프로그램 로직이 동작하기 위한 인자와 프로세스 상태를 저장하는 데 사용

[스택의 시스템 레지스터]

  • EBP : 스택 베이스 주소를 가리키는 레지스터
  • ESP : 스택 주소를 가리키는 레지스터
  • EIP : 다음 실행할 명령어를 가리키는 레지스터
    ➡ 메인 함수 내에서 함수 호출 시, EBP는 함수가 실행되는 동안만 함수가 호출된 위치로 옮겨짐
    ➡ 함수가 정상적으로 종료되면 EBP는 main 함수의 첫 시작 위치로 돌아오고 함수에서 사용한 스택의 공간은 연결이 해제되어 없어진다.(메모리 상엔 남아있으나 더이상 사용하지 않음)

🔱버퍼 오버플로(버퍼 오버런)

  • 지정된 버퍼 크기보다 큰 데이터를 버퍼에 쓰는 행위
  • 버퍼의 한계를 넘어서는 현상
  • 데이터가 인접 메모리 공간으로 넘쳐서 정보를 덮어쓰게 되고, 종종 충돌이나 악용 가능한 상태를 유발
  • 내장된 데이터 접근 또는 덮어쓰기 보호 기능이 없고, 어떤 배열에 기록되는 데이터가 범위 안에
    포함되는지 자동으로 검사하지 않기 때문에 발생
  • 로컬 또는 원격에서 Root 권한 획득 목적으로 자주 사용되는 공격기법

🏹윈도우 스택 버퍼 오버플로우 공격

  • 스택에 저장되어있는 복귀 주소가 지역변수에 의해서 침범되게 만들고 악성코드를 넣는 공격

🔸스택 : 프로그램 로직이 동작하기 위한 인자와 프로세스 상태를 저장하는 데 사용
🔸 : 프로그램이 동작할 때 필요한 데이터 정보를 임시로 저장하는 데 사용

<예제>
bugfile.c

int main(int argc, char *argv[]){
	char buffer[10];	//지역변수
    strcpy(buffer, argv[1]);	//스택 버퍼 오버플로우 공격 발생
    printf("%s\n", &buffer);
}


🔰버퍼 오버플로우 대응 방안

  • 입력 데이터 검증 :
    프로그램에서 사용자 입력값을 검증하여 허용된 범위 내에서만 처리하도록 합니다.
  • 정적 분석 :
    코드를 분석하여 버퍼 오버플로우 가능성이 있는 코드 부분을 식별하고, 오류를 수정합니다.
  • ASLR(Address Space Layout Randomization) : 메모리 주소를 무작위로 할당하여, 버퍼 오버플로우 공격으로부터 메모리 보호를 강화합니다.
  • 스택 가드(Stack Guard) :
    스택의 복귀 주소를 덮어씌우는 버퍼 오버플로우 공격을 방지하기 위한 방법으로, 스택의 보호 영역에 랜덤한 값을 삽입하고 이를 검사합니다.
  • 스택 클린업(Stack Cleanup) :
    함수 종료시 해당 지역 변수들을 제거하여 스택을 초기화합니다.

참고 : 스택 가드, 스택 클린업 기법
출처 : https://olive-su.tistory.com/31

0개의 댓글