File size: 4,001 Bytes
ddd9009
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
---

title: actionable
app_file: app.py
sdk: gradio
sdk_version: 5.44.1
---

## SOC Dashboard – Live Random Alert Streaming

A lightweight SOC-style dashboard that streams synthetic security alerts, enriches them with threat intel and GeoIP, classifies them using an LLM, and surfaces recommended actions. Built with Gradio for a simple, responsive UI.

### Features
- **Live alert stream**: Generates up to 10 synthetic logs per session.
- **Enrichment**: Adds IP reputation and GeoIP context.
- **AI classification**: Uses a Gemini-compatible OpenAI client to categorize alerts, set priority, and suggest actions.
- **Export**: Saves the current session’s alerts to `alerts_export.csv`.
- **Playbooks**: Simulates actions (e.g., block IP, quarantine host) based on AI suggestions.

### Repository Structure
- `app.py`: Gradio UI and app orchestration.
- `config.py`: Environment loading and Gemini-compatible OpenAI client initialization.
- `enrichment.py`: Threat intel and GeoIP enrichment.
- `llm_classifier.py`: Prompting and parsing for LLM classification.
- `log_generator.py`: Synthetic log generation.
- `playbook.py`: Maps AI-recommended actions to simulated playbooks.
- `utils.py`: Helper utilities for cleaning/parsing model output.
- `alerts_export.csv`: Created after exporting from the UI.

### Requirements
- Python 3.9+
- Pip

Python dependencies are listed in `requirements.txt`:
- `pandas`
- `gradio`
- `python-dotenv`
- `openai`

### Environment Variables
Create a `.env` file in the project root with your Gemini API key. This project uses the OpenAI SDK pointed at Google’s Gemini-compatible endpoint.

Example `.env`:
```

GOOGLE_API_KEY=your_gemini_api_key_here

```

### Installation
1. Clone or download this repository.
2. Open a terminal in the project directory.
3. Create and activate a virtual environment (recommended).
   - Windows (PowerShell):
     ```powershell

     py -m venv .venv

     .\.venv\Scripts\Activate.ps1

     ```

   - macOS/Linux (bash):

     ```bash

     python3 -m venv .venv

     source .venv/bin/activate

     ```

4. Install dependencies:

   ```bash

   pip install -r requirements.txt

   ```

5. Create the `.env` file as shown above.


### Running Locally
Start the Gradio app:
```bash

python app.py

```
Gradio will print a local URL (e.g., `http://127.0.0.1:7860`). Open it in your browser.

### Using the App
1. Click **Start Streaming** to begin generating alerts (up to 10 per session).
2. Watch the table populate with enriched and classified alerts.
3. Click **Stop Streaming** to halt early.
4. Click **Export Alerts** to save the current table to `alerts_export.csv` in the project root, then download it from the UI.
5. Click **Run Playbooks** to simulate actions suggested by the AI; results appear in the text box.

### How It Works
- `log_generator.generate_random_log` produces timestamped events with random IPs and messages.
- `enrichment.enrich_alert` augments each log with IP reputation and GeoIP info from in-memory lookups.
- `llm_classifier.classify_alert` sends a structured prompt to the Gemini-compatible endpoint via the OpenAI SDK and returns `{ category, priority, action }`.
- `app.py` builds the session table and wires up the Gradio UI for starting/stopping, exporting, and running playbooks.

### Troubleshooting
- **No output / classification errors**: Verify `.env` contains a valid `GOOGLE_API_KEY` and you have network connectivity.
- **Package errors**: Re-create/activate the virtual environment and re-run `pip install -r requirements.txt`.
- **Port in use**: Set a different port when launching Gradio:
  ```python

  # in app.py main block

  demo.queue().launch(server_port=7861)

  ```

### Notes
- Exported CSV only includes alerts from the current session.
- The playbook executions are simulated; no real systems are modified.
- IP reputation and GeoIP data are in-memory examples for demonstration.