분류 전체보기 (154) 썸네일형 리스트형 [dreamhack] System Exploitation 6강 - NOP Sled 6강 Linux Exploitation & Mitigation Part 1 6.3 NOP Sled 명령어 중 하나인 NOP(No OPeratrion)은 xchg eax, eax와 같이 프로그램의 실행에 영향을 주지 않아 프로그램 실행 중 NOP 명령어를 만나면 다음 명령어로 넘어가는 것과 같은 효과를 준다. (주로 명령어의 주소 alignment를 맞출 때 사용) x86 아키텍처의 NOP 명령어 바이트코드는 0x90 으로 NOP Sled(NOP Slide)는 주로 셸코드의 주소를 알기 힘든 경우 큰 메모리를 확보해 셸코드 주소의 오차 범위를 크게 만들 때 사용한다. 위 코드서 NOP Sled를 이용해 새로운 공격 코드를 만들어 보면 10000바이트의 NOP Sled가 포함된 셸코드를 argv[1]에 넣은.. [dreamhack] System Exploitation 6강 - Return Address Overwrite 6강 Linux Exploitation & Mitigation Part 1 6.2 Return Address Overwrite 스택 버퍼 오버플로우 취약점에서 주로 스택의 리턴 주소를 덮는 공격을 한다. -> 스택에 저장된 리턴 주소를 다른 값으로 바꾼다. 리턴 주소 : 함수가 끝나고 돌아갈 이전 함수의 주소 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include int vuln(char *src) { char buf[32] = {}; strcpy(buf, src); return 0; } int main(int argc, char *argv[], char *environ[]) { if (argc 위 익스플로잇 코드는 리턴 주소를 스택에 있는 셸코드의 주소로 덮지만, 스택의 .. [dreamhack] System Exploitation 6강 - ELF 동적 분석 6강 Linux Exploitation & Mitigation Part 1 6.1 ELF 동적 분석 바이너리를 분석할 때, 바이너리가 실행되며 변화하는 상태를 보기 위해 동적 디버깅이 필요하다. 때문에 리눅스 실행 파일인 ELF 파일을 동적으로 디버깅하는 방법을 알아야한다. ELF의 동적 분석을 위한 도구로 gdb, strace, Itrace, IDA가 있고, 이 중 ELF 디버거인 gdb(GNU Debugger)는 AT&T와 intel 두 종류가 있다. 널리 쓰이는 디스어셈블리 문법은 intel이다. 1 2 3 4 5 6 7 8 9 10 #include int main(void){ int sum = 0; int val1 = 1; int val2 = 2; sum = val1 + val2; printf(".. [dreamhack] System Exploitation 5강 5강 Logical Bugs 5.1 Logical Bugs Logical Bugs (논리적 오류) : 프로그램이 부정확하게 동작하지만 크래시가 발생하지 않는 경우 프로그램의 메모리 관리 실수로 인해 발생하는 메모리 커럽션 취약점 버퍼오버플로우 :버퍼가 허용할 수 있는 양의 데이터보다 더 많은 값이 저장돼 버퍼가 넘치는 취약점 5.2 Command Injection Injection : 검증되지 않은 공격자의 입력을 셸 커맨드 또는 쿼리 일부로 처리해 정상적인 실행 흐름을 변경할 수 있는 취약점 분류 - SQL 인젝션 : 문자열을 Structured Query Language(SQL)의 일부로 처리해 발생하는 취약점 - 커맨드 인젝션 : 문자열 일부를 셸 커맨드에서 처리하면서 발생하는 취약점 (검증 없이 .. [dreamhack] System Exploitation 3강 3강 Memory Corruption - C (2) 3.1 포맷 스트링 버그(Format String Bug) 초기화되지 않은 메모리 : printf나 sprintf와 같이 포맷 스트링을 사용하는 함수에서 발생하는 취약점으로, %x나 %s와 같이 프로그래머가 지정한 문자열이 아닌 사용자의 입력이 포맷 스트링으로 전달될 때 발생하는 취약점 1 2 3 4 5 6 7 8 // fsb-1.c #include int main(void) { char buf[100] = {0, }; read(0, buf, 100); printf(buf); } cs 위 코드는 char형 배열 buf에 100 바이트를 입력받고 printf 함수를 통해 입력받은 버퍼를 출력하는 예제이다. 만일 "%x"와 같은 포맷 스트링을 문자열로 입력.. 나 보려고 정리해두는 gdb 명령어 gdb 명령어 info functions : 함수의 이름과 주소 출력 disassemble(disass) main : main 함수의 디스어셈블리 출력 break(bp) : 주소에 breakpoint 설정 info breakpoints(bl) : breakpoint 정보 출력 run(r) : 프로그램을 처음부터 실행 display : 매 실행 시 인자로 전달된 값 출력 continue(c) : 다음 브레이크 포인트까지 실행 si : step instruction으로 명령어 1개 실행 finish : 현재 함수 모두 실행 info register : 레지스터 정보 출력 x/ : 지정된 메모리 영역을 특정 단위로 표현 p : print, 인자로 전달된 값 출력 delete(d) [break number] :.. [dreamhack] System Exploitation 2강 2강 Memory Corruption - C (1) 2.1 버퍼오버플로우란? 버퍼 : 지정된 크기의 메모리 공간 버퍼오버플로우 : 버퍼가 허용할 수 있는 양의 데이터보다 더 많은 값이 저장돼 버퍼가 넘치는 취약점 분류(발생위치) - 스택 버퍼오버플로우 : 지역 변수가 할당되는 스택 메모리에서 오버플로우가 발생 ex) 8 바이트의 버퍼 A, B가 메모리에 순차적으로 할당되었다. 만약에 버퍼 A에 16바이트 데이터를 복사하면 데이터는 버퍼 A를 넘어 뒤의 데이터 영역인 B에 쓰여진다. 이는 프로그램의 정의되지 않은 동작(Undefined Behavior)을 이끌어낸다. 이를 악용한다면 기계어 코드를 삽입한 후 함수 포인터를 공격자의 코드 주소로 덮어 코드를 실행할 수 있다. 스택 오버플로우 예제 1) 1 2.. [dreamhack] System Exploitation 1강 1강 시스템 해킹이란? 1.1 해킹 : 컴퓨터의 하드웨어, 소프트웨어, 네트워크, 웹사이트 등 각종 정보 체계서 주어진 권한 이상을 얻거나 의도치 않은 동작을 일으키는 행위를 의미 (컴퓨터 보안) - 엄연히 논리와 규칙을 따르며, 그 원리를 살펴본다면 이해 가능 - 단순히 규칙을 창조적으로 활용해 의도치 않은 결과를 얻어내는 일련의 행위 분류 - 웹 사이트를 공격하는 웹 해킹 - 컴퓨터와 컴퓨터가 연결되는 네트워크를 공격하는 네트워크 해킹 - 프로그램의 약점을 공격하는 시스템 해킹 등 1.2 소프트웨어 버그 :프로그램이 잘못된 결과를 내거나, 오류를 발생하는 등 의도치 않은 동작을 수행하게 되는 문제 - 프로그래머가 의도하지 않은 동작을 수행하는 소프트웨어 버그(Bug)가 가장 상위 - 보안에 영향을 미.. 이전 1 ··· 16 17 18 19 20 다음