
리눅스 커널 모듈로, 루트 권한을 부여하고 프로세스/파일을 숨기며 자체 언로드를 방지합니다. Ubuntu 커널에서 교육 목적으로 설계되었습니다.
재미로 작성한, 악의적이지 않은 간단한 Linux 커널 루트킷입니다.
이 루트킷은 다음 작업을 수행할 수 있습니다:
이 루트킷은 Ubuntu 10.04.4 LTS 및 Ubuntu 16.04 LTS에서 Ubuntu가 제공하는 Linux 커널 2.6.32-38 및 4.4.0-22에서 작동하도록 테스트되었으며, 그 사이의 커널 및 최신 커널로도 매우 쉽게 포팅할 수 있습니다.
루트킷에는 x86 및 x86-64 아키텍처에서만 구현된 아키텍처별 코드가 일부 있습니다. 이는 시스템 호출 테이블을 찾고, 쓰기 보호된 메모리를 비활성화하며, 두 가지 함수 후킹 방법 중 하나를 위한 코드입니다. 새 아키텍처로의 포팅은 매우 쉬우며, 이 코드 중 일부는 루트킷 작동에 반드시 필요한 것은 아닙니다. 예를 들어, 비이식형 후킹 방법은 제거할 수 있지만, 대상 커널 함수의 기계어 코드를 덮어써서 대신 우리의 후크 함수를 호출하게 만드는 함수 후킹의 재미를 놓치려면 아주 지루한 사람이어야 할 것입니다.
이 루트킷은 CPU 코어 1개로만 테스트되었으므로, 멀티코어 시스템에서는 제대로 작동할 수도 있고 아닐 수도 있습니다. 루트킷이 주어진 시간에 단 하나의 스레드만 실행된다고 가정하고 작성되었기 때문에 멀티코어 시스템에서는 제대로 실행되지 않을 가능성이 높습니다. 원자적 쓰기/읽기 및 목록 데이터 구조 주변의 뮤텍스가 부족하기 때문입니다.
선택한 VM을 준비하세요.
원하는 Ubuntu 이미지를 받아 설치하세요:
| 커널 / 아키텍처 | x86 | x86-64 |
|---|---|---|
| 2.6.32 | Ubuntu 10.04.4 i386 (694M) [torrent] [iso] | Ubuntu 10.04.4 amd64 (681M) [torrent] [iso] |
| 4.4.0 | Ubuntu 16.04 i386 (647M) [torrent] [iso] | Ubuntu 16.04 amd64 (655M) [torrent] [iso] |
Ubuntu 10.04의 경우 패키지 저장소 주소를 패치하세요:
sed -i -re 's/([a-z]{2}\.)?archive.ubuntu.com|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
루트킷을 빌드하는 데 필요한 컴파일러, Linux 헤더 및 기타 모든 항목을 설치하세요:
apt-get update
apt-get install build-essential
apt-get upgrade를 호출하지 않도록 주의하세요. 커널이 업데이트될 수 있으며, 루트킷은 사전 설치된 커널 버전에서만 테스트되었습니다.
make
루트킷 로드:
insmod rootkit.ko
루트킷 사용:
$ ./client --help
Usage: ./client [OPTION]...
Options:
--root-shell Grants you root shell access.
--hide-pid=PID Hides the specified PID.
--unhide-pid=PID Unhides the specified PID.
--hide-file=FILENAME Hides the specified FILENAME globally.
Must be a filename without any path.
--unhide-file=FILENAME Unhides the specified FILENAME.
--hide Hides the rootkit LKM.
--unhide Unhides the rootkit LKM.
--help Print this help message.
--protect Protects the rootkit from rmmod.
--unprotect Disables the rmmod protection.
루트킷 언로드:
./client --unhide
./client --unprotect
rmmod rootkit.ko
사실이 아닙니다. 전체 소스 코드가 포함된 Linux 루트킷 작성 방법에 대한 기사가 온라인에 많이 있으며, 수많은 GitHub 저장소는 말할 것도 없습니다.
이 루트킷을 작성하는 데 다음 자료가 사용되었습니다:
이 프로젝트는 GPLv2에 따라 라이선스가 부여됩니다.