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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CPLHF — Debian/Ubuntu 시스템을 CyberPatriot 대회에 맞게 강화하는 모듈식 Bash 툴킷으로, 계정, 방화벽, SSH, PAM 및 서비스 강화를 로깅 및 백업과 함께 자동화합니다. | Kitploit
도구/GitHubGitHub/whereisxuezugi/cplhf
Defensive ToolsVulnerability AnalysisScripting & AutomationConfiguration AuditingForensicsCTFPenetration TestingLearning & EducationIncident Response
GitHubwhereisxuezugi/cplhf

CPLHF

Debian/Ubuntu 시스템을 CyberPatriot 대회에 맞게 강화하는 모듈식 Bash 툴킷으로, 계정, 방화벽, SSH, PAM 및 서비스 강화를 로깅 및 백업과 함께 자동화합니다.

33일 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기

CyberPatriot Linux 하드닝 툴킷

대회 시간 압박 속에서 Debian/Ubuntu 계열 시스템을 하드닝하기 위한 모듈식 Bash 툴킷입니다. CyberPatriot National Youth Cyber Defense Competition의 여러 시즌에 걸쳐 구축 및 개선되었으며, 가장 최근에는 2025 준결승 라운드에서 Linux 부문 Platinum 티어에 입상했습니다.

이것은 범용 컴플라이언스 프레임워크가 아닙니다. 6시간의 시간 제한 실습을 위한 체크리스트 자동화 도구입니다. Linux 하드닝 패스의 스크립트로 처리 가능한 대부분을 정확하고, 빠르고, 멱등적으로 수행하고, 손댄 모든 것을 기록하며, 판단이 필요한 부분은 실행하는 사람에게 남겨둡니다.

목차

  • 존재 이유
  • 아키텍처
  • 빠른 시작
  • 실제로 하는 일
  • 대회 안전성 참고사항
  • 설정
  • 저장소 구조
  • 테스트
  • 보안 제어 및 참고 자료
  • 이 프로젝트가 의도적으로 하지 않는 것
  • 라이선스

존재 이유

CyberPatriot의 Linux 라운드는 상당히 예측 가능한 하드닝 단계 집합 -- 계정 위생, 비밀번호 정책, 방화벽 구성, 서비스 노출, 파일 권한, 패치 수준 -- 을 보상하는 루브릭에 대해 라이브 이미지를 채점하며, 이는 엄격한 시간 제한 아래에서, 보통 어떤 취약점이 심어졌는지 정확히 사전 통지 없이 이루어집니다. 그 체크리스트를 카운트다운 속에서 손으로 정확히 수행하는 것이 바로 팀이 알지 못하는 내용이 아니라 오타와 잊어버린 단계 때문에 쉬운 점수를 잃는 지점입니다.

이 툴킷은 바로 그런 압박 속에서 작성된 단일 모놀리식 스크립트로 시작했습니다. 이 저장소는 그 스크립트를 재작성한 것입니다. 동일한 체크리스트 커버리지를 유지하면서, 읽고, 테스트하고, 독립적으로 추론하기 더 쉬운 작은 단일 목적 모듈로 재구성했으며, 모든 비자명한 결정은 특정 CIS Benchmark 섹션이나 NIST SP 800-53 제어 항목에 연결되어 있습니다(보안 제어 및 참고 자료 참조).

아키텍처

root@kitploit:~
flowchart TD
    A[bin/harden.sh] --> B[lib/common.sh<br/>logging, backups, run wrapper]
    A --> C[Service-role prompts<br/>or --config file]
    A --> D[lib/packages.sh<br/>updates, attack-tool removal]
    A --> E[lib/firewall.sh<br/>default-deny + ufw]
    A --> F[lib/ssh.sh]
    A --> G[lib/services.sh<br/>samba/ftp/mail/http/mysql/dns]
    A --> H[lib/users.sh<br/>account review, hidden UID 0]
    A --> I[lib/kernel.sh<br/>sysctl hardening]
    A --> J[lib/pam.sh<br/>password policy, lockout]
    A --> K[lib/filesystem.sh<br/>permissions, cron, banners]
    A --> L[lib/monitoring.sh<br/>fail2ban, auditd, rkhunter]
    A --> M[lib/forensics.sh<br/>baseline snapshot]
    D & E & F & G & H & I & J & K & L & M --> N[(~/hardening-run/<br/>log + backups + baseline)]

모든 모듈은 bin/harden.sh에 의해 소싱되며, 이 스크립트가 인자 파싱, 서비스 역할 설문, 실행 순서를 담당합니다. 모듈들은 서로를 직접 호출하지 않으며, 모든 모듈의 모든 상태 변경 명령은 lib/common.sh의 run() 래퍼를 거치므로, 프로젝트 전체가 드라이런 지원, 일관된 로깅, 치명적이지 않은 오류 처리를 구현할 단일 지점을 갖게 됩니다.

빠른 시작

root@kitploit:~
git clone <this-repo>
cd cyberpatriot-linux-hardening
sudo ./bin/harden.sh

머신의 역할(예: Samba, FTP, SSH, 웹 서버 등이 필요한지)에 대한 짧은 예/아니오 질문 시리즈가 표시된 다음, 위에 나열된 모듈을 통해 무인으로 실행됩니다. 로그, 타임스탬프가 찍힌 전체 설정 백업 세트, 시스템 베이스라인 스냅샷이 ~/hardening-run/에 기록됩니다.

실제 라운드에서는, 패키지별 확인 프롬프트를 건너뛰고 역할 질문에 실시간으로 입력하는 대신 준비된 답변 파일에서 답하십시오:

root@kitploit:~
cp examples/config.env.example my-machine.env
# edit my-machine.env for this box's actual role
sudo ./bin/harden.sh --config my-machine.env --auto-approve

무엇이든 건드리기 전에 정확히 무엇을 할지 보고 싶으신가요?

root@kitploit:~
sudo ./bin/harden.sh --dry-run --config my-machine.env

실제로 하는 일

tools/find-port-owner.sh와 tools/list-nonstandard-users.sh는 같은 종류의 트리아지 작업을 위한 작은 독립 실행형 유틸리티로, 메인 스크립트와 독립적으로 사용할 수 있습니다 -- 사용법은 각 헤더를 참조하십시오.

대회 안전성 참고사항

보호해야 할 머신을 망가뜨리는 하드닝 스크립트는 시간 제한 라운드에서 쓸모없는 것보다 worse입니다. 몇 가지 기본값이 이를 반영하며, 무인으로 실행하기 전에 이해할 가치가 있습니다:

  • SSH 비밀번호 인증은 기본적으로 켜져 있습니다. 더 엄격한 키 전용 CIS 권장사항은 설정 값 하나 떨어져 있지만(SSH_PASSWORD_AUTH=no), 여기서의 기본값은 아직 아무도 키를 프로비저닝하지 않았을 때 팀이 자기 머신에서 잠기는 것을 피하는 쪽을 선호합니다.
  • 이중 용도 도구는 자동 제거되지 않고 검토됩니다. nmap, Wireshark, tcpdump, netcat 변형은 흔한 공격자 도구이지만, 흔한 관리자 도구이기도 하며, 일부 대회 이미지는 머신의 명시된 역할을 위해 그중 하나를 특별히 요구합니다. 이들은 확인 후 제거되며, 조용히 제거되지 않습니다.
  • ClamAV와 rkhunter/chkrootkit 스윕은 옵트인입니다(INSTALL_CLAMAV, RUN_BASELINE_SCAN). 이는 이 스크립트가 할 수 있는 가장 느린 두 가지 작업이며, 둘 다 스스로 시스템 상태를 변경하지 않기 때문입니다. 체크리스트가 요구하거나 시간 여유가 있으면 켜십시오.
  • 여기 있는 어떤 것도 채점 엔진의 연결성을 검증하지 않습니다. 방화벽 모듈은 기본적으로 아웃바운드 전체 허용이며, 역할에 필요하지 않은 서비스의 인바운드 포트만 닫습니다. 그러나 특정 이미지가 비표준 포트를 통해 채점 서버나 로컬 에이전트에 보고한다면, 그것은 직접 확인해야 할 몫입니다 -- 처음으로 박스를 하드닝하기 전에 실제로 무엇이 리스닝 중인지 확실하지 않다면 이전 실행의 ~/hardening-run/baseline/listening_ports.txt를 참조하십시오.
  • GRUB 비밀번호는 자동화되지 않습니다, 같은 이유로: 잘못된 GRUB 비밀번호는 하드닝 패스를 라운드 중간에 빠른 복구 경로가 없는 부팅 불가 머신으로 바꿀 수 있습니다. 수동 절차는 docs/security-controls.md를 참조하십시오.
  • 모든 모듈은 멱등입니다. 이미 하드닝된 머신에 대해 스크립트를 다시 실행해도(예: 부분 실행이 중단된 후) 설정 블록이 중복되거나 오류가 발생하지 않습니다.

설정

bin/harden.sh는 미리 답하지 않으면 머신의 서비스 역할에 대해 대화형으로 질문합니다. 프롬프트를 건너뛰려면 examples/config.env.example을 복사하고, 실제 역할을 채우고, --config로 전달하십시오. 파일에서 빠뜨린 변수는 대화형 프롬프트로 대체되므로, 부분적으로 채워진 설정 파일도 괜찮습니다.

root@kitploit:~
sudo ./bin/harden.sh --config my-machine.env

플래그:

플래그효과
--config FILEenv 파일에서 역할/정책 답변 로드
--dry-run취해질 모든 작업을 기록; 아무것도 변경하지 않음
--auto-approve패키지별 제거 확인 프롬프트 건너뛰기

저장소 구조

root@kitploit:~
.
├── bin/harden.sh                    orchestrator: parses args, asks role questions, runs modules in order
├── lib/
│   ├── common.sh                    logging, backups, idempotent file edits, the run() wrapper
│   ├── packages.sh                  updates, attack-tool removal
│   ├── ssh.sh                       SSH install/removal and hardening
│   ├── services.sh                  samba/ftp/telnet/mail/printing/mysql/http/dns
│   ├── firewall.sh                  ufw default-deny posture
│   ├── users.sh                     account review, hidden UID 0 / empty password detection
│   ├── kernel.sh                    sysctl hardening
│   ├── pam.sh                       password policy, account lockout
│   ├── filesystem.sh                permissions, cron, rc.local, banners, anomaly scan
│   ├── monitoring.sh                fail2ban, auditd, rkhunter, chkrootkit, ClamAV
│   └── forensics.sh                 read-only system baseline snapshot
├── tools/
│   ├── find-port-owner.sh           resolve a listening TCP port to a process path
│   └── list-nonstandard-users.sh    flag UID >= 1000 accounts not on an expected list
├── docs/
│   ├── security-controls.md         every hardening decision, mapped to its source standard
│   └── editor-cheatsheet.md         small editor commands worth remembering under pressure
├── examples/config.env.example      annotated template for non-interactive runs
└── .github/workflows/shellcheck.yml lint on every push/PR

테스트

모든 스크립트는 GitHub Actions(.github/workflows/shellcheck.yml)를 통해 푸시 시 ShellCheck로 린트됩니다. PR을 열기 전에 로컬에서 확인하려면:

root@kitploit:~
shellcheck lib/*.sh bin/*.sh tools/*.sh

bin/harden.sh --dry-run은 그 자체로도 테스트입니다: 파일시스템을 건드리거나 아무것도 설치하지 않고 모든 모듈의 제어 흐름과 로깅을 실행하며, 실제로 실행하기 전에 일회용 VM에 대해 변경 사항을 점검하는 가장 빠른 방법입니다. 새 모듈에 대한 전체 기대사항(멱등성, 파괴적 작업을 run()을 통해 라우팅, 모든 새 하드닝 단계에 대한 출처 인용)은 CONTRIBUTING.md를 참조하십시오.

보안 제어 및 참고 자료

모든 모듈의 헤더 주석과 docs/security-controls.md는 각 결정 뒤에 있는 특정 표준 섹션을 인용합니다. 전체에서 사용된 주요 출처:

참조된 탐지 도구(벤더링되지 않고 apt를 통해 설치됨): fail2ban, Linux Audit / auditd, rkhunter, chkrootkit. Lynis와 OpenSCAP은 후속 독립 감사로 권장되며, 이 프로젝트에 의해 자동으로 실행되지 않습니다.

이 프로젝트가 의도적으로 하지 않는 것

  • GRUB 부트로더 비밀번호 자동화(부팅 불가 머신 위험; 위 참조)
  • SUID/전 세계 쓰기 가능/루트킷 스캔에서 발견된 어떤 것도 자동 교정 -- 발견 사항은 사람의 검토를 위해 기록되며, 자동으로 조치되지 않음
  • 어떤 종류의 공격적 열거 도구도 다운로드하거나 실행하지 않음
  • 명시적으로 인식하지 못하는 패키지를 건드리지 않음 -- 익숙하지 않은 패키지(채점 에이전트일 가능성이 높음)는 추측하지 않고 그대로 둠
  • GUI 전용 설정(화면 잠금 타임아웃, 업데이트 관리자 기본 설정, 브라우저 구성)을 다루지 않음 -- 이들은 여전히 수동으로 확인해야 함

각 항목 뒤의 전체 근거는 docs/security-controls.md를 참조하십시오.

라이선스

MIT. LICENSE 참조.

도구 다운로드
모듈하는 일
lib/packages.sh전체 시스템 업데이트; 비밀번호 크래커와 익스플로잇 도구를 자동으로 제거; 이중 용도 도구(nmap, Wireshark, netcat)와 레거시 서비스(VNC, NFS, telnet)는 제거 전에 검토
lib/firewall.shufw를 통한 인바운드 기본 거부 / 아웃바운드 기본 허용, 그리고 알려진 흔한 백도어 포트에 대한 명시적 차단
lib/ssh.sh최신 cipher/KEX/MAC, root 로그인 금지, 연결 및 세션 제한 -- 또는 역할에 필요하지 않으면 SSH를 완전히 제거
lib/services.shSamba, FTP, 메일, 프린팅, MySQL, HTTP, DNS: 역할에 필요하면 각각 설치되고 최소한으로 하드닝되며, 필요하지 않으면 제거되고 방화벽으로 차단됨
lib/users.sh기존 계정에 대한 대화형 검토(관리자 권한, 삭제, 비밀번호 재설정), 숨겨진 UID-0 계정 및 빈 비밀번호 탐지
lib/kernel.sh네트워크 스택 및 커널 자기 보호 sysctl 설정(source routing, ICMP redirects, ASLR, ptrace scope, dmesg/kptr 제한)
lib/pam.shpam_pwquality/pam_pwhistory를 통한 비밀번호 복잡도 및 이력, pam_faillock을 통한 계정 잠금, login.defs의 비밀번호 만료
lib/filesystem.sh핵심 파일 권한, cron/at 제한, 최소한의 rc.local, 법적 로그인 배너, 읽기 전용 SUID/전 세계 쓰기 가능/소유자 없는 파일 스캔
lib/monitoring.sh기본적으로 fail2ban 및 auditd; ClamAV와 전체 rkhunter/chkrootkit 스윕은 옵트인(대회 안전성 참고사항 참조)
lib/forensics.sh나중 비교를 위한 사용자, 프로세스, 리스닝 포트, 설치된 패키지의 읽기 전용 스냅샷
표준출처
CIS Ubuntu Linux Benchmarkhttps://www.cisecurity.org/benchmark/ubuntu_linux
NIST SP 800-53 Rev. 5https://csrc.nist.gov/pubs/sp/800/53/r5/upd1/final
DISA STIG for Ubuntuhttps://public.cyber.mil/stigs/downloads/
Mozilla OpenSSH modern configuration guidelineshttps://infosec.mozilla.org/guidelines/openssh
CyberPatriot National Youth Cyber Defense Competitionhttps://www.uscyberpatriot.org/