From 23d05c37ed5f91f15bbbeca25e3f57482689dfab Mon Sep 17 00:00:00 2001 From: Ilija Lazoroski Date: Wed, 17 Nov 2021 17:13:55 +0100 Subject: [PATCH 1/8] UI: Remove ATT&CK Configuration --- .../attack/ConfigMatrixComponent.js | 123 ---------------- .../ConfigurationTabs.js | 2 - .../ui/src/components/pages/ConfigurePage.js | 135 +++--------------- 3 files changed, 18 insertions(+), 242 deletions(-) delete mode 100644 monkey/monkey_island/cc/ui/src/components/attack/ConfigMatrixComponent.js diff --git a/monkey/monkey_island/cc/ui/src/components/attack/ConfigMatrixComponent.js b/monkey/monkey_island/cc/ui/src/components/attack/ConfigMatrixComponent.js deleted file mode 100644 index ff9a11766..000000000 --- a/monkey/monkey_island/cc/ui/src/components/attack/ConfigMatrixComponent.js +++ /dev/null @@ -1,123 +0,0 @@ -import React from 'react'; -import Checkbox from '../ui-components/Checkbox' -import Tooltip from 'react-tooltip-lite' -import AuthComponent from '../AuthComponent'; -import ReactTable from 'react-table'; -import 'filepond/dist/filepond.min.css'; -import '../../styles/components/Tooltip.scss'; -import {Col} from 'react-bootstrap'; - -import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; -import { faCircle as faCircle } from '@fortawesome/free-solid-svg-icons/faCircle'; -import { faCircle as faCircleThin } from '@fortawesome/free-regular-svg-icons/faCircle'; - -class ConfigMatrixComponent extends AuthComponent { - constructor(props) { - super(props); - this.state = {lastAction: 'none'} - } - - // Finds which attack type has most techniques and returns that number - static findMaxTechniques(data) { - let maxLen = 0; - data.forEach(function (techType) { - if (Object.keys(techType.properties).length > maxLen) { - maxLen = Object.keys(techType.properties).length - } - }); - return maxLen - } - - // Parses ATT&CK config schema into data suitable for react-table (ATT&CK matrix) - static parseTechniques(data, maxLen) { - let techniques = []; - // Create rows with attack techniques - for (let i = 0; i < maxLen; i++) { - let row = {}; - data.forEach(function (techType) { - let rowColumn = {}; - rowColumn.techName = techType.title; - - if (i <= Object.keys(techType.properties).length) { - rowColumn.technique = Object.values(techType.properties)[i]; - if (rowColumn.technique) { - rowColumn.technique.name = Object.keys(techType.properties)[i]; - } - } else { - rowColumn.technique = null; - } - row[rowColumn.techName] = rowColumn; - }); - techniques.push(row) - } - return techniques; - } - - getColumns(matrixData) { - return Object.keys(matrixData[0]).map((key) => { - return { - Header: key, - id: key, - accessor: x => this.renderTechnique(x[key].technique), - style: {'whiteSpace': 'unset'} - }; - }); - } - - renderTechnique(technique) { - if (technique == null) { - return (
) - } else { - return ( - - {technique.title} - - ) - } - } - - getTableData = (config) => { - let configCopy = JSON.parse(JSON.stringify(config)); - let maxTechniques = ConfigMatrixComponent.findMaxTechniques(Object.values(configCopy)); - let matrixTableData = ConfigMatrixComponent.parseTechniques(Object.values(configCopy), maxTechniques); - let columns = this.getColumns(matrixTableData); - return {'columns': columns, 'matrixTableData': matrixTableData, 'maxTechniques': maxTechniques} - }; - - renderLegend = () => { - return ( - ) - }; - - render() { - let tableData = this.getTableData(this.props.configuration); - return ( -
- {this.renderLegend()} -
- -
-
); - } -} - -export default ConfigMatrixComponent; diff --git a/monkey/monkey_island/cc/ui/src/components/configuration-components/ConfigurationTabs.js b/monkey/monkey_island/cc/ui/src/components/configuration-components/ConfigurationTabs.js index 7701959cf..f6057dd6e 100644 --- a/monkey/monkey_island/cc/ui/src/components/configuration-components/ConfigurationTabs.js +++ b/monkey/monkey_island/cc/ui/src/components/configuration-components/ConfigurationTabs.js @@ -1,5 +1,4 @@ const CONFIGURATION_TABS = { - ATTACK: 'attack', BASIC: 'basic', BASIC_NETWORK: 'basic_network', RANSOMWARE: 'ransomware', @@ -8,7 +7,6 @@ const CONFIGURATION_TABS = { }; const advancedModeConfigTabs = [ - CONFIGURATION_TABS.ATTACK, CONFIGURATION_TABS.BASIC, CONFIGURATION_TABS.BASIC_NETWORK, CONFIGURATION_TABS.RANSOMWARE, diff --git a/monkey/monkey_island/cc/ui/src/components/pages/ConfigurePage.js b/monkey/monkey_island/cc/ui/src/components/pages/ConfigurePage.js index f23df62e6..4650aec07 100644 --- a/monkey/monkey_island/cc/ui/src/components/pages/ConfigurePage.js +++ b/monkey/monkey_island/cc/ui/src/components/pages/ConfigurePage.js @@ -2,7 +2,6 @@ import React from 'react'; import Form from 'react-jsonschema-form-bs4'; import {Button, Col, Modal, Nav} from 'react-bootstrap'; import AuthComponent from '../AuthComponent'; -import ConfigMatrixComponent from '../attack/ConfigMatrixComponent'; import UiSchema from '../configuration-components/UiSchema'; import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'; import {faCheck} from '@fortawesome/free-solid-svg-icons/faCheck'; @@ -20,7 +19,6 @@ import applyUiSchemaManipulators from '../configuration-components/UISchemaManip import HtmlFieldDescription from '../configuration-components/HtmlFieldDescription.js'; import CONFIGURATION_TABS_PER_MODE from '../configuration-components/ConfigurationTabs.js'; -const ATTACK_URL = '/api/attack'; const CONFIG_URL = '/api/configuration/island'; export const API_PBA_LINUX = '/api/fileUpload/PBAlinux'; export const API_PBA_WINDOWS = '/api/fileUpload/PBAwindows'; @@ -30,11 +28,9 @@ class ConfigurePageComponent extends AuthComponent { constructor(props) { super(props); this.initialConfig = {}; - this.initialAttackConfig = {}; this.currentSection = this.getSectionsOrder()[0]; this.state = { - attackConfig: {}, configuration: {}, currentFormData: {}, importCandidateConfig: null, @@ -42,7 +38,7 @@ class ConfigurePageComponent extends AuthComponent { schema: {}, sections: [], selectedSection: this.currentSection, - showAttackAlert: false, + showUnsubmittedConfigWarning: false, showUnsafeOptionsConfirmation: false, showUnsafeAttackOptionsWarning: false, showConfigExportModal: false, @@ -64,39 +60,26 @@ class ConfigurePageComponent extends AuthComponent { setInitialConfig(config) { // Sets a reference to know if config was changed - config['attack'] = {} this.initialConfig = JSON.parse(JSON.stringify(config)); } - setInitialAttackConfig(attackConfig) { - // Sets a reference to know if attack config was changed - this.initialAttackConfig = JSON.parse(JSON.stringify(attackConfig)); - } - componentDidMount = () => { - let urls = [CONFIG_URL, ATTACK_URL]; + let urls = [CONFIG_URL]; // ??? Why fetch config here and not in `render()`? Promise.all(urls.map(url => this.authFetch(url).then(res => res.json()))) .then(data => { let sections = []; - let attackConfig = data[1]; let monkeyConfig = data[0]; this.setInitialConfig(monkeyConfig.configuration); - this.setInitialAttackConfig(attackConfig.configuration); for (let sectionKey of this.getSectionsOrder()) { - if (sectionKey === 'attack') { - sections.push({key: sectionKey, title: 'ATT&CK'}) - } else { - sections.push({ - key: sectionKey, - title: monkeyConfig.schema.properties[sectionKey].title - }); - } + sections.push({ + key: sectionKey, + title: monkeyConfig.schema.properties[sectionKey].title + }); } this.setState({ schema: monkeyConfig.schema, configuration: monkeyConfig.configuration, - attackConfig: attackConfig.configuration, sections: sections, currentFormData: monkeyConfig.configuration[this.state.selectedSection] }) @@ -130,42 +113,13 @@ class ConfigurePageComponent extends AuthComponent { }; onSubmit = () => { - if (this.state.selectedSection === 'attack') { - this.matrixSubmit(); - } else { - this.attemptConfigSubmit(); - } + this.attemptConfigSubmit(); }; canSafelySubmitConfig(config) { return !isUnsafeOptionSelected(this.state.schema, config); } - matrixSubmit = () => { - // Submit attack matrix - this.authFetch(ATTACK_URL, - { - method: 'POST', - headers: {'Content-Type': 'application/json'}, - body: JSON.stringify(this.state.attackConfig) - }) - .then(res => { - if (!res.ok) { - throw Error() - } - return res; - }) - .then(() => { - this.setInitialAttackConfig(this.state.attackConfig); - }) - .then(() => this.updateConfig(this.checkAndShowUnsafeAttackWarning)) - .then(() => this.setState({lastAction: 'saved'})) - .catch(error => { - console.log('Bad configuration: ' + error.toString()); - this.setState({lastAction: 'invalid_configuration'}); - }); - }; - checkAndShowUnsafeAttackWarning = () => { if (isUnsafeOptionSelected(this.state.schema, this.state.configuration)) { this.setState({showUnsafeAttackOptionsWarning: true}); @@ -201,38 +155,8 @@ class ConfigurePageComponent extends AuthComponent { }); } - // Alters attack configuration when user toggles technique - attackTechniqueChange = (technique, value, mapped = false) => { - // Change value in attack configuration - // Go trough each column in matrix, searching for technique - Object.entries(this.state.attackConfig).forEach(techType => { - if (Object.prototype.hasOwnProperty.call(techType[1].properties, technique)) { - let tempMatrix = this.state.attackConfig; - tempMatrix[techType[0]].properties[technique].value = value; - this.setState({attackConfig: tempMatrix}); - - // Toggle all mapped techniques - if (!mapped) { - // Loop trough each column and each row - Object.entries(this.state.attackConfig).forEach(otherType => { - Object.entries(otherType[1].properties).forEach(otherTech => { - // If this technique depends on a technique that was changed - if (Object.prototype.hasOwnProperty.call(otherTech[1], 'depends_on') && - otherTech[1]['depends_on'].includes(technique)) { - this.attackTechniqueChange(otherTech[0], value, true) - } - }) - }); - } - } - }); - }; - onChange = ({formData}) => { let configuration = this.state.configuration; - if (this.state.selectedSection === 'attack'){ - formData = {}; - } configuration[this.state.selectedSection] = formData; this.setState({currentFormData: formData, configuration: configuration}); }; @@ -270,8 +194,8 @@ class ConfigurePageComponent extends AuthComponent { } renderAttackAlertModal = () => { - return ( { - this.setState({showAttackAlert: false}) + return ( { + this.setState({showUnsubmittedConfigWarning: false}) }}>

@@ -286,7 +210,7 @@ class ConfigurePageComponent extends AuthComponent { size='lg' style={{margin: '5px'}} onClick={() => { - this.setState({showAttackAlert: false}) + this.setState({showUnsubmittedConfigWarning: false}) }}> Cancel @@ -330,16 +254,13 @@ class ConfigurePageComponent extends AuthComponent { return true; } - userChangedMatrix() { - return (JSON.stringify(this.state.attackConfig) !== JSON.stringify(this.initialAttackConfig)) - } - setSelectedSection = (key) => { - if ((key === 'attack' && this.userChangedConfig()) || - (this.currentSection === 'attack' && this.userChangedMatrix())) { - this.setState({showAttackAlert: true}); - return; - } + + // TODO: Fix https://github.com/guardicore/monkey/issues/1621 + //if ( key === 'basic' & this.userChangedConfig()) { + // this.setState({showUnsubmittedConfigWarning: true}); + // return; + //} this.updateConfigSection(); this.currentSection = key; @@ -358,7 +279,6 @@ class ConfigurePageComponent extends AuthComponent { }) .then(res => res.json()) .then(res => { - res.configuration['attack'] = {} this.setState({ lastAction: 'reset', schema: res.schema, @@ -372,16 +292,6 @@ class ConfigurePageComponent extends AuthComponent { this.removePBAfile(API_PBA_WINDOWS, this.setPbaFilenameWindows) this.removePBAfile(API_PBA_LINUX, this.setPbaFilenameLinux) }); - this.authFetch(ATTACK_URL, { - method: 'POST', - headers: {'Content-Type': 'application/json'}, - body: JSON.stringify('reset_attack_matrix') - }) - .then(res => res.json()) - .then(res => { - this.setState({attackConfig: res.configuration}); - this.setInitialAttackConfig(res.configuration); - }) }; removePBAfile(apiEndpoint, setFilenameFnc) { @@ -421,13 +331,6 @@ class ConfigurePageComponent extends AuthComponent { })); } - renderMatrix = () => { - return () - }; - renderConfigContent = (displayedSchema) => { let formProperties = {}; formProperties['schema'] = displayedSchema @@ -497,15 +400,13 @@ class ConfigurePageComponent extends AuthComponent { render() { let displayedSchema = {}; - if (Object.prototype.hasOwnProperty.call(this.state.schema, 'properties') && this.state.selectedSection !== 'attack') { + if (Object.prototype.hasOwnProperty.call(this.state.schema, 'properties')) { displayedSchema = this.state.schema['properties'][this.state.selectedSection]; displayedSchema['definitions'] = this.state.schema['definitions']; } let content = ''; - if (this.state.selectedSection === 'attack' && Object.entries(this.state.attackConfig).length !== 0) { - content = this.renderMatrix() - } else if (this.state.selectedSection !== 'attack' && Object.entries(this.state.configuration).length !== 0) { + if (Object.entries(this.state.configuration).length !== 0) { content = this.renderConfigContent(displayedSchema) } return ( From ee16fa82a03b1c8b1b10ad0646f8e6fb4c0d5f9d Mon Sep 17 00:00:00 2001 From: Ilija Lazoroski Date: Wed, 17 Nov 2021 17:15:00 +0100 Subject: [PATCH 2/8] Island: Remove attack endpoint and config functions --- monkey/monkey_island/cc/app.py | 7 +- .../cc/resources/attack/attack_config.py | 35 ----- .../cc/services/attack/attack_config.py | 138 ------------------ 3 files changed, 2 insertions(+), 178 deletions(-) delete mode 100644 monkey/monkey_island/cc/resources/attack/attack_config.py diff --git a/monkey/monkey_island/cc/app.py b/monkey/monkey_island/cc/app.py index 5f877d318..0e08eb4b9 100644 --- a/monkey/monkey_island/cc/app.py +++ b/monkey/monkey_island/cc/app.py @@ -8,7 +8,6 @@ from werkzeug.exceptions import NotFound import monkey_island.cc.environment.environment_singleton as env_singleton from common.common_consts.api_url_consts import T1216_PBA_FILE_DOWNLOAD_PATH from monkey_island.cc.database import database, mongo -from monkey_island.cc.resources.attack.attack_config import AttackConfiguration from monkey_island.cc.resources.attack.attack_report import AttackReport from monkey_island.cc.resources.auth.auth import Authenticate, init_jwt from monkey_island.cc.resources.auth.registration import Registration @@ -93,9 +92,8 @@ def init_app_config(app, mongo_url): # deciding to reset credentials and then still logging in with the old JWT. app.config["JWT_SECRET_KEY"] = str(uuid.uuid4()) - # By default, Flask sorts keys of JSON objects alphabetically, which messes with the ATT&CK - # matrix in the - # configuration. See https://flask.palletsprojects.com/en/1.1.x/config/#JSON_SORT_KEYS. + # By default, Flask sorts keys of JSON objects alphabetically. + # See https://flask.palletsprojects.com/en/1.1.x/config/#JSON_SORT_KEYS. app.config["JSON_SORT_KEYS"] = False app.json_encoder = CustomJSONEncoder @@ -166,7 +164,6 @@ def init_api_resources(api): "/api/fileUpload/?restore=", ) api.add_resource(RemoteRun, "/api/remote-monkey", "/api/remote-monkey/") - api.add_resource(AttackConfiguration, "/api/attack") api.add_resource(VersionUpdate, "/api/version-update", "/api/version-update/") api.add_resource(RemotePortCheck, "/api/monkey_control/check_remote_port/") api.add_resource(StartedOnIsland, "/api/monkey_control/started_on_island") diff --git a/monkey/monkey_island/cc/resources/attack/attack_config.py b/monkey/monkey_island/cc/resources/attack/attack_config.py deleted file mode 100644 index f9cd4c557..000000000 --- a/monkey/monkey_island/cc/resources/attack/attack_config.py +++ /dev/null @@ -1,35 +0,0 @@ -import flask_restful -from flask import current_app, json, jsonify, request - -from monkey_island.cc.resources.auth.auth import jwt_required -from monkey_island.cc.services.attack.attack_config import AttackConfig - - -class AttackConfiguration(flask_restful.Resource): - @jwt_required - def get(self): - return current_app.response_class( - json.dumps( - {"configuration": AttackConfig.get_config()}, - indent=None, - separators=(",", ":"), - sort_keys=False, - ) - + "\n", - mimetype=current_app.config["JSONIFY_MIMETYPE"], - ) - - @jwt_required - def post(self): - """ - Based on request content this endpoint either resets ATT&CK configuration or updates it. - :return: Technique types dict with techniques on reset and nothing on update - """ - config_json = json.loads(request.data) - if "reset_attack_matrix" in config_json: - AttackConfig.reset_config() - return jsonify(configuration=AttackConfig.get_config()) - else: - AttackConfig.update_config({"properties": json.loads(request.data)}) - AttackConfig.apply_to_monkey_config() - return {} diff --git a/monkey/monkey_island/cc/services/attack/attack_config.py b/monkey/monkey_island/cc/services/attack/attack_config.py index b2d59310d..8bea7165a 100644 --- a/monkey/monkey_island/cc/services/attack/attack_config.py +++ b/monkey/monkey_island/cc/services/attack/attack_config.py @@ -1,10 +1,7 @@ import logging -from dpath import util - from monkey_island.cc.database import mongo from monkey_island.cc.services.attack.attack_schema import SCHEMA -from monkey_island.cc.services.config import ConfigService logger = logging.getLogger(__name__) @@ -32,10 +29,6 @@ class AttackConfig(object): return technique return None - @staticmethod - def get_config_schema(): - return SCHEMA - @staticmethod def reset_config(): AttackConfig.update_config(SCHEMA) @@ -45,137 +38,6 @@ class AttackConfig(object): mongo.db.attack.update({"name": "newconfig"}, {"$set": config_json}, upsert=True) return True - @staticmethod - def apply_to_monkey_config(): - """ - Applies ATT&CK matrix to the monkey configuration - :return: - """ - attack_techniques = AttackConfig.get_technique_values() - monkey_config = ConfigService.get_config(False, True, True) - monkey_schema = ConfigService.get_config_schema() - AttackConfig.set_arrays(attack_techniques, monkey_config, monkey_schema) - AttackConfig.set_booleans(attack_techniques, monkey_config, monkey_schema) - ConfigService.update_config(monkey_config, True) - - @staticmethod - def set_arrays(attack_techniques, monkey_config, monkey_schema): - """ - Sets exploiters/scanners/PBAs and other array type fields in monkey's config according to - ATT&CK matrix - :param attack_techniques: ATT&CK techniques dict. Format: {'T1110': True, ...} - :param monkey_config: Monkey island's configuration - :param monkey_schema: Monkey configuration schema - """ - for key, definition in list(monkey_schema["definitions"].items()): - for array_field in definition["anyOf"]: - # Check if current array field has attack_techniques assigned to it - if "attack_techniques" in array_field and array_field["attack_techniques"]: - should_remove = not AttackConfig.should_enable_field( - array_field["attack_techniques"], attack_techniques - ) - # If exploiter's attack technique is disabled, disable the exploiter/scanner/PBA - AttackConfig.r_alter_array( - monkey_config, key, array_field["enum"][0], remove=should_remove - ) - - @staticmethod - def set_booleans(attack_techniques, monkey_config, monkey_schema): - """ - Sets boolean type fields, like "should use mimikatz?" in monkey's config according to - ATT&CK matrix - :param attack_techniques: ATT&CK techniques dict. Format: {'T1110': True, ...} - :param monkey_config: Monkey island's configuration - :param monkey_schema: Monkey configuration schema - """ - for key, value in list(monkey_schema["properties"].items()): - AttackConfig.r_set_booleans([key], value, attack_techniques, monkey_config) - - @staticmethod - def r_set_booleans(path, value, attack_techniques, monkey_config): - """ - Recursively walks through monkey configuration (DFS) to find which boolean fields needs to - be set and sets them - according to ATT&CK matrix. - :param path: Property names that leads to current value. E.g. ['monkey', 'system_info', - 'should_use_mimikatz'] - :param value: Value of config property - :param attack_techniques: ATT&CK techniques dict. Format: {'T1110': True, ...} - :param monkey_config: Monkey island's configuration - """ - if isinstance(value, dict): - dictionary = {} - # If 'value' is a boolean value that should be set: - if ( - "type" in value - and value["type"] == "boolean" - and "attack_techniques" in value - and value["attack_techniques"] - ): - AttackConfig.set_bool_conf_val( - path, - AttackConfig.should_enable_field(value["attack_techniques"], attack_techniques), - monkey_config, - ) - # If 'value' is dict, we go over each of it's fields to search for booleans - elif "properties" in value: - dictionary = value["properties"] - else: - dictionary = value - for key, item in list(dictionary.items()): - path.append(key) - AttackConfig.r_set_booleans(path, item, attack_techniques, monkey_config) - # Method enumerated everything in current path, goes back a level. - del path[-1] - - @staticmethod - def set_bool_conf_val(path, val, monkey_config): - """ - Changes monkey's configuration by setting one of its boolean fields value - :param path: Path to boolean value in monkey's configuration. ['monkey', 'system_info', - 'should_use_mimikatz'] - :param val: Boolean - :param monkey_config: Monkey's configuration - """ - util.set(monkey_config, "/".join(path), val) - - @staticmethod - def should_enable_field(field_techniques, users_techniques): - """ - Determines whether a single config field should be enabled or not. - :param field_techniques: ATT&CK techniques that field uses - :param users_techniques: ATT&CK techniques that user chose - :return: True, if user enabled all techniques used by the field, false otherwise - """ - for technique in field_techniques: - try: - if not users_techniques[technique]: - return False - except KeyError: - logger.error( - "Attack technique %s is defined in schema, but not implemented." % technique - ) - return True - - @staticmethod - def r_alter_array(config_value, array_name, field, remove=True): - """ - Recursively searches config (DFS) for array and removes/adds a field. - :param config_value: Some object/value from config - :param array_name: Name of array this method should search - :param field: Field in array that this method should add/remove - :param remove: Removes field from array if true, adds it if false - """ - if isinstance(config_value, dict): - if array_name in config_value and isinstance(config_value[array_name], list): - if remove and field in config_value[array_name]: - config_value[array_name].remove(field) - elif not remove and field not in config_value[array_name]: - config_value[array_name].append(field) - else: - for prop in list(config_value.items()): - AttackConfig.r_alter_array(prop[1], array_name, field, remove) - @staticmethod def get_technique_values(): """ From 0e4e137f6ea49df6c2ac4b82dfcac33f32c0def4 Mon Sep 17 00:00:00 2001 From: Ilija Lazoroski Date: Thu, 18 Nov 2021 14:26:27 +0100 Subject: [PATCH 3/8] Docs: Remove MITRE attack scenario --- .../usage/scenarios/custom-scenario/attack.md | 29 ------------------ .../images/usage/scenarios/attack-matrix.png | Bin 161825 -> 0 bytes 2 files changed, 29 deletions(-) delete mode 100644 docs/content/usage/scenarios/custom-scenario/attack.md delete mode 100644 docs/static/images/usage/scenarios/attack-matrix.png diff --git a/docs/content/usage/scenarios/custom-scenario/attack.md b/docs/content/usage/scenarios/custom-scenario/attack.md deleted file mode 100644 index 476a8183e..000000000 --- a/docs/content/usage/scenarios/custom-scenario/attack.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "MITRE ATT&CK assessment" -date: 2020-10-22T16:58:22+03:00 -draft: false -description: "Assess your network security detection and prevention capabilities." -weight: 2 ---- - -## Overview - -The Infection Monkey can simulate various [ATT&CK](https://attack.mitre.org/matrices/enterprise/) techniques on the network. Use it to assess your security solutions' detection and prevention capabilities. The Infection Monkey will help you find which ATT&CK techniques go unnoticed and provide specific details along with suggested mitigations. - - -## Configuration - -- **ATT&CK matrix** You can use the ATT&CK configuration section to select which techniques you want the Infection Monkey to simulate. -For the full simulation, use the default settings. -- **Exploits -> Credentials** This configuration value will be used for brute-forcing. The Infection Monkey uses the most popular default passwords and usernames, but feel free to adjust it according to the default passwords common in your network. Keep in mind a longer list means longer scanning times. -- **Network -> Scope** Disable “Local network scan” and instead provide specific network ranges in the “Scan target list”. - -![ATT&CK matrix](/images/usage/scenarios/attack-matrix.png "ATT&CK matrix") - -## Suggested run mode - -Run the Infection Monkey on as many machines as you can. You can easily achieve this by selecting the “Manual” run option and executing the command shown on different machines in your environment manually or with your deployment tool. Additionally, you can use any other run options you see fit. - -## Assessing results - -The **ATT&CK Report** shows the status of simulations using ATT&CK techniques. Click on a technique to see more details about it and potential mitigations. Keep in mind that each technique display contains a question mark symbol that will take you to the official documentation of the specific ATT&CK technique used, where you can learn more about it. diff --git a/docs/static/images/usage/scenarios/attack-matrix.png b/docs/static/images/usage/scenarios/attack-matrix.png deleted file mode 100644 index f6a040c1bd0f3a67392289c26b0f2622b1462d25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161825 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ʐ#qeprPxiRuWIzp|Ck?lAbuWp|XNR~k{r6hIa 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 TbPr{3{xtj3F1F}Xff@e=2Sl9J From 58072205e8aa48ba7106088c85c4f48a82565cea Mon Sep 17 00:00:00 2001 From: Ilija Lazoroski Date: Thu, 18 Nov 2021 14:27:25 +0100 Subject: [PATCH 4/8] Swimm: Remove explanation on attack techniques --- .swm/JFXftJml8DpmuCPBA9rL.swm | 2 +- .swm/afMu3y3ny5lnrYFWl3EI.swm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.swm/JFXftJml8DpmuCPBA9rL.swm b/.swm/JFXftJml8DpmuCPBA9rL.swm index 510b9a2b0..b3f3bd080 100644 --- a/.swm/JFXftJml8DpmuCPBA9rL.swm +++ b/.swm/JFXftJml8DpmuCPBA9rL.swm @@ -11,7 +11,7 @@ "content": [ { "type": "text", - "text": "In order to make sure that the new `ScheduleJobs` PBA is shown in the configuration on the Monkey Island, you need to add its details to the configuration file(s).

\n\nSince this particular PBA is related to the MITRE techniques [T1168](https://attack.mitre.org/techniques/T1168) and [T1053](https://attack.mitre.org/techniques/T1053), make sure to link the PBA with these techniques in the configuration as well.

\n\nEach part of the configuration has an important role \n- *enum* — contains the relevant PBA's class name(s)\n- *title* — holds the name of the PBA which is displayed in the configuration on the Monkey Island\n- *info* — consists of an elaboration on the PBA's working which is displayed in the configuration on the Monkey Island\n- *attack_techniques* — has the IDs of the MITRE techniques associated with the PBA\n\n## Manual test \nOnce you think you're done...\n- Run the Monkey Island\n- You should be able to see your new PBA under the \"Monkey\" tab in the configuration, along with its information when you click on it\n- Further, when you enable/disable the associated MITRE techniques under the ATT&CK tab in the configuration, the PBA should also be enabled/disabled\n\n" + "text": "In order to make sure that the new `ScheduleJobs` PBA is shown in the configuration on the Monkey Island, you need to add its details to the configuration file(s).

\n\nSince this particular PBA is related to the MITRE techniques [T1168](https://attack.mitre.org/techniques/T1168) and [T1053](https://attack.mitre.org/techniques/T1053), make sure to link the PBA with these techniques in the configuration as well.

\n\nEach part of the configuration has an important role \n- *enum* — contains the relevant PBA's class name(s)\n- *title* — holds the name of the PBA which is displayed in the configuration on the Monkey Island\n- *info* — consists of an elaboration on the PBA's working which is displayed in the configuration on the Monkey Island\n- *attack_techniques* — has the IDs of the MITRE techniques associated with the PBA\n\n## Manual test \nOnce you think you're done...\n- Run the Monkey Island\n- You should be able to see your new PBA under the \"Monkey\" tab in the configuration, along with its information when you click on it\n\n" }, { "type": "snippet", diff --git a/.swm/afMu3y3ny5lnrYFWl3EI.swm b/.swm/afMu3y3ny5lnrYFWl3EI.swm index c922932da..89e6a8be9 100644 --- a/.swm/afMu3y3ny5lnrYFWl3EI.swm +++ b/.swm/afMu3y3ny5lnrYFWl3EI.swm @@ -7,7 +7,7 @@ "hints": [ "See `ScheduleJobs` PBA for an example of a PBA which only uses shell commands.", "Make sure to add the PBA to the configuration as well.", - "MITRE ATT&CK technique T1087 articulates that adversaries may attempt to get a listing of accounts on a system or within an environment which can help them determine which accounts can aid in follow-on behavior. Therefore, the AccountDiscovery PBA is relevant to it. Make sure to map this PBA to the MITRE ATT&CK configuration and report." + "MITRE ATT&CK technique T1087 articulates that adversaries may attempt to get a listing of accounts on a system or within an environment which can help them determine which accounts can aid in follow-on behavior. Therefore, the AccountDiscovery PBA is relevant to it which will enable the ATT&CK technique and show it in ATT&CK report." ] }, "content": [ From a41cad62918d177c9192175bc8b85c974a88f0eb Mon Sep 17 00:00:00 2001 From: Ilija Lazoroski Date: Thu, 18 Nov 2021 14:32:55 +0100 Subject: [PATCH 5/8] Changelog: Add entry for removing ATT&CK configuration screen --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 22cc8d781..3cfb18eae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,7 @@ Changelog](https://keepachangelog.com/en/1.0.0/). - Custom monkey directory name config option. #1537 - Hostname system info collector. #1535 - Max iterations and timeout between iterations config options. #1600 +- MITRE ATT&CK configuration screen. #1532 ### Fixed - A bug in network map page that caused delay of telemetry log loading. #1545 From f07b7fafa2b0f48b034abb7d3515f8b7f722f39a Mon Sep 17 00:00:00 2001 From: Ilija Lazoroski Date: Fri, 19 Nov 2021 15:02:25 +0100 Subject: [PATCH 6/8] Common: Remove disabled state from scan status --- monkey/common/utils/attack_utils.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/monkey/common/utils/attack_utils.py b/monkey/common/utils/attack_utils.py index ef1cba65f..d86b0ba55 100644 --- a/monkey/common/utils/attack_utils.py +++ b/monkey/common/utils/attack_utils.py @@ -8,8 +8,6 @@ class ScanStatus(Enum): SCANNED = 1 # Technique was attempted and succeeded USED = 2 - # Techique was disabled - DISABLED = 3 class UsageEnum(Enum): From 4e98baf6e3ae6bccd07567714738f9d2d48369a6 Mon Sep 17 00:00:00 2001 From: Ilija Lazoroski Date: Fri, 19 Nov 2021 15:03:41 +0100 Subject: [PATCH 7/8] Island: Remove attack config and enable all techniques by default --- .../cc/services/attack/attack_config.py | 67 ------------------ .../cc/services/attack/attack_report.py | 18 ++++- .../cc/services/attack/attack_schema.py | 70 ------------------- .../attack/technique_reports/T1003.py | 1 - .../attack/technique_reports/T1016.py | 1 - .../attack/technique_reports/T1018.py | 1 - .../attack/technique_reports/T1021.py | 1 - .../attack/technique_reports/T1041.py | 1 - .../attack/technique_reports/T1059.py | 1 - .../attack/technique_reports/T1075.py | 1 - .../attack/technique_reports/T1082.py | 1 - .../attack/technique_reports/T1086.py | 1 - .../attack/technique_reports/T1090.py | 1 - .../attack/technique_reports/T1110.py | 1 - .../attack/technique_reports/T1145.py | 1 - .../attack/technique_reports/T1188.py | 1 - .../attack/technique_reports/T1210.py | 7 +- .../attack/technique_reports/__init__.py | 40 ++++------- .../attack/technique_reports/pba_technique.py | 1 - monkey/monkey_island/cc/services/database.py | 2 - 20 files changed, 33 insertions(+), 185 deletions(-) delete mode 100644 monkey/monkey_island/cc/services/attack/attack_config.py diff --git a/monkey/monkey_island/cc/services/attack/attack_config.py b/monkey/monkey_island/cc/services/attack/attack_config.py deleted file mode 100644 index 8bea7165a..000000000 --- a/monkey/monkey_island/cc/services/attack/attack_config.py +++ /dev/null @@ -1,67 +0,0 @@ -import logging - -from monkey_island.cc.database import mongo -from monkey_island.cc.services.attack.attack_schema import SCHEMA - -logger = logging.getLogger(__name__) - - -class AttackConfig(object): - def __init__(self): - pass - - @staticmethod - def get_config(): - config = mongo.db.attack.find_one({"name": "newconfig"})["properties"] - return config - - @staticmethod - def get_technique(technique_id): - """ - Gets technique by id - :param technique_id: E.g. T1210 - :return: Technique object or None if technique is not found - """ - attack_config = AttackConfig.get_config() - for config_key, attack_type in list(attack_config.items()): - for type_key, technique in list(attack_type["properties"].items()): - if type_key == technique_id: - return technique - return None - - @staticmethod - def reset_config(): - AttackConfig.update_config(SCHEMA) - - @staticmethod - def update_config(config_json): - mongo.db.attack.update({"name": "newconfig"}, {"$set": config_json}, upsert=True) - return True - - @staticmethod - def get_technique_values(): - """ - Parses ATT&CK config into a dict of techniques and corresponding values. - :return: Dictionary of techniques. Format: {"T1110": True, "T1075": False, ...} - """ - attack_config = AttackConfig.get_config() - techniques = {} - for type_name, attack_type in list(attack_config.items()): - for key, technique in list(attack_type["properties"].items()): - techniques[key] = technique["value"] - return techniques - - @staticmethod - def get_techniques_for_report(): - """ - :return: Format: {"T1110": {"selected": True, "type": "Credential Access", "T1075": ...} - """ - attack_config = AttackConfig.get_config() - techniques = {} - for type_name, attack_type in list(attack_config.items()): - for key, technique in list(attack_type["properties"].items()): - techniques[key] = { - "selected": technique["value"], - "type": SCHEMA["properties"][type_name]["title"], - } - return techniques diff --git a/monkey/monkey_island/cc/services/attack/attack_report.py b/monkey/monkey_island/cc/services/attack/attack_report.py index 3872bf770..3fb3f4c32 100644 --- a/monkey/monkey_island/cc/services/attack/attack_report.py +++ b/monkey/monkey_island/cc/services/attack/attack_report.py @@ -2,7 +2,7 @@ import logging from monkey_island.cc.database import mongo from monkey_island.cc.models import Monkey -from monkey_island.cc.services.attack.attack_config import AttackConfig +from monkey_island.cc.services.attack.attack_schema import SCHEMA from monkey_island.cc.services.attack.technique_reports import ( T1003, T1005, @@ -102,7 +102,7 @@ class AttackReportService: "meta": {"latest_monkey_modifytime": Monkey.get_latest_modifytime()}, "name": REPORT_NAME, } - for tech_id, tech_info in list(AttackConfig.get_techniques_for_report().items()): + for tech_id, tech_info in list(AttackReportService.get_techniques_for_report().items()): try: technique_report_data = TECHNIQUES[tech_id].get_report_data() technique_report_data.update(tech_info) @@ -146,3 +146,17 @@ class AttackReportService: raise RuntimeError( "Attack Report cache not cleared. DeleteResult: " + delete_result.raw_result ) + + @staticmethod + def get_techniques_for_report(): + """ + :return: Format: {"T1110": {"type": "Credential Access", "T1075": ...} + """ + attack_config = SCHEMA["properties"] + techniques = {} + for type_name, attack_type in list(attack_config.items()): + for key, technique in list(attack_type["properties"].items()): + techniques[key] = { + "type": SCHEMA["properties"][type_name]["title"], + } + return techniques diff --git a/monkey/monkey_island/cc/services/attack/attack_schema.py b/monkey/monkey_island/cc/services/attack/attack_schema.py index 6db87d4fb..dca2a1513 100644 --- a/monkey/monkey_island/cc/services/attack/attack_schema.py +++ b/monkey/monkey_island/cc/services/attack/attack_schema.py @@ -10,8 +10,6 @@ SCHEMA = { "T1059": { "title": "Command line interface", "type": "bool", - "value": True, - "necessary": True, "link": "https://attack.mitre.org/techniques/T1059", "description": "Adversaries may use command-line interfaces to interact with " "systems " @@ -20,8 +18,6 @@ SCHEMA = { "T1106": { "title": "Execution through API", "type": "bool", - "value": True, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1106", "description": "Adversary tools may directly use the Windows application " "programming interface (API) to execute binaries.", @@ -30,8 +26,6 @@ SCHEMA = { "T1086": { "title": "PowerShell", "type": "bool", - "value": True, - "necessary": True, "link": "https://attack.mitre.org/techniques/T1086", "description": "Adversaries can use PowerShell to perform a number of actions," " including discovery of information and execution of code.", @@ -39,8 +33,6 @@ SCHEMA = { "T1064": { "title": "Scripting", "type": "bool", - "value": True, - "necessary": True, "link": "https://attack.mitre.org/techniques/T1064", "description": "Adversaries may use scripts to aid in operations and " "perform multiple actions that would otherwise be manual.", @@ -48,8 +40,6 @@ SCHEMA = { "T1035": { "title": "Service execution", "type": "bool", - "value": True, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1035", "description": "Adversaries may execute a binary, command, or script via a " "method " @@ -60,8 +50,6 @@ SCHEMA = { "T1154": { "title": "Trap", "type": "bool", - "value": True, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1154", "description": "Adversaries can use the trap command to register code to be " "executed " @@ -77,8 +65,6 @@ SCHEMA = { "T1156": { "title": ".bash_profile and .bashrc", "type": "bool", - "value": True, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1156", "description": "Adversaries may abuse shell scripts by " "inserting arbitrary shell commands to gain persistence, which " @@ -89,8 +75,6 @@ SCHEMA = { "T1136": { "title": "Create account", "type": "bool", - "value": True, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1136", "description": "Adversaries with a sufficient level of access " "may create a local system, domain, or cloud tenant account.", @@ -98,8 +82,6 @@ SCHEMA = { "T1158": { "title": "Hidden files and directories", "type": "bool", - "value": True, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1158", "description": "Adversaries can hide files and folders on the system " "and evade a typical user or system analysis that does not " @@ -108,8 +90,6 @@ SCHEMA = { "T1168": { "title": "Local job scheduling", "type": "bool", - "value": True, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1168/", "description": "Linux supports multiple methods for creating pre-scheduled and " "periodic background jobs. Job scheduling can be used by " @@ -121,8 +101,6 @@ SCHEMA = { "T1504": { "title": "PowerShell profile", "type": "bool", - "value": True, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1504", "description": "Adversaries may gain persistence and elevate privileges " "in certain situations by abusing PowerShell profiles which " @@ -132,8 +110,6 @@ SCHEMA = { "T1053": { "title": "Scheduled task", "type": "bool", - "value": True, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1053", "description": "Windows utilities can be used to schedule programs or scripts " "to " @@ -146,8 +122,6 @@ SCHEMA = { "T1166": { "title": "Setuid and Setgid", "type": "bool", - "value": True, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1166", "description": "Adversaries can set the setuid or setgid bits to get code " "running in " @@ -163,8 +137,6 @@ SCHEMA = { "T1197": { "title": "BITS jobs", "type": "bool", - "value": True, - "necessary": True, "link": "https://attack.mitre.org/techniques/T1197", "description": "Adversaries may abuse BITS to download, execute, " "and even clean up after running malicious code.", @@ -172,8 +144,6 @@ SCHEMA = { "T1146": { "title": "Clear command history", "type": "bool", - "value": False, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1146", "description": "Adversaries may clear/disable command history of a compromised " "account to conceal the actions undertaken during an intrusion.", @@ -181,8 +151,6 @@ SCHEMA = { "T1107": { "title": "File Deletion", "type": "bool", - "value": True, - "necessary": True, "link": "https://attack.mitre.org/techniques/T1107", "description": "Adversaries may remove files over the course of an intrusion " "to keep their footprint low or remove them at the end as part " @@ -191,8 +159,6 @@ SCHEMA = { "T1222": { "title": "File permissions modification", "type": "bool", - "value": True, - "necessary": True, "link": "https://attack.mitre.org/techniques/T1222", "description": "Adversaries may modify file permissions/attributes to evade " "intended DACLs.", @@ -200,8 +166,6 @@ SCHEMA = { "T1099": { "title": "Timestomping", "type": "bool", - "value": True, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1099", "description": "Adversaries may modify file time attributes to hide " "new/changes to existing " @@ -211,8 +175,6 @@ SCHEMA = { "T1216": { "title": "Signed script proxy execution", "type": "bool", - "value": False, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1216", "description": "Adversaries may use scripts signed with trusted certificates " "to proxy execution of malicious files on Windows systems. This behavior could " @@ -229,8 +191,6 @@ SCHEMA = { "T1110": { "title": "Brute force", "type": "bool", - "value": True, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1110", "description": "Adversaries may use brute force techniques to attempt access " "to accounts " @@ -241,8 +201,6 @@ SCHEMA = { "T1003": { "title": "Credential dumping", "type": "bool", - "value": True, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1003", "description": "Mapped with T1078 Valid Accounts because " "both techniques require" @@ -257,8 +215,6 @@ SCHEMA = { "T1145": { "title": "Private keys", "type": "bool", - "value": True, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1145", "description": "Adversaries may gather private keys from compromised systems " "for use in " @@ -277,8 +233,6 @@ SCHEMA = { "T1087": { "title": "Account Discovery", "type": "bool", - "value": True, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1087", "description": "Adversaries may attempt to get a listing of accounts on a " "system or " @@ -289,8 +243,6 @@ SCHEMA = { "T1018": { "title": "Remote System Discovery", "type": "bool", - "value": True, - "necessary": True, "link": "https://attack.mitre.org/techniques/T1018", "description": "Adversaries will likely attempt to get a listing of other " "systems by IP address, " @@ -300,8 +252,6 @@ SCHEMA = { "T1082": { "title": "System information discovery", "type": "bool", - "value": True, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1082", "depends_on": ["T1016", "T1005"], "description": "An adversary may attempt to get detailed information about the " @@ -312,8 +262,6 @@ SCHEMA = { "T1016": { "title": "System network configuration discovery", "type": "bool", - "value": True, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1016", "depends_on": ["T1005", "T1082"], "description": "Adversaries will likely look for details about the network " @@ -332,8 +280,6 @@ SCHEMA = { "T1210": { "title": "Exploitation of Remote services", "type": "bool", - "value": True, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1210", "description": "Exploitation of a software vulnerability occurs when an " "adversary " @@ -345,8 +291,6 @@ SCHEMA = { "T1075": { "title": "Pass the hash", "type": "bool", - "value": True, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1075", "description": "Pass the hash (PtH) is a method of authenticating as a user " "without " @@ -355,8 +299,6 @@ SCHEMA = { "T1105": { "title": "Remote file copy", "type": "bool", - "value": True, - "necessary": True, "link": "https://attack.mitre.org/techniques/T1105", "description": "Files may be copied from one system to another to stage " "adversary tools or other files over the course of an operation.", @@ -364,8 +306,6 @@ SCHEMA = { "T1021": { "title": "Remote services", "type": "bool", - "value": True, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1021", "depends_on": ["T1110"], "description": "An adversary may use Valid Accounts to log into a service" @@ -381,8 +321,6 @@ SCHEMA = { "T1005": { "title": "Data from local system", "type": "bool", - "value": True, - "necessary": False, "link": "https://attack.mitre.org/techniques/T1005", "depends_on": ["T1016", "T1082"], "description": "Sensitive data can be collected from local system sources, " @@ -400,8 +338,6 @@ SCHEMA = { "T1090": { "title": "Connection proxy", "type": "bool", - "value": True, - "necessary": True, "link": "https://attack.mitre.org/techniques/T1090", "description": "A connection proxy is used to direct network traffic between " "systems " @@ -410,8 +346,6 @@ SCHEMA = { "T1065": { "title": "Uncommonly used port", "type": "bool", - "value": True, - "necessary": True, "link": "https://attack.mitre.org/techniques/T1065", "description": "Adversaries may conduct C2 communications over a non-standard " "port to bypass proxies and firewalls that have been improperly " @@ -420,8 +354,6 @@ SCHEMA = { "T1188": { "title": "Multi-hop proxy", "type": "bool", - "value": True, - "necessary": True, "link": "https://attack.mitre.org/techniques/T1188", "description": "To disguise the source of malicious traffic, " "adversaries may chain together multiple proxies.", @@ -436,8 +368,6 @@ SCHEMA = { "T1041": { "title": "Exfiltration Over Command and Control Channel", "type": "bool", - "value": True, - "necessary": True, "link": "https://attack.mitre.org/techniques/T1041", "description": "Data exfiltration is performed over the Command and Control " "channel.", diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1003.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1003.py index 79edfc8fd..c842436dd 100644 --- a/monkey/monkey_island/cc/services/attack/technique_reports/T1003.py +++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1003.py @@ -35,7 +35,6 @@ class T1003(AttackTechnique): @staticmethod def get_report_data(): - @T1003.is_status_disabled def get_technique_status_and_data(): if mongo.db.telemetry.count_documents(T1003.query): status = ScanStatus.USED.value diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1016.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1016.py index 13f5385f3..988515026 100644 --- a/monkey/monkey_island/cc/services/attack/technique_reports/T1016.py +++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1016.py @@ -36,7 +36,6 @@ class T1016(AttackTechnique): @staticmethod def get_report_data(): - @T1016.is_status_disabled def get_technique_status_and_data(): network_info = list(mongo.db.telemetry.aggregate(T1016.query)) status = ScanStatus.USED.value if network_info else ScanStatus.UNSCANNED.value diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1018.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1018.py index f78718de7..ac96cf742 100644 --- a/monkey/monkey_island/cc/services/attack/technique_reports/T1018.py +++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1018.py @@ -40,7 +40,6 @@ class T1018(AttackTechnique): @staticmethod def get_report_data(): - @T1018.is_status_disabled def get_technique_status_and_data(): scan_info = list(mongo.db.telemetry.aggregate(T1018.query)) if scan_info: diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1021.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1021.py index e829098fd..b387af8ca 100644 --- a/monkey/monkey_island/cc/services/attack/technique_reports/T1021.py +++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1021.py @@ -35,7 +35,6 @@ class T1021(AttackTechnique): @staticmethod def get_report_data(): - @T1021.is_status_disabled def get_technique_status_and_data(): attempts = [] if mongo.db.telemetry.count_documents(T1021.scanned_query): diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1041.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1041.py index d13f557fb..d4fe15b67 100644 --- a/monkey/monkey_island/cc/services/attack/technique_reports/T1041.py +++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1041.py @@ -12,7 +12,6 @@ class T1041(AttackTechnique): @staticmethod def get_report_data(): - @T1041.is_status_disabled def get_technique_status_and_data(): monkeys = list(Monkey.objects()) info = [ diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1059.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1059.py index e4301d61b..a90ca5baa 100644 --- a/monkey/monkey_island/cc/services/attack/technique_reports/T1059.py +++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1059.py @@ -26,7 +26,6 @@ class T1059(AttackTechnique): @staticmethod def get_report_data(): - @T1059.is_status_disabled def get_technique_status_and_data(): cmd_data = list(mongo.db.telemetry.aggregate(T1059.query)) if cmd_data: diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1075.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1075.py index 4dddb9e9c..194789454 100644 --- a/monkey/monkey_island/cc/services/attack/technique_reports/T1075.py +++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1075.py @@ -51,7 +51,6 @@ class T1075(AttackTechnique): @staticmethod def get_report_data(): - @T1075.is_status_disabled def get_technique_status_and_data(): successful_logins = list(mongo.db.telemetry.aggregate(T1075.query)) if successful_logins: diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1082.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1082.py index 3aaa92c96..ad1bc6281 100644 --- a/monkey/monkey_island/cc/services/attack/technique_reports/T1082.py +++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1082.py @@ -64,7 +64,6 @@ class T1082(AttackTechnique): @staticmethod def get_report_data(): - @T1082.is_status_disabled def get_technique_status_and_data(): system_info = list(mongo.db.telemetry.aggregate(T1082.query)) if system_info: diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1086.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1086.py index 1fd99500e..6541a2b43 100644 --- a/monkey/monkey_island/cc/services/attack/technique_reports/T1086.py +++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1086.py @@ -60,7 +60,6 @@ class T1086(AttackTechnique): @staticmethod def get_report_data(): - @T1086.is_status_disabled def get_technique_status_and_data(): exploit_cmd_data = list(mongo.db.telemetry.aggregate(T1086.query_for_exploits)) pba_cmd_data = list(mongo.db.telemetry.aggregate(T1086.query_for_pbas)) diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1090.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1090.py index aa172b87d..874524782 100644 --- a/monkey/monkey_island/cc/services/attack/technique_reports/T1090.py +++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1090.py @@ -12,7 +12,6 @@ class T1090(AttackTechnique): @staticmethod def get_report_data(): - @T1090.is_status_disabled def get_technique_status_and_data(): monkeys = Monkey.get_tunneled_monkeys() monkeys = [monkey.get_network_info() for monkey in monkeys] diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1110.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1110.py index 30f4d8508..e2af01d12 100644 --- a/monkey/monkey_island/cc/services/attack/technique_reports/T1110.py +++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1110.py @@ -33,7 +33,6 @@ class T1110(AttackTechnique): @staticmethod def get_report_data(): - @T1110.is_status_disabled def get_technique_status_and_data(): attempts = list(mongo.db.telemetry.aggregate(T1110.query)) succeeded = False diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1145.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1145.py index 5fea316aa..ec22a19ef 100644 --- a/monkey/monkey_island/cc/services/attack/technique_reports/T1145.py +++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1145.py @@ -29,7 +29,6 @@ class T1145(AttackTechnique): @staticmethod def get_report_data(): - @T1145.is_status_disabled def get_technique_status_and_data(): ssh_info = list(mongo.db.telemetry.aggregate(T1145.query)) if ssh_info: diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1188.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1188.py index 47aabf7aa..abb22d08f 100644 --- a/monkey/monkey_island/cc/services/attack/technique_reports/T1188.py +++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1188.py @@ -12,7 +12,6 @@ class T1188(AttackTechnique): @staticmethod def get_report_data(): - @T1188.is_status_disabled def get_technique_status_and_data(): monkeys = Monkey.get_tunneled_monkeys() hops = [] diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1210.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1210.py index a00462d85..91eb42d8b 100644 --- a/monkey/monkey_island/cc/services/attack/technique_reports/T1210.py +++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1210.py @@ -16,7 +16,6 @@ class T1210(AttackTechnique): @staticmethod def get_report_data(): - @T1210.is_status_disabled def get_technique_status_and_data(): scanned_services = T1210.get_scanned_services() exploited_services = T1210.get_exploited_services() @@ -30,10 +29,8 @@ class T1210(AttackTechnique): status_and_data = get_technique_status_and_data() status = status_and_data[0] - if status == ScanStatus.DISABLED.value: - scanned_services, exploited_services = [], [] - else: - scanned_services, exploited_services = status_and_data[1], status_and_data[2] + + scanned_services, exploited_services = status_and_data[1], status_and_data[2] data = {"title": T1210.technique_title()} data.update(T1210.get_message_and_status(status)) diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/__init__.py b/monkey/monkey_island/cc/services/attack/technique_reports/__init__.py index 529cf7b95..e11d6297b 100644 --- a/monkey/monkey_island/cc/services/attack/technique_reports/__init__.py +++ b/monkey/monkey_island/cc/services/attack/technique_reports/__init__.py @@ -6,19 +6,14 @@ from common.utils.attack_utils import ScanStatus from common.utils.code_utils import abstractstatic from monkey_island.cc.database import mongo from monkey_island.cc.models.attack.attack_mitigations import AttackMitigations -from monkey_island.cc.services.attack.attack_config import AttackConfig from monkey_island.cc.services.config_schema.config_schema import SCHEMA +from monkey_island.cc.services.attack.attack_schema import SCHEMA as ATTACK_SCHEMA from monkey_island.cc.services.config_schema.config_schema_per_attack_technique import ( ConfigSchemaPerAttackTechnique, ) logger = logging.getLogger(__name__) -disabled_msg = ( - "This technique has been disabled. " - + "You can enable it from the [configuration page](../../configure)." -) - class AttackTechnique(object, metaclass=abc.ABCMeta): """ Abstract class for ATT&CK report components """ @@ -81,9 +76,7 @@ class AttackTechnique(object, metaclass=abc.ABCMeta): Gets the status of a certain attack technique. :return: ScanStatus numeric value """ - if not cls._is_enabled_in_config(): - return ScanStatus.DISABLED.value - elif mongo.db.telemetry.find_one( + if mongo.db.telemetry.find_one( { "telem_category": "attack", "data.status": ScanStatus.USED.value, @@ -118,8 +111,6 @@ class AttackTechnique(object, metaclass=abc.ABCMeta): :param status: Enum from common/attack_utils.py integer value :return: message string """ - if status == ScanStatus.DISABLED.value: - return disabled_msg if status == ScanStatus.UNSCANNED.value: if not cls.config_schema_per_attack_technique: cls.config_schema_per_attack_technique = ( @@ -172,7 +163,7 @@ class AttackTechnique(object, metaclass=abc.ABCMeta): """ :return: techniques title. E.g. "T1110 Brute force" """ - return AttackConfig.get_technique(cls.tech_id)["title"] + return get_technique(cls.tech_id)["title"] @classmethod def get_tech_base_data(cls): @@ -205,17 +196,16 @@ class AttackTechnique(object, metaclass=abc.ABCMeta): else: return {} - @classmethod - def is_status_disabled(cls, get_technique_status_and_data) -> bool: - def check_if_disabled_in_config(): - return ( - (ScanStatus.DISABLED.value, []) - if not cls._is_enabled_in_config() - else get_technique_status_and_data() - ) - return check_if_disabled_in_config - - @classmethod - def _is_enabled_in_config(cls) -> bool: - return AttackConfig.get_technique_values()[cls.tech_id] +def get_technique(technique_id): + """ + Gets technique by id + :param technique_id: E.g. T1210 + :return: Technique object or None if technique is not found + """ + attack_config = ATTACK_SCHEMA["properties"] + for config_key, attack_type in list(attack_config.items()): + for type_key, technique in list(attack_type["properties"].items()): + if type_key == technique_id: + return technique + return None diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/pba_technique.py b/monkey/monkey_island/cc/services/attack/technique_reports/pba_technique.py index 3cc3d4085..c370590d9 100644 --- a/monkey/monkey_island/cc/services/attack/technique_reports/pba_technique.py +++ b/monkey/monkey_island/cc/services/attack/technique_reports/pba_technique.py @@ -54,7 +54,6 @@ class PostBreachTechnique(AttackTechnique, metaclass=abc.ABCMeta): :return: Technique's report data aggregated from the database """ - @cls.is_status_disabled def get_technique_status_and_data(): info = list( mongo.db.telemetry.aggregate(cls.get_pba_query(cls.pba_names, cls.relevant_systems)) diff --git a/monkey/monkey_island/cc/services/database.py b/monkey/monkey_island/cc/services/database.py index fb46cd726..027bd49e2 100644 --- a/monkey/monkey_island/cc/services/database.py +++ b/monkey/monkey_island/cc/services/database.py @@ -4,7 +4,6 @@ from flask import jsonify from monkey_island.cc.database import mongo from monkey_island.cc.models.attack.attack_mitigations import AttackMitigations -from monkey_island.cc.services.attack.attack_config import AttackConfig from monkey_island.cc.services.config import ConfigService logger = logging.getLogger(__name__) @@ -24,7 +23,6 @@ class Database(object): if not x.startswith("system.") and not x == AttackMitigations.COLLECTION_NAME ] ConfigService.init_config() - AttackConfig.reset_config() logger.info("DB was reset") return jsonify(status="OK") From c7a1c9d21d09cb10ad1af02cfbe3bd2a166666c1 Mon Sep 17 00:00:00 2001 From: Ilija Lazoroski Date: Fri, 19 Nov 2021 15:04:36 +0100 Subject: [PATCH 8/8] UT: Remove testing disabled attack techniques --- .../test_technique_reports.py | 19 +------------------ .../setup/mongo/test_database_initializer.py | 3 --- 2 files changed, 1 insertion(+), 21 deletions(-) diff --git a/monkey/tests/unit_tests/monkey_island/cc/services/attack/technique_reports/test_technique_reports.py b/monkey/tests/unit_tests/monkey_island/cc/services/attack/technique_reports/test_technique_reports.py index 1da9860b9..e408a3aff 100644 --- a/monkey/tests/unit_tests/monkey_island/cc/services/attack/technique_reports/test_technique_reports.py +++ b/monkey/tests/unit_tests/monkey_island/cc/services/attack/technique_reports/test_technique_reports.py @@ -3,10 +3,7 @@ from enum import Enum import pytest from common.utils.attack_utils import ScanStatus -from monkey_island.cc.services.attack.technique_reports.__init__ import ( - AttackTechnique, - disabled_msg, -) +from monkey_island.cc.services.attack.technique_reports.__init__ import AttackTechnique @pytest.fixture(scope="function", autouse=True) @@ -68,13 +65,6 @@ class ExpectedMsgs_OneRelevantSystem(Enum): USED: str = "USED" -def test_get_message_by_status_disabled_two_relevant_systems(): - technique_msg = FakeAttackTechnique_TwoRelevantSystems.get_message_by_status( - ScanStatus.DISABLED.value - ) - assert technique_msg == disabled_msg - - def test_get_message_by_status_unscanned_two_relevant_systems(): technique_msg = FakeAttackTechnique_TwoRelevantSystems.get_message_by_status( ScanStatus.UNSCANNED.value @@ -96,13 +86,6 @@ def test_get_message_by_status_used_two_relevant_systems(): assert technique_msg == ExpectedMsgs_TwoRelevantSystems.USED.value -def test_get_message_by_status_disabled_one_relevant_system(): - technique_msg = FakeAttackTechnique_OneRelevantSystem.get_message_by_status( - ScanStatus.DISABLED.value - ) - assert technique_msg == disabled_msg - - def test_get_message_by_status_unscanned_one_relevant_system(): technique_msg = FakeAttackTechnique_OneRelevantSystem.get_message_by_status( ScanStatus.UNSCANNED.value diff --git a/monkey/tests/unit_tests/monkey_island/cc/setup/mongo/test_database_initializer.py b/monkey/tests/unit_tests/monkey_island/cc/setup/mongo/test_database_initializer.py index d3ca3fbcc..4afdbc969 100644 --- a/monkey/tests/unit_tests/monkey_island/cc/setup/mongo/test_database_initializer.py +++ b/monkey/tests/unit_tests/monkey_island/cc/setup/mongo/test_database_initializer.py @@ -22,9 +22,6 @@ def patch_dependencies(monkeypatch_session): monkeypatch_session.setattr( "monkey_island.cc.services.config.ConfigService.init_config", lambda: None ) - monkeypatch_session.setattr( - "monkey_island.cc.services.attack.attack_config.AttackConfig.reset_config", lambda: None - ) monkeypatch_session.setattr( "monkey_island.cc.services.database.jsonify", MagicMock(return_value=True) )