[Dreamhack] System Hacking Stage 3 - Tool: gdb
·
Hacking/System
서론 버그(bug) : 실수로 발생한 프로그램의 결함 디버거(Debugger) : 버그를 없애기 위해 사용하는 도구 프로그램을 어셈블리 코드 단위로 실행하면서, 실행결과를 사용자에게 보여준다. 자신이 추상적으로 생각한 아이디어의 결과를 직관적으로 보여주기 때문에, 개발자는 디버거를 사용하여 자신이 작성한 코드의 문제점을 더욱 명확하게 찾을 수 있다. gdb gdb(GNU debugger) : 리눅스의 대표적인 디버거 오픈 소스로 개발되어 무료로 설치할 수 있으며 다양한 플러그인들이 개발되어 있다. Ubuntu 18.04에는 기본적으로 설치되어 있다. Github 링크 : https://github.com/scwuaptx/Pwngdb GitHub - scwuaptx/Pwngdb: gdb for pwn gd..
[Dreamhack] System Hacking Stage 2 - x86 Assembly 2
·
Hacking/System
Opcode: 스택 스택 : 함수별로 자신의 지역변수 또는 연산과정에서 부차적으로 생겨나는 임시 값들을 저장하는 영역 push val : val을 스택 최상단에 쌓음 rsp -= 8 [rsp] = val pop reg : 스택 최상단의 값을 꺼내서 reg에 대입 rsp += 8 reg = [rsp-8] Opcode: 프로시저 프로시저(Procedure) : 특정 기능을 수행하는 코드 조각 프로시저 사용 : 반복 연산 대체 → 전체 코드의 크기↓ , 기능별로 코드 조각에 이름 → 가독성 ↑ ​ 호출(Call) : 프로시저를 부르는 행위 반환(Return) : 프로시저에서 돌아오는 것 프로시저를 실행하고 나서 원래의 실행 흐름으로 돌아와야 하므로 call 다음의 명령어 주소(return address, 반환..
[Dreamhack] System Hacking Stage 2 - x86 Assembly 1
·
Hacking/System
x64 어셈블리 언어 어셈블리 언어 : 컴퓨터의 기계어와 치환되는 언어 동사에 해당하는 명령어(Operation Code, Opcode)와 목적어에 해당하는 피연산자(Operand)로 구성된다. 명령 코드 데이터 이동(Data Transfer) mov, lea 산술 연산(Arithmetic) inc, dec, add, sub 논리 연산(Logical) and, or, xor, not 비교(Comparison) cmp, test 분기(Branch) jmp, je, jg 스택(Stack) push, pop 프로시져(Procedure) call, ret, leave 시스템 콜(System call) syscall 피연산자 상수(Immediate Value), 레지스터(Register), 메모리(Memory)가..
[Dreamhack] System Hacking Stage 2 - Linux Memory Layout
·
Hacking/System
메모리 오염 취약점 : 공격자가 메모리를 악의적으로 조작해, 조작된 메모리 값에 의해 CPU가 잘못된 동작을 하는 상황을 유발하는 취약점 세그먼트 세그먼트(segment) : 적재되는 데이터의 용도별로 메모리의 구획을 나눈 것 크게 코드 세그먼트, 데이터 세그먼트, BSS 세그먼트, 힙 세그먼트, 스택 세그먼트로 구분된다. 운영체제가 메모리를 용도별로 나누면, 각 용도에 맞게 적절한 권한을 부여할 수 있다. 권한은 읽기, 쓰기, 실행이 존재하며, CPU는 메모리에 대해 권한이 부여된 행위만 할 수 있다. ​ 코드 세그먼트 코드 세그먼트(Code Segment) : 실행 가능한 기계 코드가 위치하는 영역, 텍스트 세그먼트(Text Segment)라고도 불린다. 읽기 권한과 실행 권한이 부여된다. int m..
[Dreamhack] System Hacking Stage 2 - Computer Architecture
·
Hacking/System
Background : Computer Architecture 컴퓨터 구조(Computer Architecture) 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 이들을 구성하는 방법 컴퓨터의 기능 구조에 대한 설계, 명령어 집합구조, 마이크로 아키텍처, 그리고 기타 하드웨어 및 컴퓨팅 방법에 대한 설계 등이 포함된다. ​ 컴퓨터의 기능 구조에 대한 설계 컴퓨터가 연산을 효율적으로 하기 위해 어떤 기능들이 컴퓨터에 필요한지 고민하고, 설계하는 분야 폰 노이만 구조, 하버드 구조, 수정된 하버드 구조가 있다. ​ 폰 노이만 구조 폰 노이만 구조 : 연산과 제어를 위해 중앙처리장치(CPU)를, 저장을 위해 기억장치(memory)를 사용하고 장치간에 데이터나 제어 신호를 교환..
[Dreamhack] System Hacking Stage 1 - System Hacking Introduction
·
Hacking/System
가상 머신이란? 가상 머신 : 컴퓨터를 에뮬레이팅 한 것 가상 머신을 작동 시키는 컴퓨터를 호스트(Host)라고 부르며, 가상 머신 안에서 작동하는 컴퓨터를 게스트(Guest)라고 부른다. 가상 머신을 이용하면 호스트는 게스트에게 독립된 실행환경을 제공할 수 있다. 그 위에서 게스트는 윈도우, 리눅스, 맥 등의 운영체제를 구동할 수도 있고, 원하는 특정 프로그램만 실행할 수도 있다. 대표적인 가상화 소프트웨어로는 VMware, VirtualBox, Parallels, QEMU 등이 있다. 윈도우 환경 구축 VMware Workstation Player는 윈도우에서 무료로 사용 가능한 가상화 소프트웨어이다. VMware 설치 링크 : https://www.vmware.com/products/workstat..