한땀한땀 정성들인 코딩
bof방지 기법 non-executable 본문
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 |