IT 그리고 정보보안/Knowledge base 227

스택 가드 (Stack Guard)

이건 일명 까나리(?) 라고 불리는 스택 쿠키가 사용되는 기법 중 하나다. 원래 명칭은 Canary value임. 스택 쿠키 중에 여러가지 종류가 있는데 Propolice, Stackguard 등이 있는데 지금 언급하려는게 스택 가드이고, 다음에 설명할 SSP가 별칭으로 Propolice 라고 하는데.. 기회가 된다면 다시 한번 정리를 하겠음. 일단 스택 가드는 컴파일러 옵션으로 지정할 수 있는 방어기법이다. 스택에 프로그램 실행 시 canary 이놈을 심어두는 거임. ebp와 지역변수 공간 사이에 이녀석을 놔두는데, 보통 BOF 공격할 때 RET를 변조 시키려면 무조건 SFP와 아래의 공간이 다른 값으로 가득차야 한다는 것을 포인트로 잡고 canary를 두어 이 값이 변조되면 BOF 공격이 일어났다고 ..

스택 쉴드 (Stack Shield)

스택 쉴드에 대해서 알아보자. 암만 찾아도 자료가 너무 안나와서 해외 웹페이지에 있는 내용을 참고함 http://security.stackexchange.com/questions/44131/stack-guard-vs-stack-shield Stack Shield is based on copying the return address to a safe area, and checking the return address at the end of the function. If the return address is overwritten, this will no longer match and the attack will be detected. 리턴 어드레스를 안전한 공간에 복사해두고, 함수가 종료될 때 현재 스택..

ASLR (Address Space Layout Randomization)

ASLR (Address Space Layout Randomization) 에 대해 함 알아봅시다. 이름에서 보다시피 " 주소 공간 무작위 배치 " 이런 뜻이다. 나는 원래 ASLR이 랜덤 스택을 나타내는 줄 알고 있었는데 Stack, Heap, Memory map allocation Randomization .. 스택 뿐 아니라 메모리에 매핑되는 주소를 모두 무작위 배치하는것. sysctl 명령으로 ASLR을 켰다 껐다 할 수 있다. sysctl -w kernel.randomize_va_space=0 - 0으로 설정하면 ASLR을 끈다. sysctl -w kernel.randomize_va_space=1 - 1로 설정하면 랜덤 스택, 랜덤 라이브러리 켠다. sysctl -w kernel.randomiz..

Ascii Armor (아스키 아머)

RTL Attack 공부 중 RTL이 막힐 수 있는 상황에 대해 알아보게 되었는데, 공교롭게 Ascii Armor (아스키 아머) 라는 방어 기법에 막히는 케이스가 발생한다. 그래서 정리를 한번 해야할 필요성을 느낌. Ascii Armor(아스키 아머)란, 라이브러리를 공유 라이브러리영역에 올리지 않고 텍스트영역의 16MB 아래의 주소에 할당하는 것이다. 그래. 근데 이게 왜 방어 기법인가.? 아스키 아머가 적용되면 라이브러리 영역 주소의 최상위 1바이트가 00이 된다. 아래는 아스키 아머가 적용되어 있지 않은 레드햇 9.0의 메모리 맵이다. 0x40 대로 시작한다.. 아스키 아머가 적용되면, 공유 라이브러리 영역에 할당되어야 하는 놈들이 텍스트 영역 어딘가에 짱박히게 된다. 물론, 코드들이 사용하지 않..

NX-bit (Non-eXecutable stack)

BOF 방어 기법 중 뭐 아주 기초적인 방어 기법이라고 할 수 있다. NX-bit는 "스택에서 코드 실행 불가" 기본적으로 우리는 BOF공격을 할 때 일단 스택 상에서 셸코드가 실행되는 공격을 생각한다. [버퍼크기 + SFP] 만큼 쓰레기값을 채우고, RET에 스택 상에서 셸코드가 실행 되게끔 하는 위치로 잡아서 공격하는 BOF. 이것은 NX-bit가 설정 되어 있지 않아 스택 상에서 코드가 실행 가능할 때야 먹히는 공격이다. 위 그림에서 스택 영역으로 보이는 위치에 권한을 보면 x(실행) 권한이 주어져 있다. NX-bit가 적용되어있지 않다는 말임. NX-bit를 우회하기 위해 사용하는 공격 기법으로 RTL(Return-to-Libc) 등이 있는데 (더 고수준 공격들도 있지만, 아직 공부하는 단계라 추..

argv[] 인자로 받는 페이로드 구성 시 유의할 점

argv를 인자로 받을때 ppr 가젯이나 쉘코드에 \x20 이 들어 있으면 펄 or 파이썬 스크립트를 " " (더블 쿼터) 로 묶어야 한다. \x20이 아스키 코드값으로 space(공백)인데, argv[]는 space(공백)을 토큰으로 인자 배열을 구분한다. 그래서 \x20 을 bad character 로 인식하는 듯 하다. (정확한 건 아닌데 짐작컨데 이게 맞는듯..) 그러니까 ... `perl -e 'print "\x90"x104,"\x10\x83\x04\x08","\xde\x84\x04\x08","\x20\xa0\x04\x08","\x54\x81\x04\x08","\x10\x83\x04\x08","\xde\x84\x04\x08","\x21\xa0\x04\x08","\x2f\x82\x04\x08","..

RTL Chaining (esp lifting technique)

RTL 체이닝에 대해서 알아보겠습니다~ RTL Chaining에 대해 알아보자. 일단 RTL Chaining​은 ESP Lifting gadget과 관계있다. 이름 그대로 ESP를 움직이는 것이다. POP RET POP POP RET POP POP POP RET ... 위 3가지는 esp lifting을 하게끔 해주는 어셈블리 코드(가젯)들이다. pr, ppr, pppr 이라고도 부른다. (통칭 ppr 로 하겠음) ppr을 이용하면 함수를 연쇄적으로 호출할 수 있게 된다. 그 말인 즉, RTL을 연쇄적으로 할 수 있다는 말이다. 역시 말로하면 이해가 잘 가지 않으니 그림을 그려서 정리해보도록 하겠다. 간단하게 설명하자면 pop-pop-ret 가젯을 이용하여 esp를 컨트롤 하는 것이다. 최초에 RTL 함..

Frame Pointer Overwriting

프레임 포인터 오버라이팅 기법에 대해 알아보자. fake ebp 하위 개념이라고 생각하면 된다. 프레임 포인터 오버라이팅은 RET 위로 덮어쓸 수 없을 때, 1바이트 오버플로우가 가능하다면 공격이 가능한 기법이다. 흔히 1byte overflow 라고도 한다. 하지만 조건이 있다. 1. 1바이트 오버플로우가 일어나야 한다. 2. 메인함수 외에 서브함수가 반드시 필요하다. 그럼 프레임 포인터 오버라이팅에 대해 알아보자. 문제점이 생기는 소스코드를 예제로 하나 보여주지. function(char *arg) { char buffer[80]; int count; for(count=0;count 2번째 그림 : leave 명령이 수행되어 ebp는 '??' 즉, 알 수 없는 주소로 떠내려간다. 2번째 -> 3번째 ..

Fake EBP

Fake ebp (가짜 ebp) 기법에 대해 언급하려 한다. 들어가기 이전에, 머리에 상당히 쥐가 날 수 있다는 점.. 늘 새로운 기법을 공부할 때면 사용 가능한 환경과 이유가 있겠지? fake ebp 기법은 언제쓸까? RET 이후로 덮어쓸 수 없을 때, 그리고 RET 자리에 스택 이나 라이브러리 주소를 필터해놓았을 경우 이다. 이런 경우에 RET에서 원하는 위치로 eip를 뽑아내야 하는데, 그렇지 못하다. 그래서 ebp위치를 옮겨 우리가 원하는 위치에서 원하는 RET를 뽑아내는 것이 Fake ebp 기법이다. 간단하게 말하자면. fake ebp는 함수의 에필로그가 핵심이다. leave와 ret 이놈들. 알다시피 leave ret 은 명령어를 해부하면 아래와 같다. 결론적으로 말하자면 에필로그를 이용해서..

반응형