changedetection.io-osint-processor 0.0.1__py3-none-any.whl
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.
- changedetection_io_osint_processor-0.0.1.dist-info/METADATA +274 -0
- changedetection_io_osint_processor-0.0.1.dist-info/RECORD +29 -0
- changedetection_io_osint_processor-0.0.1.dist-info/WHEEL +5 -0
- changedetection_io_osint_processor-0.0.1.dist-info/entry_points.txt +2 -0
- changedetection_io_osint_processor-0.0.1.dist-info/licenses/LICENSE +661 -0
- changedetection_io_osint_processor-0.0.1.dist-info/top_level.txt +1 -0
- changedetectionio_osint/__init__.py +22 -0
- changedetectionio_osint/forms.py +289 -0
- changedetectionio_osint/plugin.py +37 -0
- changedetectionio_osint/processor.py +655 -0
- changedetectionio_osint/steps/__init__.py +4 -0
- changedetectionio_osint/steps/base.py +76 -0
- changedetectionio_osint/steps/bgp.py +88 -0
- changedetectionio_osint/steps/dns.py +147 -0
- changedetectionio_osint/steps/dns_scan.py +88 -0
- changedetectionio_osint/steps/dnssec.py +260 -0
- changedetectionio_osint/steps/email_security.py +236 -0
- changedetectionio_osint/steps/http_fingerprint.py +359 -0
- changedetectionio_osint/steps/http_scan.py +31 -0
- changedetectionio_osint/steps/mac_lookup.py +209 -0
- changedetectionio_osint/steps/os_detection.py +245 -0
- changedetectionio_osint/steps/portscan.py +113 -0
- changedetectionio_osint/steps/registry.py +49 -0
- changedetectionio_osint/steps/smtp_fingerprint.py +517 -0
- changedetectionio_osint/steps/ssh_fingerprint.py +310 -0
- changedetectionio_osint/steps/tls_analysis.py +332 -0
- changedetectionio_osint/steps/traceroute.py +127 -0
- changedetectionio_osint/steps/whois_lookup.py +125 -0
- changedetectionio_osint/steps/whois_scan.py +123 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""
|
|
2
|
+
OSINT Reconnaissance Processor for changedetection.io
|
|
3
|
+
|
|
4
|
+
Uses the osint PyPI package for comprehensive reconnaissance.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
# Translation marker for extraction
|
|
8
|
+
def _(x): return x
|
|
9
|
+
processor_description = _('OSINT Reconnaissance (DNS, WHOIS, SSL, Ports)')
|
|
10
|
+
name = _('OSINT Reconnaissance')
|
|
11
|
+
description = _('Comprehensive reconnaissance using OSINT tools (DNS, WHOIS, SSL certificates, port scanning)')
|
|
12
|
+
processor_weight = -50 # Show before text_json_diff
|
|
13
|
+
list_badge_text = "OSINT"
|
|
14
|
+
del _
|
|
15
|
+
|
|
16
|
+
# Processor capabilities (defaults to False unless specified)
|
|
17
|
+
supports_visual_selector = False
|
|
18
|
+
supports_browser_steps = False
|
|
19
|
+
supports_text_filters_and_triggers = True
|
|
20
|
+
supports_text_filters_and_triggers_elements = False
|
|
21
|
+
supports_request_type = False
|
|
22
|
+
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Forms for OSINT Reconnaissance Processor configuration.
|
|
3
|
+
|
|
4
|
+
Fields prefixed with 'processor_config_*' are automatically saved to
|
|
5
|
+
a JSON file in the watch data directory (osint_recon.json).
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from wtforms import (
|
|
9
|
+
BooleanField,
|
|
10
|
+
IntegerField,
|
|
11
|
+
StringField,
|
|
12
|
+
validators
|
|
13
|
+
)
|
|
14
|
+
from wtforms.fields.choices import RadioField
|
|
15
|
+
from flask_babel import lazy_gettext as _l
|
|
16
|
+
|
|
17
|
+
from changedetectionio.forms import processor_text_json_diff_form
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class processor_settings_form(processor_text_json_diff_form):
|
|
21
|
+
"""Form for OSINT Reconnaissance processor settings."""
|
|
22
|
+
|
|
23
|
+
# DNS Configuration
|
|
24
|
+
processor_config_dns_server = StringField(
|
|
25
|
+
_l('DNS Server'),
|
|
26
|
+
validators=[
|
|
27
|
+
validators.Optional(),
|
|
28
|
+
validators.Length(max=100, message=_l('DNS server address is too long'))
|
|
29
|
+
],
|
|
30
|
+
render_kw={"placeholder": "8.8.8.8", "size": "20"}
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
# Execution Mode
|
|
34
|
+
processor_config_scan_mode = RadioField(
|
|
35
|
+
_l('Scan Mode'),
|
|
36
|
+
choices=[
|
|
37
|
+
('serial', _l('Serial (slower, safer, easier to debug)')),
|
|
38
|
+
('parallel', _l('Parallel (faster, 4-5x speedup)'))
|
|
39
|
+
],
|
|
40
|
+
default='serial'
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
# Individual scan step toggles
|
|
44
|
+
processor_config_enable_dns = BooleanField(
|
|
45
|
+
_l('DNS Queries'),
|
|
46
|
+
default=True
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
processor_config_enable_whois = BooleanField(
|
|
50
|
+
_l('WHOIS Lookup'),
|
|
51
|
+
default=True
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
processor_config_enable_http = BooleanField(
|
|
55
|
+
_l('HTTP Fingerprinting'),
|
|
56
|
+
default=True
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
processor_config_enable_tls = BooleanField(
|
|
60
|
+
_l('SSL/TLS Analysis'),
|
|
61
|
+
default=True
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
processor_config_tls_vulnerability_scan = BooleanField(
|
|
65
|
+
_l('TLS Vulnerability Scanning'),
|
|
66
|
+
default=False
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
processor_config_enable_portscan = BooleanField(
|
|
70
|
+
_l('Port Scanning'),
|
|
71
|
+
default=False
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
processor_config_enable_traceroute = BooleanField(
|
|
75
|
+
_l('Traceroute'),
|
|
76
|
+
default=True
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
processor_config_enable_bgp = BooleanField(
|
|
80
|
+
_l('BGP/ASN Information'),
|
|
81
|
+
default=True
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
processor_config_enable_os_detection = BooleanField(
|
|
85
|
+
_l('OS Detection'),
|
|
86
|
+
default=True
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
processor_config_enable_email_security = BooleanField(
|
|
90
|
+
_l('Email Security (SPF/DMARC/DKIM)'),
|
|
91
|
+
default=True
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
processor_config_enable_dnssec = BooleanField(
|
|
95
|
+
_l('DNSSEC Validation'),
|
|
96
|
+
default=True
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
processor_config_enable_ssh = BooleanField(
|
|
100
|
+
_l('SSH Fingerprinting'),
|
|
101
|
+
default=True
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
processor_config_enable_smtp = BooleanField(
|
|
105
|
+
_l('SMTP/Email Server Fingerprinting'),
|
|
106
|
+
default=True
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
processor_config_smtp_ehlo_hostname = StringField(
|
|
110
|
+
_l('SMTP EHLO Hostname'),
|
|
111
|
+
validators=[
|
|
112
|
+
validators.Optional(),
|
|
113
|
+
validators.Length(max=253, message=_l('Hostname is too long'))
|
|
114
|
+
],
|
|
115
|
+
render_kw={"placeholder": "localhost.localdomain", "size": "30"}
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
processor_config_whois_expire_warning_days = IntegerField(
|
|
119
|
+
_l('WHOIS Expiration Warning (days)'),
|
|
120
|
+
validators=[
|
|
121
|
+
validators.Optional(),
|
|
122
|
+
validators.NumberRange(min=0, max=10000)
|
|
123
|
+
],
|
|
124
|
+
default=3
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
processor_config_tls_expire_warning_days = IntegerField(
|
|
128
|
+
_l('TLS Certificate Expiration Warning (days)'),
|
|
129
|
+
validators=[
|
|
130
|
+
validators.Optional(),
|
|
131
|
+
validators.NumberRange(min=0, max=10000)
|
|
132
|
+
],
|
|
133
|
+
default=3
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
def extra_tab_content(self):
|
|
137
|
+
"""Tab label for processor-specific settings."""
|
|
138
|
+
return _l('OSINT Settings')
|
|
139
|
+
|
|
140
|
+
def extra_form_content(self):
|
|
141
|
+
"""Render processor-specific form fields.
|
|
142
|
+
|
|
143
|
+
@NOTE: Fields prefixed with processor_config_* are saved to
|
|
144
|
+
datadir/uuid/osint_recon.json and read at process time.
|
|
145
|
+
"""
|
|
146
|
+
return '''
|
|
147
|
+
{% from '_helpers.html' import render_field, render_checkbox_field %}
|
|
148
|
+
<fieldset>
|
|
149
|
+
<legend>OSINT Reconnaissance Configuration</legend>
|
|
150
|
+
|
|
151
|
+
<div class="pure-control-group">
|
|
152
|
+
{{ render_field(form.processor_config_dns_server) }}
|
|
153
|
+
<span class="pure-form-message-inline">
|
|
154
|
+
<strong>DNS server to use for all DNS lookups.</strong><br>
|
|
155
|
+
Default: 8.8.8.8 (Google DNS). Other options: 1.1.1.1 (Cloudflare), 9.9.9.9 (Quad9)
|
|
156
|
+
</span>
|
|
157
|
+
</div>
|
|
158
|
+
|
|
159
|
+
<div class="pure-control-group">
|
|
160
|
+
<fieldset class="pure-group inline-radio">
|
|
161
|
+
{{ render_field(form.processor_config_scan_mode) }}
|
|
162
|
+
</fieldset>
|
|
163
|
+
<span class="pure-form-message-inline">
|
|
164
|
+
<strong>Serial mode</strong> runs scans one after another (safer, easier to debug).<br>
|
|
165
|
+
<strong>Parallel mode</strong> runs all scans simultaneously (4-5x faster).
|
|
166
|
+
</span>
|
|
167
|
+
</div>
|
|
168
|
+
</fieldset>
|
|
169
|
+
|
|
170
|
+
<fieldset>
|
|
171
|
+
<legend>Enable/Disable Scan Steps</legend>
|
|
172
|
+
<span class="pure-form-message-inline" style="display: block; margin-bottom: 10px;">
|
|
173
|
+
Uncheck any scan steps you don't want to run. This can reduce processing time and output size.
|
|
174
|
+
</span>
|
|
175
|
+
|
|
176
|
+
<div class="pure-control-group">
|
|
177
|
+
{{ render_checkbox_field(form.processor_config_enable_dns) }}
|
|
178
|
+
<span class="pure-form-message-inline">
|
|
179
|
+
DNS queries: A, AAAA, MX, NS, TXT, SOA, CAA records
|
|
180
|
+
</span>
|
|
181
|
+
</div>
|
|
182
|
+
|
|
183
|
+
<div class="pure-control-group">
|
|
184
|
+
{{ render_checkbox_field(form.processor_config_enable_whois) }}
|
|
185
|
+
<span class="pure-form-message-inline">
|
|
186
|
+
WHOIS domain registration information (registrar, nameservers, dates)
|
|
187
|
+
</span>
|
|
188
|
+
</div>
|
|
189
|
+
|
|
190
|
+
<div class="pure-control-group" style="margin-left: 25px;">
|
|
191
|
+
{{ render_field(form.processor_config_whois_expire_warning_days, placeholder="3", size="5") }}
|
|
192
|
+
<span class="pure-form-message-inline">
|
|
193
|
+
Show countdown warning when domain expires within this many days (0 to disable warnings)
|
|
194
|
+
</span>
|
|
195
|
+
</div>
|
|
196
|
+
|
|
197
|
+
<div class="pure-control-group">
|
|
198
|
+
{{ render_checkbox_field(form.processor_config_enable_http) }}
|
|
199
|
+
<span class="pure-form-message-inline">
|
|
200
|
+
HTTP fingerprinting: Server headers, CDN/WAF detection, redirect chains, cookies
|
|
201
|
+
</span>
|
|
202
|
+
</div>
|
|
203
|
+
|
|
204
|
+
<div class="pure-control-group">
|
|
205
|
+
{{ render_checkbox_field(form.processor_config_enable_tls) }}
|
|
206
|
+
<span class="pure-form-message-inline">
|
|
207
|
+
SSL/TLS certificate analysis: Validity, issuer, cipher suites, protocols
|
|
208
|
+
</span>
|
|
209
|
+
</div>
|
|
210
|
+
|
|
211
|
+
<div class="pure-control-group" style="margin-left: 25px;">
|
|
212
|
+
{{ render_field(form.processor_config_tls_expire_warning_days, placeholder="3", size="5") }}
|
|
213
|
+
<span class="pure-form-message-inline">
|
|
214
|
+
Show countdown warning when TLS certificate expires within this many days (0 to disable warnings)
|
|
215
|
+
</span>
|
|
216
|
+
</div>
|
|
217
|
+
|
|
218
|
+
<div class="pure-control-group" style="margin-left: 25px;">
|
|
219
|
+
{{ render_checkbox_field(form.processor_config_tls_vulnerability_scan) }}
|
|
220
|
+
<span class="pure-form-message-inline">
|
|
221
|
+
<strong>⚠️ Advanced TLS security checks:</strong> Heartbleed, ROBOT, CCS Injection, TLS Compression (CRIME), Session Renegotiation, and more. Adds ~5-10 seconds to scan time.
|
|
222
|
+
</span>
|
|
223
|
+
</div>
|
|
224
|
+
|
|
225
|
+
<div class="pure-control-group">
|
|
226
|
+
{{ render_checkbox_field(form.processor_config_enable_portscan) }}
|
|
227
|
+
<span class="pure-form-message-inline">
|
|
228
|
+
Port scanning: Check common service ports (HTTP, HTTPS, SSH, FTP, etc.)
|
|
229
|
+
</span>
|
|
230
|
+
</div>
|
|
231
|
+
|
|
232
|
+
<div class="pure-control-group">
|
|
233
|
+
{{ render_checkbox_field(form.processor_config_enable_traceroute) }}
|
|
234
|
+
<span class="pure-form-message-inline">
|
|
235
|
+
Traceroute: Network path analysis (last N hops to target)
|
|
236
|
+
</span>
|
|
237
|
+
</div>
|
|
238
|
+
|
|
239
|
+
<div class="pure-control-group">
|
|
240
|
+
{{ render_checkbox_field(form.processor_config_enable_bgp) }}
|
|
241
|
+
<span class="pure-form-message-inline">
|
|
242
|
+
BGP/ASN information: Autonomous System Number and ISP details
|
|
243
|
+
</span>
|
|
244
|
+
</div>
|
|
245
|
+
|
|
246
|
+
<div class="pure-control-group">
|
|
247
|
+
{{ render_checkbox_field(form.processor_config_enable_os_detection) }}
|
|
248
|
+
<span class="pure-form-message-inline">
|
|
249
|
+
OS detection via TTL fingerprinting (requires raw socket permissions for active scanning)
|
|
250
|
+
</span>
|
|
251
|
+
</div>
|
|
252
|
+
|
|
253
|
+
<div class="pure-control-group">
|
|
254
|
+
{{ render_checkbox_field(form.processor_config_enable_email_security) }}
|
|
255
|
+
<span class="pure-form-message-inline">
|
|
256
|
+
Email security: SPF, DMARC, and DKIM record analysis for anti-spoofing
|
|
257
|
+
</span>
|
|
258
|
+
</div>
|
|
259
|
+
|
|
260
|
+
<div class="pure-control-group">
|
|
261
|
+
{{ render_checkbox_field(form.processor_config_enable_dnssec) }}
|
|
262
|
+
<span class="pure-form-message-inline">
|
|
263
|
+
DNSSEC validation: Verify DNS cryptographic signatures and chain of trust
|
|
264
|
+
</span>
|
|
265
|
+
</div>
|
|
266
|
+
|
|
267
|
+
<div class="pure-control-group">
|
|
268
|
+
{{ render_checkbox_field(form.processor_config_enable_ssh) }}
|
|
269
|
+
<span class="pure-form-message-inline">
|
|
270
|
+
SSH fingerprinting: Server banner, version, host keys, and supported algorithms
|
|
271
|
+
</span>
|
|
272
|
+
</div>
|
|
273
|
+
|
|
274
|
+
<div class="pure-control-group">
|
|
275
|
+
{{ render_checkbox_field(form.processor_config_enable_smtp) }}
|
|
276
|
+
<span class="pure-form-message-inline">
|
|
277
|
+
SMTP fingerprinting: Email server capabilities, authentication, and encryption (ports 25, 587, 465)
|
|
278
|
+
</span>
|
|
279
|
+
</div>
|
|
280
|
+
|
|
281
|
+
<div class="pure-control-group" style="margin-left: 25px;">
|
|
282
|
+
{{ render_field(form.processor_config_smtp_ehlo_hostname, placeholder="localhost.localdomain", size="30") }}
|
|
283
|
+
<span class="pure-form-message-inline">
|
|
284
|
+
<strong>Hostname to use in SMTP EHLO command.</strong><br>
|
|
285
|
+
⚠️ Security: Leave empty to use "localhost.localdomain" (anonymous). Setting this to a real hostname may reveal your identity.
|
|
286
|
+
</span>
|
|
287
|
+
</div>
|
|
288
|
+
</fieldset>
|
|
289
|
+
'''
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"""
|
|
2
|
+
OSINT Reconnaissance Processor, get changes of DNS, routing, SSL expiring and more.
|
|
3
|
+
|
|
4
|
+
This module implements the changedetectionio plugin interface to register
|
|
5
|
+
the OSINT processor with the main application.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from changedetectionio.pluggy_interface import hookimpl
|
|
9
|
+
from loguru import logger
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@hookimpl
|
|
13
|
+
def register_processor():
|
|
14
|
+
"""Register the OSINT reconnaissance processor.
|
|
15
|
+
|
|
16
|
+
Returns:
|
|
17
|
+
dict: Processor registration information
|
|
18
|
+
"""
|
|
19
|
+
try:
|
|
20
|
+
# Import the processor module
|
|
21
|
+
from . import processor
|
|
22
|
+
from . import name, description, processor_weight, list_badge_text
|
|
23
|
+
|
|
24
|
+
return {
|
|
25
|
+
'processor_name': 'osint_recon',
|
|
26
|
+
'processor_module': processor,
|
|
27
|
+
'processor_class': processor.perform_site_check,
|
|
28
|
+
'metadata': {
|
|
29
|
+
'name': name,
|
|
30
|
+
'description': description,
|
|
31
|
+
'processor_weight': processor_weight,
|
|
32
|
+
'list_badge_text': list_badge_text,
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
except Exception as e:
|
|
36
|
+
logger.error(f"Failed to register OSINT processor: {e}")
|
|
37
|
+
return None
|