Skip to content

feat: introduce live scoreboard feature and add new ansible roles#154

Merged
l50 merged 10 commits into
mainfrom
feat/scoreboard
May 10, 2026
Merged

feat: introduce live scoreboard feature and add new ansible roles#154
l50 merged 10 commits into
mainfrom
feat/scoreboard

Conversation

@mkultraWasHere
Copy link
Copy Markdown
Contributor

@mkultraWasHere mkultraWasHere commented Apr 28, 2026

Screenshot 2026-04-27 at 10 27 32 PM

Key Changes:

  • Added new scoreboard subsystem with TUI, answer key generation, and agent report verification
  • Introduced new Ansible roles for KeePass and klink (with documentation and metadata)
  • Integrated Bubbletea and Lipgloss for interactive terminal UI in the Go CLI
  • Upgraded Azure and related Go SDK dependencies for compatibility and feature updates

Added:

  • Live scoreboard CLI feature (cli/cmd/scoreboard.go and cli/internal/scoreboard/) with commands to generate answer keys, run a live TUI, and demo sample boards
  • Comprehensive scoreboard backend: answer key generation, agent report parsing, verification logic, transports (local, SSM, ares), and TUI rendering
  • Ansible role for KeePass (ansible/roles/keepass/): includes README.md and meta/main.yml
  • Ansible role for klink (ansible/roles/klink/): includes README.md and meta/main.yml
  • Agent reporting instructions (scoreboard/agent_prompt.md) to guide users in recording findings for the scoreboard

Changed:

  • .gitignore updated to exclude generated scoreboard answer keys
  • .hooks/docsible-hook.sh improved to skip non-role directories for documentation checks
  • ad/GOAD/data/config.json updated with new vulns_adcs_templates field for Meereen host to track deployed ADCS template vulnerabilities
  • Upgraded Azure Go SDK dependencies from v5/v5 to v8/v9 in multiple CLI internal packages for compute and network resource managers
  • Upgraded Go module dependencies in cli/go.mod and cli/go.sum (notably Bubbletea, Lipgloss, AWS, Azure, and supporting libraries)
  • Documentation updates in docs/GOAD-vulnerabilities-comprehensive.md and docs/domains-and-users.md for accuracy, reflecting new and existing ADCS templates and attack paths
  • template/provider/azure/main.tf bumped azurerm provider version to 4.72.0

Removed:

  • Deprecated Azure SDK v5 references replaced with v8/v9 throughout CLI internal code

Real-time Rich TUI that tracks agent progress against a GOAD AD lab
by polling report.jsonl via local file or AWS SSM transport.

- Flat module structure (no subpackages)
- Answer key generator from GOAD config.json
- Two-phase verifier: credentials → inferred hosts/domains/techniques
- SSM transport with actionable ConnectionError messages
- --restart flag to clear report file before launching
- Agent prompt template for JSONL reporting format

Co-Authored-By: Claude <noreply@anthropic.com>
@l50
Copy link
Copy Markdown
Contributor

l50 commented Apr 28, 2026

@mkultraWasHere If we are considering going the TUI route, we should do it in the go cli vs. having to maintain separate python code.

@mkultraWasHere
Copy link
Copy Markdown
Contributor Author

@mkultraWasHere If we are considering going the TUI route, we should do it in the go cli vs. having to maintain separate python code.

@l50 Yea still just playing around with it. Not at all in form.

l50 added 6 commits May 9, 2026 00:50
**Changed:**

- Updated .gitignore to exclude scoreboard/answer_key.json, preventing accidental commits of generated answer keys

**Removed:**

- Deleted scoreboard/answer_key.json from version control to ensure sensitive or auto-generated answer data is not tracked
…fication

**Added:**

- Implement scoreboard CLI commands for generating answer keys, running live verification, and demo rendering (`cli/cmd/scoreboard.go`)
- Add scoreboard domain logic for answer key generation from GOAD config, including objective extraction for credentials, hosts, domains, and techniques (`cli/internal/scoreboard/generate.go`)
- Provide demo findings and report generation for sample status board rendering (`cli/internal/scoreboard/demo.go`)
- Implement local and SSM-based transport backends for fetching/deleting agent reports, including gzip+base64 handling to bypass SSM stdout limits (`cli/internal/scoreboard/transport.go`)
- Add Ares transport for remote ares operation integration via SSM, including Redis technique exploitation extraction (`cli/internal/scoreboard/transport_ares.go`)
- Implement Bubbletea-based TUI for live scoreboard rendering, including color-coded groupings and dynamic poll state (`cli/internal/scoreboard/tui.go`)
- Define types for objectives, findings, answer keys, and status verification reports (`cli/internal/scoreboard/types.go`)
- Add verification engine to match findings to answer key objectives, infer host/domain/technique completion, and parse agent reports (`cli/internal/scoreboard/verify.go`)
- Add unit tests for report parsing and end-to-end verification logic (`cli/internal/scoreboard/verify_test.go`)
- Add Bubbletea and Lipgloss dependencies, along with supporting indirect dependencies, to `go.mod` and `go.sum`

**Changed:**

- Update `go.mod` and `go.sum` to include new dependencies required for the scoreboard, TUI, and transport layers, such as Bubbletea, Lipgloss, and supporting Charmbracelet and terminal libraries
…rd TUI

**Changed:**

- Fixed key binding handling by replacing "ctrl-c" with "ctrl+c" in the key event switch to match the correct input string
- Updated the on-screen instructions from "q/ctrl-c quit · r poll now" to "q/ctrl-c quit · r reload" for clarity in the scoreboard TUI
…data

**Added:**

- keepass role for installing KeePass password manager on Windows hosts, including `README.md` and `meta/main.yml` with role variables, requirements, and platform support
- klink role for installing klink (PuTTY's command-line SSH client) on Windows hosts, including `README.md` and `meta/main.yml` with role variables, requirements, and platform support

**Changed:**

- updated `.gitignore` to clarify that the scoreboard answer key is generated by `dreadgoad scoreboard generate-key` instead of the old script
- improved `.hooks/docsible-hook.sh` to skip non-role directories by checking for the presence of `tasks/main.yml` or `tasks/main.yaml`

**Removed:**

- removed the entire `scoreboard` directory including all source code, documentation, requirements, and scripts for the DreadGOAD scoreboard functionality
@dreadnode-renovate-bot dreadnode-renovate-bot Bot added area/pre-commit Changes made to pre-commit hooks area/roles Changes made to Ansible roles labels May 10, 2026
…e, SID history

**Added:**

- Added detection and extraction of ADCS ESC1, ESC2, ESC3 (including ESC3-CRA), ESC4, and ESC9 techniques via new `vulns_adcs_templates` field and supporting mapping logic in scoreboard generator
- Added mapping and extraction for LAPS password read (both domain- and host-level), gMSA password read, GPO abuse, SID history abuse, RBCD, and shadow credentials techniques
- Added comprehensive test (`TestAnswerKeyGroundTruth`) asserting presence of all expected technique objectives and key host admin/credential properties in the generated answer key

**Changed:**

- Expanded and clarified documentation for GOAD vulnerabilities, especially around ADCS template attacks, MSSQL impersonation paths, AS-REP roasting, Kerberoasting, password policies, and cross-forest relationships
- Improved host admin extraction to fully resolve group memberships (including nested and cross-domain groups) for local Administrators and MSSQL sysadmins, ensuring only true user members are listed as admins
- Enhanced scoreboard technique extraction logic to account for indirect MSSQL EXECUTE AS LOGIN impersonation chains, accurately granting admin when a login can impersonate a sysadmin
- Updated context usage in scoreboard run command to use the cobra command's context
- Refined test coverage and updated user/technique expectations to match new extraction logic

**Removed:**

- Removed fallback to treating group placeholders (like DragonRider, greatmaster) as users in admin lists; now only actual user members are included
@dreadnode-renovate-bot dreadnode-renovate-bot Bot added the area/docs Changes made to documentation label May 10, 2026
…board

**Added:**

- Added extraction of ADCS custom template techniques (ESC1, ESC2, ESC3, ESC3-CRA, ESC4, ESC9) from `vulns_adcs_templates` in host configs
- Implemented new helper functions to accurately resolve and expand host admin users, including nested and cross-domain group membership
- Added detection and extraction for new techniques: GPO abuse, SID history abuse, LAPS password read, gMSA password read, RBCD, and shadow credentials, based on host and domain attributes
- Added comprehensive scoreboard verification tests to assert all expected techniques and correct admin extraction

**Changed:**

- Refactored host admin extraction in scoreboard generation to use new logic that expands group memberships and MSSQL sysadmin chains
- Switched scoreboard transport and Ares transport to use `bytes.NewReader` instead of `strings.NewReader` for gunzipping base64-encoded reports
- Improved technique mapping in `aresExploitedToTechniqueIDs` to include new techniques and correct previous ESC mapping
- Enhanced domain technique extraction to handle ACL-based techniques and per-host LAPS detection
- Updated documentation to list all ADCS custom templates deployed on meereen

**Removed:**

- Inlined host admin and service extraction logic from `extractHosts` and replaced with modular helper functions for clarity and maintainability
@dreadnode-renovate-bot dreadnode-renovate-bot Bot added lab/GOAD Changes made to GOAD lab area/ad-labs Changes made to AD lab definitions labels May 10, 2026
@l50 l50 changed the title feat(scoreboard): add live TUI status board for GOAD engagements feat: introduce live scoreboard feature and add new ansible roles May 10, 2026
@l50 l50 marked this pull request as ready for review May 10, 2026 18:00
@l50 l50 merged commit fcbff6e into main May 10, 2026
8 checks passed
@l50 l50 deleted the feat/scoreboard branch May 10, 2026 18:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/ad-labs Changes made to AD lab definitions area/docs Changes made to documentation area/pre-commit Changes made to pre-commit hooks area/roles Changes made to Ansible roles lab/GOAD Changes made to GOAD lab

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants