시스템 해킹 27

[dream hack] PIE

PIE ELF의 Position Independent Executable 보호기법과 우회 방법 PIE : Executable, 즉 바이너리가 로딩될 때 랜덤한 주소에 매핑되는 보호기법 원리는 공유 라이브러리와 비슷하다. 컴파일러는 바이너리가 메모리 어디에 매핑되어도 실행에 지장이 없도록 바이너리를 위치 독립적으로 컴파일한다. → 코드 영역의 주소 랜덤화 가능 PIE가 설정되어 있으면 코드 영역의 주소가 실행될 때마다 변하기 때문에 ROP와 같은 코드 재사용 공격을 막을 수 있다. no_pie.c //gcc -o no_pie no_pie.c -m32 #include int main(void){ printf("MAIN addr : 0x%p\n", &main); } pie.c //gcc -o pie pie.c..

[dream hack] RELRO

RELRO Bypassing RELRO Lazy Binding : 바이너리가 실행되는 도중, 함수가 처음 호출될 때 주소를 찾는 방식 (GOT) Lazy Binding을 할 때는 프로그램 실행 도중 GOT에 라이브러리 함수의 주소를 덮어써야 하기 때문에 GOT에 쓰기 권한이 있어야 한다. GOT에 값을 쓸 수 있다는 특징때문에 GOT overwrite 같은 공격이 가능하다. 하지만 Relocation Read-Only 보호기법이 설정되어 있으면 GOT와 같은 다이나믹 섹션이 읽기 권한만을 가지게 된다. example7.c // gcc -o example7 example7.c -mpreferred-stack-boundary=2 -Wl,-z,relro,-z,now #include void arbitrary_..

[dream hack] SSP

Stack Smashing Protector 메모리 커럽션 취약점 중 스택 버퍼 오버플로우 취약점을 막기 위해 개발된 보호 기법. 스택 버퍼와 스택 프레임 포인터 사이에 랜덤 값을 삽입해 함수 종료 시점에서 랜덤 값 변조 여부를 검사함으로써 스택이 망가뜨려졌는지를 확인한다. SSP 보호 기법이 적용되어 있다면 함수에서 스택을 사용할 때 카나리가 생성된다. 마스터 카나리는 main함수가 호출되기 전에 랜덤으로 생성된 카나리를 스레드 별 전역 변수로 사용되는 TLS에 저장한다. TLS 영역은 _dl_allocate_tls_storage 함수에서 __libc_memalign 함수를 호출하여 할당된다. TLS는 tcbhead_t 구조체를 가지는데, 다음과 같은 멤버 변수들이 존재한다. typedef struct..

[Lazenca] Canaries

Canaries Canaries 또는 Canary word는 버퍼 오버 플로우를 모니터하기 위해 버퍼와 제어 데이터 사이에 설정된 값이다. 버퍼 오버플로가 발생하면 Canary 값이 손상되며, Canaries 데이터의 검증에 실패하여 오버플로에 대한 경고가 출력되고, 손상된 데이터를 무효화 처리한다. Types of canaries Terminator canaries Terminator Canaries는 Canary의 값을 문자열의 끝을 나타내는 문자들을 이용해 생성한다. Terminator Canaries의 값은 NULL(0x00), CR(0x0d), LF(0x0a) 및 EOF(0xff)로 구성됨. 공격자는 canaries를 우회하기 위해 return address를 쓰기 전에 null 문자를 써야 한..

[Lazenca] ASLR

Protection Tech ASLR ASLR이란? 메모리 손상 취약점 공격을 방지 하기 위한 기술. 스택, 힙, 라이브러리 등의 주소를 랜덤한 영역에 배치하며, 공격에 필요한 Target address를 예측하기 어렵게 만듦. 프로그램이 실행될 때마다 각 주소들이 변경됨. 예를 들어 return-to-libc 공격을 하기 위해서는 공유 라이브러리에서 사용하려는 함수의 주소를 알아야 하는데, ASLR이 적용되면 프로그램이 호출될 때마다 스택, 힙, 라이브러리 영역의 주소가 변경되어 공격에 어려워짐. Set ASLR echo 0 > /proc/sys/kernel/randomize_va_space option 0 : ASLR 해제 1 : 랜덤 스택 & 랜덤 라이브러리 설정 2 : 랜덤 스택 & 랜덤 라이브러..

[dream hack] ASLR

Linux Exploitation & Mitigation Part 2 1. ASLR Address Space Layout Randomization 라이브러리, 힙, 스택 영역 등의 주소를 바이너리가 실행될 때마다 랜덤하게 바꿔 RTL과 같이 정해진 주소를 이용한 공격을 막기 위한 보호 기법이다. NX bit는 바이너리의 컴파일 옵션에 따라 적용 여부가 결정되었지만 ASLR은 서버의 설정 파일에 의해 보호 기법의 적용이 결정된다. Ubuntu 16.04에서는 다음 파일의 값을 확인하면 서버의 ASLR 설정 여부를 알 수 있다. /proc/sys/kernel/randomize_va_space 설정 파일 값의 의미 0 : ASLR을 적용하지 않음 1 : 스택, 힙 메모리를 랜덤화 2 : 스택, 힙, 라이브러리..