
【免费下载链接】Cybersecurity-ProjectsBuilding 70 Projects ranging from beginner to advanced so anyone can — learn from, build upon, use as a reference, or even copy directly. Gamified Cybersecurity learning 项目地址https://gitcode.com/gh_mirrors/cy/Cybersecurity-Projects点击查看免费下载本文以 Cybersecurity-Projects 仓库中Nim Credential Harvester项目蓝图为核心结合仓库内参考实现PROJECTS/intermediate/credential-enumeration命令行工具credenum的源码与测试系统讲解如何在 Linux 上构建一个扫描凭据错误存放的审计工具它如何定位浏览器、SSH、云供应商、shell 历史等凭据存储位置如何基于文件权限与内容分析给出严重性评级如何以单个静态二进制交付以及如何用 Docker 搭建可复现的验证环境。读完本文你将掌握 Linux 凭据暴露面测绘的方法论、Nim 模块化扫描架构的落地方式以及面向授权渗透测试的工程化安全特性设计。一、项目概览为什么要用 Nim 构建凭据审计工具Nim Credential Harvester 的核心定位是后渗透阶段的凭据暴露检测工具在获得某台 Linux 机器的一定访问权限之后系统性地扫描家目录下被错误存放的密钥、令牌与配置文件并生成安全态势报告。选择 Nim 有其现实原因Nim 编译产物是体积小、零运行时依赖的原生二进制单个静态文件即可部署不需要目标机器预装解释器或任何依赖库。这一特性在攻防场景中极具价值——扫描工具应当可以随工具链就地投放而不引入额外的环境前提。仓库内对应的参考实现credenum正是这一蓝图的落地README.md 明确将其定位为 Post-access credential exposure detection for Linux systems, written in Nim扫描范围覆盖 7 类凭据存储位置编译为单一静态二进制支持终端彩色输出与结构化 JSON 输出。原蓝图要求 5 个审计模块参考实现进一步扩展为 7 个分类browser、ssh、cloud、history、keyring、git、apptoken下文会逐一展开。二、步骤 1搭建 Nim 环境与模块化项目架构2.1 环境准备蓝图要求先安装 Nim 与 Nimble 包管理器并确认版本要求。参考实现 README.md 写明需要Nim 2.2采用 ORC 内存管理构建工具链还包括 Just任务运行器、musl静态链接、UPX体积压缩、zigcc交叉编译。参考实现提供一个一条命令的安装脚本bash install.sh credenum首次运行即可输出分组展示的终端报告每个 finding 包含严重性徽标、文件路径、权限位与修改时间戳底部汇总各严重级总数。若 Nim 版本过旧会提示Error: Nim 2.2 required (found 1.6.x)需先升级到稳定版若静态构建提示musl-gcc not found在 Debian/Ubuntu 安装musl-toolsinstall 脚本在 musl 不可用时回退到动态链接。2.2 模块化架构与统一 Auditor 接口蓝图的架构要求是每个审计目标是一个独立模块全部实现一个统一的Auditor接口提供返回seq[Finding]的scan()方法并定义共享的Findingpath、category、severity、description与AuditReport类型。参考实现把这个统一接口抽象成了CollectorProc定义在 types.nimCollectorProc* proc(config: HarvestConfig): CollectorResult {.nimcall, raises: [].}所有采集器collector模块都实现proc collect*(config: HarvestConfig): CollectorResult。这个统一的函数指针签名是调度表能够成立的前提——runner 不需要知道它调用的是哪个采集器。类型体系是整个架构的地基核心类型包括Severity枚举info、low、medium、high、critical五档使用字符串值的枚举而非裸字符串使比较退化为整数运算还能直接作为数组索引Category枚举browser、ssh、cloud、history、keyring、git、apptoken七类Finding路径、分类、严重性、描述、可选的Credential详情、权限字符串、修改时间、文件大小CollectorResult单个采集器的产出附带耗时与错误列表文件系统操作失败不会中断扫描而是记录进errorsReport全部结果的聚合包含元数据与array[Severity, int]严重性统计HarvestConfigCLI 解析后的运行时配置。值得注意的细节是Option[Credential]并非每个 finding 都有凭据内容可展示例如.ssh目录权限过宽是一个 finding但没有具体凭据可显示Option类型把这种可有可无在类型层面表达出来而不是塞一个空对象。2.3 静态链接与交叉编译蓝图要求用--passL:-static配置静态链接并设立 x86_64 与 aarch64 的交叉编译目标。参考实现的编译器配置集中在 config.nimsswitch(mm, orc) when defined(musl): var muslGcc findExe(musl-gcc) if muslGcc.len 0: switch(gcc.exe, muslGcc) switch(gcc.linkerexe, muslGcc) switch(passL, -static) when defined(crossX86): switch(passC, -target x86_64-linux-musl) switch(passL, -target x86_64-linux-musl) switch(os, linux) switch(cpu, amd64)-d:musl时编译器切换到 musl-gcc 产出完全静态的二进制不依赖目标机的 glibc 版本-d:crossX86/-d:crossArm64时通过 zigcc 的 Zig C 编译器后端传入目标三元组完成交叉编译无需完整的交叉编译 sysroot。体积数据来自 00-OVERVIEW.md 与 02-ARCHITECTURE.mddebug 构建约 2MBrelease 约 500KB静态 releasemusl约 400KB再用 UPX 压缩后可到约 150KB 量级——单文件、无依赖、可跨架构正是 Nim 在安全社区被采用的原因。三、步骤 2浏览器凭据库审计浏览器是凭据密度最高的位置之一。MITRE ATTCK 将浏览器凭据窃取归入 T1555.003Credentials from Web Browsers会话 Cookie 窃取归入 T1539。3.1 FirefoxFirefox 采用 profile 体系根目录在~/.mozilla/firefox/profile 列表记录在profiles.ini中。每个 profile 内需要检查三个文件对应参考实现 config.nim 中的常量文件内容风险logins.json存储的用户名与密码使用 key4.db 中的密钥加密离线爆破、明文暴露面key4.dbNSS 密钥库持有解密 logins.json 的密钥与 logins.json 配套即构成完整解密链cookies.sqlite会话 Cookie无需解密即可用于会话劫持蓝图要求读取profiles.ini定位 profile 目录。参考实现browser.nim实现了一个极简 INI 解析逐行扫描[Profile*]段提取Path值——注意maxsplit 1很关键因为 profile 路径本身可能包含字符。随后对每个 profile 检查上述三个文件存在即生成 finding。3.2 Chromium 系浏览器Chromium 系Chrome、Brave、Vivaldi、Chromium把数据放在~/.config/browser/下的Default与Profile 1、Profile 2等编号 profile 中需要检查Login DataSQLite 密码库、Cookies会话 Cookie与Web Data自动填充与支付信息。3.3 严重性判定与底层原理浏览器凭据文件有一个独特规则即便权限正确也至少是 MEDIUM。参考实现browser.nim中的判定逻辑为world-readable → CRITICALgroup-readable → HIGH否则默认 MEDIUM。原因在于这些文件本身含敏感数据加密密码与会话 Cookie可以被带离线攻击而在 Linux 上Chromium 密码还依赖 GNOME Keyring/KWallet 解锁未解锁时加密密码不可直接用但会话 Cookie 往往可直接用于会话劫持CircleCI 2023 年事件即是攻击者从工程师笔记本浏览器存储中窃取会话令牌的案例。四、步骤 3SSH 密钥与配置审计SSH 私钥是横向移动的关键凭证对应 MITRE T1552.004Private Keys。4.1 私钥识别与加密状态检测参考实现ssh.nim扫描~/.ssh/下所有文件用startsWith检查五种 PEM 头部对应 config.nim 的SshKeyHeaders常量-----BEGIN OPENSSH PRIVATE KEY-----现代默认格式-----BEGIN RSA PRIVATE KEY-----传统格式-----BEGIN EC PRIVATE KEY-----椭圆曲线-----BEGIN DSA PRIVATE KEY-----已弃用但仍有存量-----BEGIN PRIVATE KEY-----PKCS#8 通用包装之所以用startsWith而非contains是因为 PEM 头部必须位于文件起始处。随后通过SshEncryptedMarkersENCRYPTED、Proc-Type: 4,ENCRYPTED、aes256-ctr、aes128-ctr、bcrypt检测是否加密。严重性组合逻辑参考实现密钥状态权限严重性理由未加密任意用户可读CRITICAL任何人可窃取并立即使用已加密任意用户可读CRITICAL口令可被离线暴力破解未加密仅属主0600HIGH权限正确但缺纵深防御已加密仅属主0600INFO双重防护到位权限检查通过 POSIXstat系统调用实现base.nimst_mode and 0o7777掩码取低 12 位权限位再经toOct转八进制得到熟悉的0600/0644字符串。world-readable 检查就是与WorldReadBit 0o004做按位与。4.2 目录与文件权限基线SSH 最佳实践是私钥 600、.ssh目录 700SshSafeKeyPerms/SshSafeDirPerms。需要提醒的是OpenSSH 自己会拒绝使用权限过宽的私钥并打印WARNING: UNPROTECTED PRIVATE KEY FILE!但.pgpass、~/.aws/credentials、~/.git-credentials、~/.vault-token这类文件没有内置防护——这正是审计工具的价值所在。4.3 配置与认证文件除密钥外还要检查known_hosts暴露用户连接过的主机清单authorized_keys列出可免密登录的账户入口~/.ssh/config解析所有 Host 条目识别两类弱配置——PasswordAuthentication yes允许密码认证弱于密钥与StrictHostKeyChecking no禁用主机密钥校验使机器中间人攻击成为可能。这两项在参考实现中作为 MEDIUM finding 记录。五、步骤 4云供应商配置审计云凭据是权限提升与云内横向的核心资产对应 MITRE T1552.001Credentials In Files。5.1 AWS~/.aws/credentialsINI 格式按 profile 分组与~/.aws/config。参考实现逐行解析并统计两类密钥aws_access_key_id以AKIA开头 →静态长寿命密钥工作到显式轮换或删除为止属于 HIGH以ASIA开头 →临时会话密钥仅在有效期内危险。aws_session_token字段的存在标识临时凭据。~/.aws/config虽不含密钥但能揭示账户结构、region 与是否启用 MFA/SSO——这类侦察数据帮助攻击者规划后续利用。5.2 GCP~/.config/gcloud/下最敏感的是application_default_credentials.json可能是用户凭据gcloud auth application-default login产生MEDIUM或服务账号密钥含私钥 JSON永不过期、权限常很宽HIGH。GcpServiceAccountPattern service_account用于内容判别。5.3 AzureAzure CLI 在~/.azure/下存放accessTokens.json与msal_token_cache.json内含 OAuth 令牌。在多用户系统上可读的令牌缓存意味着其他用户可以冒充该 Azure 用户。5.4 Kubernetes~/.kube/config含集群 context、用户定义与认证数据。参考实现扫描contexts:与users:标记检测两类认证方式token:存在 → HIGHbearer token 提供直接 API 访问往往具备 cluster-admin 或宽泛 namespace 权限client-certificate-data:存在 → 记录但不升级证书单独使用时较难利用。TeamTNT 2022 年的行动正是以受害主机上的 Kubernetes 凭据为跳板在容器集群间扩散的典型。六、步骤 5shell 历史与 .env 文件中的机密检测6.1 历史文件与模式匹配扫描~/.bash_history、~/.zsh_history、~/.fish_history参考实现还覆盖.sh_history、.python_history。两类匹配逻辑history.nim环境变量导出模式SecretPatternsKEY、SECRET、TOKEN、PASSWORD、API_KEY、ACCESS_KEY、AUTH_TOKEN等。防误报的关键在于双重检查既要命中模式又要求行内含export或以键名开头——export PATH/usr/bin含但不会命中KEY、PASSWORD等模式。敏感命令模式HistoryCommandPatterns用自定义的类 glob 匹配器实现无需引入正则库把curl.*-h.*authoriz按.*拆分逐段顺序查找searchFrom保证段序。内置模式覆盖curl.*-h.*authoriz、curl.*-u——带认证头的 HTTP 请求wget.*--header.*authoriz、wget.*--passwordmysql.*-p、psql.*password——命令行直接带数据库密码sshpass——明文密码投递工具。每个命中输出文件、近似行区段与脱敏预览redactValue仅显示前 4 个字符其余以*掩码如ghp_****——足够识别令牌类型又不泄露完整密钥。6.2 资源边界控制两个关键上限来自 02-ARCHITECTURE.md 与history.nim历史行数上限 50,000 行多年积累的 history 可能有数十万行全量扫描慢且吃内存50,000 行覆盖最近记录机密最可能仍有效同时保证资源有界递归深度上限 5 层.env扫描遍历家目录树配合目录排除node_modules、vendor、.git、__pycache__、.venv、.cache避免深嵌套node_modules导致分钟级扫描。6.3 .env 文件递归扫描.env、.env.local、.env.production、.env.stagingEnvFilePatterns常量报告位置、大小与权限。开发者在项目目录遗留的.env常含数据库密码、API 密钥与服务令牌且往往部署后从不清除。七、步骤 6风险评分与报告生成7.1 严重性模型内容 × 权限取最高值参考实现的评分模型有两个输入02-ARCHITECTURE.md内容维度未加密 SSH 密钥 → HIGH已加密 SSH 密钥 → INFO明文 Git 凭据 → HIGHAWS 静态密钥 → HIGHGCP 服务账号密钥 → HIGH数据库口令文件 → HIGHhistory 中的机密 → HIGH无密钥的纯配置文件 → INFO。权限维度覆盖规则条件严重性理由任意用户可读others 有读位0o004CRITICAL系统上任何用户/进程可读组可读group 有读位0o040MEDIUM~HIGH共享宿主场景常见比预期宽松0644 而非 0600LOW比最佳实践宽松但非即时可利用仅属主可读不覆盖正确权限最终严重性 内容维度与权限维度的最大值一个已加密内容 INFO但任意用户可读权限 CRITICAL的密钥最终是 CRITICAL。permissionSeverity函数封装此逻辑stat失败perms 0时安全返回svInfo。7.2 双输出ANSI 终端与 JSON终端渲染output/terminal.nimbox-drawing 表格 ANSI 彩色严重性徽标。难点在于对齐计算字符串内含不可见的 ANSI 转义序列与多字节 UTF-8visualLen剥离\e...m转义、跳过10xxxxxx形式的 UTF-8 连续字节只统计可见字符保证边框严格对齐。--quiet抑制横幅--verbose显示零 findings 的空模块。JSON 输出output/json.nim将整个Report递归序列化为嵌套 JSON支持--output report.json落盘便于 SIEM、脚本与 CI 工具集成。7.3 退出码约定蓝图要求的严重性聚合报告在参考实现中落地为清晰约定02-ARCHITECTURE.md退出码含义0扫描完成无 HIGH/CRITICAL 发现1扫描完成检测到 HIGH/CRITICAL 发现只有 HIGH 与 CRITICAL 触发非零退出码MEDIUM/LOW/INFO 不触发——这使工具能在 CI 流水线中作为门禁credenum --quiet --format json -o report.json echo clean || echo findings detected。蓝图提出的 A-F 综合评级参考实现以五档 Severity 枚举 按严重级统计的 summary 数组等价落地字段级差异将在扩展部分讨论。八、步骤 7运行安全与输出处理蓝图要求四项安全特性参考实现与当前源码的对应关系如下。8.1 --dry-run 与 --scope已实现--dry-run列出将要检查的路径而不读取任何文件内容harvester.nim 中renderDryRun打印模块列表与目标目录后直接quit(0)不进入扫描。--scope以--modules ssh,git,cloud形式落地parseModules把逗号分隔的模块名映射为Category枚举未知模块名被静默跳过。8.2 --exclude 排除模式已实现--exclude接收逗号分隔的路径模式在递归遍历.env / KeePass 扫描中通过matchesExclude跳过如--exclude .cache,vendor。8.3 完整 CLI 参数表来自参考实现 help 输出参数默认作用--target path当前用户家目录指定扫描目标目录--modules list全部 7 个模块限定扫描分类--exclude patterns无跳过匹配路径--format fmtterminalterminal/json/both--output pathstdoutJSON 输出落盘--dry-run关只列路径不读内容--quiet关抑制横幅只显 findings--verbose关显示空模块等全部扫描路径--help/--version—帮助与版本值得说明的设计哲学工具零外部配置——没有配置文件、环境变量或 dotfile一切来自 CLI 标志与默认值。原因很直接一个扫描暴露配置的安全工具如果自身从文件系统读配置就形成了循环依赖被扫描的配置本身可能被篡改。8.4 蓝图中的 AES-256-GCM 输出加密与访问日志当前实现未覆盖的扩展点蓝图步骤 7 提出两个进阶目标用口令派生密钥做AES-256-GCM 输出加密审计报告自身不成为安全负担以及记录每次文件系统访问的访问日志。需要如实说明当前仓库参考实现聚焦于--dry-run、--modules/--exclude、--quiet/--verbose等特性源码中尚无报告加密与访问日志实现。这两项属于值得自行实现的扩展——加密报告可在 JSON 输出后追加一层封装访问日志则与base.nim中所有文件系统访问入口天然契合。工程上它们使工具适合授权专业评估的设计目标不变。九、步骤 8测试环境与使用文档9.1 Docker 集成测试参考实现用 Docker 构建可复现的验证环境tests/docker/Dockerfile 采用多阶段构建第一阶段用官方 Nim Alpine 镜像编译出静态二进制第二阶段基于 Ubuntu 24.04 建testuser账号把planted/测试夹具复制进其家目录覆盖全部 7 个分类有/无口令的 SSH 密钥、假云配置、浏览器数据库 stub、植入的历史条目并显式设置权限制造特定严重性场景如chmod 0644让未加密密钥任意用户可读validate.sh运行credenum --target /home/testuser --format json捕获输出用grep -qi逐项断言覆盖 30 个检查点SSH未保护密钥、加密密钥、弱配置、authorized_keys、known_hosts、云AWS 静态密钥、AWS config、GCP 服务账号、K8s、浏览器Firefox logins/cookies/key db、Chromium login data、history机密模式、curl auth、sshpass、.env、keyringGNOME Keyring、KeePass、password-store、git明文凭据、credential helper、GitHub token、apptokenPostgreSQL、MySQL、Docker auth、netrc、npm、PyPI、GitHub CLI、Vault。运行方式just docker-test先just docker-build。9.2 单元测试tests/test_all.nim覆盖纯函数边界03-IMPLEMENTATION.md 列出的用例包括redactValue短值全掩码、长值只显示前缀、isPrivateKey五种格式 拒绝公钥、matchesSecretPattern命中与不误报export PATH/usr/bin、permissionSeverity不存在路径返回 svInfo 的错误处理路径、parseModules单模块与未知模块忽略。运行just test。9.3 文档与 CIS 对齐学习文档体系完整覆盖五个层面00-OVERVIEW.md前置知识与快速开始、01-CONCEPTS.md安全理论与真实事件、02-ARCHITECTURE.md系统设计与数据流、03-IMPLEMENTATION.md代码走读、04-CHALLENGES.md扩展练习。文档明确将检测项映射到 MITRE ATTCKT1552 未受保护凭据、T1552.001 文件中凭据、T1552.003 bash 历史、T1552.004 私钥、T1555 密码存储、T1555.003 浏览器、T1539 会话 Cookie并与 CIS Benchmark 的 Linux 文件权限加固建议对齐同时用 Uber2022、LastPass2022-2023、CircleCI2023、Codecov/Twitch2021等真实事件说明凭据暴露的现实危害。十、关键概念清单与扩展方向10.1 本文覆盖的核心概念Linux 凭据存储位置浏览器、SSH、云工具、shell 历史、keyring、Git、应用令牌Linux 权限模型及其安全含义为何 SSH 私钥0600不是 finding 而0644是加密 ≠ 安全——加密密钥配合过宽权限仍属 CRITICAL因为可被离线爆破Nim 语言基础与静态编译{.push raises: [].}零异常保证、ORC 内存管理、musl 静态链接、zigcc 交叉编译凭据卫生评估方法论与风险评分框架CIS Benchmark 在凭据存储上的对齐授权安全评估的伦理与法律要求。10.2 为什么零异常是安全工具的硬约束参考实现每个源码文件都以{.push raises: [].}开头该 pragma 声明文件内任何 proc 不得传播异常任何可能抛异常的操作文件 I/O、字符串解析必须在文件内 try/except 包裹。这是编译期强制——若在无保护处调用readFile()编译器直接拒绝。对安全工具而言扫描中途崩溃意味着部分结果、遗漏 findings 与不可靠输出。base.nim的配套模式是把异常转成安全默认值readFileContent出错返回空串getNumericPerms出错返回 -1目录遍历失败写入错误列表后继续。10.3 扩展方向来自 04-CHALLENGES.md按难度分层的扩展清单简单容器凭据采集器Podman~/.config/containers/auth.json、CSV 输出格式、--min-severity过滤、基于修改时间的--recent提示进阶SARIF 输出对接 GitHub Code Scanning、逐条 remediation 建议chmod 0600、ssh-keygen -p加口令、git config --global credential.helper cache等、macOS 支持、--watch持续监控高级网络凭据扫描解析/proc/mounts识别 NFS/CIFS/SSHFS、凭据年龄分析SOC 2 / PCI DSS 轮换要求、Agent 模式baseline 比对 webhook 告警 systemd 服务专家多主机凭据生命周期平台聚合 API 看板 修复工作流 合规视图。新增采集器的标准路径为在types.nim加Category枚举值 → 在config.nim加模块名/描述与路径常量 → 新建collectors/xxx.nim实现collect→ 在runner.nim的getCollectorcase 中接线 → 在tests/docker/planted/与validate.sh加夹具和断言。Nim 枚举 case 的穷尽性保证漏接新模块会直接编译失败。十一、交付物对照与实现限制11.1 蓝图交付物 × 参考实现现状蓝图交付物参考实现状态静态链接 Nim 单二进制已实现musl 静态、UPX 压缩至 ~150KB模块化审计架构已实现7 个采集器 统一CollectorProc接口五类审计模块browser、SSH、云、history、.env已实现并扩展为 7 类keyring、git、apptoken风险评分引擎严重性分级 修复指引严重性分级已实现逐条 remediation 指引列为扩展加密报告输出JSON 终端JSON 与终端双输出已实现AES-256-GCM 报告加密未实现Docker 测试环境已实现多阶段构建 30 项断言访问日志未实现扩展点授权使用、法律要求与 CIS 对齐文档已实现5 份 learn 文档11.2 已知限制如实说明仅限 LinuxmacOSKeychain、不同浏览器路径与 WindowsCredential Manager、DPAPI需平台专用采集器只读不修复检测但不 chmod、不加密、不轮换——扫描工具不应修改正在检查的文件系统静态路径路径常量编译进二进制Flatpak/Snap 等非标准安装路径可能未覆盖不解密凭据识别加密存储并检查权限暴露面但不评估加密强度、不尝试爆破。结语从蓝图到可运行工具Nim Credential Harvester 展示了一条完整的学习路径理解 Linux 凭据的真实存放位置与权限模型 → 用 Nim 的模块化架构实现可插拔采集器 → 以内容 × 权限双维评分模型量化风险 → 用静态单二进制交付 → 用 Docker 夹具化测试验证每一类发现。对攻防双方而言它的价值在于把哪里藏着凭据、哪些暴露是可利用的变成可重复、可审计、可入 CI 的自动化结论。继续深入可研读仓库内 00-OVERVIEW.md 起的完整学习模块并结合 tests/docker/validate.sh 与 Justfile 动手跑通完整测试链路。赞分享【免费下载链接】Cybersecurity-ProjectsBuilding 70 Projects ranging from beginner to advanced so anyone can — learn from, build upon, use as a reference, or even copy directly. Gamified Cybersecurity learning 项目地址https://gitcode.com/gh_mirrors/cy/Cybersecurity-Projects点击查看免费下载相关推荐credenum 架构深度解析基于 Nim 的分层式 Linux 凭据暴露检测工具设计credenum 架构深度解析基于 Nim 的分层式 Linux 凭据暴露检测工具设计 本文以 PROJECTS/intermediate/credentiacredenum 实现深度剖析基于 Nim 构建 Linux 凭证暴露检测器的源码级解析credenum 实现深度剖析基于 Nim 构建 Linux 凭证暴露检测器的源码级解析 导读 本文基于 Cybersecurity Projects 仓库中credential-enumeration 实战指南用 Nim 构建 Linux 后渗透凭据枚举扫描器credenumcredential enumeration 实战指南用 Nim 构建 Linux 后渗透凭据枚举扫描器credenum 导读 本文是一份围绕 PROJE上一篇PostHog 沙箱化 Agent 评测编写指南从 Suite 到 Scorer 的完整工作流下一篇Generative AI for Beginners 第14课生成式 AI 应用生命周期LLMOps完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考