1. Stack Dummy O
=> 이전 LOB에서는 입력받는 문자열이 저장되는 buffer에 dummy가 붙지 않아서 크기가 40 byte면 40으로, 256 byte면 256으로 생각했는데, stack에 dummy가 붙음.
2. Down privileage of bash O
3. Random Library X
=> ASLR 보호 기법 관련.
4. Random Stack O
=> ASLR 보호 기법: 스택, 힙, 라이브러리 등의 주소를 랜덤하게 배치해 target addr 예측 어려움. 프로그램이 실행될 때마다 주소가 바뀜.
5. Random Program Binary Mapped X
6. ASCII Armor O
ASCII Armor: 공유 라이브러리 주소에서 최상위 바이트가 0x00인 메모리 영역
Libc address는 공유라이브러리의 주소값을 의미하는데, Fedora Core에서는 16M 미만이므로 첫바이트에 0x00이 들어가 인자값을 못 넣음.
(Red Hat 9에서는 이 주소가 16M 이상으로 4바이트 최상위 1바이트 주소값이 0x00이 아니어서 인자 값을 변조된 RET 뒤쪽에 넣을 수 있었는데 이제는 못하게 됨.)
16MB = 16777216 byte = 16진수 0x1000000
16MB 미만이므로 공유라이브러리의 주소값이 0x00FFFFFF보다 작음.
=> RTL 공격 시 연속적인 payload 작성 X (NULL 바이트가 삽입되어 payload가 끊김)
7. Non-Executable Stack O 비실행 스택
=> NX Bit/DEP: 공격자가 heap, stack, library 영역에서 shellcode를 저장해서 실행하기 위해서는 해당 영역에 실행권한이 있어야 하는데, DEP가 적용된 경우 실행권한이 없어서 shellcode가 실행되지 않음.
프로그램에서 해당 동작을 예외처리 후 프로세스 종료 됨.
메모리 영역 중 stack 영역에서 코드를 명령어로 실행하지 못하게 하는 패치.
버퍼나 환경변수 등에서 쉘코드 실행 안 됨.
$ cat /proc/self/maps 실행권한 확인
/proc process 줄임말로, 이 디렉터리로 프로세스의 정보 저장
/proc/self 현재 실행되고 있는 프로세스의 정보가 담긴 디렉터리
/proc/self/maps 현재 실행되고 있는 프로세스의 주소맵
8. Non-Executable heap O 비실행 힙
=> NX Bit/DEP
Heap 영역에 있는 코드를 명령어로 실행하지 못하게 하는 패치. Heap 상에서 코드 실행 불가능
9. Stack Carany X
=> Canaries 보호 기법: BOF 모니터 위해 버퍼와 제어 데이터 사이에 설정된 값 = Canary
공격자가 return address를 조작하기 위해 BOF 공격 시도 시,
return address 덮기 전에 Canary가 있어서 Canary가 먼저 덮어짐.
Canary 값 손상되어 Canaries 데이터 검증에 실패, BOF 경고 출력 후 손상된 데이터 무효화 처리
(오버플로우된 데이터가 무효화됨)
xor 연산 시 0이 아니면 BOF 오류 출력 후 데이터가 무효화되고 프로세스 종료됨
★ ROP(Return Oriented Programming)로 우회 가능
ROP는 취약한 프로그램 내에 있는 기계어 코드 섹션(Gadget)들을 이용해 BOF 공격 시 특정 명령을 실행시키는 방법
일반적인 Gadget은 함수 끝에 기술되는 ret 명령어를 포함하는 상위 몇 가지 명령어들의 집합으로 이를 이용해 한번에 공격 성공 가능하다고 함.
10. Stack Smashing Protector X
[FC3] evil_wizard -> dark_stone (0) | 2019.07.12 |
---|---|
[FC3] hell_fire -> evil_wizard (0) | 2019.07.12 |
[FC3] dark_eyes -> hell_fire (0) | 2019.07.12 |
[FC3] iron_golem -> dark_eyes (0) | 2019.07.06 |
[FC3] gate -> iron_golem (0) | 2019.07.05 |