musubix 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -310
- package/bin/musubix.js +4 -12
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +73 -0
- package/dist/index.js.map +1 -0
- package/package.json +49 -72
- package/.github/AGENTS.md +0 -242
- package/.github/prompts/sdd-change-apply.prompt.md +0 -283
- package/.github/prompts/sdd-change-archive.prompt.md +0 -241
- package/.github/prompts/sdd-change-init.prompt.md +0 -269
- package/.github/prompts/sdd-design.prompt.md +0 -250
- package/.github/prompts/sdd-implement.prompt.md +0 -387
- package/.github/prompts/sdd-requirements.prompt.md +0 -193
- package/.github/prompts/sdd-review.prompt.md +0 -155
- package/.github/prompts/sdd-security.prompt.md +0 -228
- package/.github/prompts/sdd-steering.prompt.md +0 -269
- package/.github/prompts/sdd-tasks.prompt.md +0 -255
- package/.github/prompts/sdd-test.prompt.md +0 -230
- package/.github/prompts/sdd-validate.prompt.md +0 -304
- package/.github/skills/musubix-adr-generation/SKILL.md +0 -209
- package/.github/skills/musubix-best-practices/SKILL.md +0 -315
- package/.github/skills/musubix-c4-design/SKILL.md +0 -162
- package/.github/skills/musubix-code-generation/SKILL.md +0 -229
- package/.github/skills/musubix-domain-inference/SKILL.md +0 -196
- package/.github/skills/musubix-ears-validation/SKILL.md +0 -161
- package/.github/skills/musubix-sdd-workflow/SKILL.md +0 -210
- package/.github/skills/musubix-test-generation/SKILL.md +0 -212
- package/.github/skills/musubix-traceability/SKILL.md +0 -141
- package/AGENTS.md +0 -622
- package/LICENSE +0 -21
- package/README.ja.md +0 -302
- package/bin/musubix-mcp.js +0 -19
- package/docs/API-REFERENCE.md +0 -1425
- package/docs/GITHUB-ACTIONS-NPM-SETUP.md +0 -132
- package/docs/INSTALL-GUIDE.ja.md +0 -459
- package/docs/INSTALL-GUIDE.md +0 -459
- package/docs/MUSUBI-enhancement_roadmap_20260105.md +0 -651
- package/docs/MUSUBIv1.6.1-enhancement_roadmap_20260105.md +0 -291
- package/docs/ROADMAP-v1.5.md +0 -116
- package/docs/SwarmCoding.md +0 -1284
- package/docs/Test-prompt.md +0 -105
- package/docs/USER-GUIDE-v1.8.0.md +0 -2371
- package/docs/USER-GUIDE.ja.md +0 -2147
- package/docs/USER-GUIDE.md +0 -2652
- package/docs/adr/0001-real-time-pattern-learning-architecture-for-v1-5-0.md +0 -75
- package/docs/adr/0002-pattern-sharing-protocol-for-cross-team-collaborat.md +0 -79
- package/docs/adr/0003-owl-2-rl-implementation-strategy-for-advanced-infe.md +0 -90
- package/docs/evolution-from-musubi-to-musubix.md +0 -2168
- package/docs/getting-started-with-sdd.md +0 -1602
- package/docs/overview/MUSUBIX-Core.md +0 -671
- package/docs/overview/MUSUBIX-FormalVerify.md +0 -566
- package/docs/overview/MUSUBIX-Learning.md +0 -837
- package/docs/overview/MUSUBIX-MCP-Server.md +0 -535
- package/docs/overview/MUSUBIX-Overview.md +0 -264
- package/docs/overview/MUSUBIX-Phase1-Complete.md +0 -271
- package/docs/overview/MUSUBIX-Phase2-Complete.md +0 -310
- package/docs/overview/MUSUBIX-Roadmap-v2.md +0 -399
- package/docs/overview/MUSUBIX-Security-Plan.md +0 -939
- package/docs/overview/MUSUBIX-Security.md +0 -891
- package/docs/overview/MUSUBIX-YATA.md +0 -666
- package/docs/overview/Neuro-SymbolicAI.md +0 -159
- package/scripts/generate-quality-gate-report.ts +0 -106
- package/scripts/postinstall.js +0 -94
- package/steering/.musubi-version +0 -1
- package/steering/product.ja.md +0 -572
- package/steering/project.yml +0 -66
- package/steering/rules/constitution.md +0 -412
- package/steering/structure.ja.md +0 -503
- package/steering/tech.ja.md +0 -208
|
@@ -1,939 +0,0 @@
|
|
|
1
|
-
# MUSUBIX Security Package 実装計画
|
|
2
|
-
|
|
3
|
-
**パッケージ名**: `@nahisaho/musubix-security`
|
|
4
|
-
**目標バージョン**: v1.8.0
|
|
5
|
-
**作成日**: 2026-01-06
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 1. 概要
|
|
10
|
-
|
|
11
|
-
セキュリティ特化機能を新パッケージとして実装します。Snyk DeepCode AI、Amazon CodeGuruの「LLM生成→記号検証」アプローチを採用し、MUSUBIXのNeuro-Symbolic統合の強みを活かします。
|
|
12
|
-
|
|
13
|
-
### 1.1 参考事例
|
|
14
|
-
|
|
15
|
-
| ツール | アプローチ | 特徴 |
|
|
16
|
-
|--------|----------|------|
|
|
17
|
-
| **Snyk DeepCode AI** | LLM修正 + 記号ルール再検証 | ハルシネーション防止 |
|
|
18
|
-
| **Semgrep + AI** | パターンベース + GPT-4トリアージ | 偽陽性削減 |
|
|
19
|
-
| **SonarQube + AI** | 静的解析 + LLM修正 | コード品質 |
|
|
20
|
-
| **GitHub Advanced Security** | CodeQL + Copilot | GitHub統合 |
|
|
21
|
-
|
|
22
|
-
### 1.2 MUSUBIXの差別化ポイント
|
|
23
|
-
|
|
24
|
-
| 機能 | 他ツール | MUSUBIX |
|
|
25
|
-
|------|---------|---------|
|
|
26
|
-
| **検出** | ルールベース | ルール + YATA知識グラフ + Z3形式検証 |
|
|
27
|
-
| **修正生成** | LLMのみ | LLM + パターンライブラリ |
|
|
28
|
-
| **検証** | 単純な再スキャン | Z3 SMT検証 + 形式証明 |
|
|
29
|
-
| **学習** | なし | Wake-Sleep継続学習 |
|
|
30
|
-
| **トレーサビリティ** | なし | 要件→脆弱性→修正の100%追跡 |
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
## 2. アーキテクチャ
|
|
35
|
-
|
|
36
|
-
### 2.1 パッケージ構成
|
|
37
|
-
|
|
38
|
-
```
|
|
39
|
-
packages/security/
|
|
40
|
-
├── src/
|
|
41
|
-
│ ├── analyzers/ # 脆弱性分析
|
|
42
|
-
│ │ ├── TaintAnalyzer.ts # テイント分析
|
|
43
|
-
│ │ ├── VulnerabilityScanner.ts # 脆弱性スキャン
|
|
44
|
-
│ │ ├── DependencyAuditor.ts # 依存関係監査
|
|
45
|
-
│ │ └── SecretsDetector.ts # シークレット検出
|
|
46
|
-
│ ├── rules/ # セキュリティルール
|
|
47
|
-
│ │ ├── RuleEngine.ts # ルールエンジン
|
|
48
|
-
│ │ ├── OWASPRules.ts # OWASP Top 10
|
|
49
|
-
│ │ ├── CWERules.ts # CWE Top 25
|
|
50
|
-
│ │ └── CustomRules.ts # カスタムルール
|
|
51
|
-
│ ├── fixers/ # 自動修正
|
|
52
|
-
│ │ ├── FixGenerator.ts # 修正生成(LLM)
|
|
53
|
-
│ │ ├── FixVerifier.ts # 修正検証(Z3)
|
|
54
|
-
│ │ └── FixApplier.ts # 修正適用
|
|
55
|
-
│ ├── databases/ # 脆弱性データベース
|
|
56
|
-
│ │ ├── CVEDatabase.ts # CVE/NVD連携
|
|
57
|
-
│ │ ├── VulnDB.ts # 脆弱性DB
|
|
58
|
-
│ │ └── PatternDB.ts # セキュリティパターン
|
|
59
|
-
│ ├── compliance/ # コンプライアンス
|
|
60
|
-
│ │ ├── ComplianceChecker.ts # 準拠チェック
|
|
61
|
-
│ │ ├── PolicyEngine.ts # ポリシーエンジン
|
|
62
|
-
│ │ └── Reporter.ts # レポート生成
|
|
63
|
-
│ ├── tools/ # MCPツール
|
|
64
|
-
│ │ └── security-tools.ts
|
|
65
|
-
│ ├── types.ts # 型定義
|
|
66
|
-
│ └── index.ts # エントリポイント
|
|
67
|
-
├── rules/ # ルール定義ファイル
|
|
68
|
-
│ ├── owasp-top-10.yaml
|
|
69
|
-
│ ├── cwe-top-25.yaml
|
|
70
|
-
│ └── custom-rules.yaml
|
|
71
|
-
├── tests/
|
|
72
|
-
│ ├── unit/
|
|
73
|
-
│ └── integration/
|
|
74
|
-
├── package.json
|
|
75
|
-
└── tsconfig.json
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
### 2.2 アーキテクチャ図
|
|
79
|
-
|
|
80
|
-
```
|
|
81
|
-
┌─────────────────────────────────────────────────────────────┐
|
|
82
|
-
│ Security Scanner │
|
|
83
|
-
└──────────────────────┬──────────────────────────────────────┘
|
|
84
|
-
│
|
|
85
|
-
┌──────────────────────▼──────────────────────────────────────┐
|
|
86
|
-
│ Analyzers │
|
|
87
|
-
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────────────┐ │
|
|
88
|
-
│ │ Taint │ │ Vuln │ │ Deps │ │ Secrets │ │
|
|
89
|
-
│ │Analyzer │ │ Scanner │ │ Auditor │ │ Detector │ │
|
|
90
|
-
│ └────┬────┘ └────┬────┘ └────┬────┘ └────────┬────────┘ │
|
|
91
|
-
└───────┼───────────┼───────────┼────────────────┼────────────┘
|
|
92
|
-
│ │ │ │
|
|
93
|
-
└───────────┴─────┬─────┴────────────────┘
|
|
94
|
-
│
|
|
95
|
-
┌─────────────────────────▼───────────────────────────────────┐
|
|
96
|
-
│ Rule Engine │
|
|
97
|
-
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
|
|
98
|
-
│ │ OWASP Rules │ │ CWE Rules │ │ Custom Rules │ │
|
|
99
|
-
│ └──────────────┘ └──────────────┘ └──────────────────┘ │
|
|
100
|
-
└─────────────────────────┬───────────────────────────────────┘
|
|
101
|
-
│
|
|
102
|
-
▼
|
|
103
|
-
┌─────────────────────────────────────────────────────────────┐
|
|
104
|
-
│ Vulnerability Report │
|
|
105
|
-
│ • 検出された脆弱性一覧 │
|
|
106
|
-
│ • 重大度スコア (CVSS) │
|
|
107
|
-
│ • 影響範囲 │
|
|
108
|
-
└─────────────────────────┬───────────────────────────────────┘
|
|
109
|
-
│
|
|
110
|
-
┌─────────────────────────▼───────────────────────────────────┐
|
|
111
|
-
│ Fix Pipeline │
|
|
112
|
-
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
|
113
|
-
│ │ LLM生成 │ → │ Z3検証 │ → │ 適用 │ │
|
|
114
|
-
│ │ (VS Code LM)│ │ (Symbolic) │ │ │ │
|
|
115
|
-
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
|
116
|
-
└─────────────────────────────────────────────────────────────┘
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
### 2.3 VS Code Language Model API 統合
|
|
120
|
-
|
|
121
|
-
MUSUBIXはVS Code拡張機能のLanguage Model APIを活用してLLM機能を提供します。
|
|
122
|
-
|
|
123
|
-
#### 2.3.1 概要
|
|
124
|
-
|
|
125
|
-
| 項目 | 説明 |
|
|
126
|
-
|------|------|
|
|
127
|
-
| **API** | `vscode.lm` (Language Model API) |
|
|
128
|
-
| **対応モデル** | Copilot (GPT-4), Claude, Gemini等 |
|
|
129
|
-
| **利点** | ユーザーの既存サブスクリプションを活用、認証不要 |
|
|
130
|
-
|
|
131
|
-
#### 2.3.2 アーキテクチャ
|
|
132
|
-
|
|
133
|
-
```
|
|
134
|
-
┌─────────────────────────────────────────────────────────────┐
|
|
135
|
-
│ VS Code Extension Host │
|
|
136
|
-
│ ┌─────────────────────────────────────────────────────┐ │
|
|
137
|
-
│ │ Language Model API (vscode.lm) │ │
|
|
138
|
-
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
|
|
139
|
-
│ │ │ Copilot │ │ Claude │ │ Gemini │ ... │ │
|
|
140
|
-
│ │ └────┬────┘ └────┬────┘ └────┬────┘ │ │
|
|
141
|
-
│ └───────┼────────────┼────────────┼────────────────────┘ │
|
|
142
|
-
│ └────────────┼────────────┘ │
|
|
143
|
-
│ ▼ │
|
|
144
|
-
│ ┌─────────────────────────────────────────────────────┐ │
|
|
145
|
-
│ │ MUSUBIX Security Extension │ │
|
|
146
|
-
│ │ • FixGenerator (LLM修正生成) │ │
|
|
147
|
-
│ │ • SecurityExplainer (脆弱性説明) │ │
|
|
148
|
-
│ │ • PatternSuggester (セキュアパターン提案) │ │
|
|
149
|
-
│ └─────────────────────────────────────────────────────┘ │
|
|
150
|
-
└─────────────────────────────────────────────────────────────┘
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
#### 2.3.3 LLMクライアント実装
|
|
154
|
-
|
|
155
|
-
```typescript
|
|
156
|
-
// src/llm/VSCodeLMClient.ts
|
|
157
|
-
import * as vscode from 'vscode';
|
|
158
|
-
|
|
159
|
-
export interface LLMClient {
|
|
160
|
-
generateFix(vulnerability: Vulnerability): Promise<FixCandidate[]>;
|
|
161
|
-
explainVulnerability(vulnerability: Vulnerability): Promise<string>;
|
|
162
|
-
suggestSecurePattern(context: CodeContext): Promise<string>;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
export class VSCodeLMClient implements LLMClient {
|
|
166
|
-
private modelSelector: vscode.LanguageModelChatSelector = {
|
|
167
|
-
vendor: 'copilot',
|
|
168
|
-
family: 'gpt-4'
|
|
169
|
-
};
|
|
170
|
-
|
|
171
|
-
async generateFix(vulnerability: Vulnerability): Promise<FixCandidate[]> {
|
|
172
|
-
// 利用可能なモデルを取得
|
|
173
|
-
const [model] = await vscode.lm.selectChatModels(this.modelSelector);
|
|
174
|
-
|
|
175
|
-
if (!model) {
|
|
176
|
-
throw new Error('No language model available. Please ensure GitHub Copilot is installed.');
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
// プロンプト構築
|
|
180
|
-
const messages = [
|
|
181
|
-
vscode.LanguageModelChatMessage.User(this.buildFixPrompt(vulnerability))
|
|
182
|
-
];
|
|
183
|
-
|
|
184
|
-
// LLM呼び出し
|
|
185
|
-
const response = await model.sendRequest(messages, {}, new vscode.CancellationTokenSource().token);
|
|
186
|
-
|
|
187
|
-
// レスポンスをストリーミングで取得
|
|
188
|
-
let result = '';
|
|
189
|
-
for await (const chunk of response.text) {
|
|
190
|
-
result += chunk;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
return this.parseFixCandidates(result, vulnerability);
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
private buildFixPrompt(vuln: Vulnerability): string {
|
|
197
|
-
return `You are a security expert. Generate a fix for the following vulnerability.
|
|
198
|
-
|
|
199
|
-
## Vulnerability Details
|
|
200
|
-
- Type: ${vuln.type}
|
|
201
|
-
- CWE: ${vuln.ruleId}
|
|
202
|
-
- Severity: ${vuln.severity}
|
|
203
|
-
- File: ${vuln.location.file}:${vuln.location.startLine}
|
|
204
|
-
|
|
205
|
-
## Vulnerable Code
|
|
206
|
-
\`\`\`
|
|
207
|
-
${vuln.location.snippet}
|
|
208
|
-
\`\`\`
|
|
209
|
-
|
|
210
|
-
## Requirements
|
|
211
|
-
1. Fix MUST address the security vulnerability
|
|
212
|
-
2. Fix MUST preserve the original functionality
|
|
213
|
-
3. Fix MUST follow secure coding best practices
|
|
214
|
-
4. Provide multiple fix candidates if possible
|
|
215
|
-
|
|
216
|
-
## Output Format
|
|
217
|
-
Provide fixes in JSON format:
|
|
218
|
-
\`\`\`json
|
|
219
|
-
{
|
|
220
|
-
"fixes": [
|
|
221
|
-
{
|
|
222
|
-
"code": "fixed code here",
|
|
223
|
-
"explanation": "why this fix works",
|
|
224
|
-
"confidence": 0.95
|
|
225
|
-
}
|
|
226
|
-
]
|
|
227
|
-
}
|
|
228
|
-
\`\`\``;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
async explainVulnerability(vulnerability: Vulnerability): Promise<string> {
|
|
232
|
-
const [model] = await vscode.lm.selectChatModels(this.modelSelector);
|
|
233
|
-
|
|
234
|
-
if (!model) {
|
|
235
|
-
return this.getFallbackExplanation(vulnerability);
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
const messages = [
|
|
239
|
-
vscode.LanguageModelChatMessage.User(
|
|
240
|
-
`Explain this security vulnerability in simple terms for a developer:
|
|
241
|
-
|
|
242
|
-
Type: ${vulnerability.type}
|
|
243
|
-
CWE: ${vulnerability.ruleId}
|
|
244
|
-
Code: ${vulnerability.location.snippet}
|
|
245
|
-
|
|
246
|
-
Include:
|
|
247
|
-
1. What the vulnerability is
|
|
248
|
-
2. How it can be exploited
|
|
249
|
-
3. The potential impact
|
|
250
|
-
4. How to fix it`
|
|
251
|
-
)
|
|
252
|
-
];
|
|
253
|
-
|
|
254
|
-
const response = await model.sendRequest(messages, {}, new vscode.CancellationTokenSource().token);
|
|
255
|
-
|
|
256
|
-
let result = '';
|
|
257
|
-
for await (const chunk of response.text) {
|
|
258
|
-
result += chunk;
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
return result;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
// モデル選択の変更
|
|
265
|
-
setModelSelector(selector: vscode.LanguageModelChatSelector): void {
|
|
266
|
-
this.modelSelector = selector;
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
// フォールバック(LLM利用不可時)
|
|
270
|
-
private getFallbackExplanation(vuln: Vulnerability): string {
|
|
271
|
-
const explanations: Record<string, string> = {
|
|
272
|
-
'xss': 'Cross-Site Scripting (XSS) allows attackers to inject malicious scripts.',
|
|
273
|
-
'sqli': 'SQL Injection allows attackers to execute arbitrary SQL commands.',
|
|
274
|
-
'rce': 'Remote Code Execution allows attackers to run arbitrary code on the server.',
|
|
275
|
-
// ...
|
|
276
|
-
};
|
|
277
|
-
return explanations[vuln.type] || 'Security vulnerability detected.';
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
```
|
|
281
|
-
|
|
282
|
-
#### 2.3.4 モデル選択オプション
|
|
283
|
-
|
|
284
|
-
```typescript
|
|
285
|
-
// ユーザー設定による動的モデル選択
|
|
286
|
-
interface SecurityLLMConfig {
|
|
287
|
-
preferredVendor: 'copilot' | 'anthropic' | 'google';
|
|
288
|
-
preferredFamily?: string;
|
|
289
|
-
fallbackToLocal: boolean;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
async function selectBestModel(config: SecurityLLMConfig): Promise<vscode.LanguageModelChat | null> {
|
|
293
|
-
// 優先モデルを試行
|
|
294
|
-
const preferred = await vscode.lm.selectChatModels({
|
|
295
|
-
vendor: config.preferredVendor,
|
|
296
|
-
family: config.preferredFamily
|
|
297
|
-
});
|
|
298
|
-
|
|
299
|
-
if (preferred.length > 0) {
|
|
300
|
-
return preferred[0];
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
// 利用可能な任意のモデルにフォールバック
|
|
304
|
-
const available = await vscode.lm.selectChatModels({});
|
|
305
|
-
if (available.length > 0) {
|
|
306
|
-
return available[0];
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
return null;
|
|
310
|
-
}
|
|
311
|
-
```
|
|
312
|
-
|
|
313
|
-
#### 2.3.5 設定
|
|
314
|
-
|
|
315
|
-
VS Code設定(`settings.json`):
|
|
316
|
-
|
|
317
|
-
```json
|
|
318
|
-
{
|
|
319
|
-
"musubix.security.llm": {
|
|
320
|
-
"preferredVendor": "copilot",
|
|
321
|
-
"preferredFamily": "gpt-4",
|
|
322
|
-
"maxTokens": 4096,
|
|
323
|
-
"temperature": 0.2,
|
|
324
|
-
"fallbackToLocal": false
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
```
|
|
328
|
-
|
|
329
|
-
---
|
|
330
|
-
|
|
331
|
-
## 3. 主要機能
|
|
332
|
-
|
|
333
|
-
### 3.1 テイント分析(Taint Analysis)
|
|
334
|
-
|
|
335
|
-
汚染データ(ユーザー入力等)の伝播を追跡します。
|
|
336
|
-
|
|
337
|
-
```typescript
|
|
338
|
-
// API設計
|
|
339
|
-
interface TaintAnalyzer {
|
|
340
|
-
// ソース定義(汚染の起点)
|
|
341
|
-
defineSources(sources: TaintSource[]): void;
|
|
342
|
-
|
|
343
|
-
// シンク定義(危険な出力先)
|
|
344
|
-
defineSinks(sinks: TaintSink[]): void;
|
|
345
|
-
|
|
346
|
-
// サニタイザー定義(浄化関数)
|
|
347
|
-
defineSanitizers(sanitizers: Sanitizer[]): void;
|
|
348
|
-
|
|
349
|
-
// テイント分析実行
|
|
350
|
-
analyze(code: string): TaintResult[];
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
interface TaintSource {
|
|
354
|
-
type: 'parameter' | 'property' | 'call';
|
|
355
|
-
pattern: string; // e.g., 'req.body.*', 'req.query.*'
|
|
356
|
-
label: string; // e.g., 'user-input'
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
interface TaintSink {
|
|
360
|
-
type: 'call' | 'property';
|
|
361
|
-
pattern: string; // e.g., 'eval(*)', 'innerHTML'
|
|
362
|
-
vulnerability: string; // e.g., 'xss', 'sqli', 'rce'
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
interface TaintResult {
|
|
366
|
-
source: TaintSource;
|
|
367
|
-
sink: TaintSink;
|
|
368
|
-
path: DataFlowPath[];
|
|
369
|
-
vulnerability: VulnerabilityType;
|
|
370
|
-
severity: 'critical' | 'high' | 'medium' | 'low';
|
|
371
|
-
}
|
|
372
|
-
```
|
|
373
|
-
|
|
374
|
-
**使用例**:
|
|
375
|
-
|
|
376
|
-
```typescript
|
|
377
|
-
import { TaintAnalyzer } from '@nahisaho/musubix-security';
|
|
378
|
-
|
|
379
|
-
const analyzer = new TaintAnalyzer();
|
|
380
|
-
|
|
381
|
-
// ソース定義
|
|
382
|
-
analyzer.defineSources([
|
|
383
|
-
{ type: 'property', pattern: 'req.body.*', label: 'user-input' },
|
|
384
|
-
{ type: 'property', pattern: 'req.query.*', label: 'user-input' },
|
|
385
|
-
{ type: 'property', pattern: 'req.params.*', label: 'user-input' },
|
|
386
|
-
]);
|
|
387
|
-
|
|
388
|
-
// シンク定義
|
|
389
|
-
analyzer.defineSinks([
|
|
390
|
-
{ type: 'call', pattern: 'eval(*)', vulnerability: 'rce' },
|
|
391
|
-
{ type: 'call', pattern: '*.query(*)', vulnerability: 'sqli' },
|
|
392
|
-
{ type: 'property', pattern: '*.innerHTML', vulnerability: 'xss' },
|
|
393
|
-
]);
|
|
394
|
-
|
|
395
|
-
// サニタイザー定義
|
|
396
|
-
analyzer.defineSanitizers([
|
|
397
|
-
{ pattern: 'escapeHtml(*)', cleanses: ['xss'] },
|
|
398
|
-
{ pattern: 'parameterize(*)', cleanses: ['sqli'] },
|
|
399
|
-
]);
|
|
400
|
-
|
|
401
|
-
// 分析実行
|
|
402
|
-
const results = await analyzer.analyze(sourceCode);
|
|
403
|
-
```
|
|
404
|
-
|
|
405
|
-
### 3.2 脆弱性スキャン(Vulnerability Scanner)
|
|
406
|
-
|
|
407
|
-
OWASP Top 10、CWE Top 25に基づく脆弱性検出。
|
|
408
|
-
|
|
409
|
-
```typescript
|
|
410
|
-
// API設計
|
|
411
|
-
interface VulnerabilityScanner {
|
|
412
|
-
// スキャン設定
|
|
413
|
-
configure(options: ScanOptions): void;
|
|
414
|
-
|
|
415
|
-
// ファイル/ディレクトリスキャン
|
|
416
|
-
scan(path: string): Promise<ScanResult>;
|
|
417
|
-
|
|
418
|
-
// コードスニペットスキャン
|
|
419
|
-
scanCode(code: string, language: string): Promise<ScanResult>;
|
|
420
|
-
|
|
421
|
-
// 増分スキャン(変更分のみ)
|
|
422
|
-
scanIncremental(diff: GitDiff): Promise<ScanResult>;
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
interface ScanOptions {
|
|
426
|
-
rules: ('owasp-top-10' | 'cwe-top-25' | 'custom')[];
|
|
427
|
-
severity: ('critical' | 'high' | 'medium' | 'low')[];
|
|
428
|
-
excludePaths?: string[];
|
|
429
|
-
excludeRules?: string[];
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
interface ScanResult {
|
|
433
|
-
vulnerabilities: Vulnerability[];
|
|
434
|
-
statistics: ScanStatistics;
|
|
435
|
-
duration: number;
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
interface Vulnerability {
|
|
439
|
-
id: string; // e.g., 'VULN-001'
|
|
440
|
-
ruleId: string; // e.g., 'CWE-79', 'A03:2021'
|
|
441
|
-
type: VulnType; // e.g., 'xss', 'sqli', 'injection'
|
|
442
|
-
severity: Severity;
|
|
443
|
-
cvss?: number; // CVSS score
|
|
444
|
-
|
|
445
|
-
location: {
|
|
446
|
-
file: string;
|
|
447
|
-
startLine: number;
|
|
448
|
-
endLine: number;
|
|
449
|
-
snippet: string;
|
|
450
|
-
};
|
|
451
|
-
|
|
452
|
-
description: string;
|
|
453
|
-
recommendation: string;
|
|
454
|
-
references: string[];
|
|
455
|
-
|
|
456
|
-
// トレーサビリティ
|
|
457
|
-
relatedRequirements?: string[]; // REQ-*
|
|
458
|
-
cwe?: string[];
|
|
459
|
-
owasp?: string[];
|
|
460
|
-
}
|
|
461
|
-
```
|
|
462
|
-
|
|
463
|
-
**使用例**:
|
|
464
|
-
|
|
465
|
-
```typescript
|
|
466
|
-
import { VulnerabilityScanner } from '@nahisaho/musubix-security';
|
|
467
|
-
|
|
468
|
-
const scanner = new VulnerabilityScanner();
|
|
469
|
-
|
|
470
|
-
scanner.configure({
|
|
471
|
-
rules: ['owasp-top-10', 'cwe-top-25'],
|
|
472
|
-
severity: ['critical', 'high', 'medium'],
|
|
473
|
-
excludePaths: ['node_modules', 'dist'],
|
|
474
|
-
});
|
|
475
|
-
|
|
476
|
-
const result = await scanner.scan('./src');
|
|
477
|
-
|
|
478
|
-
console.log(`Found ${result.vulnerabilities.length} vulnerabilities`);
|
|
479
|
-
for (const vuln of result.vulnerabilities) {
|
|
480
|
-
console.log(`[${vuln.severity}] ${vuln.type}: ${vuln.location.file}:${vuln.location.startLine}`);
|
|
481
|
-
}
|
|
482
|
-
```
|
|
483
|
-
|
|
484
|
-
### 3.3 自動修正パイプライン(Fix Pipeline)
|
|
485
|
-
|
|
486
|
-
LLM生成 → Z3検証 → 適用の3段階パイプライン。
|
|
487
|
-
|
|
488
|
-
```typescript
|
|
489
|
-
// API設計
|
|
490
|
-
interface FixPipeline {
|
|
491
|
-
// 修正生成(LLM)
|
|
492
|
-
generateFix(vulnerability: Vulnerability): Promise<FixCandidate[]>;
|
|
493
|
-
|
|
494
|
-
// 修正検証(Z3 + 再スキャン)
|
|
495
|
-
verifyFix(fix: FixCandidate): Promise<VerificationResult>;
|
|
496
|
-
|
|
497
|
-
// 修正適用
|
|
498
|
-
applyFix(fix: FixCandidate): Promise<ApplyResult>;
|
|
499
|
-
|
|
500
|
-
// 一括処理
|
|
501
|
-
processAll(vulnerabilities: Vulnerability[]): Promise<FixReport>;
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
interface FixCandidate {
|
|
505
|
-
id: string;
|
|
506
|
-
vulnerability: Vulnerability;
|
|
507
|
-
|
|
508
|
-
original: string; // 元のコード
|
|
509
|
-
fixed: string; // 修正後のコード
|
|
510
|
-
|
|
511
|
-
explanation: string; // 修正の説明
|
|
512
|
-
confidence: number; // 0-1
|
|
513
|
-
|
|
514
|
-
// 検証情報
|
|
515
|
-
verified?: boolean;
|
|
516
|
-
verificationDetails?: VerificationResult;
|
|
517
|
-
}
|
|
518
|
-
|
|
519
|
-
interface VerificationResult {
|
|
520
|
-
passed: boolean;
|
|
521
|
-
|
|
522
|
-
checks: {
|
|
523
|
-
// 脆弱性が解消されたか
|
|
524
|
-
vulnerabilityFixed: boolean;
|
|
525
|
-
|
|
526
|
-
// 新しい脆弱性を導入していないか
|
|
527
|
-
noNewVulnerabilities: boolean;
|
|
528
|
-
|
|
529
|
-
// 形式検証(Z3)
|
|
530
|
-
formalVerification: {
|
|
531
|
-
passed: boolean;
|
|
532
|
-
details: string;
|
|
533
|
-
};
|
|
534
|
-
|
|
535
|
-
// 構文的に正しいか
|
|
536
|
-
syntaxValid: boolean;
|
|
537
|
-
|
|
538
|
-
// 型チェック
|
|
539
|
-
typeCheck: boolean;
|
|
540
|
-
};
|
|
541
|
-
|
|
542
|
-
// 失敗理由
|
|
543
|
-
failureReasons?: string[];
|
|
544
|
-
}
|
|
545
|
-
```
|
|
546
|
-
|
|
547
|
-
**使用例**:
|
|
548
|
-
|
|
549
|
-
```typescript
|
|
550
|
-
import { FixPipeline } from '@nahisaho/musubix-security';
|
|
551
|
-
|
|
552
|
-
const pipeline = new FixPipeline({
|
|
553
|
-
llmProvider: 'vscode-lm', // VS Code Language Model API
|
|
554
|
-
z3Adapter: z3,
|
|
555
|
-
patternLibrary: patterns,
|
|
556
|
-
});
|
|
557
|
-
|
|
558
|
-
// 単一脆弱性の修正
|
|
559
|
-
const fixes = await pipeline.generateFix(vulnerability);
|
|
560
|
-
|
|
561
|
-
for (const fix of fixes) {
|
|
562
|
-
const verification = await pipeline.verifyFix(fix);
|
|
563
|
-
|
|
564
|
-
if (verification.passed) {
|
|
565
|
-
console.log(`✅ Fix verified: ${fix.explanation}`);
|
|
566
|
-
await pipeline.applyFix(fix);
|
|
567
|
-
} else {
|
|
568
|
-
console.log(`❌ Fix rejected: ${verification.failureReasons}`);
|
|
569
|
-
}
|
|
570
|
-
}
|
|
571
|
-
```
|
|
572
|
-
|
|
573
|
-
### 3.4 依存関係監査(Dependency Auditor)
|
|
574
|
-
|
|
575
|
-
npm/yarn依存関係の脆弱性チェック。
|
|
576
|
-
|
|
577
|
-
```typescript
|
|
578
|
-
// API設計
|
|
579
|
-
interface DependencyAuditor {
|
|
580
|
-
// package.json/lock分析
|
|
581
|
-
audit(packagePath: string): Promise<AuditResult>;
|
|
582
|
-
|
|
583
|
-
// 特定パッケージのチェック
|
|
584
|
-
checkPackage(name: string, version: string): Promise<PackageVulnerability[]>;
|
|
585
|
-
|
|
586
|
-
// アップグレード提案
|
|
587
|
-
suggestUpgrades(auditResult: AuditResult): Promise<UpgradeSuggestion[]>;
|
|
588
|
-
}
|
|
589
|
-
|
|
590
|
-
interface AuditResult {
|
|
591
|
-
totalDependencies: number;
|
|
592
|
-
vulnerableDependencies: number;
|
|
593
|
-
|
|
594
|
-
vulnerabilities: DependencyVulnerability[];
|
|
595
|
-
|
|
596
|
-
summary: {
|
|
597
|
-
critical: number;
|
|
598
|
-
high: number;
|
|
599
|
-
medium: number;
|
|
600
|
-
low: number;
|
|
601
|
-
};
|
|
602
|
-
}
|
|
603
|
-
|
|
604
|
-
interface DependencyVulnerability {
|
|
605
|
-
package: string;
|
|
606
|
-
version: string;
|
|
607
|
-
vulnerability: {
|
|
608
|
-
id: string; // CVE ID
|
|
609
|
-
title: string;
|
|
610
|
-
severity: Severity;
|
|
611
|
-
cvss: number;
|
|
612
|
-
description: string;
|
|
613
|
-
patchedVersions: string;
|
|
614
|
-
};
|
|
615
|
-
path: string[]; // 依存パス
|
|
616
|
-
}
|
|
617
|
-
```
|
|
618
|
-
|
|
619
|
-
### 3.5 シークレット検出(Secrets Detector)
|
|
620
|
-
|
|
621
|
-
ハードコードされた認証情報の検出。
|
|
622
|
-
|
|
623
|
-
```typescript
|
|
624
|
-
// API設計
|
|
625
|
-
interface SecretsDetector {
|
|
626
|
-
// スキャン
|
|
627
|
-
scan(path: string): Promise<SecretFinding[]>;
|
|
628
|
-
|
|
629
|
-
// カスタムパターン追加
|
|
630
|
-
addPattern(pattern: SecretPattern): void;
|
|
631
|
-
}
|
|
632
|
-
|
|
633
|
-
interface SecretFinding {
|
|
634
|
-
type: SecretType; // 'api-key' | 'password' | 'token' | 'private-key' | etc.
|
|
635
|
-
value: string; // マスク済み値
|
|
636
|
-
location: Location;
|
|
637
|
-
entropy: number; // エントロピー値
|
|
638
|
-
confidence: number;
|
|
639
|
-
}
|
|
640
|
-
|
|
641
|
-
type SecretType =
|
|
642
|
-
| 'github-token'
|
|
643
|
-
| 'azure-key'
|
|
644
|
-
| 'google-api-key'
|
|
645
|
-
| 'jwt-secret'
|
|
646
|
-
| 'private-key'
|
|
647
|
-
| 'password'
|
|
648
|
-
| 'database-url'
|
|
649
|
-
| 'generic-secret';
|
|
650
|
-
```
|
|
651
|
-
|
|
652
|
-
---
|
|
653
|
-
|
|
654
|
-
## 4. セキュリティルール
|
|
655
|
-
|
|
656
|
-
### 4.1 OWASP Top 10 (2021)
|
|
657
|
-
|
|
658
|
-
| ID | 脆弱性 | 実装優先度 |
|
|
659
|
-
|----|--------|----------|
|
|
660
|
-
| A01:2021 | Broken Access Control | P0 |
|
|
661
|
-
| A02:2021 | Cryptographic Failures | P0 |
|
|
662
|
-
| A03:2021 | Injection | P0 |
|
|
663
|
-
| A04:2021 | Insecure Design | P1 |
|
|
664
|
-
| A05:2021 | Security Misconfiguration | P1 |
|
|
665
|
-
| A06:2021 | Vulnerable Components | P0 |
|
|
666
|
-
| A07:2021 | Auth Failures | P0 |
|
|
667
|
-
| A08:2021 | Software/Data Integrity | P1 |
|
|
668
|
-
| A09:2021 | Security Logging Failures | P2 |
|
|
669
|
-
| A10:2021 | SSRF | P1 |
|
|
670
|
-
|
|
671
|
-
### 4.2 CWE Top 25 (2024)
|
|
672
|
-
|
|
673
|
-
| Rank | CWE ID | 名前 | 実装優先度 |
|
|
674
|
-
|------|--------|------|----------|
|
|
675
|
-
| 1 | CWE-79 | XSS | P0 |
|
|
676
|
-
| 2 | CWE-89 | SQL Injection | P0 |
|
|
677
|
-
| 3 | CWE-20 | Improper Input Validation | P0 |
|
|
678
|
-
| 4 | CWE-125 | Out-of-bounds Read | P1 |
|
|
679
|
-
| 5 | CWE-78 | OS Command Injection | P0 |
|
|
680
|
-
| 6 | CWE-416 | Use After Free | P1 |
|
|
681
|
-
| 7 | CWE-22 | Path Traversal | P0 |
|
|
682
|
-
| 8 | CWE-352 | CSRF | P0 |
|
|
683
|
-
| 9 | CWE-434 | Unrestricted Upload | P1 |
|
|
684
|
-
| 10 | CWE-862 | Missing Authorization | P0 |
|
|
685
|
-
|
|
686
|
-
### 4.3 ルール定義形式
|
|
687
|
-
|
|
688
|
-
```yaml
|
|
689
|
-
# rules/owasp-top-10.yaml
|
|
690
|
-
rules:
|
|
691
|
-
- id: A03-injection-sqli
|
|
692
|
-
name: SQL Injection
|
|
693
|
-
owasp: A03:2021
|
|
694
|
-
cwe: CWE-89
|
|
695
|
-
severity: critical
|
|
696
|
-
|
|
697
|
-
patterns:
|
|
698
|
-
- pattern: |
|
|
699
|
-
$DB.query($USER_INPUT)
|
|
700
|
-
message: "Potential SQL injection vulnerability"
|
|
701
|
-
- pattern: |
|
|
702
|
-
$DB.execute(`... ${$USER_INPUT} ...`)
|
|
703
|
-
message: "String interpolation in SQL query"
|
|
704
|
-
|
|
705
|
-
fix_template: |
|
|
706
|
-
// Use parameterized queries
|
|
707
|
-
$DB.query($QUERY, [$USER_INPUT])
|
|
708
|
-
|
|
709
|
-
references:
|
|
710
|
-
- https://owasp.org/Top10/A03_2021-Injection/
|
|
711
|
-
- https://cwe.mitre.org/data/definitions/89.html
|
|
712
|
-
```
|
|
713
|
-
|
|
714
|
-
---
|
|
715
|
-
|
|
716
|
-
## 5. MCPツール
|
|
717
|
-
|
|
718
|
-
### 5.1 ツール一覧
|
|
719
|
-
|
|
720
|
-
| ツール名 | 説明 |
|
|
721
|
-
|---------|------|
|
|
722
|
-
| `security_scan` | 脆弱性スキャン |
|
|
723
|
-
| `security_taint_analyze` | テイント分析 |
|
|
724
|
-
| `security_audit_deps` | 依存関係監査 |
|
|
725
|
-
| `security_detect_secrets` | シークレット検出 |
|
|
726
|
-
| `security_generate_fix` | 修正生成 |
|
|
727
|
-
| `security_verify_fix` | 修正検証 |
|
|
728
|
-
| `security_apply_fix` | 修正適用 |
|
|
729
|
-
| `security_compliance_check` | コンプライアンスチェック |
|
|
730
|
-
|
|
731
|
-
### 5.2 ツール定義
|
|
732
|
-
|
|
733
|
-
```typescript
|
|
734
|
-
// tools/security-tools.ts
|
|
735
|
-
export const securityTools: ToolDefinition[] = [
|
|
736
|
-
{
|
|
737
|
-
name: 'security_scan',
|
|
738
|
-
description: 'Scan code for security vulnerabilities (OWASP Top 10, CWE Top 25)',
|
|
739
|
-
inputSchema: {
|
|
740
|
-
type: 'object',
|
|
741
|
-
properties: {
|
|
742
|
-
path: { type: 'string', description: 'Path to scan' },
|
|
743
|
-
rules: {
|
|
744
|
-
type: 'array',
|
|
745
|
-
items: { type: 'string' },
|
|
746
|
-
description: 'Rule sets to apply'
|
|
747
|
-
},
|
|
748
|
-
severity: {
|
|
749
|
-
type: 'array',
|
|
750
|
-
items: { type: 'string', enum: ['critical', 'high', 'medium', 'low'] }
|
|
751
|
-
}
|
|
752
|
-
},
|
|
753
|
-
required: ['path']
|
|
754
|
-
},
|
|
755
|
-
handler: async (params) => {
|
|
756
|
-
const scanner = new VulnerabilityScanner();
|
|
757
|
-
return await scanner.scan(params.path);
|
|
758
|
-
}
|
|
759
|
-
},
|
|
760
|
-
|
|
761
|
-
{
|
|
762
|
-
name: 'security_generate_fix',
|
|
763
|
-
description: 'Generate fix for a vulnerability using LLM + symbolic verification',
|
|
764
|
-
inputSchema: {
|
|
765
|
-
type: 'object',
|
|
766
|
-
properties: {
|
|
767
|
-
vulnerability: { type: 'object', description: 'Vulnerability to fix' },
|
|
768
|
-
maxCandidates: { type: 'number', default: 3 }
|
|
769
|
-
},
|
|
770
|
-
required: ['vulnerability']
|
|
771
|
-
},
|
|
772
|
-
handler: async (params) => {
|
|
773
|
-
const pipeline = new FixPipeline();
|
|
774
|
-
return await pipeline.generateFix(params.vulnerability);
|
|
775
|
-
}
|
|
776
|
-
}
|
|
777
|
-
];
|
|
778
|
-
```
|
|
779
|
-
|
|
780
|
-
---
|
|
781
|
-
|
|
782
|
-
## 6. CLIコマンド
|
|
783
|
-
|
|
784
|
-
```bash
|
|
785
|
-
# 脆弱性スキャン
|
|
786
|
-
npx musubix security scan ./src
|
|
787
|
-
npx musubix security scan ./src --rules owasp-top-10,cwe-top-25
|
|
788
|
-
npx musubix security scan ./src --severity critical,high
|
|
789
|
-
|
|
790
|
-
# テイント分析
|
|
791
|
-
npx musubix security taint ./src
|
|
792
|
-
npx musubix security taint ./src --sources user-input --sinks sql,eval
|
|
793
|
-
|
|
794
|
-
# 依存関係監査
|
|
795
|
-
npx musubix security audit
|
|
796
|
-
npx musubix security audit --fix # 自動アップグレード
|
|
797
|
-
|
|
798
|
-
# シークレット検出
|
|
799
|
-
npx musubix security secrets ./src
|
|
800
|
-
npx musubix security secrets ./src --entropy 4.5
|
|
801
|
-
|
|
802
|
-
# 自動修正
|
|
803
|
-
npx musubix security fix ./src # スキャン→修正
|
|
804
|
-
npx musubix security fix ./src --dry-run # プレビューのみ
|
|
805
|
-
npx musubix security fix ./src --verify # Z3検証付き
|
|
806
|
-
|
|
807
|
-
# コンプライアンスレポート
|
|
808
|
-
npx musubix security compliance ./src --standard owasp
|
|
809
|
-
npx musubix security compliance ./src --output report.html
|
|
810
|
-
```
|
|
811
|
-
|
|
812
|
-
---
|
|
813
|
-
|
|
814
|
-
## 7. YATA統合
|
|
815
|
-
|
|
816
|
-
### 7.1 セキュリティ知識グラフ
|
|
817
|
-
|
|
818
|
-
```turtle
|
|
819
|
-
@prefix sec: <http://musubix.dev/security#> .
|
|
820
|
-
@prefix vuln: <http://musubix.dev/vulnerabilities#> .
|
|
821
|
-
|
|
822
|
-
# 脆弱性タイプ
|
|
823
|
-
vuln:SQLInjection a sec:VulnerabilityType ;
|
|
824
|
-
sec:cwe "CWE-89" ;
|
|
825
|
-
sec:owasp "A03:2021" ;
|
|
826
|
-
sec:severity "critical" .
|
|
827
|
-
|
|
828
|
-
# 検出パターン
|
|
829
|
-
sec:SQLInjectionPattern a sec:DetectionPattern ;
|
|
830
|
-
sec:detects vuln:SQLInjection ;
|
|
831
|
-
sec:pattern "$DB.query($USER_INPUT)" .
|
|
832
|
-
|
|
833
|
-
# 修正パターン
|
|
834
|
-
sec:ParameterizedQueryFix a sec:FixPattern ;
|
|
835
|
-
sec:fixes vuln:SQLInjection ;
|
|
836
|
-
sec:template "$DB.query($QUERY, [$USER_INPUT])" ;
|
|
837
|
-
sec:successRate 0.95 .
|
|
838
|
-
```
|
|
839
|
-
|
|
840
|
-
### 7.2 学習フィードバック
|
|
841
|
-
|
|
842
|
-
```typescript
|
|
843
|
-
// 修正成功/失敗を学習
|
|
844
|
-
await yata.addTriple({
|
|
845
|
-
subject: `fix:${fixId}`,
|
|
846
|
-
predicate: 'sec:outcome',
|
|
847
|
-
object: result.success ? 'sec:Success' : 'sec:Failure',
|
|
848
|
-
});
|
|
849
|
-
|
|
850
|
-
// パターンの成功率更新
|
|
851
|
-
await securityPatterns.updateSuccessRate(pattern.id, result);
|
|
852
|
-
```
|
|
853
|
-
|
|
854
|
-
---
|
|
855
|
-
|
|
856
|
-
## 8. 実装スケジュール
|
|
857
|
-
|
|
858
|
-
### Phase 1: Foundation (Week 1-2)
|
|
859
|
-
|
|
860
|
-
| タスク | 優先度 | 担当 |
|
|
861
|
-
|--------|--------|------|
|
|
862
|
-
| パッケージ構造作成 | P0 | - |
|
|
863
|
-
| 型定義 | P0 | - |
|
|
864
|
-
| ルールエンジン基盤 | P0 | - |
|
|
865
|
-
| OWASP Top 10ルール (P0分) | P0 | - |
|
|
866
|
-
|
|
867
|
-
### Phase 2: Core Analyzers (Week 3-4)
|
|
868
|
-
|
|
869
|
-
| タスク | 優先度 | 担当 |
|
|
870
|
-
|--------|--------|------|
|
|
871
|
-
| VulnerabilityScanner | P0 | - |
|
|
872
|
-
| TaintAnalyzer | P0 | - |
|
|
873
|
-
| SecretsDetector | P0 | - |
|
|
874
|
-
| DependencyAuditor | P1 | - |
|
|
875
|
-
|
|
876
|
-
### Phase 3: Fix Pipeline (Week 5-6)
|
|
877
|
-
|
|
878
|
-
| タスク | 優先度 | 担当 |
|
|
879
|
-
|--------|--------|------|
|
|
880
|
-
| FixGenerator (LLM) | P0 | - |
|
|
881
|
-
| FixVerifier (Z3) | P0 | - |
|
|
882
|
-
| FixApplier | P1 | - |
|
|
883
|
-
| YATA統合 | P1 | - |
|
|
884
|
-
|
|
885
|
-
### Phase 4: Polish (Week 7-8)
|
|
886
|
-
|
|
887
|
-
| タスク | 優先度 | 担当 |
|
|
888
|
-
|--------|--------|------|
|
|
889
|
-
| MCPツール | P0 | - |
|
|
890
|
-
| CLIコマンド | P0 | - |
|
|
891
|
-
| テスト (>90%カバレッジ) | P0 | - |
|
|
892
|
-
| ドキュメント | P1 | - |
|
|
893
|
-
|
|
894
|
-
---
|
|
895
|
-
|
|
896
|
-
## 9. テスト計画
|
|
897
|
-
|
|
898
|
-
### 9.1 ユニットテスト
|
|
899
|
-
|
|
900
|
-
| モジュール | テスト数 (目標) |
|
|
901
|
-
|-----------|---------------|
|
|
902
|
-
| TaintAnalyzer | 50+ |
|
|
903
|
-
| VulnerabilityScanner | 80+ |
|
|
904
|
-
| RuleEngine | 40+ |
|
|
905
|
-
| FixPipeline | 60+ |
|
|
906
|
-
| DependencyAuditor | 30+ |
|
|
907
|
-
| SecretsDetector | 30+ |
|
|
908
|
-
| **合計** | **290+** |
|
|
909
|
-
|
|
910
|
-
### 9.2 統合テスト
|
|
911
|
-
|
|
912
|
-
- 実際の脆弱性コード(OWASP WebGoat、DVWA)でのテスト
|
|
913
|
-
- 偽陽性/偽陰性率の測定
|
|
914
|
-
- 修正パイプラインのE2Eテスト
|
|
915
|
-
|
|
916
|
-
### 9.3 ベンチマーク
|
|
917
|
-
|
|
918
|
-
| 指標 | 目標値 |
|
|
919
|
-
|------|--------|
|
|
920
|
-
| 検出率(True Positive) | >90% |
|
|
921
|
-
| 偽陽性率(False Positive) | <5% |
|
|
922
|
-
| 修正成功率 | >80% |
|
|
923
|
-
| スキャン速度 | <10s/1000行 |
|
|
924
|
-
|
|
925
|
-
---
|
|
926
|
-
|
|
927
|
-
## 10. 成功指標
|
|
928
|
-
|
|
929
|
-
| 指標 | v1.8.0目標 |
|
|
930
|
-
|------|-----------|
|
|
931
|
-
| OWASP Top 10 カバレッジ | 100% |
|
|
932
|
-
| CWE Top 25 カバレッジ | 80% |
|
|
933
|
-
| 修正検証成功率 | >80% |
|
|
934
|
-
| テストカバレッジ | >90% |
|
|
935
|
-
| ドキュメント完成度 | 100% |
|
|
936
|
-
|
|
937
|
-
---
|
|
938
|
-
|
|
939
|
-
**© 2026 MUSUBIX Project**
|