y0u_bat

[SSA] 시스템 스터디 3주차 본문

System

[SSA] 시스템 스터디 3주차

유뱃 2015. 10. 20. 01:04

ROP ( Return Oriented Programming )는 BOF + 여러가지 미티게이션을 우회 할 수 있는 테크닉이다.


미티게이션이란?

- 취약점을 막는게 아니라 취약점을 통한 익스플로잇을 막는것이다.


5개정도 있으며 아래 대중적으로 3개가 있다.


1. ASLR

2. NX

3. SSP


1. ALSR ( address sapce layout randomization의 약자) 

- 주소를 난수화 한다.

- 거는방법 /proc/sys/kernel/randomize_va_space 값이 0이면 안걸림 1이면 반 2면 풀 aslr


해결책

- 랜덤화 안해주는 주소값을 찾아서 이용하자 (정적영역)

- 리눅스 32비트 로컬환경에서는 ulimit -s unlimit을 통해 스택의 크기를 풀로 늘려주자


2. NX ( Non eXecutable stack의 약자)

- 쓰기와 실행권한을 동시에 부여를 안한다


해결책

- RTL로 우회가능

- RTL이란 Return to lib의 약자

- eip를 변조해서 쉘코드를 실행이 아닌 라이브러리 주소를 점프하여 system("/bin/sh") 등등 처럼 명령을 다이렉트로 실행


3. SSP ( Stack Smashing protector의 약자)

- 변수 순서를 바꾼다

- cannary가 추가 된다.


해결책

- 메모리릭을 하여 카나리를 알아낸다.

- 등등


4. PIE ( Position Independent Executable의 약자)

- ALSR은 주로 스택, 라이브러리 영역을 랜덤화하는것을 말하는데, PIE는 바이너리 영역을 랜덤화 한다.

- 즉 바이너리 ASLR


해결책

- 바이너리 영역이 배치된 주소를  알아 낼 수 있는 메모리 릭 취약점이 있을경우 가능



PLT,GOT

- plt,got는 리눅스나 기타 등등 아키텍쳐상에 함수들을 호출할때 사용하는 테이블이다다

plt : 바이너리에서 사용되는 함수들의 저오만 따로 모아둔것

got: 런타임시 라이브러리 주소를 불러와 저장하는데 그게 실제로 저장되는 공간(got에는 라이브러리 주소가 저장되어 있다.)


함수plt를 처음 호출시 plt -> got(plt+6 다이나믹 링커) -> 라이브러리 주소를 로딩

함수plt를 두번째 호출시 plt -> got(라이브러리주소)   // 이미 라이브러리 주소가 로딩되어 있어서 바로 라이브러리를 호출한다.


plt got의 장점

- plt got는 바이너리 영역에 저장되기 때문에 정적이라 aslr의 영향을 안받는다.

- plt를 호출하는것만으로도 라이브러리를 가져다 쓸 수 있다.

- 바이너리에서 사용하는 모든함수는 우리도 사용가능 aslr 영향을 안받음





스터디과제

1. ulimit -s unlimited 하면 liunx 32bit 환경에서 일시적으로 ASLR이 왜 해제 되는지

- ulimit -s unlimited을 하게되면 스택이 한도가 해제되는데 한도가 해제되어 더이상 스택을 확장 할 수 없어서 ASLR가 풀리게 된다. 


2. 함수주소 다음값이 리턴 어드레스인지

-  ret 하면 pop eip;jmp eip하는데 여기서 pop eip하면서 현재esp가 eip에 들어가고 esp+4 되기 때문에 함수주소 다음이 그함수다음 리턴어드레스가 된다.


3. 코드게이트 뉴클리어 문제 풀기

http://y0ubat.tistory.com/65


4. 코드게이트 vuln200 문제 풀기

-  http://y0ubat.tistory.com/72


5. ROPAUAURUSREX 문제 풀기

- http://y0ubat.tistory.com/66


6. 문서화

-  http://y0ubat.tistory.com/71

 



Comments