IT 그리고 정보보안/Knowledge base

Ascii Armor (아스키 아머)

plummmm 2021. 4. 15. 21:36
반응형

RTL Attack 공부 중 RTL이 막힐 수 있는 상황에 대해 알아보게 되었는데,

공교롭게 Ascii Armor (아스키 아머) 라는 방어 기법에 막히는 케이스가 발생한다.

그래서 정리를 한번 해야할 필요성을 느낌.

 

Ascii Armor(아스키 아머)란, 

라이브러리를 공유 라이브러리영역에 올리지 않고 텍스트영역의 16MB 아래의 주소에

할당하는 것이다. 그래. 근데 이게 왜 방어 기법인가.?

 

아스키 아머가 적용되면 라이브러리 영역 주소의 최상위 1바이트가 00이 된다.

 

아래는 아스키 아머가 적용되어 있지 않은 레드햇 9.0의 메모리 맵이다.

0x40 대로 시작한다..

 

 

아스키 아머가 적용되면, 공유 라이브러리 영역에 할당되어야 하는 놈들이 텍스트 영역 어딘가에 짱박히게 된다.

물론, 코드들이 사용하지 않는 잉여 영역에 할당된다.

그렇게 되면 라이브러리 영역의 주소 최상위 1바이트가  NULL로 인식되겠지. 

그럼 무슨일이 일어날까요.

 

BOF 취약점이 일어날 수 있는 프로그램들은 str함수들을 사용하겠지? (e.g. strcpy etc.)

문자열 함수들은 문자열을 읽다가 null값이 나오면 중지하는 건 다들 알거다. (문자열 마지막은 NULL이니까)

셸코드 작성할 때도 마지막에 \x90 즉, nop을 없애주는 작업을 반드시 한다. null을 만나면 바로 작동이 중지되니까.

 

이렇게 아스키 아머를 사용하면 RTL 처럼 라이브러리 함수를 사용하는 공격은 뒤에 인자를 수반할 수 없다.

인자도 못 불러오고, 연쇄적인 RET도 불가능하다.

라이브러리 함수를 호출하는 그 때 최상위 1바이트 null을 읽어버리기 때문에 동작이 끝이 나버린다.

 

반응형