본문 바로가기

보안

(12)
[시스템해킹] Background: x86 Assembly 어셈블리 언어 : 컴퓨터의 기계어와 치환되는 언어 - 명령어 집합구조(ISA)에 따라(IA-32, x86-64, ARM, MIPS ...) 많은 수의 어셈블리어 존재 x86-64 어셈블리 언어 문법 구조: 명령어(Opcde)와 목적어에 해당하는 피연산자(Operand) Opcode 종류 기본 어셈블리 데이터 이동: 어떤 값을 레지스터나 메모리에 옮기도록 지시 mov dst, src: src에 들어있는 값을 dst에 대입 lea dst, src: src의 유효 주소를 dst에 저장 lea rsi, [rbx+8*rcx]: rbx+8*rcx를 rsi에 대입 산술 연산: 덧셈, 뺄셈, 곱셈, 나눗셈 연산 add dst, src: dst에 src의 값을 더함 sub dst, src: dst에서 src의 값을 뺌 ..
[시스템해킹] Background: Linux Memory Layout 리눅스의 메모리 구조 적재되는 데이터의 용도별로 5가지 세그먼트(segment)로 구분 코드 세그먼트(Code segment = Text segment): 실행 가능한 기계 코드가 위치하는 영역 프로그램 동작을 위해 읽기, 실행 권한 부여 쓰기 권한이 부여되면 공격자가 악의적인 코드를 삽입할 수 있으므로 대부분 운영체제에서 쓰기 권한 제거 int main() { return 31337; } -> main 함수가 컴파일되면서 기계 코드로 변환되고, 이 기계 코드가 코드 세그먼트에 위치 데이터 세그먼트(Data segment): 컴파일 시점에 값이 정해진 전역 변수 및 전역 상수들이 위치 CPU가 데이터를 읽어야 하므로 읽기 권한 부여 쓰기 권한 여부에 따라 또다시 2개의 세그먼트로 분류 data segme..
[시스템해킹]Background: 컴퓨터 구조, 레지스터, ... 컴퓨터 구조(Computer Architecture) : 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 이들을 구성하는 방법 컴퓨터 기능 구조에 대한 설계, 명령어 집합 구조, 마이크로 아키텍처, 그리고 기타 하드웨어 및 컴퓨팅 방법에 대한 설계 등이 포함 - 컴퓨터 기능 구조에 대한 설계: 컴퓨터가 연산을 효율적으로 하기 위해 어떤 기능들이 컴퓨터에 필요한지 고민하고, 설계하는 분야 - 명령어 집합 구조(Instruction Set Architecture): CPU가 처리해야 하는 명령어를 설계하는 분야 - 마이크로 아키텍처(Micro Architecture): CPU의 하드웨어적인 설계, 명령어 집합을 효율적으로 처리할 수 있도록, CPU의 회로를 설계하는 분야 x8..
[시스템해킹] 드림핵 워게임 basic_exploitation_000 유형: Stack Overflow basic_exploitation_001.c #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void read_flag() { system("cat /flag"); } int main(int argc, char *argv[]) { char buf[0x80]; initialize(); gets(buf); return 0; } mai..