Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/whereisxuezugi/cplhf
防御工具漏洞分析脚本与自动化配置审计取证分析CTF渗透测试学习与教育事件响应
GitHubwhereisxuezugi/cplhf

CPLHF

模块化 Bash 工具包,用于为 CyberPatriot 竞赛加固 Debian/Ubuntu 系统,自动化账户、防火墙、SSH、PAM 和服务加固,并带有日志记录和备份功能。

512123天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库

CyberPatriot Linux 加固工具包

一个模块化的 Bash 工具包,用于在比赛时间压力下加固 Debian/Ubuntu 系列系统。在多个赛季的 CyberPatriot 全国青少年网络防御竞赛 中构建并不断完善,最近在 2025 年半决赛中获得了 Linux 组别的白金级别。

这不是一个通用合规框架。它是一个针对六小时限时演练的检查清单自动化工具:它正确、快速且幂等地完成 Linux 加固过程中可脚本化的绝大部分工作,记录它触及的所有内容,并将需要判断的决策留给运行它的人。

目录

  • 为什么存在这个项目
  • 架构
  • 快速开始
  • 它实际做了什么
  • 比赛安全注意事项
  • 配置
  • 仓库布局
  • 测试
  • 安全控制与参考
  • 本项目刻意不做的事情
  • 许可证

为什么存在这个项目

CyberPatriot 的 Linux 轮次会根据一份评分标准对实时镜像进行评分,该标准奖励一组相当可预测的加固步骤——账户卫生、密码策略、防火墙配置、服务暴露、文件权限、补丁级别——在严格的时间限制下,通常事先不知道具体植入了哪些漏洞。在倒计时下手工正确地完成这份检查清单,正是团队因拼写错误和遗漏步骤而丢掉容易得分的地方,而不是因为未知内容。

这个工具包最初是在这种压力下编写的一个单一整体脚本。本仓库是该脚本的重写:相同的检查清单覆盖范围,重构为小型、单一用途的模块,更易于阅读、测试和独立推理,每个非显而易见的决策都追溯到特定的 CIS Benchmark 章节或 NIST SP 800-53 控制项(参见 安全控制与参考)。

架构

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() 包装器执行,这为整个项目提供了一个统一的地方来实现 dry-run 支持、一致的日志记录和非致命错误处理。

快速开始

git clone <this-repo>
cd cyberpatriot-linux-hardening
sudo ./bin/harden.sh

系统会询问你一系列关于机器角色的简短是/否问题(是否需要 Samba、FTP、SSH、Web 服务器等),然后它会无人值守地运行上述模块。日志、一整套带时间戳的配置备份以及系统基线快照会写入 ~/hardening-run/。

在实际轮次中,跳过每个软件包的确认提示,并从准备好的答案文件中回答角色问题,而不是现场输入:

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

想在实际改动任何东西之前确切了解它会做什么?

sudo ./bin/harden.sh --dry-run --config my-machine.env

它实际做了什么

模块作用
lib/packages.sh完整系统更新;自动移除密码破解和漏洞利用工具;在移除双用途工具(nmap、Wireshark、netcat)和遗留服务(VNC、NFS、telnet)之前先进行审查
lib/firewall.sh通过 ufw 实现默认拒绝入站 / 默认允许出站,并显式阻止一个已知的常见后门端口
lib/ssh.sh现代加密算法/KEX/MAC,禁止 root 登录,连接和会话限制——或者如果角色不需要 SSH,则完全移除它
lib/services.shSamba、FTP、邮件、打印、MySQL、HTTP、DNS:如果角色需要,则安装并进行最低限度加固;如果不需要,则清除并用防火墙隔离
lib/users.sh交互式审查现有账户(管理员权限、删除、密码重置),检测隐藏的 UID-0 账户和空密码
lib/kernel.sh网络栈和内核自我保护 sysctl 设置(源路由、ICMP 重定向、ASLR、ptrace 范围、dmesg/kptr 限制)
lib/pam.sh通过 pam_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用户、进程、监听端口和已安装软件包的只读快照,供后续比较

tools/find-port-owner.sh 和 tools/list-nonstandard-users.sh 是用于同类分类工作的小型独立实用工具,可独立于主脚本使用——用法参见它们的头部注释。

比赛安全注意事项

一个加固脚本如果破坏了它本应保护的机器,在限时轮次中比无用更糟糕。一些默认设置反映了这一点,在你无人值守运行之前值得理解:

  • 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 传入。文件中遗漏的任何变量都会回退到交互式提示,因此部分填写的配置文件也可以。

sudo ./bin/harden.sh --config my-machine.env

标志:

标志效果
--config FILE从 env 文件加载角色/策略答案
--dry-run记录将要采取的每个操作;不做任何更改
--auto-approve跳过每个软件包的清除确认提示

仓库布局

.
├── 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 进行 lint。要在打开 PR 之前在本地检查:

shellcheck lib/*.sh bin/*.sh tools/*.sh

bin/harden.sh --dry-run 本身也是一个测试:它会在不触及文件系统或安装任何东西的情况下,演练每个模块的控制流和日志记录,是在真正运行之前针对一次性 VM 对更改进行健全性检查的最快方法。关于新模块的完整期望(幂等性、通过 run() 路由破坏性操作,以及为任何新的加固步骤引用来源),请参见 CONTRIBUTING.md。

安全控制与参考

每个模块的头部注释和 docs/security-controls.md 都引用了每个决策背后的具体标准章节。全程使用的主要来源:

标准来源
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/

引用的检测工具(未内置,通过 apt 安装): fail2ban、 Linux Audit / auditd、 rkhunter、 chkrootkit。Lynis 和 OpenSCAP 被推荐作为后续的独立审计,本项目不会自动运行它们。

本项目刻意不做的事情

  • 自动化 GRUB 引导加载程序密码(无法启动机器的风险;见上文)
  • 自动修复 SUID/全局可写/rootkit 扫描发现的任何内容——发现结果会被记录以供人工审查,绝不自动处理
  • 下载或运行任何类型的攻击性枚举工具
  • 触碰它未明确识别的软件包——不熟悉的软件包(很可能是一个评分代理)会被保留,而不是猜测处理
  • 覆盖仅 GUI 的设置(屏幕锁定超时、更新管理器首选项、浏览器配置)——这些仍然需要手动检查

关于每一项背后的完整理由,请参见 docs/security-controls.md。

许可证

MIT。参见 LICENSE。

下载工具