일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- DSP
- MAC
- sampling theory
- 게임 개발
- 운영체제
- 게임개발
- linear difference equation
- Double free
- Unity #Indie Game
- CTF
- 유니티
- TSet
- 배경 그림
- dtft
- 메카님
- MLFQ
- pdlc
- ret2libc
- RBAC
- dirty cow
- Rr
- 언리얼엔진
- AINCAA
- DP
- frequency-domain spectrum analysis
- stride
- STCF
- 유스케이스
- Race condition
- Security
- Today
- Total
목록2024/12 (53)
다양한 기록
#include #include #include void a_fun(void){ system("/bin/sh");}void b_fun(void){ printf("I am in b_fun()\n");}void c_fun(void){ printf("I am in c_fun()\n");}int vul_func(char *str){ char buff[10]; strcpy(buff, str); return 1;}int main(int argc, char **argv){ char str[100]; vul_func(argv[1]); printf("returned properly\n"); return 1;}objdump -d test | moresub로 14 빼니까..
Ret2Libc의 기본 아이디어- 리턴 어드레스를 Libc의 함수 주소로 덮어쓰는 것- 코드 주입 대신 이미 존재하는 코드를 이용- 프로세스의 메모리 이미지 구성1. 쓰기 가능한 메모리 영역 (ex. 스택, 데이터, 힙)2. 실행 가능한 메모리 영역 (ex. 코드 세그먼트, 연결된 시스템 라이브러리) Libc- 모든 유닉스, 리눅스 계열의 프로그램에 링크됨- 시스템 콜이나 다른 기능들 들고 있음 .. ex. system()ROP (Return-Oriented Programming)기본적인 Ret2Libc는 두 함수를 체인했음 (system, exit)이 기법을 일반화 시킨 것- 무한히 코드 청크를 연결 가능방어 기법ASLRCFI (Control-flow integrity) Ret2Libc는 NX 비트를 ..
C언어이고, 인텔 cpu면 일단 모든 함수에서 처음에 프롤로그가 불리고 끝날 땐 에필로그가 불림 프롤로그pushl %ebpmovl %esp, %ebpsubl $16, %esp일단 인자랑 리턴어드레스는 이전 함수의 스택 프레임에서 넣어둔 상태pushl %ebp : previous stack frame pointer(saved ebp)를 스택에 넣음movl %esp, %ebp : 현재 스택 포인터를 ebp에 넣음subl $16, %esp : 사용할 지역변수들 자리를 만들어주기 위해 esp 값 내림에필로그movl %ebp, %esppopl %ebpretmovl, popl 합쳐서 leave 라고 쓰기도 함ebp 값을 esp로 이동, esp 값에서 하나 뽑아서 ebp에 저장끝내기가운데가 movl, 맨 오른쪽이 p..
* 교육용입니다 / 방어기법 다 해제하고 진행한 거라 현대의 실제 환경에서는 불가능합니다*const char code[] = "\x31\xc0\x50\x68//sh\x68\bin" "\x89\xe3\x50\x53\x89\xe1\x99" "\xb0\x0b\xcd\x80";int main(int argc, char **argv){ char buffer[sizeof(code)]; strcpy(buffer, code); ((void(*)( ))buffer)();}* const 붙어 있어서 전역 변수로 선언되어도 텍스트 영역에 존재함어쨌든 저대로 실행해도 실행 인됨.. => Non-executable Stack 때문 (버퍼는 스택에 있음) gcc -z noexecstack ..
Code-Reuse Attack- 컨트롤 플로우 어택의 서브클래스- 의도된 컨트롤 흐름을 전복하여 의도되지 않은 실행 경로를 타도록 유발 (엣지 변동)- 존재하는 코드를 이용해서 악의적인 결과를 냄 (system 같은 함수) ex.Return-to-Libc Attacks (Ret2Libc)Return-Oriented Programming (ROP)Jump-Oriented Programming (JOP) /* heap_bof.c */#include #include #include typedef struct chunk{ char inp[8]; void (*proc)(char *);} chunk_t;void showbuf(char *buf){ printf("buf = %s\n", buf);}v..
Code-injection Attacks- 컨트롤 하이재킹 어택의 서브클래스 .. 삽입된 악성 코드에 의해 의도된 컨트롤 플로우를 파괴 쉘코드- 오버플로우되어 버퍼에 저장되는 경우가 많음- 컨트롤을 쉘로 옮겨버림- 기계어코드로 프로세서와 OS에 종속적Heap Overflow// Vulnerable heap overflow C codetypedef struct chunk{ char inp[64]; void (*process)(char *)} chunk_t;void showlen(char *buf){ int len; len = strlen(buf); printf("buffer read %d chars\n", len);}int main(int argc, char *argv[]){ ..
Control flow- 프로그램의 각각의 문장, 명령어, 함수 호출들의 실행 순서 Control Hijacking Attacks (Runtime exploit)- 본래의 제어 흐름을 다른 흐름으로 바꾸는 것- == Control-flow hijacking attacks==> Change of Control Flow- 코드 포인터 변경.. eip(PC)가 바뀜- 접근되면 안되는 메모리 영역 변경ex. Code injection attacks, Code reuse attacksControl Flow GraphsBasic Block- 하나의 엔트리 포인트와 하나의 엑시트 포인트를 가지는 순차적으로 실행되는 코드 조각 Edge- directed edge .. 실행 방향을 나타냄 코드 인젝션 어택은 베이직 블럭..
버퍼 오버플로우의 대응책 개발자 관점- 안전한 함수 사용 (strncpy(), strncat())- 안전한 라이브러리 사용 (libsafe, libmib) OS 관점- ASLR (Address Space Layout Randomization) 컴파일러 관점- 스택 가드 (스택 카나리) 하드웨어 관점- Non-Executable Stack : NX bit (= DEP, Data Execution Prevention)* 코드 인젝션은 막는데 리유즈는 못막음ASLR : 실행할 때마다 주소를 다르게 할당..현재 스택 프레임의 베이스 포인터 위치(ebp)를 파악하지 못하게 하는 등의 방법악의적인 코드의 위치 또한 모르게 함 ASLR 레벨0 -> 안바뀜1 -> 힙 주소는 그대로고 스택은 바뀜2 -> 대부분의 영역이..