diff --git a/analyzers/AnyRun/AnyRun_Sandbox_Analysis.json b/analyzers/AnyRun/AnyRun_Sandbox_Analysis.json
deleted file mode 100644
index f1a2a3e76..000000000
--- a/analyzers/AnyRun/AnyRun_Sandbox_Analysis.json
+++ /dev/null
@@ -1,151 +0,0 @@
-{
- "name": "AnyRun_Sandbox_Analysis",
- "version": "1.1",
- "author": "Andrea Garavaglia, Davide Arcuri, LDO-CERT; Nate Olsen, WSECU",
- "url": "https://github.com/TheHive-Project/Cortex-Analyzers",
- "license": "AGPL-V3",
- "description": "Any.Run Sandbox file analysis",
- "dataTypeList": ["file", "url"],
- "command": "AnyRun/anyrun_analyzer.py",
- "baseConfig": "AnyRun",
- "configurationItems": [
- {
- "name": "token",
- "description": "API token",
- "type": "string",
- "multi": false,
- "required": false
- },
- {
- "name": "privacy_type",
- "description": "Define the privacy setting (Allowed values: public, bylink, owner)",
- "type": "string",
- "multi": false,
- "required": true,
- "defaultValue": "bylink"
- },
- {
- "name": "verify_ssl",
- "description": "Verify SSL certificate",
- "type": "boolean",
- "multi": false,
- "required": true,
- "defaultValue": true
- },
- {
- "name": "env_bitness",
- "description": "default OS bitness; 32 or 64",
- "type": "number",
- "multi": false,
- "required": false,
- "defaultValue": 32
- },
- {
- "name": "env_version",
- "description": "Which version of Windows do you want to use by default? allowed values: \"vista\", \"7\", \"8.1\", \"10\"",
- "type": "string",
- "multi": false,
- "required": false,
- "defaultValue": "7"
- },
- {
- "name": "env_type",
- "description": "How much do you want pre-installed in the runtime environment? allowed values: \"clean\", \"office\", \"complete\"",
- "type": "string",
- "multi": false,
- "required": false,
- "defaultValue": "complete"
- },
- {
- "name": "opt_network_connect",
- "description": "Do you want to disable networking? set false to disable",
- "type": "boolean",
- "multi": false,
- "required": false,
- "defaultValue": true
- },
- {
- "name": "opt_network_fakenet",
- "description": "FakeNet feature status; set true to enable.",
- "type": "boolean",
- "multi": false,
- "required": false,
- "defaultValue": false
- },
- {
- "name": "opt_network_tor",
- "description": "TOR using.",
- "type": "Boolean",
- "multi": false,
- "required": false,
- "defaultValue": false
- },
- {
- "name": "opt_network_mitm",
- "description": "HTTPS MITM proxy option.",
- "type": "Boolean",
- "multi": false,
- "required": false,
- "defaultValue": false
- },
- {
- "name": "opt_network_geo",
- "description": "Geo location option. Allowed values: \"fastest\", \"AU\", \"BR\", \"DE\", \"CH\", \"FR\", \"KR\", \"US\", \"RU\", \"GB\", \"IT\"",
- "type": "String",
- "multi": false,
- "required": false,
- "defaultValue": "fastest"
- },
- {
- "name": "opt_kernel_heavyevasion",
- "description": "Heavy evasion option. Default value: false",
- "type": "Boolean",
- "multi": false,
- "required": false,
- "defaultValue": false
- },
- {
- "name": "opt_timeout",
- "description": "Timeout option. Size range: 10-660",
- "type": "Number",
- "multi": false,
- "required": false,
- "defaultValue": "60"
- },
- {
- "name": "obj_ext_startfolder",
- "description": "Start object from. Allowed values: \"desktop\", \"home\", \"downloads\", \"appdata\", \"temp\", \"windows\", \"root\"",
- "type": "String",
- "multi": false,
- "required": false,
- "defaultValue": "temp"
- },
- {
- "name": "obj_ext_browser",
- "description": "Choose which browser to use. Allowed values: \"Google Chrome\", \"Mozilla Firefox\", \"Opera\", \"Internet Explorer\"",
- "type": "String",
- "multi": false,
- "required": false,
- "defaultValue": "Internet Explorer"
- }
- ],
- "registration_required": true,
- "subscription_required": true,
- "free_subscription": false,
- "service_homepage": "https://any.run/",
- "service_logo": {
- "path": "assets/anyrun.png",
- "caption": "AnyRun logo"
- },
- "screenshots": [
- {
- "path": "assets/short_report.png",
- "caption": "AnyRun: Short report template"
- },
-
- {
- "path": "assets/long_report.png",
- "caption": "AnyRun: Long report template"
- }
- ]
-}
diff --git a/analyzers/AnyRun/AnyRun_Sandbox_File_Android.json b/analyzers/AnyRun/AnyRun_Sandbox_File_Android.json
new file mode 100644
index 000000000..ee6ac124f
--- /dev/null
+++ b/analyzers/AnyRun/AnyRun_Sandbox_File_Android.json
@@ -0,0 +1,180 @@
+{
+ "name": "AnyRun_Sandbox_File_Android",
+ "version": "1.0",
+ "author": "ANY.RUN Integrations Team",
+ "url": "https://github.com/TheHive-Project/Cortex-Analyzers",
+ "license": "AGPL-V3",
+ "description": "Run File analysis using Android VM",
+ "dataTypeList": ["file"],
+ "command": "AnyRun/anyrun_analyzer.py",
+ "baseConfig": "AnyRun",
+ "config": {
+ "os": "android",
+ "analysis_type": "file"
+ },
+ "configurationItems": [
+ {
+ "name": "api_key",
+ "description": "ANY.RUN Sandbox API key",
+ "type": "string",
+ "multi": false,
+ "required": true
+ },
+ {
+ "name": "verify_ssl",
+ "description": "Verify SSL certificate",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "get_html_report",
+ "description": "Attach HTML report to the case as observable",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "get_iocs",
+ "description": "Attach Analysis IOCs to the case as observables",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "extract_malicious_iocs",
+ "description": "When enabled, extracts only Suspicious and Malicious IOCs. When disabled, extracts all IOCs",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "get_network_traffic_dump",
+ "description": "Attach PCAP file to the case as observable",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "env_locale",
+ "description": "Operation System language. Use locale identifier or country name Example - ( \"en-US\" or \"Brazil\"). Case insensitive",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "en-US"
+ },
+ {
+ "name": "opt_network_connect",
+ "description": "Network connection state",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": true
+ },
+ {
+ "name": "opt_network_fakenet",
+ "description": "FakeNet feature status",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_tor",
+ "description": "TOR using",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_geo",
+ "description": "TOR geo location option",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "fastest"
+ },
+ {
+ "name": "opt_network_mitm",
+ "description": "HTTPS MITM proxy option",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_residential_proxy",
+ "description": "Residential Proxy option",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_residential_proxy_geo",
+ "description": "Residential Proxy Geo option",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "fastest"
+ },
+ {
+ "name": "opt_privacy_type",
+ "description": "Privacy settings. Supports: public, bylink, owner, byteam",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "bylink"
+ },
+ {
+ "name": "opt_timeout",
+ "description": "Timeout option, size range 10-660",
+ "type": "Number",
+ "multi": false,
+ "required": false,
+ "defaultValue": "240"
+ },
+ {
+ "name": "opt_auto_delete_after",
+ "description": "Specify after what period of time this report should be deleted. Supports: day, week, 2 weeks, month. Leave blank for the task's infinite lifetime",
+ "type": "string",
+ "multi": false,
+ "required": false
+ },
+ {
+ "name": "obj_ext_cmd",
+ "description": "Optional command line",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": ""
+ },
+ {
+ "name": "user_tags",
+ "description": "Append User Tags to new analysis. Only characters a-z, A-Z, 0-9, hyphen (-), and comma (,) are allowed. Max tag length - 16 characters. Max unique tags per analysis - 8",
+ "type": "string",
+ "multi": false,
+ "required": false
+ }
+ ],
+ "registration_required": true,
+ "subscription_required": true,
+ "free_subscription": false,
+ "service_homepage": "https://any.run/",
+ "service_logo": {
+ "path": "assets/anyrun.png",
+ "caption": "AnyRun logo"
+ },
+ "screenshots": [
+ {
+ "path": "assets/long_report.png",
+ "caption": "AnyRun: Long report template"
+ }
+ ]
+}
diff --git a/analyzers/AnyRun/AnyRun_Sandbox_File_Linux.json b/analyzers/AnyRun/AnyRun_Sandbox_File_Linux.json
new file mode 100644
index 000000000..3771133a8
--- /dev/null
+++ b/analyzers/AnyRun/AnyRun_Sandbox_File_Linux.json
@@ -0,0 +1,212 @@
+{
+ "name": "AnyRun_Sandbox_File_Linux",
+ "version": "1.0",
+ "author": "ANY.RUN Integrations Team",
+ "url": "https://github.com/TheHive-Project/Cortex-Analyzers",
+ "license": "AGPL-V3",
+ "description": "Run File analysis using Linux VM",
+ "dataTypeList": ["file"],
+ "command": "AnyRun/anyrun_analyzer.py",
+ "baseConfig": "AnyRun",
+ "config": {
+ "os": "linux",
+ "analysis_type": "file"
+ },
+ "configurationItems": [
+ {
+ "name": "api_key",
+ "description": "ANY.RUN Sandbox API key",
+ "type": "string",
+ "multi": false,
+ "required": true
+ },
+ {
+ "name": "verify_ssl",
+ "description": "Verify SSL certificate",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "get_html_report",
+ "description": "Attach HTML report to the case as observable",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "get_iocs",
+ "description": "Attach Analysis IOCs to the case as observables",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "extract_malicious_iocs",
+ "description": "When enabled, extracts only Suspicious and Malicious IOCs. When disabled, extracts all IOCs",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "get_network_traffic_dump",
+ "description": "Attach PCAP file to the case as observable",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "env_os",
+ "description": "Operation System. Supports ubuntu, debian",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "ubuntu"
+ },
+ {
+ "name": "env_locale",
+ "description": "Operation System language. Use locale identifier or country name Example - ( \"en-US\" or \"Brazil\"). Case insensitive",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "en-US"
+ },
+ {
+ "name": "opt_network_connect",
+ "description": "Network connection state",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": true
+ },
+ {
+ "name": "opt_network_fakenet",
+ "description": "FakeNet feature status",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_tor",
+ "description": "TOR using",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_geo",
+ "description": "TOR geo location option",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "fastest"
+ },
+ {
+ "name": "opt_network_mitm",
+ "description": "HTTPS MITM proxy option",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_residential_proxy",
+ "description": "Residential Proxy option",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_residential_proxy_geo",
+ "description": "Residential Proxy Geo option",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "fastest"
+ },
+ {
+ "name": "opt_privacy_type",
+ "description": "Privacy settings. Supports: public, bylink, owner, byteam",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "bylink"
+ },
+ {
+ "name": "opt_timeout",
+ "description": "Timeout option, size range 10-660",
+ "type": "Number",
+ "multi": false,
+ "required": false,
+ "defaultValue": "240"
+ },
+ {
+ "name": "opt_auto_delete_after",
+ "description": "Specify after what period of time this report should be deleted. Supports: day, week, 2 weeks, month. Leave blank for the task's infinite lifetime",
+ "type": "string",
+ "multi": false,
+ "required": false
+ },
+ {
+ "name": "obj_ext_extension",
+ "description": "Automatically change extension to valid",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": true
+ },
+ {
+ "name": "obj_ext_cmd",
+ "description": "Optional command line",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": ""
+ },
+ {
+ "name": "obj_ext_startfolder",
+ "description": "Start object from. Supports: desktop, home, downloads, temp",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "temp"
+ },
+ {
+ "name": "run_as_root",
+ "description": "Run file with superuser privileges",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": true
+ },
+ {
+ "name": "user_tags",
+ "description": "Append User Tags to new analysis. Only characters a-z, A-Z, 0-9, hyphen (-), and comma (,) are allowed. Max tag length - 16 characters. Max unique tags per analysis - 8",
+ "type": "string",
+ "multi": false,
+ "required": false
+ }
+ ],
+ "registration_required": true,
+ "subscription_required": true,
+ "free_subscription": false,
+ "service_homepage": "https://any.run/",
+ "service_logo": {
+ "path": "assets/anyrun.png",
+ "caption": "AnyRun logo"
+ },
+ "screenshots": [
+ {
+ "path": "assets/long_report.png",
+ "caption": "AnyRun: Long report template"
+ }
+ ]
+}
diff --git a/analyzers/AnyRun/AnyRun_Sandbox_File_Windows.json b/analyzers/AnyRun/AnyRun_Sandbox_File_Windows.json
new file mode 100644
index 000000000..1e1d8aadf
--- /dev/null
+++ b/analyzers/AnyRun/AnyRun_Sandbox_File_Windows.json
@@ -0,0 +1,236 @@
+{
+ "name": "AnyRun_Sandbox_File_Windows",
+ "version": "1.0",
+ "author": "ANY.RUN Integrations Team",
+ "url": "https://github.com/TheHive-Project/Cortex-Analyzers",
+ "license": "AGPL-V3",
+ "description": "Run File analysis using Windows VM",
+ "dataTypeList": ["file"],
+ "command": "AnyRun/anyrun_analyzer.py",
+ "baseConfig": "AnyRun",
+ "config": {
+ "os": "windows",
+ "analysis_type": "file"
+ },
+ "configurationItems": [
+ {
+ "name": "api_key",
+ "description": "ANY.RUN Sandbox API key",
+ "type": "string",
+ "multi": false,
+ "required": true
+ },
+ {
+ "name": "verify_ssl",
+ "description": "Verify SSL certificate",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "get_html_report",
+ "description": "Attach HTML report to the case as observable",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "get_network_traffic_dump",
+ "description": "Attach PCAP file to the case as observable",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "get_iocs",
+ "description": "Attach Analysis IOCs to the case as observables",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "extract_malicious_iocs",
+ "description": "When enabled, extracts only Suspicious and Malicious IOCs. When disabled, extracts all IOCs",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "env_version",
+ "description": "Version of OS. Supports: 7, 10, 11, server 2025",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "10"
+ },
+ {
+ "name": "env_bitness",
+ "description": "Bitness of Operation System. Supports 32, 64 for Windows. 64 for Windows Server 2025",
+ "type": "Number",
+ "multi": false,
+ "required": false,
+ "defaultValue": 64
+ },
+ {
+ "name": "env_type",
+ "description": "Environment preset type. You can select **development** env for OS Windows 10 x64. For all other cases, **complete** env is required",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "complete"
+ },
+ {
+ "name": "env_locale",
+ "description": "Operation System language. Use locale identifier or country name Example - ( \"en-US\" or \"Brazil\"). Case insensitive",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "en-US"
+ },
+ {
+ "name": "opt_network_connect",
+ "description": "Network connection state",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": true
+ },
+ {
+ "name": "opt_network_fakenet",
+ "description": "FakeNet feature status",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_tor",
+ "description": "TOR using",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_geo",
+ "description": "TOR geo location option",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "fastest"
+ },
+ {
+ "name": "opt_network_mitm",
+ "description": "HTTPS MITM proxy option",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_residential_proxy",
+ "description": "Residential Proxy option",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_residential_proxy_geo",
+ "description": "Residential Proxy Geo option",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "fastest"
+ },
+ {
+ "name": "opt_privacy_type",
+ "description": "Privacy settings. Supports: public, bylink, owner, byteam",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "bylink"
+ },
+ {
+ "name": "opt_timeout",
+ "description": "Timeout option, size range 10-660",
+ "type": "Number",
+ "multi": false,
+ "required": false,
+ "defaultValue": "240"
+ },
+ {
+ "name": "opt_auto_delete_after",
+ "description": "Specify after what period of time this report should be deleted. Supports: day, week, 2 weeks, month. Leave blank for the task's infinite lifetime",
+ "type": "string",
+ "multi": false,
+ "required": false
+ },
+ {
+ "name": "obj_ext_extension",
+ "description": "Automatically change extension to valid",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": true
+ },
+ {
+ "name": "obj_ext_cmd",
+ "description": "Optional command line",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": ""
+ },
+ {
+ "name": "obj_ext_startfolder",
+ "description": "Start object from. Supports: desktop, home, downloads, appdata, temp, windows, root",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "temp"
+ },
+ {
+ "name": "obj_force_elevation",
+ "description": "Forces the file to execute with elevated privileges and an elevated token (for PE32, PE32+, PE64 files only)",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": true
+ },
+ {
+ "name": "auto_confirm_uac",
+ "description": "Auto confirm Windows UAC requests",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": true
+ },
+ {
+ "name": "user_tags",
+ "description": "Append User Tags to new analysis. Only characters a-z, A-Z, 0-9, hyphen (-), and comma (,) are allowed. Max tag length - 16 characters. Max unique tags per analysis - 8",
+ "type": "string",
+ "multi": false,
+ "required": false
+ }
+ ],
+ "registration_required": true,
+ "subscription_required": true,
+ "free_subscription": false,
+ "service_homepage": "https://any.run/",
+ "service_logo": {
+ "path": "assets/anyrun.png",
+ "caption": "AnyRun logo"
+ },
+ "screenshots": [
+ {
+ "path": "assets/long_report.png",
+ "caption": "AnyRun: Long report template"
+ }
+ ]
+}
diff --git a/analyzers/AnyRun/AnyRun_Sandbox_URL_Android.json b/analyzers/AnyRun/AnyRun_Sandbox_URL_Android.json
new file mode 100644
index 000000000..c305190b7
--- /dev/null
+++ b/analyzers/AnyRun/AnyRun_Sandbox_URL_Android.json
@@ -0,0 +1,179 @@
+{
+ "name": "AnyRun_Sandbox_URL_Android",
+ "version": "1.0",
+ "author": "ANY.RUN Integrations Team",
+ "url": "https://github.com/TheHive-Project/Cortex-Analyzers",
+ "license": "AGPL-V3",
+ "description": "Run URL analysis using Android VM",
+ "dataTypeList": ["url"],
+ "command": "AnyRun/anyrun_analyzer.py",
+ "baseConfig": "AnyRun",
+ "config": {
+ "os": "android",
+ "analysis_type": "url"
+ },
+ "configurationItems": [
+ {
+ "name": "api_key",
+ "description": "ANY.RUN Sandbox API key",
+ "type": "string",
+ "multi": false,
+ "required": true
+ },
+ {
+ "name": "verify_ssl",
+ "description": "Verify SSL certificate",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "get_html_report",
+ "description": "Attach HTML report to the case as observable",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "get_network_traffic_dump",
+ "description": "Attach PCAP file to the case as observable",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "get_iocs",
+ "description": "Attach Analysis IOCs to the case as observables",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "extract_malicious_iocs",
+ "description": "When enabled, extracts only Suspicious and Malicious IOCs. When disabled, extracts all IOCs",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "obj_url",
+ "description": "Target URL. Size range 5-512. Example -> (http/https)://(your-link)",
+ "type": "string",
+ "multi": false,
+ "required": false
+ },
+ {
+ "name": "env_locale",
+ "description": "Operation System language. Use locale identifier or country name Example - ( \"en-US\" or \"Brazil\"). Case insensitive",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "en-US"
+ },
+ {
+ "name": "opt_network_connect",
+ "description": "Network connection state",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": true
+ },
+ {
+ "name": "opt_network_fakenet",
+ "description": "FakeNet feature status",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_tor",
+ "description": "TOR using",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_geo",
+ "description": "TOR geo location option",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "fastest"
+ },
+ {
+ "name": "opt_network_mitm",
+ "description": "HTTPS MITM proxy option",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_residential_proxy",
+ "description": "Residential Proxy option",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_residential_proxy_geo",
+ "description": "Residential Proxy Geo option",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "fastest"
+ },
+ {
+ "name": "opt_privacy_type",
+ "description": "Privacy settings. Supports: public, bylink, owner, byteam",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "bylink"
+ },
+ {
+ "name": "opt_timeout",
+ "description": "Timeout option, size range 10-660",
+ "type": "Number",
+ "multi": false,
+ "required": false,
+ "defaultValue": "120"
+ },
+ {
+ "name": "opt_auto_delete_after",
+ "description": "Specify after what period of time this report should be deleted. Supports: day, week, 2 weeks, month. Leave blank for the task's infinite lifetime",
+ "type": "string",
+ "multi": false,
+ "required": false
+ },
+ {
+ "name": "user_tags",
+ "description": "Append User Tags to new analysis. Only characters a-z, A-Z, 0-9, hyphen (-), and comma (,) are allowed. Max tag length - 16 characters. Max unique tags per analysis - 8",
+ "type": "string",
+ "multi": false,
+ "required": false
+ }
+ ],
+ "registration_required": true,
+ "subscription_required": true,
+ "free_subscription": false,
+ "service_homepage": "https://any.run/",
+ "service_logo": {
+ "path": "assets/anyrun.png",
+ "caption": "AnyRun logo"
+ },
+ "screenshots": [
+ {
+ "path": "assets/long_report.png",
+ "caption": "AnyRun: Long report template"
+ }
+ ]
+}
diff --git a/analyzers/AnyRun/AnyRun_Sandbox_URL_Linux.json b/analyzers/AnyRun/AnyRun_Sandbox_URL_Linux.json
new file mode 100644
index 000000000..d4817ad26
--- /dev/null
+++ b/analyzers/AnyRun/AnyRun_Sandbox_URL_Linux.json
@@ -0,0 +1,204 @@
+{
+ "name": "AnyRun_Sandbox_URL_Linux",
+ "version": "1.0",
+ "author": "ANY.RUN Integrations Team",
+ "url": "https://github.com/TheHive-Project/Cortex-Analyzers",
+ "license": "AGPL-V3",
+ "description": "Run URL analysis using Linux VM",
+ "dataTypeList": ["url"],
+ "command": "AnyRun/anyrun_analyzer.py",
+ "baseConfig": "AnyRun",
+ "config": {
+ "os": "linux",
+ "analysis_type": "url"
+ },
+ "configurationItems": [
+ {
+ "name": "api_key",
+ "description": "ANY.RUN Sandbox API key",
+ "type": "string",
+ "multi": false,
+ "required": true
+ },
+ {
+ "name": "verify_ssl",
+ "description": "Verify SSL certificate",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "get_html_report",
+ "description": "Attach HTML report to the case as observable",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "get_network_traffic_dump",
+ "description": "Attach PCAP file to the case as observable",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "get_iocs",
+ "description": "Attach Analysis IOCs to the case as observables",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "extract_malicious_iocs",
+ "description": "When enabled, extracts only Suspicious and Malicious IOCs. When disabled, extracts all IOCs",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "obj_url",
+ "description": "Target URL. Size range 5-512. Example -> (http/https)://(your-link)",
+ "type": "string",
+ "multi": false,
+ "required": false
+ },
+ {
+ "name": "env_os",
+ "description": "Operation System. Supports ubuntu, debian",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "ubuntu"
+ },
+
+ {
+ "name": "env_locale",
+ "description": "Operation System language. Use locale identifier or country name Example - ( \"en-US\" or \"Brazil\"). Case insensitive",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "en-US"
+ },
+ {
+ "name": "opt_network_connect",
+ "description": "Network connection state",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": true
+ },
+ {
+ "name": "opt_network_fakenet",
+ "description": "FakeNet feature status",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_tor",
+ "description": "TOR using",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_geo",
+ "description": "TOR geo location option",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "fastest"
+ },
+ {
+ "name": "opt_network_mitm",
+ "description": "HTTPS MITM proxy option",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_residential_proxy",
+ "description": "Residential Proxy option",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_residential_proxy_geo",
+ "description": "Residential Proxy Geo option",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "fastest"
+ },
+ {
+ "name": "opt_privacy_type",
+ "description": "Privacy settings. Supports: public, bylink, owner, byteam",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "bylink"
+ },
+ {
+ "name": "opt_timeout",
+ "description": "Timeout option, size range 10-660",
+ "type": "Number",
+ "multi": false,
+ "required": false,
+ "defaultValue": "120"
+ },
+ {
+ "name": "opt_auto_delete_after",
+ "description": "Specify after what period of time this report should be deleted. Supports: day, week, 2 weeks, month. Leave blank for the task's infinite lifetime",
+ "type": "string",
+ "multi": false,
+ "required": false
+ },
+ {
+ "name": "obj_ext_browser",
+ "description": "Browser name. Supports Google Chrome, Mozilla Firefox",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "Google Chrome"
+ },
+ {
+ "name": "obj_ext_extension",
+ "description": "Automatically change extension to valid",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": true
+ },
+ {
+ "name": "user_tags",
+ "description": "Append User Tags to new analysis. Only characters a-z, A-Z, 0-9, hyphen (-), and comma (,) are allowed. Max tag length - 16 characters. Max unique tags per analysis - 8",
+ "type": "string",
+ "multi": false,
+ "required": false
+ }
+ ],
+ "registration_required": true,
+ "subscription_required": true,
+ "free_subscription": false,
+ "service_homepage": "https://any.run/",
+ "service_logo": {
+ "path": "assets/anyrun.png",
+ "caption": "AnyRun logo"
+ },
+ "screenshots": [
+ {
+ "path": "assets/long_report.png",
+ "caption": "AnyRun: Long report template"
+ }
+ ]
+}
diff --git a/analyzers/AnyRun/AnyRun_Sandbox_URL_Windows.json b/analyzers/AnyRun/AnyRun_Sandbox_URL_Windows.json
new file mode 100644
index 000000000..4db41293c
--- /dev/null
+++ b/analyzers/AnyRun/AnyRun_Sandbox_URL_Windows.json
@@ -0,0 +1,212 @@
+{
+ "name": "AnyRun_Sandbox_URL_Windows",
+ "version": "1.0",
+ "author": "ANY.RUN Integrations Team",
+ "url": "https://github.com/TheHive-Project/Cortex-Analyzers",
+ "license": "AGPL-V3",
+ "description": "Run URL analysis using Windows VM",
+ "dataTypeList": ["url"],
+ "command": "AnyRun/anyrun_analyzer.py",
+ "baseConfig": "AnyRun",
+ "config": {
+ "os": "windows",
+ "analysis_type": "url"
+ },
+ "configurationItems": [
+ {
+ "name": "api_key",
+ "description": "ANY.RUN Sandbox API key",
+ "type": "string",
+ "multi": false,
+ "required": true
+ },
+ {
+ "name": "verify_ssl",
+ "description": "Verify SSL certificate",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "get_html_report",
+ "description": "Attach HTML report to the case as observable",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "get_network_traffic_dump",
+ "description": "Attach PCAP file to the case as observable",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "get_iocs",
+ "description": "Attach Analysis IOCs to the case as observables",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "extract_malicious_iocs",
+ "description": "When enabled, extracts only Suspicious and Malicious IOCs. When disabled, extracts all IOCs",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "env_version",
+ "description": "Version of OS. Supports: 7, 10, 11, server 2025",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "10"
+ },
+ {
+ "name": "env_bitness",
+ "description": "Bitness of Operation System. Supports 32, 64 for Windows. 64 for Windows Server 2025",
+ "type": "Number",
+ "multi": false,
+ "required": false,
+ "defaultValue": 64
+ },
+ {
+ "name": "env_type",
+ "description": "Environment preset type. You can select **development** env for OS Windows 10 x64. For all other cases, **complete** env is required",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "complete"
+ },
+ {
+ "name": "env_locale",
+ "description": "Operation System language. Use locale identifier or country name Example - ( \"en-US\" or \"Brazil\"). Case insensitive",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "en-US"
+ },
+ {
+ "name": "opt_network_connect",
+ "description": "Network connection state",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": true
+ },
+ {
+ "name": "opt_network_fakenet",
+ "description": "FakeNet feature status",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_tor",
+ "description": "TOR using",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_geo",
+ "description": "TOR geo location option",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "fastest"
+ },
+ {
+ "name": "opt_network_mitm",
+ "description": "HTTPS MITM proxy option",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_residential_proxy",
+ "description": "Residential Proxy option",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": false
+ },
+ {
+ "name": "opt_network_residential_proxy_geo",
+ "description": "Residential Proxy Geo option",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "fastest"
+ },
+ {
+ "name": "opt_privacy_type",
+ "description": "Privacy settings. Supports: public, bylink, owner, byteam",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "bylink"
+ },
+ {
+ "name": "opt_timeout",
+ "description": "Timeout option, size range 10-660",
+ "type": "Number",
+ "multi": false,
+ "required": false,
+ "defaultValue": 120
+ },
+ {
+ "name": "opt_auto_delete_after",
+ "description": "Specify after what period of time this report should be deleted. Supports: day, week, 2 weeks, month. Leave blank for the task's infinite lifetime",
+ "type": "string",
+ "multi": false,
+ "required": false
+ },
+ {
+ "name": "obj_ext_browser",
+ "description": "Browser name. Supports Google Chrome, Mozilla Firefox, Internet Explorer, Microsoft Edge for Windows 7, 10, 11. Microsoft Edge for Windows Server 2025",
+ "type": "string",
+ "multi": false,
+ "required": false,
+ "defaultValue": "Microsoft Edge"
+ },
+ {
+ "name": "obj_ext_extension",
+ "description": "Automatically change extension to valid",
+ "type": "Boolean",
+ "multi": false,
+ "required": false,
+ "defaultValue": true
+ },
+ {
+ "name": "user_tags",
+ "description": "Append User Tags to new analysis. Only characters a-z, A-Z, 0-9, hyphen (-), and comma (,) are allowed. Max tag length - 16 characters. Max unique tags per analysis - 8",
+ "type": "string",
+ "multi": false,
+ "required": false
+ }
+ ],
+ "registration_required": true,
+ "subscription_required": true,
+ "free_subscription": false,
+ "service_homepage": "https://any.run/",
+ "service_logo": {
+ "path": "assets/anyrun.png",
+ "caption": "AnyRun logo"
+ },
+ "screenshots": [
+ {
+ "path": "assets/long_report.png",
+ "caption": "AnyRun: Long report template"
+ }
+ ]
+}
diff --git a/analyzers/AnyRun/AnyRun_TI_Lookup.json b/analyzers/AnyRun/AnyRun_TI_Lookup.json
new file mode 100644
index 000000000..c08528289
--- /dev/null
+++ b/analyzers/AnyRun/AnyRun_TI_Lookup.json
@@ -0,0 +1,69 @@
+{
+ "name": "AnyRun_TI_Lookup",
+ "version": "1.0",
+ "author": "ANY.RUN Integrations Team",
+ "url": "https://github.com/TheHive-Project/Cortex-Analyzers",
+ "license": "AGPL-V3",
+ "description": "Check URL/IP/Domain/File reputation",
+ "dataTypeList": ["ip", "domain", "url", "hash"],
+ "command": "AnyRun/anyrun_analyzer.py",
+ "baseConfig": "AnyRun",
+ "config": {
+ "analysis_type": "ti_lookup"
+ },
+ "configurationItems": [
+ {
+ "name": "api_key",
+ "description": "ANY.RUN TI Lookup API key",
+ "type": "string",
+ "multi": false,
+ "required": true
+ },
+ {
+ "name": "verify_ssl",
+ "description": "Verify SSL certificate",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "get_iocs",
+ "description": "Attach Analysis IOCs to the case as observables",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "extract_malicious_iocs",
+ "description": "When enabled, extracts only Suspicious and Malicious IOCs. When disabled, extracts all IOCs",
+ "type": "boolean",
+ "multi": false,
+ "required": true,
+ "defaultValue": true
+ },
+ {
+ "name": "lookup_depth",
+ "description": "Specify the number of days from the current date for which you want to lookup",
+ "type": "Number",
+ "multi": false,
+ "required": false,
+ "defaultValue": 180
+ }
+ ],
+ "registration_required": true,
+ "subscription_required": true,
+ "free_subscription": false,
+ "service_homepage": "https://any.run/",
+ "service_logo": {
+ "path": "assets/anyrun.png",
+ "caption": "AnyRun logo"
+ },
+ "screenshots": [
+ {
+ "path": "assets/long_report.png",
+ "caption": "AnyRun: Long report template"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/analyzers/AnyRun/Dockerfile b/analyzers/AnyRun/Dockerfile
new file mode 100644
index 000000000..9e9362355
--- /dev/null
+++ b/analyzers/AnyRun/Dockerfile
@@ -0,0 +1,10 @@
+FROM python:3-alpine
+
+WORKDIR /worker
+RUN apk add --no-cache whois
+
+COPY requirements.txt AnyRun/
+RUN test ! -e AnyRun/requirements.txt || pip install --no-cache-dir -r AnyRun/requirements.txt
+COPY . AnyRun/
+
+ENTRYPOINT ["python", "AnyRun/anyrun_analyzer.py"]
\ No newline at end of file
diff --git a/analyzers/AnyRun/README.md b/analyzers/AnyRun/README.md
index 2829e2d40..21450a083 100644
--- a/analyzers/AnyRun/README.md
+++ b/analyzers/AnyRun/README.md
@@ -1,30 +1,273 @@
-### AnyRun
-[ANY.RUN](https://any.run/) is a malware sandbox service in the cloud. By using this analyzer, an analyst can submit a suspicious file or URL to the service for analysis and get a report. The report can contain various information such as:
-
-- Interactive access
-- Research threats by filter in public submissions
-- File and URL dynamic analysis
-- Mitre ATT&CK mapping
-- Detailed malware reports
-
-#### Requirements
-You need a valid AnyRun API integration subscription to use the analyzer. Free plan does not provide API access.
-
-- Provide your API token as a value for the `token` parameter.
-- Define the privacy setting in `privacy_type` parameter.
-- Set `verify_ssl` parameter as false if you connection requires it
-
-#### Optional Parameters
-AnyRun provides a number of parameters that can be modified to do additional/different analysis.
-- Set the "bitness" of your runtime environment with the `env_bitness` parameter.
-- Select which version of Windows to use by setting `env_version` parameter.
-- Select which products to install by default with `env_type` parameter.
-- Enable/disable networking with `opt_network_connect` parameter.
-- Enable/disable "FakeNet" with `opt_network_fakenet` parameter.
-- Enable/disable the TOR network with `opt_network_tor` parameter.
-- Enable/disable MITM for https connections with `opt_network_mitm` parameter.
-- Need a specific geolocation? use `opt_network_geo` parameter.
-- Need to analyze something with evasion tactics? `opt_kernel_heavyevasion`
-- Change the timeout settings with `opt_timeout` parameter.
-- Select which folder the analysis starts in with `obj_ext_startfolder` parameter.
-- Select which browser to use for analysis with `obj_ext_browser` parameter.
+
+
+
+
+
+
+______________________________________________________________________
+
+# ANY.RUN Analyzers
+
+## Table of Contents
+
+- [ANY.RUN Analyzers](#anyrun-analyzers)
+ - [Table of Contents](#table-of-contents)
+ - [ANY.RUN Sandbox Analyzers](#anyrun-sandbox-analyzers)
+ - [Introduction](#introduction)
+ - [Generate API-KEY](#generate-api-key)
+ - [Configuration parameters](#configuration-parameters)
+ - [Base ANY.RUN parameters](#base-anyrun-parameters)
+ - [ANY.RUN environment parameters](#anyrun-environment-parameters)
+ - [ANY.RUN Windows specific environment parameters](#anyrun-windows-specific-environment-parameters)
+ - [ANY.RUN Linux specific environment parameters](#anyrun-linux-specific-environment-parameters)
+ - [ANY.RUN Android specific environment parameters](#anyrun-android-specific-environment-parameters)
+ - [Data flow](#data-flow)
+ - [Additional information](#additional-information)
+ - [ANY.RUN TI Lookup Analyzer](#anyrun-ti-lookup-analyzer)
+ - [Introduction](#introduction-1)
+ - [Generate API-KEY](#generate-api-key-1)
+ - [Configuration parameters](#configuration-parameters-1)
+ - [Base ANY.RUN parameters](#base-anyrun-parameters-1)
+ - [ANY.RUN environment parameters](#anyrun-environment-parameters-1)
+ - [Data flow](#data-flow-1)
+ - [Additional information](#additional-information-1)
+ - [Support](#support)
+
+## ANY.RUN Sandbox Analyzers
+
+## Introduction
+
+[ANY.RUN's Interactive Sandbox](https://any.run/features/?utm_source=thehivegithub&utm_medium=documentation&utm_campaign=thehive_sandbox&utm_content=linktosandboxlanding) is a cloud-based service that provides SOC teams with a simple way to analyze cyber threats, enabling rapid threat intelligence and deep analysis in a secure environment.
+
+The connector for the Interactive Sandbox enables TheHive users to quickly analyze and identify observables, such as artifacts and URLs in the cloud sandbox.
+
+* Perform real-time analysis to make fast decisions
+* Get detailed reports that include insights into network activity, dropped files, and MITRE ATT&CK techniques
+* Enrich observables in TheHive
+
+As a result of the integration of ANY.RUN’s Interactive Sandbox with TheHive, you’ll achieve:
+
+* Streamlined Triage and Detection: Automate threat analysis to receive actionable verdicts and reports to prioritize incidents effectively.
+* Shorter MTTD and MTTR: Lower response times by gaining a full understanding of the threat’s behavior in seconds.
+* Higher Detection Rates: In-depth insights and advanced detection mechanisms provide deep visibility into complex threats.
+* Minimized Workload: Reduce analyst workload by automating repetitive tasks.
+* Stronger Security: Use sandbox reports and related data to refine rules, update playbooks, and train threat detection models.
+
+Report example:
+
+
+## Generate API-KEY
+
+To use this integration, make sure that you have an active [ANY.RUN Sandbox license](https://app.any.run/plans/?utm_source=thehivegithub&utm_medium=documentation&utm_campaign=thehive_sandbox&utm_content=linktopricing).
+
+* Go to [ANY.RUN Sandbox](https://app.any.run/?utm_source=thehivegithub&utm_medium=documentation&utm_campaign=thehive_sandbox&utm_content=linktoservice)
+* Click Profile > API and Limits > Generate > Copy
+
+
+## Configuration parameters
+
+There are a number of configuration options, which are set either in Cortex UI.
+
+#### Base ANY.RUN parameters
+| Parameter | Mandatory | Description |
+|------------------------------|-----------|----------------------------------------------------------------------------------------------|
+| `api_key` | Yes | ANY.RUN Sandbox API-KEY. See "Generate API-KEY" section in the README file. |
+| `verify_ssl` | Yes | Enable SSL verification option. |
+| `get_html_report` | Yes | Attach HTML report to the case as observable. |
+| `get_network_traffic_dump` | Yes | Attach PCAP file to the case as observable. |
+| `get_iocs` | Yes | Attach Analysis IOCs to the case as observables. |
+| `extract_malicious_iocs` | Yes | When enabled, extracts only Suspicious and Malicious IOCs. When disabled, extracts all IOCs. |
+
+#### ANY.RUN environment parameters
+| Parameter | Mandatory | Description |
+|-------------------------------------|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `opt_timeout` | No | Select analysis completion time. Size range: 10-660 seconds. |
+| `opt_network_connect` | No | Enable network connection. |
+| `opt_network_fakenet` | No | Enable FakeNet feature. |
+| `opt_network_tor` | No | Enable TOR using. |
+| `opt_network_geo` | No | TOR geolocation option. Example: US, AU |
+| `opt_network_mitm` | No | Enable HTTPS MITM Proxy using. |
+| `opt_network_residential_proxy` | No | Residential proxy using. |
+| `opt_network_residential_proxy_geo` | No | Residential proxy geolocation option. Example: US, AU. |
+| `opt_privacy_type` | No | Privacy settings. Supports: public, bylink, owner, byteam. |
+| `opt_auto_delete_after` | No | Specify after what period of time this report should be deleted. Supports: day, week, 2 weeks, month. Leave blank for the task's infinite lifetime. |
+| `obj_ext_extension` | No | Automatically change file extension to valid. |
+| `env_locale` | No | Operation system's language. Use locale identifier or country name (Ex: "en-US" or "Brazil"). Case-insensitive. |
+| `user_tags` | No | Append User Tags to new analysis. Only characters a-z, A-Z, 0-9, hyphen (-), and comma (,) are allowed. Max tag length - 16 characters. Max unique tags per analysis - 8. |
+
+
+#### ANY.RUN Windows specific environment parameters
+| Parameter | Mandatory | Description |
+|-----------------------|------------|---------------------------------------------------------------------------------------------------------------------------------------|
+| `env_version` | No | Version of OS. Supports: 7, 10, 11, server 2025 |
+| `env_bitness` | No | Bitness of Operation System. Supports 32, 64. |
+| `env_type` | No | Environment preset type. You can select **development** env for OS Windows 10 x64. For all other cases, **complete** env is required. |
+| `obj_ext_startfolder` | No | Supports: desktop, home, downloads, appdata, temp, windows, root. |
+| `obj_ext_cmd` | No | Optional command-line arguments for the analyzed object. Use an empty string ("") to apply the default behavior. |
+| `obj_force_elevation` | No | Forces the file to execute with elevated privileges and an elevated token (for PE32, PE32+, PE64 files only). |
+| `obj_ext_browser` | No | Browser name. Supports: Google Chrome, Mozilla Firefox, Internet Explorer, Microsoft Edge. |
+| `auto_confirm_uac` | No | Auto confirm Windows UAC requests. |
+
+
+#### ANY.RUN Linux specific environment parameters
+| Parameter | Mandatory | Description |
+|-----------------------|------------|---------------------------------------------------------|
+| `env_os` | No |Operation System. Supports ubuntu, debian|
+| `obj_ext_startfolder` | No | Start object from. Supports: desktop, home, downloads, temp. |
+| `obj_ext_cmd` | No | Optional command-line arguments for the analyzed object. Use an empty string ("") to apply the default behavior. |
+| `run_as_root` | No | Run file with superuser privileges. |
+| `obj_ext_browser` | No | Browser name. Supports: Google Chrome, Mozilla Firefox. |
+
+
+#### ANY.RUN Android specific environment parameters
+| Parameter | Mandatory | Description |
+|------------------------------|-----------|--------------------------------------------------------------------------------------------------------------|
+| `obj_ext_cmd` | No | Optional command-line arguments for the analyzed object. Use an empty string ("") to apply the default behavior. |
+
+
+### Data Flow
+
+```mermaid
+graph LR
+ subgraph TheHive Input
+ URL[URL Observable]
+ File[File Observable]
+ end
+
+ subgraph ANY.RUN Sandbox
+ Task[Sandbox Analysis]
+ Analysis[Behavioral Analysis]
+ end
+
+ subgraph TheHive Output
+ Verdict[Analysis verdict]
+ MainObject[MainObject]
+ AnalysisURL[Interactive analysis URL]
+ Reports[Link to the IOC/MISP/STIX/HTML/graph reports]
+ Indicators[Related Domain/IPs/URLs]
+ Tags[Analysis tags]
+ Counters[Analysis statistic]
+ Mitre[MITRE ATT&CK techniques]
+ end
+
+ URL --> Task
+ File --> Task
+ Task --> Analysis
+ Analysis --> MainObject
+ Analysis --> AnalysisURL
+ Analysis --> Reports
+ Analysis --> Indicators
+ Analysis --> Tags
+ Analysis --> Counters
+ Analysis --> Mitre
+```
+
+## Additional information
+
+- **Analysis Time**: Sandbox analysis typically takes 1-3 minutes depending on the sample
+- **Task Timer**: Configure `anyrun_opt_timeout` based on expected analysis time
+- **Privacy Settings**: Use `bylink` or `team` for sensitive samples
+- **API Access Required**: Available on ANY.RUN plans with API access, including trial
+- **Rate Limits**: API calls are subject to ANY.RUN rate limits based on subscription tier
+
+## ANY.RUN TI Lookup Analyzer
+
+## Introduction
+
+ANY.RUN’s [Threat Intelligence Lookup](https://any.run/threat-intelligence-lookup/?utm_source=thehivegithub&utm_medium=documentation&utm_campaign=thehive_lookup&utm_content=linktolookuplanding) (TI Lookup) is a service that allows you to browse IOCs and related threat data to simplify and enrich cyberattack investigations.
+
+The Threat Intelligence Lookup сonnector enables TheHive users to browse various types of IOCs, from IPs and domains to URLs and hashes.
+
+* Browse indicators in TI Lookup without leaving TheHive
+* Receive data related to your query to gain actionable insights
+* Use them for incident response, to create new rules, train models, update playbooks, etc.
+
+As a result of integration of TI Lookup with TheHive, you’ll achieve:
+
+* Early Threat Detection: Correlate IOCs to identify incidents before they escalate.
+* Proactive Defense Enrichment: Collect indicators from attacks on other companies to update your detection systems.
+* Reduced MTTR and Increased Detection Rate: Access to rich threat context enables SOCs to make informed decisions fast.
+
+Report example:
+
+
+## Generate API-KEY
+
+To use this integration, make sure that you have an active [ANY.RUN Sandbox license](https://app.any.run/plans/?utm_source=thehivegithub&utm_medium=documentation&utm_campaign=thehive_sandbox&utm_content=linktopricing).
+
+* Go to [ANY.RUN Sandbox](https://app.any.run/?utm_source=thehivegithub&utm_medium=documentation&utm_campaign=thehive_sandbox&utm_content=linktoservice)
+* Click Profile > API and Limits > Generate > Copy
+
+
+## Configuration parameters
+
+There are a number of configuration options, which are set either in Cortex UI.
+
+#### Base ANY.RUN parameters
+| Parameter | Mandatory | Description |
+|------------------------------|-----------|----------------------------------------------------------------------------------------------|
+| `api_key` | Yes | ANY.RUN Sandbox API-KEY. See "Generate API-KEY" section in the README file. |
+| `verify_ssl` | Yes | Enable SSL verification option. |
+| `get_iocs` | Yes | Attach Analysis IOCs to the case as observables. |
+| `extract_malicious_iocs` | Yes | When enabled, extracts only Suspicious and Malicious IOCs. When disabled, extracts all IOCs. |
+
+#### ANY.RUN environment parameters
+| Parameter | Mandatory | Description |
+|-------------------------------------|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `lookup_depth` | No | Specify the number of days from the current date for which you want to lookup. |
+
+### Data Flow
+
+```mermaid
+graph LR
+ subgraph TheHive Input
+ Hash[Hash Observable]
+ Domain[Domain Observable]
+ IP[IP Observable]
+ Url[Url Observable]
+
+ end
+
+ subgraph ANY.RUN TI Lookup
+ Intelligence[Threat Intelligence]
+ end
+
+ subgraph OpenCTI Output
+ ThreatLevel[Object ThreatLevel]
+ LookupURL[TI Lookup URL]
+ LastSeen[Object last seen]
+ Industries[Object related industries]
+ Tags[Object related tags]
+ ASN[Object autonomous system owner]
+ GEO[Object geo country]
+ Indicators[Object related Domain/IPs/URLs/Files]
+ Tasks[Object related analyses]
+ FileMeta[Object related file meta data]
+ end
+
+ Hash --> Intelligence
+ Domain --> Intelligence
+ IP --> Intelligence
+ Url --> Intelligence
+ Intelligence --> ThreatLevel
+ Intelligence --> LookupURL
+ Intelligence --> LastSeen
+ Intelligence --> Industries
+ Intelligence --> Tags
+ Intelligence --> ASN
+ Intelligence --> GEO
+ Intelligence --> Indicators
+ Intelligence --> Tasks
+ Intelligence --> FileMeta
+```
+
+## Additional information
+
+- **API Access Required**: Available on ANY.RUN plans with API access, including trial
+- **Rate Limits**: API calls are subject to ANY.RUN rate limits based on subscription tier
+
+
+## Support
+
+This is an ANY.RUN’s supported connector. You can write to us for help with integration via [techsupport@any.run](mailto:techsupport@any.run) .
+Contact us for a quote or demo via [this form](https://app.any.run/contact-us/?utm_source=thehivegithub&utm_medium=documentation&utm_campaign=thehive_sandbox&utm_content=linktocontactus).
diff --git a/analyzers/AnyRun/anyrun_analyzer.py b/analyzers/AnyRun/anyrun_analyzer.py
index 2d2af8f96..03de22f32 100755
--- a/analyzers/AnyRun/anyrun_analyzer.py
+++ b/analyzers/AnyRun/anyrun_analyzer.py
@@ -1,169 +1,349 @@
#!/usr/bin/env python3
# encoding: utf-8
-import time
-import requests
+import tempfile
+import json
from os.path import basename
from cortexutils.analyzer import Analyzer
-from requests.packages.urllib3.exceptions import InsecureRequestWarning
+from urllib3.exceptions import InsecureRequestWarning
+from urllib3 import disable_warnings
+from datetime import datetime
+
+from anyrun import RunTimeException
+
+from tools import catch_exceptions, connectors, extract_sandbox_iocs
class AnyRunAnalyzer(Analyzer):
def __init__(self):
Analyzer.__init__(self)
- self.url = "https://api.any.run/v1"
- self.token = self.get_param("config.token", None, "Service token is missing")
- self.privacy_type = self.get_param("config.privacy_type", None, "Privacy type is missing")
- self.verify_ssl = self.get_param("config.verify_ssl", True, None)
+
+ self.version = "Cortex:1.0"
+
+ self.api_key = self.get_param("config.api_key", None, "ANY.RUN API key is missing")
+ self.verify_ssl = self.get_param("config.verify_ssl", None, "Verify SSL option is missing")
+ self.get_iocs = self.get_param("config.get_iocs", None, "Get IOCs option is missing")
+ self.extract_malicious_iocs = self.get_param(
+ "config.extract_malicious_iocs", None, "Extract Malicious IOCs option is missing"
+ )
+
+ self.get_html_report = self.get_param("config.get_html_report", None, None)
+ self.get_network_traffic_dump = self.get_param("config.get_network_traffic_dump", None, None)
+
+ self.os = self.get_param("config.os", None, None)
+ self.analysis_type = self.get_param("config.analysis_type", None, None)
+
+ if not self.api_key:
+ raise RunTimeException(f"ANY.RUN API key is not specified.")
+
if not self.verify_ssl:
- requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
- self.env_bitness = self.get_param("config.env_bitness", None, None)
- self.env_version = self.get_param("config.env_version", None, None)
- self.env_type = self.get_param("config.env_type", None, None)
- self.opt_network_connect = self.get_param("config.opt_network_connect", None, None)
- self.opt_network_fakenet = self.get_param("config.opt_network_fakenet", None, None)
- self.opt_network_tor = self.get_param("config.opt_network_tor", None, None)
- self.opt_network_mitm = self.get_param("config.opt_network_mitm", None, None)
- self.opt_network_geo = self.get_param("config.opt_network_geo", None, None)
- self.opt_kernel_heavyevasion = self.get_param("config.opt_kernel_heavyevasion", None, None)
- self.opt_timeout = self.get_param("config.opt_timeout", None, None)
- self.obj_ext_startfolder = self.get_param("config.obj_ext_startfolder", None, None)
- self.obj_ext_browser = self.get_param("config.obj_ext_browser", None, None)
+ disable_warnings(InsecureRequestWarning)
+
def summary(self, raw):
taxonomies = []
level = "safe"
namespace = "AnyRun"
- predicate = "Sandbox"
- value = (
- raw.get("analysis", {}).get("scores", {}).get("verdict", {}).get("score", 0)
- )
- if 50 < value < 100:
- level = "suspicious"
- elif value == 100:
- level = "malicious"
+
+ if self.os:
+ predicate = "Sandbox"
+
+ if 50 < self.score < 100:
+ level = "suspicious"
+ elif self.score == 100:
+ level = "malicious"
+ else:
+ predicate = "TI Lookup"
+ level = self.verdict.lower() if self.verdict in ("Suspicious", "Malicious") else None
taxonomies.append(
- self.build_taxonomy(level, namespace, predicate, "{0}/100".format(value))
+ self.build_taxonomy(level, namespace, predicate, self.verdict)
)
return {"taxonomies": taxonomies}
+
+ def artifacts(self, raw):
+ artifacts = list()
+
+ if self.get_html_report:
+ self.attach_file(
+ artifacts,
+ self.html_report,
+ f"ANYRUN_analysis_report_{datetime.now().strftime(f'%Y_%m_%d_%H_%M_%S')}.html",
+ "ANY.RUN Analysis report"
+ )
+
+ if self.get_network_traffic_dump:
+ self.attach_file(
+ artifacts,
+ self.network_traffic_dump,
+ f"ANYRUN_analysis_network_traffic_dump_{datetime.now().strftime(f'%Y_%m_%d_%H_%M_%S')}.pcap",
+ "ANY.RUN Analysis network traffic dump"
+ )
+
+ if self.get_iocs:
+ self.create_sandbox_observables(artifacts) if self.os else self.create_ti_lookup_observables(artifacts)
+
+ return artifacts
+
+ def attach_file(
+ self,
+ artifacts: list,
+ report_content: str | bytes,
+ report_name: str,
+ observable_message: str
+ ) -> None:
+ """
+ Saves a file as observable
+
+ :param artifacts: The list of Artifacts
+ :param report_content: Report payload
+ :param report_name: Report name
+ :param observable_message: Description
+ """
+ report_path = f"{tempfile.gettempdir()}/{report_name}"
+
+ with open(report_path, 'wb') as file:
+ file.write(report_content.encode() if isinstance(report_content, str) else report_content)
+
+ artifacts.append(
+ self.build_artifact(
+ "file",
+ report_path,
+ message=observable_message,
+ tags=["anyrun"]
+ )
+ )
+
+ def create_sandbox_observables(self, artifacts: list):
+ """
+ Adds related Suspicious and Malicious indicators to the artifacts list
+
+ :param artifacts: Artifacts list
+ """
+ for ioc in self.iocs:
+ artifacts.append(
+ self.build_artifact(
+ "hash" if ioc.get("type") == "sha256" else ioc.get("type"),
+ ioc.get("ioc"),
+ message="Detected by ANY.RUN Sandbox",
+ tags=["anyrun"]
+ )
+ )
+
+ def create_ti_lookup_observables(self, artifacts: list):
+ self.extract_lookup_iocs(self.related_urls, artifacts, "url", "url")
+ self.extract_lookup_iocs(self.related_ips, artifacts, "ip", "destinationIP")
+ self.extract_lookup_iocs(self.related_domains, artifacts, "domain", "domainName")
+ self.extract_lookup_iocs(self.related_files, artifacts, "hash", "sha256")
+
+ def extract_lookup_iocs(self, collection: list[str], artifacts: list, ioc_type: str, ioc_field: str) -> None:
+ """
+ Adds related Suspicious and Malicious indicators to the artifacts list
+
+ :param collection: IOCs collection
+ :param artifacts: Artifacts list
+ :param ioc_type: IOC type
+ :param ioc_field: IOC field name
+ """
+ for obj in collection:
+ ioc = json.loads(obj)
+
+ if self.extract_malicious_iocs and ioc.get("threatLevel") not in (1, 2):
+ continue
+
+ if ioc.get("threatLevel") not in (0, 1, 2):
+ continue
+
+ artifacts.append(
+ self.build_artifact(
+ ioc_type,
+ ioc.get(ioc_field) if ioc_type != "hash" else ioc.get("hashes").get(ioc_field),
+ message="Detected by ANY.RUN TI Lookup",
+ tags=["anyrun"]
+ )
+ )
+
+ @catch_exceptions
def run(self):
Analyzer.run(self)
- try:
- headers = {"Authorization": "API-Key {0}".format(self.token)}
+ self.check_authorization()
- status_code = None
- tries = 0
- if self.data_type == "file":
- filepath = self.get_param("file", None, "File is missing")
- filename = self.get_param("filename", basename(filepath))
- while status_code in (None, 429) and tries <= 15:
- with open(filepath, "rb") as sample:
- files = {"file": (filename, sample)}
- data = {"opt_privacy_type": self.privacy_type,
- "env_bitness": self.env_bitness,
- "env_version": self.env_version,
- "env_type": self.env_type,
- "opt_network_connect": self.opt_network_connect,
- "opt_network_fakenet": self.opt_network_fakenet,
- "opt_network_tor": self.opt_network_tor,
- "opt_network_mitm": self.opt_network_mitm,
- "opt_network_geo": self.opt_network_geo,
- "opt_kernel_heavyevasion": self.opt_kernel_heavyevasion,
- "opt_timeout": self.opt_timeout,
- "obj_ext_startfolder": self.obj_ext_startfolder }
- response = requests.post(
- "{0}/analysis".format(self.url),
- files=files,
- data=data,
- headers=headers,
- verify=self.verify_ssl,
- )
- status_code = response.status_code
- if status_code == 200:
- task_id = response.json()["data"]["taskid"]
- elif status_code == 201:
- task_id = response.json()["data"]["taskid"]
- elif status_code == 429:
- # it not support parallel runs, so we wait and resubmit later
- time.sleep(60)
- tries += 1
- else:
- self.error(response.json()["message"])
- elif self.data_type == "url":
- url = self.get_param("data", None, "Url is missing")
- data = {"obj_type": "url",
- "obj_url": url,
- "opt_privacy_type": self.privacy_type,
- "env_bitness": self.env_bitness,
- "env_version": self.env_version,
- "env_type": self.env_type,
- "opt_network_connect": self.opt_network_connect,
- "opt_network_fakenet": self.opt_network_fakenet,
- "opt_network_tor": self.opt_network_tor,
- "opt_network_mitm": self.opt_network_mitm,
- "opt_network_geo": self.opt_network_geo,
- "opt_kernel_heavyevasion": self.opt_kernel_heavyevasion,
- "opt_timeout": self.opt_timeout,
- "obj_ext_browser": self.obj_ext_browser }
- while status_code in (None, 429) and tries <= 15:
- response = requests.post(
- "{0}/analysis".format(self.url),
- data=data,
- headers=headers,
- verify=self.verify_ssl,
- )
- status_code = response.status_code
- if status_code == 200:
- task_id = response.json()["data"]["taskid"]
- elif status_code == 201:
- task_id = response.json()["data"]["taskid"]
- elif status_code == 429:
- # it not support parallel runs, so we wait and resubmit later
- time.sleep(60)
- tries += 1
- else:
- self.error(response.json()["message"])
+ if self.os:
+ self.run_analysis(connectors.get(self.os))
+ else:
+ self.get_reputation(connectors.get("ti_lookup"))
+
+
+ def run_analysis(self, connector):
+ """
+ ANY.RUN Sandbox implementation. Sends data to ANY.RUN Sandbox, then parses the report
+
+ :param connector: Sandbox connector
+ """
+ final_report = dict()
+
+ with connector(self.api_key, self.version, self.verify_ssl) as connector:
+ if self.analysis_type == "url":
+ analysis_uuid = connector.run_url_analysis(**self.get_params())
else:
- self.error("Invalid data type!")
-
- finished = False
- tries = 0
- while not finished and tries <= 15: # wait max 15 mins
- time.sleep(60)
- response = requests.get(
- "{0}/analysis/{1}".format(self.url, task_id),
- headers=headers,
- verify=self.verify_ssl,
- )
- if response.status_code == 200:
- finished = (
- True if response.json()["data"]["status"] == "done" else False
- )
- elif 400 < response.status_code < 500:
- self.error(response.json()["message"])
- tries += 1
- if not finished:
- self.error("AnyRun analysis timed out")
-
- # this items could be huge, we provide link to the report so avoid them in cortex
- final_report = response.json()["data"]
- final_report.pop("environments", None)
- final_report.pop("modified", None)
- for incident in final_report.get("incidents", []):
- incident.pop("events", None)
- for process in final_report.get("processes", []):
- process.pop("modules", None)
+ filepath = self.get_param("file", None, "File is missing")
+ filename = self.get_param("filename", basename(filepath), None)
+ with open(filepath, "rb") as file_content:
+ analysis_uuid = connector.run_file_analysis(file_content, filename, **self.get_params())
+
+ for status in connector.get_task_status(analysis_uuid):
+ print(status)
+
+ report = connector.get_analysis_report(analysis_uuid)
+
+ self.score = report.get("data").get("analysis").get("scores").get("verdict").get("score", 0)
+ self.verdict = connector.get_analysis_verdict(analysis_uuid)
+ self.html_report = connector.get_analysis_report(analysis_uuid, report_format="html")
+ self.network_traffic_dump = connector.download_pcap(analysis_uuid)
+ self.iocs = connector.get_analysis_report(
+ analysis_uuid,
+ report_format="ioc",
+ ioc_reputation="suspicious" if self.extract_malicious_iocs else "all"
+ )
+
+ final_report["mainObject"] = report.get("data").get("analysis").get("content").get("mainObject")
+ final_report["permanentUrl"] = report.get("data").get("analysis").get("permanentUrl")
+ final_report["reports"] = report.get("data").get("analysis").get("reports")
+ final_report["verdict"] = self.verdict
+ final_report["related_domains"] = extract_sandbox_iocs(report, "dnsRequests", "domain")
+ final_report["related_ips"] = extract_sandbox_iocs(report, "connections", "ip")
+ final_report["related_urls"] = extract_sandbox_iocs(report, "httpRequests", "url")
+ final_report["counters"] = report.get("data").get("counters")
+ final_report["tags"] = (
+ ",".join([tag.get("tag") for tag in tags])
+ if (tags := report.get("data").get("analysis").get("tags")) else ""
+ )
+ final_report["mitre"] = (
+ ",".join((set([obj.get("id") for obj in mitre])))
+ if (mitre := report.get("data").get("mitre")) else ""
+ )
+
self.report(final_report)
- except requests.exceptions.RequestException as e:
- self.error(str(e))
+ def get_reputation(self, connector) -> None:
+ """
+ ANY.RUN TI Lookup implementation. Sends data to ANY.RUN TI Lookup, then parses the report
+
+ :param connector: Lookup connector
+ """
+ final_report = dict()
+
+ entity_type = self.get_param("dataType", None, "Data Type option is missing")
+ entity_value = self.extract_data()
+ lookup_depth = self.get_param("config.lookup_depth", 180, None)
+
+ if entity_type == "hash":
+ hash_type = {32: "md5", 40: "sha1", 64: "sha256"}.get(len(entity_value))
+ if not hash_type:
+ raise RunTimeException("Unsupported hash type. Allowed: SHA1, SHA256, MD5")
+ query_params = {hash_type: entity_value}
+ else:
+ entity_type = {"url": "url", "ip": "destination_ip", "domain": "domain_name"}.get(entity_type)
+ query_params = {entity_type: entity_value}
+
+ with connector(self.api_key, self.version, self.verify_ssl) as connector:
+ summary = connector.get_intelligence(**query_params, lookup_depth=lookup_depth, parse_response=True)
+ self.verdict = summary.verdict()
+
+ final_report["treat_level"] = summary.verdict()
+ final_report["ti_lookup_url"] = summary.intelligence_url(entity_value)
+ final_report["last_seen"] = summary.last_modified()
+ final_report["industries"] = summary.industries()
+ final_report["tags"] = summary.tags()
+ final_report["asn"] = summary.asn()
+ final_report["geo"] = summary.country()
+ final_report["asn"] = summary.country()
+ final_report["detected_type"] = entity_value
+
+ self.related_urls = [url.json() for url in summary.related_urls]
+ self.related_ips = [ip.json() for ip in summary.related_ips]
+ self.related_domains = [domain.json() for domain in summary.related_dns]
+ self.related_files = [file.json() for file in summary.related_files]
+
+ final_report["related_urls"] = self.related_urls
+ final_report["related_ips"] = self.related_ips
+ final_report["related_domains"] = self.related_domains
+ final_report["related_files"] = self.related_files
+
+ if tasks := summary.tasks(tasks_range=20):
+ final_report["last_tasks"] = tasks
+
+ if file_meta := summary.file_meta():
+ final_report["file_extension"] = file_meta.filepath.split(".")[-1]
+ final_report["filename"] = file_meta.filename
+ final_report["filepath"] = file_meta.filepath
+ final_report["sha1"] = file_meta.hashes.sha1
+ final_report["sha256"] = file_meta.hashes.sha256
+ final_report["md5"] = file_meta.hashes.md5
+ final_report["ssdeep"] = file_meta.hashes.ssdeep
+
+ self.report(final_report)
+
+ def get_params(self) -> dict:
+ """
+ Prepares Sandbox analysis parameters
+
+ :return: Prepared parameters
+ """
+ params = {
+ "env_locale": self.get_param("config.env_locale", None, None),
+ "opt_network_connect": self.get_param("config.opt_network_connect", None, None),
+ "opt_network_fakenet": self.get_param("config.opt_network_fakenet", None, None),
+ "opt_network_tor": self.get_param("config.opt_network_tor", None, None),
+ "opt_network_geo": self.get_param("config.opt_network_geo", None, None),
+ "opt_network_mitm": self.get_param("config.opt_network_mitm", None, None),
+ "opt_network_residential_proxy": self.get_param("config.opt_network_residential_proxy", None, None),
+ "opt_network_residential_proxy_geo": self.get_param("config.opt_network_residential_proxy_geo", None, None),
+ "opt_privacy_type": self.get_param("config.opt_privacy_type", None, None),
+ "opt_auto_delete_after": self.get_param("config.opt_auto_delete_after", None, None),
+ "obj_ext_extension": self.get_param("config.obj_ext_extension", None, None),
+ "user_tags": self.get_param("config.user_tags", None, None),
+ "opt_timeout": self.get_param("config.opt_timeout", None, None),
+ "env_os": self.get_param("config.env_os", None, None),
+ "env_version": self.get_param("config.env_version", None, None),
+ "env_bitness": self.get_param("config.env_bitness", None, None),
+ "env_type": self.get_param("config.env_type", None, None),
+ "obj_ext_cmd": self.get_param("config.obj_ext_cmd", None, None),
+ "obj_ext_startfolder": self.get_param("config.obj_ext_startfolder", None, None),
+ "obj_force_elevation": self.get_param("config.obj_force_elevation", None, None),
+ "auto_confirm_uac": self.get_param("config.auto_confirm_uac", None, None),
+ "run_as_root": self.get_param("config.run_as_root", None, None),
+ "lookup_depth": self.get_param("config.lookup_depth", None, None),
+ "obj_type": self.get_param("config.obj_type", None, None),
+ "obj_value": self.get_param("config.obj_value", None, None),
+ }
+
+ if self.analysis_type == "url":
+ params["obj_url"] = self.extract_data()
+
+ return {key: value for key, value in params.items() if value is not None}
+
+ @catch_exceptions
+ def check_authorization(self) -> None:
+ """
+ Checks connection to ANY.RUN services.
+ """
+ connector = connectors.get("ti_lookup") if self.analysis_type == "ti_lookup" else connectors.get("base")
+
+ with connector(self.api_key, self.version, self.verify_ssl) as connector:
+ connector.check_authorization()
- except Exception as e:
- self.unexpectedError(e)
+ def extract_data(self) -> str:
+ """
+ Extracts data from parameters, prepares it for sending to ANY.RUN
+ :return: Prepared data
+ """
+ data = self.get_param("data", None, "Data option is missing")
+ data = data.replace("[", "").replace("]", "").replace("hxxp", "http")
+ return data
if __name__ == "__main__":
AnyRunAnalyzer().run()
diff --git a/analyzers/AnyRun/assets/ANYRUN_API_TOKEN.png b/analyzers/AnyRun/assets/ANYRUN_API_TOKEN.png
new file mode 100644
index 000000000..7a7804a72
Binary files /dev/null and b/analyzers/AnyRun/assets/ANYRUN_API_TOKEN.png differ
diff --git a/analyzers/AnyRun/assets/AnyRun.png b/analyzers/AnyRun/assets/AnyRun.png
index e4cd7b1fb..77de70ec1 100644
Binary files a/analyzers/AnyRun/assets/AnyRun.png and b/analyzers/AnyRun/assets/AnyRun.png differ
diff --git a/analyzers/AnyRun/assets/long_report.png b/analyzers/AnyRun/assets/long_report.png
deleted file mode 100644
index 97c58b2a3..000000000
Binary files a/analyzers/AnyRun/assets/long_report.png and /dev/null differ
diff --git a/analyzers/AnyRun/assets/long_report_sandbox.png b/analyzers/AnyRun/assets/long_report_sandbox.png
new file mode 100644
index 000000000..0acfa4791
Binary files /dev/null and b/analyzers/AnyRun/assets/long_report_sandbox.png differ
diff --git a/analyzers/AnyRun/assets/long_report_ti_lookup.png b/analyzers/AnyRun/assets/long_report_ti_lookup.png
new file mode 100644
index 000000000..17a1debd0
Binary files /dev/null and b/analyzers/AnyRun/assets/long_report_ti_lookup.png differ
diff --git a/analyzers/AnyRun/assets/short_report.png b/analyzers/AnyRun/assets/short_report.png
deleted file mode 100644
index b5e750e62..000000000
Binary files a/analyzers/AnyRun/assets/short_report.png and /dev/null differ
diff --git a/analyzers/AnyRun/requirements.txt b/analyzers/AnyRun/requirements.txt
index 6aabc3cfa..048cc3d18 100644
--- a/analyzers/AnyRun/requirements.txt
+++ b/analyzers/AnyRun/requirements.txt
@@ -1,2 +1,3 @@
cortexutils
requests
+anyrun-sdk==1.14.12
diff --git a/analyzers/AnyRun/tools.py b/analyzers/AnyRun/tools.py
new file mode 100644
index 000000000..a9ab7d449
--- /dev/null
+++ b/analyzers/AnyRun/tools.py
@@ -0,0 +1,66 @@
+import traceback
+from functools import wraps
+
+from cortexutils.analyzer import Analyzer
+
+from anyrun import RunTimeException
+from anyrun.connectors import SandboxConnector, LookupConnector
+from anyrun.connectors.sandbox.base_connector import BaseSandboxConnector
+from anyrun.connectors.sandbox.operation_systems import (
+ AndroidConnector,
+ LinuxConnector,
+ WindowsConnector,
+)
+
+
+def catch_exceptions(func):
+ @wraps(func)
+ def wrapper(self: Analyzer, *args, **kwargs):
+ try:
+ result = func(self, *args, **kwargs)
+ return result
+ except RunTimeException as exc:
+ self.error(str(exc))
+ except Exception:
+ self.unexpectedError(traceback.format_exc())
+ return wrapper
+
+
+def extract_sandbox_iocs(report: dict, field: str, ioc: str) -> str | None:
+ if (content := report.get("data").get("network").get(field)):
+ return ",".join([obj.get(ioc) for obj in content if obj.get("reputation") in ("suspicious", "malicious")])
+ return ""
+
+
+def get_windows_sandbox_connector(api_key: str, version: str, verify_ssl: bool) -> WindowsConnector:
+ """ Builds ANY.RUN Sandbox instance for the Windows OS """
+ return SandboxConnector().windows(api_key, integration=version, verify_ssl=verify_ssl)
+
+
+def get_linux_sandbox_connector(api_key: str, version: str, verify_ssl: bool) -> LinuxConnector:
+ """ Builds ANY.RUN Sandbox instance for the Linux OS """
+ return SandboxConnector().linux(api_key, integration=version, verify_ssl=verify_ssl)
+
+
+def get_android_sandbox_connector(api_key: str, version: str, verify_ssl: bool) -> AndroidConnector:
+ """ Builds ANY.RUN Sandbox instance for the Android OS """
+ return SandboxConnector().android(api_key, integration=version, verify_ssl=verify_ssl)
+
+
+def get_base_sandbox_connector(api_key: str, version: str, verify_ssl: bool) -> BaseSandboxConnector:
+ """ Builds ANY.RUN Sandbox generic instance """
+ return BaseSandboxConnector(api_key, integration=version, verify_ssl=verify_ssl)
+
+
+def get_ti_lookup_connector(api_key: str, version: str, verify_ssl: bool) -> LookupConnector:
+ """ Builds ANY.RUN Sandbox generic instance """
+ return LookupConnector(api_key, integration=version, verify_ssl=verify_ssl)
+
+
+connectors = {
+ 'windows': get_windows_sandbox_connector,
+ 'linux': get_linux_sandbox_connector,
+ 'android': get_android_sandbox_connector,
+ 'base': get_base_sandbox_connector,
+ 'ti_lookup': get_ti_lookup_connector
+}
\ No newline at end of file
diff --git a/thehive-templates/AnyRun_Sandbox_Analysis_1_0/long.html b/thehive-templates/AnyRun_Sandbox_Analysis_1_0/long.html
deleted file mode 100644
index a76be43ef..000000000
--- a/thehive-templates/AnyRun_Sandbox_Analysis_1_0/long.html
+++ /dev/null
@@ -1,132 +0,0 @@
-
-
-
- Any.Run Sandbox
-
-
-
-
- - Score:
- {{content.analysis.scores.verdict.score}}/100
- - Threat Score:
- - {{content.analysis.scores.verdict.threatLevelText}}
- - Tags:
- {{tag.tag}}
-
-
-
-
-
-
-
Counters
-
-
-
Registry
-
- - Read:
- {{content.counters.registry.read}}
- - Write:
- {{content.counters.registry.write}}
- - Delete:
- {{content.counters.registry.delete}}
- - Total:
- {{content.counters.registry.total}}
-
-
-
-
Processes
-
- - Monitored:
- {{content.counters.processes.monitored}}
- - Suspicious:
- {{content.counters.processes.suspicious}}
- - Malicious:
- {{content.counters.processes.malicious}}
- - Total:
- {{content.counters.processes.total}}
-
-
-
-
Files
-
- - Text:
- {{content.counters.files.text}}
- - Suspicious:
- {{content.counters.files.suspicious}}
- - Malicious:
- {{content.counters.files.malicious}}
- - Unknown:
- {{content.counters.files.unknown}}
-
-
-
-
Network
-
- - Dns:
- {{content.counters.network.dns}}
- - Http:
- {{content.counters.network.http}}
- - Connections:
- {{content.counters.network.connections}}
- - Threats:
- {{content.counters.network.threats}}
-
-
-
-
-
-
-
Scores
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Any.Run Sandbox Error
-
-
-
- - Error:
- - {{content.errorMessage}}
-
-
-
\ No newline at end of file
diff --git a/thehive-templates/AnyRun_Sandbox_Analysis_1_0/short.html b/thehive-templates/AnyRun_Sandbox_Analysis_1_0/short.html
deleted file mode 100644
index 3dfae10bf..000000000
--- a/thehive-templates/AnyRun_Sandbox_Analysis_1_0/short.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
- {{t.namespace}}:{{t.predicate}}="{{t.value}}"
-
diff --git a/thehive-templates/AnyRun_Sandbox_File_Android_1_0/long.html b/thehive-templates/AnyRun_Sandbox_File_Android_1_0/long.html
new file mode 100644
index 000000000..363a0e494
--- /dev/null
+++ b/thehive-templates/AnyRun_Sandbox_File_Android_1_0/long.html
@@ -0,0 +1,236 @@
+
+
+ {{ artifact.data }}
+
+
+ Execution Error: {{ errorMessage }}
+
+
+
+
+
+
+
+
+ ANY.RUN Sandbox Analysis Report
+
+
+
+
+
+
+
+
+
+
+ Verdict: {{ content.verdict || 'Unknown' }}
+
+
+
+
+ {{ t.trim() }}
+
+
+
+
+
+
MITRE ATT&CK
+
+ {{ m.trim() }}
+
+
+
+
+
+
+
+ Main Object: {{ content.mainObject.type }}
+
+
+
+
+
+ URL:
+
+
+ {{ content.mainObject.url }}
+
+
+
+
+
+ SHA256:
+
+
+ {{ content.mainObject.hashes.sha256 }}
+
+
+
+
+
+ MD5:
+
+
+ {{ content.mainObject.hashes.md5 }}
+
+
+
+
+
+ SHA1:
+
+
+ {{ content.mainObject.hashes.sha1 }}
+
+
+
+
+
+ SSDEEP:
+
+
+ {{ content.mainObject.hashes.ssdeep }}
+
+
+
+
+
+
+
Execution Activity
+
+
+
+
+
+
Processes
+
+
+
+ Total: {{ content.counters.processes.total || 0 }}
+
+
+ Monitored: {{ content.counters.processes.monitored || 0 }}
+
+
+ Suspicious: {{ content.counters.processes.suspicious || 0 }}
+
+
+ Malicious: {{ content.counters.processes.malicious || 0 }}
+
+
+
+
+
+
+
+
+
+
Network
+
+
+
+ Connections: {{ content.counters.network.connections || 0 }}
+
+
+ HTTP Reqs: {{ content.counters.network.http || 0 }}
+
+
+ DNS Reqs: {{ content.counters.network.dns || 0 }}
+
+
+ Threats: {{ content.counters.network.threats || 0 }}
+
+
+
+
+
+
+
+
+
+
Files
+
+
+
+ Text: {{ content.counters.files.text || 0 }}
+
+
+ Unknown: {{ content.counters.files.unknown || 0 }}
+
+
+ Suspicious: {{ content.counters.files.suspicious || 0 }}
+
+
+ Malicious: {{ content.counters.files.malicious || 0 }}
+
+
+
+
+
+
+
+
+
+
Registry
+
+
+
+ Total Events: {{ content.counters.registry.total || 0 }}
+
+
+ Read: {{ content.counters.registry.read || 0 }}
+
+
+ Write: {{ content.counters.registry.write || 0 }}
+
+
+ Delete: {{ content.counters.registry.delete || 0 }}
+
+
+
+
+
+
+
Related Entities
+
+
+
+
+
Domains
+
+ {{ dom.trim() }}
+
+
+
+
IP Addresses
+
+ {{ ip.trim() }}
+
+
+
+
URLs
+
+ {{ url.trim() }}
+
+
+
+
+
+
+
diff --git a/thehive-templates/AnyRun_Sandbox_File_Linux_1_0/long.html b/thehive-templates/AnyRun_Sandbox_File_Linux_1_0/long.html
new file mode 100644
index 000000000..363a0e494
--- /dev/null
+++ b/thehive-templates/AnyRun_Sandbox_File_Linux_1_0/long.html
@@ -0,0 +1,236 @@
+
+
+ {{ artifact.data }}
+
+
+ Execution Error: {{ errorMessage }}
+
+
+
+
+
+
+
+
+ ANY.RUN Sandbox Analysis Report
+
+
+
+
+
+
+
+
+
+
+ Verdict: {{ content.verdict || 'Unknown' }}
+
+
+
+
+ {{ t.trim() }}
+
+
+
+
+
+
MITRE ATT&CK
+
+ {{ m.trim() }}
+
+
+
+
+
+
+
+ Main Object: {{ content.mainObject.type }}
+
+
+
+
+
+ URL:
+
+
+ {{ content.mainObject.url }}
+
+
+
+
+
+ SHA256:
+
+
+ {{ content.mainObject.hashes.sha256 }}
+
+
+
+
+
+ MD5:
+
+
+ {{ content.mainObject.hashes.md5 }}
+
+
+
+
+
+ SHA1:
+
+
+ {{ content.mainObject.hashes.sha1 }}
+
+
+
+
+
+ SSDEEP:
+
+
+ {{ content.mainObject.hashes.ssdeep }}
+
+
+
+
+
+
+
Execution Activity
+
+
+
+
+
+
Processes
+
+
+
+ Total: {{ content.counters.processes.total || 0 }}
+
+
+ Monitored: {{ content.counters.processes.monitored || 0 }}
+
+
+ Suspicious: {{ content.counters.processes.suspicious || 0 }}
+
+
+ Malicious: {{ content.counters.processes.malicious || 0 }}
+
+
+
+
+
+
+
+
+
+
Network
+
+
+
+ Connections: {{ content.counters.network.connections || 0 }}
+
+
+ HTTP Reqs: {{ content.counters.network.http || 0 }}
+
+
+ DNS Reqs: {{ content.counters.network.dns || 0 }}
+
+
+ Threats: {{ content.counters.network.threats || 0 }}
+
+
+
+
+
+
+
+
+
+
Files
+
+
+
+ Text: {{ content.counters.files.text || 0 }}
+
+
+ Unknown: {{ content.counters.files.unknown || 0 }}
+
+
+ Suspicious: {{ content.counters.files.suspicious || 0 }}
+
+
+ Malicious: {{ content.counters.files.malicious || 0 }}
+
+
+
+
+
+
+
+
+
+
Registry
+
+
+
+ Total Events: {{ content.counters.registry.total || 0 }}
+
+
+ Read: {{ content.counters.registry.read || 0 }}
+
+
+ Write: {{ content.counters.registry.write || 0 }}
+
+
+ Delete: {{ content.counters.registry.delete || 0 }}
+
+
+
+
+
+
+
Related Entities
+
+
+
+
+
Domains
+
+ {{ dom.trim() }}
+
+
+
+
IP Addresses
+
+ {{ ip.trim() }}
+
+
+
+
URLs
+
+ {{ url.trim() }}
+
+
+
+
+
+
+
diff --git a/thehive-templates/AnyRun_Sandbox_File_Windows_1_0/long.html b/thehive-templates/AnyRun_Sandbox_File_Windows_1_0/long.html
new file mode 100644
index 000000000..363a0e494
--- /dev/null
+++ b/thehive-templates/AnyRun_Sandbox_File_Windows_1_0/long.html
@@ -0,0 +1,236 @@
+
+
+ {{ artifact.data }}
+
+
+ Execution Error: {{ errorMessage }}
+
+
+
+
+
+
+
+
+ ANY.RUN Sandbox Analysis Report
+
+
+
+
+
+
+
+
+
+
+ Verdict: {{ content.verdict || 'Unknown' }}
+
+
+
+
+ {{ t.trim() }}
+
+
+
+
+
+
MITRE ATT&CK
+
+ {{ m.trim() }}
+
+
+
+
+
+
+
+ Main Object: {{ content.mainObject.type }}
+
+
+
+
+
+ URL:
+
+
+ {{ content.mainObject.url }}
+
+
+
+
+
+ SHA256:
+
+
+ {{ content.mainObject.hashes.sha256 }}
+
+
+
+
+
+ MD5:
+
+
+ {{ content.mainObject.hashes.md5 }}
+
+
+
+
+
+ SHA1:
+
+
+ {{ content.mainObject.hashes.sha1 }}
+
+
+
+
+
+ SSDEEP:
+
+
+ {{ content.mainObject.hashes.ssdeep }}
+
+
+
+
+
+
+
Execution Activity
+
+
+
+
+
+
Processes
+
+
+
+ Total: {{ content.counters.processes.total || 0 }}
+
+
+ Monitored: {{ content.counters.processes.monitored || 0 }}
+
+
+ Suspicious: {{ content.counters.processes.suspicious || 0 }}
+
+
+ Malicious: {{ content.counters.processes.malicious || 0 }}
+
+
+
+
+
+
+
+
+
+
Network
+
+
+
+ Connections: {{ content.counters.network.connections || 0 }}
+
+
+ HTTP Reqs: {{ content.counters.network.http || 0 }}
+
+
+ DNS Reqs: {{ content.counters.network.dns || 0 }}
+
+
+ Threats: {{ content.counters.network.threats || 0 }}
+
+
+
+
+
+
+
+
+
+
Files
+
+
+
+ Text: {{ content.counters.files.text || 0 }}
+
+
+ Unknown: {{ content.counters.files.unknown || 0 }}
+
+
+ Suspicious: {{ content.counters.files.suspicious || 0 }}
+
+
+ Malicious: {{ content.counters.files.malicious || 0 }}
+
+
+
+
+
+
+
+
+
+
Registry
+
+
+
+ Total Events: {{ content.counters.registry.total || 0 }}
+
+
+ Read: {{ content.counters.registry.read || 0 }}
+
+
+ Write: {{ content.counters.registry.write || 0 }}
+
+
+ Delete: {{ content.counters.registry.delete || 0 }}
+
+
+
+
+
+
+
Related Entities
+
+
+
+
+
Domains
+
+ {{ dom.trim() }}
+
+
+
+
IP Addresses
+
+ {{ ip.trim() }}
+
+
+
+
URLs
+
+ {{ url.trim() }}
+
+
+
+
+
+
+
diff --git a/thehive-templates/AnyRun_Sandbox_URL_Android_1_0/long.html b/thehive-templates/AnyRun_Sandbox_URL_Android_1_0/long.html
new file mode 100644
index 000000000..363a0e494
--- /dev/null
+++ b/thehive-templates/AnyRun_Sandbox_URL_Android_1_0/long.html
@@ -0,0 +1,236 @@
+
+
+ {{ artifact.data }}
+
+
+ Execution Error: {{ errorMessage }}
+
+
+
+
+
+
+
+
+ ANY.RUN Sandbox Analysis Report
+
+
+
+
+
+
+
+
+
+
+ Verdict: {{ content.verdict || 'Unknown' }}
+
+
+
+
+ {{ t.trim() }}
+
+
+
+
+
+
MITRE ATT&CK
+
+ {{ m.trim() }}
+
+
+
+
+
+
+
+ Main Object: {{ content.mainObject.type }}
+
+
+
+
+
+ URL:
+
+
+ {{ content.mainObject.url }}
+
+
+
+
+
+ SHA256:
+
+
+ {{ content.mainObject.hashes.sha256 }}
+
+
+
+
+
+ MD5:
+
+
+ {{ content.mainObject.hashes.md5 }}
+
+
+
+
+
+ SHA1:
+
+
+ {{ content.mainObject.hashes.sha1 }}
+
+
+
+
+
+ SSDEEP:
+
+
+ {{ content.mainObject.hashes.ssdeep }}
+
+
+
+
+
+
+
Execution Activity
+
+
+
+
+
+
Processes
+
+
+
+ Total: {{ content.counters.processes.total || 0 }}
+
+
+ Monitored: {{ content.counters.processes.monitored || 0 }}
+
+
+ Suspicious: {{ content.counters.processes.suspicious || 0 }}
+
+
+ Malicious: {{ content.counters.processes.malicious || 0 }}
+
+
+
+
+
+
+
+
+
+
Network
+
+
+
+ Connections: {{ content.counters.network.connections || 0 }}
+
+
+ HTTP Reqs: {{ content.counters.network.http || 0 }}
+
+
+ DNS Reqs: {{ content.counters.network.dns || 0 }}
+
+
+ Threats: {{ content.counters.network.threats || 0 }}
+
+
+
+
+
+
+
+
+
+
Files
+
+
+
+ Text: {{ content.counters.files.text || 0 }}
+
+
+ Unknown: {{ content.counters.files.unknown || 0 }}
+
+
+ Suspicious: {{ content.counters.files.suspicious || 0 }}
+
+
+ Malicious: {{ content.counters.files.malicious || 0 }}
+
+
+
+
+
+
+
+
+
+
Registry
+
+
+
+ Total Events: {{ content.counters.registry.total || 0 }}
+
+
+ Read: {{ content.counters.registry.read || 0 }}
+
+
+ Write: {{ content.counters.registry.write || 0 }}
+
+
+ Delete: {{ content.counters.registry.delete || 0 }}
+
+
+
+
+
+
+
Related Entities
+
+
+
+
+
Domains
+
+ {{ dom.trim() }}
+
+
+
+
IP Addresses
+
+ {{ ip.trim() }}
+
+
+
+
URLs
+
+ {{ url.trim() }}
+
+
+
+
+
+
+
diff --git a/thehive-templates/AnyRun_Sandbox_URL_Linux_1_0/long.html b/thehive-templates/AnyRun_Sandbox_URL_Linux_1_0/long.html
new file mode 100644
index 000000000..363a0e494
--- /dev/null
+++ b/thehive-templates/AnyRun_Sandbox_URL_Linux_1_0/long.html
@@ -0,0 +1,236 @@
+
+
+ {{ artifact.data }}
+
+
+ Execution Error: {{ errorMessage }}
+
+
+
+
+
+
+
+
+ ANY.RUN Sandbox Analysis Report
+
+
+
+
+
+
+
+
+
+
+ Verdict: {{ content.verdict || 'Unknown' }}
+
+
+
+
+ {{ t.trim() }}
+
+
+
+
+
+
MITRE ATT&CK
+
+ {{ m.trim() }}
+
+
+
+
+
+
+
+ Main Object: {{ content.mainObject.type }}
+
+
+
+
+
+ URL:
+
+
+ {{ content.mainObject.url }}
+
+
+
+
+
+ SHA256:
+
+
+ {{ content.mainObject.hashes.sha256 }}
+
+
+
+
+
+ MD5:
+
+
+ {{ content.mainObject.hashes.md5 }}
+
+
+
+
+
+ SHA1:
+
+
+ {{ content.mainObject.hashes.sha1 }}
+
+
+
+
+
+ SSDEEP:
+
+
+ {{ content.mainObject.hashes.ssdeep }}
+
+
+
+
+
+
+
Execution Activity
+
+
+
+
+
+
Processes
+
+
+
+ Total: {{ content.counters.processes.total || 0 }}
+
+
+ Monitored: {{ content.counters.processes.monitored || 0 }}
+
+
+ Suspicious: {{ content.counters.processes.suspicious || 0 }}
+
+
+ Malicious: {{ content.counters.processes.malicious || 0 }}
+
+
+
+
+
+
+
+
+
+
Network
+
+
+
+ Connections: {{ content.counters.network.connections || 0 }}
+
+
+ HTTP Reqs: {{ content.counters.network.http || 0 }}
+
+
+ DNS Reqs: {{ content.counters.network.dns || 0 }}
+
+
+ Threats: {{ content.counters.network.threats || 0 }}
+
+
+
+
+
+
+
+
+
+
Files
+
+
+
+ Text: {{ content.counters.files.text || 0 }}
+
+
+ Unknown: {{ content.counters.files.unknown || 0 }}
+
+
+ Suspicious: {{ content.counters.files.suspicious || 0 }}
+
+
+ Malicious: {{ content.counters.files.malicious || 0 }}
+
+
+
+
+
+
+
+
+
+
Registry
+
+
+
+ Total Events: {{ content.counters.registry.total || 0 }}
+
+
+ Read: {{ content.counters.registry.read || 0 }}
+
+
+ Write: {{ content.counters.registry.write || 0 }}
+
+
+ Delete: {{ content.counters.registry.delete || 0 }}
+
+
+
+
+
+
+
Related Entities
+
+
+
+
+
Domains
+
+ {{ dom.trim() }}
+
+
+
+
IP Addresses
+
+ {{ ip.trim() }}
+
+
+
+
URLs
+
+ {{ url.trim() }}
+
+
+
+
+
+
+
diff --git a/thehive-templates/AnyRun_Sandbox_URL_Windows_1_0/long.html b/thehive-templates/AnyRun_Sandbox_URL_Windows_1_0/long.html
new file mode 100644
index 000000000..363a0e494
--- /dev/null
+++ b/thehive-templates/AnyRun_Sandbox_URL_Windows_1_0/long.html
@@ -0,0 +1,236 @@
+
+
+ {{ artifact.data }}
+
+
+ Execution Error: {{ errorMessage }}
+
+
+
+
+
+
+
+
+ ANY.RUN Sandbox Analysis Report
+
+
+
+
+
+
+
+
+
+
+ Verdict: {{ content.verdict || 'Unknown' }}
+
+
+
+
+ {{ t.trim() }}
+
+
+
+
+
+
MITRE ATT&CK
+
+ {{ m.trim() }}
+
+
+
+
+
+
+
+ Main Object: {{ content.mainObject.type }}
+
+
+
+
+
+ URL:
+
+
+ {{ content.mainObject.url }}
+
+
+
+
+
+ SHA256:
+
+
+ {{ content.mainObject.hashes.sha256 }}
+
+
+
+
+
+ MD5:
+
+
+ {{ content.mainObject.hashes.md5 }}
+
+
+
+
+
+ SHA1:
+
+
+ {{ content.mainObject.hashes.sha1 }}
+
+
+
+
+
+ SSDEEP:
+
+
+ {{ content.mainObject.hashes.ssdeep }}
+
+
+
+
+
+
+
Execution Activity
+
+
+
+
+
+
Processes
+
+
+
+ Total: {{ content.counters.processes.total || 0 }}
+
+
+ Monitored: {{ content.counters.processes.monitored || 0 }}
+
+
+ Suspicious: {{ content.counters.processes.suspicious || 0 }}
+
+
+ Malicious: {{ content.counters.processes.malicious || 0 }}
+
+
+
+
+
+
+
+
+
+
Network
+
+
+
+ Connections: {{ content.counters.network.connections || 0 }}
+
+
+ HTTP Reqs: {{ content.counters.network.http || 0 }}
+
+
+ DNS Reqs: {{ content.counters.network.dns || 0 }}
+
+
+ Threats: {{ content.counters.network.threats || 0 }}
+
+
+
+
+
+
+
+
+
+
Files
+
+
+
+ Text: {{ content.counters.files.text || 0 }}
+
+
+ Unknown: {{ content.counters.files.unknown || 0 }}
+
+
+ Suspicious: {{ content.counters.files.suspicious || 0 }}
+
+
+ Malicious: {{ content.counters.files.malicious || 0 }}
+
+
+
+
+
+
+
+
+
+
Registry
+
+
+
+ Total Events: {{ content.counters.registry.total || 0 }}
+
+
+ Read: {{ content.counters.registry.read || 0 }}
+
+
+ Write: {{ content.counters.registry.write || 0 }}
+
+
+ Delete: {{ content.counters.registry.delete || 0 }}
+
+
+
+
+
+
+
Related Entities
+
+
+
+
+
Domains
+
+ {{ dom.trim() }}
+
+
+
+
IP Addresses
+
+ {{ ip.trim() }}
+
+
+
+
URLs
+
+ {{ url.trim() }}
+
+
+
+
+
+
+
diff --git a/thehive-templates/AnyRun_TI_Lookup_1_0/long.html b/thehive-templates/AnyRun_TI_Lookup_1_0/long.html
new file mode 100644
index 000000000..55e0a5107
--- /dev/null
+++ b/thehive-templates/AnyRun_TI_Lookup_1_0/long.html
@@ -0,0 +1,268 @@
+
+
+ {{ artifact.data }}
+
+
+ Execution Error: {{ errorMessage }}
+
+
+
+
+
+
+
+
+ ANY.RUN Threat Intelligence Lookup
+
+
+
+
+
+
+
+
+
+
+ Verdict: {{ content.treat_level || 'Unknown' }}
+
+
+
+
+ {{ t.trim() }}
+
+
+
+
+
+
+
+
+ Main Object
+
+
+
+
+
+ Object:
+
+
+ {{ content.detected_type }}
+
+
+
+
+
+ Name:
+
+
+ {{ content.filename }}
+
+
+
+
+
+ Last Seen:
+
+
+ {{ content.last_seen }}
+
+
+
+
+
+ GEO:
+
+
+ {{ content.geo }}
+
+
+
+
+
+ ASN:
+
+
+ {{ content.asn }}
+
+
+
+
+
+
+
+ Path:
+
+
+ {{ content.filepath }}
+
+
+
+
+
+ SHA256:
+
+
+ {{ content.sha256 }}
+
+
+
+
+
+ SHA1:
+
+
+ {{ content.sha1 }}
+
+
+
+
+
+ MD5:
+
+
+ {{ content.md5 }}
+
+
+
+
+
+ SSDEEP:
+
+
+ {{ content.ssdeep }}
+
+
+
+
+
+
+ Risk score by industry
+
+
+
+ {{ ind.trim() }}
+
+
+
+
+ Intelligence Context
+
+
+
+
+
+
+ Related URLs ({{ content.related_urls.length }})
+
+
+
+
+
+ | URL |
+ Verdict |
+ Date |
+ Threat Name |
+ Malconf |
+
+
+
+
+ | {{ pU }} |
+
+ Malicious
+ Suspicious
+ Info
+ |
+ {{ pD }} |
+
+ {{ pN }}-
+ |
+
+ Yes-
+ |
+
+
+
+
+
+
+
+
+
+
+ Related IPs ({{ content.related_ips.length }})
+
+
+
+
+
+ | IP Address |
+ Verdict |
+ Date |
+ Threat Name |
+ Malconf |
+
+
+
+
+ | {{ pI }} |
+
+ Malicious
+ Suspicious
+ Info
+ |
+ {{ pD }} |
+
+ {{ pN }}-
+ |
+
+ Yes-
+ |
+
+
+
+
+
+
+
+
+
+
+ Recent ANY.RUN Sandbox Analysis
+
+
+
+
+
+