Dear team,
- Please find below trendy word(s) that match at least """ + str(words_occurrence) + """ times:
+ Please find the new trendy word(s) detected below:
""" + " ".join(email_words) + """
diff --git a/Watcher/Watcher/common/utils/send_thehive_alerts.py b/Watcher/Watcher/common/utils/send_thehive_alerts.py
index e71fadd..b4ece32 100644
--- a/Watcher/Watcher/common/utils/send_thehive_alerts.py
+++ b/Watcher/Watcher/common/utils/send_thehive_alerts.py
@@ -80,6 +80,11 @@ def send_thehive_alert(title, description, severity, tags, app_name, domain_name
if ticket_id is None:
ticket_id = generate_ref()
+ if app_name == 'website_monitoring' and domain_name:
+ site = Site.objects.get(domain_name=domain_name)
+ site.ticket_id = ticket_id
+ site.save()
+
if app_name == 'website_monitoring' and not ticket_id:
return
diff --git a/Watcher/Watcher/common/utils/update_thehive.py b/Watcher/Watcher/common/utils/update_thehive.py
index 3d4ffff..02ac89c 100644
--- a/Watcher/Watcher/common/utils/update_thehive.py
+++ b/Watcher/Watcher/common/utils/update_thehive.py
@@ -100,12 +100,16 @@ def create_observables(observables):
:return: A list of formatted observables ready for TheHive.
:rtype: list
"""
+
+ current_time = timezone.now().strftime("%H:%M:%S")
+ current_date = timezone.now().strftime("%d/%m/%y")
+
observables_data = []
for obs in observables:
observable_data = {
"dataType": obs['dataType'],
"data": obs['data'],
- "message": f"Observable added: {obs['data']} on {timezone.now()}",
+ "message": f"An observable was added on {current_date} at {current_time}.",
"ioc": True,
"sighted": True,
"tlp": 2
@@ -130,7 +134,6 @@ def update_existing_alert_case(item_type, existing_item, observables, comment, t
if observables:
observables_data = create_observables(observables)
- print(f"{timezone.now()} - Adding observables to {item_type} with ID {item_id}...")
add_observables_to_item(item_type, item_id, observables_data, thehive_url, api_key)
if comment:
@@ -224,10 +227,10 @@ def handle_alert_or_case(ticket_id, observables, comment, title, description, se
case_type, case_item = search_thehive_for_ticket_id(ticket_id, thehive_url, api_key, item_type="case")
if case_item:
- print(f"{timezone.now()} - Case found for {settings.THE_HIVE_CUSTOM_FIELD} {ticket_id}. Updating...")
+ print(f"{timezone.now()} - Case found for {settings.THE_HIVE_CUSTOM_FIELD} {ticket_id}. Proceeding with update.")
update_existing_alert_case("case", case_item, observables, comment, thehive_url, api_key)
elif alert_item:
- print(f"{timezone.now()} - Alert found for {settings.THE_HIVE_CUSTOM_FIELD} {ticket_id}. Updating...")
+ print(f"{timezone.now()} - Alert found for {settings.THE_HIVE_CUSTOM_FIELD} {ticket_id}. Proceeding with update.")
update_existing_alert_case("alert", alert_item, observables, comment, thehive_url, api_key)
else:
create_new_alert(
diff --git a/Watcher/Watcher/dns_finder/core.py b/Watcher/Watcher/dns_finder/core.py
index 4e16eda..c6e0c50 100644
--- a/Watcher/Watcher/dns_finder/core.py
+++ b/Watcher/Watcher/dns_finder/core.py
@@ -22,8 +22,7 @@ def start_scheduler():
- Fire main_certificate_transparency from Monday to Sunday: every hour.
"""
scheduler = BackgroundScheduler(timezone=str(tzlocal.get_localzone()))
- # scheduler.add_job(main_dns_twist, 'cron', day_of_week='mon-sun', hour='*/2', id='main_dns_twist',
- scheduler.add_job(main_dns_twist, 'cron', day_of_week='mon-sun', minute='*/2', id='main_dns_twist',
+ scheduler.add_job(main_dns_twist, 'cron', day_of_week='mon-sun', hour='*/2', id='main_dns_twist',
max_instances=10,
replace_existing=True)
scheduler.add_job(main_certificate_transparency, 'cron', day_of_week='mon-sun', hour='*/1',
diff --git a/Watcher/Watcher/threats_watcher/core.py b/Watcher/Watcher/threats_watcher/core.py
index 8936cd0..7c37a79 100644
--- a/Watcher/Watcher/threats_watcher/core.py
+++ b/Watcher/Watcher/threats_watcher/core.py
@@ -11,9 +11,6 @@
import feedparser
import requests
import re
-from email.mime.multipart import MIMEMultipart
-from email.mime.text import MIMEText
-import smtplib
from django.db import close_old_connections
from common.core import send_app_specific_notifications
from django.db.models import Q
diff --git a/Watcher/Watcher/watcher/settings.py b/Watcher/Watcher/watcher/settings.py
index 859af43..937782e 100755
--- a/Watcher/Watcher/watcher/settings.py
+++ b/Watcher/Watcher/watcher/settings.py
@@ -97,15 +97,13 @@
EMAIL_HOST_USER = os.environ.get('EMAIL_HOST_USER', '')
EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_HOST_PASSWORD', '')
EMAIL_FROM = os.environ.get('EMAIL_FROM', '')
-EMAIL_SUBJECT_TAG_SITE_MONITORING = os.environ.get('EMAIL_SUBJECT_TAG_SITE_MONITORING', 'INCIDENT')
+SUBJECT_TAG_SITE_MONITORING = os.environ.get('SUBJECT_TAG_SITE_MONITORING', 'INCIDENT')
# Display at the end of the email notification
EMAIL_CLASSIFICATION = os.environ.get('EMAIL_CLASSIFICATION', 'Internal')
# Website url, link in e-mails body
-WATCHER_URL = os.environ.get('WATCHER_URL', 'https://cert-watcher.corp.thales/')
+WATCHER_URL = os.environ.get('WATCHER_URL', '')
# Watcher Logo
-WATCHER_LOGO = os.environ.get('WATCHER_LOGO', 'https://raw.githubusercontent.com/thalesgroup-cert/Watcher/master'
- '/Watcher/static/Watcher-logo-simple.png')
-WATCHER_LOGO_BASE64 = "data:image/png;base64,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"
+WATCHER_LOGO = os.environ.get('WATCHER_LOGO', 'data:image/png;base64,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')
GITHUB_LOGO = os.environ.get('GITHUB_LOGO', 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC0AAAAtCAYAAAA6GuKaAAACi0lEQVRYR+2Zy07CQBSGuaooqJGtiZFL2JBuYMMOHgJeB3gdXgJWrugCElYgwbg34i2Iis40KSml7flPaQETZtnO5Zu/f8/MnAkGNii/orhtHhTFdVtuw3K5HGm321/cdnb1K5VKtNPpfHP6g2crRJV1F5zOmXVDQnzoy0HQm9iACR5AbENCbxNYnyAF7gi9C2AE3BZ6l8AUuCX0PgA7ga9B7xOwHfgK9D4CW4EvoZE4rP/V16VS7PHu7oMbzsz18/l8YjAYvMnngGDLOG6EJgO7ORQVCoXTbrf7boa5UZSryPvR4vtsHnro95/M79Pp4uV4rE6NzwHoZQzXoNGlmYqfmyiPQOtLvgaNNJD1dg2tM/xPaFTlfVFa40Ch3WwhuR5HWWBoP/2sT85raHivy1XXXB8Bh5TehsoctQ/Qm1oDXTMOSh+UdlAAsofYQh6LLeTcCyWpPjwLeX4v4Zxwx1rGtxGrEZVZ0H6rjQKzof0C5wBrDGhAN/9AXthFUZSzXq+nnRHRIsd1Da0PIs+DqWTyVWRSf5wSiPLgXKvVQqo6jt/fd59RSCuxyDOi3EejqV0n9bkWsJrUyhmRskiz2QzX6/UfJ3Wy2ezJaDT6tKtTrVbDrVaLlYe2sySU95AKUkohHqf6ICyznveg1KbA/YY29s/J5S1nalRMWqfRaEA3BJlM5nw4HK4kaZAf0iwIK2tK+ZYCcANt9QU9yU/f3lZik0ln5jW0neU8uwlAPM1R2qk/z+5cEOhUqnCBLCxUXyQ0FVV0S1ADyXoINNIPBI3sd5HBCGg4t8KClvBWaWH0ZGO1KhaLxSNVVVk3wGxoY4TI5XKJeDw+4wwqEvHR6XQaE0v+CxVt7N7/AfEDrgGnjDZdAAAAAElFTkSuQmCC')
# Proxy setup
@@ -126,8 +124,6 @@
if THE_HIVE_VERIFY_SSL == "False":
THE_HIVE_VERIFY_SSL = False
THE_HIVE_KEY = os.environ.get('THE_HIVE_KEY', '')
-THE_HIVE_CASE_ASSIGNEE = os.environ.get('THE_HIVE_CASE_ASSIGNEE', 'watcher')
-THE_HIVE_TAGS = os.environ.get('THE_HIVE_TAGS', "Watcher,Impersonation,Malicious Domain,Typosquatting").split(",")
THE_HIVE_CUSTOM_FIELD = os.environ.get('THE_HIVE_CUSTOM_FIELD', 'watcher-id')
THE_HIVE_EMAIL_SENDER = os.environ.get('THE_HIVE_EMAIL_SENDER', 'watcher@watcher.com')
diff --git a/Watcher/requirements.txt b/Watcher/requirements.txt
index 66adf62..23c75f6 100644
--- a/Watcher/requirements.txt
+++ b/Watcher/requirements.txt
@@ -1,23 +1,37 @@
+# Web Framework and Application Enhancements
mysqlclient==2.1.1
-django==5.0.9
-django-mysql==4.13.0
+django==5.0.10
+django-mysql==4.15.0
djangorestframework==3.15.2
django-rest-knox==4.2.0
-apscheduler==3.10.4
-nltk==3.8.1
+whitenoise==6.8.2
+django-auth-ldap==5.1.0
+django-import-export==4.3.3
+
+# Job Scheduling and Task Management
+apscheduler==3.11.0
+
+# Parsing and Text Extraction
feedparser==6.0.11
-docutils==0.20.1
-sphinx==7.3.7
-sphinx-rtd-theme==2.0.0
-myst-parser==3.0.1
-whitenoise==6.6.0
+docutils==0.21.2
+Sphinx==8.1.3
+sphinx-rtd-theme==3.0.2
+myst-parser==4.0.0
+
+# Natural Language Processing and Similarity Checking
+nltk==3.8.1
python-tlsh==4.5.0
+
+# Networking and DNS Utilities
+dnspython==2.7.0
+dnstwist==20240812
+certstream==1.12
+
+# Environment Configuration
ipaddress==1.0.23
-dnspython==2.6.1
+
+# User-Agent Simulation
shadow-useragent==0.0.17
-thehive4py==1.8.1
-pymisp==2.4.190
-django-auth-ldap==4.8.0
-dnstwist==20240116
-django-import-export==4.0.3
-certstream==1.12
+
+# Cybersecurity and Incident Response
+pymisp==2.5.3
diff --git a/docker-compose.yml b/docker-compose.yml
index a1d31b1..1928195 100755
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -54,40 +54,9 @@ services:
default:
ipv4_address: 10.10.10.6
tty: true
+ env_file:
+ - .env
environment:
- TZ: ${TZ}
- DJANGO_DEBUG: ${DJANGO_DEBUG}
- DJANGO_SECRET_KEY: ${DJANGO_SECRET_KEY}
- DB_USER: ${DB_USER}
- DB_PASSWORD: ${DB_PASSWORD}
- EMAIL_FROM: ${EMAIL_FROM}
- SMTP_SERVER: ${SMTP_SERVER}
- WATCHER_URL: ${WATCHER_URL}
- WATCHER_LOGO: ${WATCHER_LOGO}
- EMAIL_SUBJECT_TAG_SITE_MONITORING: ${EMAIL_SUBJECT_TAG_SITE_MONITORING}
- EMAIL_CLASSIFICATION: ${EMAIL_CLASSIFICATION}
- THE_HIVE_URL: ${THE_HIVE_URL}
- THE_HIVE_VERIFY_SSL: ${THE_HIVE_VERIFY_SSL}
- THE_HIVE_KEY: ${THE_HIVE_KEY}
- THE_HIVE_CASE_ASSIGNEE: ${THE_HIVE_CASE_ASSIGNEE}
- THE_HIVE_TAGS: ${THE_HIVE_TAGS}
- MISP_URL: ${MISP_URL}
- MISP_VERIFY_SSL: ${MISP_VERIFY_SSL}
- MISP_KEY: ${MISP_KEY}
- MISP_TICKETING_URL: ${MISP_TICKETING_URL}
- MISP_TAGS: ${MISP_TAGS}
- AUTH_LDAP_SERVER_URI: ${AUTH_LDAP_SERVER_URI}
- AUTH_LDAP_BIND_DN: ${AUTH_LDAP_BIND_DN}
- AUTH_LDAP_BIND_PASSWORD: ${AUTH_LDAP_BIND_PASSWORD}
- AUTH_LDAP_BASE_DN: ${AUTH_LDAP_BASE_DN}
- AUTH_LDAP_FILTER: ${AUTH_LDAP_FILTER}
- AUTH_LDAP_VERIFY_SSL: ${AUTH_LDAP_VERIFY_SSL}
- DATA_LEAK_SEARX_URL: ${SEARX_PROTOCOL}${SEARX_HOSTNAME}/
- ALLOWED_HOST: ${ALLOWED_HOST}
- CSRF_TRUSTED_ORIGINS: ${CSRF_TRUSTED_ORIGINS}
- HTTP_PROXY: ${HTTP_PROXY}
- HTTPS_PROXY: ${HTTPS_PROXY}
- CERT_STREAM_URL: ${CERT_STREAM_URL}
no_proxy: "10.10.10.3,10.10.10.5,10.10.10.7"
ports:
- "9002:9002"
|