Layer7 과제/포너블

nx 보호기법, 카나리 보호기법

kms0204 2022. 9. 26. 02:17

nx 보호기법이란 스택, 힙과 같은 영역에서 코드가 실행되는 것을 막는 보호기법이다.

nx 보호기법이 적용되어 있다면, shellcode를 실행할 수 없게 된다.

그동안 풀었던 문제들 중에서 system함수를 호출하는 특정 함수의 주소로 ret를 변조해서 flag를 구했던 문제가 있다.

그 이유가 바로 이 때문이다.

비록 그 중에는 아직 shellcode를 배우지 않았기 때문에 그랬던 것도 있겠지만, nx 보호기법을 우회하기 위해서이기도 하다

nx 보호기법을 우회해서 system함수를 실행하기 위해, system함수를 호출하는 다른 함수를 이용했던 것이다.

 

즉, nx 보호기법이 적용되므로써  공격자가 프로그램의 실행 흐름을 제어할 수 있을 때 exploit을 어렵게 만든다.

 

 

 

카나리 보호기법이란 버퍼와 sfp 사이에 bof를 감지하기 위한 값을 삽입하는 보호기법이다.

bof는 버퍼를 초과해서 입력하므로써 공격자가 원하는 코드를 실행하는 공격이다.

버퍼와 sfp사이에 특정한 값을 삽입한 상태에서 카나리 값이 변경되었다는 건 버퍼의 크기를 초과한 입력이 들어왔다는 걸 의미한다. 

 

따라서 버퍼와 sfp 사이에 카나리 값을 넣으므로써 bof를 감지할 수 있고, bof가 감지된다면 프로그램을 강제 종료하는 

보호기법이다.

 

즉, bof공격을 막기 위해서 만들어진 보호기법이다.

카나리 보호기법

 

카나리 값은 일반적으로 프로그램이 실행될 때 랜덤으로 설정되고, 프로그램이 실행되는 동안은 변경되지 않는다.

그리고 몇 비트 아키텍쳐나에 따라서 4바이트가 될지 8바이트가 될지 결정되고, 첫 바이트는 널 바이트다.

널 바이트는 변경되어도 강제종료하지 않는다.

 

카나리 보호기법을 우회하는 방법은 카나리 값을 알아내어서, 카나리 부분을 카나리 값으로 덮어쓰는 것이다.

카나리 보호기법은 카나리 값이 변조되었는지에 따라서 강제종료하는 것이기 때문에 카나리 값을 같은 값으로 덮어쓴다면

bof라고 인식하지 못하기 때문이다.

 

 

카나리 보호기법의 우회방법으로는,

널 바이트는 변경되어도 강제종료하지 않는다는 점을 이용해서 널 바이트를 더미 값으로 변조하고,

이를 출력해서 카나리 값을 유출하는 memory leak 방법이 있다.

 

또 브루트 포스 방법도 있다.

하지만 이는 너무 많은 경우의 수를 따져야 하기 때문에 현실적으로 불가능하다.

 

'Layer7 과제 > 포너블' 카테고리의 다른 글

[포너블] simple_rtl64  (0) 2022.10.03
[포너블] simple_rtl32  (0) 2022.10.03
[포너블] Oh..Sorry....  (0) 2022.09.26
[포너블] D0 Y0u Shellc0de?  (0) 2022.09.26
[포너블] 0솔브 방지 문제  (0) 2022.09.25