The Linux Kernel Module Programming Guide v2.6
Articles에 문서를 업데이트 했습니다.
CERT-IS의 남윤민 군의 번역문서입니다.
task_struct 구조가 변경되기 전의 Linux Kernel 2.6 버전에서 커널 모듈을 어떻게 작성하는 지를 설명한 기초 문서입니다.
아래의 링크는 이 문서의 원본과 KLDP에 있는 2.4 버전의 번역 문서입니다.
얼마 전, Download 파티션을 ext3로 새로 포맷했습니다. vfat로 해서 써왔더니 다운로드 받은 파일의 이름이 종종 깨질 때가 있어서 말이죠. 그런데 문제가 생겼습니다. 이전에 했던 방법대로 fstab 파일을 편집했지요. 다만, 마운트는 되어도 제게 권한이 없는게 않겠습니까? 권한이 모조리 root로 가 있어서 읽기도 쓰기도 되지 않아 Download 용으로 사용하려는 제 발목을 붙잡는 겁니다. 이를 두고 이번에도 몇…
지난 어셈블리어 기말고사에서 재미있는 문제들이 나왔습니다. C 라이브러리의 strlen 함수와 strcpy 함수를 구현하라는 문제였지요. strcat 함수와 관련된 문제도 나왔구요. (이런 문제 좋아좋아^^) 문자열 함수다 보니 문자열의 종료 처리를 해야할 필요가 있었지요. 아시겠지만, C에서 문자열의 끝은 ‘\0’ 입니다. null 문자라고 읽지요. 이걸 어셈블리어로 처리하려면 어떤 값인지를 알아야 했습니다. 여기서 시작된 선배와의 대화가 null 포인터, null 문자,…
예전에 gas로 작성했던 쉘코드입니다. system call 함수의 번호는 /usr/include/asm/unistd_32.h 에서 확인할 수 있습니다.
위 쉘코드는 메타스플로잇[^1]에서 linux/x86/shell_reverse_tcp2 모듈로 만든 코드입니다. Remote Exploit을 할 때 사용하는 코드인데 어떻게 수행되는지 알아보고자 분석해봤습니다. 우선 시스템함수와 int 0x80을 이용한 코드를 분석할 때는 다음을 유념해야 합니다. eax 레지스터는 시스템함수 번호 (syscall number) ebx, ecx, edx 순으로 함수의 인자들이 구성 그래서 분석을 할 때 int 0x80이 나오기 전에 eax의 값을 확인해야 하고, 그에 맞는…
루트킷을 비롯하여 바이러스, 악성코드 등 여러 분야에 두루 쓰이는 기법이 DLL Injection입니다. 윈도우즈 OS에 한정되어 적용되는 것이지만, 윈도우즈 자체의 점유율이 높은 이유로 아주 효과적으로 공격자가 원하는 작업을 수행할 수 있는 방법이죠. 최근 루트킷에 대해 공부하면서 이 DLL Injection이 어떻게 이루어지는 알게 된 것을 정리해봅니다. DLL? 그게 뭐야? DLL은 윈도우즈 OS에서 사용되는 동적 연결 라이브러리 실행…
Intel 머신에서는 함수의 에필로그(Epilogue) 마지막에 RET 명령이 있습니다. 이 명령은 현재의 ESP(스택 포인터)를 참조하여서 함수가 종료된 후 이전의 실행흐름으로 되돌아가는 명령입니다. 그래서 하나의 함수가 실행되면서 중간중간 다른 함수가 실행되어도 흐름이 유지될 수 있는 것이죠. 어떤 문서에 보니까 RET 명령을 다음과 같이 설명하고 있었습니다. 위 코드대로라면, BOF를 이용한 연속적인 함수 호출이나 RTL(Return-to-Libc) 등이 설명되지 않습니다. 덕분에…