미친해커

[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 보호기법은 주소를 랜덤하게 바꾸어 공격자가 원하는 코드를 실행하기 어렵게 만드는 보호기법이라고 볼 수 있다.

반응형
Comments