- {% if parsed.navigator_link %}
+ {% if parsed.navigator_link %}
diff --git a/modules/redirections/redirections.json b/modules/redirections/redirections.json
index 5be1ff3235a..21beaa32d9e 100644
--- a/modules/redirections/redirections.json
+++ b/modules/redirections/redirections.json
@@ -1,19 +1,4 @@
[
- {
- "title" : "Getting Started Redirect",
- "from" : "resources/getting-started",
- "to" : "/resources/"
- },
- {
- "title" : "Training Redirect",
- "from" : "training",
- "to" : "/resources/learn-more-about-attack/training"
- },
- {
- "title" : "CTI Training Redirect",
- "from" : "training/cti",
- "to" : "/resources/learn-more-about-attack/training/cti"
- },
{
"title": "enterprise-attack-matrix",
"from": "wiki/ATT&CK_Matrix",
@@ -278,5 +263,85 @@
"title": "azure-matrix",
"from": "matrices/enterprise/cloud/azure",
"to": "/matrices/enterprise/cloud/iaas"
+ },
+ {
+ "title" : "Getting Started Redirect",
+ "from" : "resources/getting-started",
+ "to" : "/resources/"
+ },
+ {
+ "title" : "Training Redirect",
+ "from" : "resources/training",
+ "to" : "/resources/learn-more-about-attack/training"
+ },
+ {
+ "title" : "CTI Training Redirect",
+ "from" : "resources/training/cti",
+ "to" : "/resources/learn-more-about-attack/training/cti"
+ },
+ {
+ "title" : "Working with ATT&CK Redirect",
+ "from" : "resources/working-with-attack",
+ "to" : "/resources/attack-data-and-tools/"
+ },
+ {
+ "title" : "Related Projects Redirect",
+ "from" : "resources/related-projects",
+ "to" : "/resources/attack-data-and-tools/"
+ },
+ {
+ "title" : "Brand Guide Redirect",
+ "from" : "resources/brand",
+ "to" : "/resources/legal-and-branding/"
+ },
+ {
+ "title" : "Privacy Redirect",
+ "from" : "resources/privacy",
+ "to" : "/resources/legal-and-branding/privacy/"
+ },
+ {
+ "title" : "Terms of Use Redirect",
+ "from" : "resources/terms-of-use",
+ "to" : "/resources/legal-and-branding/terms-of-use/"
+ },
+ {
+ "title" : "FAQ General Redirect",
+ "from" : "resources/faq/general",
+ "to" : "/resources/faq/#general-faq"
+ },
+ {
+ "title" : "FAQ Content Redirect",
+ "from" : "resources/faq/content",
+ "to" : "/resources/faq/#content-faq"
+ },
+ {
+ "title" : "FAQ Resources Redirect",
+ "from" : "resources/faq/resources",
+ "to" : "/resources/faq/#resources-faq"
+ },
+ {
+ "title" : "FAQ Staying Informed Redirect",
+ "from" : "resources/faq/staying-informed",
+ "to" : "/resources/faq/#staying-informed-faq"
+ },
+ {
+ "title" : "FAQ ATT&CK Other Models Redirect",
+ "from" : "resources/faq/attack-and-other-models",
+ "to" : "/resources/faq/#other-models-faq"
+ },
+ {
+ "title" : "FAQ Legal Redirect",
+ "from" : "resources/faq/legal",
+ "to" : "/resources/faq/#legal-faq"
+ },
+ {
+ "title" : "Contribute Redirect",
+ "from" : "resources/contribute",
+ "to" : "/resources/engage-with-attack/contribute/"
+ },
+ {
+ "title" : "Contact Redirect",
+ "from" : "contact",
+ "to" : "/resources/engage-with-attack/contact/"
}
]
\ No newline at end of file
diff --git a/modules/resources/__init__.py b/modules/resources/__init__.py
index ca71b5d84d6..2a7d5b82f68 100644
--- a/modules/resources/__init__.py
+++ b/modules/resources/__init__.py
@@ -27,6 +27,12 @@ def get_menu():
"external_link": False,
"children": [],
},
+ {
+ "display_name": "ATT&CKcon",
+ "url": "/resources/attackcon/",
+ "external_link": False,
+ "children": []
+ },
{
"display_name": "ATT&CK Data & Tools",
"url": "/resources/attack-data-and-tools/",
diff --git a/modules/resources/resources.py b/modules/resources/resources.py
index 051044f5350..ca4a97ac58d 100644
--- a/modules/resources/resources.py
+++ b/modules/resources/resources.py
@@ -88,20 +88,24 @@ def generate_training_pages():
with open(os.path.join(site_config.data_directory, "trainings.json"), "r", encoding="utf8") as f:
trainings = json.load(f)
- # get markdown
- training_md = resources_config.training_md
-
- # write markdown to file
- with open(os.path.join(site_config.resources_markdown_path, "training.md"), "w", encoding="utf8") as md_file:
- md_file.write(training_md)
-
- # CTI training
- training_cti_md = resources_config.training_cti_md + json.dumps(trainings)
-
- # write markdown to file
- with open(os.path.join(site_config.resources_markdown_path, "training_cti.md"), "w", encoding="utf8") as md_file:
- md_file.write(training_cti_md)
-
+ # Define a dictionary of training pages and their corresponding markdown templates
+ training_pages = {
+ "training": resources_config.training_md,
+ "training_cti": resources_config.training_cti_md,
+ "training_purple_teaming_fundamentals": resources_config.training_purple_teaming_fundamentals_md,
+ "training_attack_fundamentals": resources_config.training_attack_fundamentals_md,
+ "training_adversary_emulation": resources_config.training_adversary_emulation_md,
+ "training_access_tokens": resources_config.training_access_tokens_md,
+ "training_soc_assessments": resources_config.training_soc_assessments_md,
+ "training_threat_hunting": resources_config.training_threat_hunting_md,
+ "training_detection_engineering": resources_config.training_detection_engineering_md,
+ }
+
+ # Generate markdown for each training page and write it to a file
+ for page_name, page_template in training_pages.items():
+ page_content = page_template + json.dumps(trainings)
+ with open(os.path.join(site_config.resources_markdown_path, f"{page_name}.md"), "w", encoding="utf8") as md_file:
+ md_file.write(page_content)
def generate_brand_page():
"""Responsible for generating the markdown pages of the training pages."""
@@ -133,9 +137,9 @@ def generate_attackcon_page():
attackcon_name.append(attackcon[i]["title"])
title = "Title: " + attackcon[i]["title"] + "\n"
name = attackcon[i]["date"].lower().replace(" ", "-")
- template = "Template: general/attackcon-overview\n"
- attackcon_path.append("/resources/learn-more-about-attack/attackcon/" + name + "/")
- save_as = "save_as: resources/learn-more-about-attack/attackcon/" + name + "/index.html\n"
+ template = "Template: resources/attackcon-overview\n"
+ attackcon_path.append("/resources/attackcon/" + name + "/")
+ save_as = "save_as: resources/attackcon/" + name + "/index.html\n"
data = "data: "
content = title + template + save_as + data
attackcon_md.append(content)
@@ -145,28 +149,19 @@ def generate_attackcon_page():
attackcon_list = attackcon_dict_list["attackcon_md"]
# Below code used to add the attackcon children to the resources sidebar
- attackcon_index = 0
learnmore_index = 0
temp_dict = {}
for i in range(len(site_config.resource_nav["children"])):
- if site_config.resource_nav["children"][i]["name"] == "Learn More about ATT&CK":
- for j in range(len(site_config.resource_nav["children"][i]["children"])):
- if site_config.resource_nav["children"][i]["children"][j]["name"] == "ATT&CKcon Presentations":
- learnmore_index = i
- attackcon_index = j
+ if site_config.resource_nav["children"][i]["name"] == "ATT&CKcon":
+ attackcon_index = i
for i in range(len(attackcon_dict_list["attackcon_name"])):
temp_dict["name"] = attackcon_dict_list["attackcon_name"][i]
temp_dict["path"] = attackcon_dict_list["attackcon_path"][i]
temp_dict["children"] = []
- site_config.resource_nav["children"][learnmore_index]["children"][attackcon_index]["children"].append(temp_dict.copy())
+ site_config.resource_nav["children"][attackcon_index]["children"].append(temp_dict.copy())
temp_dict = {}
- attackcon_content = resources_config.attackcon_md + json.dumps(attackcon[0])
-
- # write markdown to file
- with open(os.path.join(site_config.resources_markdown_path, "attackcon.md"), "w", encoding="utf8") as md_file:
- md_file.write(attackcon_content)
for i in range(len(attackcon_list)):
attackcon_content = attackcon_list[i] + json.dumps(attackcon[i])
f_name = "attackcon-" + attackcon[i]["date"].lower().replace(" ", "-") + ".md"
@@ -300,7 +295,7 @@ def generate_contribute_page():
# Generate redirections
util.buildhelpers.generate_redirections(
- redirections_filename=resources_config.contribute_redirection_location, redirect_md=site_config.redirect_md
+ redirections_filename=resources_config.resources_redirections_location, redirect_md=site_config.redirect_md
)
ms = util.relationshipgetters.get_ms()
diff --git a/modules/resources/resources_config.py b/modules/resources/resources_config.py
index 16e4b68815c..8a46608b937 100644
--- a/modules/resources/resources_config.py
+++ b/modules/resources/resources_config.py
@@ -12,14 +12,6 @@
# Path for docs
docs_path = "modules/resources/docs/"
-# ATT&CKcon md
-attackcon_md = (
- "Title: ATT&CKcon\n"
- "Template: general/attackcon-overview\n"
- "save_as: resources/learn-more-about-attack/attackcon/index.html\n"
- "data: "
-)
-
# Training md
training_md = (
"Title: ATT&CK Training\n"
@@ -34,6 +26,55 @@
"data: "
)
+training_purple_teaming_fundamentals_md = (
+ "Title: ATT&CK For Purple Teaming Fundamentals Training\n"
+ "Template: resources/training-purple-teaming-fundamentals\n"
+ "save_as: resources/learn-more-about-attack/training/purple-teaming-fundamentals/index.html\n"
+ "data: "
+)
+
+training_attack_fundamentals_md = (
+ "Title: ATT&CK Fundamentals Training\n"
+ "Template: resources/training-attack-fundamentals\n"
+ "save_as: resources/learn-more-about-attack/training/attack-fundamentals/index.html\n"
+ "data: "
+)
+
+training_adversary_emulation_md = (
+ "Title: ATT&CK Adversary Emulation: T1134.001 (Token Impersonation and Theft)\n"
+ "Template: resources/training-adversary-emulation\n"
+ "save_as: resources/learn-more-about-attack/training/adversary-emulation/index.html\n"
+ "data: "
+)
+
+training_access_tokens_md = (
+ "Title: Access Tokens Technical Primer\n"
+ "Template: resources/training-access-tokens\n"
+ "save_as: resources/learn-more-about-attack/training/access-tokens/index.html\n"
+ "data: "
+)
+
+training_soc_assessments_md = (
+ "Title: Overview of ATT&CK Based SOC Assessments\n"
+ "Template: resources/training-soc-assessments\n"
+ "save_as: resources/learn-more-about-attack/training/soc-assessments/index.html\n"
+ "data: "
+)
+
+training_threat_hunting_md = (
+ "Title: TTP-Based Threat Hunting and Detection Engineering\n"
+ "Template: resources/training-threat-hunting\n"
+ "save_as: resources/learn-more-about-attack/training/threat-hunting/index.html\n"
+ "data: "
+)
+
+training_detection_engineering_md = (
+ "Title: ATT&CK Detection Engineering\n"
+ "Template: resources/training-detection-engineering\n"
+ "save_as: resources/learn-more-about-attack/training/detection-engineering/index.html\n"
+ "data: "
+)
+
# FAQ md
faq_md = (
"Title: Frequently Asked Questions\n"
@@ -50,7 +91,7 @@
"data: "
)
-contribute_redirection_location = "modules/resources/contribute_redirections.json"
+resources_redirections_location = "modules/resources/resources_redirections.json"
# Brand md
brand_md = (
diff --git a/modules/resources/contribute_redirections.json b/modules/resources/resources_redirections.json
similarity index 75%
rename from modules/resources/contribute_redirections.json
rename to modules/resources/resources_redirections.json
index 5a9abbd7683..5b784c22c90 100644
--- a/modules/resources/contribute_redirections.json
+++ b/modules/resources/resources_redirections.json
@@ -1,6 +1,6 @@
[
{
- "title": "Training Redirect",
+ "title": "Training Content Redirect",
"from": "docs/Contributing_to_MITRE_ATTACK.pdf/index.html",
"to": "/resources/engage-with-attack/contribute"
}
diff --git a/modules/resources/static_pages/attackcon.md b/modules/resources/static_pages/attackcon.md
new file mode 100644
index 00000000000..3b6cd1a055a
--- /dev/null
+++ b/modules/resources/static_pages/attackcon.md
@@ -0,0 +1,3 @@
+Title: ATT&CKCon
+Template: resources/attackcon
+save_as: resources/attackcon/index.html
\ No newline at end of file
diff --git a/attack-theme/templates/general/attackcon-overview.html b/modules/resources/templates/attackcon-overview.html
similarity index 94%
rename from attack-theme/templates/general/attackcon-overview.html
rename to modules/resources/templates/attackcon-overview.html
index dfc34fb4b1f..135bb546423 100644
--- a/attack-theme/templates/general/attackcon-overview.html
+++ b/modules/resources/templates/attackcon-overview.html
@@ -13,20 +13,15 @@
- Home
- Resources
- - Learn More about ATT&CK
- - ATT&CKcon
+ - ATT&CKcon
- {{ con.title }}
{% set conID = "-".join(con.date.split(' ')) %}
- {% if "sponsors_img_list" in con %}
-
{{ con.title }} Presentations and Sponsors
- {% else %}
-
{{ con.title }} Presentations
- {% endif %}
-
+
{{ con.title }}
+
{% set ifSponsor = "sponsors_img_list" in con %}
{% if "banner_img" in con %}
@@ -44,6 +39,7 @@
{{ con.title }} Presentations
src="/theme/images/external-site-dark.jpeg" alt="External site" class="external-icon">
{% endif %}
+ {% if "banner_img" in con %}
+ {% endif %}
{% endblock %}
diff --git a/modules/resources/templates/attackcon.html b/modules/resources/templates/attackcon.html
new file mode 100644
index 00000000000..0fea914da0c
--- /dev/null
+++ b/modules/resources/templates/attackcon.html
@@ -0,0 +1,71 @@
+{% extends "general/two-column.html" %}
+{% set active_page = "resources" -%}
+{% set title = page.title + " | MITRE ATT&CK®" -%}
+{% import 'macros/navigation.html' as navigation %}
+{% import 'macros/contact_card.html' as contact_card %}
+
+{% block innerleft %}
+
+{% endblock %}
+
+{% block innerright %}
+
+ - Home
+ - Resources
+ - ATT&CKCon
+
+
+
+
+
ATT&CKCon
+
+
+ At MITRE ATT&CK's annual conference, cybersecurity leaders and practitioners of all levels are
+ invited to strengthen capabilities and engage with others in the community through multiple days of programming,
+ featuring knowledgeable speakers, engaging content, and meaningful collaboration, all designed to help
+ leverage the ATT&CK framework.
+ Browse the archive of presentations below.
+
+
+ Learn about future ATT&CKcons by keeping up with us at Engage with ATT&CK
+
+
+ {{contact_card.render(
+ "ATT&CKcon 5.0",
+ "/resources/attackcon/october-2024/",
+ "October 22nd - 23rd, 2024
McLean, VA",
+ invert_icon=True)}}
+ {{contact_card.render(
+ "ATT&CKcon 4.0",
+ "/resources/attackcon/october-2023/",
+ "October 24th - 25th, 2023
McLean, VA",
+ invert_icon=True)}}
+ {{contact_card.render(
+ "ATT&CKcon 3.0",
+ "/resources/attackcon/march-2022/",
+ "March 29th - 30th, 2022
McLean, VA",
+ invert_icon=True)}}
+
+
+
+ {{contact_card.render(
+ "ATT&CKcon PowerHour",
+ "/resources/attackcon/october-2020/",
+ "October 2020 - January 2021
Virtual",
+ invert_icon=True)}}
+ {{contact_card.render("ATT&CKcon 2.0", "/resources/attackcon/october-2019/", "October 29th - 30th,
+ 2019
McLean, VA",
+ invert_icon=True)}}
+ {{contact_card.render("ATT&CKcon 2018", "/resources/attackcon/october-2018/", "October 23rd - 24th,
+ 2018
McLean, VA",
+ invert_icon=True)}}
+
+
+
+
+{% endblock %}
+
+{% block scripts %} {{ super () }}
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/modules/resources/templates/learn-more-about-attack.html b/modules/resources/templates/learn-more-about-attack.html
index 36ecd42a729..c6d5754be8c 100644
--- a/modules/resources/templates/learn-more-about-attack.html
+++ b/modules/resources/templates/learn-more-about-attack.html
@@ -49,44 +49,6 @@
Featured MITRE Presentations
Browse all MITRE presentations
-
ATT&CKCon Presentations
-
- At MITRE ATT&CK's yearly conference, cybersecurity leaders and practitioners of all levels are
- invited to strengthen capabilities and engage with others in the community through two days of programming,
- featuring knowledgeable speakers, engaging content, and meaningful collaboration, all designed to help
- leverage the ATT&CK framework. Browse the archive of presentations organized by event.
-
-
- Learn about future ATT&CKcons by keeping up with us at Engage with ATT&CK
-
-
- {{contact_card.render(
- "ATT&CKcon 4.0",
- "/resources/learn-more-about-attack/attackcon/october-2023/",
- "October 24th - 25th, 2023
McLean, VA",
- invert_icon=True)}}
- {{contact_card.render(
- "ATT&CKcon 3.0",
- "/resources/learn-more-about-attack/attackcon/march-2022/",
- "March 29th - 30th, 2022
McLean, VA",
- invert_icon=True)}}
- {{contact_card.render(
- "ATT&CKcon PowerHour",
- "/resources/learn-more-about-attack/attackcon/october-2020/",
- "October 2020 - January 2021
Virtual",
- invert_icon=True)}}
-
-
- {{contact_card.render("ATT&CKcon 2.0", "/resources/learn-more-about-attack/attackcon/october-2019/", "
October 29th - 30th,
- 2019McLean, VA",
- invert_icon=True)}}
- {{contact_card.render("ATT&CKcon 2018", "/resources/learn-more-about-attack/attackcon/october-2018/", "
October 23rd - 24th,
- 2018McLean, VA",
- invert_icon=True)}}
-
-
-
\ No newline at end of file
diff --git a/modules/resources/templates/training-adversary-emulation.html b/modules/resources/templates/training-adversary-emulation.html
new file mode 100644
index 00000000000..8015dadad75
--- /dev/null
+++ b/modules/resources/templates/training-adversary-emulation.html
@@ -0,0 +1,126 @@
+{% extends "general/two-column.html" %}
+{% set active_page = "resources" -%}
+{% set title = "ATT&CK Adversary Emulation Training | MITRE ATT&CK®" -%}
+{% set parsed = page.data | from_json %}
+{% import 'macros/navigation.html' as navigation %}
+
+{% block innerleft %}
+
+{% endblock %}
+
+{% block innerright %}
+
+