분류 전체보기 289

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 은 명령어를 해부하면 아래와 같다. 결론적으로 말하자면 에필로그를 이용해서..

RTL(bypass NX-bit, ASCII Armor)

저번 포스팅에서 RTL을 한건 NX-bit를 우회하는 기본적인 RTL에 대해 언급했었다. 근데 여기서 아스키아머가 적용되었을 때 RTL 공격을 하는 법을 알아보자. 아스키 아머가 적용되면 SYSTEM 함수 라이브러리 주소의 최상위 1바이트가 NULL로 바뀌는데 strcpy 등으로 페이로드가 복사될 때 null 때문에 함수 호출한 후 페이로드 뒷부분이 전달이 되지 않으므로 함수의 인자값을 직접 대입하여 변조하는 것은 불가능하다. 그렇기 때문에 쓰레기값 심볼릭 링크를 하는 RTL 즉, 오메가 프로젝트를 사용한다. 근데.. 접때도 설명했듯이 argv 자리에 있는 값은 스택영역에 있다. 아스키 아머가 걸려 있으면 적어도 페도라 코어3은 될텐데. 거기엔 또 랜덤 스택이 적용되어 스택주소는 계속 해서 바뀐다. 그렇..

RET Sled

ASCII Armor로 인해 RTL 공격이 막히는건 저번에 설명했따. 그럼 해결책이 없는 것인가. RET Sled 즉, RET 썰매를 이용하면 된다. 간단하게 설명해 NOP Sled와 비슷한 맥락인데, RET을 연쇄적으로 호출하여 스택상의 위치를 계속 위로 옮기는 작업이다. 이게 아스키 아머랑 뭔 상관이 있는가. 아스키아머가 적용되어있으면 페이로드에 인자를 구성해서 올릴 수가 없다. 이 상황에서 인자값을 변조시키고 싶다면 스택상의 함수의 실행 위치를 옮기면 되지 않겠는가. 그 때 필요한 테크닉이 RET Sled 원리는 간단하다. 어셈블리 RET 명령어를 이용하는 것이다. 리턴 어드레스의 RET가 아니라 어셈 명령어 RET RET 명령은 두가지로 구성된다. pop eip jmp eip 다음 실행될 명령을 ..

반응형