AMITT/HTML_GENERATING_CODE/.ipynb_checkpoints/AMITT_code_testbed-checkpoint.ipynb
Sara-Jayne Terp 9a20c113b3 updated code to produce Flask sql
Normalised column names, added primary index to sql etc.
2021-06-24 12:59:40 +01:00

1020 строки
37 KiB
Plaintext
Исходник Ответственный История

Этот файл содержит неоднозначные символы Юникода

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Test area for AMITT code"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"dict_keys(['df_phases', 'df_techniques', 'df_tasks', 'df_incidents', 'df_counters', 'df_detections', 'df_actortypes', 'df_resources', 'df_responsetypes', 'df_metatechniques', 'it', 'df_tactics', 'df_techniques_per_tactic', 'df_counters_per_tactic', 'phases', 'tactics', 'techniques', 'counters', 'metatechniques', 'actortypes', 'resources', 'num_tactics', 'cross_counterid_techniqueid', 'cross_counterid_resourceid', 'cross_counterid_actortypeid'])\n"
]
},
{
"data": {
"text/plain": [
"{'TA01': 'Strategic Planning',\n",
" 'TA02': 'Objective Planning',\n",
" 'TA03': 'Develop People',\n",
" 'TA04': 'Develop Networks',\n",
" 'TA05': 'Microtargeting',\n",
" 'TA06': 'Develop Content',\n",
" 'TA07': 'Channel Selection',\n",
" 'TA08': 'Pump Priming',\n",
" 'TA09': 'Exposure',\n",
" 'TA10': 'Go Physical',\n",
" 'TA11': 'Persistence',\n",
" 'TA12': 'Measure Effectiveness'}"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"import sqlite3 as sql\n",
"from generate_amitt_ttps import Amitt\n",
"\n",
"\n",
"# Generate AMITT datasets\n",
"amitt = Amitt()\n",
"\n",
"# Check which amitt variables we can see from here\n",
"print('{}'.format(vars(amitt).keys()))\n",
"vars(amitt)['tactics']"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>amitt_id</th>\n",
" <th>name</th>\n",
" <th>metatechnique</th>\n",
" <th>summary</th>\n",
" <th>playbooks</th>\n",
" <th>actortypes</th>\n",
" <th>resources_needed</th>\n",
" <th>how_found</th>\n",
" <th>references</th>\n",
" <th>incident_ids</th>\n",
" <th>tactic</th>\n",
" <th>responsetype</th>\n",
" <th>notes</th>\n",
" <th>techniques</th>\n",
" <th>longname</th>\n",
" <th>tactic_id</th>\n",
" <th>tactic_name</th>\n",
" <th>metatechnique_id</th>\n",
" <th>metatechnique_name</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>C00006</td>\n",
" <td>Charge for social media</td>\n",
" <td>M004 - friction</td>\n",
" <td>Include a paid-for privacy option, e.g. pay Fa...</td>\n",
" <td></td>\n",
" <td>A033 - social media platform owner</td>\n",
" <td></td>\n",
" <td>2019-11-workshop</td>\n",
" <td></td>\n",
" <td></td>\n",
" <td>TA01 Strategic Planning</td>\n",
" <td>D2 Deny</td>\n",
" <td></td>\n",
" <td></td>\n",
" <td>C00006 - Charge for social media</td>\n",
" <td>TA01</td>\n",
" <td>Strategic Planning</td>\n",
" <td>M004</td>\n",
" <td>- friction</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>C00006</td>\n",
" <td>Censorship</td>\n",
" <td>M005 - removal</td>\n",
" <td>Alter and/or block the publication/disseminati...</td>\n",
" <td></td>\n",
" <td>A031 - social media platform administrator</td>\n",
" <td></td>\n",
" <td>grugq</td>\n",
" <td>Taylor81</td>\n",
" <td></td>\n",
" <td>TA01 Strategic Planning</td>\n",
" <td>D2 Deny</td>\n",
" <td></td>\n",
" <td>T0009 - Create fake experts\\nT0008 - Create fa...</td>\n",
" <td>C00006 - Censorship</td>\n",
" <td>TA01</td>\n",
" <td>Strategic Planning</td>\n",
" <td>M005</td>\n",
" <td>- removal</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>C00008</td>\n",
" <td>Create shared fact-checking database</td>\n",
" <td>M006 - scoring</td>\n",
" <td>Snopes is best-known example</td>\n",
" <td></td>\n",
" <td>A007 - factchecker</td>\n",
" <td></td>\n",
" <td>2019-11-workshop\\n2019-11-search</td>\n",
" <td></td>\n",
" <td>I00049,I00050</td>\n",
" <td>TA01 Strategic Planning</td>\n",
" <td>D4 Degrade</td>\n",
" <td></td>\n",
" <td>TA01 - Strategic Planning\\nTA06 - Develop Cont...</td>\n",
" <td>C00008 - Create shared fact-checking database</td>\n",
" <td>TA01</td>\n",
" <td>Strategic Planning</td>\n",
" <td>M006</td>\n",
" <td>- scoring</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>C00009</td>\n",
" <td>Educate high profile influencers on best pract...</td>\n",
" <td>M001 - resilience</td>\n",
" <td></td>\n",
" <td></td>\n",
" <td>A016 - influencer,A006 - educator</td>\n",
" <td></td>\n",
" <td>2019-11-workshop</td>\n",
" <td></td>\n",
" <td></td>\n",
" <td>TA02 Objective Planning</td>\n",
" <td>D2 Deny</td>\n",
" <td></td>\n",
" <td>TA08 - Pump Priming\\nT0010 - Cultivate ignoran...</td>\n",
" <td>C00009 - Educate high profile influencers on b...</td>\n",
" <td>TA02</td>\n",
" <td>Objective Planning</td>\n",
" <td>M001</td>\n",
" <td>- resilience</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>C00010</td>\n",
" <td>Enhanced privacy regulation for social media</td>\n",
" <td>M004 - friction</td>\n",
" <td>Privacy standards</td>\n",
" <td></td>\n",
" <td>A020 - policy maker</td>\n",
" <td></td>\n",
" <td>2019-11-workshop</td>\n",
" <td></td>\n",
" <td></td>\n",
" <td>TA01 Strategic Planning</td>\n",
" <td>D2 Deny</td>\n",
" <td></td>\n",
" <td>TA05 - Microtargeting\\nT00018 - Paid targeted ads</td>\n",
" <td>C00010 - Enhanced privacy regulation for socia...</td>\n",
" <td>TA01</td>\n",
" <td>Strategic Planning</td>\n",
" <td>M004</td>\n",
" <td>- friction</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>135</th>\n",
" <td>C00219</td>\n",
" <td>Add metadata to content thats out of the cont...</td>\n",
" <td>M003 - daylight</td>\n",
" <td>Steganography. Adding date, signatures etc to ...</td>\n",
" <td>Add date and source to images</td>\n",
" <td></td>\n",
" <td></td>\n",
" <td>grugq</td>\n",
" <td></td>\n",
" <td></td>\n",
" <td>TA06 Develop Content</td>\n",
" <td>D4 Degrade</td>\n",
" <td></td>\n",
" <td>T0024 - Create fake videos and images\\nT0026 -...</td>\n",
" <td>C00219 - Add metadata to content thats out of...</td>\n",
" <td>TA06</td>\n",
" <td>Develop Content</td>\n",
" <td>M003</td>\n",
" <td>- daylight</td>\n",
" </tr>\n",
" <tr>\n",
" <th>136</th>\n",
" <td>C00220</td>\n",
" <td>Develop a monitoring and intelligence plan</td>\n",
" <td>M007 - metatechnique</td>\n",
" <td></td>\n",
" <td></td>\n",
" <td></td>\n",
" <td></td>\n",
" <td>Counters cleanup</td>\n",
" <td></td>\n",
" <td></td>\n",
" <td>TA01 Strategic Planning</td>\n",
" <td>D3 Disrupt</td>\n",
" <td></td>\n",
" <td></td>\n",
" <td>C00220 - Develop a monitoring and intelligence...</td>\n",
" <td>TA01</td>\n",
" <td>Strategic Planning</td>\n",
" <td>M007</td>\n",
" <td>- metatechnique</td>\n",
" </tr>\n",
" <tr>\n",
" <th>137</th>\n",
" <td>C00221</td>\n",
" <td>Run a disinformation red team, and design miti...</td>\n",
" <td>M007 - metatechnique</td>\n",
" <td>Include PACE plans - Primary, Alternate, Conti...</td>\n",
" <td></td>\n",
" <td></td>\n",
" <td></td>\n",
" <td>Counters cleanup</td>\n",
" <td></td>\n",
" <td></td>\n",
" <td>TA01 Strategic Planning</td>\n",
" <td>D3 Disrupt</td>\n",
" <td></td>\n",
" <td></td>\n",
" <td>C00221 - Run a disinformation red team, and de...</td>\n",
" <td>TA01</td>\n",
" <td>Strategic Planning</td>\n",
" <td>M007</td>\n",
" <td>- metatechnique</td>\n",
" </tr>\n",
" <tr>\n",
" <th>138</th>\n",
" <td>C00222</td>\n",
" <td>Tabletop simulations</td>\n",
" <td>M007 - metatechnique</td>\n",
" <td></td>\n",
" <td></td>\n",
" <td></td>\n",
" <td></td>\n",
" <td></td>\n",
" <td></td>\n",
" <td></td>\n",
" <td>TA02 Objective Planning</td>\n",
" <td>D3 Disrupt</td>\n",
" <td></td>\n",
" <td></td>\n",
" <td>C00222 - Tabletop simulations</td>\n",
" <td>TA02</td>\n",
" <td>Objective Planning</td>\n",
" <td>M007</td>\n",
" <td>- metatechnique</td>\n",
" </tr>\n",
" <tr>\n",
" <th>139</th>\n",
" <td>C00223</td>\n",
" <td>Strengthen Trust in social media platforms</td>\n",
" <td>M001 - resilience</td>\n",
" <td></td>\n",
" <td></td>\n",
" <td></td>\n",
" <td></td>\n",
" <td></td>\n",
" <td></td>\n",
" <td></td>\n",
" <td>TA01 Strategic Planning</td>\n",
" <td>D3 Disrupt</td>\n",
" <td></td>\n",
" <td></td>\n",
" <td>C00223 - Strengthen Trust in social media plat...</td>\n",
" <td>TA01</td>\n",
" <td>Strategic Planning</td>\n",
" <td>M001</td>\n",
" <td>- resilience</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>140 rows × 19 columns</p>\n",
"</div>"
],
"text/plain": [
" amitt_id name \\\n",
"0 C00006 Charge for social media \n",
"8 C00006 Censorship \n",
"1 C00008 Create shared fact-checking database \n",
"2 C00009 Educate high profile influencers on best pract... \n",
"3 C00010 Enhanced privacy regulation for social media \n",
".. ... ... \n",
"135 C00219 Add metadata to content thats out of the cont... \n",
"136 C00220 Develop a monitoring and intelligence plan \n",
"137 C00221 Run a disinformation red team, and design miti... \n",
"138 C00222 Tabletop simulations \n",
"139 C00223 Strengthen Trust in social media platforms \n",
"\n",
" metatechnique summary \\\n",
"0 M004 - friction Include a paid-for privacy option, e.g. pay Fa... \n",
"8 M005 - removal Alter and/or block the publication/disseminati... \n",
"1 M006 - scoring Snopes is best-known example \n",
"2 M001 - resilience \n",
"3 M004 - friction Privacy standards \n",
".. ... ... \n",
"135 M003 - daylight Steganography. Adding date, signatures etc to ... \n",
"136 M007 - metatechnique \n",
"137 M007 - metatechnique Include PACE plans - Primary, Alternate, Conti... \n",
"138 M007 - metatechnique \n",
"139 M001 - resilience \n",
"\n",
" playbooks \\\n",
"0 \n",
"8 \n",
"1 \n",
"2 \n",
"3 \n",
".. ... \n",
"135 Add date and source to images \n",
"136 \n",
"137 \n",
"138 \n",
"139 \n",
"\n",
" actortypes resources_needed \\\n",
"0 A033 - social media platform owner \n",
"8 A031 - social media platform administrator \n",
"1 A007 - factchecker \n",
"2 A016 - influencer,A006 - educator \n",
"3 A020 - policy maker \n",
".. ... ... \n",
"135 \n",
"136 \n",
"137 \n",
"138 \n",
"139 \n",
"\n",
" how_found references incident_ids \\\n",
"0 2019-11-workshop \n",
"8 grugq Taylor81 \n",
"1 2019-11-workshop\\n2019-11-search I00049,I00050 \n",
"2 2019-11-workshop \n",
"3 2019-11-workshop \n",
".. ... ... ... \n",
"135 grugq \n",
"136 Counters cleanup \n",
"137 Counters cleanup \n",
"138 \n",
"139 \n",
"\n",
" tactic responsetype notes \\\n",
"0 TA01 Strategic Planning D2 Deny \n",
"8 TA01 Strategic Planning D2 Deny \n",
"1 TA01 Strategic Planning D4 Degrade \n",
"2 TA02 Objective Planning D2 Deny \n",
"3 TA01 Strategic Planning D2 Deny \n",
".. ... ... ... \n",
"135 TA06 Develop Content D4 Degrade \n",
"136 TA01 Strategic Planning D3 Disrupt \n",
"137 TA01 Strategic Planning D3 Disrupt \n",
"138 TA02 Objective Planning D3 Disrupt \n",
"139 TA01 Strategic Planning D3 Disrupt \n",
"\n",
" techniques \\\n",
"0 \n",
"8 T0009 - Create fake experts\\nT0008 - Create fa... \n",
"1 TA01 - Strategic Planning\\nTA06 - Develop Cont... \n",
"2 TA08 - Pump Priming\\nT0010 - Cultivate ignoran... \n",
"3 TA05 - Microtargeting\\nT00018 - Paid targeted ads \n",
".. ... \n",
"135 T0024 - Create fake videos and images\\nT0026 -... \n",
"136 \n",
"137 \n",
"138 \n",
"139 \n",
"\n",
" longname tactic_id \\\n",
"0 C00006 - Charge for social media TA01 \n",
"8 C00006 - Censorship TA01 \n",
"1 C00008 - Create shared fact-checking database TA01 \n",
"2 C00009 - Educate high profile influencers on b... TA02 \n",
"3 C00010 - Enhanced privacy regulation for socia... TA01 \n",
".. ... ... \n",
"135 C00219 - Add metadata to content thats out of... TA06 \n",
"136 C00220 - Develop a monitoring and intelligence... TA01 \n",
"137 C00221 - Run a disinformation red team, and de... TA01 \n",
"138 C00222 - Tabletop simulations TA02 \n",
"139 C00223 - Strengthen Trust in social media plat... TA01 \n",
"\n",
" tactic_name metatechnique_id metatechnique_name \n",
"0 Strategic Planning M004 - friction \n",
"8 Strategic Planning M005 - removal \n",
"1 Strategic Planning M006 - scoring \n",
"2 Objective Planning M001 - resilience \n",
"3 Strategic Planning M004 - friction \n",
".. ... ... ... \n",
"135 Develop Content M003 - daylight \n",
"136 Strategic Planning M007 - metatechnique \n",
"137 Strategic Planning M007 - metatechnique \n",
"138 Objective Planning M007 - metatechnique \n",
"139 Strategic Planning M001 - resilience \n",
"\n",
"[140 rows x 19 columns]"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"amitt.df_counters"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>amitt_id</th>\n",
" <th>tactic_id</th>\n",
" <th>name</th>\n",
" <th>summary</th>\n",
" <th>id</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>T0001</td>\n",
" <td>TA01</td>\n",
" <td>5Ds (dismiss, distort, distract, dismay, divide)</td>\n",
" <td>Nimmo's \"4Ds of propaganda\": dismiss, distort,...</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>T0002</td>\n",
" <td>TA01</td>\n",
" <td>Facilitate State Propaganda</td>\n",
" <td>Organize citizens around pro-state messaging. ...</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>T0003</td>\n",
" <td>TA01</td>\n",
" <td>Leverage Existing Narratives</td>\n",
" <td>Use or adapt existing narrative themes, where ...</td>\n",
" <td>3</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>T0004</td>\n",
" <td>TA01</td>\n",
" <td>Competing Narratives</td>\n",
" <td>Advance competing narratives connected to same...</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>T0005</td>\n",
" <td>TA02</td>\n",
" <td>Center of Gravity Analysis</td>\n",
" <td>Recon/research to identify \"the source of powe...</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>59</th>\n",
" <td>T0060</td>\n",
" <td>TA11</td>\n",
" <td>Continue to amplify</td>\n",
" <td>continue narrative or message amplification af...</td>\n",
" <td>60</td>\n",
" </tr>\n",
" <tr>\n",
" <th>60</th>\n",
" <td>T0061</td>\n",
" <td>TA10</td>\n",
" <td>Sell merchandising</td>\n",
" <td>Sell hats, t-shirts, flags and other branded c...</td>\n",
" <td>61</td>\n",
" </tr>\n",
" <tr>\n",
" <th>61</th>\n",
" <td>T0062</td>\n",
" <td>TA12</td>\n",
" <td>Behaviour changes</td>\n",
" <td></td>\n",
" <td>62</td>\n",
" </tr>\n",
" <tr>\n",
" <th>62</th>\n",
" <td>T0063</td>\n",
" <td>TA12</td>\n",
" <td>Message reach</td>\n",
" <td></td>\n",
" <td>63</td>\n",
" </tr>\n",
" <tr>\n",
" <th>63</th>\n",
" <td>T0064</td>\n",
" <td>TA12</td>\n",
" <td>Social media engagement</td>\n",
" <td></td>\n",
" <td>64</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>64 rows × 5 columns</p>\n",
"</div>"
],
"text/plain": [
" amitt_id tactic_id name \\\n",
"0 T0001 TA01 5Ds (dismiss, distort, distract, dismay, divide) \n",
"1 T0002 TA01 Facilitate State Propaganda \n",
"2 T0003 TA01 Leverage Existing Narratives \n",
"3 T0004 TA01 Competing Narratives \n",
"4 T0005 TA02 Center of Gravity Analysis \n",
".. ... ... ... \n",
"59 T0060 TA11 Continue to amplify \n",
"60 T0061 TA10 Sell merchandising \n",
"61 T0062 TA12 Behaviour changes \n",
"62 T0063 TA12 Message reach \n",
"63 T0064 TA12 Social media engagement \n",
"\n",
" summary id \n",
"0 Nimmo's \"4Ds of propaganda\": dismiss, distort,... 1 \n",
"1 Organize citizens around pro-state messaging. ... 2 \n",
"2 Use or adapt existing narrative themes, where ... 3 \n",
"3 Advance competing narratives connected to same... 4 \n",
"4 Recon/research to identify \"the source of powe... 5 \n",
".. ... .. \n",
"59 continue narrative or message amplification af... 60 \n",
"60 Sell hats, t-shirts, flags and other branded c... 61 \n",
"61 62 \n",
"62 63 \n",
"63 64 \n",
"\n",
"[64 rows x 5 columns]"
]
},
"execution_count": 44,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Generate minimal sqlite database from the Amitt variables\n",
"conn = sql.connect('test_amitt_sqlite.db')\n",
"\n",
"def add_table(dataframe, tablename, columns): \n",
" # Create sql table\n",
" colnames = ', '.join(['{} TEXT NOT NULL'.format(col) for col in columns])\n",
" conn.execute(\"DROP TABLE IF EXISTS {}\".format(tablename))\n",
" conn.execute('''CREATE TABLE {} (id INTEGER PRIMARY KEY AUTOINCREMENT, {});'''.format(tablename, colnames))\n",
" #populate table from dataframe\n",
" newtable = dataframe[columns].copy().applymap(str)\n",
" newtable['id'] = range(1,len(newtable)+1)\n",
" newtable.to_sql(tablename, conn, index=False, if_exists='append')\n",
" conn.commit()\n",
" return newtable\n",
"\n",
"#newtable = add_table(amitt.df_actortypes, 'actor_type', ['amitt_id', 'sector_id', 'framework_id', 'name', 'summary'])\n",
"# counter\n",
"# dataset\n",
"# framework\n",
"# incident\n",
"# metatechnique\n",
"newtable = add_table(amitt.df_phases, 'phase', ['amitt_id', 'name', 'rank', 'summary'])\n",
"# playbook\n",
"# reference\n",
"# response_type\n",
"# sector\n",
"newtable = add_table(amitt.df_tactics, 'tactic', ['amitt_id', 'phase_id', 'name', 'rank', 'summary'])\n",
"newtable = add_table(amitt.df_tasks, 'task', ['amitt_id', 'tactic_id', 'framework_id', 'name', 'summary'])\n",
"newtable = add_table(amitt.df_techniques, 'technique', ['amitt_id', 'tactic_id', 'name', 'summary'])\n",
"# techniques_counters\n",
"\n",
"conn.execute(\"DROP TABLE IF EXISTS {}\".format('user'))\n",
"conn.execute('''CREATE TABLE user (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL UNIQUE, password TEXT NOT NULL);''')\n",
"\n",
"conn.close()\n",
"newtable"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"df_phases loaded\n",
"df_techniques loaded\n",
"df_tasks loaded\n",
"df_incidents loaded\n",
"df_counters loaded\n",
"df_detections loaded\n",
"df_actors loaded\n",
"df_resources loaded\n",
"df_responsetypes loaded\n",
"df_metatechniques loaded\n",
"it loaded\n",
"df_tactics loaded\n",
"df_techniques_per_tactic loaded\n",
"df_counters_per_tactic loaded\n",
"phases not loaded\n",
"tactics not loaded\n",
"techniques not loaded\n",
"counters not loaded\n",
"metatechniques not loaded\n",
"actors not loaded\n",
"resources not loaded\n",
"num_tactics not loaded\n",
"cross_counterid_techniqueid loaded\n",
"cross_counterid_resourceid loaded\n",
"cross_counterid_actorid loaded\n"
]
}
],
"source": [
"# Generate full sqlite database from the Amitt variables\n",
"conn = sql.connect('amitt_sqlite.db')\n",
"for tablename, table in vars(amitt).items():\n",
" if type(table) == pd.core.frame.DataFrame:\n",
" table.applymap(str).to_sql(tablename, conn)\n",
" print('{} loaded'.format(tablename))\n",
" else:\n",
" print('{} not loaded'.format(tablename))"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>actor_id</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>C00006</td>\n",
" <td>A033</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>C00008</td>\n",
" <td>A007</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>C00009</td>\n",
" <td>A016</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>C00009</td>\n",
" <td>A006</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>C00010</td>\n",
" <td>A020</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>135</th>\n",
" <td>C00219</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>136</th>\n",
" <td>C00220</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>137</th>\n",
" <td>C00221</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>138</th>\n",
" <td>C00222</td>\n",
" <td></td>\n",
" </tr>\n",
" <tr>\n",
" <th>139</th>\n",
" <td>C00223</td>\n",
" <td></td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>166 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" id actor_id\n",
"0 C00006 A033\n",
"1 C00008 A007\n",
"2 C00009 A016\n",
"2 C00009 A006\n",
"3 C00010 A020\n",
".. ... ...\n",
"135 C00219 \n",
"136 C00220 \n",
"137 C00221 \n",
"138 C00222 \n",
"139 C00223 \n",
"\n",
"[166 rows x 2 columns]"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"amitt.cross_counterid_actorid"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>id</th>\n",
" <th>technique_id</th>\n",
" <th>Weight</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>C00008</td>\n",
" <td>TA01</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>C00008</td>\n",
" <td>TA06</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>C00008</td>\n",
" <td>TA08</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>C00008</td>\n",
" <td>T0006</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>C00008</td>\n",
" <td>T0009</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>134</th>\n",
" <td>C00216</td>\n",
" <td>T0018</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>134</th>\n",
" <td>C00216</td>\n",
" <td>T0057</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>135</th>\n",
" <td>C00219</td>\n",
" <td>T0024</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>135</th>\n",
" <td>C00219</td>\n",
" <td>T0026</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>135</th>\n",
" <td>C00219</td>\n",
" <td>T0025</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>717 rows × 3 columns</p>\n",
"</div>"
],
"text/plain": [
" id technique_id Weight\n",
"1 C00008 TA01 1\n",
"1 C00008 TA06 1\n",
"1 C00008 TA08 1\n",
"1 C00008 T0006 1\n",
"1 C00008 T0009 1\n",
".. ... ... ...\n",
"134 C00216 T0018 1\n",
"134 C00216 T0057 1\n",
"135 C00219 T0024 1\n",
"135 C00219 T0026 1\n",
"135 C00219 T0025 1\n",
"\n",
"[717 rows x 3 columns]"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ct = amitt.cross_counterid_techniqueid\n",
"ct['Weight'] = 1\n",
"ct = ct[ct['technique_id'].str.len() > 0]\n",
"ct.to_csv('../visualisations/cross_counterid_techniqueid.csv', index=False, header=['Source','Target', 'Weight'])\n",
"ct"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}