System Hackig Step 5-2

Posted by : at

Category : dreamhack_system_hacking



STAGE 5-2

Memory Corruption: Stack Buffer Overflow

스택 버퍼 오버플로우는 매우 역사가 오래된 취약점이며, 현재 실시간으로 다수 소프트웨어에서 발견되고 있는 현재진행형인 취약점이다.

목표

  • 스택 버퍼 오버플로우의 원인 알기
  • 스택 버퍼 오버플로우로 인해 발생하는 보안 문제 알기

주의점

  • 스택 오버플로우 ≠ 스택 버퍼 오버플로우
    • 스택 오버플로우: 한정된 크기의 메모리 안에서 스택 영역이 너무 많이 확장되어 발생하는 버그
    • 스택 버퍼 오버플로우: 스택에 위치한 버퍼에 버퍼의 크기보다 많은 데이터가 입력되어 발생하는 버그

스택 버퍼 오버플로우와 악용 경우수

1. 버퍼 오버플로우

스택 버퍼 오버플로우란, 스택버퍼에서 발생하는 오버플로우

Q. 버퍼란 무엇이고, 오버플로우란 무엇일까?

버퍼:

  • “데이터가 목적지로 이동되기 전에 보관되는 임시 저장소”
  • 현대에는 “데이터가 저장될 수 있는 모든 단위”
    • 지역 변수에 할당된 메모리 영역은 ‘스택 버퍼’
    • 힙에 할당된 메모리 영역은 ‘힙 버퍼’라고 부르는 것과 같다.

버퍼 오버플로우:

  • 버퍼가 넘치는 것: 지정된 버퍼 크기보다 큰 데이터가 입력되어 발생한다.
    • “버퍼”, 즉 어떤 변수든 데이터든 담기도록 할당된 메모리 영역의 크기를 뛰어넘는 데이터를 인풋했을 떄 발생한다.
    • 일반적으로 버퍼는 메모리상에 연속해서 할당되어 있기 때문에, 어떤 버퍼에서의 오버플로우는 뒤에 있는 버퍼들의 값이 조작되게 할 수 있다.
  • 그 어떤 메모리 영역에서 발생하더라도 매우 심각한 보안 위협으로 이어진다.

스택 버퍼 오버플로우:

  • 스택 영역에서 할당한 버퍼가 오버플로우되는 것.

2. 중요 데이터 변조

  • BOF 발생 버퍼 뒤에 중요한 데이터가 있다면, 해당 데이터가 변조됨으로써 문제가 발생할 수 있다.
    • 표현식의 변조
    • 통신 주소 변조
    • …etc

예제를 분석하며 BOF의 감을 잡아 보자. 사실 나는 저번에 풀었던 문제 정도를 예상하고 에이 똑같은 이야긴가~ 하며 방심했는데, 전혀 아니었다. 설명을 읽고 뒤통수를 한 대 맞은 기분이었기 때문에, 나와 비슷한 초보자 분들도 이건 꼭 보셨으면 좋겠다.

Untitled

원래 main 함수가 따로 있는데, 가장 중요한 check_auth 함수만 잘라서 가져왔다. 여기에서 집중해볼 것은, temp[16]과 strncpy(temp, password, strlen(password))이다. strncpy 자체가 BOF에 취약한 함수인 데다가 temp[16]은 16바이트로 크기가 정해진 배열이다.

즉, strncpy를 돌릴 때 16바이트를 초과하는 문자열을 전달한다면 temp 지역 변수를 담는 스택의 버퍼가 overflow 되면서 바로 그 밑에 할당된 auth 지역 변수의 데이터가 오염될 수 있다는 것이다.

위 취약점을 이용해 실제 관리자 비밀번호가 아닌 아무 데이터나 입력하면서 auth 버퍼의 데이터가 1로 변경되도록 변조한다면 인증을 통과할 수 있을 것이다.

3. 데이터 유출

  • C언어의 경우 문자열의 종결은 NULL byte로 표현되고, 스택에서 데이터를 읽어올 때 NULL byte 전까지 읽어옴
  • 즉, 어떤 버퍼에 오버플로우를 일으킴 → 다른 버퍼와의 사이에 있는 NULL byte 모두 제거 → 해당 버퍼의 데이터 유출 가능
  • Stack Canary를 이런 식으로 덮어씌워서 다음 버퍼의 데이터가 유출되게끔 할 수 있겠다!

4. 실행 흐름 조작

  • 새로운 스택 프레임을 생성할 때, 이전 스택 프레임의 맨 꼭대기에 리턴 주소를 저장한다는 사실을 악용
    • [새로운 스택 프레임: 지역 변수들…]
    • [새로운 스택 프레임: SFP(이전 스택 프레임의 함수에서 사용하던 스택의 바닥 주소)]
    • [옛날 스택 프레임: Return Address]
    • 순이라는 걸 잊지 말자!
  • 스택 버퍼 오버플로우를 일으켜, 리턴 주소를 조작해 원하는 프로세스가 실행되게끔 함

About TouBVA
TouBVA

A Security Researcher, now concentrating on Security Consulting.

Email : touBVa@gmail.com

Website : https://toubva.github.io