Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,10 +74,10 @@ Findings map to NIST FIPS 203 (ML-KEM), FIPS 204 (ML-DSA), and FIPS 205 (SLH-DSA

| Feature | Description |
|---|---|
| **Misconfiguration Scanner** | Runs 95 Azure security rules across storage, network, identity, database, compute, Key Vault, AKS, Kubernetes workloads, post-quantum cryptography, backup, serverless, private endpoint, and supply chain posture |
| **Misconfiguration Scanner** | Runs 144 Azure security rules across storage, network, identity, database, compute, Key Vault, AKS, Kubernetes workloads, post-quantum cryptography, backup, serverless, private endpoint, and supply chain posture |
| **Compliance Mapper** | Maps findings to CIS Benchmarks, NIST CSF, ISO 27001, and SOC 2 framework JSON files |
| **Scan History API** | Stores scans and findings in PostgreSQL and exposes findings, score, scan history, compliance posture, drift, and resource inventory over REST |
| **Remediation Playbooks** | Every documented rule ships with a matching review-gated remediation script (95 playbooks) |
| **Remediation Playbooks** | Every documented rule ships with a matching review-gated remediation script (144 playbooks) |
| **Security Dashboard** | Full React dashboard deployed on Vercel - live monitoring, findings, compliance, drift, prioritization, and AI-layer views |
| **Project Website** | Documentation and reference site at [owasp.github.io/openshield](https://owasp.github.io/openshield/) - blog, rules gallery, architecture, evidence guides, roadmap, and releases |
| **Sentinel Integration** | Normalises findings and pushes them into Microsoft Sentinel via a Log Analytics custom table and KQL analytics rules |
Expand Down Expand Up @@ -120,11 +120,11 @@ Project policies and assurance evidence:
flowchart TD
A["React Dashboard\nVercel · Live"]
B["Flask REST API\nJWT · CORS · Blueprints"]
C["Scanner Engine\n95 Python rules"]
C["Scanner Engine\n144 Python rules"]
D["Azure Subscription\nScanned via Azure SDK + Graph"]
E["Compliance Framework JSON\nCIS · NIST · ISO 27001 · SOC 2"]
F["PostgreSQL Database\nFindings · Scans"]
G["Azure CLI Playbooks\n95 remediation scripts"]
G["Azure CLI Playbooks\n144 remediation scripts"]
H["sentinel/ingest.py\nNormalise + HMAC upload"]
I["Microsoft Sentinel\nOpenShieldFindings_CL · KQL rules"]

Expand Down
46 changes: 23 additions & 23 deletions docs/learn/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -753,7 +753,7 @@ <h1><span class="gradient-text">Learn Azure security posture with OpenShield.</s
<div class="terminal-top" aria-hidden="true"><span class="dot"></span><span class="dot"></span><span class="dot"></span></div>
<div class="terminal-body">
<p><span class="prompt">openshield</span> scan --subscription Azure</p>
<p><span class="dim">loading rules:</span> <span class="cyan">95 dynamic checks</span></p>
<p><span class="dim">loading rules:</span> <span class="cyan">144 dynamic checks</span></p>
<p><span class="dim">enrichment:</span> NVD / CVE intelligence</p>
<p><span class="dim">storage:</span> PostgreSQL scan history</p>
<p><span class="dim">api:</span> Flask + JWT + CORS</p>
Expand All @@ -765,11 +765,11 @@ <h1><span class="gradient-text">Learn Azure security posture with OpenShield.</s
</div>

<div class="metrics" aria-label="OpenShield project metrics">
<div class="metric"><strong>95</strong><span>Azure scan rules</span></div>
<div class="metric"><strong>95</strong><span>CLI remediation playbooks</span></div>
<div class="metric"><strong>144</strong><span>Azure scan rules</span></div>
<div class="metric"><strong>144</strong><span>CLI remediation playbooks</span></div>
<div class="metric"><strong>4</strong><span>Compliance frameworks</span></div>
<div class="metric"><strong>8</strong><span>AI security skills</span></div>
<div class="metric"><strong>58</strong><span>High-severity checks</span></div>
<div class="metric"><strong>95</strong><span>High-severity checks</span></div>
</div>
</header>

Expand Down Expand Up @@ -822,7 +822,7 @@ <h2 class="section-title">Production-shaped, MVP-friendly architecture</h2>
<div class="pipeline" aria-label="OpenShield platform pipeline">
<div class="pipeline-step"><strong>Azure Subscription</strong><span>Resources and configuration</span></div>
<div class="pipeline-step"><strong>Scanner Engine</strong><span>Python rule execution</span></div>
<div class="pipeline-step"><strong>Rule Evaluation</strong><span>95 dynamic checks</span></div>
<div class="pipeline-step"><strong>Rule Evaluation</strong><span>144 dynamic checks</span></div>
<div class="pipeline-step"><strong>CVE Enrichment</strong><span>NVD risk context</span></div>
<div class="pipeline-step"><strong>PostgreSQL</strong><span>Findings and scan history</span></div>
<div class="pipeline-step"><strong>Flask API</strong><span>JWT-protected REST routes</span></div>
Expand All @@ -842,39 +842,39 @@ <h2 class="section-title">Production-shaped, MVP-friendly architecture</h2>

<section id="rules" class="learn-section" data-search="rules coverage network storage compute database identity key vault post quantum severity high medium low findings">
<p class="section-kicker">Rule coverage</p>
<h2 class="section-title">95 Azure security rules</h2>
<h2 class="section-title">144 Azure security rules</h2>
<p class="section-intro">
OpenShield currently has 95 dynamic rules. The strongest contributor work improves rule accuracy, reduces false positives,
OpenShield currently has 144 dynamic rules. The strongest contributor work improves rule accuracy, reduces false positives,
strengthens validation, or improves remediation quality.
</p>

<div class="grid two">
<article class="card">
<h3>Coverage by category</h3>
<div class="rule-chart" aria-label="Rule count by category">
<div class="bar-row"><span>Network</span><div class="bar"><span style="width: 100%;"></span></div><span>23</span></div>
<div class="bar-row"><span>Identity</span><div class="bar"><span style="width: 65%;"></span></div><span>15</span></div>
<div class="bar-row"><span>Security Operations</span><div class="bar"><span style="width: 43%;"></span></div><span>10</span></div>
<div class="bar-row"><span>Supply Chain</span><div class="bar"><span style="width: 35%;"></span></div><span>8</span></div>
<div class="bar-row"><span>KeyVault</span><div class="bar"><span style="width: 26%;"></span></div><span>6</span></div>
<div class="bar-row"><span>Kubernetes</span><div class="bar"><span style="width: 26%;"></span></div><span>6</span></div>
<div class="bar-row"><span>Serverless</span><div class="bar"><span style="width: 22%;"></span></div><span>5</span></div>
<div class="bar-row"><span>Storage</span><div class="bar"><span style="width: 22%;"></span></div><span>5</span></div>
<div class="bar-row"><span>Backup</span><div class="bar"><span style="width: 17%;"></span></div><span>4</span></div>
<div class="bar-row"><span>Compute</span><div class="bar"><span style="width: 17%;"></span></div><span>4</span></div>
<div class="bar-row"><span>Database</span><div class="bar"><span style="width: 17%;"></span></div><span>4</span></div>
<div class="bar-row"><span>PostQuantum</span><div class="bar"><span style="width: 13%;"></span></div><span>3</span></div>
<div class="bar-row"><span>Data Link</span><div class="bar"><span style="width: 9%;"></span></div><span>2</span></div>
<div class="bar-row"><span>Network</span><div class="bar"><span style="width: 100%;"></span></div><span>35</span></div>
<div class="bar-row"><span>Identity</span><div class="bar"><span style="width: 71%;"></span></div><span>25</span></div>
<div class="bar-row"><span>Kubernetes</span><div class="bar"><span style="width: 60%;"></span></div><span>21</span></div>
<div class="bar-row"><span>Security Operations</span><div class="bar"><span style="width: 29%;"></span></div><span>10</span></div>
<div class="bar-row"><span>Storage</span><div class="bar"><span style="width: 29%;"></span></div><span>10</span></div>
<div class="bar-row"><span>Database</span><div class="bar"><span style="width: 23%;"></span></div><span>8</span></div>
<div class="bar-row"><span>Supply Chain</span><div class="bar"><span style="width: 23%;"></span></div><span>8</span></div>
<div class="bar-row"><span>Compute</span><div class="bar"><span style="width: 20%;"></span></div><span>7</span></div>
<div class="bar-row"><span>KeyVault</span><div class="bar"><span style="width: 17%;"></span></div><span>6</span></div>
<div class="bar-row"><span>Serverless</span><div class="bar"><span style="width: 14%;"></span></div><span>5</span></div>
<div class="bar-row"><span>Backup</span><div class="bar"><span style="width: 11%;"></span></div><span>4</span></div>
<div class="bar-row"><span>PostQuantum</span><div class="bar"><span style="width: 9%;"></span></div><span>3</span></div>
<div class="bar-row"><span>Data Link</span><div class="bar"><span style="width: 6%;"></span></div><span>2</span></div>
</div>
</article>

<article class="card">
<h3>Severity distribution</h3>
<p>Most checks are high severity. That makes validation important: high-severity false positives damage trust quickly.</p>
<div class="severity" aria-label="Severity count summary">
<div class="severity-box critical"><strong>0</strong><span>CRITICAL</span></div>
<div class="severity-box high"><strong>58</strong><span>HIGH</span></div>
<div class="severity-box medium"><strong>31</strong><span>MEDIUM</span></div>
<div class="severity-box critical"><strong>5</strong><span>CRITICAL</span></div>
<div class="severity-box high"><strong>95</strong><span>HIGH</span></div>
<div class="severity-box medium"><strong>40</strong><span>MEDIUM</span></div>
<div class="severity-box low"><strong>4</strong><span>LOW</span></div>
</div>
</article>
Expand Down