Core System Architecture Part 97 — Anonymous Network Security Operations Center, Threat Intelligence, Indicators of Compromise, Detection Engineering, Hunting & Privacy-Preserving Defensive Intelligence Architecture

SIAR — Secure, Local-First, Multi-Transport Communication Platform

Series: Core System Architecture
Part: 97
Status: Architecture specification
Primary language: Rust
Builds on: Core System Architecture Parts 28, 42, 46, 51–53, 55–56, 61–73, 78–83, 92–96

Primary purpose: define SIAR's Security Operations Center (SOC), threat-intelligence, indicator-of-compromise (IoC), detection-engineering, infrastructure hunting, correlation, alerting, federation intelligence exchange, indicator signing, defensive knowledge lifecycle, analyst access, and privacy-preserving defensive intelligence architecture without creating centralized user surveillance, behavioral profiling, or broad content inspection.


1. Purpose

A mature security program needs more than incident response.

It needs continuous defensive capability to answer:

What threats are currently relevant?
Which artifacts or credentials are known-bad?
Are known exploit patterns visible in infrastructure?
Are we seeing repeat compromise indicators?
Which detections are noisy or ineffective?
Are federated peers reporting relevant compromise evidence?

The governing principle is:

SIAR defensive intelligence should correlate infrastructure, cryptographic, artifact, credential, and control signals—not ordinary private user behavior.


2. Architectural Position

Threat Intelligence / Local Signals / Federation Advisories
                         │
                         ▼
                  Intelligence Intake
                         │
                         ▼
                    Normalization
                         │
           ┌─────────────┼─────────────┐
           │             │             │
         IoCs       Detection Rules   Threat Models
           │             │             │
           └─────────────┼─────────────┘
                         ▼
                  Detection Pipeline
                         │
                         ▼
                    Alert / Hunt
                         │
                         ▼
                  Incident Handoff

3. Core Separation

Keep distinct:

threat intelligence
indicator
detection rule
alert
hunt
incident
forensic evidence
analytics

4. Non-Goals

Part 97 does not create:

a global user behavior warehouse
private message inspection
user-interest profiling
cross-tenant surveillance
persistent packet capture
employee productivity monitoring

5. SOC Mission

SOC focuses on:

defensive detection
triage
threat intelligence
detection tuning
hunting
incident support

6. SOC Must Not Become

product analytics
content moderation
user behavior analysis
general-purpose monitoring

7. Hard Rule

SOC access is justified by security purpose, not convenience.


8. SOC Roles

#![allow(unused)]
fn main() {
pub enum SocRole {
    Tier1Analyst,
    Tier2Analyst,
    DetectionEngineer,
    ThreatIntelAnalyst,
    ThreatHunter,
    IncidentResponder,
    SocLead,
    PrivacyReviewer,
}
}

9. Tier1 Analyst

Alert triage.


10. Tier2 Analyst

Deeper investigation.


11. Detection Engineer

Detection logic/rules.


12. Threat Intel Analyst

External/internal defensive intelligence.


13. Threat Hunter

Hypothesis-driven infrastructure search.


14. Incident Responder

Part 96 handoff.


15. Soc Lead

Operational coordination.


16. Privacy Reviewer

Sensitive hunt/evidence boundaries.


17. No Universal SOC Superuser

Hard rule.


18. SOC Capability

#![allow(unused)]
fn main() {
pub struct SocCapability {
    pub role: SocRole,
    pub scope: SocScope,
    pub actions: BTreeSet<SocAction>,
    pub expires_at: Timestamp,
}
}

19. SOC Scope

#![allow(unused)]
fn main() {
pub enum SocScope {
    Environment(EnvironmentClass),
    Service(ServiceId),
    Tenant(TenantId),
    FederationPeer(FederationDomainId),
    Incident(IncidentId),
}
}

20. No Global User Scope

Hard rule.


21. SOC Actions

#![allow(unused)]
fn main() {
pub enum SocAction {
    ViewAlert,
    QuerySecurityTelemetry,
    ManageDetectionRule,
    ImportThreatIntel,
    PublishIndicator,
    ExecuteHunt,
    EscalateIncident,
    ExportScopedEvidence,
}
}

22. Capability Expiry

Required for sensitive actions.


23. No Permanent Elevated Hunting Credential

Hard rule.


24. Threat Intelligence Sources

#![allow(unused)]
fn main() {
pub enum ThreatIntelSource {
    InternalIncident,
    SecurityVendor,
    CommunityAdvisory,
    VulnerabilityFeed,
    RustSecurityAdvisory,
    OsVendor,
    FederationPeer,
    ManualAnalyst,
}
}

25. Internal Incident

Lessons/IoCs from Part 96.


26. Security Vendor

Commercial/open defensive feed.


27. Community Advisory

Public security communities.


28. Vulnerability Feed

CVE/advisory sources.


29. Rust Security Advisory

RustSec/dependency advisories.


30. OS Vendor

Linux/Android/etc.


31. Federation Peer

Signed peer advisory.


32. Manual Analyst

Reviewed entry.


33. Hard Rule

Threat intelligence is untrusted until normalized and validated.


34. Threat Intel Record

#![allow(unused)]
fn main() {
pub struct ThreatIntelRecord {
    pub intel_id: ThreatIntelId,
    pub source: ThreatIntelSource,
    pub confidence: IntelConfidence,
    pub classification: ThreatClassification,
    pub indicators: Vec<IndicatorRef>,
    pub expires_at: Option<Timestamp>,
}
}

35. Intel Confidence

#![allow(unused)]
fn main() {
pub enum IntelConfidence {
    Low,
    Medium,
    High,
    Confirmed,
}
}

36. Confidence ≠ Severity

Hard rule.


37. Threat Classification

#![allow(unused)]
fn main() {
pub enum ThreatClassification {
    Malware,
    CredentialTheft,
    SupplyChain,
    Exploit,
    HostCompromise,
    InfrastructureAbuse,
    FederationCompromise,
    PrivacyAttack,
}
}

38. IoC Model

Indicators must be typed.


39. Indicator Types

#![allow(unused)]
fn main() {
pub enum IndicatorType {
    ArtifactDigest,
    BinaryDigest,
    CertificateFingerprint,
    PublicKeyFingerprint,
    DomainName,
    IpNetwork,
    ServiceEndpoint,
    PackageVersion,
    VulnerabilityId,
    ExploitSignature,
    ProtocolFingerprint,
}
}

40. User IDs Are Not IoCs

Hard rule.


41. Message Content Is Not IoC

Hard rule.


42. Contact IDs Are Not IoCs

Hard rule.


43. Indicator ID

#![allow(unused)]
fn main() {
pub struct IndicatorId(pub [u8; 16]);
}

44. Indicator Record

#![allow(unused)]
fn main() {
pub struct Indicator {
    pub id: IndicatorId,
    pub indicator_type: IndicatorType,
    pub value_digest: Digest,
    pub confidence: IntelConfidence,
    pub valid_from: CoarseTimestamp,
    pub expires_at: Timestamp,
    pub scope: IndicatorScope,
}
}

45. Indicator Scope

#![allow(unused)]
fn main() {
pub enum IndicatorScope {
    LocalEnvironment,
    ServiceClass,
    TenantManaged,
    FederationPeer,
    GlobalDefensive,
}
}

46. GlobalDefensive

Only for universally relevant artifacts/infrastructure.


47. No Global User Indicator

Hard rule.


48. Indicator TTL

Required.


49. No Permanent IoC By Default

Hard rule.


50. Why

Threat context changes.


51. Indicator Value

Where possible store normalized value.


52. Sensitive indicator

store digest/reference.


53. Hard rule.


54. IoC Examples

Allowed:

malicious artifact SHA-256
revoked cert fingerprint
known malicious domain
compromised release key fingerprint
known exploit byte/signature

55. Disallowed Baseline

user search term
user contact identity
message sender pseudonym
private channel membership

56. Hard rule.


57. Indicator Source Provenance

Every indicator records source.


58. No Source-Free Indicator

Hard rule.


59. Indicator Status

#![allow(unused)]
fn main() {
pub enum IndicatorStatus {
    Candidate,
    Active,
    Revoked,
    Expired,
    Superseded,
}
}

60. Candidate

Not enforced.


61. Active

Used in detections/blocks.


62. Revoked

Source invalidated.


63. Expired

TTL ended.


64. Superseded

Replaced by newer knowledge.


65. Hard Rule

Expired/revoked indicators cannot remain silently active.


66. Indicator Signing

Defensive indicator bundles signed.


67. Indicator Bundle

#![allow(unused)]
fn main() {
pub struct IndicatorBundle {
    pub bundle_id: IndicatorBundleId,
    pub issued_at: CoarseTimestamp,
    pub expires_at: Timestamp,
    pub indicators: Vec<Indicator>,
    pub signer: ThreatIntelSignerRef,
    pub signature: SignatureBytes,
}
}

68. Signed Canonical Encoding

Postcard canonical bytes.


69. No unsigned enforcement bundle.


70. Hard rule.


71. Indicator Distribution

SOC
→ signed bundle
→ service/agent
→ validate
→ activate

72. No Dynamic Arbitrary Rule Execution From Feed

Hard rule.


73. IoC Enforcement

Possible:

block artifact
reject cert
quarantine endpoint
alert on package
block compromised federation peer

74. No User Account Ban From Infrastructure IoC Alone

Hard rule.


75. Detection Engineering

Detection rules convert signals into alerts.


76. Detection Rule

#![allow(unused)]
fn main() {
pub struct DetectionRule {
    pub rule_id: DetectionRuleId,
    pub class: DetectionRuleClass,
    pub severity: IncidentSeverity,
    pub inputs: Vec<SecuritySignalType>,
    pub condition: DetectionCondition,
    pub response: DetectionResponsePolicy,
}
}

77. Detection Rule Classes

#![allow(unused)]
fn main() {
pub enum DetectionRuleClass {
    Authentication,
    Credential,
    Host,
    Workload,
    Artifact,
    SupplyChain,
    NetworkInfrastructure,
    TenantIsolation,
    Federation,
    Privacy,
    AuditIntegrity,
}
}

78. No User Engagement Rule Class

Hard rule.


79. Detection Inputs

Allowed:

auth failure classes
credential replay
artifact digest mismatch
host attestation
policy mismatch
network service anomaly
audit integrity failure
tenant boundary violation

80. Forbidden Baseline Inputs

message content
search history
feed dwell time
contact graph
private social interactions

81. Hard rule.


82. Detection Condition

Bounded DSL.


83. Example operators:

Equals
CountOverThreshold
RateOverWindow
Sequence
Any
All
Not
MatchesIndicator

84. No Turing-Complete Script

Hard rule.


85. Why

Deterministic review and safety.


86. Detection Rule Version

#![allow(unused)]
fn main() {
pub struct DetectionRuleVersion(pub u64);
}

87. Rules Signed

Hard rule.


88. Rule Lifecycle

#![allow(unused)]
fn main() {
pub enum DetectionRuleState {
    Draft,
    Testing,
    Active,
    Disabled,
    Deprecated,
}
}

89. Draft

Not executed.


90. Testing

Shadow mode.


91. Active

Produces alerts.


92. Disabled

Stops evaluation.


93. Deprecated

Scheduled removal.


94. No Direct Draft→Global Enforcement

Hard rule.


95. Detection Test Corpus

Synthetic.


96. Replay known security signals.


97. No production user content needed.


98. Hard rule.


99. Detection Rule Validation

Must test:

precision
recall on known corpus
false positives
performance
privacy input boundaries

100. Hard Rule

A detection rule cannot be promoted without privacy classification.


101. Alert

#![allow(unused)]
fn main() {
pub struct SecurityAlert {
    pub alert_id: AlertId,
    pub rule: DetectionRuleId,
    pub severity: IncidentSeverity,
    pub scope: AlertScope,
    pub evidence_refs: Vec<EvidenceRef>,
    pub state: AlertState,
}
}

102. Alert Scope

#![allow(unused)]
fn main() {
pub enum AlertScope {
    Workload(WorkloadInstanceId),
    Service(ServiceId),
    Host(HostId),
    Tenant(TenantId),
    FederationPeer(FederationDomainId),
    Environment(EnvironmentClass),
}
}

103. No User Social Scope

Hard rule.


104. Alert State

#![allow(unused)]
fn main() {
pub enum AlertState {
    New,
    Investigating,
    Benign,
    TruePositive,
    Escalated,
    Closed,
}
}

105. Alert ≠ Incident

Hard rule.


106. Escalation

True/high-risk alert can create Part 96 incident.


107. No automatic incident from every signal.


108. Hard rule.


109. Alert Deduplication

Same underlying condition should aggregate.


110. Avoid alert storms.


111. Alert Fingerprint

Infrastructure-scoped.


112. No user identity.


113. Hard rule.


114. Detection Windows

Use coarse bounded windows.


115. No infinite history.


116. Hard rule.


117. Authentication Detection

Examples:

refresh-token replay
credential use after revocation
impossible issuance state

118. Not:

where user travels
what user browses

119. Hard rule.


120. Privacy Detection

Examples:

private content in public index
telemetry enabled in max anonymity
direct-route fallback
unexpected identifier in logs

121. Privacy Failures Are SOC-Relevant

Hard rule.


122. Tenant Isolation Detection

Examples:

tenant context mismatch
cross-tenant query attempt
wrong encryption key domain

123. No tenant content inspection needed.


124. Hard rule.


125. Supply-Chain Detection

Examples:

unexpected artifact digest
unsigned build
SBOM mismatch
dependency advisory

126. No user data.


127. Hard rule.


128. Host Detection

Examples:

attestation drift
unexpected executable
privilege escalation signal
credential theft

129. Host telemetry limited.


130. No broad employee surveillance.


131. Hard rule.


132. Network Infrastructure Detection

Examples:

relay connection flood
unexpected service endpoint
TLS/mTLS failure spike
routing policy violation

133. Avoid user communication graphing.


134. Aggregate by service/endpoint class.


135. Hard rule.


136. Traffic Analysis Risk

Network security detection can itself deanonymize.


137. Therefore:

no global cross-service flow correlation
no per-user route history
no source-destination graph

138. Hard rule.


139. Detection Engineering Privacy Review

Every rule declares:

input classes
retention
scope
purpose
output

140. No Hidden Data Source

Hard rule.


141. Threat Hunting

Hypothesis-driven, not fishing expedition.


142. Hunt Definition

#![allow(unused)]
fn main() {
pub struct ThreatHunt {
    pub hunt_id: HuntId,
    pub hypothesis: HuntHypothesis,
    pub scope: HuntScope,
    pub data_sources: BTreeSet<HuntDataSource>,
    pub expires_at: Timestamp,
    pub approvals: ApprovalBundle,
}
}

143. Hunt Hypothesis Required

Hard rule.


144. Example

Good:

"Compromised release key may have signed artifact X."

Bad:

"Search all activity for anything suspicious."

145. Hard rule.


146. Hunt Scope

#![allow(unused)]
fn main() {
pub enum HuntScope {
    Service(ServiceId),
    HostClass(HostClass),
    Environment(EnvironmentClass),
    TenantManaged(TenantId),
    FederationPeer(FederationDomainId),
    Incident(IncidentId),
}
}

147. No Global User Hunt

Hard rule.


148. Hunt Data Sources

#![allow(unused)]
fn main() {
pub enum HuntDataSource {
    AuditMetadata,
    SecurityTelemetry,
    HostAttestation,
    ArtifactInventory,
    CredentialMetadata,
    NetworkInfrastructureMetadata,
    ComplianceState,
}
}

149. User Content Not Baseline

Hard rule.


150. Sensitive Hunt Expansion

Requires privacy reviewer + incident context.


151. No general hunting through private messages.


152. Hard rule.


153. Hunt Lifetime

Bounded.


154. Auto-expire.


155. No permanent query/watch.


156. Hard rule.


157. Hunt Query Language

Structured/typed.


158. No arbitrary SQL across all stores.


159. Hard rule.


160. Hunt Result

#![allow(unused)]
fn main() {
pub struct HuntResult {
    pub hunt: HuntId,
    pub matches: Vec<HuntMatch>,
    pub evaluated_scope: HuntScope,
    pub completed_at: CoarseTimestamp,
}
}

161. Matches Minimal

Evidence refs, not raw data.


162. Hard rule.


163. Hunt Match

#![allow(unused)]
fn main() {
pub struct HuntMatch {
    pub signal: SecuritySignalRef,
    pub confidence: DetectionConfidence,
    pub evidence: Vec<EvidenceRef>,
}
}

164. No User Behavioral Timeline

Hard rule.


165. Threat Intelligence Normalization

Different feeds need one internal model.


166. Normalize:

indicator type
value
confidence
source
scope
TTL

167. Do Not Normalize Into Generic JSON Blob

Hard rule.


168. Threat Intel Dedup

Same indicator from multiple sources.


169. Preserve provenance list.


170. Confidence can rise.


171. No source erased.


172. Hard rule.


173. Intel Conflicts

One source says malicious, another benign.


174. Record conflict.


175. Do not silently choose.


176. Hard rule.


177. Indicator Confidence Aggregation

Policy-defined.


178. High-confidence enforcement may require multiple trusted sources.


179. Critical internal evidence can override.


180. Explicit.


181. No black-box scoring.


182. Hard rule.


183. IOC False Positives

Need revocation path.


184. Revoked indicator distributed quickly.


185. Clients/services reject old bundle by version/expiry.


186. Hard rule.


187. Indicator Bundle Version

Monotonic.


188. Anti-rollback.


189. Old malicious block set cannot restore.


190. Hard rule.


191. Indicator Transparency

Internal high-value indicators can have approval history.


192. Public indicators can cite advisory.


193. No secret user basis.


194. Hard rule.


195. Threat Intel Sharing

Federation peer exchange.


196. Share only relevant defensive indicators.


197. No user data.


198. Hard rule.


199. Federation Threat Intel Statement

#![allow(unused)]
fn main() {
pub struct FederationThreatIntelStatement {
    pub source_domain: FederationDomainId,
    pub indicators: Vec<Indicator>,
    pub issued_at: CoarseTimestamp,
    pub expires_at: Timestamp,
    pub signature: SignatureBytes,
}
}

200. Peer Trust

Statement validated against federation trust.


201. No transitive blind trust.


202. Hard rule.


203. Federation Confidence

Local policy may downgrade remote confidence.


204. Good.


205. No remote peer controls local enforcement directly.


206. Hard rule.


207. Threat Intel Privacy

Indicator sharing can leak internal architecture.


208. Share minimum.


209. Example

Share artifact hash, not internal path/host inventory.


210. Hard rule.


211. Detection Response Policy

#![allow(unused)]
fn main() {
pub enum DetectionResponsePolicy {
    AlertOnly,
    QuarantineCandidate,
    BlockCandidate,
    IncidentCandidate,
}
}

212. Candidate Means

Requires response policy/approval.


213. No detection rule directly performs arbitrary destructive action.


214. Hard rule.


215. Automated Enforcement

Allowed for narrow high-confidence controls.


216. Examples:

reject revoked cert
reject known revoked artifact

217. Not:

delete tenant
ban user globally

218. Hard rule.


219. Detection-to-Incident Handoff

alert
→ analyst validation
→ scope/severity
→ create incident

220. High-confidence critical control failure may auto-create incident.


221. Still no broad investigative authority.


222. Hard rule.


223. Alert Evidence

References:

audit event
control failure
attestation result
artifact digest
credential metadata

224. No private content.


225. Hard rule.


226. Alert Triage Metadata

Store:

rule
scope
severity
disposition
evidence refs

227. Avoid free-form notes with sensitive data.


228. Hard rule.


229. Analyst Notes

If needed:

bounded
encrypted
retention-controlled

230. No copying user content into note.


231. Hard rule.


232. SOC Queue

Prioritized by:

severity
confidence
scope
control criticality

233. Not by user importance.


234. Hard rule.


235. Alert Priorities

Critical security/privacy events reserve queue capacity.


236. Low-confidence intel cannot starve.


237. Hard rule.


238. SOC Escalation

Runbook-driven.


239. No manual ad hoc privilege expansion.


240. Hard rule.


241. Detection Rule Repository

Versioned Git/RON.


242. Code review.


243. Tests.


244. Signed release bundle.


245. Hard rule.


246. Rule Change Audit

High-level.


247. Record:

rule enabled
rule disabled
severity changed
data source changed

248. Not every evaluation.


249. Hard rule.


250. Privacy Guardrail Rule

Detection build should fail if rule references forbidden data source.


251. Type system can enforce.


252. Good.


253. Security Signal Type

#![allow(unused)]
fn main() {
pub enum SecuritySignalType {
    CredentialReplay,
    RevokedCredentialUse,
    ArtifactMismatch,
    AttestationFailure,
    AuditChainFailure,
    TenantBoundaryViolation,
    PrivacyPolicyViolation,
    FederationTrustViolation,
    ServiceAnomaly,
}
}

254. No UserBehavior Generic Signal

Hard rule.


255. Detection DSL

Typed over SecuritySignalType.


256. Compile-time privacy boundary possible.


257. Hard rule.


258. Local Endpoint Detection

Desktop/mobile.


259. Scope:

app integrity
secure storage
local DB corruption
unexpected local key change

260. No scanning other personal apps/files.


261. Hard rule.


262. Managed Endpoint Detection

Organization-managed profile only.


263. No personal-profile inspection.


264. Hard rule.


265. Server SOC

Infrastructure signals.


266. No blanket user content visibility.


267. Hard rule.


268. Data Retention

Alert/Intel/Rule/Hunt different.


269. Threat intel

retain until expiry + history metadata.


270. Alerts

bounded.


271. Hunt results

short.


272. Rules

version history.


273. No infinite raw signal history.


274. Hard rule.


275. Retention Classes

#![allow(unused)]
fn main() {
pub enum SocRetentionClass {
    ShortAlert,
    StandardAlert,
    LongThreatIntel,
    RuleHistory,
    IncidentScoped,
}
}

276. Raw Signal TTL

Short.


277. Aggregate alert metadata longer.


278. Hard rule.


279. SOC Storage

Separate:

threat intel store
indicator store
rule store
alert store
hunt store

280. No universal security lake.


281. Hard rule.


282. Why

Security lakes tend to accumulate unrestricted data.


283. SOC Search

Structured.


284. Example filters:

indicator
rule
service
host class
tenant managed scope
coarse time

285. No arbitrary user search.


286. Hard rule.


287. Cross-Store Correlation

Allowed only through approved infrastructure keys:

artifact digest
certificate fingerprint
service ID
host attestation ID
incident ID

288. Not user identity.


289. Hard rule.


290. Correlation Engine

#![allow(unused)]
fn main() {
pub trait DefensiveCorrelationEngine {
    fn correlate(
        &self,
        signals: &[SecuritySignalRef],
        scope: SocScope,
    ) -> Result<Vec<CorrelationFinding>, SocError>;
}
}

291. Correlation Rules Typed.


292. No graph-building over social identities.


293. Hard rule.


294. Correlation Finding

#![allow(unused)]
fn main() {
pub struct CorrelationFinding {
    pub finding_id: FindingId,
    pub scope: SocScope,
    pub indicators: Vec<IndicatorRef>,
    pub evidence: Vec<EvidenceRef>,
}
}

295. Privacy-Safe Correlation

Prefer infrastructure provenance.


296. Hard rule.


297. Threat Hunting Approval

Low-risk infra hunt

analyst capability enough.


298. Sensitive expansion

privacy reviewer + incident.


299. Hard rule.


300. Hunting Time Limit

Hours/days.


301. Never ongoing forever.


302. Hard rule.


303. Hunt Stop Conditions

hypothesis confirmed
hypothesis rejected
scope exhausted
expiry reached

304. No endless exploratory search.


305. Hard rule.


306. Hunting Output

Can generate:

new detection rule
new IoC
incident
control improvement

307. No new user profile.


308. Hard rule.


309. Threat Modeling Feedback

Threat intelligence updates threat model.


310. Example:

new correlation attack on anonymity.


311. Feed Part 42 threat model.


312. No automatic policy downgrade.


313. Hard rule.


314. Privacy Threat Intelligence

Important class.


315. Examples:

new traffic-analysis technique
browser fingerprint exploit
metadata side channel
new relay-correlation attack

316. Defensive response:

route policy
cover traffic tuning
client patch

317. No invasive monitoring.


318. Hard rule.


319. Vulnerability Intelligence

Map advisories to SBOM/artifacts.


320. Artifact Inventory

Part 73.


321. Result:

affected release
affected service
severity
fixed version

322. No user data.


323. Hard rule.


324. Exploitability Context

Can consider:

reachable service
enabled feature
artifact version

325. Not user behavior.


326. Hard rule.


327. Threat Intel Expiry

IoC may expire.


328. Vulnerability may remain until patched.


329. Explicit semantics.


330. Hard rule.


331. Indicator Revocation

If false positive.


332. New signed bundle.


333. Immediate disable.


334. Hard rule.


335. Detection Rule Rollout

Phases:

Test
Shadow
Alerting
Enforcing

336. Enforcing only for safe, high-confidence rules.


337. Hard rule.


338. Shadow Mode

Collect aggregate false-positive data.


339. No new raw surveillance stream.


340. Hard rule.


341. Rule Quality Metrics

Allowed:

alerts generated
true-positive ratio
false-positive ratio
evaluation latency

342. No user behavior.


343. Hard rule.


344. Detection Drift

Rules can degrade.


345. Monitor:

precision
signal availability
schema compatibility

346. No automatic broader data collection to fix.


347. Hard rule.


348. Detection Coverage

Map rule to threat/control.


349. Coverage Matrix

#![allow(unused)]
fn main() {
pub struct DetectionCoverage {
    pub threat: ThreatModelRef,
    pub controls: Vec<ControlId>,
    pub rules: Vec<DetectionRuleId>,
}
}

350. No single numeric "security coverage score" required.


351. Critical gaps explicit.


352. Hard rule.


353. Threat Intel Confidence Decay

Old intelligence becomes less reliable.


354. Optional decay policy.


355. But do not keep infinite old blocks.


356. Hard rule.


357. IOC Matching

Exact where possible.


358. Fuzzy signature only when reviewed.


359. Avoid probabilistic user attribution.


360. Hard rule.


361. Malware/File Scanning

Public/managed file systems may scan where policy permits.


362. Private E2EE content cannot be centrally scanned.


363. Hard rule.


364. Local Client Safety Scan

Optional local-only.


365. Signatures updated.


366. No upload of private file content.


367. Hard rule.


368. Threat Intel Update Distribution

Low priority but timely for critical.


369. Signed.


370. Batched.


371. No device wake solely for low-severity feed.


372. Hard rule.


373. Critical Revocation Feed

Can wake.


374. Example revoked release key.


375. No sensitive content.


376. Hard rule.


377. SOC Notifications

Operators receive alerts.


378. User notification only when user impact/action required.


379. No exposing internal incident details.


380. Hard rule.


381. Security Advisory Integration

Public advisories signed.


382. Related indicators can be public.


383. Internal sensitive IoCs remain scoped.


384. Hard rule.


385. IOC Sharing Policy

#![allow(unused)]
fn main() {
pub enum IndicatorSharingPolicy {
    LocalOnly,
    TenantScoped,
    FederationScoped,
    Public,
}
}

386. Default Internal

LocalOnly.


387. No automatic external sharing.


388. Hard rule.


389. Threat Intel Classification

#![allow(unused)]
fn main() {
pub enum IntelDisclosureClass {
    Internal,
    Restricted,
    FederationShareable,
    Public,
}
}

390. Sharing enforces class.


391. No analyst freeform bypass.


392. Hard rule.


393. Tenant SOC

Optional enterprise scope.


394. Tenant sees only managed environment.


395. No personal user context.


396. Hard rule.


397. Tenant IoCs

Organization artifacts/certs/endpoints.


398. No employee personal identifiers.


399. Hard rule.


400. Federation SOC Exchange

Signed intelligence.


401. No remote SOC access to local telemetry.


402. Hard rule.


403. Peer Request For More Evidence

Requires explicit incident/cooperation scope.


404. No automatic sharing.


405. Hard rule.


406. Threat Intel Source Trust

Per-source policy.


407. Example:

InternalIncident = High
TrustedVendor = Medium/High
UnknownPeer = Low

408. No blind aggregation.


409. Hard rule.


410. Indicator Enforcement Threshold

#![allow(unused)]
fn main() {
pub struct IndicatorEnforcementPolicy {
    pub min_confidence: IntelConfidence,
    pub required_sources: u8,
    pub action: EnforcementAction,
}
}

411. Enforcement Action

#![allow(unused)]
fn main() {
pub enum EnforcementAction {
    Alert,
    Reject,
    Quarantine,
}
}

412. No Delete.


413. Hard rule.


414. Threat Intelligence API

#![allow(unused)]
fn main() {
pub trait ThreatIntelService {
    fn ingest(
        &self,
        record: ThreatIntelRecord,
    ) -> Result<ThreatIntelId, SocError>;

    fn active_indicators(
        &self,
        scope: IndicatorScope,
    ) -> Result<Vec<Indicator>, SocError>;
}
}

415. Detection Engine

#![allow(unused)]
fn main() {
pub trait DetectionEngine {
    fn evaluate(
        &self,
        signal: SecuritySignal,
    ) -> Result<Vec<SecurityAlert>, SocError>;
}
}

416. Hunt Service

#![allow(unused)]
fn main() {
pub trait ThreatHuntService {
    fn execute(
        &self,
        capability: SocCapability,
        hunt: ThreatHunt,
    ) -> Result<HuntResult, SocError>;
}
}

417. Alert Service

#![allow(unused)]
fn main() {
pub trait AlertService {
    fn triage(
        &self,
        alert: AlertId,
        disposition: AlertDisposition,
    ) -> Result<(), SocError>;
}
}

418. Indicator Distributor

#![allow(unused)]
fn main() {
pub trait IndicatorDistributor {
    fn publish(
        &self,
        bundle: IndicatorBundle,
    ) -> Result<(), SocError>;
}
}

419. No Hidden General Query API

Hard rule.


420. SOC Error Taxonomy

#![allow(unused)]
fn main() {
pub enum SocError {
    Unauthorized,
    ScopeViolation,
    InvalidIndicator,
    IndicatorExpired,
    InvalidSignature,
    DetectionRuleInvalid,
    HuntApprovalRequired,
    HuntExpired,
    ForbiddenDataSource,
    AlertNotFound,
    FederationTrustFailure,
    Internal,
}
}

421. Audit Integration

Part 94.


422. Audit:

detection rule activation
indicator enforcement bundle
sensitive hunt approval
external intel export

423. Not every alert evaluation.


424. Hard rule.


425. Compliance Integration

Part 95.


426. Controls verify:

rule review
indicator expiry
SOC least privilege
forbidden data source absence

427. Hard rule.


428. Incident Integration

Part 96.


429. Escalation creates scoped incident.


430. Incident authority separate.


431. Hard rule.


432. Analytics Integration

Part 92.


433. SOC quality metrics aggregate only.


434. No use of product analytics raw data.


435. Hard rule.


436. Experiment Integration

Detection rules not A/B tested on weaker security/privacy.


437. Shadow rule validation allowed.


438. Hard rule.


439. Authorization Integration

Part 81.


440. Analyst capabilities scoped.


441. No SOC bypass of policy engine.


442. Hard rule.


443. Authentication Integration

Strong auth for analyst/operator actions.


444. Step-up for hunt/export/enforcement.


445. Hard rule.


446. Secrets Integration

Feed/vendor/API credentials brokered.


447. No static feed secret in analyst workstation.


448. Hard rule.


449. Host Integrity Integration

Part 71.


450. Attestation signals.


451. Quarantine handoff.


452. Hard rule.


453. Supply-Chain Integration

Part 73.


454. Artifact indicators mapped to release inventory.


455. No manual inventory guess.


456. Hard rule.


457. Event Bus Integration

Only typed security signals/alerts.


458. No raw evidence bodies.


459. Hard rule.


460. Database Integration

Stores:

intel records
IoCs
detection rules
alerts
hunts
quality metrics

461. Separate from product DB.


462. Hard rule.


463. Retention Anti-Resurrection

Expired IoCs/hunts/alerts not restored active from backup.


464. Hard rule.


465. Backup

Rule/intel history can be backed up.


466. Active status/TTL preserved.


467. No expired block resurrection.


468. Hard rule.


469. Observability

Safe metrics:

alerts by rule/severity
false-positive rate
intel ingestion failures
hunt completion
bundle distribution lag

470. Forbidden:

user-linked alert metrics
user behavior graphs

471. Hard rule.


472. SOC SLOs

Examples:

critical alert triage latency
indicator revocation propagation
critical rule activation latency
incident handoff latency

473. Privacy SLO

0 forbidden private data sources in detection rules
0 cross-tenant hunt access
0 permanent hunt capability after expiry

474. Security SLO

0 expired revoked indicators enforced
0 unsigned rule/intel bundle accepted

475. Failure Modes

intel feed poisoning
rule false positive storm
indicator false positive
SOC store outage
federation intel abuse

476. Feed Poisoning

Source trust/provenance.


477. No direct enforcement from untrusted source.


478. Hard rule.


479. Rule False Positive Storm

Auto-disable/rollback if threshold exceeded.


480. Review.


481. No broad data expansion.


482. Hard rule.


483. Indicator False Positive

Revoke bundle.


484. Restore affected service carefully.


485. Hard rule.


486. SOC Store Outage

Critical static revocations remain locally cached within validity.


487. No permissive fallback to revoked artifact/cert.


488. Hard rule.


489. Federation Intel Abuse

Rate limit/trust downgrade/block peer intel channel.


490. No remote enforcement control.


491. Hard rule.


492. Testing

Need SOC/threat-intelligence testkit.


493. Test Scenarios

malicious artifact IoC
revoked certificate
rule false-positive storm
hunt expiry
federation intel

494. IoC Expiry Test

Expired indicator no longer enforced.


495. IoC Revocation Test

Revoked indicator propagates.


496. Signature Test

Unsigned bundle rejected.


497. Poisoned Feed Test

Low-trust source cannot trigger high-risk enforcement alone.


498. Detection Privacy Test

Rule referencing private content fails validation.


499. Rule Rollout Test

Draft/testing rule cannot enforce.


500. Alert Dedup Test

Same condition does not flood queue.


501. Hunt Scope Test

Hunt cannot query outside authorized scope.


502. Hunt Expiry Test

Expired hunt stops.


503. Sensitive Hunt Test

Requires privacy approval/incident context.


504. Tenant Test

Tenant A SOC cannot see B.


505. Federation Test

Remote intel cannot directly control local enforcement.


506. Backup Test

Expired IoC not resurrected.


507. Correlation Test

Infrastructure IDs allowed, social IDs rejected.


508. Incident Handoff Test

Escalated alert creates correctly scoped incident.


509. Fuzzing

Fuzz:

intel record
indicator bundle
detection rule
hunt query
federation intel statement

510. Property Tests

Properties:

expired indicator can never be Active
forbidden data source can never be referenced by active detection rule
hunt result can never contain data outside hunt scope
remote federation intelligence can never directly grant local enforcement authority

511. Formal Verification Targets

Strong candidates:

indicator lifecycle
rule rollout
hunt scope/expiry
detection-to-incident handoff

512. Kani Candidate

indicator status/scope enforcement.


513. TLA+ Candidate

intel ingest → activate → detect → alert → escalate → revoke.


514. Loom Candidate

concurrent indicator revoke + detection match + enforcement cache update.


515. Performance

Detection hot path must be bounded.


516. IoC exact matching fast.


517. Detection DSL precompiled.


518. Hunt queries offline/background.


519. No hunt on request path.


520. Hard rule.


521. Alert Queue

Bounded priority.


522. Critical reserve.


523. Low-confidence alert collapse.


524. No unlimited queue.


525. Hard rule.


526. Indicator Cache

Content-addressed/versioned.


527. Local validation before activate.


528. Expiry timer.


529. No stale infinite cache.


530. Hard rule.


531. Rule Evaluation Limits

CPU/time budget.


532. No catastrophic regex.


533. Prefer safe matcher engines.


534. Hard rule.


535. Threat Intel Storage

Normalize to typed records.


536. Avoid arbitrary feed blobs after processing.


537. Original source ref/digest enough where possible.


538. Hard rule.


539. Crate Layout

Recommended:

crates/
├── siar-soc-core/
├── siar-threat-intel/
├── siar-indicator/
├── siar-detection-rule/
├── siar-detection-engine/
├── siar-security-alert/
├── siar-threat-hunt/
├── siar-defensive-correlation/
├── siar-federation-threat-intel/
├── siar-soc-observability/
└── siar-soc-testkit/

540. siar-soc-core

Owns:

SOC roles
scopes
capabilities
errors

541. siar-threat-intel

Normalization/source trust/intel lifecycle.


542. siar-indicator

Typed IoCs/TTL/bundles/enforcement.


543. siar-detection-rule

Versioned typed detection DSL.


544. siar-detection-engine

Signal evaluation/alert generation.


545. siar-security-alert

Alert queue/dedup/disposition/escalation.


546. siar-threat-hunt

Scoped hypothesis-driven hunts.


547. siar-defensive-correlation

Infrastructure-only correlation.


548. siar-federation-threat-intel

Signed peer intelligence exchange.


549. siar-soc-observability

SOC pipeline health/quality only.


550. siar-soc-testkit

intel/rule/hunt/privacy/federation tests.


551. Security, Privacy & Correctness Invariants

Mandatory:

1. SOC detections and hunts operate on infrastructure, credential, cryptographic, artifact, audit, compliance, and service-security signals—not ordinary private user behavior.
2. Threat-intelligence indicators are typed, provenance-bound, scoped, expiring, and cannot use user identities, message content, search history, contact graphs, or private social membership as baseline IoCs.
3. Detection rules are signed, versioned, privacy-reviewed, tested, and expressed in a bounded deterministic DSL; arbitrary remote scripts are forbidden.
4. Detection rules cannot reference forbidden data sources, and this restriction should be enforced structurally by types/validation rather than convention alone.
5. Alerts are scope-bound security findings, not incidents; incident authority is granted only through the separate Part 96 incident process.
6. Threat hunts require explicit hypotheses, scopes, approved data sources, and expiry; open-ended "search everything" hunting is prohibited.
7. Sensitive hunt expansion requires incident context and privacy review, and no active hunt may survive its expiry.
8. Federation threat intelligence is signed and locally re-evaluated; a remote peer can never directly control local enforcement or gain access to local security telemetry.
9. Indicator and rule lifecycle state is anti-rollback; expired, revoked, superseded, or unsigned defensive artifacts cannot silently return to active enforcement.
10. SOC storage, correlation, metrics, and dashboards never become a universal security data lake or cross-tenant/user surveillance graph.
11. Security automation may reject revoked artifacts/credentials or quarantine infrastructure under signed policy, but cannot perform arbitrary destructive user/tenant actions.
12. SOC operations preserve the anonymity, local-first, least-authority, tenant-isolation, and anti-surveillance guarantees of the wider SIAR architecture.

552. Initial Production Scope

Implement first:

typed SOC roles/scopes/capabilities
typed threat-intelligence sources
typed IoC model
indicator TTL/status/provenance
signed indicator bundles
local indicator cache
typed detection rule DSL
rule Draft/Test/Active lifecycle
alert queue/dedup/triage
privacy/security detection rules
supply-chain/artifact/cert indicators
hypothesis-driven scoped hunt model
federation threat-intel statements
incident escalation integration
audit/compliance integration
privacy-safe SOC metrics
SOC/threat-intelligence testkit

Then add:

advanced infrastructure correlation
local endpoint defensive scanning
privacy-preserving federation intel aggregation
multi-source confidence models
formal IoC/rule/hunt verification
independent intelligence-feed trust policies

553. Definition of Done

Part 97 is complete when:

  • SOC roles and authority are explicit/scoped
  • threat intelligence has provenance/confidence/TTL
  • indicators are typed and never user-behavior identifiers
  • indicator bundles are signed and anti-rollback
  • detection rules use a bounded typed DSL
  • forbidden private data sources are structurally rejected
  • rules have test/shadow/active lifecycle
  • alerts are deduplicated and distinct from incidents
  • hunts are hypothesis-driven, scoped, approved, and expiring
  • federation intelligence cannot directly control local enforcement
  • IoCs and rules cannot resurrect after expiry/revocation
  • SOC correlation uses infrastructure/security identities only
  • audit/compliance/incident handoffs are clean
  • intel/rule/hunt/federation/fuzz/formal tests are specified

554. Final Architecture

             THREAT INTEL / SECURITY SIGNALS
                         │
                         ▼
                  NORMALIZATION
                         │
            ┌────────────┼────────────┐
            │            │            │
          IoCs       RULES        THREAT MODEL
            │            │            │
            └────────────┼────────────┘
                         ▼
                  DETECTION ENGINE
                         │
                         ▼
                     ALERTS
                         │
              ┌──────────┼──────────┐
              │          │          │
           DISMISS      HUNT      INCIDENT
                         │
                         ▼
                 DEFENSIVE LEARNING

SOC safety model:

typed defensive intelligence
+
scoped indicators
+
signed rule bundles
+
infrastructure-only correlation
+
hypothesis-driven hunts
+
privacy review
+
strict TTL/expiry
+
incident handoff

not:

collect every user action in a giant security lake and search it forever whenever something looks suspicious

555. Final Principle

A SOC should know enough about infrastructure, credentials, artifacts, controls, and attack indicators to defend the network—without needing to know the private lives of the people using it.

The correct model is:

ingest defensively
+
normalize strictly
+
scope indicators
+
detect from security signals
+
hunt by hypothesis
+
expire aggressively
+
federate cautiously
+
escalate through incident controls
+
never build surveillance infrastructure

This architecture gives SIAR a privacy-preserving foundation for security operations, threat intelligence, IoCs, detection engineering, infrastructure hunting, federation defensive intelligence, alerting, and incident escalation while preserving the anonymity, local-first, least-authority, and anti-surveillance guarantees established across Parts 34–96.