Skip to content

Commit 50a0741

Browse files
maxlandonclaude
andcommitted
docs: refresh STATE for v0.3.0; nuclei via scan run; collapse SUBSTRATE
- STATE.md: date/history refresh (Jul 2026 burst), drop the resolved c2 agentServer/channelServer gotcha, correct the host-Delete line ref. - SCANNING.md: route the nuclei examples through `aims scan run nuclei` so they fold into the store, instead of raw passthrough. - SUBSTRATE.md: collapse the spent phase-by-phase working plan to a shipped-record + the one open cross-run-diff design tension. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 4265358 commit 50a0741

3 files changed

Lines changed: 126 additions & 367 deletions

File tree

SCANNING.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,5 +174,52 @@ aims scan diff "$run_a" "$run_b"
174174

175175
Rebuild a fleet box with a newer service image between runs and watch the version deltas
176176
appear — that's the timestamped-Run + host-dedup model doing its job.
177+
---
178+
179+
## Nuclei — findings that fold into the same store (mid-to-slow examples)
180+
181+
`aims scan run nuclei [nuclei args…]` runs nuclei **server-side** and folds its findings
182+
into the DB just like the nmap paths above — everything after `nuclei` is passed straight
183+
through, so any nuclei invocation works. Findings land as `Script`/`Table`/`Element` rows on
184+
the matched host/service, so `scan diff` and the drift loop cover them too. Template/tag/
185+
severity arguments complete live (`aims scan run nuclei -t <Tab>` browses the template tree).
177186

187+
Point these at your own devices only. Tune `-rl` (rate limit) and `-c` (concurrency) down if
188+
IoT/router gear starts choking under load.
189+
190+
```bash
191+
# 1. Default-credential checks — routers, NAS boxes, printers, cameras. Slow: many auth
192+
# attempts per host across the subnet. Point it at your IoT/router gear specifically.
193+
aims scan run nuclei -t default-logins/ -target 192.168.1.0/24
194+
```
195+
196+
```bash
197+
# 2. Exposed-panels sweep — hundreds of path/panel signatures per host (admin UIs, login
198+
# pages for NAS/printers/routers). Moderate-slow, scales with how many devices respond.
199+
aims scan run nuclei -tags exposed-panels -target 192.168.1.0/24
200+
```
201+
202+
```bash
203+
# 3. Vendor workflows (chained templates) — a detection template fires first, then a whole
204+
# battery of follow-ups only if the vendor matches. Naturally slower per host.
205+
aims scan run nuclei -w workflows/synology-workflow.yaml -u <nas-ip>
206+
```
207+
208+
```bash
209+
# 4. Time-based / blind detection — DSL response-time matchers (`duration>=5`) deliberately
210+
# sleep; each match costs several real seconds. Slow by design, not by request volume.
211+
aims scan run nuclei -tags blind,time-based -u <ip>
212+
```
213+
214+
```bash
215+
# 5. Brute-force network templates — SSH/FTP/Redis/MySQL weak-password checks, slow in
216+
# proportion to wordlist size. Tune the wordlist down for home use.
217+
aims scan run nuclei -t network/ -u <ip> -var USER=admin -var PASS=passwords.txt
218+
```
219+
220+
```bash
221+
# 6. Kitchen-sink CVE pass — thousands of templates; a low rate-limit makes it deliberately
222+
# slow but thorough. A reasonable overnight run against a full home subnet.
223+
aims scan run nuclei -t cve/ -target 192.168.1.0/24 -rl 20
224+
```
178225

STATE.md

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
# AIMS — Project State Overview
22

3-
> Investigated 2026-07-19, after the repo had been paused ~1 year. Companion to
4-
> [`CLAUDE.md`](./CLAUDE.md) (architecture), [`ROADMAP.md`](./ROADMAP.md) (re-entry plan) and
5-
> [`SCAN.md`](./SCAN.md) (scan model & scanner-plug substrate).
3+
> Investigated 2026-07-19, after the repo had been paused ~1 year; refreshed 2026-07-21
4+
> as **v0.3.0** was cut. Companion to [`CLAUDE.md`](./CLAUDE.md) (architecture),
5+
> [`ROADMAP.md`](./ROADMAP.md) (re-entry plan) and [`SCAN.md`](./SCAN.md) (scan model &
6+
> scanner-plug substrate).
67
> This file answers: *where is the project right now, and what's broken.*
78
89
## TL;DR
@@ -16,17 +17,24 @@ foundation with a real, compiling, partially-complete slice on top.
1617

1718
## History — three work bursts
1819

19-
Solo project (Maxime Landon), 92 commits, reconstructed from git:
20+
Solo project (Maxime Landon), 275 commits across four bursts, reconstructed from git:
2021

2122
| Period | What got built | Commits |
2223
|--------|----------------|--------:|
2324
| **Nov 2021** | Foundation: all proto data models + generated code (host, network, credentials à la Metasploit, scan/nmap), Makefile/buf codegen, Maltego tag script | 26 |
2425
| **Jun–Aug 2023** | Client/server/gRPC layer, `reeflective/team` teamserver transport (mTLS + Tailscale), the generic `cmd/display` engine, cobra command tree | 34 |
25-
| **Aug 2024** (last touch) | scan RPC, host/port dedup on insert, JSON/XML import-export, **c2 agents/channels**, display table/detail polish | 32 |
26-
27-
**Since resumed (2026-07):** build unblocked, then domain-by-domain depth — credential (full
28-
CRUD), scan (host-fold ingest, live-state list/show), provenance/Source across domains, and a
29-
CLI/display/completion polish pass. See CLAUDE.md for the live per-domain detail.
26+
| **Aug 2024** | scan RPC, host/port dedup on insert, JSON/XML import-export, **c2 agents/channels**, display table/detail polish | 32 |
27+
| **Jul 2026** (resumed) | Build unblocked; domain-by-domain CRUD depth; scanner-plug substrate (nmap/zgrab/masscan/nuclei, live/streaming, diff, resume); provenance/Source; two-axis query scoping; perf sweep. Cut as **v0.1.0 → v0.3.0** | 183 |
28+
29+
**Since resumed (2026-07):** build unblocked, then domain-by-domain depth. Landed as **v0.3.0**
30+
(tagged 2026-07-21, on top of v0.2.0's scan-drift/live-dashboard/transport work): credential (full
31+
CRUD), scan (host-fold ingest, live-state list/show, **`scan resume`** for interrupted runs,
32+
exact run-to-run diff via RawXML reparse), the **scanner-plug substrate** (nmap + zgrab + masscan
33+
+ **nuclei** drivers, streaming/live scans, ingest fold, stored-object→target bridge), provenance/
34+
Source across domains, the **two orthogonal query-scoping axes** (host/subnet + provenance/tool)
35+
with server-side prefix (LIKE) completion filters, a CLI/display/completion polish pass, and a
36+
performance sweep (hot-path indexes, one-transaction ingest, offline `make pb` codegen). See
37+
CLAUDE.md for the live per-domain detail.
3038

3139
## Build status — the whole tree builds; the `aims` binary runs
3240

@@ -83,20 +91,16 @@ Verified 2026-07-20 against source. CLAUDE.md's table carries the same status wi
8391

8492
| Service | Read/List | Create | Upsert | Delete | Notes |
8593
|---------|:--:|:--:|:--:|:--:|-------|
86-
| host **Hosts** || ✅ (dedup) || ❌ stub | reference impl.; DB-level fold + deep child enrichment (`saveMergedHost`/`saveMergedPorts`) done; Delete has scaffolding ending in Unimplemented (`server/host/host.go:480`) |
94+
| host **Hosts** || ✅ (dedup) || ❌ stub | reference impl.; DB-level fold + deep child enrichment (`saveMergedHost`/`saveMergedPorts`) done; Delete has scaffolding ending in Unimplemented (`server/host/host.go:633`) |
8795
| host **Users** ||||| all methods stubbed |
8896
| network **Services** || ❌ stub | ❌ stub | ❌ stub | Read/List + display/CLI slice done; mutations Unimplemented |
8997
| credential **Credentials** ||||| full CRUD; Delete resolves by identity when no ID given |
9098
| credential **Logins** ||||| all methods stubbed |
9199
| scan **Scans** || ✅ (host fold + `run_hosts` join) ||| **full CRUD**; Delete unlinks run_hosts so shared hosts survive; Upsert idempotent. CLI: list/show/rm (running-scan guard) |
92-
| c2 **Agents/Channels** ||| ❌ stub | ❌ stub | type-name asymmetry, see below |
100+
| c2 **Agents/Channels** ||| ❌ stub | ❌ stub | Read/List/Create done; Upsert/Delete Unimplemented |
93101

94102
## Known rough edges / gotchas
95103

96-
- **c2 server type-name asymmetry (minor):** filenames match contents — `agent.go` is the
97-
**Agents** server (`type server`, `CreateAgentRequest`), `channel.go` the **Channels** server
98-
(`type channelServer`, `CreateChannelRequest`). Only wart: the Agents type is the generic
99-
`server` vs the specific `channelServer`; an optional `server``agentServer` rename squares it.
100104
- **Empty CLI handlers:** several command `RunE`s just `return nil` (e.g. `hosts add`,
101105
`hosts rm`) — command tree/completions exist but the actions are no-ops.
102106
- **`credential/core.go`** Metasploit-style scope helpers (`WhereLoggedInHost`, `WhereOriginIs`,
@@ -109,8 +113,9 @@ Verified 2026-07-20 against source. CLAUDE.md's table carries the same status wi
109113

110114
> Fixed since the original survey (no longer issues): the display-path debug leftovers
111115
> (`println`/`fmt.Println`/empty `if head == "Purpose"`); the crossed
112-
> `stdoutTerm/stdinTerm/stderrTerm` `init()`; and the stray copy-pasted `ReadHost`/`ListHost`/
113-
> `UpsertHost` stubs in `server/network/service.go`.
116+
> `stdoutTerm/stdinTerm/stderrTerm` `init()`; the stray copy-pasted `ReadHost`/`ListHost`/
117+
> `UpsertHost` stubs in `server/network/service.go`; and the **c2 server type-name asymmetry**
118+
> `agent.go` now uses `agentServer`, symmetric with `channel.go`'s `channelServer`.
114119
115120
## Codegen / infra facts (corrected)
116121

0 commit comments

Comments
 (0)