모의해킹/시스템 해킹 (6) 썸네일형 리스트형 shell_basic • Shell coade 익스플로잇을 위해 제작된 어셈블리 코드 조각이다. 즉, shell을 획득하기 위한 목적으로 shell코드르 사용한다. • orw shellcode orw shellcode는 파일을 열고, 읽은 뒤 화면에 출력해주는 코드이다. ex) "/tmp/flag"를 읽는 shellcode 작성하기 char buf[0x30]; int fd = open("/tmp/flag", RD_ONLY, NULL); // 문자열을 메모리에 위치시키기 read(fd, buf, 0x30); write(1, buf, 0x30); 스택에는 8바이트 단위로만 값을 push 할 수 있다. 근데 "/tmp/flag" 는 9바이트 이기때문에 먼저 0x67를 우선 push 한 다음 해줘야한다.(리틀 엔디언으로 저장되기 때.. Welcome 드림핵의 시스템 해킹 공부를 하기 위한 첫번째 문제이다. 첫번째 문제는 해당 문제에 접속을 하면 flag 값이 출력이 된다. qemu & gdb 세팅 • qemu 란? - 리눅스에서 사용하는 에뮬레이터이며, KVM을 추가하여 가상 머신으로 사용할 수 있음 - qemu의 다양한 옵션들을 이용해 script를 작성해서 커널을 부팅할 수 있음 - qemu 설치 -> sudo apt install qemu qemu-kvm • gdb 란? - GNU 시스템에서 사용되는 기본 디버거 - gdb의 remote debugging 기능을 통해 리눅스 커널을 디버깅할 수 있음 • 구성된 환경 리눅스 커널 & 파일 시스템 빌드 • 리눅스 커널 빌드 과정 1. 빌드에 필요한 패키지 설치(* ubuntu 18 OS 사용) sudo apt-get install build-essential libncurses5 libncurses5-dev bin86 kernel-package libssl-dev bison flex libelf-dev 2. 원하는 버전의 리눅스 커널 소스 다운로드 https://kernel.org/ The Linux Kernel Archives kernel.org sudo xz -d 리눅스커널파일 -> sudo tar xf 리눅스커널 파일 3. make defconfig // 해당 아키텍처의 default 옵션을 사용 sudo make defconfig 4. make menuconfig // 메뉴 기반 설정 화면을 이.. 리눅스 커널 해킹 (배경 지식) • 리눅스 커널 개론 - 컴퓨터의 가장 기본적인 자원들을 관리하고 통제하기 위한, 운영체제의 핵심이 되는 소프트웨어 - 커널 내부는 태스크 관리자, 메모리 관리자, 파일 시스템, 네트워크 관리자, 디바이스 드라이버 관리자 등으로 구분됨 - 가상 메모리 구조상 스택의 윗 영역에 존재 - 가상 메모리의 3~4GB 구간에 존재하는 커널 영역은 모든 태스크들의 공통 영역으로 사용됨 - 가상 메모리 주소와 물리 메모리 주소를 변환하기 위해 커널 내부에는 페이징 기법이 구현되어 있음 1. 유저 모드 / 커널 모드란? - 하나의 프로세스가 실수로 다른 프로세스에 입출력 작업을 하는 등의 보안적 이슈르 방지하기 위해, 유저가 컴퓨터의 자원에 함부로 접근할 수 없도록 모드를 나누어 둔 것 - 유저 모드 : 접근할 수 있.. 시스템 해킹 기본 지식 • 프로세스의 메모리 구조 프로세스의 메모리를 5가지의 세그먼트로 구분하고, 운영체제가 메모리를 용도별로 나누며 각 용도에 맞게 적절한 권한을 부여한다(읽기, 쓰기, 실행) -> CPU가 메모리에 대해 권한이 부여된 행위만 할 수 있다. 1. 코드 세그먼트 - 실행 가능한 기계 코드가 위치하는 영역으로 텍스트 세그먼트라고 불린다. - 프로그램이 동작하려면 코드를 실행(읽기, 실행 권한) => 쓰기 권한은 공격자가 악의적인 코드를 삽입하기가 쉬워져 제거한다 - main() 등의 함수 코드 2. 데이터 세그먼트 - 컴파일 시점에 값이 정해진 전역 변수 및 전역 상수들이 위치한다. - CPU가 데이터 세그먼트를 읽을 수 있어야 하므로, 읽기 권한이 부여된다. - data 세그먼트 : 전역 변수와 같이 프로그램.. 이전 1 다음