threatpulse-cli 1.0.0__tar.gz
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.
- threatpulse_cli-1.0.0/LICENSE +21 -0
- threatpulse_cli-1.0.0/PKG-INFO +223 -0
- threatpulse_cli-1.0.0/README.md +202 -0
- threatpulse_cli-1.0.0/pyproject.toml +52 -0
- threatpulse_cli-1.0.0/setup.cfg +4 -0
- threatpulse_cli-1.0.0/tests/test_threat_pulse.py +289 -0
- threatpulse_cli-1.0.0/threat_pulse/__init__.py +17 -0
- threatpulse_cli-1.0.0/threat_pulse/__main__.py +7 -0
- threatpulse_cli-1.0.0/threat_pulse/cache.py +119 -0
- threatpulse_cli-1.0.0/threat_pulse/cli.py +282 -0
- threatpulse_cli-1.0.0/threat_pulse/detector.py +136 -0
- threatpulse_cli-1.0.0/threat_pulse/enrichers/__init__.py +13 -0
- threatpulse_cli-1.0.0/threat_pulse/enrichers/abuseipdb.py +69 -0
- threatpulse_cli-1.0.0/threat_pulse/enrichers/base.py +23 -0
- threatpulse_cli-1.0.0/threat_pulse/enrichers/malware.py +80 -0
- threatpulse_cli-1.0.0/threat_pulse/enrichers/network.py +81 -0
- threatpulse_cli-1.0.0/threat_pulse/formatters.py +140 -0
- threatpulse_cli-1.0.0/threat_pulse/heuristics.py +167 -0
- threatpulse_cli-1.0.0/threat_pulse/models.py +67 -0
- threatpulse_cli-1.0.0/threat_pulse/scorer.py +170 -0
- threatpulse_cli-1.0.0/threatpulse_cli.egg-info/PKG-INFO +223 -0
- threatpulse_cli-1.0.0/threatpulse_cli.egg-info/SOURCES.txt +24 -0
- threatpulse_cli-1.0.0/threatpulse_cli.egg-info/dependency_links.txt +1 -0
- threatpulse_cli-1.0.0/threatpulse_cli.egg-info/entry_points.txt +3 -0
- threatpulse_cli-1.0.0/threatpulse_cli.egg-info/requires.txt +3 -0
- threatpulse_cli-1.0.0/threatpulse_cli.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Aleksei Zharkou
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: threatpulse-cli
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Fast, zero-dependency Threat Intelligence & IOC enrichment CLI for SOC Analysts & Incident Responders
|
|
5
|
+
Author-email: Aleksei Zharkou <lyosha.zharkov.98@mail.ru>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Keywords: cybersecurity,threat-intelligence,ioc-enrichment,soc,blue-team,incident-response,abuseipdb,virustotal,mitre-attack,wazuh
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
12
|
+
Classifier: Topic :: Security
|
|
13
|
+
Classifier: Intended Audience :: Information Technology
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Requires-Python: >=3.10
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
License-File: LICENSE
|
|
18
|
+
Provides-Extra: dev
|
|
19
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
20
|
+
Dynamic: license-file
|
|
21
|
+
|
|
22
|
+
# ThreatPulse (v1.0.0) โก
|
|
23
|
+
|
|
24
|
+
[](https://github.com/Voobrazhenie21-lab/threat-pulse/actions/workflows/ci.yml)
|
|
25
|
+
[](#2-running-via-docker-)
|
|
26
|
+
[](https://python.org)
|
|
27
|
+
[](https://voobrazhenie21-lab.github.io/threat-pulse/)
|
|
28
|
+
[](https://opensource.org/licenses/MIT)
|
|
29
|
+
[-success.svg)](pyproject.toml)
|
|
30
|
+
[](https://attack.mitre.org/)
|
|
31
|
+
[](https://wazuh.com)
|
|
32
|
+
|
|
33
|
+
**Fast, zero-dependency Threat Intelligence & IOC enrichment CLI built for SOC Analysts, Incident Responders, and Blue Teams.**
|
|
34
|
+
|
|
35
|
+
> ๐ **[Try the Interactive Live Web Demo on GitHub Pages](https://voobrazhenie21-lab.github.io/threat-pulse/)**
|
|
36
|
+
|
|
37
|
+
```text
|
|
38
|
+
_____ _ _ _____ _
|
|
39
|
+
|_ _| | | | | __ \ | |
|
|
40
|
+
| | | |__ _ __ ___ __ _ ___| |_| |__) | _| |___ ___
|
|
41
|
+
| | | '_ \| '__/ _ \/ _` |/ _ \ __| ___/ | | | / __|/ _ \
|
|
42
|
+
| | | | | | | | __/ (_| | __/ |_| | | |_| | \__ \ __/
|
|
43
|
+
\_/ |_| |_|_| \___|\__,_|\___|\__|_| \__,_|_|___/\___|
|
|
44
|
+
SOC Threat Intelligence & IOC Triage Engine
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## ๐ฏ The Problem ThreatPulse Solves
|
|
50
|
+
|
|
51
|
+
In enterprise Security Operations Centers (SOC L1/L2), analysts suffer from severe **alert fatigue**. Every incoming alert contains raw IPs, domains, and file hashes. Manually copying and pasting indicators into VirusTotal, AbuseIPDB, and WHOIS takes several minutes per ticket.
|
|
52
|
+
|
|
53
|
+
**ThreatPulse** automates this triage pipeline in milliseconds:
|
|
54
|
+
1. **Auto-Detects IOC Types:** IPv4, IPv6, Domains, URLs, MD5, SHA1, SHA256.
|
|
55
|
+
2. **Offline Heuristics & Fast Filtering:** Instantly recognizes **RFC 1918** private corporate IPs (`10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`), Loopback, and Bogon spaces to prevent false-positive alarms.
|
|
56
|
+
3. **Shannon Entropy (DGA Detection):** Analyzes domain name character entropy to flag machine-generated botnet domains (DGA).
|
|
57
|
+
4. **Threat Intelligence Aggregation:** Correlates AbuseIPDB scores, Tor exit nodes, and active internet research scanners (Shadowserver, Censys, Shodan).
|
|
58
|
+
5. **Malware Signature Database:** Identifies critical ransomware and credential dumping signatures (WannaCry, Mimikatz, Cobalt Strike, China Chopper).
|
|
59
|
+
6. **MITRE ATT&CK Mapping & Actionable Advice:** Generates direct tactical recommendations for containment.
|
|
60
|
+
7. **Wazuh CDB List Exporter:** Exports malicious IOCs directly into Wazuh CDB list syntax (`ioc:verdict:tags`) for instant SIEM rule lookups!
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## ๐๏ธ Architecture
|
|
65
|
+
|
|
66
|
+
```mermaid
|
|
67
|
+
flowchart TD
|
|
68
|
+
A["Raw IOC or File (IP, Hash, Domain, URL)"] --> B["IOC Detector & Refanger"]
|
|
69
|
+
B --> C{"IOC Type"}
|
|
70
|
+
|
|
71
|
+
C -->|"IP (v4/v6)"| D["IP Heuristics (RFC1918 / Bogons)"]
|
|
72
|
+
C -->|"Domain"| E["Domain Heuristics (Shannon Entropy DGA, TLDs)"]
|
|
73
|
+
C -->|"URL"| F["URL Heuristics (Raw IP, Executables)"]
|
|
74
|
+
C -->|"Hash"| G["Malware Signature Engine (Mimikatz, WannaCry, C2)"]
|
|
75
|
+
|
|
76
|
+
D --> H["Network & TI Enricher (PTR, Tor, AbuseIPDB)"]
|
|
77
|
+
E --> H
|
|
78
|
+
F --> H
|
|
79
|
+
G --> I["Risk Scoring Engine (0-100)"]
|
|
80
|
+
H --> I
|
|
81
|
+
|
|
82
|
+
I --> J["MITRE ATT&CK Correlation"]
|
|
83
|
+
J --> K["Local SQLite Cache (~/.threatpulse_cache.db)"]
|
|
84
|
+
K --> L["Output Formatters"]
|
|
85
|
+
L --> M1["ANSI Terminal Card / Table"]
|
|
86
|
+
L --> M2["JSON (SIEM/SOAR)"]
|
|
87
|
+
L --> M3["Markdown Report"]
|
|
88
|
+
L --> M4["Wazuh CDB List (/var/ossec/etc/lists/)"]
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## ๐ Quick Start
|
|
94
|
+
|
|
95
|
+
### 1. Installation (via uv or pip)
|
|
96
|
+
|
|
97
|
+
ThreatPulse is completely self-contained using Python's standard library. No third-party runtime dependencies required!
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
# Clone the repository
|
|
101
|
+
git clone https://github.com/Voobrazhenie21-lab/threat-pulse.git
|
|
102
|
+
cd threat-pulse
|
|
103
|
+
|
|
104
|
+
# Install with uv
|
|
105
|
+
uv venv
|
|
106
|
+
uv pip install -e .
|
|
107
|
+
|
|
108
|
+
# Or run directly via Python
|
|
109
|
+
python -m threat_pulse --version
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### 2. Running via Docker ๐ณ
|
|
113
|
+
|
|
114
|
+
Run ThreatPulse in an isolated, secure non-root Alpine container without needing Python installed on the host system:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
# Build the lightweight Alpine image (~45MB)
|
|
118
|
+
docker build -t threat-pulse .
|
|
119
|
+
|
|
120
|
+
# Inspect a single indicator directly
|
|
121
|
+
docker run --rm threat-pulse 185.220.101.5
|
|
122
|
+
|
|
123
|
+
# Analyze a log file and export to Wazuh CDB list format
|
|
124
|
+
docker run --rm -v $(pwd):/data threat-pulse -f /data/samples/sample_iocs.txt --format wazuh-cdb
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### 3. Single Indicator Inspection
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
# Analyze a known Tor Exit Node
|
|
131
|
+
threat-pulse 185.220.101.5
|
|
132
|
+
|
|
133
|
+
# Analyze a malware hash (Mimikatz)
|
|
134
|
+
threat-pulse a60c52bb53a5c0b89cf53dc5bb7c2c129219b16e4ee7d9c6e3b5e43a9b1c9d2f
|
|
135
|
+
|
|
136
|
+
# Analyze a suspicious DGA domain
|
|
137
|
+
threat-pulse xkjqpw987dfghk123498.top
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### 4. Batch Triage from Log Files
|
|
141
|
+
|
|
142
|
+
Extract all IOCs from an access log, firewall dump, or ticket export and render a summary table:
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
threat-pulse -f samples/sample_iocs.txt --format table
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### 5. Exporting to Wazuh SIEM CDB Lists
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
threat-pulse -f samples/sample_iocs.txt --format wazuh-cdb -o /var/ossec/etc/lists/threat_pulse.cdb
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### 6. Quick Defanging & Refanging Helpers
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
# Defang a dangerous URL for safe sharing
|
|
158
|
+
threat-pulse --defang http://malicious-site.com/payload.exe
|
|
159
|
+
# Output: hxxp://malicious-site[.]com/payload.exe
|
|
160
|
+
|
|
161
|
+
# Refang back to canonical form
|
|
162
|
+
threat-pulse --refang hxxps://c2-botnet[.]xyz/beacon
|
|
163
|
+
# Output: https://c2-botnet.xyz/beacon
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## ๐ Terminal Output Example
|
|
169
|
+
|
|
170
|
+
```text
|
|
171
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
172
|
+
โ ThreatPulse IOC Report [IPV4]
|
|
173
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
|
|
174
|
+
โ Indicator: 185[.]220[.]101[.]5 (raw: 185.220.101.5)
|
|
175
|
+
โ Risk Level: HIGH (85/100)
|
|
176
|
+
โ Verdict: High Risk Indicator
|
|
177
|
+
โ Tags: #Tor-Exit-Node #Anonymizer
|
|
178
|
+
โ MITRE ATT&CK:
|
|
179
|
+
โ โข T1090.003: Multi-hop Proxy: Tor
|
|
180
|
+
โ Intelligence Details:
|
|
181
|
+
โ โข Reverse DNS: tor-exit-5.relay.org
|
|
182
|
+
โ SOC Action: Isolate traffic, block domain/IP at proxy, verify if any endpoint established persistent C2 connection.
|
|
183
|
+
โ Timestamp: 2026-10-14T21:10:00Z (live analysis)
|
|
184
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## โ๏ธ Configuration & API Keys
|
|
190
|
+
|
|
191
|
+
ThreatPulse works **100% out of the box** using offline heuristics, local signature matching, and reverse DNS.
|
|
192
|
+
|
|
193
|
+
To enable live **AbuseIPDB** API lookups:
|
|
194
|
+
```bash
|
|
195
|
+
export ABUSEIPDB_API_KEY="your_api_key_here"
|
|
196
|
+
# Or pass directly:
|
|
197
|
+
threat-pulse 1.2.3.4 --api-key "your_api_key_here"
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## ๐งช Testing
|
|
203
|
+
|
|
204
|
+
Comprehensive test suite covering heuristics, entropy, MITRE mapping, SQLite caching, and formatters:
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
uv run pytest tests/ -v
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## ๐ค Author
|
|
213
|
+
|
|
214
|
+
**Aleksei Zharkou**
|
|
215
|
+
- **GitHub:** [@Voobrazhenie21-lab](https://github.com/Voobrazhenie21-lab)
|
|
216
|
+
- **LinkedIn:** [Aleksei Zharkou](https://www.linkedin.com/in/aleksei-zharkou/)
|
|
217
|
+
- **Portfolio:** [voobrazhenie21-lab.github.io](https://voobrazhenie21-lab.github.io/)
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## ๐ License
|
|
222
|
+
|
|
223
|
+
This project is licensed under the [MIT License](LICENSE).
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# ThreatPulse (v1.0.0) โก
|
|
2
|
+
|
|
3
|
+
[](https://github.com/Voobrazhenie21-lab/threat-pulse/actions/workflows/ci.yml)
|
|
4
|
+
[](#2-running-via-docker-)
|
|
5
|
+
[](https://python.org)
|
|
6
|
+
[](https://voobrazhenie21-lab.github.io/threat-pulse/)
|
|
7
|
+
[](https://opensource.org/licenses/MIT)
|
|
8
|
+
[-success.svg)](pyproject.toml)
|
|
9
|
+
[](https://attack.mitre.org/)
|
|
10
|
+
[](https://wazuh.com)
|
|
11
|
+
|
|
12
|
+
**Fast, zero-dependency Threat Intelligence & IOC enrichment CLI built for SOC Analysts, Incident Responders, and Blue Teams.**
|
|
13
|
+
|
|
14
|
+
> ๐ **[Try the Interactive Live Web Demo on GitHub Pages](https://voobrazhenie21-lab.github.io/threat-pulse/)**
|
|
15
|
+
|
|
16
|
+
```text
|
|
17
|
+
_____ _ _ _____ _
|
|
18
|
+
|_ _| | | | | __ \ | |
|
|
19
|
+
| | | |__ _ __ ___ __ _ ___| |_| |__) | _| |___ ___
|
|
20
|
+
| | | '_ \| '__/ _ \/ _` |/ _ \ __| ___/ | | | / __|/ _ \
|
|
21
|
+
| | | | | | | | __/ (_| | __/ |_| | | |_| | \__ \ __/
|
|
22
|
+
\_/ |_| |_|_| \___|\__,_|\___|\__|_| \__,_|_|___/\___|
|
|
23
|
+
SOC Threat Intelligence & IOC Triage Engine
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## ๐ฏ The Problem ThreatPulse Solves
|
|
29
|
+
|
|
30
|
+
In enterprise Security Operations Centers (SOC L1/L2), analysts suffer from severe **alert fatigue**. Every incoming alert contains raw IPs, domains, and file hashes. Manually copying and pasting indicators into VirusTotal, AbuseIPDB, and WHOIS takes several minutes per ticket.
|
|
31
|
+
|
|
32
|
+
**ThreatPulse** automates this triage pipeline in milliseconds:
|
|
33
|
+
1. **Auto-Detects IOC Types:** IPv4, IPv6, Domains, URLs, MD5, SHA1, SHA256.
|
|
34
|
+
2. **Offline Heuristics & Fast Filtering:** Instantly recognizes **RFC 1918** private corporate IPs (`10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`), Loopback, and Bogon spaces to prevent false-positive alarms.
|
|
35
|
+
3. **Shannon Entropy (DGA Detection):** Analyzes domain name character entropy to flag machine-generated botnet domains (DGA).
|
|
36
|
+
4. **Threat Intelligence Aggregation:** Correlates AbuseIPDB scores, Tor exit nodes, and active internet research scanners (Shadowserver, Censys, Shodan).
|
|
37
|
+
5. **Malware Signature Database:** Identifies critical ransomware and credential dumping signatures (WannaCry, Mimikatz, Cobalt Strike, China Chopper).
|
|
38
|
+
6. **MITRE ATT&CK Mapping & Actionable Advice:** Generates direct tactical recommendations for containment.
|
|
39
|
+
7. **Wazuh CDB List Exporter:** Exports malicious IOCs directly into Wazuh CDB list syntax (`ioc:verdict:tags`) for instant SIEM rule lookups!
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## ๐๏ธ Architecture
|
|
44
|
+
|
|
45
|
+
```mermaid
|
|
46
|
+
flowchart TD
|
|
47
|
+
A["Raw IOC or File (IP, Hash, Domain, URL)"] --> B["IOC Detector & Refanger"]
|
|
48
|
+
B --> C{"IOC Type"}
|
|
49
|
+
|
|
50
|
+
C -->|"IP (v4/v6)"| D["IP Heuristics (RFC1918 / Bogons)"]
|
|
51
|
+
C -->|"Domain"| E["Domain Heuristics (Shannon Entropy DGA, TLDs)"]
|
|
52
|
+
C -->|"URL"| F["URL Heuristics (Raw IP, Executables)"]
|
|
53
|
+
C -->|"Hash"| G["Malware Signature Engine (Mimikatz, WannaCry, C2)"]
|
|
54
|
+
|
|
55
|
+
D --> H["Network & TI Enricher (PTR, Tor, AbuseIPDB)"]
|
|
56
|
+
E --> H
|
|
57
|
+
F --> H
|
|
58
|
+
G --> I["Risk Scoring Engine (0-100)"]
|
|
59
|
+
H --> I
|
|
60
|
+
|
|
61
|
+
I --> J["MITRE ATT&CK Correlation"]
|
|
62
|
+
J --> K["Local SQLite Cache (~/.threatpulse_cache.db)"]
|
|
63
|
+
K --> L["Output Formatters"]
|
|
64
|
+
L --> M1["ANSI Terminal Card / Table"]
|
|
65
|
+
L --> M2["JSON (SIEM/SOAR)"]
|
|
66
|
+
L --> M3["Markdown Report"]
|
|
67
|
+
L --> M4["Wazuh CDB List (/var/ossec/etc/lists/)"]
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## ๐ Quick Start
|
|
73
|
+
|
|
74
|
+
### 1. Installation (via uv or pip)
|
|
75
|
+
|
|
76
|
+
ThreatPulse is completely self-contained using Python's standard library. No third-party runtime dependencies required!
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# Clone the repository
|
|
80
|
+
git clone https://github.com/Voobrazhenie21-lab/threat-pulse.git
|
|
81
|
+
cd threat-pulse
|
|
82
|
+
|
|
83
|
+
# Install with uv
|
|
84
|
+
uv venv
|
|
85
|
+
uv pip install -e .
|
|
86
|
+
|
|
87
|
+
# Or run directly via Python
|
|
88
|
+
python -m threat_pulse --version
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### 2. Running via Docker ๐ณ
|
|
92
|
+
|
|
93
|
+
Run ThreatPulse in an isolated, secure non-root Alpine container without needing Python installed on the host system:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# Build the lightweight Alpine image (~45MB)
|
|
97
|
+
docker build -t threat-pulse .
|
|
98
|
+
|
|
99
|
+
# Inspect a single indicator directly
|
|
100
|
+
docker run --rm threat-pulse 185.220.101.5
|
|
101
|
+
|
|
102
|
+
# Analyze a log file and export to Wazuh CDB list format
|
|
103
|
+
docker run --rm -v $(pwd):/data threat-pulse -f /data/samples/sample_iocs.txt --format wazuh-cdb
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### 3. Single Indicator Inspection
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
# Analyze a known Tor Exit Node
|
|
110
|
+
threat-pulse 185.220.101.5
|
|
111
|
+
|
|
112
|
+
# Analyze a malware hash (Mimikatz)
|
|
113
|
+
threat-pulse a60c52bb53a5c0b89cf53dc5bb7c2c129219b16e4ee7d9c6e3b5e43a9b1c9d2f
|
|
114
|
+
|
|
115
|
+
# Analyze a suspicious DGA domain
|
|
116
|
+
threat-pulse xkjqpw987dfghk123498.top
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### 4. Batch Triage from Log Files
|
|
120
|
+
|
|
121
|
+
Extract all IOCs from an access log, firewall dump, or ticket export and render a summary table:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
threat-pulse -f samples/sample_iocs.txt --format table
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### 5. Exporting to Wazuh SIEM CDB Lists
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
threat-pulse -f samples/sample_iocs.txt --format wazuh-cdb -o /var/ossec/etc/lists/threat_pulse.cdb
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### 6. Quick Defanging & Refanging Helpers
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# Defang a dangerous URL for safe sharing
|
|
137
|
+
threat-pulse --defang http://malicious-site.com/payload.exe
|
|
138
|
+
# Output: hxxp://malicious-site[.]com/payload.exe
|
|
139
|
+
|
|
140
|
+
# Refang back to canonical form
|
|
141
|
+
threat-pulse --refang hxxps://c2-botnet[.]xyz/beacon
|
|
142
|
+
# Output: https://c2-botnet.xyz/beacon
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## ๐ Terminal Output Example
|
|
148
|
+
|
|
149
|
+
```text
|
|
150
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
151
|
+
โ ThreatPulse IOC Report [IPV4]
|
|
152
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
|
|
153
|
+
โ Indicator: 185[.]220[.]101[.]5 (raw: 185.220.101.5)
|
|
154
|
+
โ Risk Level: HIGH (85/100)
|
|
155
|
+
โ Verdict: High Risk Indicator
|
|
156
|
+
โ Tags: #Tor-Exit-Node #Anonymizer
|
|
157
|
+
โ MITRE ATT&CK:
|
|
158
|
+
โ โข T1090.003: Multi-hop Proxy: Tor
|
|
159
|
+
โ Intelligence Details:
|
|
160
|
+
โ โข Reverse DNS: tor-exit-5.relay.org
|
|
161
|
+
โ SOC Action: Isolate traffic, block domain/IP at proxy, verify if any endpoint established persistent C2 connection.
|
|
162
|
+
โ Timestamp: 2026-10-14T21:10:00Z (live analysis)
|
|
163
|
+
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## โ๏ธ Configuration & API Keys
|
|
169
|
+
|
|
170
|
+
ThreatPulse works **100% out of the box** using offline heuristics, local signature matching, and reverse DNS.
|
|
171
|
+
|
|
172
|
+
To enable live **AbuseIPDB** API lookups:
|
|
173
|
+
```bash
|
|
174
|
+
export ABUSEIPDB_API_KEY="your_api_key_here"
|
|
175
|
+
# Or pass directly:
|
|
176
|
+
threat-pulse 1.2.3.4 --api-key "your_api_key_here"
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## ๐งช Testing
|
|
182
|
+
|
|
183
|
+
Comprehensive test suite covering heuristics, entropy, MITRE mapping, SQLite caching, and formatters:
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
uv run pytest tests/ -v
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## ๐ค Author
|
|
192
|
+
|
|
193
|
+
**Aleksei Zharkou**
|
|
194
|
+
- **GitHub:** [@Voobrazhenie21-lab](https://github.com/Voobrazhenie21-lab)
|
|
195
|
+
- **LinkedIn:** [Aleksei Zharkou](https://www.linkedin.com/in/aleksei-zharkou/)
|
|
196
|
+
- **Portfolio:** [voobrazhenie21-lab.github.io](https://voobrazhenie21-lab.github.io/)
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## ๐ License
|
|
201
|
+
|
|
202
|
+
This project is licensed under the [MIT License](LICENSE).
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "threatpulse-cli"
|
|
7
|
+
version = "1.0.0"
|
|
8
|
+
description = "Fast, zero-dependency Threat Intelligence & IOC enrichment CLI for SOC Analysts & Incident Responders"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
license = "MIT"
|
|
12
|
+
authors = [
|
|
13
|
+
{ name = "Aleksei Zharkou", email = "lyosha.zharkov.98@mail.ru" }
|
|
14
|
+
]
|
|
15
|
+
classifiers = [
|
|
16
|
+
"Programming Language :: Python :: 3",
|
|
17
|
+
"Programming Language :: Python :: 3.10",
|
|
18
|
+
"Programming Language :: Python :: 3.11",
|
|
19
|
+
"Programming Language :: Python :: 3.12",
|
|
20
|
+
"Topic :: Security",
|
|
21
|
+
"Intended Audience :: Information Technology",
|
|
22
|
+
"Operating System :: OS Independent"
|
|
23
|
+
]
|
|
24
|
+
keywords = [
|
|
25
|
+
"cybersecurity",
|
|
26
|
+
"threat-intelligence",
|
|
27
|
+
"ioc-enrichment",
|
|
28
|
+
"soc",
|
|
29
|
+
"blue-team",
|
|
30
|
+
"incident-response",
|
|
31
|
+
"abuseipdb",
|
|
32
|
+
"virustotal",
|
|
33
|
+
"mitre-attack",
|
|
34
|
+
"wazuh"
|
|
35
|
+
]
|
|
36
|
+
dependencies = []
|
|
37
|
+
|
|
38
|
+
[project.optional-dependencies]
|
|
39
|
+
dev = [
|
|
40
|
+
"pytest>=7.0"
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
[project.scripts]
|
|
44
|
+
threat-pulse = "threat_pulse.cli:main"
|
|
45
|
+
tp = "threat_pulse.cli:main"
|
|
46
|
+
|
|
47
|
+
[tool.setuptools.packages.find]
|
|
48
|
+
include = ["threat_pulse*"]
|
|
49
|
+
|
|
50
|
+
[tool.pytest.ini_options]
|
|
51
|
+
testpaths = ["tests"]
|
|
52
|
+
pythonpath = ["."]
|