본문 바로가기

메모장

안티 익스플로잇 기술

공부를 하다가 어느 블로그에 들어가게 되었는데 흥미로운 내용이 있어서 적어둔다.

( 나중에 천천히 한번 읽어봐야겠다. )

 

*) AAAS (ASCII Armored Address Space)

 

AAAS는 굉장히 흥미로운 아이디어다. 아이디어는 라이브러리들을 (일반적으로는 어떤 ET_DYN 오브젝트) 최초 16 MB 주소 공간에 로드하는 것이다. 결과적으로 이 모든 공유라이브러리의 코드와 데이터는 주소의 시작이 NULL로 시작되는 위치에 존재하게 된다. 이것은 자연스럽게 strcpy와 같이 NULL 문자열을 받지 못하는 함수들에 의한 오버플로우 버그들에 대항하게 된다. 이런 방어들은 본질적으로 NULL 바이트 이슈가 없는 (예를들어 Linux/*BSD x86 시스템의 PLT와 같은) 것에 대해서는 효과가 없다. 보통 이런 방어기법들은 Fedora 배포버전에서 사용되고 있다.

 

*) ESP (Executable Space Protection)

 

이 방어 매커니즘의 아이디어는 매우 오래되었고 간단하다. 전통적으로 오버플로우들은 쉘 코드를 이용하여 익스플로잇을 하게 되는데 이는 데이터 영역에서 코드가 실행되는 경우이다. 이러한 일반적이지 않은 상황은 간단히 데이터 영역 (stack, heap, data, etc) 또는 더욱 일반적으로 (만약 가능하다면) 모든 쓰기 가능한 프로세스 메모리 공간에서 실행을 제제함으로써 막아진다. 하지만 이 방어 기법은 이미 라이브러리나 프로그램 함수들에 의해 로드된 코드의 호출을 막진 못한다. 이는 고전적인 return-into-libc 관련 공격을 가능케 한다. 최근 모든 PAE 또는 64bit x86 linux 커널에서는 ESP가 기본적으로 적용이 되어 있다.

 

*) ASLR (Address Space Layout Randomization)

 

ASLR의 기본 아이디어는 프로그램의 스택이나 힙 또는 라이브러리들의 주소를 랜덤하게 로드하는 것이다. 결과적으로 공격자가 공격에 성공하여 프로그램의 흐름을 바꾸더라도 공격자는 다음 코드가 (shellcode, library functions) 어디에 위치하는지 모르게 된다. 이 아이디어는 간단하지만 매우 효과적이다. ASLR은 리눅스 커널 2.6.12 부터 기본적으로 설정되어 있다.

 

*) Stack Canaries (Canaries of the death)

 

이는 컴파일러 매커니즘으로 기존의 커널 기반의 기술들과는 차이가 있다. 함수가 호출될 때, 컴파일러에 의해 특정 코드가 삽입되는데 이는 함수 프롤로그 위치에서 metadata가 들어가기전에 특정 값 (이를 쿠키라고 함)을 넣게 된다. 에필로그 시 해당 쿠키는 원본과 비교를 하게 되어 만약 이 특정 값이 다르다면 충돌이 일어나게 된다. 그러면 프로그램은 종료되게 되고 시스템 로그에 보고된다. 기술에 대한 자세한 내용은 뒤에 설명하도록 한다.



출처: https://hackability.kr/entry/SSP-Stack-Canary에-대한-Phrack-자료-번역 [HACKABILITY]

'메모장' 카테고리의 다른 글

특정 함수의 주소, offset 찾는 방법  (0) 2020.01.13
프로세스와 스레드_정리  (0) 2019.12.13
카나리 ( canary ) 생성방식  (0) 2019.10.23
gdb 내에서의 명령어 메모  (0) 2019.09.16
objdump 명령어 메모  (0) 2019.09.16