한땀한땀 정성들인 코딩

bof방지 기법 non-executable 본문

자격증/정보보안기사

bof방지 기법 non-executable

romance penguin 2017. 2. 9. 00:02
반응형

Non-Executable 스택

-스택에서 쉘코드가 실행되는 것을 막는다.


- cat /proc/self/maps


7ffcf26b7000-7ffcf26d8000 rw-p 00000000 00:00 0                          [stack]


rw-p

실행권한이 없는것을 확인 할 수 있다.


RTL(return  into Libc)

-Nx bit(Non-executable) 우회하는 기법

-stack기반 bof는 ret주소를 쉘코드로 덮어 씌었으나

-RTL은 libc공유 라이브러리 함수로 덮어 씌운다.

libc

-c표준 라이브러리


-system 함수의 주소 ()

-"/bin/sh" 주소

-buffer가 넘칠 변수의 크기 ( char[40]이면 40byte)

buffer[40] + sfp[4] + ret[4] + dummy[4] + /bin/sh

ret에 system함수의 주소(4byte, 32bit기준)가 들어간다.

system함수는 ebp+8에 있는 값을 인수로 받는다.

 push ebp,mov ebp,esp

-함수 실행 초기 어샘블리어

[-0.call시 복귀주소 (ret)를 push한다.]

-1.sfp저장

-2.ebp를 esp로 옮긴다.

-dummy는 ret가 되므로 복귀 주소를 exit로 하지 않으면 세그먼트fault가 난다.



system함수

-프로세스 관련함수

-인수로 프로세스명을 받아 호출


int system(const char *string);


1.system("/root/usr/include/stdio.h");

2.system("ipconfig");


2.번과 같은 상대경로 지정은 환경변수


환경변수

-환경변수 /usr/bin에는 쉘에서 사용가능한 프로그램들이 있다. ls, mv등등

-이것을 절대경로 지정 없이 상대경로로 입력해서 실행해주는것이 환경변수

-모든 프로세스가 접근가능한 변수

-os의 변수

-즉 메모리에 항상 상주한다.


환경변수 파일

/etc/profile - path같은 환경변수

/etc/bashrc - 주로 alias가 등록

/etc/inputrc

$HOME/.bash_profile

$HOME/.bashrc
$HOME/.Inputrc


#include <stdlib.h>

char *getenv(const char *name); //변수명 인수, 반환 - 환경변수값

int putenv(char *string); // "이름=값" 환경변수 추가


system() vs execl()

- system("ls -al");

- execl("/bin/ls","ls","-al",0);

- execl은 현재 프로세스를 종료시키고 프로그램을 호출한다.


반응형

'자격증 > 정보보안기사' 카테고리의 다른 글

bof방지 기법 ASCII-Armor  (0) 2017.02.09
bof방지 기법 ASLR  (0) 2017.02.09
리눅스 파일권한  (0) 2017.02.08
악성코드  (0) 2017.02.07
RSA암호  (0) 2017.02.07