본문 바로가기

Security/System Hacking42

[Dreamhack System Hacking] STAGE 10 [Memory Corruption : Format String Bug] 1. 포맷 스트링 1) 포맷 스트링 - 구성 : %[parameter][flags][width][.precision][length]type 2) 형식 지정자 (specifier) - 인자를 어떻게 사용할지 지정 형식 지정자 설명 d 부호 있는 10진수 정수 s 문자열 x 부호 없는 16진수 정수 n 인자에 현재까지 사용된 문자열의 길이를 저장 p void형 포인터 3) 너비 지정자 (width) - 최소 너비 지정 - 치환되는 문자열이 이 값보다 짧을 경우, 공백문자 패딩 너비 지정자 설명 정수 정수의 값 만큼을 최소 너비로 지정 * 인자의 값 만큼을 최소 너비로 지정 cf) "%n"의 쓰임 - 포맷스트링의 인자가 사용자의 입력에 영.. 2022. 2. 19.
[Dreamhack System Hacking] STAGE 9 - out_of_bound 보호되어 있는 글 입니다. 2022. 2. 17.
[Dreamhack System Hacking] STAGE 9 [Memory Corruption : Out of Bounds] 1. 배열 1) 배열의 속성 - 배열은 연속된 메모리 공간을 점유 - 배열이 점유하는 공간의 크기는 요소의 개수와 요소 자료형의 크기를 곱한 값 - 배열이 포함하는 요소의 개수 = 배열의 길이 - 배열 각 요소의 주소는 배열의 주소, 요소의 인덱스, 요소 자료형의 크기를 이용하여 계산됨 2) Out of Bounds - 배열의 임의 인덱스에 접근할 수 있는 취약점 - 배열의 범위를 벗어나는 참조 - 요소를 참조할 때 인덱스 값이 음수이거나 배열의 길이를 벗어날 때 발생 - 개발자가 인덱스 범위에 대한 검사를 명시적으로 프로그래밍하지 않으면 프로세스는 계산한 주소가 배열의 범위 안에 있는지 검사 x - 사용자가 배열 참조에 사용되는 인덱스를 .. 2022. 2. 16.
[Lazenca] Protection Tech > PIE, RELRO [PIE] 1. PIE(Position Independent Executable) 1) PIE - 위치 독립 코드로 이루어진 실행 가능한 바이너리 2. 예시 #include char *gBuf = "Lazenca.0x0"; void lazenca() { printf("Lazenca.0x1\n"); } void main(){ printf("[.data] : %p\n",gBuf); printf("[Function] : %p\n",lazenca); } - build PIE file lazenca0x0@ubuntu:~/Documents/Definition/protection/PIE$ gcc -o NoPIE PIE.c lazenca0x0@ubuntu:~/Documents/Definition/protection/P.. 2022. 2. 10.
[Dreamhack System Hacking] STAGE 7 - hook 보호되어 있는 글 입니다. 2022. 2. 10.
[Dreamhack System Hacking] STAGE 7 - oneshot 보호되어 있는 글 입니다. 2022. 2. 10.
[Dreamhack System Hacking] STAGE 7 - 함께실습 [함께실습] Hook Overwrite - malloc과 free 함수를 후킹하여 각 함수가 호출될 때, 공격자가 작성한 악의적인 코드가 실행되게 하는 기법 1. 메모리 함수 훅 1) malloc, free, realloc hook - C언어에서 메모리의 동적 할당과 해제를 담당하는 대표적인 함수 : malloc, free, realloc - 각 함수는 libc.so에 구현되어 있음 - libc에는 이 함수들의 디버깅 편의를 위해 훅 변수가 정의되어 있음 ex. malloc 함수 : __malloc_hook 변수의 값이 NULL이 아닌지 검사하고, 아니라면 malloc을 수행하기 전에 __malloc_hook이 가리키는 함수를 먼저 실행함. (이때, malloc의 인자는 훅 함수에 전달됨) free 함수.. 2022. 2. 10.
[Dreamhack System Hacking] STAGE 7 [PIE] 1. PIC 1) PIC (Position-Independent Code) - 리눅스에서 ELF는 실행 파일(Executable)과 공유 오브젝트(Shared Object, SO) 두 가지가 존재합니다. - 실행 파일은 addr처럼 일반적인 실행 파일, 공유 오브젝트는 libc.so와 같은 라이브러리 파일 - 공유 오브젝트는 기본적으로 재배치(Relocation)가 가능 - 재배치가 가능하다는 것 = 메모리의 어느 주소에 적재되어도 코드의 의미가 훼손되지 않음 - 이런 성질을 만족하는 코드가 PIC - gcc는 PIC 컴파일 지원 - 예제 코드 // Name: pic.c // Compile: gcc -o pic pic.c // : gcc -o no_pic pic.c -fno-pic -no-pi.. 2022. 2. 10.
[Lazenca] Protection Tech > NX, ASLR [NX] 1. NX 1) NX Bit(NX bit, Never eXecute bit, 실행 방지 비트 - 프로세스 명령어나 코드 또는 데이터 저장을 위한 메모리 영역을 따로 분리하는 CPU의 기술 - NX 특성으로 지정된 모든 메모리 구역은 데이터 저장을 위해서만 사용되며, 프로세서 명령어가 그 곳에 상주하지 않음으로써 실행되지 않도록 만들어 줌 2) DEP(Data Execution Prevention) - 마이크로소프트 윈도우 운영 체제에 포함된 보안 기능 - 악의적인 코드가 실행되는 것을 방지하기 위해 메모리를 추가로 확인하는 하드웨어 및 소프트웨어 기술 - 모드 종류 ① 하드웨어 DEP: 메모리에 명시적으로 실행 코드가 포함되어 있는 경우를 제외하고 프로세스의 모든 메모리 위치에서 실행할 수 없도.. 2022. 2. 6.