Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
TripleCross — 리눅스 eBPF rootkit으로, 백도어, C2, 라이브러리 인젝션, 실행 하이재킹, 지속성 및 은닉 기능을 갖추고 있습니다. | Kitploit
도구/GitHubGitHub/h3xduck/triplecross
Privilege EscalationPersistence MechanismsCommand and ControlLearning & Education
GitHubh3xduck/triplecross

TripleCross

리눅스 eBPF rootkit으로, 백도어, C2, 라이브러리 인젝션, 실행 하이재킹, 지속성 및 은닉 기능을 갖추고 있습니다.

저장소 보기
2.0k2433년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

TripleCross

License GitHub release (latest by date including pre-releases) Maintainability GitHub last commit

TripleCross는 eBPF 기술의 공격적 기능을 보여주는 Linux eBPF 루트킷입니다.

TripleCross는 이 분야의 이전 임플란트 설계, 특히 DEFCON 27에서 Jeff Dileo1, DEFCON 29에서 Pat Hogan2, DEFCON 29에서 Guillaume Fournier와 Sylvain Afchain3, 그리고 Kris Nóva의 Boopkit4의 연구에서 영감을 받았습니다. 우리는 eBPF 기술의 공격적 기능에 대한 이전 탐구에서 개척된 기술 중 일부를 재사용하고 확장합니다.

이 루트킷은 UC3M에서의 학사 학위 논문을 위해 제작되었습니다. 설계에 대한 자세한 내용은 논문 문서에서 확인할 수 있습니다.

면책 조항

이 루트킷은 순전히 교육 및 학술 목적으로만 제공됩니다. 소프트웨어는 "있는 그대로" 제공되며, 저자는 사용 중 발생할 수 있는 손해나 사고에 대해 책임을 지지 않습니다.

법을 위반하기 위해 TripleCross를 사용하지 마십시오. 제공된 소프트웨어 및 정보의 오용은 형사 고발로 이어질 수 있습니다.

목차

  1. 기능
  2. TripleCross 개요
  3. 빌드 및 설치
  4. 라이브러리 주입 모듈
  5. 백도어 및 C2
  6. 실행 하이재킹 모듈
  7. 루트킷 지속성
  8. 루트킷 은닉
  9. 라이선스

기능

  1. 프로세스의 가상 메모리에 기록하여 악성 코드를 실행하는 라이브러리 주입 모듈.
  2. 커널에 전달되는 데이터를 수정하여 악성 프로그램을 실행하는 실행 하이재킹 모듈.
  3. 악성 프로그램을 루트 권한으로 실행할 수 있게 하는 로컬 권한 상승 모듈.
  4. 네트워크를 모니터링하고 원격 루트킷 클라이언트에서 전송된 명령을 실행할 수 있는 C2 기능을 갖춘 백도어. 이러한 작업이 은밀하게 전송될 수 있도록 여러 활성화 트리거를 통합합니다.
  5. 공격자가 원격으로 루트킷 상태를 제어하는 명령과 작업을 보낼 수 있는 3가지 유형의 셸 연결을 설정할 수 있는 루트킷 클라이언트.
  6. 재부팅 후에도 전체 권한을 유지하며 루트킷이 설치된 상태를 보장하는 지속성 모듈.
  7. 루트킷 관련 파일과 디렉터리를 사용자로부터 숨기는 은닉 모듈.

TripleCross 개요

다음 그림은 TripleCross와 해당 모듈의 아키텍처를 보여줍니다.

루트킷 전송에 사용되는 원시 소켓 라이브러리 RawTCP_Lib는 저자가 작성하였으며 자체 저장소가 있습니다.

다음 표는 주요 소스 코드 파일과 디렉터리를 설명하여 탐색을 용이하게 합니다:

빌드 및 설치

요구 사항

이 연구 프로젝트는 다음 환경에서 테스트되었습니다:

배포판커널GCCCLANGGLIBC
버전Ubuntu 21.045.11.010.3.012.0.02.33

Ubuntu 21.04를 권장합니다. 기본적으로 여기에 표시된 소프트웨어 버전이 통합되어 있습니다. 그렇지 않은 경우 발생할 수 있는 몇 가지 문제는 여기에 설명되어 있습니다.

컴파일

루트킷 소스 코드는 두 개의 Makefile을 사용하여 컴파일됩니다.```

Build rootkit

cd src make all

Build rootkit client

cd client make

root@kitploit:~
다음 표는 각 Makefile의 목적을 상세히 설명합니다:

| MAKEFILE  | COMMAND | DESCRIPTION | RESULTING FILES |
| ------------- | ------------- | ------------- | ------------- |
| src/client/Makefile  | make  | 루트킷 클라이언트 컴파일 | src/client/injector |
| src/Makefile  | make help  | 루트킷 기능 테스트용 프로그램, 그리고 실행 하이재킹 및 라이브러리 인젝션 모듈의 악성 프로그램과 라이브러리 각각 컴파일 | src/helpers/simple_timer, src/helpers/simple_open, src/helpers/simple_execve, src/helpers/lib_injection.so, src/helpers/execve_hijack |
| src/Makefile | make kit | libbpf 라이브러리를 사용한 루트킷 컴파일 | src/bin/kit |
| src/Makefile | make tckit | 루트킷 TC egress 프로그램 컴파일 | src/bin/tc.o |

### 설치
루트킷 파일이 src/bin/ 아래에 생성된 후에는 *tc.o*와 *kit* 프로그램을 순서대로 로드해야 합니다. 다음 예제에서는 루트킷 백도어가 네트워크 인터페이스 *enp0s3*에서 작동합니다:```
// TC egress program
sudo tc qdisc add dev enp0s3 clsact
sudo tc filter add dev enp0s3 egress bpf direct-action obj bin/tc.o sec classifier/egress
// Libbpf-powered rootkit
sudo ./bin/kit -t enp0s3

공격 시나리오 스크립트

공격자가 실제 공격 시나리오에서 할 것처럼 루트킷을 자동으로 컴파일하고 설치하는 두 개의 스크립트, packager.sh와 deployer.sh가 있습니다.

  • packager.sh를 실행하면 apps/ 디렉토리 아래에 모든 루트킷 파일이 생성됩니다.

  • deployer.sh를 실행하면 루트킷을 설치하고 지속성 파일을 생성합니다.

이 스크립트들은 지속성 모듈의 적절한 작동을 위해 먼저 다음 매개변수로 구성되어야 합니다:

SCRIPTCONSTANTDESCRIPTION
src/helpers/deployer.shCRON_PERSIST재부팅 후 실행할 Cron 작업
src/helpers/deployer.shSUDO_PERSIST비밀번호 없이 권한을 부여하는 Sudo 항목

라이브러리 주입 모듈

루트킷은 sys_timerfd_settime 또는 sys_openat 시스템 호출을 호출하는 프로세스의 실행을 가로챌 수 있습니다. 이는 호출을 하는 프로세스의 가상 메모리에서 GOT(Global Offset Table) 섹션을 덮어씀으로써 달성됩니다. 이로 인해 악성 라이브러리(src/helpers/injection_lib.c)가 실행됩니다. 라이브러리는 공격자 머신에 리버스 셸을 생성한 후, 프로세스를 중단시키지 않고 실행 흐름을 원래 함수로 되돌립니다.

TripleCross는 다음과 같은 일반적인 ELF 보안 강화 기법을 우회할 준비가 되어 있습니다:

  • ASLR
  • Stack canaries
  • DEP/NX
  • PIE
  • Full RELRO

또한 인텔 CET 호환 코드와 함께 작동하도록 준비되어 있습니다.

모듈 기능은 두 개의 테스트 프로그램 src/helpers/simple_timer.c와 src/helpers/simple_open.c를 사용하여 확인할 수 있습니다. 또는 시스템 프로세스를 가로챌 수도 있습니다(systemd로 테스트 완료 및 작동 확인).

모듈 구성은 다음 상수를 통해 설정됩니다:

FILENAMECONSTANTDESCRIPTION

공격자 머신에서 리버스 셸을 수신하는 것은 netcat으로 할 수 있습니다:``` nc -nlvp <ATTACKER_PORT>

root@kitploit:~
### GOT 하이재킹 기술을 통한 라이브러리 인젝션
TripleCross에 통합된 이 기술은 5단계로 구성됩니다:

#### GOT 및 리턴 주소 위치 찾기
루트킷은 트레이스포인트 프로그램을 사용하여 시스템 콜을 후킹합니다. 거기에서 PLT 스텁이 시스템 콜을 담당하는 glibc 함수를 호출하는 데 사용한 GOT 섹션의 주소를 찾습니다.

GOT 섹션에 도달하기 위해 eBPF 프로그램은 스택에 저장된 리턴 주소를 사용합니다. 참고:
* .text는 .plt를 *call* 하므로, *rip*가 스택에 *ret*로 저장됩니다.
* .plt는 .got를 사용하여 glibc로 *jump* 하므로 다른 *rip*는 저장되지 않습니다. 또한 *rbp* 값을 수정하거나 저장하지 않습니다.
* glibc는 *syscall*을 수행하며, 이는 *rip*를 스택에 저장하지 않고 *rcx*에 저장합니다.

<img src="https://assets.kitploit.com/production/public/readmes/5614/d216fa5b7b656bb52587027db28f3e3902fa8389d0b2944a1f7e870d6d2e6bee.jpg" float="left">

따라서 eBPF에서 스택의 주소가 올바른 GOT으로 이끄는 리턴 주소인지 확인하려면, 그것이 eBPF에서 후킹한 시스템 콜을 수행하는 glibc 함수로 점프하는 GOT 주소를 사용하는 PLT 스텁의 리턴 주소인지 확인해야 합니다.

리턴 주소를 찾기 위한 두 가지 기술이 통합되었습니다:
* sys_timerfd_settime을 사용하는 경우, eBPF 프로그램은 시스템 콜 인자를 사용하여 스캔을 앞으로 진행합니다.
* sys_openat을 사용하는 경우, eBPF 프로그램은 트레이스포인트의 *pt_regs* 구조체의 데이터를 사용하여 리턴 주소를 스캔합니다.

<img src="https://assets.kitploit.com/production/public/readmes/5614/61217fb3fd84bec65cbbee906dd27860e5e1c211912cfe450ea4cf9051fa480b.png" float="left">


#### 셸코드의 주요 함수 위치 찾기
셸코드는 프로그램 실행 시마다 dlopen()과 같은 함수의 주소를 변경하는 ASLR 및 PIE를 우회하기 위해 동적으로 생성되어야 합니다.

<img src="https://assets.kitploit.com/production/public/readmes/5614/6cbb620495d8cb9711e499fd5b1ae9ea845c03d0c33019cf008b456a95d5ddd6.png" float="left">


#### 코드 케이브에 셸코드 인젝션
ASLR 및 PIE가 꺼져 있으면 역공학을 통해 ELF에서 코드 케이브를 찾을 수 있지만, 일반적으로 그렇지 않습니다. eBPF 프로그램은 /proc 파일 시스템을 사용하여 .text (실행 가능) 섹션의 코드 케이브를 찾고 쓰기 위해 사용자 공간 루트킷 프로그램에 요청을 보냅니다.

<img src="https://assets.kitploit.com/production/public/readmes/5614/c7daea0eed684437b5c7d971d0f69f5aac9138861d44da36c5368be9f97666d1.png" float="left">

#### GOT 섹션 덮어쓰기
실행 파일에서 Partial 또는 Full RELRO가 활성화되어 있는지 여부에 따라 eBPF 프로그램은 GOT 섹션을 직접 또는 /proc 파일 시스템을 사용하여 덮어씁니다.

<img src="https://assets.kitploit.com/production/public/readmes/5614/7e69ec2982ee8c77c39b42f364ab25e52c40d96890f7413b3afe04dde1b825c3.png" float="left">

#### 다음 시스템 콜 대기
하이재킹된 프로그램에서 다음 시스템 콜이 발생하면 PLT 섹션이 수정된 GOT 섹션을 사용하여 실행 흐름을 하이재킹하고 코드 케이브의 셸코드로 리디렉션합니다. 셸코드는 프로그램이 충돌하지 않도록 준비되어 있으며, 악성 라이브러리(*src/helpers/lib_injection.so*)를 호출합니다. 이 라이브러리는 fork()를 실행하고 공격자 머신과의 리버스 셸을 생성합니다. 이후 실행 흐름이 복원됩니다.

<img src="https://assets.kitploit.com/production/public/readmes/5614/4e780cbcba855fe11a55f6a34709d83d855a4235960b15b69470233147f04318.png" float="left">



## Backdoor and C2
백도어는 별도의 구성 없이 즉시 작동합니다. 백도어는 루트킷 클라이언트 프로그램을 사용하여 원격으로 제어할 수 있습니다:

| 클라이언트 인자 | 동작 설명 |
| ------------- | ------------- |
| ./injector -c \<Victim IP\> | 실행 하이재킹 모듈을 사용하여 평문 의사 셸을 생성합니다 |
| ./injector -e \<Victim IP\> | 패턴 기반 트리거로 백도어에 명령하여 암호화된 의사 셸을 생성합니다 |
./injector -s \<Victim IP\> | 멀티 패킷 트리거(두 유형 모두)로 백도어에 명령하여 암호화된 의사 셸을 생성합니다 |
./injector -p \<Victim IP\> | 패턴 기반 트리거로 백도어에 명령하여 팬텀 셸을 생성합니다 |
./injector -a \<Victim IP\> | 루트킷에 모든 eBPF 프로그램을 활성화하도록 명령합니다 |
./injector -u \<Victim IP\> | 루트킷에 모든 eBPF 프로그램을 분리하도록 명령합니다 |
./injector -S \<Victim IP\> | 백도어가 커널로부터 메시지를 숨길 수 있는 방법을 보여줍니다 (간단한 PoC) |
| ./injector -h | 도움말을 표시합니다 |

### Backdoor triggers

백도어 트리거를 사용하여 동작이 백도어로 전송되며, 이는 속성 **K3**의 값에 따라 실행할 동작을 백도어에 알립니다:

| K3 값 | 동작 |
| ------------- | ------------- |
| 0x1F29 | 암호화된 의사 셸 연결 시작 요청 |
| 0x4E14 | 팬텀 셸 연결 시작 요청 |
| 0x1D25 | 모든 루트킷 eBPF 프로그램 로드 및 연결 요청 |
| 0x1D24 | 모든 루트킷 eBPF 프로그램 분리 요청 (백도어 제외) |


#### Pattern-based trigger
이 트리거는 백도어가 인식할 수 있도록 명령과 클라이언트 정보를 숨기지만, 동시에 외부 네트워크 감독자에게는 충분히 무작위처럼 보이게 합니다. 이는 최근 발견된 NSA 루트킷 [Bvp47](https://www.pangulab.cn/files/The_Bvp47_a_top-tier_backdoor_of_us_nsa_equation_group.en.pdf)이 사용한 트리거를 기반으로 합니다.

<img src="https://assets.kitploit.com/production/public/readmes/5614/58cec7ee2dbd89b6c7d71d60c006a1a98d7b9165b20bdbe006467a82d5dc30ab.png" float="left">

#### Multi-packet trigger
이 트리거는 여러 TCP 패킷으로 구성되며, 백도어 페이로드가 패킷 헤더에 숨겨집니다. 이 설계는 볼트 7 유출에서 설명된 CIA [Hive](https://wikileaks.org/vault7/document/hive-DevelopersGuide/hive-DevelopersGuide.pdf) 임플란트를 기반으로 합니다. 다음 페이로드가 사용됩니다:

<img src="https://assets.kitploit.com/production/public/readmes/5614/45a8348c3d366af4941d9cca845c281fc8c5a565353fc8fe3fb91350f39dd5f8.png" float="left">

그런 다음 위 페이로드에 대해 롤링 XOR이 계산되고 루트킷 클라이언트가 선택한 모드에 따라 여러 부분으로 나뉩니다. TripleCross는 TCP 시퀀스 번호에 숨겨진 페이로드를 지원합니다:

<img src="https://assets.kitploit.com/production/public/readmes/5614/2b9d7fd46f7133e3eeda694e0b4791fbed2a51616b7d2f14e989a9e0e56af9e2.png" float="left">

그리고 TCP 소스 포트에 숨겨진 페이로드도 지원합니다:

<img src="https://assets.kitploit.com/production/public/readmes/5614/1a6ea6da628a9902eaf55cc3c1549a2ecf26cba211275acdce6bc5491b34140c.png" float="left">

### Backdoor pseudo-shells
클라이언트는 루트킷 의사 셸을 설정할 수 있습니다. 이는 셸 프로그램을 시뮬레이션하는 특수한 루트킷 간 클라이언트 연결로, 공격자가 원격으로 Linux 명령을 실행하고 감염된 머신에서 직접 실행한 것처럼 결과를 얻을 수 있게 합니다. 우리 루트킷에는 여러 의사 셸이 통합되어 있습니다:

#### Plaintext pseudo-shell
이 셸은 실행 하이재킹 모듈이 성공적으로 실행된 후 생성되며, 루트킷 클라이언트와 다음과 같이 연결을 설정하는 악성 파일을 실행합니다:

<img src="https://assets.kitploit.com/production/public/readmes/5614/6495b5b62c33ae136b8c965658d9c5f501e609029bde7fcefe7266966f8effbb.png" float="left">
<img src="https://assets.kitploit.com/production/public/readmes/5614/5301e208d9853760eabdc14772c57a3639f28d71d050ee82d151bff93a76cedf.png" float="right">

#### Encrypted pseudo-shell
암호화된 의사 셸은 루트킷 클라이언트가 언제든지 요청할 수 있으며, 루트킷과 루트킷 클라이언트 간의 TLS 연결로 구성됩니다. 암호화된 연결 내부에서는 평문 의사 셸과 유사하게 명령 및 정보를 전달하기 위한 전송 프로토콜이 따릅니다.

암호화된 의사 셸을 생성하려면 백도어가 트리거를 수신해야 하며, 패턴 기반 트리거 또는 두 유형의 멀티 패킷 트리거를 모두 수용합니다:

<img src="https://assets.kitploit.com/production/public/readmes/5614/d4929247af8895f78522f28c4ac8087e74d76b91320c67e0b37ea841cd8869d0.png" float="left">
<img src="https://assets.kitploit.com/production/public/readmes/5614/6e2a72d04028212a4917397b75b052a4bdf3c0529fb6c5e336b7fc0a06571728.png" float="right">

#### Phantom shell
팬텀 셸은 XDP와 TC 프로그램의 조합을 사용하여 네트워크에서 eBPF의 한계(특히 새 패킷을 생성할 수 없음)를 극복합니다. 이를 위해 백도어는 기존 트래픽을 수정하여 C2 전송 데이터로 페이로드를 덮어씁니다. 원래 패킷은 손실되지 않는데, TCP 재전송이 잠시 후 원래 패킷(수정되지 않은)을 다시 보내기 때문입니다.

다음 프로토콜은 팬텀 셸을 사용한 명령 실행 중 트래픽을 보여줍니다:
<img src="https://assets.kitploit.com/production/public/readmes/5614/0aafe6b672757e4e9d37402c72ce14893a8a7f198030b2f2386df631c345d16b.png" float="left">

팬텀 셸은 백도어가 실행할 명령을 발행하는 루트킷 클라이언트에 의해 요청됩니다:

<img src="https://assets.kitploit.com/production/public/readmes/5614/e07dec48ff6a22e708b6d4b0d762473cc6483f065011cd6cdccdac49f12f916b.png" float="left">

감염된 머신이 TCP 패킷을 보내면 백도어가 이를 덮어쓰고 클라이언트가 응답을 표시합니다:

<img src="https://assets.kitploit.com/production/public/readmes/5614/19bea585b78a0bb1d52aa7c63ff05a0111551a0cc767732775491641e1dec021.png" float="left">


## Execution hijacking module
원칙적으로 eBPF 프로그램은 자체적으로 프로그램 실행을 시작할 수 없습니다. 이 모듈은 악성 루트킷이 사용자 공간에서 악성 코드를 실행하기 위해 정상 프로그램을 어떻게 활용할 수 있는지 보여줍니다. 이 모듈은 두 가지 목표를 달성합니다:
* 다른 프로그램의 실행을 이용하여 악성 사용자 프로그램을 실행합니다.
* 사용자 공간에 투명하게 작동합니다. 즉, 다른 프로그램이 실행되도록 프로그램의 실행을 하이재킹하면 원래 프로그램도 최소한의 지연으로 실행되어야 합니다.

이 모듈은 sys_execve() 시스템 콜을 하이재킹하여 인수를 수정함으로써 악성 프로그램(*src/helpers/execve_hijack.c*)이 대신 실행되도록 합니다. 이 수정은 악성 프로그램이 원래 인수로 원래 프로그램을 실행하여 사용자 공간에서 의심을 피할 수 있는 방식으로 이루어집니다. 다음 다이어그램은 전체 기능을 요약합니다:

<img src="https://assets.kitploit.com/production/public/readmes/5614/601610696506e303f91a7957ec2a3d61f73f7d0e036430a9f67bd80a6f19b2d3.png" float="left">

원래 sys_execve() 호출의 인수는 원래 인수가 손실되지 않도록(argv[0] 사용) 수정되어 악성 프로그램 이후 원래 프로그램이 실행될 수 있습니다:

<img src="https://assets.kitploit.com/production/public/readmes/5614/e483317a3bdac422cdfc49ca92acdcefe624ddceb5b2ed036ccec141c8d1e5e6.png" float="left">

실행 하이재킹 모듈을 테스트하기 위해 샘플 테스트 프로그램(*src/helpers/simple_execve.c*)을 통합했습니다. 이 모듈은 구성에 따라 시스템의 모든 호출을 하이재킹할 수도 있습니다:

| 파일 이름 | 상수 | 설명 |
| ------------- | ------------- | ------------- |
| src/common/constants.h | PATH_EXECUTION_HIJACK_PROGRAM | sys_execve 호출 성공 시 실행될 악성 프로그램의 위치 |
| src/common/constants.h | EXEC_HIJACK_ACTIVE | 실행 하이재킹 모듈 비활성화(0) 또는 활성화(1) |
| src/common/constants.h | TASK_COMM_RESTRICT_HIJACK_ACTIVE | 모든 sys_execve 호출 하이재킹(0) 또는 TASK_COMM_NAME_RESTRICT_HIJACK에 표시된 호출만 하이재킹(1) |
| src/common/constants.h | TASK_COMM_NAME_RESTRICT_HIJACK | sys_execve 호출을 하이재킹할 프로그램의 이름 |

성공적인 하이재킹 후, 모듈은 스스로 중지됩니다. 악성 프로그램 *execve_hijack*은 루트킷 클라이언트로부터 평문 의사 셸 요청을 수신 대기합니다.

## Rootkit persistence
감염된 머신이 재부팅되면 모든 eBPF 프로그램이 커널에서 언로드되고 사용자 공간 루트킷 프로그램이 종료됩니다. 게다가 루트킷이 자동으로 다시 실행될 수 있더라도 eBPF 프로그램을 다시 연결하는 데 필요한 루트 권한을 더 이상 갖지 못합니다. 루트킷 지속성 모듈은 이 두 가지 문제를 해결하는 것을 목표로 합니다:
* 머신 재부팅 후 사용자 개입 없이 자동으로 루트킷을 실행합니다.
* 루트킷이 머신에서 처음 실행될 때 루트 권한을 획득하면 재부팅 후에도 해당 권한을 유지해야 합니다.

TripleCross는 이 기능을 구현하기 위해 *cron.d* 및 *sudoers.d* 아래에 생성된 두 개의 비밀 파일을 사용합니다. 이 항목들은 재부팅 후 루트킷이 자동으로 그리고 전체 권한으로 로드되도록 보장합니다. 이 파일들은 *deployer&#46;sh* 스크립트에 의해 생성 및 관리됩니다:

<img src="https://assets.kitploit.com/production/public/readmes/5614/88500b779b9ad5ba771803900a8abfffd08f3a6be59518e690534779a4134cf8.png" float="left">
<img src="https://assets.kitploit.com/production/public/readmes/5614/5ae61ed98af6d7c8aa9448fed3de553712ffb5c63e95d98a6f4300ff407bce23.png" float="right">

스크립트에는 대상 시스템에서 감염시킬 사용자에 대해 구성해야 하는 두 개의 상수가 포함되어 있습니다:

| 스크립트 | 상수 | 설명 |
| ------------- | ------------- | ------------- |
| src/helpers/deployer.sh | CRON_PERSIST | 재부팅 후 실행할 크론 작업 |
| src/helpers/deployer.sh | SUDO_PERSIST | 비밀번호 없이 권한을 부여하는 sudo 항목 |

## Rootkit stealth
지속성 모듈은 추가 파일을 생성하는 것을 기반으로 하지만, 이러한 파일은 결국 시스템 소유자나 일부 소프트웨어 도구에 의해 발견될 수 있으므로 시스템에 남겨두는 위험이 있습니다. 또한 루트킷 파일은 어딘가에 저장되어야 하며, 그곳에서 발견될 수 있습니다.

위 사항을 고려하여 은닉 모듈은 다음 기능을 제공합니다:
* 사용자로부터 디렉토리를 완전히 숨깁니다(루트킷 파일을 모두 내부에 숨길 수 있도록).
* 디렉토리의 특정 파일을 숨깁니다(지속성 파일을 숨겨야 하지만 *sudoers.d* 또는 *cron.d* 디렉토리는 정상 시스템 기능에 속하므로 완전히 숨길 수 없습니다).

루트킷이 숨기는 파일 및 디렉토리는 다음 구성 상수로 사용자 정의할 수 있습니다:

| 파일 이름 | 상수 | 설명 |
| ------------- | ------------- | ------------- |
| src/common/constants.h | SECRET_DIRECTORY_NAME_HIDE | 숨길 디렉토리 이름 |
| src/common/constants.h | SECRET_FILE_PERSISTENCE_NAME | 숨길 파일 이름 |

기본적으로 TripleCross는 "*ebpfbackdoor*"라는 파일과 "*SECRETDIR*"라는 디렉토리를 숨깁니다. 이 모듈은 루트킷 설치 후 자동으로 활성화됩니다.

이 기능을 달성하는 데 사용된 기술은 sys_getdents() 시스템 콜의 인수를 조작하는 것으로 구성됩니다:

<img src="https://assets.kitploit.com/production/public/readmes/5614/7f928351c1c07e7b6a534846c5374788449e03455191cddf8c7f02af2c885852.png" float="left">



## License
TripleCross 루트킷과 루트킷 클라이언트는 GPLv3 라이선스에 따라 라이선스가 부여됩니다. [LICENSE](https://github.com/h3xduck/TripleCross/blob/master/LICENSE)를 참조하세요.

[RawTCP_Lib](https://github.com/h3xduck/RawTCP_Lib) 라이브러리는 MIT 라이선스에 따라 라이선스가 부여됩니다.

원본 논문 문서와 포함된 그림은 [Creative Commons BY-NC-ND 4.0](https://creativecommons.org/licenses/by-nc-nd/4.0/)에 따라 공개됩니다.

Footnotes

  1. J. Dileo. Evil eBPF: Practical Abuses of an In-Kernel Bytecode Runtime. DEFCON 27. 슬라이드 ↩

  2. P. Hogan. Warping Reality: Creating and Countering the Next Generation of Linux Rootkits using eBPF. DEFCON 27. 발표 ↩

  3. G. Fournier and S. Afchain. eBPF, I thought we were friends! DEFCON 29. 슬라이드 ↩

  4. Kris Nóva. Boopkit. 깃허브 ↩

도구 다운로드
디렉터리설명
docs원본 논문 문서
src/client루트킷 클라이언트의 소스 코드
src/client/libRawTCP_Lib 공유 라이브러리
src/common루트킷의 상수 및 구성. 또한 루트킷의 eBPF 및 사용자 공간 측면에 공통 요소(예: 링 버퍼)의 구현을 포함합니다
src/ebpf루트킷에서 사용하는 eBPF 프로그램의 소스 코드
src/helpers여러 루트킷 모듈의 기능을 테스트하기 위한 프로그램과 실행 하이재킹 및 라이브러리 주입 모듈에서 각각 사용되는 악성 프로그램 및 라이브러리를 포함합니다
src/libbpf루트킷에 통합된 libbpf 라이브러리를 포함합니다
src/user루트킷에서 사용하는 사용자 공간 프로그램의 소스 코드
src/vmlinux커널 데이터 구조 정의를 포함하는 헤더(libbpf 사용 시 권장되는 방법)
src/common/constants.hTASK_COMM_NAME_INJECTION_
TARGET_TIMERFD_SETTIME
sys_timerfd_settime 시스템 호출에서 가로챌 프로세스 이름
src/common/constants.hTASK_COMM_NAME_INJECTION_
TARGET_OPEN
sys_openat 시스템 호출에서 가로챌 프로세스 이름
src/helpers/injection_lib.cATTACKER_IP & ATTACKER_PORT공격자 머신의 IP 주소와 포트