From 02c50184bf8ffd1227bdf90a6f7b3f6db270f2c8 Mon Sep 17 00:00:00 2001 From: Christophe Vandeplas Date: Sat, 13 May 2023 09:49:59 +0200 Subject: [PATCH] chg: [attck4fraud] Full merge of E.A.S.T. data + updated script --- clusters/attck4fraud.json | 525 +++++++++++++++++++++++++++++++++++++- tools/gen_360net.py | 4 +- tools/gen_east_fraud.py | 74 +++++- 3 files changed, 580 insertions(+), 23 deletions(-) diff --git a/clusters/attck4fraud.json b/clusters/attck4fraud.json index 3de0669..2f826de 100644 --- a/clusters/attck4fraud.json +++ b/clusters/attck4fraud.json @@ -51,10 +51,10 @@ "https://www.ibtimes.co.uk/russian-hackers-fancy-bear-likely-breached-olympic-drug-testing-agency-dnc-experts-say-1577508", "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" ], - "victim": "end customer, enterprise", "synonyms": [ "Spear-phishing" - ] + ], + "victim": "end customer, enterprise" }, "uuid": "41f7cfc1-51ed-4a8d-aba9-34f9c6b8388b", "value": "Spear phishing" @@ -324,11 +324,11 @@ "kill_chain": [ "fraud-tactics:Obtain Fraudulent Assets" ], - "synonyms": [ - "Lost/Stolen Card" - ], "refs": [ "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ], + "synonyms": [ + "Lost/Stolen Card" ] }, "uuid": "d46e397f-8957-41f1-8736-13400b9e82fc", @@ -340,11 +340,11 @@ "kill_chain": [ "fraud-tactics:Obtain Fraudulent Assets" ], - "synonyms": [ - "Account Takeover Fraud" - ], "refs": [ "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ], + "synonyms": [ + "Account Takeover Fraud" ] }, "uuid": "7d71e71c-502f-412a-8fc7-584de8a9d203", @@ -450,7 +450,514 @@ }, "uuid": "9bfd2f4f-39a7-43fe-b5cd-a345a065276d", "value": "ATM Explosive Attack" + }, + { + "description": "A card not present transaction (CNP, MO/TO, Mail Order / Telephone Order, MOTOEC) is a payment card transaction made where the cardholder does not or cannot physically present the card for a merchant's visual examination at the time that an order is given and payment effected", + "meta": { + "kill_chain": [ + "fraud-tactics:Perform Fraud" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "a13829f4-be4b-5ada-8be4-3515b080cf6c", + "value": "CNP – Card Not Present" + }, + { + "description": "A card present transaction occurs when a cardholder physically presents a card to request and authorise a financial transaction", + "meta": { + "kill_chain": [ + "fraud-tactics:Perform Fraud" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "422f283a-19e0-56da-b348-98b5d31fcea6", + "value": "CP – Card Present" + }, + { + "description": "Fraud that occurs when a merchant account is used without the intention of operating a legitimate business transaction.", + "meta": { + "kill_chain": [ + "fraud-tactics:Perform Fraud" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "ccd0dcc5-5f86-52fb-8e72-7aa6e8f55f8a", + "value": "Merchant Fraud" + }, + { + "description": "Fraud that involves virtual currency, or virtual money, which is a type of unregulated, digital money, issued and usually controlled by its developers and used and accepted among the members of a specific virtual community.", + "meta": { + "kill_chain": [ + "fraud-tactics:Monetisation" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "69273dd2-cc8d-5a83-9544-1b6f6a8f8a53", + "value": "Virtual Currency Fraud" + }, + { + "description": "A category of criminal acts that involve making the unlawful use of cheques in order to illegally acquire or borrow funds that do not exist within the account balance or account-holder's legal ownership. Most methods involve taking advantage the time between the negotiation of the cheque and its clearance at the cheque writer's financial institution to draw out these funds.", + "meta": { + "kill_chain": [ + "fraud-tactics:Monetisation" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "b70d490e-7eef-5219-ab93-4ea085bf9361", + "value": "Cheque Fraud" + }, + { + "description": "Fraud perpetrated via omni- channel means to digital banking or payments channels such as home banking or other electronic services.", + "meta": { + "kill_chain": [ + "fraud-tactics:Perform Fraud" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "39de6438-4c1f-5bdc-b9a8-5cc3e889eaaf", + "value": "Digital Fraud" + }, + { + "description": "Fraud perpetrated via mobile devices to digital banking, payments channels such as home banking or other electronic services, or online merchants", + "meta": { + "kill_chain": [ + "fraud-tactics:Perform Fraud" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "147b0d04-933c-5244-8c67-33914426d47b", + "value": "Mobile Fraud" + }, + { + "description": "Fraud perpetrated via land line telephone means to banking or payments channels such as home banking or other electronic services or merchants", + "meta": { + "kill_chain": [ + "fraud-tactics:Perform Fraud" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "5e28b366-d9f0-5079-b796-3fa424ec365a", + "value": "Telephone Fraud" + }, + { + "description": "Fraud occurs when a standing order is falsely created or adulterated. A standing order is an automated method of making payments, where a person or business instructs their bank to pay another person or business, a fixed amount of money at regular intervals. Fraud occurs when a standing order is falsely created or adulterated.", + "meta": { + "kill_chain": [ + "fraud-tactics:Assets Transfer" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "86e2f55d-cf76-5be8-9cf3-7bfa24d0ea2a", + "value": "Standing Order Fraud" + }, + { + "description": "A scam in which cybercriminals spoof company email accounts and impersonate executives to try and fool an employee in accounting or HR into executing unauthorized wire transfers, or sending out confidential information", + "meta": { + "kill_chain": [ + "fraud-tactics:Initiation" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "55a413e3-5eba-5eac-a36b-575bdb2e7cd7", + "value": "CEO/BEC Fraud" + }, + { + "description": "An illegal process of concealing the origins of money obtained illegally by passing it through a complex sequence of banking transfers or commercial transactions. The overall scheme of this process returns the money to the launderer in an obscure and indirect way.", + "meta": { + "kill_chain": [ + "fraud-tactics:Monetisation" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "d0492296-9ba7-59ad-a510-f8a0526c114a", + "value": "Money laundering" + }, + { + "description": "Credit cards are produced in BIN ranges. Where an issuer does not use random generation of the card number, it is possible for an attacker to obtain one good card number and generate valid card numbers", + "meta": { + "kill_chain": [ + "fraud-tactics:Perform Fraud" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "37ff3b85-80f5-5380-8ce0-defee3ba819f", + "value": "BIN Attack" + }, + { + "description": "In computing, a denial-of-service attack is a cyber-attack in which the perpetrator seeks to make a machine or network resource unavailable to its intended users by temporarily or indefinitely disrupting services of a host connected to the Internet", + "meta": { + "kill_chain": [ + "fraud-tactics:Initiation" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "7ca098c2-9f6e-56be-8b32-7f36833803ee", + "value": "DoS - Denial of Service Attack" + }, + { + "description": "In cryptography and computer security, a man-in-the-middle attack (MITM) is an attack where the attacker secretly relays and possibly alters the communication between two parties who believe they are directly communicating with each other", + "meta": { + "kill_chain": [ + "fraud-tactics:Initiation" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "bcd23dee-c9da-548d-9d74-2ed7d71133be", + "value": "MITM - Man-in-the-Middle Attack" + }, + { + "description": "Unauthorized physical manipulation of ATM cash withdrawal. Appears that cash has not been dispensed – a reversal message generated – SEE FULL TERMINAL FRAUD DEFINITION", + "meta": { + "kill_chain": [ + "fraud-tactics:Target Compromise" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "2ac0d577-7de1-5cbd-bf8a-30b79cd7f6cc", + "value": "Transaction Reversal Fraud" + }, + { + "description": "The data contained in an authorisation message is manipulated to try to fool the payment processor.", + "meta": { + "kill_chain": [ + "fraud-tactics:Target Compromise" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "fb5b4715-5e6b-5134-a99a-b154b8f2cb84", + "value": "Transaction Message Adulteration" + }, + { + "description": "Fraud committed against a financial institution by one of its own customers", + "meta": { + "kill_chain": [ + "fraud-tactics:Obtain Fraudulent Assets" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "09ac2614-d332-51b4-b7b0-ce3f9a74539b", + "value": "First Party (Friendly) Fraud" + }, + { + "description": "Identity Spoofing refers to the action of assuming (i.e., taking on) the identity of some other entity (human or non-human) and then using that identity to accomplish a goal. An adversary may craft messages that appear to come from a different principle or use stolen / spoofed authentication credentials. Alternatively, an adversary may intercept a message from a legitimate sender and attempt to make it look like the message comes from them without changing its content. The latter form of this attack can be used to hijack credentials from legitimate users. Identity Spoofing attacks need not be limited to transmitted messages - any resource that is associated with an identity (for example, a file with a signature) can be the target of an attack where the adversary attempts to change the apparent identity", + "meta": { + "kill_chain": [ + "fraud-tactics:Obtain Fraudulent Assets" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "b105c344-448c-5d70-bb64-31f0f1246389", + "value": "Identity Spoofing (or entity hacking)" + }, + { + "description": "A form of fraud in which victims are manipulated into making real-time payments to fraudsters, typically by social engineering attacks involving impersonation.", + "meta": { + "kill_chain": [ + "fraud-tactics:Assets Transfer" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "b36f88c8-3682-5cac-b89d-33f64f91fc94", + "value": "Authorised Push Payment Fraud" + }, + { + "description": "Direct debit fraud can take place in several ways. It is often associated with identity theft, where the scammer gains access to the bank account information by posing as the victim. They can pay for services and products via a direct debit option and use this account until its owner notices.", + "meta": { + "kill_chain": [ + "fraud-tactics:Assets Transfer" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "def44822-3b24-5612-b6a2-da77f84fb5d9", + "value": "Direct Debit Fraud" + }, + { + "description": "Obtaining benefit through coercion", + "meta": { + "kill_chain": [ + "fraud-tactics:Perform Fraud" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "e376947a-2e73-5c81-b8d5-7ac8a3ecc7a1", + "value": "Extortion" + }, + { + "description": "Also known as \"SMS Phishing\", is a form of criminal activity using social engineering techniques. SMS phishing uses cell phone text messages to deliver information and/or requests to induce people to divulge or to take action that will compromise their personal or confidential information.", + "meta": { + "kill_chain": [ + "fraud-tactics:Initiation" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "7607cd1c-c237-55c8-8dc6-d552ca28b86f", + "value": "Smishing" + }, + { + "description": "Technique used to obtain information such as personal identification numbers (PINs), passwords and other confidential data by looking over the victim's shoulder", + "meta": { + "kill_chain": [ + "fraud-tactics:Initiation" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "7304230c-a2ba-5f85-915b-21ef2df62c0a", + "value": "Shoulder Surfing" + }, + { + "description": "The process of diverting the attention of an individual or group from a desired area of focus and thereby blocking or diminishing the reception of desired information.", + "meta": { + "kill_chain": [ + "fraud-tactics:Initiation" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "cd4a2731-b691-5c91-a608-cf6c431be0ba", + "value": "Distraction" + }, + { + "description": "Authorised push payment fraud happens when fraudsters deceive consumers or individuals at a business to send them a payment under false pretences to a bank account controlled by the fraudster. As payments made using real-time payment schemes are irrevocable, the victims cannot reverse a payment once they realise they have been conned.", + "meta": { + "kill_chain": [ + "fraud-tactics:Initiation" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "056a1cf1-0c75-59cc-9d73-f3b5b70ab77e", + "value": "Push Payments" + }, + { + "description": "Unauthorised software, or authorises software run in an unauthorized manner on ATM PC - SEE FULL TERMINAL FRAUD DEFINITION", + "meta": { + "kill_chain": [ + "fraud-tactics:Initiation" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "956593f4-ff08-523f-995a-6b8c56c101be", + "value": "ATM Malware" + }, + { + "description": "A data breach is a security incident in which sensitive, protected or confidential data is copied, transmitted, viewed, stolen or used from a PC or Computer Network by an entity unauthorised to do so.", + "meta": { + "kill_chain": [ + "fraud-tactics:Initiation" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "65c6719e-9daf-578a-8d86-0f65b3054e75", + "value": "Data Breach" + }, + { + "description": "A type of malicious software designed to block access to a computer system until a sum of money is paid", + "meta": { + "kill_chain": [ + "fraud-tactics:Initiation" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "73e1bbdc-1b73-5b84-9f6c-6d13c491bb47", + "value": "Ransomware" + }, + { + "description": "A website that is not a legitimate venue, the site is designed to entice the visitor into revealing sensitive information, to download some form of malware or to purchase products that never arrive", + "meta": { + "kill_chain": [ + "fraud-tactics:Initiation" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "d86ff26f-b9c3-5668-8eef-7a178b6fe158", + "value": "Fake Website" + }, + { + "description": "Apps in mobile devices that trick users into downloading them. They may also pose as quirky and attractive apps, providing interesting services. Once installed on a mobile device, fake apps can perform a variety of malicious routines.", + "meta": { + "kill_chain": [ + "fraud-tactics:Initiation" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "8dba8e97-7af4-5e76-8dde-3be54c9e8a6c", + "value": "Fake App" + }, + { + "description": "Cyber criminals introduce skimming code on e-commerce payment card processing web pages to capture credit card and personally identifiable information and send the stolen data to a domain under their control.", + "meta": { + "kill_chain": [ + "fraud-tactics:Initiation" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "7f5886b8-06a2-51cc-8428-5cb67615e3b2", + "value": "e-Skimming" + }, + { + "description": "CPP analysis identifies Payment Terminal parking, transport, fuel, etc. locations, from where card numbers were stolen so that banks can mitigate fraud on other compromised cards.", + "meta": { + "kill_chain": [ + "fraud-tactics:Initiation" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "e89436a5-1b58-5676-a34d-d654c59a7d32", + "value": "Skimming - CPP UPT" + }, + { + "description": "Same as e-Skimming", + "meta": { + "kill_chain": [ + "fraud-tactics:Initiation" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "80165f05-1c1d-5f41-96b6-464ac065b052", + "value": "Skimming - CPP Virtual Terminal" + }, + { + "description": "Unauthorized physical ATM manipulation, preventing card from being returned to customer - SEE FULL TERMINAL FRAUD DEFINITION", + "meta": { + "kill_chain": [ + "fraud-tactics:Initiation" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "493b35ed-9415-5de5-a5cb-298f169cc4f4", + "value": "Card Trapping" + }, + { + "description": "Patch management is the best practice of upgrading existing software applications to remove any weak security patches that could be exploited by hackers. Lack of proper patching allows cyber criminals to exploit systems and networks.", + "meta": { + "kill_chain": [ + "fraud-tactics:Due Diligence" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "0e7a4057-d84b-5451-9006-5a5efe9e948a", + "value": "Lack of Patching / Security" + }, + { + "description": "Process where an information system is deployed into a Production Environed with faults, errors or vulnerabilities", + "meta": { + "kill_chain": [ + "fraud-tactics:Due Diligence" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "b132c566-7656-5b2b-b157-5734c9e30cc8", + "value": "Bad implementation" + }, + { + "description": "Implementation of a system, solution or service not according to defined and tested best practices.", + "meta": { + "kill_chain": [ + "fraud-tactics:Due Diligence" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "dd09e952-7992-5a37-a9c4-ed978d89a939", + "value": "Deployment Error" + }, + { + "description": "Merchants not following best practice procedures to avoid criminal or fraudulent activity,", + "meta": { + "kill_chain": [ + "fraud-tactics:Due Diligence" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "39a06139-ece8-5d8c-947e-cf0b4dbdccf6", + "value": "Merchant Negligence" + }, + { + "description": "Implementation of a sstem, solution or service not according to defined and tested standards", + "meta": { + "kill_chain": [ + "fraud-tactics:Due Diligence" + ], + "refs": [ + "https://www.association-secure-transactions.eu/industry-information/fraud-definitions/" + ] + }, + "uuid": "a52f8c2e-4a38-5b1b-a4b0-4710606cd86f", + "value": "Implementation not according to Standards" } ], - "version": 5 + "version": 6 } diff --git a/tools/gen_360net.py b/tools/gen_360net.py index 5d03562..cefcb5a 100755 --- a/tools/gen_360net.py +++ b/tools/gen_360net.py @@ -40,7 +40,7 @@ for actor in list_data['data']['list']: refs = [] for ref in actor['recommends']: refs.append(ref['url']) - refs = list(set(refs)) + refs = sorted(list(set(refs))) cluster = { 'value': f"{actor['name']} - {actor['code']}", 'description': actor['description'], @@ -67,9 +67,9 @@ json_galaxy = { 'uuid': "20de4abf-f000-48ec-a929-3cdc5c2f3c23", 'version': 1 } + with open(os.path.join('..', 'clusters', '360net.json'), 'r') as f: json_cluster = json.load(f) - json_cluster['values'] = clusters json_cluster['version'] += 1 diff --git a/tools/gen_east_fraud.py b/tools/gen_east_fraud.py index 3a56b75..b25e183 100644 --- a/tools/gen_east_fraud.py +++ b/tools/gen_east_fraud.py @@ -22,27 +22,35 @@ import json import requests import string import uuid +import os url = 'https://www.association-secure-transactions.eu/industry-information/fraud-definitions/' -techniques = [] - - -def write_file(self, fname, file_data): - with open(fname, 'w') as f: - json.dump(file_data, f, indent=2, sort_keys=True, ensure_ascii=False) - f.write('\n') - try: response = requests.get(url, timeout=3) except Exception: exit("ERROR: Could not download the webpage. Are you sure you have internet connectivity?") +with open(os.path.join('..', 'galaxies', 'attck4fraud.json'), 'r') as f: + tactics_options = json.load(f)['kill_chain_order']['fraud-tactics'] + +with open(os.path.join('..', 'clusters', 'attck4fraud.json'), 'r') as f: + json_data = json.load(f) +# build value/synonym based mapping to UUID allowing us to lookup what exists +mapping = {} +for cluster in json_data['values']: + mapping[cluster['value'].lower()] = cluster['uuid'] + try: + for synonym in cluster['meta']['synonyms']: + mapping[synonym.lower()] = cluster['uuid'] + except KeyError: + pass + +changed = False soup = BeautifulSoup(response.content, 'lxml') entry_content = soup.find('div', class_='entry-content') t_first = entry_content.find('table') p_start = t_first.find_previous_sibling() -# for sibling in for child in entry_content.children: if 'p' == child.name and child.find('strong'): # new category @@ -56,6 +64,48 @@ for child in entry_content.children: k, v = tr.find_all('td') except ValueError: continue # skip header row - # print(f' {k.text}: {v.text}') - print(f'{category} - {sub_category} - {k.text}') -print("ERROR : This program is not ready yet. Please ignore.") \ No newline at end of file + value = k.text.strip() + description = v.text.strip() + # check by value or synonym if cluster is already known, and skip known + existing_uuid = mapping.get(value.lower()) + if existing_uuid: + print(f'{category} # {sub_category} # {value} is already known as {existing_uuid}') + continue + # prompt as for a new cluster meta kill_chain is not known + print('Found new record:') + print(f' {category} # {sub_category} # {value} # {description}') + while True: + tactic = input(f'What is the right fraud-tactic? options are {tactics_options}\n> ') + if tactic.strip() in tactics_options: + tactic = tactic.strip() + break + elif any(option.startswith(tactic.strip()) for option in tactics_options): + for option in tactics_options: + if option.startswith(tactic.strip()): + tactic = option + print(f'Chosen: {tactic}') + found = True + break + break + else: + print("Given option is not in the list. Please input again.") + + cluster = { + 'value': value, + 'description': description, + 'uuid': str(uuid.uuid5(uuid.UUID("9319371e-2504-4128-8410-3741cebbcfd3"), value)), + 'meta': { + 'refs': ['https://www.association-secure-transactions.eu/industry-information/fraud-definitions/'], + 'kill_chain': [f'fraud-tactics:{tactic}'], + } + } + json_data['values'].append(cluster) + changed = True + +if changed: + json_data['version'] += 1 + with open(os.path.join('..', 'clusters', 'attck4fraud.json'), 'w') as f: + json.dump(json_data, f, indent=2, sort_keys=True, ensure_ascii=False) + f.write('\n') + +print("All done, please don't forget to ./jq_all_the_things.sh, commit, and then ./validate_all.sh.")