Skip to main content
Glama
ongjin

Security Scanner MCP

by ongjin
README.md
# πŸ”’ Security Scanner MCP

AIκ°€ μƒμ„±ν•œ μ½”λ“œμ˜ λ³΄μ•ˆ 취약점을 μžλ™μœΌλ‘œ κ²€μΆœν•˜κ³ , μˆ˜μ •κΉŒμ§€ μ œμ•ˆν•˜λŠ” **μ§€λŠ₯ν˜• λ³΄μ•ˆ νŒŒνŠΈλ„ˆ** MCP μ„œλ²„μž…λ‹ˆλ‹€.

[![npm version](https://img.shields.io/npm/v/security-scanner-mcp)](https://www.npmjs.com/package/security-scanner-mcp)
[![npm downloads](https://img.shields.io/npm/dm/security-scanner-mcp)](https://www.npmjs.com/package/security-scanner-mcp)
[![Documentation](https://img.shields.io/badge/docs-GitHub%20Pages-blue)](https://ongjin.github.io/security-scanner-mcp)
![OWASP](https://img.shields.io/badge/OWASP-Top%2010-red)
![License](https://img.shields.io/badge/license-MIT-blue)
![Node](https://img.shields.io/badge/node-%3E%3D18-green)

**[ν•œκ΅­μ–΄](#korean)** | **[English](README.en.md)** | **[πŸ“š Documentation](https://ongjin.github.io/security-scanner-mcp)**

## Demo

<!-- Add your demo GIF here -->
![Security Scanner Demo](./docs/demo.gif)

## μ™œ ν•„μš”ν•œκ°€μš”?

AIκ°€ μƒμ„±ν•œ μ½”λ“œμ—λŠ” λ³΄μ•ˆ 취약점이 **322% 더 λ§Žλ‹€**λŠ” 연ꡬ κ²°κ³Όκ°€ μžˆμŠ΅λ‹ˆλ‹€.

이 MCPλŠ” λ‹¨μˆœ 검사λ₯Ό λ„˜μ–΄μ„œ:
- πŸ’‘ **μžλ™μœΌλ‘œ μˆ˜μ • μ½”λ“œλ₯Ό μ œμ•ˆ**ν•˜κ³ 
- πŸ—οΈ **IaC (Dockerfile, Kubernetes, Terraform)κΉŒμ§€ 검사**ν•˜λ©°
- πŸ“Š **Mermaid λ‹€μ΄μ–΄κ·Έλž¨κ³Ό SARIF 리포트λ₯Ό 생성**ν•˜κ³ 
- 🐳 **Docker μƒŒλ“œλ°•μŠ€μ—μ„œ μ•ˆμ „ν•˜κ²Œ μ‹€ν–‰**ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ½”λ“œλ₯Ό μ»€λ°‹ν•˜κΈ° μ „, ν΄λΌμš°λ“œμ— λ°°ν¬ν•˜κΈ° μ „, **ν•œ 번만 κ²€μ‚¬ν•˜λ©΄ λ©λ‹ˆλ‹€.**

## ✨ μ£Όμš” κΈ°λŠ₯

### 🎯 μ½”λ“œ λ³΄μ•ˆ μŠ€μΊ”
| Tool | μ„€λͺ… |
|------|------|
| `scan-security` | **μ’…ν•© λ³΄μ•ˆ μŠ€μΊ”** - λͺ¨λ“  검사λ₯Ό ν•œλ²ˆμ— μˆ˜ν–‰ |
| `scan-secrets` | ν•˜λ“œμ½”λ”©λœ API ν‚€, λΉ„λ°€λ²ˆν˜Έ, 토큰 κ²€μΆœ |
| `scan-injection` | SQL/NoSQL/Command Injection 취약점 검사 |
| `scan-xss` | Cross-Site Scripting 취약점 검사 |
| `scan-crypto` | μ•”ν˜Έν™” 취약점 (μ•½ν•œ ν•΄μ‹œ, λΆˆμ•ˆμ „ν•œ 랜덀 λ“±) |
| `scan-auth` | 인증/μ„Έμ…˜ 취약점 (JWT, μΏ ν‚€, CORS λ“±) |
| `scan-path` | 파일/경둜 취약점 (Path Traversal, μ—…λ‘œλ“œ λ“±) |
| `scan-dependencies` | package.json λ“±μ—μ„œ μ·¨μ•½ν•œ μ˜μ‘΄μ„± 검사 |

#### 1.2.0 AST 기반 JS/TS 탐지

JavaScript/TypeScript μŠ€μΊλ„ˆλŠ” 이제 ASTλ₯Ό νŒŒμ‹±ν•΄ λ‹¨μˆœ λ¬Έμžμ—΄ νŒ¨ν„΄μœΌλ‘œ λ†“μΉ˜λ˜ 흐름을 μΆ”μ ν•©λ‹ˆλ‹€.

- ν•¨μˆ˜ νŒŒλΌλ―Έν„° taint: `h(req.body.x)`κ°€ `function h(input) { db.query(input); }` μ•ˆμ˜ sinkκΉŒμ§€ 이어지면 νƒμ§€ν•©λ‹ˆλ‹€.
- 닀단계 λ³€μˆ˜ 흐름: `req.body` β†’ `a` β†’ `b` β†’ sink ν˜•νƒœλ₯Ό νƒμ§€ν•©λ‹ˆλ‹€.
- `innerHTML`은 동적 κ°’ ν• λ‹Ήλ§Œ λ³΄κ³ ν•˜κ³ , λ¦¬ν„°λŸ΄ HTML λ¬Έμžμ—΄μ€ false positive둜 λ³΄κ³ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
- `res.setHeader('Access-Control-Allow-Origin', '*')` ν˜•νƒœμ˜ CORS μ™€μΌλ“œμΉ΄λ“œλ„ νƒμ§€ν•©λ‹ˆλ‹€.
- Python / Java / Go 및 JS/TS parse μ‹€νŒ¨ νŒŒμΌμ€ κΈ°μ‘΄ regex 경둜λ₯Ό 계속 μ‚¬μš©ν•©λ‹ˆλ‹€.

### πŸ—οΈ Infrastructure as Code (IaC) μŠ€μΊ”
| Tool | μ„€λͺ… |
|------|------|
| `scan-iac` | **Dockerfile, Kubernetes, Terraform** λ³΄μ•ˆ 검사 |

- **Dockerfile**: CIS Docker Benchmark 기반 15개 κ·œμΉ™
- **Kubernetes**: Pod Security Standards (PSS) 기반 13개 κ·œμΉ™
- **Terraform**: AWS/GCP/Azure λ³΄μ•ˆ μ„€μ • 15개 κ·œμΉ™

### πŸ› οΈ μžλ™ μˆ˜μ • & κ³ κΈ‰ κΈ°λŠ₯
| Tool | μ„€λͺ… |
|------|------|
| `get-fix-suggestion` | 취약점에 λŒ€ν•œ **μˆ˜μ •λœ μ½”λ“œ μžλ™ 생성** |
| `generate-security-report` | **Mermaid λ‹€μ΄μ–΄κ·Έλž¨ + SARIF + CVE 정보** μ’…ν•© 리포트 |
| `scan-in-sandbox` | **Docker 격리 ν™˜κ²½**μ—μ„œ μ•ˆμ „ν•˜κ²Œ μŠ€μΊ” μ‹€ν–‰ |

## μ„€μΉ˜

### npmμ—μ„œ μ„€μΉ˜ (ꢌμž₯)

```bash
npm install -g security-scanner-mcp
```

### λ˜λŠ” μ†ŒμŠ€μ—μ„œ λΉŒλ“œ

```bash
git clone https://github.com/ongjin/security-scanner-mcp.git
cd security-scanner-mcp
npm install && npm run build
```

## Claude Code에 등둝

```bash
# npm μ „μ—­ μ„€μΉ˜ ν›„
claude mcp add --scope project security-scanner -- security-scanner-mcp

# λ˜λŠ” μ†ŒμŠ€μ—μ„œ λΉŒλ“œν•œ 경우
claude mcp add --scope project security-scanner -- node /path/to/security-scanner-mcp/dist/index.js
```

## λΉ λ₯Έ μ„€μ • (도ꡬ μžλ™ ν—ˆμš©)

맀번 도ꡬ μ‚¬μš© μŠΉμΈμ„ λˆ„λ₯΄λŠ” 것이 λ²ˆκ±°λ‘­λ‹€λ©΄, μ•„λž˜ λ°©λ²•μœΌλ‘œ μžλ™ ν—ˆμš©μ„ μ„€μ •ν•˜μ„Έμš”.

### πŸ–₯️ Claude Desktop App μ‚¬μš©μž
1. Claude 앱을 μž¬μ‹œμž‘ν•©λ‹ˆλ‹€.
2. `security-scanner` 도ꡬλ₯Ό μ‚¬μš©ν•˜λŠ” 첫 번째 μ§ˆλ¬Έμ„ λ˜μ§‘λ‹ˆλ‹€.
3. μ•Œλ¦Όμ°½μ΄ 뜨면 **"Always allow requests from this server"** μ²΄ν¬λ°•μŠ€λ₯Ό ν΄λ¦­ν•˜κ³  **Allow**λ₯Ό λˆ„λ₯΄μ„Έμš”.
   (μ΄ν›„μ—λŠ” 묻지 μ•Šκ³  μ‹€ν–‰λ©λ‹ˆλ‹€.)

### ⌨️ Claude Code (CLI) μ‚¬μš©μž
터미널 ν™˜κ²½(`claude` λͺ…λ Ήμ–΄)을 μ‚¬μš© 쀑이라면 κΆŒν•œ 관리 λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ„Έμš”.

1. ν„°λ―Έλ„μ—μ„œ `claude`λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.
2. ν”„λ‘¬ν”„νŠΈ μž…λ ₯창에 `/permissions`λ₯Ό μž…λ ₯ν•˜κ³  μ—”ν„°λ₯Ό μΉ©λ‹ˆλ‹€.
3. **Global Permissions** (λ˜λŠ” Project Permissions) > **Allowed Tools**λ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
4. `mcp__security-scanner__scan-security`만 μž…λ ₯ν•˜κ±°λ‚˜, λͺ¨λ“  도ꡬλ₯Ό ν—ˆμš©ν•˜λ €λ©΄ `mcp__security-scanner__*`λ₯Ό μž…λ ₯ν•©λ‹ˆλ‹€.

> πŸ’‘ **Tip**: λŒ€λΆ€λΆ„μ˜ 경우 **`scan-security`** ν•˜λ‚˜λ§Œ ν—ˆμš©ν•΄λ„ μΆ©λΆ„ν•©λ‹ˆλ‹€. 이 도ꡬ가 λͺ¨λ“  λ³΄μ•ˆ 검사λ₯Ό ν†΅ν•©ν•΄μ„œ μˆ˜ν–‰ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

## μ‚¬μš© μ˜ˆμ‹œ

### πŸ“ κΈ°λ³Έ μ½”λ“œ μŠ€μΊ”

```
λ‚˜: 이 μ½”λ“œ λ³΄μ•ˆ κ²€μ‚¬ν•΄μ€˜

const apiKey = "AIzaSyC1234567890abcdef";
const query = `SELECT * FROM users WHERE id = ${userId}`;
element.innerHTML = userInput;

Claude: [scan-security 호좜]

## ⚠️ λ³΄μ•ˆ 취약점 발견!

### πŸ”΄ Critical (1개)
- **Google API Key** (라인 1)
  - Google API Keyκ°€ μ½”λ“œμ— ν•˜λ“œμ½”λ”©λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€
  - πŸ’‘ ν•΄κ²°μ±…: ν™˜κ²½λ³€μˆ˜λ‘œ κ΄€λ¦¬ν•˜κ³ , API ν‚€ μ œν•œ μ„€μ •ν•˜κΈ°

### 🟠 High (2개)
- **Template Literal SQL** (라인 2)
  - ν…œν”Œλ¦Ώ λ¦¬ν„°λŸ΄λ‘œ SQL 쿼리에 λ³€μˆ˜λ₯Ό μ‚½μž…ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€
  - πŸ’‘ ν•΄κ²°μ±…: Prepared Statementλ₯Ό μ‚¬μš©ν•˜μ„Έμš”

- **innerHTML Assignment** (라인 3)
  - innerHTML에 동적 값을 ν• λ‹Ήν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€
  - πŸ’‘ ν•΄κ²°μ±…: textContentλ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜ DOMPurify둜 sanitizeν•˜μ„Έμš”
```

### πŸ› οΈ μžλ™ μˆ˜μ • λ°›κΈ°

```
λ‚˜: innerHTML 취약점 μˆ˜μ • μ½”λ“œ λ³΄μ—¬μ€˜

Claude: [get-fix-suggestion 호좜]

## βœ… μˆ˜μ •λœ μ½”λ“œ

// ❌ Before (μ·¨μ•½)
element.innerHTML = userInput;

// βœ… After (μ•ˆμ „)
element.textContent = userInput;
// λ˜λŠ” HTML이 ν•„μš”ν•œ 경우:
import DOMPurify from 'dompurify';
element.innerHTML = DOMPurify.sanitize(userInput);
```

### πŸ—οΈ IaC 파일 검사

```
λ‚˜: Dockerfile λ³΄μ•ˆ κ²€μ‚¬ν•΄μ€˜

Claude: [scan-iac 호좜]

## 🐳 Dockerfile λ³΄μ•ˆ 취약점 발견!

### πŸ”΄ Critical (2개)
- **DOC001**: root μ‚¬μš©μžλ‘œ μ‹€ν–‰
  - πŸ’‘ ν•΄κ²°μ±…: USER λͺ…λ ΉμœΌλ‘œ non-root μ‚¬μš©μž μ„€μ •

- **DOC005**: ν•˜λ“œμ½”λ”©λœ μ‹œν¬λ¦Ώ
  - πŸ’‘ ν•΄κ²°μ±…: ARG와 λΉŒλ“œ μ‹œν¬λ¦Ώ μ‚¬μš©

### 🟠 High (3개)
- **DOC002**: latest νƒœκ·Έ μ‚¬μš©
  - πŸ’‘ ν•΄κ²°μ±…: λͺ…μ‹œμ  버전 νƒœκ·Έ μ‚¬μš© (예: node:20-alpine)
...
```

### πŸ“Š μ’…ν•© 리포트 생성

```
λ‚˜: 전체 λ³΄μ•ˆ 리포트λ₯Ό Mermaid λ‹€μ΄μ–΄κ·Έλž¨μœΌλ‘œ λ³΄μ—¬μ€˜

Claude: [generate-security-report 호좜]

# πŸ›‘οΈ λ³΄μ•ˆ μŠ€μΊ” λŒ€μ‹œλ³΄λ“œ

## πŸ“Š 전체 μš”μ•½
총 **8개**의 취약점이 λ°œκ²¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

## 🎯 심각도별 뢄포
```mermaid
pie title 심각도별 취약점 뢄포
    "πŸ”΄ Critical" : 2
    "🟠 High" : 3
    "🟑 Medium" : 2
    "🟒 Low" : 1
\```

## βš”οΈ κ°€λŠ₯ν•œ 곡격 μ‹œλ‚˜λ¦¬μ˜€
```mermaid
flowchart TD
    Start([곡격자]) --> Recon[μ •μ°°]
    Recon --> Secrets[ν•˜λ“œμ½”λ”©λœ<br/>μ‹œν¬λ¦Ώ 발견]
    Secrets --> Access[인증 우회]
    ...
\```

+ SARIF 리포트 (GitHub Code Scanning ν˜Έν™˜)
+ CVE/OWASP 상세 정보
```

### 🐳 μƒŒλ“œλ°•μŠ€μ—μ„œ μ•ˆμ „ν•˜κ²Œ μ‹€ν–‰

```
λ‚˜: 이 μ½”λ“œλ₯Ό μƒŒλ“œλ°•μŠ€μ—μ„œ μ•ˆμ „ν•˜κ²Œ κ²€μ‚¬ν•΄μ€˜

Claude: [scan-in-sandbox 호좜]

## 🐳 μƒŒλ“œλ°•μŠ€ μŠ€μΊ” κ²°κ³Ό

βœ… **μŠ€μΊ” μ™„λ£Œ**

### πŸ”’ μƒŒλ“œλ°•μŠ€ μ„€μ •
- **λ©”λͺ¨λ¦¬ μ œν•œ**: 512MB
- **CPU μ œν•œ**: 0.5 μ½”μ–΄
- **νƒ€μž„μ•„μ›ƒ**: 30000ms
- **λ„€νŠΈμ›Œν¬**: λΉ„ν™œμ„±ν™”
- **κΆŒν•œ**: μ΅œμ†Œ κΆŒν•œ
```

## κ²€μΆœν•˜λŠ” 취약점

### πŸ”‘ ν•˜λ“œμ½”λ”©λœ μ‹œν¬λ¦Ώ
- AWS Access Key / Secret Key
- Google API Key / OAuth Secret
- GitHub Token / Slack Token
- Database Connection String
- Private Key (RSA, EC λ“±)
- JWT Token
- Kakao / Naver API Key
- Stripe / Twilio API Key

### πŸ’‰ Injection
- SQL Injection (λ¬Έμžμ—΄ μ—°κ²°, ν…œν”Œλ¦Ώ λ¦¬ν„°λŸ΄, ν•¨μˆ˜ νŒŒλΌλ―Έν„° 흐름)
- NoSQL Injection (MongoDB, tainted query object)
- Command Injection (exec, spawn, execSync)
- LDAP Injection

### 🌐 XSS
- dangerouslySetInnerHTML (React)
- innerHTML / outerHTML (동적 κ°’ 탐지, λ¦¬ν„°λŸ΄ HTML은 μ œμ™Έ)
- jQuery .html() / Vue v-html
- eval() / new Function()
- document.write()

### πŸ” μ•”ν˜Έν™”
- μ•½ν•œ ν•΄μ‹œ (MD5, SHA1)
- μ•ˆμ „ν•˜μ§€ μ•Šμ€ 랜덀 (Math.random)
- 닀단계 taintκ°€ λ“€μ–΄κ°„ 평문 λΉ„λ°€λ²ˆν˜Έ μ €μž₯
- ν•˜λ“œμ½”λ”©λœ μ•”ν˜Έν™” ν‚€/IV
- SSL μΈμ¦μ„œ 검증 λΉ„ν™œμ„±ν™”
- μ·¨μ•½ν•œ TLS 버전 (1.0, 1.1)

### πŸ”’ 인증/μ„Έμ…˜
- JWT μ„€μ • 였λ₯˜ (none μ•Œκ³ λ¦¬μ¦˜, 만료 μ—†μŒ)
- μ•ˆμ „ν•˜μ§€ μ•Šμ€ μΏ ν‚€ μ„€μ •
- CORS μ™€μΌλ“œμΉ΄λ“œ (`setHeader` / `header` 포함)
- μ•½ν•œ λΉ„λ°€λ²ˆν˜Έ μ •μ±…

### πŸ“ 파일/경둜
- Path Traversal (닀단계 λ³€μˆ˜/ν•¨μˆ˜ νŒŒλΌλ―Έν„° 흐름 포함)
- μœ„ν—˜ν•œ 파일 μ‚­μ œ
- μ•ˆμ „ν•˜μ§€ μ•Šμ€ 파일 μ—…λ‘œλ“œ
- Zip Slip (Java)
- Pickle 역직렬화 (Python)

### πŸ—οΈ Infrastructure as Code
**Dockerfile** (CIS Docker Benchmark):
- root μ‚¬μš©μžλ‘œ μ‹€ν–‰
- ν•˜λ“œμ½”λ”©λœ μ‹œν¬λ¦Ώ
- latest νƒœκ·Έ μ‚¬μš©
- λΆˆν•„μš”ν•œ 포트 λ…ΈμΆœ
- ν—¬μŠ€μ²΄ν¬ λˆ„λ½

**Kubernetes** (Pod Security Standards):
- Privileged μ»¨ν…Œμ΄λ„ˆ
- Root μ‹€ν–‰
- Host λ„€νŠΈμ›Œν¬/PID/IPC μ‚¬μš©
- μœ„ν—˜ν•œ Capability μΆ”κ°€
- Resource limit λ―Έμ„€μ •

**Terraform** (Multi-Cloud):
- 곡개 IP ν• λ‹Ή
- μ•”ν˜Έν™” λ―Έμ„€μ •
- λ°©ν™”λ²½ 전체 μ˜€ν”ˆ (0.0.0.0/0)
- Public μ ‘κ·Ό κ°€λŠ₯ λ¦¬μ†ŒμŠ€

### πŸ“¦ μ·¨μ•½ν•œ μ˜μ‘΄μ„±
- npm audit 연동
- Python requirements.txt 검사
- Go go.mod 검사

## 지원 μ–Έμ–΄

- βœ… JavaScript / TypeScript
- βœ… Python
- βœ… Java
- βœ… Go
- βœ… Dockerfile
- βœ… Kubernetes YAML
- βœ… Terraform HCL

## 🎨 리포트 포맷

- **Markdown**: 읽기 μ‰¬μš΄ ν…μŠ€νŠΈ 리포트
- **Mermaid**: μ‹œκ°ν™” λ‹€μ΄μ–΄κ·Έλž¨ (Pie, Bar, Flowchart)
- **SARIF**: GitHub Code Scanning / VS Code ν˜Έν™˜ 포맷
- **CVE Enrichment**: NVD λ°μ΄ν„°λ² μ΄μŠ€ 연동
- **OWASP Mapping**: OWASP Top 10:2021 + CWE λ§€ν•‘

## 🐳 Docker μƒŒλ“œλ°•μŠ€

μ•…μ˜μ μΈ μ½”λ“œλ‘œλΆ€ν„° 호슀트λ₯Ό λ³΄ν˜Έν•˜κΈ° μœ„ν•΄ Docker 격리 ν™˜κ²½μ—μ„œ μŠ€μΊ”μ„ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

### Docker 이미지 μ€€λΉ„

#### Docker Hubμ—μ„œ pull (ꢌμž₯)

```bash
# 미리 λΉŒλ“œλœ 이미지 λ‹€μš΄λ‘œλ“œ (Trivy, GitLeaks, Checkov 포함)
docker pull ongjin/security-scanner-mcp:latest
docker tag ongjin/security-scanner-mcp:latest security-scanner-mcp:latest
```

**ν¬ν•¨λœ μ™ΈλΆ€ λ³΄μ•ˆ 도ꡬ**:
- Trivy v0.50.4 - μ»¨ν…Œμ΄λ„ˆ/IaC 취약점 μŠ€μΊλ„ˆ
- GitLeaks v8.18.4 - μ‹œν¬λ¦Ώ 탐지
- Checkov - Infrastructure as Code λ³΄μ•ˆ μŠ€μΊλ„ˆ

#### μ†ŒμŠ€μ—μ„œ 직접 λΉŒλ“œ (선택사항)

```bash
npm run docker:build
```

> μ°Έκ³ : λΉŒλ“œμ—λŠ” 5-10λΆ„ 정도 μ†Œμš”λ˜λ©°, 이미지 ν¬κΈ°λŠ” μ•½ 500MBμž…λ‹ˆλ‹€.

### μƒŒλ“œλ°•μŠ€μ—μ„œ μŠ€μΊ” μ‹€ν–‰

Claude Codeμ—μ„œ:
```
scan-in-sandbox 호좜
```

**λ³΄μ•ˆ μ„€μ •**:
- λ©”λͺ¨λ¦¬ μ œν•œ: 128MB ~ 2GB
- CPU μ œν•œ: 0.1 ~ 2.0 μ½”μ–΄
- νƒ€μž„μ•„μ›ƒ: 5초 ~ 5λΆ„
- λ„€νŠΈμ›Œν¬: κΈ°λ³Έ λΉ„ν™œμ„±ν™”
- νŒŒμΌμ‹œμŠ€ν…œ: 읽기 μ „μš©
- κΆŒν•œ: μ΅œμ†Œ κΆŒν•œ (no-new-privileges, drop all capabilities)

## 데λͺ¨

```bash
# 데λͺ¨ μ‹€ν–‰
npm run demo
```

## μ•„ν‚€ν…μ²˜

```
src/
β”œβ”€β”€ index.ts                    # MCP μ„œλ²„ (12개 도ꡬ)
β”œβ”€β”€ scanners/                   # μ½”λ“œ μŠ€μΊλ„ˆ (8개)
β”‚   β”œβ”€β”€ secrets.ts
β”‚   β”œβ”€β”€ injection.ts
β”‚   β”œβ”€β”€ xss.ts
β”‚   └── ...
β”œβ”€β”€ iac-scanners/              # IaC μŠ€μΊλ„ˆ (3개)
β”‚   β”œβ”€β”€ dockerfile.ts          # 15개 κ·œμΉ™
β”‚   β”œβ”€β”€ kubernetes.ts          # 13개 κ·œμΉ™
β”‚   └── terraform.ts           # 15개 κ·œμΉ™
β”œβ”€β”€ remediation/               # μžλ™ μˆ˜μ •
β”‚   β”œβ”€β”€ code-fixer.ts          # AST 기반 μ½”λ“œ λ³€ν™˜
β”‚   └── templates/             # μˆ˜μ • ν…œν”Œλ¦Ώ
β”œβ”€β”€ reporting/                 # λ¦¬ν¬νŒ…
β”‚   β”œβ”€β”€ mermaid-generator.ts   # λ‹€μ΄μ–΄κ·Έλž¨ 생성
β”‚   β”œβ”€β”€ sarif-generator.ts     # SARIF 포맷
β”‚   └── markdown-formatter.ts
β”œβ”€β”€ external/                  # μ™ΈλΆ€ API
β”‚   β”œβ”€β”€ cve-lookup.ts          # NVD API 연동
β”‚   └── owasp-database.ts      # OWASP Top 10 DB
└── sandbox/                   # μƒŒλ“œλ°•μŠ€
    └── docker-manager.ts      # Docker μ‹€ν–‰ 관리
```

## πŸ–₯️ CLI λͺ¨λ“œ (CI/CD 톡합)

Claude 없이 λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰ν•  수 μžˆλŠ” CLI λͺ¨λ“œλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. Jenkins, GitHub Actions, GitLab CI λ“± μ–΄λ””μ„œλ“  μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€.

### κΈ°λ³Έ μ‚¬μš©λ²•

```bash
# 파일 μŠ€μΊ”
npx security-scanner-mcp scan ./src/app.js

# 디렉토리 μŠ€μΊ”
npx security-scanner-mcp scan ./src

# κ²°κ³Όλ₯Ό 파일둜 μ €μž₯
npx security-scanner-mcp scan ./src --output report.txt
```

### 좜λ ₯ 포맷

```bash
# JSON 포맷 (νŒŒμ‹±μš©)
npx security-scanner-mcp scan ./src --format json

# SARIF 포맷 (GitHub Code Scanning ν˜Έν™˜)
npx security-scanner-mcp scan ./src --format sarif --output report.sarif
```

### CI/CD μ˜΅μ…˜

```bash
# Critical 취약점 발견 μ‹œ λΉŒλ“œ μ‹€νŒ¨ (exit code 1)
npx security-scanner-mcp scan ./src --fail-on critical

# High 이상 취약점 발견 μ‹œ λΉŒλ“œ μ‹€νŒ¨
npx security-scanner-mcp scan ./src --fail-on high

# νŠΉμ • 파일만 포함
npx security-scanner-mcp scan ./src --include "*.ts,*.js"

# νŠΉμ • 폴더 μ œμ™Έ
npx security-scanner-mcp scan ./src --exclude "node_modules,dist,test"
```

### Jenkins μ˜ˆμ‹œ

```groovy
pipeline {
    agent any
    stages {
        stage('Security Scan') {
            steps {
                sh 'npx security-scanner-mcp scan ./src --format json --output security-report.json --fail-on high'
            }
        }
    }
    post {
        always {
            archiveArtifacts artifacts: 'security-report.json', fingerprint: true
        }
    }
}
```

### GitHub Actions μ˜ˆμ‹œ

```yaml
name: Security Scan
on: [push, pull_request]

jobs:
  security:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Run Security Scan
        run: npx security-scanner-mcp scan ./src --format sarif --output results.sarif --fail-on critical

      - name: Upload SARIF to GitHub
        uses: github/codeql-action/upload-sarif@v2
        with:
          sarif_file: results.sarif
```

### GitLab CI μ˜ˆμ‹œ

```yaml
security_scan:
  stage: test
  script:
    - npx security-scanner-mcp scan ./src --format json --output gl-security-report.json --fail-on high
  artifacts:
    reports:
      security: gl-security-report.json
```

## λ‘œλ“œλ§΅

- [x] OWASP Top 10 기반 검사
- [x] 닀쀑 μ–Έμ–΄ 지원 (JS/TS/Python/Java/Go)
- [x] IaC μŠ€μΊ” (Dockerfile, Kubernetes, Terraform)
- [x] μžλ™ μˆ˜μ • μ œμ•ˆ κΈ°λŠ₯ (AST 기반)
- [x] κ³ κΈ‰ λ¦¬ν¬νŒ… (Mermaid, SARIF)
- [x] μ™ΈλΆ€ 취약점 DB 연동 (NVD, OWASP)
- [x] Docker μƒŒλ“œλ°•μŠ€ μ‹€ν–‰
- [x] CLI λͺ¨λ“œ (CI/CD νŒŒμ΄ν”„λΌμΈ 톡합)
- [ ] GitHub Actions Marketplace 등둝
- [ ] VS Code ν™•μž₯

## κΈ°μ—¬ν•˜κΈ°

PR ν™˜μ˜ν•©λ‹ˆλ‹€! 특히 λ‹€μŒ κΈ°μ—¬λ₯Ό κΈ°λ‹€λ¦½λ‹ˆλ‹€:
- μƒˆλ‘œμš΄ λ³΄μ•ˆ νŒ¨ν„΄ μΆ”κ°€
- λ‹€λ₯Έ μ–Έμ–΄ 지원 (Rust, C#, PHP λ“±)
- IaC κ·œμΉ™ ν™•μž₯ (Ansible, CloudFormation λ“±)
- λ¬Έμ„œ κ°œμ„ 

## λΌμ΄μ„ μŠ€

MIT

---

Made with ❀️ by zerry

**λ‹¨μˆœ μŠ€μΊλ„ˆλ₯Ό λ„˜μ–΄, μ§€λŠ₯ν˜• λ³΄μ•ˆ νŒŒνŠΈλ„ˆλ‘œ.**