add_mitre_attack_information_retrieval

#7
app.py CHANGED
@@ -2,6 +2,12 @@ from typing import NamedTuple
2
 
3
  import gradio as gr
4
 
 
 
 
 
 
 
5
  from tdagent.tools.get_url_content import gr_get_url_http_content
6
  from tdagent.tools.internal_company_user_search import gr_internal_company
7
  from tdagent.tools.lookup_company_cloud_account_information import (
@@ -9,6 +15,7 @@ from tdagent.tools.lookup_company_cloud_account_information import (
9
  )
10
  from tdagent.tools.query_abuse_ip_db import gr_query_abuseipdb
11
  from tdagent.tools.rdap import gr_query_rdap
 
12
  from tdagent.tools.send_email import gr_send_email
13
  from tdagent.tools.virus_total import gr_virus_total_url_info
14
 
@@ -33,6 +40,11 @@ TOOLS = (
33
  # ToolInfo("Query WHOIS", gr_query_whois),
34
  ToolInfo("Query RDAP", gr_query_rdap),
35
  ToolInfo("Virus Total URL info", gr_virus_total_url_info),
 
 
 
 
 
36
  ## Fake tools
37
  ToolInfo("Fake company directory", gr_internal_company),
38
  ToolInfo(
 
2
 
3
  import gradio as gr
4
 
5
+ from tdagent.tools.get_domain_information import (
6
+ dns_enumeration_tool,
7
+ extractor_of_ioc_from_threatfox_tool,
8
+ geo_location_tool,
9
+ scrap_subdomains_tool,
10
+ )
11
  from tdagent.tools.get_url_content import gr_get_url_http_content
12
  from tdagent.tools.internal_company_user_search import gr_internal_company
13
  from tdagent.tools.lookup_company_cloud_account_information import (
 
15
  )
16
  from tdagent.tools.query_abuse_ip_db import gr_query_abuseipdb
17
  from tdagent.tools.rdap import gr_query_rdap
18
+ from tdagent.tools.retrieve_from_mitre_attack import gr_get_stix_of_attack_id
19
  from tdagent.tools.send_email import gr_send_email
20
  from tdagent.tools.virus_total import gr_virus_total_url_info
21
 
 
40
  # ToolInfo("Query WHOIS", gr_query_whois),
41
  ToolInfo("Query RDAP", gr_query_rdap),
42
  ToolInfo("Virus Total URL info", gr_virus_total_url_info),
43
+ ToolInfo("Get IP's Location", geo_location_tool),
44
+ ToolInfo("DNS Enumerator", dns_enumeration_tool),
45
+ ToolInfo("Subdomain Retriever", scrap_subdomains_tool),
46
+ ToolInfo("Extractor of IoCs", extractor_of_ioc_from_threatfox_tool),
47
+ ToolInfo("ATT&CK STIX information", gr_get_stix_of_attack_id),
48
  ## Fake tools
49
  ToolInfo("Fake company directory", gr_internal_company),
50
  ToolInfo(
pyproject.toml CHANGED
@@ -13,7 +13,11 @@ requires-python = ">=3.10,<4"
13
  readme = "README.md"
14
  license = ""
15
  dependencies = [
 
 
 
16
  "cachetools>=6.0.0",
 
17
  "gradio[mcp]>=5.32.1",
18
  "python-whois>=0.9.5",
19
  "requests>=2.32.3",
 
13
  readme = "README.md"
14
  license = ""
15
  dependencies = [
16
+ "attackcti>=0.5.4",
17
+ "audioop-lts>=0.2.1 ; python_full_version >= '3.13'",
18
+ "black>=25.1.0",
19
  "cachetools>=6.0.0",
20
+ "dnspython>=2.7.0",
21
  "gradio[mcp]>=5.32.1",
22
  "python-whois>=0.9.5",
23
  "requests>=2.32.3",
requirements-dev.txt CHANGED
@@ -1,109 +1,343 @@
1
  # This file was autogenerated by uv via the following command:
2
- # uv export --format requirements-txt --no-hashes --group dev --group test -o requirements-dev.txt
3
  aiofiles==24.1.0
 
 
 
4
  aiohappyeyeballs==2.6.1
5
- aiohttp==3.12.8
 
 
6
  aiosignal==1.3.2
 
7
  annotated-types==0.7.0
 
 
 
8
  anyio==4.9.0
 
 
 
 
 
 
9
  async-timeout==5.0.1 ; python_full_version < '3.11'
 
 
 
10
  attrs==25.3.0
 
11
  audioop-lts==0.2.1 ; python_full_version >= '3.13'
 
 
 
 
 
12
  boolean-py==5.0
 
13
  cachecontrol==0.14.3
 
14
  cachetools==6.0.0
 
15
  certifi==2025.4.26
 
 
 
 
16
  cfgv==3.4.0
 
17
  charset-normalizer==3.4.2
18
- click==8.2.1 ; sys_platform != 'emscripten'
 
 
 
 
 
19
  colorama==0.4.6 ; sys_platform == 'win32'
 
 
 
 
20
  coverage==7.8.2
 
21
  cyclonedx-python-lib==9.1.0
 
22
  defusedxml==0.7.1
 
23
  distlib==0.3.9
 
 
 
24
  exceptiongroup==1.3.0 ; python_full_version < '3.11'
 
 
 
25
  fastapi==0.115.12
 
26
  ffmpy==0.6.0
 
27
  filelock==3.18.0
 
 
 
 
28
  frozenlist==1.6.2
 
 
 
29
  fsspec==2025.5.1
30
- gradio==5.32.1
 
 
 
 
31
  gradio-client==1.10.2
 
32
  groovy==0.1.2
 
33
  h11==0.16.0
34
- hf-xet==1.1.2 ; platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'
 
 
 
 
35
  httpcore==1.0.9
 
36
  httpx==0.28.1
 
 
 
 
 
37
  httpx-sse==0.4.0
 
38
  huggingface-hub==0.32.4
 
 
 
39
  identify==2.6.12
 
40
  idna==3.10
 
 
 
 
 
41
  iniconfig==2.1.0
 
42
  jinja2==3.1.6
 
43
  license-expression==30.4.1
 
44
  markdown-it-py==3.0.0
 
45
  markupsafe==3.0.2
 
 
 
46
  mcp==1.9.0
 
47
  mdurl==0.1.2
 
48
  msgpack==1.1.0
 
49
  multidict==6.4.4
 
 
 
50
  mypy==1.16.0
51
  mypy-extensions==1.1.0
 
 
 
52
  nodeenv==1.9.1
 
53
  numpy==2.2.6
 
 
 
54
  orjson==3.10.18
55
- packageurl-python==0.16.0
 
 
56
  packaging==25.0
57
- pandas==2.2.3
 
 
 
 
 
 
 
 
 
58
  pathspec==0.12.1
 
 
 
59
  pillow==11.2.1
 
60
  pip==25.1.1
 
61
  pip-api==0.0.34
 
62
  pip-audit==2.9.0
63
  pip-requirements-parser==32.0.1
 
64
  platformdirs==4.3.8
 
 
 
 
65
  pluggy==1.6.0
 
66
  pre-commit==3.8.0
67
  propcache==0.3.1
 
 
 
68
  py-serializable==2.0.0
 
69
  pydantic==2.11.5
 
 
 
 
 
 
70
  pydantic-core==2.33.2
 
71
  pydantic-settings==2.9.1
 
72
  pydub==0.25.1
 
73
  pygments==2.19.1
 
74
  pyparsing==3.2.3
 
75
  pytest==7.4.4
 
 
 
76
  pytest-cov==4.1.0
77
  pytest-randomly==3.16.0
78
  python-dateutil==2.9.0.post0
 
 
 
79
  python-dotenv==1.1.0
 
80
  python-multipart==0.0.20
 
 
 
81
  python-whois==0.9.5
 
82
  pytz==2025.2
 
 
 
 
83
  pyyaml==6.0.2
 
 
 
 
84
  requests==2.32.3
 
 
 
 
 
 
 
85
  rich==14.0.0
 
 
 
86
  ruff==0.11.12
 
87
  safehttpx==0.1.6
 
88
  semantic-version==2.10.0
 
89
  shellingham==1.5.4 ; sys_platform != 'emscripten'
 
 
 
90
  six==1.17.0
 
 
 
 
91
  sniffio==1.3.1
 
92
  sortedcontainers==2.4.0
 
93
  sse-starlette==2.3.6
 
94
  starlette==0.46.2
 
 
 
 
 
 
 
 
 
 
95
  toml==0.10.2
 
96
  tomli==2.2.1 ; python_full_version <= '3.11'
97
- tomlkit==0.13.2
 
 
 
 
 
 
98
  tqdm==4.67.1
 
99
  typer==0.16.0 ; sys_platform != 'emscripten'
 
100
  typing-extensions==4.14.0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
101
  typing-inspection==0.4.1
 
 
 
102
  tzdata==2025.2
 
103
  urllib3==2.4.0
 
 
 
104
  uvicorn==0.34.3 ; sys_platform != 'emscripten'
 
 
 
105
  virtualenv==20.31.2
 
106
  vt-py==0.21.0
 
107
  websockets==15.0.1
 
108
  xdoctest==1.2.0
109
  yarl==1.20.0
 
 
1
  # This file was autogenerated by uv via the following command:
2
+ # uv export --format requirements.txt --no-hashes --group dev --group test -o requirements-dev.txt
3
  aiofiles==24.1.0
4
+ # via
5
+ # gradio
6
+ # vt-py
7
  aiohappyeyeballs==2.6.1
8
+ # via aiohttp
9
+ aiohttp==3.12.9
10
+ # via vt-py
11
  aiosignal==1.3.2
12
+ # via aiohttp
13
  annotated-types==0.7.0
14
+ # via pydantic
15
+ antlr4-python3-runtime==4.9.3
16
+ # via stix2-patterns
17
  anyio==4.9.0
18
+ # via
19
+ # gradio
20
+ # httpx
21
+ # mcp
22
+ # sse-starlette
23
+ # starlette
24
  async-timeout==5.0.1 ; python_full_version < '3.11'
25
+ # via aiohttp
26
+ attackcti==0.5.4
27
+ # via tdagent
28
  attrs==25.3.0
29
+ # via aiohttp
30
  audioop-lts==0.2.1 ; python_full_version >= '3.13'
31
+ # via
32
+ # gradio
33
+ # tdagent
34
+ black==25.1.0
35
+ # via tdagent
36
  boolean-py==5.0
37
+ # via license-expression
38
  cachecontrol==0.14.3
39
+ # via pip-audit
40
  cachetools==6.0.0
41
+ # via tdagent
42
  certifi==2025.4.26
43
+ # via
44
+ # httpcore
45
+ # httpx
46
+ # requests
47
  cfgv==3.4.0
48
+ # via pre-commit
49
  charset-normalizer==3.4.2
50
+ # via requests
51
+ click==8.2.1
52
+ # via
53
+ # black
54
+ # typer
55
+ # uvicorn
56
  colorama==0.4.6 ; sys_platform == 'win32'
57
+ # via
58
+ # click
59
+ # pytest
60
+ # tqdm
61
  coverage==7.8.2
62
+ # via pytest-cov
63
  cyclonedx-python-lib==9.1.0
64
+ # via pip-audit
65
  defusedxml==0.7.1
66
+ # via py-serializable
67
  distlib==0.3.9
68
+ # via virtualenv
69
+ dnspython==2.7.0
70
+ # via tdagent
71
  exceptiongroup==1.3.0 ; python_full_version < '3.11'
72
+ # via
73
+ # anyio
74
+ # pytest
75
  fastapi==0.115.12
76
+ # via gradio
77
  ffmpy==0.6.0
78
+ # via gradio
79
  filelock==3.18.0
80
+ # via
81
+ # cachecontrol
82
+ # huggingface-hub
83
+ # virtualenv
84
  frozenlist==1.6.2
85
+ # via
86
+ # aiohttp
87
+ # aiosignal
88
  fsspec==2025.5.1
89
+ # via
90
+ # gradio-client
91
+ # huggingface-hub
92
+ gradio==5.33.0
93
+ # via tdagent
94
  gradio-client==1.10.2
95
+ # via gradio
96
  groovy==0.1.2
97
+ # via gradio
98
  h11==0.16.0
99
+ # via
100
+ # httpcore
101
+ # uvicorn
102
+ hf-xet==1.1.3 ; platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'
103
+ # via huggingface-hub
104
  httpcore==1.0.9
105
+ # via httpx
106
  httpx==0.28.1
107
+ # via
108
+ # gradio
109
+ # gradio-client
110
+ # mcp
111
+ # safehttpx
112
  httpx-sse==0.4.0
113
+ # via mcp
114
  huggingface-hub==0.32.4
115
+ # via
116
+ # gradio
117
+ # gradio-client
118
  identify==2.6.12
119
+ # via pre-commit
120
  idna==3.10
121
+ # via
122
+ # anyio
123
+ # httpx
124
+ # requests
125
+ # yarl
126
  iniconfig==2.1.0
127
+ # via pytest
128
  jinja2==3.1.6
129
+ # via gradio
130
  license-expression==30.4.1
131
+ # via cyclonedx-python-lib
132
  markdown-it-py==3.0.0
133
+ # via rich
134
  markupsafe==3.0.2
135
+ # via
136
+ # gradio
137
+ # jinja2
138
  mcp==1.9.0
139
+ # via gradio
140
  mdurl==0.1.2
141
+ # via markdown-it-py
142
  msgpack==1.1.0
143
+ # via cachecontrol
144
  multidict==6.4.4
145
+ # via
146
+ # aiohttp
147
+ # yarl
148
  mypy==1.16.0
149
  mypy-extensions==1.1.0
150
+ # via
151
+ # black
152
+ # mypy
153
  nodeenv==1.9.1
154
+ # via pre-commit
155
  numpy==2.2.6
156
+ # via
157
+ # gradio
158
+ # pandas
159
  orjson==3.10.18
160
+ # via gradio
161
+ packageurl-python==0.17.0
162
+ # via cyclonedx-python-lib
163
  packaging==25.0
164
+ # via
165
+ # black
166
+ # gradio
167
+ # gradio-client
168
+ # huggingface-hub
169
+ # pip-audit
170
+ # pip-requirements-parser
171
+ # pytest
172
+ pandas==2.3.0
173
+ # via gradio
174
  pathspec==0.12.1
175
+ # via
176
+ # black
177
+ # mypy
178
  pillow==11.2.1
179
+ # via gradio
180
  pip==25.1.1
181
+ # via pip-api
182
  pip-api==0.0.34
183
+ # via pip-audit
184
  pip-audit==2.9.0
185
  pip-requirements-parser==32.0.1
186
+ # via pip-audit
187
  platformdirs==4.3.8
188
+ # via
189
+ # black
190
+ # pip-audit
191
+ # virtualenv
192
  pluggy==1.6.0
193
+ # via pytest
194
  pre-commit==3.8.0
195
  propcache==0.3.1
196
+ # via
197
+ # aiohttp
198
+ # yarl
199
  py-serializable==2.0.0
200
+ # via cyclonedx-python-lib
201
  pydantic==2.11.5
202
+ # via
203
+ # attackcti
204
+ # fastapi
205
+ # gradio
206
+ # mcp
207
+ # pydantic-settings
208
  pydantic-core==2.33.2
209
+ # via pydantic
210
  pydantic-settings==2.9.1
211
+ # via mcp
212
  pydub==0.25.1
213
+ # via gradio
214
  pygments==2.19.1
215
+ # via rich
216
  pyparsing==3.2.3
217
+ # via pip-requirements-parser
218
  pytest==7.4.4
219
+ # via
220
+ # pytest-cov
221
+ # pytest-randomly
222
  pytest-cov==4.1.0
223
  pytest-randomly==3.16.0
224
  python-dateutil==2.9.0.post0
225
+ # via
226
+ # pandas
227
+ # python-whois
228
  python-dotenv==1.1.0
229
+ # via pydantic-settings
230
  python-multipart==0.0.20
231
+ # via
232
+ # gradio
233
+ # mcp
234
  python-whois==0.9.5
235
+ # via tdagent
236
  pytz==2025.2
237
+ # via
238
+ # pandas
239
+ # stix2
240
+ # taxii2-client
241
  pyyaml==6.0.2
242
+ # via
243
+ # gradio
244
+ # huggingface-hub
245
+ # pre-commit
246
  requests==2.32.3
247
+ # via
248
+ # cachecontrol
249
+ # huggingface-hub
250
+ # pip-audit
251
+ # stix2
252
+ # taxii2-client
253
+ # tdagent
254
  rich==14.0.0
255
+ # via
256
+ # pip-audit
257
+ # typer
258
  ruff==0.11.12
259
+ # via gradio
260
  safehttpx==0.1.6
261
+ # via gradio
262
  semantic-version==2.10.0
263
+ # via gradio
264
  shellingham==1.5.4 ; sys_platform != 'emscripten'
265
+ # via typer
266
+ simplejson==3.20.1
267
+ # via stix2
268
  six==1.17.0
269
+ # via
270
+ # python-dateutil
271
+ # stix2-patterns
272
+ # taxii2-client
273
  sniffio==1.3.1
274
+ # via anyio
275
  sortedcontainers==2.4.0
276
+ # via cyclonedx-python-lib
277
  sse-starlette==2.3.6
278
+ # via mcp
279
  starlette==0.46.2
280
+ # via
281
+ # fastapi
282
+ # gradio
283
+ # mcp
284
+ stix2==3.0.1
285
+ # via attackcti
286
+ stix2-patterns==2.0.0
287
+ # via stix2
288
+ taxii2-client==2.3.0
289
+ # via attackcti
290
  toml==0.10.2
291
+ # via pip-audit
292
  tomli==2.2.1 ; python_full_version <= '3.11'
293
+ # via
294
+ # black
295
+ # coverage
296
+ # mypy
297
+ # pytest
298
+ tomlkit==0.13.3
299
+ # via gradio
300
  tqdm==4.67.1
301
+ # via huggingface-hub
302
  typer==0.16.0 ; sys_platform != 'emscripten'
303
+ # via gradio
304
  typing-extensions==4.14.0
305
+ # via
306
+ # anyio
307
+ # black
308
+ # exceptiongroup
309
+ # fastapi
310
+ # gradio
311
+ # gradio-client
312
+ # huggingface-hub
313
+ # multidict
314
+ # mypy
315
+ # pydantic
316
+ # pydantic-core
317
+ # rich
318
+ # typer
319
+ # typing-inspection
320
+ # uvicorn
321
  typing-inspection==0.4.1
322
+ # via
323
+ # pydantic
324
+ # pydantic-settings
325
  tzdata==2025.2
326
+ # via pandas
327
  urllib3==2.4.0
328
+ # via
329
+ # gradio
330
+ # requests
331
  uvicorn==0.34.3 ; sys_platform != 'emscripten'
332
+ # via
333
+ # gradio
334
+ # mcp
335
  virtualenv==20.31.2
336
+ # via pre-commit
337
  vt-py==0.21.0
338
+ # via tdagent
339
  websockets==15.0.1
340
+ # via gradio-client
341
  xdoctest==1.2.0
342
  yarl==1.20.0
343
+ # via aiohttp
requirements.txt CHANGED
@@ -1,84 +1,283 @@
1
  # This file was autogenerated by uv via the following command:
2
- # uv export --format requirements-txt --no-hashes --no-dev -o requirements.txt
3
  aiofiles==24.1.0
 
 
 
4
  aiohappyeyeballs==2.6.1
5
- aiohttp==3.12.8
 
 
6
  aiosignal==1.3.2
 
7
  annotated-types==0.7.0
 
 
 
8
  anyio==4.9.0
 
 
 
 
 
 
9
  async-timeout==5.0.1 ; python_full_version < '3.11'
 
 
 
10
  attrs==25.3.0
 
11
  audioop-lts==0.2.1 ; python_full_version >= '3.13'
 
 
 
 
 
12
  cachetools==6.0.0
 
13
  certifi==2025.4.26
 
 
 
 
14
  charset-normalizer==3.4.2
15
- click==8.2.1 ; sys_platform != 'emscripten'
 
 
 
 
 
16
  colorama==0.4.6 ; sys_platform == 'win32'
 
 
 
 
17
  coverage==7.8.2
 
 
 
18
  exceptiongroup==1.3.0 ; python_full_version < '3.11'
 
 
 
19
  fastapi==0.115.12
 
20
  ffmpy==0.6.0
 
21
  filelock==3.18.0
 
22
  frozenlist==1.6.2
 
 
 
23
  fsspec==2025.5.1
24
- gradio==5.32.1
 
 
 
 
25
  gradio-client==1.10.2
 
26
  groovy==0.1.2
 
27
  h11==0.16.0
28
- hf-xet==1.1.2 ; platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'
 
 
 
 
29
  httpcore==1.0.9
 
30
  httpx==0.28.1
 
 
 
 
 
31
  httpx-sse==0.4.0
 
32
  huggingface-hub==0.32.4
 
 
 
33
  idna==3.10
 
 
 
 
 
34
  iniconfig==2.1.0
 
35
  jinja2==3.1.6
 
36
  markdown-it-py==3.0.0 ; sys_platform != 'emscripten'
 
37
  markupsafe==3.0.2
 
 
 
38
  mcp==1.9.0
 
39
  mdurl==0.1.2 ; sys_platform != 'emscripten'
 
40
  multidict==6.4.4
 
 
 
 
 
41
  numpy==2.2.6
 
 
 
42
  orjson==3.10.18
 
43
  packaging==25.0
44
- pandas==2.2.3
 
 
 
 
 
 
 
 
 
45
  pillow==11.2.1
 
 
 
46
  pluggy==1.6.0
 
47
  propcache==0.3.1
 
 
 
48
  pydantic==2.11.5
 
 
 
 
 
 
49
  pydantic-core==2.33.2
 
50
  pydantic-settings==2.9.1
 
51
  pydub==0.25.1
 
52
  pygments==2.19.1 ; sys_platform != 'emscripten'
 
53
  pytest==7.4.4
 
 
 
54
  pytest-cov==4.1.0
55
  pytest-randomly==3.16.0
56
  python-dateutil==2.9.0.post0
 
 
 
57
  python-dotenv==1.1.0
 
58
  python-multipart==0.0.20
 
 
 
59
  python-whois==0.9.5
 
60
  pytz==2025.2
 
 
 
 
61
  pyyaml==6.0.2
 
 
 
62
  requests==2.32.3
 
 
 
 
 
63
  rich==14.0.0 ; sys_platform != 'emscripten'
 
64
  ruff==0.11.12 ; sys_platform != 'emscripten'
 
65
  safehttpx==0.1.6
 
66
  semantic-version==2.10.0
 
67
  shellingham==1.5.4 ; sys_platform != 'emscripten'
 
 
 
68
  six==1.17.0
 
 
 
 
69
  sniffio==1.3.1
 
70
  sse-starlette==2.3.6
 
71
  starlette==0.46.2
 
 
 
 
 
 
 
 
 
 
72
  tomli==2.2.1 ; python_full_version <= '3.11'
73
- tomlkit==0.13.2
 
 
 
 
 
74
  tqdm==4.67.1
 
75
  typer==0.16.0 ; sys_platform != 'emscripten'
 
76
  typing-extensions==4.14.0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  typing-inspection==0.4.1
 
 
 
78
  tzdata==2025.2
 
79
  urllib3==2.4.0
 
 
 
80
  uvicorn==0.34.3 ; sys_platform != 'emscripten'
 
 
 
81
  vt-py==0.21.0
 
82
  websockets==15.0.1
 
83
  xdoctest==1.2.0
84
  yarl==1.20.0
 
 
1
  # This file was autogenerated by uv via the following command:
2
+ # uv export --format requirements.txt --no-hashes --no-dev -o requirements.txt
3
  aiofiles==24.1.0
4
+ # via
5
+ # gradio
6
+ # vt-py
7
  aiohappyeyeballs==2.6.1
8
+ # via aiohttp
9
+ aiohttp==3.12.9
10
+ # via vt-py
11
  aiosignal==1.3.2
12
+ # via aiohttp
13
  annotated-types==0.7.0
14
+ # via pydantic
15
+ antlr4-python3-runtime==4.9.3
16
+ # via stix2-patterns
17
  anyio==4.9.0
18
+ # via
19
+ # gradio
20
+ # httpx
21
+ # mcp
22
+ # sse-starlette
23
+ # starlette
24
  async-timeout==5.0.1 ; python_full_version < '3.11'
25
+ # via aiohttp
26
+ attackcti==0.5.4
27
+ # via tdagent
28
  attrs==25.3.0
29
+ # via aiohttp
30
  audioop-lts==0.2.1 ; python_full_version >= '3.13'
31
+ # via
32
+ # gradio
33
+ # tdagent
34
+ black==25.1.0
35
+ # via tdagent
36
  cachetools==6.0.0
37
+ # via tdagent
38
  certifi==2025.4.26
39
+ # via
40
+ # httpcore
41
+ # httpx
42
+ # requests
43
  charset-normalizer==3.4.2
44
+ # via requests
45
+ click==8.2.1
46
+ # via
47
+ # black
48
+ # typer
49
+ # uvicorn
50
  colorama==0.4.6 ; sys_platform == 'win32'
51
+ # via
52
+ # click
53
+ # pytest
54
+ # tqdm
55
  coverage==7.8.2
56
+ # via pytest-cov
57
+ dnspython==2.7.0
58
+ # via tdagent
59
  exceptiongroup==1.3.0 ; python_full_version < '3.11'
60
+ # via
61
+ # anyio
62
+ # pytest
63
  fastapi==0.115.12
64
+ # via gradio
65
  ffmpy==0.6.0
66
+ # via gradio
67
  filelock==3.18.0
68
+ # via huggingface-hub
69
  frozenlist==1.6.2
70
+ # via
71
+ # aiohttp
72
+ # aiosignal
73
  fsspec==2025.5.1
74
+ # via
75
+ # gradio-client
76
+ # huggingface-hub
77
+ gradio==5.33.0
78
+ # via tdagent
79
  gradio-client==1.10.2
80
+ # via gradio
81
  groovy==0.1.2
82
+ # via gradio
83
  h11==0.16.0
84
+ # via
85
+ # httpcore
86
+ # uvicorn
87
+ hf-xet==1.1.3 ; platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'
88
+ # via huggingface-hub
89
  httpcore==1.0.9
90
+ # via httpx
91
  httpx==0.28.1
92
+ # via
93
+ # gradio
94
+ # gradio-client
95
+ # mcp
96
+ # safehttpx
97
  httpx-sse==0.4.0
98
+ # via mcp
99
  huggingface-hub==0.32.4
100
+ # via
101
+ # gradio
102
+ # gradio-client
103
  idna==3.10
104
+ # via
105
+ # anyio
106
+ # httpx
107
+ # requests
108
+ # yarl
109
  iniconfig==2.1.0
110
+ # via pytest
111
  jinja2==3.1.6
112
+ # via gradio
113
  markdown-it-py==3.0.0 ; sys_platform != 'emscripten'
114
+ # via rich
115
  markupsafe==3.0.2
116
+ # via
117
+ # gradio
118
+ # jinja2
119
  mcp==1.9.0
120
+ # via gradio
121
  mdurl==0.1.2 ; sys_platform != 'emscripten'
122
+ # via markdown-it-py
123
  multidict==6.4.4
124
+ # via
125
+ # aiohttp
126
+ # yarl
127
+ mypy-extensions==1.1.0
128
+ # via black
129
  numpy==2.2.6
130
+ # via
131
+ # gradio
132
+ # pandas
133
  orjson==3.10.18
134
+ # via gradio
135
  packaging==25.0
136
+ # via
137
+ # black
138
+ # gradio
139
+ # gradio-client
140
+ # huggingface-hub
141
+ # pytest
142
+ pandas==2.3.0
143
+ # via gradio
144
+ pathspec==0.12.1
145
+ # via black
146
  pillow==11.2.1
147
+ # via gradio
148
+ platformdirs==4.3.8
149
+ # via black
150
  pluggy==1.6.0
151
+ # via pytest
152
  propcache==0.3.1
153
+ # via
154
+ # aiohttp
155
+ # yarl
156
  pydantic==2.11.5
157
+ # via
158
+ # attackcti
159
+ # fastapi
160
+ # gradio
161
+ # mcp
162
+ # pydantic-settings
163
  pydantic-core==2.33.2
164
+ # via pydantic
165
  pydantic-settings==2.9.1
166
+ # via mcp
167
  pydub==0.25.1
168
+ # via gradio
169
  pygments==2.19.1 ; sys_platform != 'emscripten'
170
+ # via rich
171
  pytest==7.4.4
172
+ # via
173
+ # pytest-cov
174
+ # pytest-randomly
175
  pytest-cov==4.1.0
176
  pytest-randomly==3.16.0
177
  python-dateutil==2.9.0.post0
178
+ # via
179
+ # pandas
180
+ # python-whois
181
  python-dotenv==1.1.0
182
+ # via pydantic-settings
183
  python-multipart==0.0.20
184
+ # via
185
+ # gradio
186
+ # mcp
187
  python-whois==0.9.5
188
+ # via tdagent
189
  pytz==2025.2
190
+ # via
191
+ # pandas
192
+ # stix2
193
+ # taxii2-client
194
  pyyaml==6.0.2
195
+ # via
196
+ # gradio
197
+ # huggingface-hub
198
  requests==2.32.3
199
+ # via
200
+ # huggingface-hub
201
+ # stix2
202
+ # taxii2-client
203
+ # tdagent
204
  rich==14.0.0 ; sys_platform != 'emscripten'
205
+ # via typer
206
  ruff==0.11.12 ; sys_platform != 'emscripten'
207
+ # via gradio
208
  safehttpx==0.1.6
209
+ # via gradio
210
  semantic-version==2.10.0
211
+ # via gradio
212
  shellingham==1.5.4 ; sys_platform != 'emscripten'
213
+ # via typer
214
+ simplejson==3.20.1
215
+ # via stix2
216
  six==1.17.0
217
+ # via
218
+ # python-dateutil
219
+ # stix2-patterns
220
+ # taxii2-client
221
  sniffio==1.3.1
222
+ # via anyio
223
  sse-starlette==2.3.6
224
+ # via mcp
225
  starlette==0.46.2
226
+ # via
227
+ # fastapi
228
+ # gradio
229
+ # mcp
230
+ stix2==3.0.1
231
+ # via attackcti
232
+ stix2-patterns==2.0.0
233
+ # via stix2
234
+ taxii2-client==2.3.0
235
+ # via attackcti
236
  tomli==2.2.1 ; python_full_version <= '3.11'
237
+ # via
238
+ # black
239
+ # coverage
240
+ # pytest
241
+ tomlkit==0.13.3
242
+ # via gradio
243
  tqdm==4.67.1
244
+ # via huggingface-hub
245
  typer==0.16.0 ; sys_platform != 'emscripten'
246
+ # via gradio
247
  typing-extensions==4.14.0
248
+ # via
249
+ # anyio
250
+ # black
251
+ # exceptiongroup
252
+ # fastapi
253
+ # gradio
254
+ # gradio-client
255
+ # huggingface-hub
256
+ # multidict
257
+ # pydantic
258
+ # pydantic-core
259
+ # rich
260
+ # typer
261
+ # typing-inspection
262
+ # uvicorn
263
  typing-inspection==0.4.1
264
+ # via
265
+ # pydantic
266
+ # pydantic-settings
267
  tzdata==2025.2
268
+ # via pandas
269
  urllib3==2.4.0
270
+ # via
271
+ # gradio
272
+ # requests
273
  uvicorn==0.34.3 ; sys_platform != 'emscripten'
274
+ # via
275
+ # gradio
276
+ # mcp
277
  vt-py==0.21.0
278
+ # via tdagent
279
  websockets==15.0.1
280
+ # via gradio-client
281
  xdoctest==1.2.0
282
  yarl==1.20.0
283
+ # via aiohttp
subdomains/subdomains.txt ADDED
@@ -0,0 +1,999 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ www
2
+ mail
3
+ ftp
4
+ localhost
5
+ webmail
6
+ smtp
7
+ pop
8
+ ns1
9
+ webdisk
10
+ ns2
11
+ cpanel
12
+ whm
13
+ autodiscover
14
+ autoconfig
15
+ m
16
+ imap
17
+ test
18
+ ns
19
+ blog
20
+ pop3
21
+ dev
22
+ www2
23
+ admin
24
+ forum
25
+ news
26
+ vpn
27
+ ns3
28
+ mail2
29
+ new
30
+ mysql
31
+ old
32
+ lists
33
+ support
34
+ mobile
35
+ mx
36
+ static
37
+ docs
38
+ beta
39
+ shop
40
+ sql
41
+ secure
42
+ demo
43
+ cp
44
+ calendar
45
+ wiki
46
+ web
47
+ media
48
+ email
49
+ images
50
+ img
51
+ www1
52
+ intranet
53
+ portal
54
+ video
55
+ sip
56
+ dns2
57
+ api
58
+ cdn
59
+ stats
60
+ dns1
61
+ ns4
62
+ www3
63
+ dns
64
+ search
65
+ staging
66
+ server
67
+ mx1
68
+ chat
69
+ wap
70
+ my
71
+ svn
72
+ mail1
73
+ sites
74
+ proxy
75
+ ads
76
+ host
77
+ crm
78
+ cms
79
+ backup
80
+ mx2
81
+ lyncdiscover
82
+ info
83
+ apps
84
+ download
85
+ remote
86
+ db
87
+ forums
88
+ store
89
+ relay
90
+ files
91
+ newsletter
92
+ app
93
+ live
94
+ owa
95
+ en
96
+ start
97
+ sms
98
+ office
99
+ exchange
100
+ ipv4
101
+ mail3
102
+ help
103
+ blogs
104
+ helpdesk
105
+ web1
106
+ home
107
+ library
108
+ ftp2
109
+ ntp
110
+ monitor
111
+ login
112
+ service
113
+ correo
114
+ www4
115
+ moodle
116
+ it
117
+ gateway
118
+ gw
119
+ i
120
+ stat
121
+ stage
122
+ ldap
123
+ tv
124
+ ssl
125
+ web2
126
+ ns5
127
+ upload
128
+ nagios
129
+ smtp2
130
+ online
131
+ ad
132
+ survey
133
+ data
134
+ radio
135
+ extranet
136
+ test2
137
+ mssql
138
+ dns3
139
+ jobs
140
+ services
141
+ panel
142
+ irc
143
+ hosting
144
+ cloud
145
+ de
146
+ gmail
147
+ s
148
+ bbs
149
+ cs
150
+ ww
151
+ mrtg
152
+ git
153
+ image
154
+ members
155
+ poczta
156
+ s1
157
+ meet
158
+ preview
159
+ fr
160
+ cloudflare-resolve-to
161
+ dev2
162
+ photo
163
+ jabber
164
+ legacy
165
+ go
166
+ es
167
+ ssh
168
+ redmine
169
+ partner
170
+ vps
171
+ server1
172
+ sv
173
+ ns6
174
+ webmail2
175
+ av
176
+ community
177
+ cacti
178
+ time
179
+ sftp
180
+ lib
181
+ facebook
182
+ www5
183
+ smtp1
184
+ feeds
185
+ w
186
+ games
187
+ ts
188
+ alumni
189
+ dl
190
+ s2
191
+ phpmyadmin
192
+ archive
193
+ cn
194
+ tools
195
+ stream
196
+ projects
197
+ elearning
198
+ im
199
+ iphone
200
+ control
201
+ voip
202
+ test1
203
+ ws
204
+ rss
205
+ sp
206
+ wwww
207
+ vpn2
208
+ jira
209
+ list
210
+ connect
211
+ gallery
212
+ billing
213
+ mailer
214
+ update
215
+ pda
216
+ game
217
+ ns0
218
+ testing
219
+ sandbox
220
+ job
221
+ events
222
+ dialin
223
+ ml
224
+ fb
225
+ videos
226
+ music
227
+ a
228
+ partners
229
+ mailhost
230
+ downloads
231
+ reports
232
+ ca
233
+ router
234
+ speedtest
235
+ local
236
+ training
237
+ edu
238
+ bugs
239
+ manage
240
+ s3
241
+ status
242
+ host2
243
+ ww2
244
+ marketing
245
+ conference
246
+ content
247
+ network-ip
248
+ broadcast-ip
249
+ english
250
+ catalog
251
+ msoid
252
+ mailadmin
253
+ pay
254
+ access
255
+ streaming
256
+ project
257
+ t
258
+ sso
259
+ alpha
260
+ photos
261
+ staff
262
+ e
263
+ auth
264
+ v2
265
+ web5
266
+ web3
267
+ mail4
268
+ devel
269
+ post
270
+ us
271
+ images2
272
+ master
273
+ rt
274
+ ftp1
275
+ qa
276
+ wp
277
+ dns4
278
+ www6
279
+ ru
280
+ student
281
+ w3
282
+ citrix
283
+ trac
284
+ doc
285
+ img2
286
+ css
287
+ mx3
288
+ adm
289
+ web4
290
+ hr
291
+ mailserver
292
+ travel
293
+ sharepoint
294
+ sport
295
+ member
296
+ bb
297
+ agenda
298
+ link
299
+ server2
300
+ vod
301
+ uk
302
+ fw
303
+ promo
304
+ vip
305
+ noc
306
+ design
307
+ temp
308
+ gate
309
+ ns7
310
+ file
311
+ ms
312
+ map
313
+ cache
314
+ painel
315
+ js
316
+ event
317
+ mailing
318
+ db1
319
+ c
320
+ auto
321
+ img1
322
+ vpn1
323
+ business
324
+ mirror
325
+ share
326
+ cdn2
327
+ site
328
+ maps
329
+ tickets
330
+ tracker
331
+ domains
332
+ club
333
+ images1
334
+ zimbra
335
+ cvs
336
+ b2b
337
+ oa
338
+ intra
339
+ zabbix
340
+ ns8
341
+ assets
342
+ main
343
+ spam
344
+ lms
345
+ social
346
+ faq
347
+ feedback
348
+ loopback
349
+ groups
350
+ m2
351
+ cas
352
+ loghost
353
+ xml
354
+ nl
355
+ research
356
+ art
357
+ munin
358
+ dev1
359
+ gis
360
+ sales
361
+ images3
362
+ report
363
+ google
364
+ idp
365
+ cisco
366
+ careers
367
+ seo
368
+ dc
369
+ lab
370
+ d
371
+ firewall
372
+ fs
373
+ eng
374
+ ann
375
+ mail01
376
+ mantis
377
+ v
378
+ affiliates
379
+ webconf
380
+ track
381
+ ticket
382
+ pm
383
+ db2
384
+ b
385
+ clients
386
+ tech
387
+ erp
388
+ monitoring
389
+ cdn1
390
+ images4
391
+ payment
392
+ origin
393
+ client
394
+ foto
395
+ domain
396
+ pt
397
+ pma
398
+ directory
399
+ cc
400
+ public
401
+ finance
402
+ ns11
403
+ test3
404
+ wordpress
405
+ corp
406
+ sslvpn
407
+ cal
408
+ mailman
409
+ book
410
+ ip
411
+ zeus
412
+ ns10
413
+ hermes
414
+ storage
415
+ free
416
+ static1
417
+ pbx
418
+ banner
419
+ mobil
420
+ kb
421
+ mail5
422
+ direct
423
+ ipfixe
424
+ wifi
425
+ development
426
+ board
427
+ ns01
428
+ st
429
+ reviews
430
+ radius
431
+ pro
432
+ atlas
433
+ links
434
+ in
435
+ oldmail
436
+ register
437
+ s4
438
+ images6
439
+ static2
440
+ id
441
+ shopping
442
+ drupal
443
+ analytics
444
+ m1
445
+ images5
446
+ images7
447
+ img3
448
+ mx01
449
+ www7
450
+ redirect
451
+ sitebuilder
452
+ smtp3
453
+ adserver
454
+ net
455
+ user
456
+ forms
457
+ outlook
458
+ press
459
+ vc
460
+ health
461
+ work
462
+ mb
463
+ mm
464
+ f
465
+ pgsql
466
+ jp
467
+ sports
468
+ preprod
469
+ g
470
+ p
471
+ mdm
472
+ ar
473
+ lync
474
+ market
475
+ dbadmin
476
+ barracuda
477
+ affiliate
478
+ mars
479
+ users
480
+ images8
481
+ biblioteca
482
+ mc
483
+ ns12
484
+ math
485
+ ntp1
486
+ web01
487
+ software
488
+ pr
489
+ jupiter
490
+ labs
491
+ linux
492
+ sc
493
+ love
494
+ fax
495
+ php
496
+ lp
497
+ tracking
498
+ thumbs
499
+ up
500
+ tw
501
+ campus
502
+ reg
503
+ digital
504
+ demo2
505
+ da
506
+ tr
507
+ otrs
508
+ web6
509
+ ns02
510
+ mailgw
511
+ education
512
+ order
513
+ piwik
514
+ banners
515
+ rs
516
+ se
517
+ venus
518
+ internal
519
+ webservices
520
+ cm
521
+ whois
522
+ sync
523
+ lb
524
+ is
525
+ code
526
+ click
527
+ w2
528
+ bugzilla
529
+ virtual
530
+ origin-www
531
+ top
532
+ customer
533
+ pub
534
+ hotel
535
+ openx
536
+ log
537
+ uat
538
+ cdn3
539
+ images0
540
+ cgi
541
+ posta
542
+ reseller
543
+ soft
544
+ movie
545
+ mba
546
+ n
547
+ r
548
+ developer
549
+ nms
550
+ ns9
551
+ webcam
552
+ construtor
553
+ ebook
554
+ ftp3
555
+ join
556
+ dashboard
557
+ bi
558
+ wpad
559
+ admin2
560
+ agent
561
+ wm
562
+ books
563
+ joomla
564
+ hotels
565
+ ezproxy
566
+ ds
567
+ sa
568
+ katalog
569
+ team
570
+ emkt
571
+ antispam
572
+ adv
573
+ mercury
574
+ flash
575
+ myadmin
576
+ sklep
577
+ newsite
578
+ law
579
+ pl
580
+ ntp2
581
+ x
582
+ srv1
583
+ mp3
584
+ archives
585
+ proxy2
586
+ ps
587
+ pic
588
+ ir
589
+ orion
590
+ srv
591
+ mt
592
+ ocs
593
+ server3
594
+ meeting
595
+ v1
596
+ delta
597
+ titan
598
+ manager
599
+ subscribe
600
+ develop
601
+ wsus
602
+ oascentral
603
+ mobi
604
+ people
605
+ galleries
606
+ wwwtest
607
+ backoffice
608
+ sg
609
+ repo
610
+ soporte
611
+ www8
612
+ eu
613
+ ead
614
+ students
615
+ hq
616
+ awstats
617
+ ec
618
+ security
619
+ school
620
+ corporate
621
+ podcast
622
+ vote
623
+ conf
624
+ magento
625
+ mx4
626
+ webservice
627
+ tour
628
+ s5
629
+ power
630
+ correio
631
+ mon
632
+ mobilemail
633
+ weather
634
+ international
635
+ prod
636
+ account
637
+ xx
638
+ pages
639
+ pgadmin
640
+ bfn2
641
+ webserver
642
+ www-test
643
+ maintenance
644
+ me
645
+ magazine
646
+ syslog
647
+ int
648
+ view
649
+ enews
650
+ ci
651
+ au
652
+ mis
653
+ dev3
654
+ pdf
655
+ mailgate
656
+ v3
657
+ ss
658
+ internet
659
+ host1
660
+ smtp01
661
+ journal
662
+ wireless
663
+ opac
664
+ w1
665
+ signup
666
+ database
667
+ demo1
668
+ br
669
+ android
670
+ career
671
+ listserv
672
+ bt
673
+ spb
674
+ cam
675
+ contacts
676
+ webtest
677
+ resources
678
+ 1
679
+ life
680
+ mail6
681
+ transfer
682
+ app1
683
+ confluence
684
+ controlpanel
685
+ secure2
686
+ puppet
687
+ classifieds
688
+ tunet
689
+ edge
690
+ biz
691
+ host3
692
+ red
693
+ newmail
694
+ mx02
695
+ sb
696
+ physics
697
+ ap
698
+ epaper
699
+ sts
700
+ proxy1
701
+ ww1
702
+ stg
703
+ sd
704
+ science
705
+ star
706
+ www9
707
+ phoenix
708
+ pluto
709
+ webdav
710
+ booking
711
+ eshop
712
+ edit
713
+ panelstats
714
+ xmpp
715
+ food
716
+ cert
717
+ adfs
718
+ mail02
719
+ cat
720
+ edm
721
+ vcenter
722
+ mysql2
723
+ sun
724
+ phone
725
+ surveys
726
+ smart
727
+ system
728
+ twitter
729
+ updates
730
+ webmail1
731
+ logs
732
+ sitedefender
733
+ as
734
+ cbf1
735
+ sugar
736
+ contact
737
+ vm
738
+ ipad
739
+ traffic
740
+ dm
741
+ saturn
742
+ bo
743
+ network
744
+ ac
745
+ ns13
746
+ webdev
747
+ libguides
748
+ asp
749
+ tm
750
+ core
751
+ mms
752
+ abc
753
+ scripts
754
+ fm
755
+ sm
756
+ test4
757
+ nas
758
+ newsletters
759
+ rsc
760
+ cluster
761
+ learn
762
+ panelstatsmail
763
+ lb1
764
+ usa
765
+ apollo
766
+ pre
767
+ terminal
768
+ l
769
+ tc
770
+ movies
771
+ sh
772
+ fms
773
+ dms
774
+ z
775
+ base
776
+ jwc
777
+ gs
778
+ kvm
779
+ bfn1
780
+ card
781
+ web02
782
+ lg
783
+ editor
784
+ metrics
785
+ feed
786
+ repository
787
+ asterisk
788
+ sns
789
+ global
790
+ counter
791
+ ch
792
+ sistemas
793
+ pc
794
+ china
795
+ u
796
+ payments
797
+ ma
798
+ pics
799
+ www10
800
+ e-learning
801
+ auction
802
+ hub
803
+ sf
804
+ cbf8
805
+ forum2
806
+ ns14
807
+ app2
808
+ passport
809
+ hd
810
+ talk
811
+ ex
812
+ debian
813
+ ct
814
+ rc
815
+ 2012
816
+ imap4
817
+ blog2
818
+ ce
819
+ sk
820
+ relay2
821
+ green
822
+ print
823
+ geo
824
+ multimedia
825
+ iptv
826
+ backup2
827
+ webapps
828
+ audio
829
+ ro
830
+ smtp4
831
+ pg
832
+ ldap2
833
+ backend
834
+ profile
835
+ oldwww
836
+ drive
837
+ bill
838
+ listas
839
+ orders
840
+ win
841
+ mag
842
+ apply
843
+ bounce
844
+ mta
845
+ hp
846
+ suporte
847
+ dir
848
+ pa
849
+ sys
850
+ mx0
851
+ ems
852
+ antivirus
853
+ web8
854
+ inside
855
+ play
856
+ nic
857
+ welcome
858
+ premium
859
+ exam
860
+ sub
861
+ cz
862
+ omega
863
+ boutique
864
+ pp
865
+ management
866
+ planet
867
+ ww3
868
+ orange
869
+ c1
870
+ zzb
871
+ form
872
+ ecommerce
873
+ tmp
874
+ plus
875
+ openvpn
876
+ fw1
877
+ hk
878
+ owncloud
879
+ history
880
+ clientes
881
+ srv2
882
+ img4
883
+ open
884
+ registration
885
+ mp
886
+ blackboard
887
+ fc
888
+ static3
889
+ server4
890
+ s6
891
+ ecard
892
+ dspace
893
+ dns01
894
+ md
895
+ mcp
896
+ ares
897
+ spf
898
+ kms
899
+ intranet2
900
+ accounts
901
+ webapp
902
+ ask
903
+ rd
904
+ www-dev
905
+ gw2
906
+ mall
907
+ bg
908
+ teste
909
+ ldap1
910
+ real
911
+ m3
912
+ wave
913
+ movil
914
+ portal2
915
+ kids
916
+ gw1
917
+ ra
918
+ tienda
919
+ private
920
+ po
921
+ 2013
922
+ cdn4
923
+ gps
924
+ km
925
+ ent
926
+ tt
927
+ ns21
928
+ at
929
+ athena
930
+ cbf2
931
+ webmail3
932
+ mob
933
+ matrix
934
+ ns15
935
+ send
936
+ lb2
937
+ pos
938
+ 2
939
+ cl
940
+ renew
941
+ admissions
942
+ am
943
+ beta2
944
+ gamma
945
+ mx5
946
+ portfolio
947
+ contest
948
+ box
949
+ mg
950
+ wwwold
951
+ neptune
952
+ mac
953
+ pms
954
+ traveler
955
+ media2
956
+ studio
957
+ sw
958
+ imp
959
+ bs
960
+ alfa
961
+ cbf4
962
+ servicedesk
963
+ wmail
964
+ video2
965
+ switch
966
+ sam
967
+ sky
968
+ ee
969
+ widget
970
+ reklama
971
+ msn
972
+ paris
973
+ tms
974
+ th
975
+ vega
976
+ trade
977
+ intern
978
+ ext
979
+ oldsite
980
+ learning
981
+ group
982
+ f1
983
+ ns22
984
+ ns20
985
+ demo3
986
+ bm
987
+ dom
988
+ pe
989
+ annuaire
990
+ portail
991
+ graphics
992
+ iris
993
+ one
994
+ robot
995
+ ams
996
+ s7
997
+ foro
998
+ gaia
999
+ vpn3
tdagent/tools/get_domain_information.py ADDED
@@ -0,0 +1,337 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json
2
+ import os
3
+ from concurrent.futures import ThreadPoolExecutor
4
+ from pathlib import Path
5
+ from typing import Any
6
+
7
+ import gradio as gr
8
+ import requests
9
+ import urllib3
10
+ from dns import message
11
+
12
+
13
+ _DNS_SERVER = "https://dns.google/dns-query" # can use others
14
+ _DNS_RECORD_TYPES = [
15
+ "A",
16
+ "AAAA",
17
+ "CNAME",
18
+ "MX",
19
+ "NS",
20
+ "SOA",
21
+ "TXT",
22
+ "RP",
23
+ "LOC",
24
+ "CAA",
25
+ "SPF",
26
+ "SRV",
27
+ "NSEC",
28
+ "RRSIG",
29
+ ]
30
+
31
+ _COMMON_SUBDOMAINS_TXT_PATH = Path("./subdomains/subdomains.txt")
32
+
33
+
34
+ def get_geolocation(ip: str) -> dict[str, Any] | str:
35
+ """Get location information from an ip address.
36
+
37
+ Returns the following information on an ip address:
38
+ 1. IPv4
39
+ 2. city
40
+ 4. country_code
41
+ 5. country_name
42
+ 6. latitude
43
+ 7. longitude
44
+ 8. postal
45
+ 9. state
46
+
47
+ Example:
48
+ >>> from pprint import pprint
49
+ >>> pprint(get_location("103.100.104.0"))
50
+ ... {'IPv4': '103.100.104.0',
51
+ 'city': None,
52
+ 'country_code': 'NZ',
53
+ 'country_name': 'New Zealand',
54
+ 'latitude': -41,
55
+ 'longitude': 174,
56
+ 'postal': None,
57
+ 'state': None}
58
+
59
+ Args:
60
+ ip: ip address
61
+
62
+ Returns:
63
+ Location information on the ip address.
64
+ """
65
+ try:
66
+ return requests.get(
67
+ f"https://geolocation-db.com/json/{ip}",
68
+ timeout=0.5,
69
+ ).json()
70
+ except Exception as e: # noqa: BLE001
71
+ return str(e)
72
+
73
+
74
+ def _request_dns_record(domain: str, record_type: str) -> list[str]:
75
+ """Utility to build dns resolve requests that do not use port 53.
76
+
77
+ Args:
78
+ domain: domain to investigate
79
+ record_type: record type
80
+
81
+ Returns:
82
+ Information about the dns record type for the domain.
83
+ """
84
+ q = message.make_query(domain, record_type)
85
+ response = requests.post(
86
+ _DNS_SERVER,
87
+ headers={
88
+ "Content-Type": "application/dns-message",
89
+ "Accept": "application/dns-message",
90
+ },
91
+ data=q.to_wire(),
92
+ verify=True,
93
+ timeout=0.2,
94
+ )
95
+ dns_message = message.from_wire(response.content)
96
+ return [str(rdata) for rdata in dns_message.answer[0]] if dns_message.answer else []
97
+
98
+
99
+ # see: https://thepythoncode.com/article/dns-enumeration-with-python
100
+ # https://dnspython.readthedocs.io
101
+ def enumerate_dns(domain_name: str) -> dict[str, Any] | None:
102
+ r"""Enumerates information about a specific domain's DNS configuration.
103
+
104
+ Information collected about the domain name:
105
+ 1. A records: the IPv4 associated with the domain
106
+ 2. AAAA records: the IPv6 associated with the domain
107
+ 3. CAA records: used by owners to specify which Certificate Authorities
108
+ are authorized to issue SSL/TLS certificates for their domains.
109
+ 4. CNAME records: alias of one name to another - the DNS lookup will
110
+ continue by retrying the lookup with the new name.
111
+ 5. LOC records: geographic location associated with a domain name.
112
+ 6. MX records: associated email servers to the domain.
113
+ 7. NS records: DNS servers that are authoritative for a particular domain.
114
+ These may be use to inquire information about the domain.
115
+ 8. SOA records: defines authoritative information about a DNS zone,
116
+ including zone transfers and cache expiration.
117
+ 9. TXT records: used for domain verification and email security.
118
+ 10. RP records: the responsible person for a domain.
119
+ 11. SPF records: defines authorized email servers.
120
+ 12. SRV records: specifies location of specific services
121
+ (port and host) for the domain.
122
+ 14. NSEC records: proves non-existence of DNS records
123
+ and prevents zone enumeration.
124
+ 15. RRSIG records: contains cryptographic signatures for DNSSEC-signed
125
+ records, providing authentication and integrity.
126
+
127
+ Example:
128
+ >>> from pprint import pprint
129
+ >>> pprint(enumerate_dns("youtube.com"))
130
+ ... {'A': 'youtube.com. 300 IN A 142.250.200.142',
131
+ 'AAAA': 'youtube.com. 286 IN AAAA 2a00:1450:4003:80f::200e',
132
+ 'CAA': 'youtube.com. 14352 IN CAA 0 issue "pki.goog"',
133
+ 'CNAME': None,
134
+ 'LOC': None,
135
+ 'MX': 'youtube.com. 300 IN MX 0 smtp.google.com.',
136
+ 'NS': 'youtube.com. 21600 IN NS ns4.google.com.\n'
137
+ 'youtube.com. 21600 IN NS ns1.google.com.\n'
138
+ 'youtube.com. 21600 IN NS ns2.google.com.\n'
139
+ 'youtube.com. 21600 IN NS ns3.google.com.',
140
+ 'NSEC': None,
141
+ 'RP': None,
142
+ 'RRSIG': None,
143
+ 'SOA': 'youtube.com. 60 IN SOA ns1.google.com. dns-admin.google.com. '
144
+ '766113658 900 900 1800 60',
145
+ 'SPF': None,
146
+ 'SRV': None,
147
+ 'TXT': 'youtube.com. 3586 IN TXT "v=spf1 include:google.com mx -all"\n'
148
+ 'youtube.com. 3586 IN TXT '
149
+ '"facebook-domain-verification=64jdes7le4h7e7lfpi22rijygx58j1"\n'
150
+ 'youtube.com. 3586 IN TXT '
151
+ '"google-site-verification=QtQWEwHWM8tHiJ4s-jJWzEQrD_fF3luPnpzNDH-Nw-w"'}
152
+
153
+ Args:
154
+ domain_name: domain name for which to
155
+ enumerate the DNS configuration.
156
+
157
+ Returns:
158
+ The domain's DNS configuration.
159
+ """
160
+ enumeration = {}
161
+ for record_type in _DNS_RECORD_TYPES:
162
+ try:
163
+ record = _request_dns_record(domain_name, record_type)
164
+ if record:
165
+ enumeration[record_type] = record
166
+ except Exception as e: # noqa: BLE001, PERF203
167
+ enumeration[record_type] = [str(e)]
168
+ return enumeration if enumeration else None
169
+
170
+
171
+ def resolve_subdomain_ipv4(domain: str) -> str | None:
172
+ """Resolve the IPv4 address of a domain.
173
+
174
+ Args:
175
+ domain: domain name
176
+
177
+ Returns:
178
+ The domain is returned provided
179
+ it was resolved. Otherwise nothing
180
+ is returned.
181
+ """
182
+ try:
183
+ _request_dns_record(domain, "A")
184
+ return domain # noqa: TRY300
185
+ except Exception: # noqa: BLE001
186
+ return None
187
+
188
+
189
+ def scrap_subdomains_for_domain(domain_name: str) -> list[str]:
190
+ """Retrieves subdomains associated to a domain if any.
191
+
192
+ The information retrieved from a domain is its subdomains
193
+ provided they are the top 1000 subdomain prefixes as
194
+ indicated by https://github.com/rbsec/dnscan/tree/master
195
+
196
+ Importantly, it finds subdomains only if their prefixes
197
+ are along the top 1000 most common. Hence, it may not
198
+ yield all the subdomains associated to the domain.
199
+
200
+ Example:
201
+ >>> scrap_subdomains_for_domain("github.com")
202
+ ... ['www.github.com', 'smtp.github.com', 'ns1.github.com',
203
+ 'ns2.github.com','autodiscover.github.com', 'test.github.com',
204
+ 'blog.github.com', 'admin.github.com', 'support.github.com',
205
+ 'docs.github.com', 'shop.github.com', 'wiki.github.com',
206
+ 'api.github.com', 'live.github.com', 'help.github.com',
207
+ 'jobs.github.com', 'services.github.com', 'de.github.com',
208
+ 'cs.github.com', 'fr.github.com', 'ssh.github.com',
209
+ 'partner.github.com', 'community.github.com',
210
+ 'mailer.github.com', 'training.github.com', ...]
211
+
212
+ Args:
213
+ domain_name: domain name for which to retrieve a
214
+ list of subdomains
215
+
216
+ Returns:
217
+ List of subdomains if any.
218
+ """
219
+ try:
220
+ with open(_COMMON_SUBDOMAINS_TXT_PATH) as file: # noqa: PTH123
221
+ subdomains = [line.strip() for line in file if line.strip()]
222
+ except FileNotFoundError:
223
+ return []
224
+
225
+ potential_subdomains = [f"{subdomain}.{domain_name}" for subdomain in subdomains]
226
+ with ThreadPoolExecutor(max_workers=5) as executor:
227
+ results = executor.map(resolve_subdomain_ipv4, potential_subdomains)
228
+ return [domain for domain in results if domain]
229
+
230
+
231
+ def retrieve_ioc_from_threatfox(potentially_ioc: str) -> str:
232
+ r"""Retrieves information about a potential IoC from ThreatFox.
233
+
234
+ It may be used to retrieve information of indicators of compromise
235
+ (IOCs) associated with malware, with the infosec community, AV
236
+ vendors and cyber threat intelligence providers.
237
+
238
+ Examples:
239
+ >>> retrieve_ioc_from_threatfox("139.180.203.104")
240
+ ... {
241
+ "query_status": "ok",
242
+ "data": [
243
+ {
244
+ "id": "12",
245
+ "ioc": "139.180.203.104:443",
246
+ "threat_type": "botnet_cc",
247
+ "threat_type_desc": "Indicator that identifies a botnet command&control...",
248
+ "ioc_type": "ip:port",
249
+ "ioc_type_desc": "ip:port combination that is used for botnet Command&...,
250
+ "malware": "win.cobalt_strike",
251
+ "malware_printable": "Cobalt Strike",
252
+ "malware_alias": "Agentemis,BEACON,CobaltStrike",
253
+ "malware_malpedia": "https:\/\/malpedia.caad.fkie.fraunhofer.de\/...",
254
+ "confidence_level": 75,
255
+ "first_seen": "2020-12-06 09:10:23 UTC",
256
+ "last_seen": null,
257
+ "reference": null,
258
+ "reporter": "abuse_ch",
259
+ "tags": null,
260
+ "malware_samples": [
261
+ {
262
+ "time_stamp": "2021-03-23 08:18:06 UTC",
263
+ "md5_hash": "5b7e82e051ade4b14d163eea2a17bf8b",
264
+ "sha256_hash": "b325c92fa540edeb89b95dbfd4400c1cb33599c66859....",
265
+ "malware_bazaar": "https:\/\/bazaar.abuse.ch\/sample\/b325c...\/"
266
+ },
267
+ ]
268
+
269
+ }
270
+ ]
271
+ }
272
+
273
+ Args:
274
+ potentially_ioc: this can be a url, a domain, a hash,
275
+ or any other type of IoC.
276
+
277
+ Returns:
278
+ Information of the input as an IoC: threat type, malware type andsamples,
279
+ confidence level, first/last seen dates, and more IoC information.
280
+ """
281
+ headers = {"Auth-Key": os.environ["THREATFOX_APIKEY"]}
282
+ pool = urllib3.HTTPSConnectionPool(
283
+ "threatfox-api.abuse.ch",
284
+ port=443,
285
+ maxsize=50,
286
+ headers=headers,
287
+ )
288
+ data = {
289
+ "query": "search_ioc",
290
+ "search_term": potentially_ioc,
291
+ }
292
+ json_data = json.dumps(data)
293
+ try:
294
+ response = pool.request("POST", "/api/v1/", body=json_data)
295
+ return response.data.decode("utf-8", "ignore")
296
+ except Exception as e: # noqa: BLE001
297
+ return str(e)
298
+
299
+
300
+ geo_location_tool = gr.Interface(
301
+ fn=get_geolocation,
302
+ inputs=["text"],
303
+ outputs=["text"],
304
+ title="Domain Associated Geolocation Finder",
305
+ description="Retrieves the geolocation associated to an input ip address",
306
+ theme="default",
307
+ )
308
+
309
+ dns_enumeration_tool = gr.Interface(
310
+ fn=enumerate_dns,
311
+ inputs=["text"],
312
+ outputs=["text"],
313
+ title="DNS record enumerator of domains",
314
+ description="Retrieves several dns record types for the input domain names",
315
+ theme="default",
316
+ )
317
+
318
+ scrap_subdomains_tool = gr.Interface(
319
+ fn=scrap_subdomains_for_domain,
320
+ inputs=["text"],
321
+ outputs=["text"],
322
+ title="Subdomains Extractor of domains",
323
+ description="Retrieves the subdomains for the input domain if they are common",
324
+ theme="default",
325
+ )
326
+
327
+ extractor_of_ioc_from_threatfox_tool = gr.Interface(
328
+ fn=retrieve_ioc_from_threatfox,
329
+ inputs=["text"],
330
+ outputs=["text"],
331
+ title="IoC information extractor associated to particular entities",
332
+ description=(
333
+ "If information as an Indicator of Compromise (IoC) exists"
334
+ "for the input url, domain or hash, it retrieves it"
335
+ ),
336
+ theme="default",
337
+ )
tdagent/tools/retrieve_from_mitre_attack.py ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Any
2
+
3
+ import cachetools
4
+ import gradio as gr
5
+ from attackcti import attack_client
6
+
7
+
8
+ _CACHE_MAX_SIZE = 4096
9
+ _CACHE_TTL_SECONDS = 3600
10
+
11
+
12
+ @cachetools.cached(
13
+ cache=cachetools.TTLCache(maxsize=_CACHE_MAX_SIZE, ttl=_CACHE_TTL_SECONDS),
14
+ )
15
+ def get_stix_object_of_attack_id(
16
+ attack_id: str,
17
+ object_type: str = "attack-pattern",
18
+ ) -> dict[str, Any]:
19
+ """Retrieves a STIX object identified by an ATT&CK ID in all ATT&CK matrices.
20
+
21
+ Args:
22
+ attack_id (str): The ATT&CK ID (e.g., 'T1234') of the STIX object to retrieve.
23
+ object_type (str): The type of STIX object to retrieve, such as
24
+ 'attack-pattern', 'course-of-action', 'intrusion-set',
25
+ 'malware', 'tool', or 'x-mitre-data-component'. Default is 'attack-pattern'
26
+
27
+ Returns:
28
+ A list containing the matched STIX object, either in its raw STIX format
29
+ or as a custom dictionary following the structure defined by the relevant
30
+ Pydantic model, depending on the 'stix_format' flag.
31
+ """
32
+ lift = attack_client()
33
+ return lift.get_object_by_attack_id(
34
+ object_type=object_type,
35
+ attack_id=attack_id,
36
+ stix_format=False,
37
+ )[0]
38
+
39
+
40
+ gr_get_stix_of_attack_id = gr.Interface(
41
+ fn=get_stix_object_of_attack_id,
42
+ inputs=["text", "text"],
43
+ outputs="json",
44
+ title="MITRE ATT&CK STIX information",
45
+ description=(
46
+ "Retrieves a specific STIX object identified by an ATT&CK ID across all ATT&CK"
47
+ " matrices"
48
+ ),
49
+ )
uv.lock CHANGED
The diff for this file is too large to render. See raw diff