[Dreamhack] System Hacking Advanced Stage 2 - seccomp
·
Hacking/System
문제 파일이다. // gcc -o seccomp seccomp.cq // 64-bit, canary, nx, partial relro #include #include #include #include #include #include #include #include #include #include #include #include int mode = SECCOMP_MODE_STRICT; 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(60); ..
[Dreamhack] System Hacking Advanced Stage 2 - Exploit Tech: Bypass SECCOMP
·
Hacking/System
Bypass SECCOMP SECCOMP는 시스템 콜 뿐만 아니라 전달되는 인자까지 추적하고 비교할 수 있다. 인자를 비교하는 것은 많은 예외 상황이 있을 수 있기 때문에 많은 개발자들은 시스템 콜을 호출하지 못하도록 설정한다. 해당 기술이 적용된 바이너리를 우회하는 방법은 상황에 따라 여러 가지이기 때문에 많은 분석과 공격 경험이 필요하다. 타 시스템 콜 호출 같은 기능을 하는 서로 다른 시스템 콜이 몇 가지 존재한다. 예를 들어, 파일을 열기 위해서 사용하는 시스템 콜은 대표적으로 open이 있는데, 같은 기능을 수행하는 openat이 있다. 만약 규칙이 open 시스템 콜을 호출하지 못하도록 정의되어 있다면 openat을 사용해 개발자가 의도하지 않은 행위를 할 수 있다. Application Bi..
[Dreamhack] System Hacking Advanced Stage 2 - Background: SECCOMP
·
Hacking/System
서론 원격 코드 실행 (Remote Code Execution) : 원격에서 곧바로 공격할 수 있는 취약점, 사전에 예방할 수 있는 방법이 없다. 이번 강의에서는 공격을 어렵게 하기 위한 보안 매커니즘인 샌드박스 (Sandbox)와 이에 속하는 기술인 SECCOMP를 알아보고, 해당 기술이 적용된 바이너리의 분석을 도와주는 도구인 seccomp-tools에 대해서 배울 수 있다. Sandbox 샌드박스 (Sandbox) ; 외부의 공격으로부터 시스템을 보호하기 위해 설계된 기법 Allow List와 Deny List 두 가지를 선택해 적용할 수 있으며, 애플리케이션의 기능을 수행하는데 있어서 꼭 필요한 시스템 콜 실행, 파일의 접근만을 허용한다. 보호된 영역에서 애플리케이션의 기능이 수행되기 때문에 외부..
[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)를 사용하고 장치간에 데이터나 제어 신호를 교환..
[Pwnable.kr] collision
·
Hacking/System
문제 해당 포트에 접속한 다음에 그 안에 있는 파일을 바탕으로 flag를 구하면 되는 문제이다. 접속했다. col, col.c, flag 파일이 존재한다. flag 파일을 읽으려고 하니 권한이 없다고 퇴짜맞았다. col.c 파일을 읽어보았다. unsigned long hashcode = 0x21DD09EC; if(strlen(argv[1]) != 20){ printf("passcode length should be 20 bytes\n"); return 0; } if(hashcode == check_password( argv[1] )){ system("/bin/cat flag"); return 0; } argv[1]은 20bytes의 값을 가져야 한다. hashcode가 check_password를 통해 ..
[Pwnable.kr] bof
·
Hacking/System
문제 주어진 bof.c 파일이다. #include #include #include void func(int key){ char overflowme[32]; printf("overflow me : "); gets(overflowme);// smash me! if(key == 0xcafebabe){ system("/bin/sh"); } else{ printf("Nah..\n"); } } int main(int argc, char* argv[]){ func(0xdeadbeef); return 0; } 취약점 분석 if(key == 0xcafebabe){ system("/bin/sh"); } func() 함수에서 key 값이 0xcafebabe이면 쉘을 출력한다. func(0xdeadbeef); main에서 실..
[Dreamhack] System Hacking Stage 12 - tcache_dup2
·
Hacking/System
문제 문제에서 주어진 코드이다. #include #include #include #include char *ptr[7]; void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); } void create_heap(int idx) { size_t size; if( idx >= 7 ) exit(0); printf("Size: "); scanf("%ld", &size); ptr[idx] = malloc(size); if(!ptr[idx]) exit(0); printf("Data: "); read(0, ptr[idx], size-1); } void modify_heap() { size_t size, idx; pri..
[Dreamhack] System Hacking Stage 12 - tcache_dup
·
Hacking/System
문제 문제에서 주어진 코드이다. // gcc -o tcache_dup tcache_dup.c -no-pie #include #include #include #include char *ptr[10]; void alarm_handler() { exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(60); } int create(int cnt) { int size; if(cnt > 10) { return -1; } printf("Size: "); scanf("%d", &size); ptr[cnt] = malloc(size..