본문 바로가기

보안/시스템 보안

버퍼 오버 플로우 2 보안 환경 설정

이제 앞으로 버퍼 오버플로우 실습을 최대한 문제없이 실습하기 위해

실습 환경 또한 2018.04 버전의 칼리 리눅스를 선택하였지만

여기서 추가적으로 보안 설정을 해제를 해줘야 실습을 원할하게 할수 있다.

 

1.가상주소 공간 randomlization 기능

프로그램이 실행 될때 0번째 부터 2^32 번째 까지 전체 메모리 공간을 나 혼자서 쓸수 있을것 처럼

구현이 되어있다.

과거에는 가상주소 공간에 프로그램이 매번 실행될때마다 사실 동일한 공간에 메모리가 올라가게 되고

스택의 주소 같은것들 또한 프로그램을 언제 실행되든 변경이 되지 않는다.

이떄 문제는 버퍼오버플로우 악성프로그램이 잘만 만드면 누구든 권한 상승이 가능한 문제가 발생하게 되어서

메모리 공간에 프로그램이 올라갔을때 조금의 랜덤성을 부여하여 동일한 프로그램을 실행 하여도

동일하게 동작하지 않도록 한다 ( ex) 스택의 주소 변경 )

가상의 주소공간을 살짝 씩 바꿔서 이전의 만든 악성프로그램을 실행시키더라도 오버플로우 일어나지 않도록 만들었다.

 

지금 내가 쓰고 있는 OS도 해당 기능이 있는지 확인을 먼저 해보자

 register int i asm("esp"); // 레지스터에서 esp 레지스터의 값을 int i를 통해서 접근을 하겠다.

 printf("$esp= %#010x \n",i); // hex 형태로 i값을 출력해달라

 

실행을 해보면

esp 파일을 실행을 시킬때마다 esp 주소값(스택의 주소값) 이  매번 달라지는것을 확인할수 있다 (노란색 하이라이트)

 

그래서 이 randomization 기능을 끄기 위해 관리자 권한에 접근을 한다

/proc/sys/kernel 경로 안에 randomize_va_space 라는 파일을 확인해보면

2

즉 실행이 되고 있는데 이를 0으로 바꿔주쟈

확인후 로그아웃을 하고

esp 파일을 실행 시켜서 확인을 해 보자

it worked!

2. 컴파일러 버퍼오버플로우 방지 기능

gcc -g -z execstack -no-pie -fno-stack-protector -o  로 컴파일을 하면 된다

크게 달라진것을 비교 할수 있는것은 따로 없지만 이전에 그냥 gcc 한것이랑 차이를 보면 용량이 줄어든것을

확인할수 있다. (노란색 하이라이트 )

이는 stack을 보호하는 기능이 빠졌다라는것을 알수 있다.

 

 

 

 

 

 

 

반응형