Skip to main content
Glama
luqni

Shifr Shield

by luqni
README.md
# πŸ›‘οΈ Shifr Shield β€” Managed MCP Data Gateway Platform
### *Zero-Trust Data Firewall & Security Gateway for AI Assistants & LLMs*

[![Laravel](https://img.shields.io/badge/Laravel-12.x-FF2D20?style=for-the-badge&logo=laravel&logoColor=white)](https://laravel.com)
[![PostgreSQL](https://img.shields.io/badge/PostgreSQL-16-336791?style=for-the-badge&logo=postgresql&logoColor=white)](https://www.postgresql.org/)
[![TypeScript](https://img.shields.io/badge/TypeScript-5.x-3178C6?style=for-the-badge&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
[![Model Context Protocol](https://img.shields.io/badge/MCP-SDK_v1.6-8A2BE2?style=for-the-badge)](https://modelcontextprotocol.io/)
[![Tabler UI](https://img.shields.io/badge/UI-Tabler_Core_100%25-0054a6?style=for-the-badge)](https://tabler.io/)
[![License](https://img.shields.io/badge/License-MIT-green.svg?style=for-the-badge)](LICENSE)

---

## πŸ“Œ Executive Summary & Problem Statement

Menghubungkan AI Assistant (seperti **Claude Desktop, Cursor, Copilot, atau Agen LLM**) langsung ke database operasional perusahaan menimbulkan risiko keamanan dan kepatuhan yang sangat kritis:
1. **Risiko Destruktif (Halusinasi AI):** AI dapat tanpa sengaja menghasilkan query mutasi data (`UPDATE`, `DELETE`, `DROP TABLE`, `TRUNCATE`).
2. **Kebocoran Data Sensitif (PII & Finansial):** LLM menyerap nomor kartu kredit, hash password, atau informasi gaji ke dalam konteks memorinya.
3. **Database Crash (DoS / Memory Exhaustion):** AI menjalankan query `SELECT *` jutaan baris tanpa klausa `LIMIT`.
4. **Blind Spot Kepatuhan:** Tidak adanya jejak audit (*audit trail*) query apa saja yang dieksekusi oleh AI ke database internal.

**Shifr Shield** hadir sebagai **Managed MCP Data Gateway** yang berfungsi sebagai **Firewall Data & Proksi Cerdas**. Shifr Shield berdiri di antara AI Assistant dan database, memastikan setiap query diperiksa, dibatasi, disanitasi, disensor (*data masking*), dan dicatat secara *real-time*.

---

## πŸ—οΈ Architecture Overview

```
               β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
               β”‚    Client Layer: Claude Desktop / Cursor / CLI Agent   β”‚
               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                           β”‚ MCP Protocol over SSE
                                           β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              Shifr Shield Data Plane (/mcp-gateway) β€” Node.js & TypeScript               β”‚
β”‚                                                                                         β”‚
β”‚  - Endpoint: GET /sse & POST /messages                                                   β”‚
β”‚  - Autentikasi: Bearer Token dinamis terhadap tabel api_keys (SHA-256 Hash)            β”‚
β”‚  - Tools Terdaftar: get_schema_metadata, run_readonly_query                              β”‚
β”‚  - Security & Enforcement Engine:                                                       β”‚
β”‚      * Read-Only Enforcer (Memblokir INSERT, UPDATE, DELETE, DROP, ALTER, TRUNCATE)     β”‚
β”‚      * Whitelist Tables Guard (Hanya tabel diizinkan yang dapat dibaca)                 β”‚
β”‚      * Automatic LIMIT Injection (Menyisipkan batas baris otomatis)                     β”‚
β”‚      * Dynamic Data Masking Engine (Full Redact [REDACTED] & Partial Masking)           β”‚
β”‚      * Direct Audit Logger (Streaming catatan audit langsung ke PostgreSQL)             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                            β”‚ Read-Only SQL                    β”‚ Writes Audit Logs
                            β–Ό                                  β–Ό
               β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
               β”‚ Guarded Database Target β”‚        β”‚   Control Plane DB      β”‚
               β”‚   (Remote/Local PG)     β”‚        β”‚   (PostgreSQL:          β”‚
               β”‚                         β”‚        β”‚    shifr_shield)        β”‚
               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–²β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                              β”‚
                                                  Eloquent ORMβ”‚ Management
                                                              β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚          Shifr Shield Web Admin & Control Plane β€” Laravel 12 + Tabler UI                β”‚
β”‚                                                                                         β”‚
β”‚  - Dashboard (/dashboard): Metrik queries, latency, connection status (.card-sm)        β”‚
β”‚  - Database Sources (/databases): Tambah koneksi & AJAX ping test connection             β”‚
β”‚  - Security Policies (/databases/{id}/policies): Whitelist tabel & repeater masking formβ”‚
β”‚  - API Keys (/api-keys): One-time key display & snippet claude_desktop_config.json      β”‚
β”‚  - Audit Logs (/audit-logs): Tabler pagination & inspeksi Query Mentah vs Sanitasi      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

---

## 🌟 Fitur Utama

### 1. Control Plane & Web Admin Panel (Laravel 12 + Tabler UI)
- **100% Tabler UI Design System:** Menggunakan murni class HTML bawaan Tabler Core (`.page`, `.page-wrapper`, `.card`, `.card-sm`, `.table-vcenter`, `.badge.bg-success-lt`, `.status-dot-animated`) tanpa inline CSS baru.
- **Dashboard Overview (`/dashboard`):** Menampilkan metrik real-time: Total Queries, Blocked Queries, Active DB Connections, dan Average Latency (ms), serta 5 riwayat query audit terbaru.
- **Database Sources (`/databases`):** Manajemen koneksi PostgreSQL. Dilengkapi tombol **"Test Connection"** interaktif (AJAX ping langsung) yang memperbarui badge status seketika tanpa reload halaman.
- **Security & Policy Rules (`/databases/{id}/policies`):** 
  - **Table Whitelist:** Memilih tabel mana yang diizinkan untuk diakses AI. Query ke tabel lain otomatis diblokir.
  - **Column Data Masking Repeater (Alpine.js):** Konfigurasi masking kolom sensitif:
    - `Full Redact`: Nilai kolom diubah 100% menjadi `[REDACTED]`.
    - `Partial Mask`: Sensor sebagian (contoh: `b***o@enterprise.id` atau `41β€’β€’β€’β€’β€’β€’β€’β€’4444`).
  - **Max Query Limit:** Batas maksimum hasil baris (default: 50).
- **API Keys & MCP Setup (`/api-keys`):** Generate token gateway dengan format prefix aman (`shifr_live_β€’β€’β€’β€’`). Dilengkapi modal *One-Time Display* dan snippet konfigurasi `claude_desktop_config.json` siap salin.
- **Audit Logs (`/audit-logs`):** Jejak audit menyeluruh dengan filter pencarian dan modal detail untuk membandingkan **Query Mentah (Input AI)** vs **Query Hasil Sanitasi (Guarded Output)**.

### 2. Data Plane Engine (Node.js + TypeScript MCP Gateway)
- **SSE Transport Server:** Mendengarkan koneksi Server-Sent Events pada `http://localhost:3000/sse` sesuai spesifikasi `@modelcontextprotocol/sdk`.
- **Bearer Token Authentication:** Memvalidasi token header `Authorization: Bearer shifr_live_***` secara langsung terhadap tabel `api_keys` di PostgreSQL.
- **Exposed MCP Tools:**
  - `get_schema_metadata`: Memberikan daftar tabel dan tipe kolom yang **hanya** diizinkan oleh whitelist policy.
  - `run_readonly_query`: Menjalankan query SQL dengan guardrail ketat.
- **Strict Read-Only Enforcement:** Memblokir seketika kata kunci mutasi (`INSERT`, `UPDATE`, `DELETE`, `DROP`, `ALTER`, `TRUNCATE`, `CREATE`, `REPLACE`, `GRANT`, `REVOKE`, dll.) dan *stacked queries* (pemisah `;`).
- **Automatic Limit Injection:** Jika AI tidak menyertakan `LIMIT`, gateway menyisipkan batasan aman secara otomatis.
- **Zero-Trust Password Decryption:** Password database target didekripsi secara aman di memori menggunakan `APP_KEY` Laravel (AES-256-CBC).

### 3. Natural Language Testing Agent CLI (`npm run ask`)
Memungkinkan pengguna menguji eksekusi query menggunakan **Bahasa Indonesia / bahasa manusia non-teknis** langsung dari terminal tanpa harus meng-install Claude Desktop.

---

## πŸ“ Struktur Direktori Proyek

```
riset-mcp/
β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ Http/Controllers/
β”‚   β”‚   β”œβ”€β”€ ApiKeyController.php          # Manajemen token gateway & snippet Claude
β”‚   β”‚   β”œβ”€β”€ AuditLogController.php         # Riwayat query & inspeksi sanitasi
β”‚   β”‚   β”œβ”€β”€ DashboardController.php        # Ringkasan metrik gateway
β”‚   β”‚   β”œβ”€β”€ DatabaseSourceController.php   # Manajemen koneksi PG & test connection
β”‚   β”‚   └── SecurityPolicyController.php   # Whitelist tabel & aturan masking
β”‚   └── Models/
β”‚       β”œβ”€β”€ ApiKey.php                     # Model token gateway (SHA-256 hash)
β”‚       β”œβ”€β”€ DatabaseSource.php             # Model koneksi target (AES-256 password)
β”‚       β”œβ”€β”€ GatewayAuditLog.php            # Model catatan audit eksekusi
β”‚       └── SecurityPolicy.php             # Model aturan whitelist & masking
β”œβ”€β”€ database/
β”‚   β”œβ”€β”€ migrations/
β”‚   β”‚   └── 2026_10_14_000001_create_shifr_shield_tables.php
β”‚   └── seeders/
β”‚       └── DatabaseSeeder.php             # Seeder data demo & tabel demo_customers
β”œβ”€β”€ resources/
β”‚   β”œβ”€β”€ css/app.css                        # Import Tabler Core CSS
β”‚   β”œβ”€β”€ js/app.js                          # Import Tabler Core JS & Alpine.js
β”‚   └── views/
β”‚       β”œβ”€β”€ api-keys/index.blade.php       # Halaman API Keys & MCP instruction
β”‚       β”œβ”€β”€ audit-logs/index.blade.php     # Halaman Audit Logs & detail modal
β”‚       β”œβ”€β”€ components/
β”‚       β”‚   β”œβ”€β”€ tabler-badge.blade.php     # Komponen Tabler badge dinamis
β”‚       β”‚   └── tabler-card.blade.php      # Komponen Tabler card standar
β”‚       β”œβ”€β”€ dashboard/index.blade.php      # Halaman Dashboard utama
β”‚       β”œβ”€β”€ databases/index.blade.php      # Halaman daftar koneksi database
β”‚       β”œβ”€β”€ layouts/app.blade.php          # Layout utama Tabler UI
β”‚       β”œβ”€β”€ partials/pagination.blade.php  # Pagination Blade berbasis Tabler
β”‚       └── policies/edit.blade.php        # Form whitelist tabel & masking repeater
β”œβ”€β”€ routes/
β”‚   └── web.php                            # Rute aplikasi web
β”œβ”€β”€ tests/
β”‚   └── Feature/ExampleTest.php            # Unit & Feature Test suite (100% Passed)
β”‚
└── mcp-gateway/                           # πŸ›‘οΈ Data Plane Engine (TypeScript)
    β”œβ”€β”€ src/
    β”‚   β”œβ”€β”€ crypto.ts                      # SHA-256 hashing & Laravel AES-256 decrypter
    β”‚   β”œβ”€β”€ db.ts                          # PG connection pooling & audit log recorder
    β”‚   β”œβ”€β”€ index.ts                       # Express SSE server (/sse & /messages)
    β”‚   β”œβ”€β”€ mcp-server.ts                  # MCP Tools: get_schema_metadata, run_readonly_query
    β”‚   └── policy.ts                      # Query validator, auto-limit, data masking engine
    β”œβ”€β”€ ask-cli.ts                         # Natural language query tester (Bahasa Indonesia)
    β”œβ”€β”€ query-cli.ts                       # Direct SQL query tester
    β”œβ”€β”€ test-gateway.ts                    # Automated integration test suite
    β”œβ”€β”€ package.json
    └── tsconfig.json
```

---

## βš™οΈ Prasyarat Sistem

- **PHP:** >= 8.2 (ekstensi: `pdo_pgsql`, `openssl`, `mbstring`)
- **Composer:** >= 2.x
- **Node.js:** >= 20.x & **npm** >= 10.x
- **PostgreSQL:** >= 14.x

---

## πŸš€ Panduan Instalasi & Setup

### 1. Clone Repository & Konfigurasi Lingkungan
```bash
git clone <url-repo-anda> riset-mcp
cd riset-mcp

# Setup environment Laravel
cp .env.example .env
```

Pastikan konfigurasi PostgreSQL di `.env` sudah sesuai:
```env
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=shifr_shield
DB_USERNAME=postgres
DB_PASSWORD=your_postgres_password

MCP_GATEWAY_URL=http://localhost:3000
```

### 2. Install Dependensi & Migrasi Database
```bash
# Install paket PHP
composer install

# Generate App Key (kunci enkripsi AES-256)
php artisan key:generate

# Jalankan migrasi dan isi data demo (demo_customers, policy, dan API Key bawaan)
php artisan migrate --seed

# Install asset frontend Tabler & Alpine.js
npm install
npm run build
```

### 3. Setup MCP Gateway (Data Plane)
```bash
cd mcp-gateway
cp .env.example .env
```

Sesuaikan file `mcp-gateway/.env` (pastikan `APP_KEY` sama persis dengan `APP_KEY` pada file root `.env`):
```env
PORT=3000
SHIFR_DB_HOST=127.0.0.1
SHIFR_DB_PORT=5432
SHIFR_DB_NAME=shifr_shield
SHIFR_DB_USER=postgres
SHIFR_DB_PASSWORD=your_postgres_password
APP_KEY=base64:UL/uXWWYcM13SsElMcSamVtGD4RYboJMBhpPGN03I1Q=
```

Install dependensi TypeScript MCP Gateway:
```bash
npm install
npm run build
```

---

## πŸƒ Cara Menjalankan Layanan

Buka 2 tab terminal:

### Terminal 1 β€” Jalankan Web Admin Laravel
```bash
cd riset-mcp
php artisan serve --port=8000
```
Akses di browser: **[http://localhost:8000](http://localhost:8000)**

### Terminal 2 β€” Jalankan MCP Data Gateway
```bash
cd riset-mcp/mcp-gateway
npm start
```
Gateway akan aktif pada:
- **SSE Transport Endpoint:** `http://localhost:3000/sse`
- **Health Check:** `http://localhost:3000/health`

---

## πŸ§ͺ Panduan Pengujian & Demo Fitur

Anda memiliki 4 opsi mudah untuk menguji Shifr Shield:

### Opsi A: Natural Language CLI Tester (Bahasa Indonesia) πŸ—£οΈ
Anda bisa menguji kemampuan gateway dengan bahasa manusia langsung di terminal:
```bash
cd mcp-gateway

# Query data pelanggan aktif
npm run ask "tampilkan semua pelanggan aktif"

# Menghitung agregasi data
npm run ask "berapa total jumlah pelanggan kita?"

# Menampilkan pelanggan pending
npm run ask "siapa saja pelanggan yang masih pending?"

# Menguji pencegahan mutasi berbahaya
npm run ask "tolong hapus data pelanggan yang suspended"
```

### Opsi B: Direct SQL CLI Tester ⚑
Menjalankan SQL query langsung melalui gateway SSE:
```bash
cd mcp-gateway

# Test query read-only (akan di-masking otomatis)
npm run query "SELECT * FROM demo_customers"

# Test pembatalan mutasi
npm run query "DELETE FROM demo_customers WHERE id = 1"

# Test pembatalan tabel di luar whitelist
npm run query "SELECT * FROM pg_database"
```

### Opsi C: Anthropic MCP Inspector (Browser GUI) 🌐
Uji antarmuka visual MCP tanpa Claude Desktop:
```bash
npx @modelcontextprotocol/inspector
```
1. Masukkan URL: `http://localhost:3000/sse`
2. Masukkan Header: `Authorization: Bearer shifr_live_claudedesktoptestkey2026alpha`
3. Klik **Connect** dan jalankan tool `run_readonly_query`.

### Opsi D: Menghubungkan ke Claude Desktop πŸ€–
Buka file `claude_desktop_config.json` di komputer Anda:
- **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
- **Linux:** `~/.config/Claude/claude_desktop_config.json`

Tambahkan blok konfigurasi berikut:
```json
{
  "mcpServers": {
    "shifr-shield": {
      "url": "http://localhost:3000/sse",
      "headers": {
        "Authorization": "Bearer shifr_live_claudedesktoptestkey2026alpha"
      }
    }
  }
}
```
*Restart Claude Desktop. Claude kini memiliki akses aman ke PostgreSQL yang diawasi oleh Shifr Shield.*

---

## πŸ”’ Security Model & Guardrails

| Guardrail | Aturan Penegakan | Contoh Respon Gateway |
|---|---|---|
| **Query Mutasi** | Memblokir `INSERT`, `UPDATE`, `DELETE`, `DROP`, `ALTER`, `TRUNCATE`, dll. | `[SHIFR SHIELD SECURITY BLOCKED]: Blocked: Only read-only queries are permitted` |
| **Stacked Query** | Memblokir query ganda dengan tanda titik koma (`;`). | `[SHIFR SHIELD SECURITY BLOCKED]: Multiple stacked queries are strictly prohibited` |
| **Table Whitelist** | Hanya tabel terdaftar di policy (`demo_customers`, `users`) yang dapat dibaca. | `[SHIFR SHIELD SECURITY BLOCKED]: Table 'pg_database' is not in the whitelist` |
| **Limit Injection** | Otomatis menambahkan atau meng-clamp klausa `LIMIT` ke nilai maksimum policy. | Query `SELECT * FROM tbl` otomatis diubah menjadi `SELECT * FROM tbl LIMIT 25` |
| **Column Masking** | Menyensor data sensitif sebelum dikirim ke AI. | `credit_card` &rarr; `[REDACTED]`<br>`email` &rarr; `b***o@enterprise.id` |
| **Audit Logging** | Mencatat setiap query, durasi (ms), status, dan sanitasi query ke database. | Tercatat di tabel `gateway_audit_logs` & dapat diinspeksi di `/audit-logs` |

---

## πŸ“Š Hasil Pengujian Otomatis (Test Suite)

1. **Laravel Feature & Unit Tests:**
   ```bash
   php artisan test
   ```
   *Output:* **`Tests: 7 passed (14 assertions)`** β€” 100% pengujian rute dashboard, databases, policies, API keys, dan audit logs lolos verifikasi.

2. **MCP Gateway Automated Integration Tests:**
   ```bash
   cd mcp-gateway && npx tsx test-gateway.ts
   ```
   *Output:* **`πŸŽ‰ ALL MCP GATEWAY INTEGRATION TESTS PASSED PERFECTLY!`** β€” Menguji autentikasi 401, metadata skema, masking data, pencegahan mutasi DROP, dan penolakan tabel non-whitelist.

---

## πŸ—ΊοΈ Roadmap Pengembangan (Next Milestones)

- [ ] **Multi-Database Support:** Dukungan konektor MySQL, Microsoft SQL Server, dan Snowflake.
- [ ] **Role-Based Access Control (RBAC):** Kebijakan policy per role pengguna AI.
- [ ] **Live Alerting:** Webhook notifikasi Slack / Discord untuk percobaan mutasi berbahaya.
- [ ] **Redis Caching Layer:** Caching hasil query baca yang identik untuk menghemat resource database.

---

## πŸ“„ Lisensi

Shifr Shield dikembangkan di bawah lisensi [MIT License](LICENSE).