From 2d6debdd77189e864457a7499e63ec4cc9a19d3b Mon Sep 17 00:00:00 2001
From: Dinko Jakovljevic
<141251667+DinkoReversingLabs@users.noreply.github.com>
Date: Tue, 14 Nov 2023 14:30:06 +0100
Subject: [PATCH 01/11] ReversingLabs TitaniumCloud v2: Bugfix - Widget data
render (#7)
* Fixed data rendering issue in investigation widget
* Added info in release notes for new version
* Reworked data render for list_user_override to table
* Reworked data display for aggregated user override
* Connector data output adjusted for list_overrides
* Increased version on user agent
* Removed global widget css style
* ReversingLabs logo update
* Updated network_reputation action
* Updated json config for user overrides
* Removed custom views reference
* Highlight associated malware status
* Adjusted code to flake8
* Added minimal_data_paths to json
---
README.md | 4 +-
logo_reversinglabs_ticloudv2.svg | 24 +-
logo_reversinglabs_ticloudv2_dark.svg | 15 +-
release_notes/unreleased.md | 8 +
reversinglabs_ticloudv2.json | 139 +++++++--
reversinglabs_ticloudv2_connector.py | 16 +-
reversinglabs_ticloudv2_views.py | 38 +--
...versinglabs_ticloudv2_advanced_search.html | 13 -
.../reversinglabs_ticloudv2_analyze_url.html | 13 -
.../reversinglabs_ticloudv2_av_scanners.html | 13 -
...bs_ticloudv2_dynamic_analysis_results.html | 13 -
...reversinglabs_ticloudv2_file_analysis.html | 13 -
...versinglabs_ticloudv2_file_reputation.html | 13 -
...glabs_ticloudv2_functional_similarity.html | 13 -
...singlabs_ticloudv2_imphash_similarity.html | 13 -
...2_list_user_overrides_aggregated_view.html | 121 --------
...bs_ticloudv2_list_user_overrides_view.html | 121 --------
...network_reputation_user_override_view.html | 15 +-
...abs_ticloudv2_network_reputation_view.html | 272 ++++++++----------
...singlabs_ticloudv2_submit_for_dynamic.html | 13 -
views/reversinglabs_ticloudv2_uri_index.html | 13 -
...eversinglabs_ticloudv2_uri_statistics.html | 13 -
...rsinglabs_ticloudv2_url_analysis_feed.html | 13 -
...nglabs_ticloudv2_url_downloaded_files.html | 25 +-
...eversinglabs_ticloudv2_url_reputation.html | 13 -
25 files changed, 303 insertions(+), 664 deletions(-)
delete mode 100644 views/reversinglabs_ticloudv2_list_user_overrides_aggregated_view.html
delete mode 100644 views/reversinglabs_ticloudv2_list_user_overrides_view.html
diff --git a/README.md b/README.md
index 24c4def..67ed845 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
# Reversinglabs TitaniumCloud v2
Publisher: ReversingLabs
-Connector Version: 1.2.0
+Connector Version: 1.2.1
Product Vendor: Reversinglabs
Product Name: TitaniumCloud
Product Version Supported (regex): ".\*"
@@ -1733,4 +1733,4 @@ action_result.parameter.remove_overrides_list | string | |
action_result.status | string | |
action_result.message | string | |
summary.total_objects | numeric | |
-summary.total_objects_successful | numeric | |
\ No newline at end of file
+summary.total_objects_successful | numeric | |
diff --git a/logo_reversinglabs_ticloudv2.svg b/logo_reversinglabs_ticloudv2.svg
index 6f1aab4..aaef305 100644
--- a/logo_reversinglabs_ticloudv2.svg
+++ b/logo_reversinglabs_ticloudv2.svg
@@ -1 +1,23 @@
-
+
diff --git a/logo_reversinglabs_ticloudv2_dark.svg b/logo_reversinglabs_ticloudv2_dark.svg
index ee85799..a4fb977 100644
--- a/logo_reversinglabs_ticloudv2_dark.svg
+++ b/logo_reversinglabs_ticloudv2_dark.svg
@@ -1 +1,14 @@
-
+
diff --git a/release_notes/unreleased.md b/release_notes/unreleased.md
index fbcb2fd..372c70a 100644
--- a/release_notes/unreleased.md
+++ b/release_notes/unreleased.md
@@ -1 +1,9 @@
**Unreleased**
+
+* Bug fixes:
+ * Applied fixes to the data rendering on executed action within application widget in investigation pane
+ * Removed duplicate jQuery reference in network reputation view
+
+* Enhancements:
+ * Unified CSS style in widget and custom views
+ * Updated ReversingLabs branding
diff --git a/reversinglabs_ticloudv2.json b/reversinglabs_ticloudv2.json
index c5b4613..43a452a 100644
--- a/reversinglabs_ticloudv2.json
+++ b/reversinglabs_ticloudv2.json
@@ -16,8 +16,8 @@
}
],
"license": "Copyright (c) ReversingLabs, 2023",
- "app_version": "1.2.0",
- "utctime_updated": "2023-10-20T11:31:29.572259Z",
+ "app_version": "1.2.1",
+ "utctime_updated": "2023-11-10T13:13:00.593313Z",
"package_name": "phantom_reversinglabs_ticloudv2",
"main_module": "reversinglabs_ticloudv2_connector.py",
"min_phantom_version": "5.5.0",
@@ -2226,7 +2226,11 @@
"data_type": "string",
"required": true,
"primary": false,
- "contains": [],
+ "contains": [
+ "domain",
+ "url",
+ "ip"
+ ],
"value_list": [],
"default": "",
"order": 0,
@@ -2237,18 +2241,69 @@
},
"output": [
{
- "data_path": "action_result.parameter.network_locations",
+ "data_path": "action_result.data.*.requested_network_location",
"data_type": "string",
- "contains": [],
- "column_name": "network_locations",
+ "contains": [
+ "domain",
+ "url",
+ "ip"
+ ],
+ "column_name": "network_location",
"column_order": 0
},
{
- "data_path": "action_result.status",
+ "data_path": "action_result.data.*.type",
"data_type": "string",
- "column_name": "status",
+ "column_name": "type",
"column_order": 1
},
+ {
+ "data_path": "action_result.data.*.last_seen",
+ "data_type": "string",
+ "column_name": "last seen",
+ "column_order": 2
+ },
+ {
+ "data_path": "action_result.data.*.first_seen",
+ "data_type": "string",
+ "column_name": "first seen",
+ "column_order": 3
+ },
+ {
+ "data_path": "action_result.data.*.associated_malware",
+ "data_type": "string",
+ "column_name": "associated malware",
+ "column_order": 4
+ },
+ {
+ "data_path": "action_result.data.*.third_party_reputations.total",
+ "data_type": "string",
+ "column_name": "total",
+ "column_order": 5
+ },
+ {
+ "data_path": "action_result.data.*.third_party_reputations.clean",
+ "data_type": "string",
+ "column_name": "clean",
+ "column_order": 6
+ },
+ {
+ "data_path": "action_result.data.*.third_party_reputations.malicious",
+ "data_type": "string",
+ "column_name": "malicious",
+ "column_order": 7
+ },
+ {
+ "data_path": "action_result.data.*.third_party_reputations.undetected",
+ "data_type": "string",
+ "column_name": "undetected",
+ "column_order": 8
+ },
+ {
+ "data_path": "action_result.status",
+ "data_type": "string",
+ "column_name": "status"
+ },
{
"data_path": "action_result.message",
"data_type": "string"
@@ -2265,7 +2320,7 @@
"render": {
"type": "custom",
"width": 10,
- "height": 5,
+ "height": 10,
"view": "reversinglabs_ticloudv2_views.network_reputation",
"title": "TitaniumCloud Network Reputation"
},
@@ -2284,7 +2339,9 @@
"data_type": "string",
"required": false,
"primary": false,
- "contains": [],
+ "contains": [
+ "sha1"
+ ],
"value_list": [],
"default": "",
"order": 0,
@@ -2293,18 +2350,32 @@
},
"output": [
{
- "data_path": "action_result.parameter.next_page_sha1",
+ "data_path": "action_result.data.*.user_override.network_locations.*.network_location",
"data_type": "string",
- "contains": [],
- "column_name": "next_page_sha1",
+ "contains": [
+ "url",
+ "domain",
+ "ip"
+ ],
+ "column_name": "network_location",
"column_order": 0
},
{
- "data_path": "action_result.status",
+ "data_path": "action_result.data.*.user_override.network_locations.*.type",
"data_type": "string",
- "column_name": "status",
+ "contains": [
+ "url",
+ "domain",
+ "ip"
+ ],
+ "column_name": "type",
"column_order": 1
},
+ {
+ "data_path": "action_result.status",
+ "data_type": "string",
+ "column_name": "status"
+ },
{
"data_path": "action_result.message",
"data_type": "string"
@@ -2319,11 +2390,7 @@
}
],
"render": {
- "type": "custom",
- "width": 10,
- "height": 5,
- "view": "reversinglabs_ticloudv2_views.list_user_overrides",
- "title": "TitaniumCloud List User Overrides"
+ "type": "table"
},
"versions": "EQ(*)"
},
@@ -2349,18 +2416,32 @@
},
"output": [
{
- "data_path": "action_result.parameter.max_results",
- "data_type": "numeric",
- "contains": [],
- "column_name": "max_results",
+ "data_path": "action_result.data.*.*.network_location",
+ "data_type": "string",
+ "contains": [
+ "url",
+ "domain",
+ "ip"
+ ],
+ "column_name": "network_location",
"column_order": 0
},
{
- "data_path": "action_result.status",
+ "data_path": "action_result.data.*.*.type",
"data_type": "string",
- "column_name": "status",
+ "contains": [
+ "url",
+ "domain",
+ "ip"
+ ],
+ "column_name": "type",
"column_order": 1
},
+ {
+ "data_path": "action_result.status",
+ "data_type": "string",
+ "column_name": "status"
+ },
{
"data_path": "action_result.message",
"data_type": "string"
@@ -2375,11 +2456,7 @@
}
],
"render": {
- "type": "custom",
- "width": 10,
- "height": 5,
- "view": "reversinglabs_ticloudv2_views.list_user_overrides_aggregated",
- "title": "TitaniumCloud List User Overrides Aggregated"
+ "type": "table"
},
"versions": "EQ(*)"
},
diff --git a/reversinglabs_ticloudv2_connector.py b/reversinglabs_ticloudv2_connector.py
index 2fc3092..85b42c0 100644
--- a/reversinglabs_ticloudv2_connector.py
+++ b/reversinglabs_ticloudv2_connector.py
@@ -40,7 +40,6 @@ def new_get(url, **kwargs):
phantom.requests.get = new_get
-
old_post = phantom.requests.post
@@ -49,7 +48,6 @@ def new_post(url, **kwargs):
phantom.requests.post = new_post
-
old_delete = phantom.requests.delete
@@ -62,7 +60,7 @@ def new_delete(url, **kwargs):
class ReversinglabsTitaniumCloudV2Connector(BaseConnector):
ticloud_spex_url = "/api/spex/upload/"
- USER_AGENT = "ReversingLabs Splunk SOAR TitaniumCloudv2 v1.2.0"
+ USER_AGENT = "ReversingLabs Splunk SOAR TitaniumCloudv2 v1.2.1"
# The actions supported by this connector
ACTION_ID_TEST_CONNECTIVITY = "test_connectivity"
@@ -337,6 +335,8 @@ def _handle_get_latest_url_analysis_feed(self, action_result, param):
for x in response:
action_result.add_data(x)
+ self.debug_print("ACTION RESULT DATA:", action_result)
+
def _handle_get_url_analysis_feed_from_date(self, action_result, param):
self.debug_print("Action handler", self.get_action_identifier())
@@ -702,7 +702,11 @@ def _handle_get_network_reputation(self, action_result, param):
)
self.debug_print("Executed", self.get_action_identifier())
- action_result.add_data(response.json())
+
+ for x in response.json()["rl"]["entries"]:
+ action_result.add_data(x)
+
+ return action_result.get_status()
def _handle_get_list_user_overrides(self, action_result, param):
self.debug_print("Action handler", self.get_action_identifier())
@@ -719,7 +723,9 @@ def _handle_get_list_user_overrides(self, action_result, param):
)
self.debug_print("Executed", self.get_action_identifier())
- action_result.add_data(response.json())
+ action_result.add_data(response.json()["rl"])
+
+ return action_result.get_status()
def _handle_get_list_user_overrides_aggregated(self, action_result, param):
self.debug_print("Action handler", self.get_action_identifier())
diff --git a/reversinglabs_ticloudv2_views.py b/reversinglabs_ticloudv2_views.py
index 8485fc6..a1025ed 100644
--- a/reversinglabs_ticloudv2_views.py
+++ b/reversinglabs_ticloudv2_views.py
@@ -13,7 +13,6 @@
# CONDITIONS OF ANY KIND, either express or implied. See the License for the
# specific language governing permissions and limitations under the License.
-
def file_reputation(provides, all_app_runs, context):
for summary, action_results in all_app_runs:
for result in action_results:
@@ -104,8 +103,7 @@ def latest_url_analysis_feed(provides, all_app_runs, context):
for summary, action_results in all_app_runs:
for result in action_results:
context['data'] = result.get_data()
-
- context['param'] = result.get_param()
+ context['param'] = result.get_param()
return 'views/reversinglabs_ticloudv2_url_analysis_feed.html'
@@ -214,42 +212,14 @@ def uri_index(provides, all_app_runs, context):
def network_reputation(provides, all_app_runs, context):
- for summary, action_results in all_app_runs:
- for result in action_results:
- data = {}
-
- entries = result.get_data()[0].get("rl", {}).get("entries")
- data["entries"] = entries
-
- context["data"] = data
-
- return 'views/reversinglabs_ticloudv2_network_reputation_view.html'
-
-
-def list_user_overrides(provides, all_app_runs, context):
- for summary, action_results in all_app_runs:
- for result in action_results:
- data = {}
-
- user_override = result.get_data()[0].get("rl", {}).get("user_override")
- data["user_override"] = user_override
-
- context["data"] = data
-
- return 'views/reversinglabs_ticloudv2_list_user_overrides_view.html'
-
-def list_user_overrides_aggregated(provides, all_app_runs, context):
for summary, action_results in all_app_runs:
for result in action_results:
- data = {}
-
- network_locations = result.get_data()[0]
- data["network_locations"] = network_locations
+ context['data'] = result.get_data()
- context["data"] = data
+ context['param'] = result.get_param()
- return 'views/reversinglabs_ticloudv2_list_user_overrides_aggregated_view.html'
+ return 'views/reversinglabs_ticloudv2_network_reputation_view.html'
def network_reputation_user_override(provides, all_app_runs, context):
diff --git a/views/reversinglabs_ticloudv2_advanced_search.html b/views/reversinglabs_ticloudv2_advanced_search.html
index 619dda9..13ebb6d 100644
--- a/views/reversinglabs_ticloudv2_advanced_search.html
+++ b/views/reversinglabs_ticloudv2_advanced_search.html
@@ -16,19 +16,6 @@
background-repeat: no-repeat; background-image: url('/app_resource/{{ title_logo }}');"{% endif %}{% endblock %}
{% block widget_content %}
-
- {% if data.network_locations == None %}
- There is no network location overrides object in the response JSON.
- {% else %}
-
-
-
-
- {% for net_loc in data.network_locations %}
-
- Network location |
- {{net_loc.network_location}} |
-
-
- Type |
- {{net_loc.type}} |
-
-
- {% endfor %}
-
- {% endif %}
-
-{% endblock %}
\ No newline at end of file
diff --git a/views/reversinglabs_ticloudv2_list_user_overrides_view.html b/views/reversinglabs_ticloudv2_list_user_overrides_view.html
deleted file mode 100644
index b93df92..0000000
--- a/views/reversinglabs_ticloudv2_list_user_overrides_view.html
+++ /dev/null
@@ -1,121 +0,0 @@
-
-
-{% extends 'widgets/widget_template.html' %}
-{% load custom_template %}
-{% block custom_title_prop %}{% if title_logo %}style="background-size: auto 60%; background-position: 50%;
-background-repeat: no-repeat; background-image: url('/app_resource/{{ title_logo }}');"{% endif %}{% endblock %}
-{% block widget_content %}
-
-
- {% if data.user_override == None %}
- There is no overrides for network locations object in the response JSON.
- {% else %}
-
-
-
-
- {% for net_loc in data.user_override.network_locations %}
-
- Network location |
- {{net_loc.network_location}} |
-
-
- Type |
- {{net_loc.type}} |
-
-
- {% endfor %}
-
- {% endif %}
-
-{% endblock %}
\ No newline at end of file
diff --git a/views/reversinglabs_ticloudv2_network_reputation_user_override_view.html b/views/reversinglabs_ticloudv2_network_reputation_user_override_view.html
index d7e314e..19564a0 100644
--- a/views/reversinglabs_ticloudv2_network_reputation_user_override_view.html
+++ b/views/reversinglabs_ticloudv2_network_reputation_user_override_view.html
@@ -16,19 +16,6 @@
background-repeat: no-repeat; background-image: url('/app_resource/{{ title_logo }}');"{% endif %}{% endblock %}
{% block widget_content %}
-
- {% if data.entries == None %}
- There is no network location object in the response JSON.
- {% else %}
- {% for net_loc in data.entries %}
-
-
-
-
-
+ {% for x in data %}
+
+
+
- ReversingLabs Network Reputation for {{net_loc.type}} |
+ Requested Network Location |
+ {{ x.requested_network_location }} |
+
+
- Requested network location |
- {{net_loc.requested_network_location}} |
+ Type |
+ {{ x.type }} |
- Type |
- {{net_loc.type}} |
+ Last Seen |
+ {{ x.last_seen }} |
- Associated malware |
- {{net_loc.associated_malware}} |
+ First Seen |
+ {{ x.first_seen }} |
- First seen |
- {{net_loc.first_seen}} |
+ Associated Malware |
+ {% if x.associated_malware == True %}
+ {{ x.associated_malware }} |
+ {% else %}
+ {{ x.associated_malware }} |
+ {% endif %}
- Last seen |
- {{net_loc.last_seen}} |
+ Total |
+ {{ x.third_party_reputations.total }} |
- Third party reputations |
-
- Total: {{net_loc.third_party_reputations.total}}
- Clean: {{net_loc.third_party_reputations.clean}}
- Malicious: {{net_loc.third_party_reputations.malicious}}
- Undetected: {{net_loc.third_party_reputations.undetected}}
- |
+ Clean |
+ {{ x.third_party_reputations.clean }} |
-
- |
+
+ Malicious |
+ {{ x.third_party_reputations.malicious }} |
-
-
-
+
+ Undetected |
+ {{ x.third_party_reputations.undetected }} |
+
+
+
+
+
-
+ });
+ }
+
{% endfor %}
- {% endif %}
-
{% endblock %}
diff --git a/views/reversinglabs_ticloudv2_submit_for_dynamic.html b/views/reversinglabs_ticloudv2_submit_for_dynamic.html
index 19a9482..bdad243 100644
--- a/views/reversinglabs_ticloudv2_submit_for_dynamic.html
+++ b/views/reversinglabs_ticloudv2_submit_for_dynamic.html
@@ -16,19 +16,6 @@
background-repeat: no-repeat; background-image: url('/app_resource/{{ title_logo }}');"{% endif %}{% endblock %}
{% block widget_content %}
{% if data.report_base == None %}
- There is no rl object in the response JSON.
+ There is no rl object in the response JSON.
{% else %}
- ReversingLabs dynamic analysis for
+ | ReversingLabs dynamic analysis for File
{{data.report_base.requested_hash}} |
@@ -84,20 +132,24 @@
Classification |
- {{data.report_base.report.classification}}
+ {{data.report_base.report.classification}}
|
+
+ Requested SHA1 of file |
+ {{ data.report_base.requested_hash }} |
+
MD5 |
- {{data.report_base.report.md5}} |
+ {{ data.report_base.report.md5 }} |
SHA-1 |
- {{data.report_base.report.sha1}} |
+ {{ data.report_base.report.sha1 }} |
SHA-256 |
- {{data.report_base.report.sha256}} |
+ {{ data.report_base.report.sha256 }} |
{% if param.latest == True or param.analysis_id != None%}
@@ -134,7 +186,363 @@
{% endif %}
+
+ Configuration |
+ {{data.report_base.report.configuration}} |
+
+
+ Risk score |
+ {{data.report_base.report.risk_score}} |
+
+ {% if data.report_base.report.dropped_files %}
+
+ Dropped files |
+
+
+
+
+ {% for y in data.report_base.report.dropped_files %}
+
+ {% endfor %}
+
+ |
+
+
+
+ {% for y in data.report_base.report.dropped_files %}
+
+ {% endfor %}
+ |
+
+ {% endif %}
+ {% if data.report_base.report.snort_alerts %}
+
+ Snort alerts |
+
+
+
+
+ {% for y in data.report_base.report.snort_alerts %}
+
+ {% endfor %}
+
+ |
+
+
+
+ {% for y in data.report_base.report.snort_alerts %}
+
+
+
+
+ message |
+ {{ y.message }} |
+
+
+ classification type |
+ {{ y.classification_type }} |
+
+
+ destination ip |
+ {{ y.destination_ip }} |
+
+
+ rule |
+ {{ y.rule }} |
+
+
+
+
+ {% endfor %}
+ |
+
+ {% endif %}
+ {% if data.report_base.report.signatures %}
+
+ Signatures |
+
+
+
+
+ {% for y in data.report_base.report.signatures %}
+
+ {% endfor %}
+
+ |
+
+
+
+ {% for y in data.report_base.report.signatures %}
+
+
+
+
+ signature id |
+ {{y.sig_id}} |
+
+
+ description |
+ {{y.description}} |
+
+
+ risk factor |
+ {{y.risk_factor}} |
+
+
+
+
+ {% endfor %}
+ |
+
+ {% endif %}
+
+ Network |
+
+ {% if data.report_base.report.network.dns %}
+
+
+
+ {% for y in data.report_base.report.network.dns %}
+
+ {% endfor %}
+
+ |
+
+
+
+ {% for y in data.report_base.report.network.dns %}
+
+
+
+
+ type |
+ {{y.type}} |
+
+
+ value |
+ {{y.value}} |
+
+
+ address |
+ {{y.address}} |
+
+
+ process id |
+ {{y.process_id}} |
+
+
+
+
+ {% endfor %}
+ |
+
+ {% endif %}
+ {% if data.report_base.report.network.tcp %}
+
+
+
+ {% for y in data.report_base.report.network.tcp %}
+
+ {% endfor %}
+
+ |
+
+
+
+ {% for y in data.report_base.report.network.tcp %}
+
+
+
+
+ process id |
+ {{y.process_id}} |
+
+
+ destination ip |
+ {{y.destination_ip}} |
+
+
+ destination port |
+ {{y.destination_port}} |
+
+
+
+
+ {% endfor %}
+ |
+
+ {% endif %}
+ {% if data.report_base.report.network.udp %}
+
+
+
+ {% for y in data.report_base.report.network.udp %}
+
+ {% endfor %}
+
+ |
+
+
+
+ {% for y in data.report_base.report.network.udp %}
+
+
+
+
+ process id |
+ {{y.process_id}} |
+
+
+ destination ip |
+ {{y.destination_ip}} |
+
+
+ destination port |
+ {{y.destination_port}} |
+
+
+
+
+ {% endfor %}
+ |
+
+ {% endif %}
+ {% if data.report_base.report.network.url %}
+
+
+
+ {% for y in data.report_base.report.network.url %}
+
+ {% endfor %}
+
+ |
+
+
+
+ {% for y in data.report_base.report.network.url %}
+
+
+
+
+ url |
+ {{y.url}} |
+
+
+ source |
+ {{y.source}} |
+
+
+
+
+ {% endfor %}
+ |
+
+ {% endif %}
+ {% if data.report_base.report.network.http %}
+
+
+
+ {% for y in data.report_base.report.network.http %}
+
+ {% endfor %}
+
+ |
+
+
+
+ {% for y in data.report_base.report.network.http %}
+
+
+
+
+ url |
+ {{y.url}} |
+
+
+ method |
+ {{y.method}} |
+
+
+ process id |
+ {{y.process_id}} |
+
+
+
+
+ {% endfor %}
+ |
+
+ {% endif %}
+
+ Pcap |
+ Download link |
+
+
+ Screenshot |
+ Download link |
+
+
+ Memory strings |
+ Download link |
+
+
+ Dropped Files URL |
+ Download link |
+
+
{% endif %}
+
{% endblock %}
diff --git a/views/reversinglabs_ticloudv2_dynamic_url_analysis_results.html b/views/reversinglabs_ticloudv2_dynamic_url_analysis_results.html
new file mode 100644
index 0000000..340d117
--- /dev/null
+++ b/views/reversinglabs_ticloudv2_dynamic_url_analysis_results.html
@@ -0,0 +1,652 @@
+{% extends 'widgets/widget_template.html' %}
+{% load custom_template %}
+{% block custom_title_prop %}{% if title_logo %}style="background-size: auto 60%; background-position: 50%;
+background-repeat: no-repeat; background-image: url('/app_resource/{{ title_logo }}');"{% endif %}{% endblock %}
+{% block widget_content %}
+
+
+
+
+
+ {% if data == None %}
+ There is no rl object in the response JSON.
+ {% else %}
+
+
+ {% if data.requested_sha1_url != None %}
+
+ ReversingLabs dynamic analysis for URL
+ {{data.requested_sha1_url}} |
+
+ {% endif %}
+ {% if data.requested_base64_url != None %}
+
+ ReversingLabs dynamic analysis for URL
+ {{data.requested_base64_url}} |
+
+ {% endif %}
+
+
+
+ Classification |
+
+ {{data.report.classification}}
+ |
+
+ {% if data.report.classification_version %}
+
+ Classification version |
+ {{data.report.classification_version}} |
+
+ {% endif %}
+ {% if data.requested_sha1_url != None %}
+
+ Requested SHA1 of url |
+ {{ data.requested_sha1_url }} |
+
+ {% endif %}
+ {% if data.requested_base64_url != None %}
+
+ Requested Base64 of url |
+ {{ data.requested_base64_url }} |
+
+ {% endif %}
+ {% if param.latest == True or param.analysis_id != None%}
+
+ Analysis ID |
+ {{data.report.analysis_id}} |
+
+
+ Analysis time |
+ {{data.report.analysis_time}} |
+
+
+ Analysis duration |
+ {{data.report.analysis_duration}} |
+
+
+ Platform |
+ {{data.report.platform}} |
+
+ {% if data.report.browser %}
+
+ Browser |
+ {{data.report.browser}} |
+
+ {% endif %}
+ {% if data.report.configuration %}
+
+ Configuration |
+ {{data.report.configuration}} |
+
+ {% endif %}
+
+ Risk score |
+ {{data.report.risk_score}} |
+
+ {% else %}
+
+ First Analysis |
+ {{data.report.first_analysis}} |
+
+
+ Last Analysis |
+ {{data.report.last_analysis}} |
+
+
+ Platforms |
+
+ {% for x in data.report.platforms %}
+ {{x}}
+ {% endfor %}
+ |
+
+ {% if data.report.browser %}
+
+ Browser |
+ {{data.report.browser}} |
+
+ {% endif %}
+ {% if data.report.configuration %}
+
+ Configuration |
+ {{data.report.configuration}} |
+
+ {% endif %}
+
+ Risk score |
+ {{data.report.risk_score}} |
+
+ {% endif %}
+ {% if data.report.dropped_files %}
+
+ Dropped files |
+
+
+
+
+ {% for y in data.report.dropped_files %}
+
+ {% endfor %}
+
+ |
+
+
+
+ {% for y in data.report.dropped_files %}
+
+
+
+
+ md5 |
+ {{y.md5}} |
+
+
+ sha1 |
+ {{y.sha1}} |
+
+
+ sha256 |
+ {{y.sha256}} |
+
+
+ file name |
+ {{ y.file_name }} |
+
+ {% if y.file_path %}
+
+ file path |
+ {{ y.file_path }} |
+
+ {% endif %}
+
+ sample type |
+ {{y.sample_type}} |
+
+ {% if y.analysis_ids %}
+ {% for z in y.analysis_ids %}
+
+ Analysis id |
+ {{z.analysis_id}} |
+
+
+ Classification |
+ {{z.classification}} |
+
+ {% endfor %}
+ {% endif %}
+
+ sample classification |
+ {{y.classification}} |
+
+
+
+
+ {% endfor %}
+ |
+
+ {% endif %}
+ {% if data.report.snort_alerts %}
+
+ Snort alerts |
+
+
+
+
+ {% for y in data.report.snort_alerts %}
+
+ {% endfor %}
+
+ |
+
+
+
+ {% for y in data.report.snort_alerts %}
+
+
+
+
+ message |
+ {{ y.message }} |
+
+
+ classification type |
+ {{ y.classification_type }} |
+
+
+ destination ip |
+ {{ y.destination_ip }} |
+
+
+ rule |
+ {{ y.rule }} |
+
+
+
+
+ {% endfor %}
+ |
+
+ {% endif %}
+ {% if data.report.signatures %}
+
+ Signatures |
+
+
+
+
+ {% for y in data.report.signatures %}
+
+ {% endfor %}
+
+ |
+
+
+
+ {% for y in data.report.signatures %}
+
+
+
+
+ signature id |
+ {{y.sig_id}} |
+
+
+ description |
+ {{y.description}} |
+
+
+ risk factor |
+ {{y.risk_factor}} |
+
+ {% if y.analysis_ids %}
+
+ Analysis id |
+ {% for z in y.analysis_ids %}
+ {{ z }} |
+ {% endfor %}
+
+ {% endif %}
+
+
+
+ {% endfor %}
+ |
+
+ {% endif %}
+
+ Network |
+
+ {% if data.report.network.dns %}
+
+
+
+ {% for y in data.report.network.dns %}
+
+ {% endfor %}
+
+ |
+
+
+
+ {% for y in data.report.network.dns %}
+
+
+
+
+ type |
+ {{y.type}} |
+
+
+ value |
+ {{y.value}} |
+
+
+ address |
+ {{y.address}} |
+
+
+ process id |
+ {{y.process_id}} |
+
+ {% if y.analysis_ids %}
+ {% for z in y.analysis_ids %}
+
+ Analysis id |
+ {{ z }} |
+
+ {% endfor %}
+ {% endif %}
+
+
+
+ {% endfor %}
+ |
+
+ {% endif %}
+ {% if data.report.network.tcp %}
+
+
+
+ {% for y in data.report.network.tcp %}
+
+ {% endfor %}
+
+ |
+
+
+
+ {% for y in data.report.network.tcp %}
+
+
+
+
+ process id |
+ {{y.process_id}} |
+
+
+ destination ip |
+ {{y.destination_ip}} |
+
+
+ destination port |
+ {{y.destination_port}} |
+
+ {% if y.analysis_ids %}
+ {% for z in y.analysis_ids %}
+
+ Analysis id |
+ {{ z }} |
+
+ {% endfor %}
+ {% endif %}
+
+
+
+ {% endfor %}
+ |
+
+ {% endif %}
+ {% if data.report.network.udp %}
+
+
+
+ {% for y in data.report.network.udp %}
+
+ {% endfor %}
+
+ |
+
+
+
+ {% for y in data.report.network.udp %}
+
+
+
+
+ process id |
+ {{y.process_id}} |
+
+
+ destination ip |
+ {{y.destination_ip}} |
+
+
+ destination port |
+ {{y.destination_port}} |
+
+ {% if y.analysis_ids %}
+ {% for z in y.analysis_ids %}
+
+ Analysis id |
+ {{ z }} |
+
+ {% endfor %}
+ {% endif %}
+
+
+
+ {% endfor %}
+ |
+
+ {% endif %}
+ {% if data.report.network.url %}
+
+
+
+ {% for y in data.report.network.url %}
+
+ {% endfor %}
+
+ |
+
+
+
+ {% for y in data.report.network.url %}
+
+
+
+
+ url |
+ {{y.url}} |
+
+
+ source |
+ {{y.source}} |
+
+ {% if y.analysis_ids %}
+ {% for z in y.analysis_ids %}
+
+ Analysis id |
+ {{ z }} |
+
+ {% endfor %}
+ {% endif %}
+
+
+
+ {% endfor %}
+ |
+
+ {% endif %}
+ {% if data.report.network.http %}
+
+
+
+ {% for y in data.report.network.http %}
+
+ {% endfor %}
+
+ |
+
+
+
+ {% for y in data.report.network.http %}
+
+
+
+
+ url |
+ {{y.url}} |
+
+
+ method |
+ {{y.method}} |
+
+
+ process id |
+ {{y.process_id}} |
+
+ {% if y.analysis_ids %}
+ {% for z in y.analysis_ids %}
+
+ Analysis id |
+ {{ z }} |
+
+ {% endfor %}
+ {% endif %}
+
+
+
+ {% endfor %}
+ |
+
+ {% endif %}
+ {% if data.report.pcap %}
+
+ Pcap |
+ Download link (Note: This link expires in 60 minutes; refresh or regenerate for a new one after expiry!) |
+
+ {% endif %}
+ {% if data.report.screenshots %}
+
+ Screenshot |
+ Download link (Note: This link expires in 60 minutes; refresh or regenerate for a new one after expiry!) |
+
+ {% endif %}
+ {% if data.report.memory_strings %}
+
+ Memory strings |
+ Download link (Note: This link expires in 60 minutes; refresh or regenerate for a new one after expiry!) |
+
+ {% endif %}
+ {% if data.report.dropped_files_url %}
+
+ Dropped Files URL |
+ Download link (Note: This link expires in 60 minutes; refresh or regenerate for a new one after expiry!) |
+
+ {% endif %}
+
+
+
+ {% endif %}
+
+{% endblock %}
diff --git a/views/reversinglabs_ticloudv2_file_analysis.html b/views/reversinglabs_ticloudv2_file_analysis.html
index dd69e2e..6887cfb 100644
--- a/views/reversinglabs_ticloudv2_file_analysis.html
+++ b/views/reversinglabs_ticloudv2_file_analysis.html
@@ -1,3 +1,9 @@
+{% extends 'widgets/widget_template.html' %}
+{% load custom_template %}
+{% block custom_title_prop %}{% if title_logo %}style="background-size: auto 60%; background-position: 50%;
+background-repeat: no-repeat; background-image: url('/app_resource/{{ title_logo }}');"{% endif %}{% endblock %}
+{% block widget_content %}
+
-{% extends 'widgets/widget_template.html' %}
-{% load custom_template %}
-{% block custom_title_prop %}{% if title_logo %}style="background-size: auto 60%; background-position: 50%;
-background-repeat: no-repeat; background-image: url('/app_resource/{{ title_logo }}');"{% endif %}{% endblock %}
-{% block widget_content %}
-
+
+
+
{% for x in data %}
diff --git a/views/reversinglabs_ticloudv2_submit_for_dynamic.html b/views/reversinglabs_ticloudv2_submit_for_dynamic.html
index bdad243..ebcc7f0 100644
--- a/views/reversinglabs_ticloudv2_submit_for_dynamic.html
+++ b/views/reversinglabs_ticloudv2_submit_for_dynamic.html
@@ -1,3 +1,9 @@
+{% extends 'widgets/widget_template.html' %}
+{% load custom_template %}
+{% block custom_title_prop %}{% if title_logo %}style="background-size: auto 60%; background-position: 50%;
+background-repeat: no-repeat; background-image: url('/app_resource/{{ title_logo }}');"{% endif %}{% endblock %}
+{% block widget_content %}
+
-{% extends 'widgets/widget_template.html' %}
-{% load custom_template %}
-{% block custom_title_prop %}{% if title_logo %}style="background-size: auto 60%; background-position: 50%;
-background-repeat: no-repeat; background-image: url('/app_resource/{{ title_logo }}');"{% endif %}{% endblock %}
-{% block widget_content %}
+
+{% if data == None %}
+ There is no Usage reports for requested user in the response JSON.
+{% else %}
+
+
+ ReversingLabs API Usage report |
+
+
+
+ {% for report in data %}
+
+ Usage report for {{report.date}} |
+
+ {% for item in report.usage_report %}
+
+ Product |
+ {{item.product}} |
+
+
+ Number of queries |
+ {{item.number_of_queries}} |
+
+ {% if item.used_bytes != None %}
+
+ Used bytes |
+ {{item.used_bytes}} |
+
+ {% endif %}
+ {% endfor %}
+
+ |
+
+ {% endfor %}
+
+
+{% endif %}
+
+{% endblock %}
diff --git a/views/reversinglabs_ticloudv2_customer_monthrange_usage.html b/views/reversinglabs_ticloudv2_customer_monthrange_usage.html
new file mode 100644
index 0000000..e56f143
--- /dev/null
+++ b/views/reversinglabs_ticloudv2_customer_monthrange_usage.html
@@ -0,0 +1,118 @@
+{% extends 'widgets/widget_template.html' %}
+{% load custom_template %}
+{% block custom_title_prop %}{% if title_logo %}style="background-size: auto 60%; background-position: 50%;
+background-repeat: no-repeat; background-image: url('/app_resource/{{ title_logo }}');"{% endif %}{% endblock %}
+{% block widget_content %}
+
+
+
+
+
+{% if data == None %}
+ There is no Usage reports for requested user in the response JSON.
+{% else %}
+
+
+ ReversingLabs API Usage report |
+
+
+
+ {% for report in data %}
+
+ Usage report for {{report.month}} |
+
+ {% for item in report.usage_report %}
+
+ Product |
+ {{item.product}} |
+
+
+ Number of queries |
+ {{item.number_of_queries}} |
+
+ {% if item.used_bytes != None %}
+
+ Used bytes |
+ {{item.used_bytes}} |
+
+ {% endif %}
+ {% endfor %}
+
+ |
+
+ {% endfor %}
+
+
+{% endif %}
+
+{% endblock %}
diff --git a/views/reversinglabs_ticloudv2_domain_downloaded_files.html b/views/reversinglabs_ticloudv2_domain_downloaded_files.html
new file mode 100644
index 0000000..d6d040c
--- /dev/null
+++ b/views/reversinglabs_ticloudv2_domain_downloaded_files.html
@@ -0,0 +1,213 @@
+{% extends 'widgets/widget_template.html' %}
+{% load custom_template %}
+{% block custom_title_prop %}{% if title_logo %}style="background-size: auto 60%; background-position: 50%;
+background-repeat: no-repeat; background-image: url('/app_resource/{{ title_logo }}');"{% endif %}{% endblock %}
+{% block widget_content %}
+
+
+
+
+
+
+ {% if data.report_base == None %}
+ There is no report object in the response JSON.
+ {% else %}
+
+
+
+ TitaniumCloud Downloaded files for requested domain
+
+ |
+
+
+
+ {% if data.report_base.downloaded_files %}
+ Downloaded files |
+ {% for item in data.report_base.downloaded_files %}
+
+ md5 |
+ {{item.md5}} |
+
+
+ sha1 |
+ {{item.sha1}} |
+
+
+ sha256 |
+ {{item.sha256}} |
+
+
+ First Seen |
+ {{item.first_seen}} |
+
+
+ Last Seen |
+ {{item.last_seen}} |
+
+
+ Sample size |
+ {{item.sample_size}} |
+
+
+ Sample Type |
+ {{item.sample_type}} |
+
+
+ Classification |
+ {{item.classification}} |
+
+ {% if item.threat_level %}
+
+ Threat Level |
+ {{item.threat_level}} |
+
+ {% endif %}
+ {% if item.trust_factor %}
+
+ Trust Factor |
+ {{item.trust_factor}} |
+
+ {% endif %}
+ {% if item.threat_name %}
+
+ Threat Name |
+ {{item.threat_name}} |
+
+ {% endif %}
+ {% if item.malware_type %}
+
+ Malware Type |
+ {{item.malware_type}} |
+
+ {% endif %}
+ {% if item.malware_family %}
+
+ Malware Family |
+ {{item.malware_family}} |
+
+ {% endif %}
+ {% if item.platform %}
+
+ Platform |
+ {{item.platform}} |
+
+ {% endif %}
+ {% if item.subplatform %}
+
+ Subplatform |
+ {{item.subplatform}} |
+
+ {% endif %}
+
+ First Download |
+ {{item.first_download}} |
+
+
+ Last Download |
+ {{item.last_download}} |
+
+
+ Last Download Url |
+ {{item.last_download_url}} |
+
+
+ Sample Available |
+ {{item.sample_available}} |
+
+ | |
+ {% endfor %}
+ {% endif %}
+
+
+ {% endif %}
+
+{% endblock %}
diff --git a/views/reversinglabs_ticloudv2_domain_report.html b/views/reversinglabs_ticloudv2_domain_report.html
new file mode 100644
index 0000000..9d3c00d
--- /dev/null
+++ b/views/reversinglabs_ticloudv2_domain_report.html
@@ -0,0 +1,292 @@
+{% extends 'widgets/widget_template.html' %}
+{% load custom_template %}
+{% block custom_title_prop %}{% if title_logo %}style="background-size: auto 60%; background-position: 50%;
+background-repeat: no-repeat; background-image: url('/app_resource/{{ title_logo }}');"{% endif %}{% endblock %}
+{% block widget_content %}
+
+
+
+
+
+
+
+
+ {% if data.report_base == None %}
+ There is no report object in the response JSON.
+ {% else %}
+
+
+
+
+
+ TitaniumCloud Get Domain Report for
+
+ |
+
+
+
+
+ Last Seen |
+ {{data.report_base.last_seen}} |
+
+
+ Modified time |
+ {{data.report_base.modified_time}} |
+
+
+ Last DNS records time |
+ {{data.report_base.last_dns_records_time}} |
+
+ {% if data.report_base.top_threats %}
+ Top Threats List |
+ {% for item in data.report_base.top_threats %}
+
+ Threat name |
+ {{item.threat_name}} |
+
+
+ Threat level |
+ {{item.threat_level}} |
+
+
+ Files count |
+ {{item.files_count}} |
+
+ {% endfor %}
+ {% endif %}
+ {% if data.report_base.last_dns_records != None %}
+ Last DNS Records |
+ {% for item in data.report_base.last_dns_records %}
+
+ Type |
+ {{item.type}} |
+
+
+ Value |
+ {{item.value}} |
+
+
+ Provider |
+ {{item.provider}} |
+
+ {% endfor %}
+ {% endif %}
+ {% if data.report_base.third_party_reputations.statistics != None %}
+ Third Party Reputations Statistics |
+
+ Total |
+ {{data.report_base.third_party_reputations.statistics.total}} |
+
+
+ Clean |
+ {{data.report_base.third_party_reputations.statistics.clean}} |
+
+
+ Malicious |
+ {{data.report_base.third_party_reputations.statistics.malicious}} |
+
+
+ Undetected |
+ {{data.report_base.third_party_reputations.statistics.undetected}} |
+
+ {% endif %}
+ {% if data.report_base.third_party_reputations.sources != None %}
+ Third Party Reputation Sources |
+ {% for item in data.report_base.third_party_reputations.sources %}
+
+ Source |
+ {{item.source}} |
+
+
+ Detection |
+ {{item.detection}} |
+
+
+ Update Time |
+ {{item.update_time}} |
+
+ {% endfor %}
+ {% endif %}
+
+
+ {% endif %}
+
+
+
+{% endblock %}
diff --git a/views/reversinglabs_ticloudv2_dynamic_analysis_results.html b/views/reversinglabs_ticloudv2_dynamic_analysis_results.html
index 1df1e70..11ce6bc 100644
--- a/views/reversinglabs_ticloudv2_dynamic_analysis_results.html
+++ b/views/reversinglabs_ticloudv2_dynamic_analysis_results.html
@@ -17,7 +17,7 @@
-->
+
+
+
{% if data.malware_presence == None %}
There is no malware_presence object in the response JSON.
{% else %}
-
-
-
- ReversingLabs TitaniumCloud File Reputation for
- {{data.malware_presence.sha1}}
- |
-
-
-
-
- Classification |
-
- {{data.malware_presence.status}}
- |
-
-
- Classification reason: |
- {{data.malware_presence.reason}} |
-
-
- First seen |
- {{data.malware_presence.first_seen}} |
-
-
- Last seen |
- {{data.malware_presence.last_seen}} |
-
-
- AV scanner hits / total number of scanners |
- {{data.malware_presence.scanner_match}} / {{data.malware_presence.scanner_count}} |
-
-
- AV scanner hit percentage |
- {{data.malware_presence.scanner_percent}} |
-
-
- MD5 hash |
- {{data.malware_presence.md5}} |
-
-
- SHA-1 hash |
- {{data.malware_presence.sha1}} |
-
-
- SHA-256 hash |
- {{data.malware_presence.sha256}} |
-
- {% if data.malware_presence.status in "MALICIOUS,SUSPICIOUS" %}
-
- Threat name |
- {{data.malware_presence.threat_name}} |
-
-
- Threat level |
- {{data.malware_presence.threat_level}} |
-
- {% elif data.malware_presence.status == "KNOWN" %}
-
- Trust factor |
- {{data.malware_presence.trust_factor}} |
-
- {% endif %}
-
- Classification reason |
- {{data.malware_presence.reason}} |
-
-
- {% endif %}
+
+
+
+
+ ReversingLabs TitaniumCloud File Reputation for
+ {{data.malware_presence.sha1}}
+ |
+
+
+
+
+ Classification |
+
+ {{data.malware_presence.status}}
+ |
+
+
+ Classification reason: |
+ {{data.malware_presence.reason}} |
+
+
+ First seen |
+ {{data.malware_presence.first_seen}} |
+
+
+ Last seen |
+ {{data.malware_presence.last_seen}} |
+
+
+ AV scanner hits / total number of scanners |
+ {{data.malware_presence.scanner_match}} / {{data.malware_presence.scanner_count}} |
+
+
+ AV scanner hit percentage |
+ {{data.malware_presence.scanner_percent}} |
+
+
+ MD5 hash |
+ {{ data.malware_presence.md5 }} |
+
+
+ SHA-1 hash |
+ {{ data.malware_presence.sha1 }} |
+
+
+ SHA-256 hash |
+ {{ data.malware_presence.sha256 }} |
+
+ {% if data.malware_presence.status in "MALICIOUS,SUSPICIOUS" %}
+
+ Threat name |
+ {{data.malware_presence.threat_name}} |
+
+
+ Threat level |
+ {{data.malware_presence.threat_level}} |
+
+ {% elif data.malware_presence.status == "KNOWN" %}
+
+ Trust factor |
+ {{data.malware_presence.trust_factor}} |
+
+ {% endif %}
+
+ Classification reason |
+ {{data.malware_presence.reason}} |
+
+
+ {% endif %}
+
+
+
+
{% endblock %}
diff --git a/views/reversinglabs_ticloudv2_file_reputation_user_overrides.html b/views/reversinglabs_ticloudv2_file_reputation_user_overrides.html
new file mode 100644
index 0000000..b4f7021
--- /dev/null
+++ b/views/reversinglabs_ticloudv2_file_reputation_user_overrides.html
@@ -0,0 +1,204 @@
+{% extends 'widgets/widget_template.html' %}
+{% load custom_template %}
+{% block custom_title_prop %}{% if title_logo %}style="background-size: auto 60%; background-position: 50%;
+background-repeat: no-repeat; background-image: url('/app_resource/{{ title_logo }}');"{% endif %}{% endblock %}
+{% block widget_content %}
+
+
+
+
+
+ {% if data.user_override == None %}
+ There is no File reputation user override object in the response JSON.
+ {% else %}
+
+
+ File reputation user overrides |
+
+
+
+ {% for over in data.user_override.create_override %}
+
+ Created user overrides |
+
+
+ SHA1 |
+ {{over.sha1}} |
+
+
+ MD5 |
+ {{over.md5}} |
+
+
+ SHA256 |
+ {{over.sha256}} |
+
+
+ Status |
+ {{over.status}} |
+
+ {% if over.status == "KNOWN" %}
+
+ Trust Factor |
+ {{over.trust_factor}} |
+
+ {% endif %}
+ {% if over.status != "KNOWN" %}
+
+ Threat Level |
+ {{over.threat_level}} |
+
+
+ Threat Name |
+ {{over.threat_name}} |
+
+ {% endif %}
+ {% endfor %}
+
+ {% for over in data.user_override.replace_override %}
+
+ Replaced user overrides |
+
+
+ SHA1 |
+ {{over.sha1}} |
+
+
+ MD5 |
+ {{over.md5}} |
+
+
+ SHA256 |
+ {{over.sha256}} |
+
+
+ Status |
+ {{over.status}} |
+
+ {% if over.status == "KNOWN" %}
+
+ Trust Factor |
+ {{over.trust_factor}} |
+
+ {% endif %}
+ {% if over.status != "KNOWN" %}
+
+ Threat Level |
+ {{over.threat_level}} |
+
+
+ Threat Name |
+ {{over.threat_name}} |
+
+ {% endif %}
+ {% endfor %}
+
+ {% for over in data.user_override.remove_override %}
+
+ Removed user overrides |
+
+
+ SHA1 |
+ {{over.sha1}} |
+
+
+ MD5 |
+ {{over.md5}} |
+
+
+ SHA256 |
+ {{over.sha256}} |
+
+
+ Status |
+ {{over.status}} |
+
+ {% if over.status == "KNOWN" %}
+
+ Trust Factor |
+ {{over.trust_factor}} |
+
+ {% endif %}
+ {% if over.status != "KNOWN" %}
+
+ Threat Level |
+ {{over.threat_level}} |
+
+
+ Threat Name |
+ {{over.threat_name}} |
+
+ {% endif %}
+ {% endfor %}
+
+
+ {% endif %}
+
+{% endblock %}
diff --git a/views/reversinglabs_ticloudv2_functional_similarity.html b/views/reversinglabs_ticloudv2_functional_similarity.html
index bda0923..0dd972b 100644
--- a/views/reversinglabs_ticloudv2_functional_similarity.html
+++ b/views/reversinglabs_ticloudv2_functional_similarity.html
@@ -17,7 +17,7 @@
-->
-
-
-
- ReversingLabs RHA1 Functional Similarity for
- {{param.hash}}
- {{results_found}}
- |
-
-
- |
- SHA1 |
- Sample type |
- Threat name |
- Threat level |
- Trust factor |
- Classification |
-
-
-
- {% for x in data %}
-
- {{ forloop.counter}}. |
- {{ x.sha1}} |
- {{ x.sample_type }} |
- {{ x.threat_name }} |
- {{ x.threat_level }} |
- {{ x.trust_factor }} |
-
- {{ x.classification }}
- |
-
- {% endfor %}
-
-
-
+
+
+
+ ReversingLabs RHA1 Functional Similarity for
+
+ {{results_found}}
+ |
+
+
+ |
+ SHA1 |
+ Sample type |
+ Threat name |
+ Threat level |
+ Trust factor |
+ Classification |
+
+
+
+ {% for x in data %}
+
+ {{ forloop.counter}}. |
+ {{ x.sha1}} |
+ {{ x.sample_type }} |
+ {{ x.threat_name }} |
+ {{ x.threat_level }} |
+ {{ x.trust_factor }} |
+
+ {{ x.classification }}
+ |
+
+ {% endfor %}
+
+
{% endblock %}
diff --git a/views/reversinglabs_ticloudv2_imphash_similarity.html b/views/reversinglabs_ticloudv2_imphash_similarity.html
index 27f5ef1..f0eee4f 100644
--- a/views/reversinglabs_ticloudv2_imphash_similarity.html
+++ b/views/reversinglabs_ticloudv2_imphash_similarity.html
@@ -17,7 +17,7 @@
-->
-
-
-
-
- ReversingLabs Imphash Similarity for
- {{param.uri}}
- {{results_found}}
- |
-
-
- SHA1 |
-
-
-
- {% for x in data %}
-
- {{ forloop.counter}}. |
- {{ x }} |
-
- {% endfor %}
+
+
+
+
+ ReversingLabs Imphash Similarity for
+
+ {{results_found}}
+ |
+
+
+ SHA1 |
+
+
+
+ {% for x in data %}
+
+ {{ forloop.counter}}. |
+ {{ x }} |
+
+ {% endfor %}
-
-
+
+
{% endblock %}
diff --git a/views/reversinglabs_ticloudv2_ip_downloaded_files.html b/views/reversinglabs_ticloudv2_ip_downloaded_files.html
new file mode 100644
index 0000000..7342135
--- /dev/null
+++ b/views/reversinglabs_ticloudv2_ip_downloaded_files.html
@@ -0,0 +1,213 @@
+{% extends 'widgets/widget_template.html' %}
+{% load custom_template %}
+{% block custom_title_prop %}{% if title_logo %}style="background-size: auto 60%; background-position: 50%;
+background-repeat: no-repeat; background-image: url('/app_resource/{{ title_logo }}');"{% endif %}{% endblock %}
+{% block widget_content %}
+
+
+
+
+
+
+ {% if data.report_base == None %}
+ There is no report object in the response JSON.
+ {% else %}
+
+
+
+ TitaniumCloud Downloaded files for requested IP address
+
+ |
+
+
+
+ {% if data.report_base.downloaded_files %}
+ Downloaded files |
+ {% for item in data.report_base.downloaded_files %}
+
+ md5 |
+ {{item.md5}} |
+
+
+ sha1 |
+ {{item.sha1}} |
+
+
+ sha256 |
+ {{item.sha256}} |
+
+
+ First Seen |
+ {{item.first_seen}} |
+
+
+ Last Seen |
+ {{item.last_seen}} |
+
+
+ Sample size |
+ {{item.sample_size}} |
+
+
+ Sample Type |
+ {{item.sample_type}} |
+
+
+ Classification |
+ {{item.classification}} |
+
+ {% if item.threat_level %}
+
+ Threat Level |
+ {{item.threat_level}} |
+
+ {% endif %}
+ {% if item.trust_factor %}
+
+ Trust Factor |
+ {{item.trust_factor}} |
+
+ {% endif %}
+ {% if item.threat_name %}
+
+ Threat Name |
+ {{item.threat_name}} |
+
+ {% endif %}
+ {% if item.malware_type %}
+
+ Malware Type |
+ {{item.malware_type}} |
+
+ {% endif %}
+ {% if item.malware_family %}
+
+ Malware Family |
+ {{item.malware_family}} |
+
+ {% endif %}
+ {% if item.platform %}
+
+ Platform |
+ {{item.platform}} |
+
+ {% endif %}
+ {% if item.subplatform %}
+
+ Subplatform |
+ {{item.subplatform}} |
+
+ {% endif %}
+
+ First Download |
+ {{item.first_download}} |
+
+
+ Last Download |
+ {{item.last_download}} |
+
+
+ Last Download Url |
+ {{item.last_download_url}} |
+
+
+ Sample Available |
+ {{item.sample_available}} |
+
+ | |
+ {% endfor %}
+ {% endif %}
+
+
+ {% endif %}
+
+{% endblock %}
diff --git a/views/reversinglabs_ticloudv2_ip_report.html b/views/reversinglabs_ticloudv2_ip_report.html
new file mode 100644
index 0000000..f68bd4a
--- /dev/null
+++ b/views/reversinglabs_ticloudv2_ip_report.html
@@ -0,0 +1,291 @@
+{% extends 'widgets/widget_template.html' %}
+{% load custom_template %}
+{% block custom_title_prop %}{% if title_logo %}style="background-size: auto 60%; background-position: 50%;
+background-repeat: no-repeat; background-image: url('/app_resource/{{ title_logo }}');"{% endif %}{% endblock %}
+{% block widget_content %}
+
+
+
+
+
+
+
+
+ {% if data.report_base == None %}
+ There is no report object in the response JSON.
+ {% else %}
+
+
+
+
+
+ TitaniumCloud Get IP Report for
+
+ |
+
+
+
+
+ Last Seen |
+ {{data.report_base.last_seen}} |
+
+
+ Modified time |
+ {{data.report_base.modified_time}} |
+
+ {% if data.report_base.top_threats %}
+ Top Threats List |
+ {% for item in data.report_base.top_threats %}
+
+ Threat name |
+ {{item.threat_name}} |
+
+
+ Threat level |
+ {{item.threat_level}} |
+
+
+ Files count |
+ {{item.files_count}} |
+
+ {% endfor %}
+ {% endif %}
+ {% if data.report_base.downloaded_files_statistics != None %}
+ Downloaded Files Statistics |
+
+ Total |
+ {{data.report_base.downloaded_files_statistics.total}} |
+
+
+ Known |
+ {{data.report_base.downloaded_files_statistics.known}} |
+
+
+ Malicious |
+ {{data.report_base.downloaded_files_statistics.malicious}} |
+
+
+ Unknown |
+ {{data.report_base.downloaded_files_statistics.unknown}} |
+
+
+ Suspicious |
+ {{data.report_base.downloaded_files_statistics.suspicious}} |
+
+ {% endif %}
+ {% if data.report_base.third_party_reputations.statistics != None %}
+ Third Party Reputations Statistics |
+
+ Total |
+ {{data.report_base.third_party_reputations.statistics.total}} |
+
+
+ Clean |
+ {{data.report_base.third_party_reputations.statistics.clean}} |
+
+
+ Malicious |
+ {{data.report_base.third_party_reputations.statistics.malicious}} |
+
+
+ Undetected |
+ {{data.report_base.third_party_reputations.statistics.undetected}} |
+
+ {% endif %}
+ {% if data.report_base.third_party_reputations.sources != None %}
+ Third Party Reputation Sources |
+ {% for item in data.report_base.third_party_reputations.sources %}
+
+ Source |
+ {{item.source}} |
+
+
+ Detection |
+ {{item.detection}} |
+
+
+ Update Time |
+ {{item.update_time}} |
+
+ {% endfor %}
+ {% endif %}
+
+
+ {% endif %}
+
+
+
+{% endblock %}
diff --git a/views/reversinglabs_ticloudv2_list_active_file_user_overrides.html b/views/reversinglabs_ticloudv2_list_active_file_user_overrides.html
new file mode 100644
index 0000000..4354569
--- /dev/null
+++ b/views/reversinglabs_ticloudv2_list_active_file_user_overrides.html
@@ -0,0 +1,106 @@
+{% extends 'widgets/widget_template.html' %}
+{% load custom_template %}
+{% block custom_title_prop %}{% if title_logo %}style="background-size: auto 60%; background-position: 50%;
+background-repeat: no-repeat; background-image: url('/app_resource/{{ title_logo }}');"{% endif %}{% endblock %}
+{% block widget_content %}
+
+
+
+
+
+
+
+
+
+ ReversingLabs Active File Reputation User Overrides
+ {{results_found}}
+ |
+
+
+ SHA1 |
+
+
+
+ {% for x in data %}
+
+ {{ forloop.counter }}. |
+ {{ x }} |
+
+ {% endfor %}
+
+
+
+
+{% endblock %}
diff --git a/views/reversinglabs_ticloudv2_network_reputation_user_override_view.html b/views/reversinglabs_ticloudv2_network_reputation_user_override_view.html
index 39d21dc..fb7786c 100644
--- a/views/reversinglabs_ticloudv2_network_reputation_user_override_view.html
+++ b/views/reversinglabs_ticloudv2_network_reputation_user_override_view.html
@@ -17,7 +17,7 @@
-->
+
- {% if data.user_override == None %}
- There is no network location object in the response JSON.
- {% else %}
-
-
-
-
- {% for over in data.user_override.created_overrides %}
-
- Network reputation user override |
-
-
- Network location |
- {{over.network_location}} |
-
-
- Type |
- {{over.type}} |
-
-
- Classification |
- {{over.classification}} |
-
-
- Categories |
- {{over.categories}} |
-
-
- Reason |
- {{over.reason}} |
-
-
- {% endfor %}
-
- {% endif %}
+{% if data.user_override == None %}
+ There is no network location object in the response JSON.
+{% else %}
+
+
+ Network reputation user overrides |
+
+
+
+ {% for over in data.user_override.created_overrides %}
+
+ Created user overrides |
+
+
+ Network location |
+ {{ over.network_location }} |
+
+
+ Type |
+ {{over.type}} |
+
+
+ Classification |
+ {{over.classification}} |
+
+
+ Categories |
+ {{over.categories}} |
+
+
+ Reason |
+ {{over.reason}} |
+
+ {% endfor %}
+
+ {% for over in data.user_override.removed_overrides %}
+
+ Removed user overrides |
+
+
+ Network location |
+ {{ over.network_location }} |
+
+
+ Type |
+ {{over.type}} |
+
+ {% endfor %}
+
+
+{% endif %}
{% endblock %}
diff --git a/views/reversinglabs_ticloudv2_network_reputation_view.html b/views/reversinglabs_ticloudv2_network_reputation_view.html
index 970f994..a4bd1d6 100644
--- a/views/reversinglabs_ticloudv2_network_reputation_view.html
+++ b/views/reversinglabs_ticloudv2_network_reputation_view.html
@@ -17,7 +17,7 @@
-->
-
-
-
-
-
- ReversingLabs URI Index for
- {{param.uri}}
- {{results_found}}
- |
-
-
- SHA1 |
-
-
-
- {% for x in data %}
-
- {{ forloop.counter}}. |
- {{ x }} |
-
- {% endfor %}
-
-
+
+
+
+
+
+ ReversingLabs URI Index for
+
+ {{results_found}}
+ |
+
+
+ List of available SHA1 hashes associated with the requested URI |
+
+
+
+ {% for x in data %}
+
+ {{ forloop.counter}}. |
+ {{ x }} |
+
+ {% endfor %}
+
+
{% endblock %}
diff --git a/views/reversinglabs_ticloudv2_uri_statistics.html b/views/reversinglabs_ticloudv2_uri_statistics.html
index 24334fe..96d07ff 100644
--- a/views/reversinglabs_ticloudv2_uri_statistics.html
+++ b/views/reversinglabs_ticloudv2_uri_statistics.html
@@ -17,7 +17,7 @@
-->
- {% if data.uri_state == None %}
+ {% if data.uri_state == None %}
There is no uri_state object in the response JSON.
- {% else %}
-
-
-
- ReversingLabs URI Statistics results for
- {{data.uri}} |
-
-
- SHA-1 |
- {{data.uri_state.sha1}} |
-
-
- URI type |
- {{data.uri_type}} |
-
-
- {{data.uri_type}} |
- {{data.uri}} |
-
-
- Sample counters
- |
-
-
-
-
-
- KNOWN
- |
- {{data.uri_state.counters.known}} |
-
-
-
- MALICIOUS
- |
- {{data.uri_state.counters.malicious}} |
-
-
-
- SUSPICIOUS
- |
- {{data.uri_state.counters.suspicious}} |
-
-
-
- {% endif %}
+ {% else %}
+
+
+
+ ReversingLabs URI Statistics results for
+
+ |
+
+
+ SHA-1 |
+ {{ data.uri_state.sha1 }} |
+
+
+ URI type |
+ {{data.uri_type}} |
+
+
+ {{data.uri_type}} |
+ {{ data.uri }} |
+
+
+ Sample counters
+ |
+
+
+
+
+ KNOWN
+ |
+ {{data.uri_state.counters.known}} |
+
+
+
+ MALICIOUS
+ |
+ {{data.uri_state.counters.malicious}} |
+
+
+
+ SUSPICIOUS
+ |
+ {{data.uri_state.counters.suspicious}} |
+
+
+
+ {% endif %}
{% endblock %}
diff --git a/views/reversinglabs_ticloudv2_url_analysis_feed.html b/views/reversinglabs_ticloudv2_url_analysis_feed.html
index fd682b8..becb975 100644
--- a/views/reversinglabs_ticloudv2_url_analysis_feed.html
+++ b/views/reversinglabs_ticloudv2_url_analysis_feed.html
@@ -17,7 +17,7 @@
-->
-
-
-
- ReversingLabs TitaniumCLoud Url Analysis Feed
- {% if param.time_format != None %}
- {{param.time_format}}: {{param.start_time}}
- {% endif %}
- Results found: {{data|length}}
- |
-
- |
- Url |
- Analysis id |
- Analysis time |
- Availability status |
-
-
-
- {% for x in data %}
-
- {{ forloop.counter}}. |
- {{ x.url}} |
- {{ x.analysis_id }} |
- {{ x.analysis_time }} |
- {{ x.availability_status }} |
-
- {% endfor %}
-
-
-
+
+
+
+ ReversingLabs TitaniumCLoud Url Analysis Feed
+ {% if param.time_format != None %}
+ {{param.time_format}}: {{param.start_time}}
+ {% endif %}
+ Results found: {{data|length}}
+ |
+
+
+ |
+ Url |
+ Analysis id |
+ Analysis time |
+ Availability status |
+
+
+
+ {% for x in data %}
+
+ {{ forloop.counter }}. |
+ {{ x.url }} |
+ {{ x.analysis_id }} |
+ {{ x.analysis_time }} |
+ {{ x.availability_status }} |
+
+ {% endfor %}
+
+
{% endblock %}
diff --git a/views/reversinglabs_ticloudv2_url_downloaded_files.html b/views/reversinglabs_ticloudv2_url_downloaded_files.html
index 326e3f1..2df8952 100644
--- a/views/reversinglabs_ticloudv2_url_downloaded_files.html
+++ b/views/reversinglabs_ticloudv2_url_downloaded_files.html
@@ -17,7 +17,7 @@
-->
-
-
-
- ReversingLabs TitaniumCloud Downloaded Files From Url
- {{param.url}}
- Results found: {{data|length}}
- |
-
- |
- SHA1 |
- Sample type |
- Threat name |
- Malware type |
- Threat level |
- Trust factor |
- Classification |
-
-
-
- {% for x in data %}
-
- {{ forloop.counter}}. |
- {{ x.sha1}} |
- {{ x.sample_type }} |
- {{ x.threat_name }} |
- {{ x.malware_type }} |
- {{ x.threat_level }} |
- {{ x.trust_factor }} |
-
- {{ x.classification }}
- |
-
- {% endfor %}
-
-
-
+
+
+
+ ReversingLabs TitaniumCloud Downloaded Files From Url
+
+ Results found: {{data|length}}
+ |
+
+
+ |
+ SHA1 |
+ Sample type |
+ Threat name |
+ Malware type |
+ Threat level |
+ Trust factor |
+ Classification |
+
+
+
+ {% for x in data %}
+
+ {{ forloop.counter }}. |
+ {{ x.sha1 }} |
+ {{ x.sample_type }} |
+ {{ x.threat_name }} |
+ {{ x.malware_type }} |
+ {{ x.threat_level }} |
+ {{ x.trust_factor }} |
+
+ {{ x.classification }}
+ |
+
+ {% endfor %}
+
+
{% endblock %}
diff --git a/views/reversinglabs_ticloudv2_url_reputation.html b/views/reversinglabs_ticloudv2_url_reputation.html
index bc25ee0..71c1faf 100644
--- a/views/reversinglabs_ticloudv2_url_reputation.html
+++ b/views/reversinglabs_ticloudv2_url_reputation.html
@@ -17,7 +17,7 @@
-->
+
+
+
{% if data.report_base == None %}
There is no rl object in the response JSON.
{% else %}
+
+
+
ReversingLabs URL Threat Intelligence for
- {{data.report_base.requested_url}}
+
|
@@ -87,6 +123,22 @@
{{data.classification}}
+
+ Sha1 |
+ {{data.report_base.sha1}} |
+
+
+ base64 |
+ {{data.report_base.base64}} |
+
+
+ Reason |
+ {{data.report_base.reason}} |
+
+
+ Last Seen |
+ {{data.report_base.last_seen}} |
+
{% if data.report_base.analysis != None %}
First analysis |
@@ -97,6 +149,39 @@
{{data.report_base.analysis.analysis_count}} |
+
+
+ Statistics |
+
+
+
+
+
+ KNOWN
+ |
+ {{data.report_base.analysis.statistics.known}} |
+
+
+
+ SUSPICIOUS
+ |
+ {{data.report_base.analysis.statistics.suspicious}} |
+
+
+
+ MALICIOUS
+ |
+ {{data.report_base.analysis.statistics.malicious}} |
+
+
+ UNKNOWN |
+ {{data.report_base.analysis.statistics.unknown}} |
+
+
+ TOTAL |
+ {{data.report_base.analysis.statistics.total}} |
+
+
Last analysis |
@@ -119,54 +204,270 @@
Availability status |
{{data.report_base.analysis.last_analysis.availability_status}} |
+
+ HTTP Response Code |
+ {{data.report_base.analysis.last_analysis.http_response_code}} |
+
Domain |
- {{data.report_base.analysis.last_analysis.domain}} |
+ {{data.report_base.analysis.last_analysis.domain}} |
Serving IP Address |
- {{data.report_base.analysis.last_analysis.serving_ip_address}} |
+ {{data.report_base.analysis.last_analysis.serving_ip_address}} |
- Statistics |
+ Analysis history |
+ {% for item in data.report_base.analysis.analysis_history %}
-
- KNOWN
- |
- {{data.report_base.analysis.statistics.known}} |
+ Analysis #{{ forloop.counter }} |
-
- SUSPICIOUS
- |
- {{data.report_base.analysis.statistics.suspicious}} |
+ Domain |
+ {{item.domain}} |
-
- MALICIOUS
- |
- {{data.report_base.analysis.statistics.malicious}} |
+ Analysis ID |
+ {{item.analysis_id}} |
- UNKNOWN |
- {{data.report_base.analysis.statistics.unknown}} |
+ Analysis time |
+ {{item.analysis_time}} |
- TOTAL |
- {{data.report_base.analysis.statistics.total}} |
+ HTTP Response Code |
+ {{item.http_response_code}} |
+
+
+ Serving IP address |
+ {{item.serving_ip_address}} |
+
+
+ Availability status |
+ {{item.availability_status}} |
+
+
+ |
+ {% endfor %}
+
+
+
+ Latest Dynamic Analysis Result |
+
+
+
+
+ Classification |
+ {{data.report_base.dynamic_analysis.last_analysis.classification}} |
+
+
+ Browser |
+ {{data.report_base.dynamic_analysis.last_analysis.browser}} |
+
+
+ Platform |
+ {{data.report_base.dynamic_analysis.last_analysis.platform}} |
+
+
+ Risk score |
+ {{data.report_base.dynamic_analysis.last_analysis.risk_score}} |
+
+
+ Analysis ID |
+ {{data.report_base.dynamic_analysis.last_analysis.analysis_id}} |
+
+
+ Analysis time |
+ {{data.report_base.dynamic_analysis.last_analysis.analysis_time}} |
+
+
+ |
+
+
+
+
+ Dynamic Analysis history |
+
+
+
+ {% for item in data.report_base.dynamic_analysis.analysis_history %}
+
+ Dynamic Analysis #{{ forloop.counter }} |
+
+
+ Platform |
+ {{item.platform}} |
+
+
+ Risk Score |
+ {{item.risk_score}} |
+
+
+ Analysis ID |
+ {{item.analysis_id}} |
+
+
+ Analysis time |
+ {{item.analysis_time}} |
+
+
+ Classification |
+ {{item.classification}} |
+
+
+ |
+
+ {% endfor %}
+
+
+
+ Third party reputation Statistics |
+
+
+
+
+ Total |
+ {{data.report_base.third_party_reputations.statistics.total}} |
+
+
+ Clean |
+ {{data.report_base.third_party_reputations.statistics.clean}} |
+
+
+ Malicious |
+ {{data.report_base.third_party_reputations.statistics.malicious}} |
+
+
+ Undetected |
+ {{data.report_base.third_party_reputations.statistics.undetected}} |
+
+
+ |
+
+
+
+
+ Third Party Reputation Sources |
+
+
+
+ {% for item in data.report_base.third_party_reputations.sources %}
+
+ Source #{{ forloop.counter }} |
+
+
+ Source |
+ {{item.source}} |
+
+
+ Detection |
+ {{item.detection}} |
+
+
+ Update time |
+ {{item.update_time}} |
+
+
+ |
+
+ {% endfor %}
+
+
+
+ {% endif %}
{% endif %}
+
- {% endif %}
+
-
-
{% endblock %}
diff --git a/wheels/py3/reversinglabs_sdk_py3-2.4.2-py3-none-any.whl b/wheels/py3/reversinglabs_sdk_py3-2.4.2-py3-none-any.whl
deleted file mode 100644
index e85ef933e2f3cd1d398a00238e9afdbd3d26fe98..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 67343
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