Debugger/GDB

[GCC] 컴파일시 보호기법 해재 플래그

우와해커 2019. 12. 28. 22:03

# gcc -z execstack -o test test.c    //    컴파일 시 nx 해체

# sysctl-w kernel.exec-shield=0    //    nx 해체

# sysctl-w kernel.exec-shield=1    //    nx 설정


# gcc -fno-stack-protector -o test test.c    //   ssp 해체

# gcc -mpreferred-stack-boundary=2    //    dummy 값 고정

 

# sysctl -w kernel.randomize_va_space=0    //    aslr 해체

# sysctl -w kernel.randomize_va_space=1    //    stack aslr 설정

# sysctl -w kernel.randomize_va_space=2    //    stack, heap aslr 설정

# ulimit -s unlimited    //    aslr 일시적 해체

 

# gcc -Wl, -z, relro -o test test.c    //    Partial RELRO

# gcc -Wl, -z, relro, -z, now    //    Full RELRO

# gcc -z norelro -o test test.c    // No RELRO

 # -mpreferred-stack-boundary=2

  
 
 
 
기준
ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-77-generic x86_64)

gcc 5.4.0 20160609

gcc랑 관련없는 건데 이 운영체제에서 계속 ASLR을 끄고 싶어
echo "kernel.randomize_va_space=0" > /etc/sysctl.d/01-disable-aslr.conf

32비트로 컴파일하고 싶어
-m32

-m32 옵션을 줬는데 이상해
sudo apt install gcc-multilib

32비트로 컴파일하니까 main 함수에 스택을 정렬하는 이상한 인스트럭션이 있어서 짜증나
-mpreferred-stack-boundary=2

최적화 옵션을 주니까 printf@plt가 __printf_chk@plt로 바뀌는 게 싫어
-U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0

CANARY를 없애고 싶어
-fno-stack-protector

스택에 실행 권한을 주고 싶어
-z execstack

No RELRO가 기본값인데 Partial RELRO가 필요해
-z relro

No RELRO가 기본값인데 Full RELRO가 필요해
-z relro -z now

Partial RELRO가 기본값인데 No RELRO가 필요해
-z norelro

Partial RELRO가 기본값인데 Full RELRO가 필요해
-z now

.text가 랜덤이면 좋겠어
-fpie

PIE가 쓰고 싶어
-fpie -pie

2018-03-26 추가사항
레드햇에서 정리한 플래그