rosieblue
article thumbnail
[Kernel] Tools: QEMU
Linux Exploitation/Kernel 2023. 9. 8. 01:03

개요 사용자 모드 프로그램을 익스플로잇할 때는 익스플로잇이 잘못되어도 해당 프로그램을 재실행하면 되지만, 커널 익스플로잇을 할때에 크래시가 나면 전체 OS가 정지된다. 따라서 커널 익스플로잇에 편한 QEMU라는 가상 머신을 이용할 것이다. Question. 커널을 일반 ELF 바이너리처럼 실행하면 안 되는가? 커널 이미지를 일반 바이너리처럼 실행하면 Segmentation Fault가 발생! 그 이유는 커널 이미지의 베이스 주소가 커널 공간 안에 위치하여 기존 커널이 적재를 거부하기 때문! 바이너리 디버깅과 비교해보자. 바이너리를 디버깅할 때 우리는 gdb를 통해서 디버깅한다. 그리고 breakpoint를 걸어 실행 흐름을 하나하나 분석한다. 그런데 만약 커널을 분석할 때 breakpoint를 걸면 어떻..

article thumbnail
[Kernel] 커널의 구조
Linux Exploitation/Kernel 2023. 9. 7. 13:16

🤔 커널이란? 커널은 운영체제의 핵심 부분으로, 컴퓨터 자원을 직접적으로 관리하는 역할을 한다. 사용자와는 직접적으로 상호작용하지 않기 때문에, 사용자의 명령어를 해석하여 커널로 전달하는 번역기(셸, Shell)이 있다. 아래는 32bit 시스템에서 커널 공간과 사용자 공간의 구분이다. 이처럼 둘은 서로 분리되어있고 접근 권한도 다르다. 자세한 내용은 아래 링크를 참고하자. [🖥️ Computer Science/System] - [Pwnable] 시스템콜(syscall), 셸, 커널모드 vs 유저모드 [Pwnable] 시스템콜(syscall), 셸, 커널모드 vs 유저모드 오늘 다룰 내용은 다음과 같다. 커널 모드와 유저 모드 시스템콜(syscall)이란 무엇인가? (+syscall과 call과의 차이)..

article thumbnail
[Linux/C] 리눅스 시스템 프로그래밍 기초 (1)

오늘 다룰 내용은 아래와 같다. 명령어 행 파라미터의 처리 환경 변수의 처리 파라미터의 처리 UNIX에서는 cli에 입력한 명령어 이름, 옵션, 파일 등을 main의 인자로 전달할 수 있다. 오늘은 이렇게 cli와 결합하여 프로그래밍하는 법의 기초를 배워보겠다. int main(int argc, char* argv[]) // int argc; 파라미터의 수 // char* argv[]; 파라미터들로 이루어진 문자열 배열 argc와 argv의 구조는 아래처럼 나타낼 수 있다. 예를 들어 sample이라는 프로그램이 있다고 하고 뒤에 인자를 입력해줬다고 가정하자 sample aaa bbb ccc 우리가 리눅스 터미널에서 명령어 뒤에 파라미터 보내는 것과 완벽하게 동일하다. 이 경우 argc=4, argv는 ..

article thumbnail
[Linux] 셸 종류, 셸 스크립트

쉘 (셸) 명령어와 커널이 대화를 할 수 있게 도와주는 일종의 인터페이스 명령어 해석기라고 봐도됨 유저가 셸(명령어 해석기)에 명령을 전달하면 셸이 커널한테 부탁하고, 커널이 내부적인 작업을 실행한 후 이 결과를 다시 셸을 통해 유저에게로 전달 셸(shell)은 껍질이라는 뜻으로 커널을 감싸고 있어서 그런 이름이 되었다. 자세한 내용은 여기 : 시스템콜(syscall), 셸, 커널모드 vs 유저모드 셸 종류 사용자 프롬프트가 $이면 본 셸 계열, %이면 C셸 계열이다. Bourne-Shell(/bin/sh) - 유닉스의 오리지널 쉘. 상호 대화형 방식 불가능 C shell(/bin/csh) - C 기반으로 만들어짐. 빌 조이(vi 에디터 만든 사람)가 만들었음. Bourne-agin shell(/bin/..

article thumbnail
[Linux] Virtual Device (가상 장치)

Virtual Device 실제 시스템과 마찬가지로 VM에서는 성능, 메모리, 스토리지, 네트워킹 또는 그래픽과 같은 기능을 시스템에 제공하는 특수 장치가 필요하다. 물리적 시스템은 일반적으로 이러한 목적으로 하드웨어 장치를 사용한다. 그러나 VM은 소프트웨어 구현으로 작동하기 때문에 가상 장치라고 하는 이러한 장치에 대한 소프트웨어 추상화를 한다. 리눅스에서 virtual device란, 실제로 연결된 하드웨어가 없는 디바이스 파일을 말한다. virtual device는 sw 형태로 존재하나 hw인 척(?)을 한다. 따라서 시스템으로 하여금 특정 hw가 존재하는 것으로 착각하게 한다. 그럼 이러한 virtual device는 왜 존재하냐? 보통 OS에서 에러를 고치기 위해 사용된다고 한다. 예를 들어 ..

보호되어 있는 글입니다. 내용을 보시려면 비밀번호를 입력해주세요.