728x90
반응형
Arch: amd64-64-little
RELRO: Full RELRO
Stack: Canary found
NX: NX enabled
PIE: PIE enabled
ASLR
개념
흔히들 말하는 random stack. 즉, heap, stack 영역의 base address를 랜덤하게 바꾸는 방법.
공격 방법
- 최선은 memory leak이며, 특정 memory address를 알 수 있다면 각 변수나 함수의 address는 offset 만큼 떨어진 곳에 위치하기에 이를 통해 exploit이 가능해진다.
- brute force, 즉 될때까지 시도해보는 방법.
- 32bit던 64bit던 특정 함수나 변수의 위치가 어느정도 고정되어있기에 이를 기반으로 지속적으로 시도해보는 방법이며, nop sled와 함께 성공률을 높일 수 있다.
- 특히 heap, stack 영역만 ASLR이 사용되기 때문에 code영역의 주소는 그대로이며, 이를 shell을 심볼릭링크한 파일명으로 사용한다던지 하면 된다.
RELRO
개념
.ctors, .dtors, .jcr, .dynamic, .got 영역에 설정에 따라 읽기 권한만 준다.
- partial relro : .got을 제외하고 읽기 권한만 부여. 함수 실행 시 got에 실제 함수 주소를 넣어준다.
- full relro : 전체를 읽기 권한만 부여. 프로그램 실행 시 got에 실제 함수 주소를 넣어준다.
vmmap 등으로 보았을때 writable할 것 같아 보이지만 실제로 값을 넣어보면 에러가 발생한다.(고 한다)
공격 방법
- partial relro : got overwrite가 가능하기에 이를 사용.
- full relro : got overwrite는 안되고, malloc_hook, free_hook overwrite는 가능하다.
- 만일 hook overwrite가 불가하고 프로그램이 return으로 종료되면 _rtld_global의 dl_load_lock을 인자로, dl_rtld_lock_recursive를 함수로 overwrite 가능하다.
Canary
개념
함수 프롤로그에 특정 위치에 특정 값을 넣어두고, 에필로그에서 해당 값이 변경되었는지 확인하는 방법.
변수를 사용하는 함수에서는 모두 카나리를 가지고 있다.
공격 방법
- 무엇보다 memory leak이 필수적이다.
- main 함수의 return address를 변조하려면 그냥 해당 값을 leak할 수 밖에 없다.
- return address까지 가기 전에 사용되는 함수의 got을 변조할 수 있다면 canary 확인 부분까지 실행되지 않으므로 이를 통해 다른 함수를 실행할 수 있다.
- master canary는 thread 영역에 위치하므로 여기에 버퍼가 할당되는 경우 이를 leak or overwrite 가능하다.
- master canary는 각 함수 별로 가지고 있으며 그 위치가 다르다.
NX (DEP)
개념
heap, stack에 특정 작동을 하는 코드가 들어와도 작동하지 않게 막아주는 방법.
공격 방법
heap, stack만 사용하지 않으면 된다. rtl, rop, got 변조 모두 가능.
PIE
개념
코드 영역까지 주소 랜덤화.
공격 방법
ASLR과 동일하게 공격 가능.
728x90
반응형
'Tips & theory' 카테고리의 다른 글
pwntools - elf, symbol을 가져올때 (0) | 2022.08.03 |
---|---|
heap tcache poisoning & double free (0) | 2022.08.02 |
heap tcache & main_arena (0) | 2022.08.01 |
fsb (0) | 2022.07.30 |
입/출력 함수의 입력, 출력 방식. (0) | 2022.07.29 |