
보안 연구 및 탐지 엔지니어링을 위한 맞춤형 Linux 지속성 도구

PANIX는 보안 연구원, 탐지 엔지니어, 침투 테스터, CTF 애호가 등을 위해 설계된 강력하고 모듈화된 고도로 사용자 지정 가능한 Linux 지속성 프레임워크입니다. 다용성을 염두에 두고 제작된 PANIX는 기능성을 강조하며, 다양한 지속성 기법을 이해하고 구현하는 데 필수적인 도구입니다.

PANIX는 Linux 지속성 메커니즘을 시뮬레이션하고 연구하기 위한 다양한 기능 모음을 제공합니다.
| 기능 | 설명 | Root | User |
|---|---|---|---|
| At Job 지속성 | 시스템 작업에 항목을 추가하여 지속성을 구현합니다. | ✅ | ✅ |
| 인증 키 | SSH 접근을 위해 authorized_keys 파일에 공개 키를 추가합니다. | ✅ | ✅ |
| 백도어 사용자 | UID=0(루트 권한)을 가진 백도어 사용자를 생성합니다. | ✅ | ❌ |
| 백도어 시스템 사용자 | 시스템 사용자에 백도어를 설치합니다(news/nobody로 SSH 접근). | ✅ | ❌ |
| 백도어 처리된 /etc/passwd | 악성 사용자 항목을 /etc/passwd에 직접 추가합니다. | ✅ | ❌ |
| 백도어 처리된 /etc/init.d | SysVinit(/etc/init.d)을 통해 지속성을 확립합니다. | ✅ | ❌ |
| 백도어 처리된 /etc/rc.local | 런 컨트롤(/etc/rc.local)을 통해 지속성을 확립합니다. | ✅ | ❌ |
| 바인드 셸 | 원격 접근을 위해 사전 컴파일된/LOLBin 바인드 셸을 실행합니다. | ✅ | ✅ |
| Capabilities 백도어 | 바이너리에 특정 capabilities를 추가하여 지속성을 유지합니다. | ✅ | ❌ |
| Cron 작업 지속성 | 재부팅 후에도 지속성을 보장하도록 cron 작업을 설정합니다. | ✅ | ✅ |
| 사용자 생성 | 시스템에 새 사용자 계정을 생성합니다. | ✅ | ❌ |
| D-Bus 백도어 | 루트 리버스 셸 접근을 위한 D-Bus 서비스를 생성합니다. | ✅ | ❌ |
| Diamorphine Rootkit | Diamorphine Loadable Kernel Module Rootkit을 설치합니다. | ✅ | ❌ |
| Initramfs 지속성 | 재부팅 시 initramfs에 UID=0 백도어 사용자를 주입합니다. | ✅ | ❌ |
| Git 지속성 | Git 저장소 내에서 지속성을 위해 Git 훅(hooks) 또는 페이저(pagers)를 활용합니다. | ✅ | ✅ |
| Generator 지속성 | systemd 생성기(generators)를 활용하여 지속적인 서비스를 생성합니다. | ✅ | ❌ |
| GRUB 백도어 | 부팅 시 백도어를 실행하도록 GRUB을 조작합니다. | ✅ | ❌ |
| 악성 컨테이너 | 호스트 탈출(host escape)을 위해 설계된 Docker 컨테이너를 배포합니다. | ✅ | ✅ |
| 악성 패키지 | 지속성을 위해 DPKG/RPM 패키지를 설치합니다. | ✅ | ❌ |
| NetworkManager | 네트워크 동작 시 지속성을 위해 디스패처(dispatcher) 스크립트를 설치합니다. | ✅ | ❌ |
| LD_PRELOAD 백도어 | 지속성을 위해 LD_PRELOAD를 사용하여 악성 라이브러리를 주입합니다. | ✅ | ❌ |
| LKM 백도어 | 지속성을 유지하기 위해 로더블 커널 모듈(LKM)을 로드합니다. | ✅ | ❌ |
| MOTD 백도어 | 오늘의 메시지(Message of the Day, MOTD)를 변경하여 지속성을 확립합니다. | ✅ | ❌ |
| 패키지 매니저 | 사용 시 지속성을 확립하기 위해 APT/YUM/DNF를 조작합니다. | ✅ | ❌ |
| PAM 지속성 | 악성 모듈 또는 pam_exec을 사용하여 PAM 백도어를 설치합니다. | ✅ | ❌ |
| 비밀번호 변경 | 백도어 계정을 보호하기 위해 사용자 비밀번호를 변경합니다. | ✅ | ❌ |
| Polkit 백도어 | 과도하게 허용적인 Polkit 구성 백도어를 생성합니다. | ✅ | ❌ |
| 리버스 셸 | 여러 LOLBin을 지원하는 리버스 셸을 구축합니다. | ✅ | ✅ |
| 셸 프로필 지속성 | 사용자 로그인 시 스크립트를 실행하도록 셸 프로필을 수정합니다. | ✅ | ✅ |
| SSH 키 지속성 | SSH를 통한 지속적인 접근을 유지하기 위해 SSH 키를 조작합니다. | ✅ | ✅ |
| Sudoers 백도어 | 승격된 권한을 부여하기 위해 /etc/sudoers 파일을 변경합니다. | ✅ | ❌ |
| SUID 백도어 | SUID 비트를 설정하여 바이너리에 백도어를 설치합니다. | ✅ | ❌ |
| 시스템 바이너리 백도어 | 백도어 기능을 포함하도록 시스템 바이너리를 래핑합니다. | ✅ | ❌ |
| Systemd 서비스 | 재부팅 시 지속성을 보장하는 systemd 서비스를 생성합니다. | ✅ | ✅ |
| Udev 지속성 | 하드웨어 상호 작용 수준에서 지속성을 위해 드라이버를 활용합니다. | ✅ | ❌ |
| 웹 셸 지속성 | 웹 인터페이스를 통한 원격 접근을 위해 웹 서버를 배포합니다. | ✅ | ✅ |
| XDG 자동 시작 | 사용자 로그인 시 지속성을 위해 XDG 자동 시작 디렉터리를 사용합니다. | ✅ | ✅ |

PANIX는 다양한 Linux 배포판에서 포괄적인 지원을 제공합니다.
| 배포판 | 지원 | 테스트된 버전 |
|---|---|---|
| Debian | ✅ | Debian 11 및 12 |
| Ubuntu | ✅ | Ubuntu 22.04 (Diamorphine 사용 불가) |
| RHEL | ✅ | RHEL 9 (MOTD 및 Pre-OS Boot 기법 사용 불가) |
| CentOS | ✅ | CentOS Stream 9 및 7 (MOTD 및 Pre-OS Boot 기법 사용 불가) |
| Fedora | ✅ | 완전히 테스트되지 않음 |
| Arch Linux | ✅ | 완전히 테스트되지 않음 |
| OpenSUSE | ✅ | 완전히 테스트되지 않음 |
사용자 지정 또는 오래된 Linux 배포판은 구성이 다르거나 특정 기능이 없어 테스트되지 않은 버전에서 메커니즘이 실패할 수 있습니다. 기본 명령이 실패하면 대부분의 기능에서 사용할 수 있는 --custom 플래그를 사용하여 환경에 맞게 경로와 명령을 조정하세요. 그래도 문제가 해결되지 않으면 스크립트를 검토하고 필요에 맞게 수정하십시오.
새 기능, 업데이트 또는 아이디어에 대한 풀 리퀘스트나 이슈를 통한 기여는 언제나 환영합니다!

PANIX 저장소는 모듈성, 유지보수성, 확장 용이성을 염두에 두고 설계되었습니다. 각 지속성 메커니즘에는 설정(setup) 및 복원(revert) 스크립트가 포함되어 있어 관리와 제거가 간편합니다.```plaintext PANIX/ ├── main.sh # Core logic and argument parsing. ├── modules/ # Persistence mechanism scripts. │ ├── common.sh # Shared functions. │ ├── setup_*.sh # Setup scripts. │ └── revert/ # Revert scripts. ├── build.sh # Builds the distributable script. ├── panix.sh # Final distributable script. └── README.md # Documentation.
## 주요 이점
- **설정 및 복구 페어링(Paired Setup & Revert)**: 모든 `setup_*.sh`에는 대응하는 `revert_*.sh`가 있어 지속성 메커니즘을 쉽게 제거할 수 있습니다.
- **모듈식 설계**: 핵심 스크립트에 영향을 주지 않고 기존 모듈을 수정하거나 새 모듈을 쉽게 추가할 수 있습니다.
- **간편한 확장**: 새 기능을 추가하려면:
1. `modules/`에 새 `setup_*.sh`를 생성합니다.
2. `modules/revert/`에 대응하는 `revert_*.sh`를 추가합니다.
3. `main.sh`를 업데이트하여 새 스크립트를 포함시킵니다.
4. `common.sh`를 업데이트하여 도움말 메뉴에 모듈을 포함시킵니다.
4. `build.sh`를 실행하여 업데이트된 `panix.sh`를 생성합니다.
