반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 포너블
- 개발 환경 준비
- IAT Hooking
- 해킹
- ucrtbase.dll
- pcap packet capture
- vcruntime140.dll
- 윈도우 커널 드라이버
- 윈도우 커널 디버깅
- 바이트 오더
- Windows Kernel
- hacking
- Windows
- pcap packet
- windows kernel debugging
- 개발하기
- 네트워크 바이트 오더
- Network Byte Order
- apphelp.dll
- packet capture
- HackCTF
- Windows Kernel Debug
- Windows Kernel Driver
- 윈도우 커널
- arudino
- Msvcrt.dll
- vcruntime.dll
- pwnable
- 시스템해킹
- C언어 패킷캡쳐
Archives
- Today
- Total
미친해커
[Memory Protection] PIE (Position Independent Executable) 본문
Hacking/Memory Protection Tech
[Memory Protection] PIE (Position Independent Executable)
미친해커 2021. 6. 27. 02:42반응형
PIE (Position Independent Executable, 위치 독립 실행 파일)
PIE 보호기법이란 메모리의 어딘가에 위치한 기계어 코드의 몸체로서 절대 주소와 관계 없이 적절히 실행된다. 즉 메모리상의 명령어들의 위치가 매번 바뀐다는 의미이다. PIE 보호기법이 적용된 프로그램은 특별한 코드 수정이 없이 어느 메모리 주소에서도 실행이 가능하며 메모리 주소의 제약을 받지 않는다. 이 보호기법은 주로 RTL(Return To Libc), ROP(Return Oriented Programming) 과 같은 바이너리에서 실행 가능한 코드의 오프셋을 필요로 하는 공격 기법을 사용하려고 할때 이 코드가 어디에 존재하는지를 알 수 없게 한다.
간단요약
프로그램이 실행 될때마다 그 메모리 주소를 바꾸어 이 프로그램의 메모리 주소를 숨겨 메모리 주소를 필요로 하는 공격 기법들을 방어하기 위함이다.
보호기법 확인
#include <stdio.h>
int pie()
{
printf("This function is pie!\n");
return 0;
}
int main()
{
printf("pie : %p\n", pie);
return 0;
}
다음과 같은 C언어 코드가 있다. 이 코드를 각각 GCC로 컴파일하는데 하나는 PIE를 활성화 하나는 비활성화를 시켜서 컴파일을 한다.
gcc PIE.c -o PIE-enable # PIE 활성화
gcc -no-pie PIE.c -o PIE-disable # PIE 비활성화
┌──(root💀kali)-[~/blog/Memory_Protection/PIE]
└─# checksec PIE-enable
Arch: amd64-64-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: PIE enabled
┌──(root💀kali)-[~/blog/Memory_Protection/PIE]
└─# checksec PIE-disable
Arch: amd64-64-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX disabled
PIE: No PIE (0x400000)
이렇게 2개의 바이너리를 각각 3번 실행시켜 출력되는 pie 함수의 주소를 확인해본다,
┌──(root💀kali)-[~/blog/Memory_Protection/PIE]
└─# ./PIE-enable
pie : 0x7f7d6da17145
┌──(root💀kali)-[~/blog/Memory_Protection/PIE]
└─# ./PIE-enable
pie : 0x7f291eff6145
┌──(root💀kali)-[~/blog/Memory_Protection/PIE]
└─# ./PIE-enable
pie : 0x7f23eab87145
PIE가 걸려있는 프로그램의 경우에는 pie 함수의 주소가 매번 바뀌는 것을 확인 할 수 있다.
┌──(root💀kali)-[~/blog/Memory_Protection/PIE]
└─# ./PIE-disable
pie : 0x401132
┌──(root💀kali)-[~/blog/Memory_Protection/PIE]
└─# ./PIE-disable
pie : 0x401132
┌──(root💀kali)-[~/blog/Memory_Protection/PIE]
└─# ./PIE-disable
pie : 0x401132
하지만 PIE가 걸려있지 않은 프로그램의 경우 pie 함수의 주소가 모두 같은 것을 확인 할 수 있다.
이렇게 PIE 보호기법은 주소를 랜덤하게 바꾸어 공격자가 원하는 코드를 실행하기 어렵게 만드는 보호기법이라고 볼 수 있다.
반응형
'Hacking > Memory Protection Tech' 카테고리의 다른 글
[Memory Protection] ASLR (Address Space Layout Randomization) (0) | 2021.07.19 |
---|---|
[Memory Protection] NX Bit (Never eXecute Bit) (0) | 2021.06.20 |
[Memory Protection] 리눅스 메모리 보호 기법 (Linux Memory Protection Tech) (0) | 2021.06.17 |
Comments