Security/시스템 해킹(PWN, System)

공부하는데 필요할 GCC 메모리 보호기법 해제

2022. 6. 1. 20:47
반응형

포너블을 하는데 있어서 스스로 코드를 만들어보고 분석해볼 필요가 있을 거 같아 메모리 보호기법 해제에 대한 글을 올립니다.

 

적혀있는 코드들은 해당 기법을 제거하는 컴파일 옵션입니다.

 

 

0. 옵션 모두 제거(32bit)

gcc -m32 -fno-stack-protector -mpreferred-stack-boundary=2 -z execstack -no-pie -o abcd abcd.c

모든 옵션을 제거하여 공부할 때 사용할 것.

checksec으로 확인.

 

1. ASLR(Address Space Layout Randomization)

cat /proc/sys/kernel/randomize_va_space #check ASLR
echo 0 > /proc/sys/kernel/randomize_va_space

#permission error 발생 시
sudo bash -c "echo 0 > /proc/sys/kernel/randomize_va_space"

randomize_va_space=0이면 ASLR 해제

randomize_va_space=1이면 stack, library가 랜덤

randomize_va_space=2이면 stack, heap, library가 랜덤

 

우회기법 : memory leak, ROP ..

 

2. NX bit 

gcc -z execstack

stack에 실행권한 제거.

 

우회기법 : RTL, GOT overwrite, ROP...

 

3. Canary(Stack Smashing Protector)

gcc -fno-stack-protector

메모리가 변조되었는지 검사.

 

gcc -fstack-protector

이건 canary를 넣는 옵션

 

우회기법 : ROP, memory leak, brute force

 

4. RELRO(RELocation Read Only)

gcc -z relro #Partial RELRO
gcc -z relro -z now #FULL RELRO
gcc -z norelro #NO RELRO

NO RELRO : ELF 기본 헤더, 코드 영역등을 제외한 거의 모든 부분에 read, write 권한을 준다.

 

PARTIAL RELRO : .ctors, .dtors, .jcr, .dynamic 섹션이 ready-only 즉, 쓰기 권한이 없어진다.

 

FULL RELRO : BSS영역을 제외한 모든 부분에서 write권한이 없다.

 

메모리가 변경되는 것을 보호한다.

우회기법 : memory leak, ROP

 

5. PIE(Position Independent Executable)

gcc -no-pie # no pie
gcc -fpie # .text ramdomize
gcc -fpie -pie # PIE

모든 심볼 주소를 상대적으로 작성하고 base address를 랜덤화해서 함수들의 주소를 실행할 때마다 랜덤화한다.

 

우회 기법 : memory leak, ROP

 

6. 32bit compile

sudo apt-get install gcc-multilib #설치가 선행됨.
gcc -m32 #32bit compile
gcc -m64 #default

 

7. dummy 제거

gcc -mpreferred-stack-boundary=2 #32bit
gcc -mpreferred-stack-boundary=4 #64bit

 

gcc -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0 함수 최적화 제거

 

 

gcc -fno-builtin #정적 라이브러리

 

 

<참고문헌>

 

https://realsung.tistory.com/199

https://kimdora.tistory.com/entry/LINUX-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EB%B3%B4%ED%98%B8-%EA%B8%B0%EB%B2%95

반응형
'Security/시스템 해킹(PWN, System)' 카테고리의 다른 글
  • gdb 문법 바꾸기, AT&T -> Intel
  • [RTL] 1. RTL과 라이브러리
  • 셸코드를 위해서 경로를 hex로
  • 내가 항상 헷갈리던 어셈블리 mov와 lea의 차이
그믐​
그믐​
neutrinox4b1그믐​ 님의 블로그입니다.
그믐​
neutrinox4b1
그믐​
전체
오늘
어제
  • 분류 전체보기 (288)
    • Write up (Wargame) (121)
      • Pwnable (60)
      • Reversing (0)
      • Web Hacking (8)
      • Forensic (1)
      • Cryptography (6)
      • LOB (10)
      • misc (0)
      • SF pwnable 기초 (10)
      • SF pwnable 심화 (1)
      • LOS (25)
    • Security (73)
      • 시스템 해킹(PWN, System) (21)
      • 리버싱(Reverse Engineering) (1)
      • 포렌식(Forensic) (3)
      • 암호학(Cryptography) (44)
      • 네트워크(Network) (1)
      • 임베디드(Emebedded) (0)
    • Develop & CS (38)
      • Algorithm & Data Structure (6)
      • Baekjoon (11)
      • C, C++ (8)
      • Python (2)
      • R (1)
      • etc (8)
    • 프로젝트(Project) (7)
      • 시간표&급식 파싱 (1)
      • 남방진동지수 (1)
      • 네트워크 해킹 (5)
    • Daily life (44)
      • My Book (10)
      • Book Review (1)
      • IT Review (1)
      • 일상 팁 (19)
      • 네트워크관리사 (2)
      • 근황 (11)
    • 수학&과학(Mathematics & Science.. (4)

인기 글

공지사항

  • Wargame, CTF별 검색 키워드 정리
hELLO · Designed By 정상우.
그믐​
공부하는데 필요할 GCC 메모리 보호기법 해제
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.