mirror of
https://github.com/DISARMFoundation/DISARMframeworks.git
synced 2025-05-15 05:02:29 -04:00
1570 lines
64 KiB
Text
1570 lines
64 KiB
Text
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"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>Unnamed: 0</th>\n",
|
||
" <th>DISARM Phase</th>\n",
|
||
" <th>DISARM Tactic</th>\n",
|
||
" <th>DISARM Technique</th>\n",
|
||
" <th>DISARM Subtechnique</th>\n",
|
||
" <th>Description</th>\n",
|
||
" <th>DISARM ID</th>\n",
|
||
" <th>Feedback from EEAS</th>\n",
|
||
" <th>Action to Do</th>\n",
|
||
" <th>Action Taken</th>\n",
|
||
" <th>Where did it come from?</th>\n",
|
||
" <th>Where from more info</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>1</td>\n",
|
||
" <td>Plan</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Envision the desired outcome. Lay out effectiv...</td>\n",
|
||
" <td>P01</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>AMITT</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>36</td>\n",
|
||
" <td>Prepare</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Activities conducted before execution to impro...</td>\n",
|
||
" <td>P02</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>126</td>\n",
|
||
" <td>Execute</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Run the action, from initial exposure to wrap-...</td>\n",
|
||
" <td>P03</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>263</td>\n",
|
||
" <td>Assess</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Assess effectiveness of action, for use in fut...</td>\n",
|
||
" <td>P04</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>7</td>\n",
|
||
" <td>Plan</td>\n",
|
||
" <td>Plan Objectives</td>\n",
|
||
" <td>Dismiss</td>\n",
|
||
" <td>Discredit Credible Sources</td>\n",
|
||
" <td>Plan to delegitimize the media landscape and d...</td>\n",
|
||
" <td>ST0001</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>AMITT</td>\n",
|
||
" <td>T0067 Plan to Discredit Credible Sources</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",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>272</th>\n",
|
||
" <td>184</td>\n",
|
||
" <td>Execute</td>\n",
|
||
" <td>Maximize Exposure</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Maximize exposure of the target audience to in...</td>\n",
|
||
" <td>TA12</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>273</th>\n",
|
||
" <td>204</td>\n",
|
||
" <td>Execute</td>\n",
|
||
" <td>Drive Online Harms</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Actions taken by an influence operation to har...</td>\n",
|
||
" <td>TA13</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>274</th>\n",
|
||
" <td>221</td>\n",
|
||
" <td>Execute</td>\n",
|
||
" <td>Drive Offline Activity</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Move incident/campaign from online to offline....</td>\n",
|
||
" <td>TA14</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>275</th>\n",
|
||
" <td>235</td>\n",
|
||
" <td>Execute</td>\n",
|
||
" <td>Persist in the Information Space</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Persist in the Information Space refers to tak...</td>\n",
|
||
" <td>TA15</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>276</th>\n",
|
||
" <td>264</td>\n",
|
||
" <td>Assess</td>\n",
|
||
" <td>Assess Effectiveness</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>TA16</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>277 rows × 12 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" Unnamed: 0 DISARM Phase DISARM Tactic \\\n",
|
||
"0 1 Plan NaN \n",
|
||
"1 36 Prepare NaN \n",
|
||
"2 126 Execute NaN \n",
|
||
"3 263 Assess NaN \n",
|
||
"4 7 Plan Plan Objectives \n",
|
||
".. ... ... ... \n",
|
||
"272 184 Execute Maximize Exposure \n",
|
||
"273 204 Execute Drive Online Harms \n",
|
||
"274 221 Execute Drive Offline Activity \n",
|
||
"275 235 Execute Persist in the Information Space \n",
|
||
"276 264 Assess Assess Effectiveness \n",
|
||
"\n",
|
||
" DISARM Technique DISARM Subtechnique \\\n",
|
||
"0 NaN NaN \n",
|
||
"1 NaN NaN \n",
|
||
"2 NaN NaN \n",
|
||
"3 NaN NaN \n",
|
||
"4 Dismiss Discredit Credible Sources \n",
|
||
".. ... ... \n",
|
||
"272 NaN NaN \n",
|
||
"273 NaN NaN \n",
|
||
"274 NaN NaN \n",
|
||
"275 NaN NaN \n",
|
||
"276 NaN NaN \n",
|
||
"\n",
|
||
" Description DISARM ID \\\n",
|
||
"0 Envision the desired outcome. Lay out effectiv... P01 \n",
|
||
"1 Activities conducted before execution to impro... P02 \n",
|
||
"2 Run the action, from initial exposure to wrap-... P03 \n",
|
||
"3 Assess effectiveness of action, for use in fut... P04 \n",
|
||
"4 Plan to delegitimize the media landscape and d... ST0001 \n",
|
||
".. ... ... \n",
|
||
"272 Maximize exposure of the target audience to in... TA12 \n",
|
||
"273 Actions taken by an influence operation to har... TA13 \n",
|
||
"274 Move incident/campaign from online to offline.... TA14 \n",
|
||
"275 Persist in the Information Space refers to tak... TA15 \n",
|
||
"276 NaN TA16 \n",
|
||
"\n",
|
||
" Feedback from EEAS Action to Do Action Taken Where did it come from? \\\n",
|
||
"0 NaN NaN NaN AMITT \n",
|
||
"1 NaN NaN NaN NaN \n",
|
||
"2 NaN NaN NaN NaN \n",
|
||
"3 NaN NaN NaN NaN \n",
|
||
"4 NaN NaN NaN AMITT \n",
|
||
".. ... ... ... ... \n",
|
||
"272 NaN NaN NaN NaN \n",
|
||
"273 NaN NaN NaN NaN \n",
|
||
"274 NaN NaN NaN NaN \n",
|
||
"275 NaN NaN NaN NaN \n",
|
||
"276 NaN NaN NaN NaN \n",
|
||
"\n",
|
||
" Where from more info \n",
|
||
"0 NaN \n",
|
||
"1 NaN \n",
|
||
"2 NaN \n",
|
||
"3 NaN \n",
|
||
"4 T0067 Plan to Discredit Credible Sources \n",
|
||
".. ... \n",
|
||
"272 NaN \n",
|
||
"273 NaN \n",
|
||
"274 NaN \n",
|
||
"275 NaN \n",
|
||
"276 NaN \n",
|
||
"\n",
|
||
"[277 rows x 12 columns]"
|
||
]
|
||
},
|
||
"execution_count": 1,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"import pandas as pd\n",
|
||
"\n",
|
||
"# make sure we didn't miss anything in mike's original sheet\n",
|
||
"def check_diffs(col1, col2):\n",
|
||
" xx = col1.value_counts().index\n",
|
||
" yy = col2.value_counts().index\n",
|
||
" print('lengths are: {} and {}'.format(len(xx), len(yy)))\n",
|
||
" print('first list: {}'.format(xx))\n",
|
||
" print('second list: {}'.format(yy))\n",
|
||
" print('set difference: {}'.format(set(xx).difference(set(yy))))\n",
|
||
"\n",
|
||
"def check_ids(df, col='DISARM ID'):\n",
|
||
" print('null ids: {}'.format(df[df[col].isnull()]))\n",
|
||
" vc = df[col].value_counts().reset_index()\n",
|
||
" print('repeated ids: {}'.format(vc[vc[col]>1]))\n",
|
||
" return\n",
|
||
"\n",
|
||
"df = pd.read_csv('DISARM Merged (Internal) - DISARM Framework Merged.csv')\n",
|
||
"df"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 2,
|
||
"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>DISARM Phase</th>\n",
|
||
" <th>DISARM Tactic</th>\n",
|
||
" <th>Description</th>\n",
|
||
" <th>DISARM ID</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>Plan</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Envision the desired outcome. Lay out effectiv...</td>\n",
|
||
" <td>P01</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>Prepare</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Activities conducted before execution to impro...</td>\n",
|
||
" <td>P02</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>Execute</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Run the action, from initial exposure to wrap-...</td>\n",
|
||
" <td>P03</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>Assess</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Assess effectiveness of action, for use in fut...</td>\n",
|
||
" <td>P04</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" DISARM Phase DISARM Tactic \\\n",
|
||
"0 Plan NaN \n",
|
||
"1 Prepare NaN \n",
|
||
"2 Execute NaN \n",
|
||
"3 Assess NaN \n",
|
||
"\n",
|
||
" Description DISARM ID \n",
|
||
"0 Envision the desired outcome. Lay out effectiv... P01 \n",
|
||
"1 Activities conducted before execution to impro... P02 \n",
|
||
"2 Run the action, from initial exposure to wrap-... P03 \n",
|
||
"3 Assess effectiveness of action, for use in fut... P04 "
|
||
]
|
||
},
|
||
"execution_count": 2,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"phases = df[['DISARM Phase', 'DISARM Tactic', 'Description', 'DISARM ID']]\n",
|
||
"phases = phases[phases['DISARM Tactic'].isnull()]\n",
|
||
"phases"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"lengths are: 4 and 4\n",
|
||
"first list: Index(['Prepare', 'Execute', 'Plan', 'Assess'], dtype='object')\n",
|
||
"second list: Index(['Execute', 'Prepare', 'Plan', 'Assess'], dtype='object')\n",
|
||
"set difference: set()\n",
|
||
"null ids: Empty DataFrame\n",
|
||
"Columns: [DISARM Phase, DISARM Tactic, Description, DISARM ID]\n",
|
||
"Index: []\n",
|
||
"repeated ids: Empty DataFrame\n",
|
||
"Columns: [index, DISARM ID]\n",
|
||
"Index: []\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"check_diffs(phases['DISARM Phase'], df['DISARM Phase'])\n",
|
||
"check_ids(phases)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"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>DISARM Tactic</th>\n",
|
||
" <th>DISARM Technique</th>\n",
|
||
" <th>Description</th>\n",
|
||
" <th>DISARM ID</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>261</th>\n",
|
||
" <td>Plan Strategy</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Define the desired end state, i.e. the set of ...</td>\n",
|
||
" <td>TA01</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>262</th>\n",
|
||
" <td>Plan Objectives</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Set clearly defined, measurable, and achievabl...</td>\n",
|
||
" <td>TA02</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>263</th>\n",
|
||
" <td>Target Audience Analysis</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Identifying and analyzing the target audience ...</td>\n",
|
||
" <td>TA03</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>264</th>\n",
|
||
" <td>Develop Narratives</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>The promotion of beneficial master narratives ...</td>\n",
|
||
" <td>TA04</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>265</th>\n",
|
||
" <td>Develop Content</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>TA05</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>266</th>\n",
|
||
" <td>Establish Social Assets</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Establishing information assets generates mess...</td>\n",
|
||
" <td>TA06</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>267</th>\n",
|
||
" <td>Establish Legitimacy</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>TA07</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>268</th>\n",
|
||
" <td>Microtarget</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Target very specific populations of people</td>\n",
|
||
" <td>TA08</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>269</th>\n",
|
||
" <td>Select Channels and Affordances</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Selecting platforms and affordances assesses w...</td>\n",
|
||
" <td>TA09</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>270</th>\n",
|
||
" <td>Conduct Pump Priming</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Release content on a targetted small scale, pr...</td>\n",
|
||
" <td>TA10</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>271</th>\n",
|
||
" <td>Deliver Content</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Release content to general public or larger po...</td>\n",
|
||
" <td>TA11</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>272</th>\n",
|
||
" <td>Maximize Exposure</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Maximize exposure of the target audience to in...</td>\n",
|
||
" <td>TA12</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>273</th>\n",
|
||
" <td>Drive Online Harms</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Actions taken by an influence operation to har...</td>\n",
|
||
" <td>TA13</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>274</th>\n",
|
||
" <td>Drive Offline Activity</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Move incident/campaign from online to offline....</td>\n",
|
||
" <td>TA14</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>275</th>\n",
|
||
" <td>Persist in the Information Space</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Persist in the Information Space refers to tak...</td>\n",
|
||
" <td>TA15</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>276</th>\n",
|
||
" <td>Assess Effectiveness</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>TA16</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" DISARM Tactic DISARM Technique \\\n",
|
||
"261 Plan Strategy NaN \n",
|
||
"262 Plan Objectives NaN \n",
|
||
"263 Target Audience Analysis NaN \n",
|
||
"264 Develop Narratives NaN \n",
|
||
"265 Develop Content NaN \n",
|
||
"266 Establish Social Assets NaN \n",
|
||
"267 Establish Legitimacy NaN \n",
|
||
"268 Microtarget NaN \n",
|
||
"269 Select Channels and Affordances NaN \n",
|
||
"270 Conduct Pump Priming NaN \n",
|
||
"271 Deliver Content NaN \n",
|
||
"272 Maximize Exposure NaN \n",
|
||
"273 Drive Online Harms NaN \n",
|
||
"274 Drive Offline Activity NaN \n",
|
||
"275 Persist in the Information Space NaN \n",
|
||
"276 Assess Effectiveness NaN \n",
|
||
"\n",
|
||
" Description DISARM ID \n",
|
||
"261 Define the desired end state, i.e. the set of ... TA01 \n",
|
||
"262 Set clearly defined, measurable, and achievabl... TA02 \n",
|
||
"263 Identifying and analyzing the target audience ... TA03 \n",
|
||
"264 The promotion of beneficial master narratives ... TA04 \n",
|
||
"265 NaN TA05 \n",
|
||
"266 Establishing information assets generates mess... TA06 \n",
|
||
"267 NaN TA07 \n",
|
||
"268 Target very specific populations of people TA08 \n",
|
||
"269 Selecting platforms and affordances assesses w... TA09 \n",
|
||
"270 Release content on a targetted small scale, pr... TA10 \n",
|
||
"271 Release content to general public or larger po... TA11 \n",
|
||
"272 Maximize exposure of the target audience to in... TA12 \n",
|
||
"273 Actions taken by an influence operation to har... TA13 \n",
|
||
"274 Move incident/campaign from online to offline.... TA14 \n",
|
||
"275 Persist in the Information Space refers to tak... TA15 \n",
|
||
"276 NaN TA16 "
|
||
]
|
||
},
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"tactics = df[['DISARM Tactic', 'DISARM Technique', 'Description', 'DISARM ID']]#['DISARM Tactic'].notnull()\n",
|
||
"tactics = tactics[(tactics['DISARM Tactic'].notnull()) & (tactics['DISARM Technique'].isnull())]\n",
|
||
"tactics"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"metadata": {
|
||
"scrolled": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"lengths are: 16 and 16\n",
|
||
"first list: Index(['Drive Offline Activity', 'Plan Objectives', 'Conduct Pump Priming',\n",
|
||
" 'Maximize Exposure', 'Target Audience Analysis', 'Microtarget',\n",
|
||
" 'Establish Social Assets', 'Establish Legitimacy', 'Deliver Content',\n",
|
||
" 'Select Channels and Affordances', 'Plan Strategy', 'Develop Content',\n",
|
||
" 'Drive Online Harms', 'Persist in the Information Space',\n",
|
||
" 'Develop Narratives', 'Assess Effectiveness'],\n",
|
||
" dtype='object')\n",
|
||
"second list: Index(['Develop Content', 'Establish Social Assets',\n",
|
||
" 'Select Channels and Affordances', 'Persist in the Information Space',\n",
|
||
" 'Target Audience Analysis', 'Maximize Exposure', 'Drive Online Harms',\n",
|
||
" 'Establish Legitimacy', 'Drive Offline Activity',\n",
|
||
" 'Assess Effectiveness', 'Deliver Content', 'Develop Narratives',\n",
|
||
" 'Plan Objectives', 'Microtarget', 'Conduct Pump Priming',\n",
|
||
" 'Plan Strategy'],\n",
|
||
" dtype='object')\n",
|
||
"set difference: set()\n",
|
||
"null ids: Empty DataFrame\n",
|
||
"Columns: [DISARM Tactic, DISARM Technique, Description, DISARM ID]\n",
|
||
"Index: []\n",
|
||
"repeated ids: Empty DataFrame\n",
|
||
"Columns: [index, DISARM ID]\n",
|
||
"Index: []\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"check_diffs(tactics['DISARM Tactic'], df['DISARM Tactic'])\n",
|
||
"check_ids(tactics)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"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>DISARM Technique</th>\n",
|
||
" <th>DISARM Subtechnique</th>\n",
|
||
" <th>Description</th>\n",
|
||
" <th>DISARM ID</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>164</th>\n",
|
||
" <td>Determine Target Audiences</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>T0001</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>165</th>\n",
|
||
" <td>Determine Strategic Ends</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>T0002</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>166</th>\n",
|
||
" <td>Dismiss</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Push back against criticism by dismissing your...</td>\n",
|
||
" <td>T0003</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>167</th>\n",
|
||
" <td>Distort</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Twist the narrative. Take information, or arti...</td>\n",
|
||
" <td>T0004</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>168</th>\n",
|
||
" <td>Distract</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Shift attention to a different narrative or ac...</td>\n",
|
||
" <td>T0005</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>256</th>\n",
|
||
" <td>Exploit TOS/Content Moderation</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>T0093</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>257</th>\n",
|
||
" <td>Play the long game</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Play the long game refers to two phenomena: 1....</td>\n",
|
||
" <td>T0094</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>258</th>\n",
|
||
" <td>Measure Performance</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>T0095</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>259</th>\n",
|
||
" <td>Measure Effectiveness</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>T0096</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>260</th>\n",
|
||
" <td>Measure Effectiveness Indicators (or KPIs)</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>T0097</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>97 rows × 4 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" DISARM Technique DISARM Subtechnique \\\n",
|
||
"164 Determine Target Audiences NaN \n",
|
||
"165 Determine Strategic Ends NaN \n",
|
||
"166 Dismiss NaN \n",
|
||
"167 Distort NaN \n",
|
||
"168 Distract NaN \n",
|
||
".. ... ... \n",
|
||
"256 Exploit TOS/Content Moderation NaN \n",
|
||
"257 Play the long game NaN \n",
|
||
"258 Measure Performance NaN \n",
|
||
"259 Measure Effectiveness NaN \n",
|
||
"260 Measure Effectiveness Indicators (or KPIs) NaN \n",
|
||
"\n",
|
||
" Description DISARM ID \n",
|
||
"164 NaN T0001 \n",
|
||
"165 NaN T0002 \n",
|
||
"166 Push back against criticism by dismissing your... T0003 \n",
|
||
"167 Twist the narrative. Take information, or arti... T0004 \n",
|
||
"168 Shift attention to a different narrative or ac... T0005 \n",
|
||
".. ... ... \n",
|
||
"256 NaN T0093 \n",
|
||
"257 Play the long game refers to two phenomena: 1.... T0094 \n",
|
||
"258 NaN T0095 \n",
|
||
"259 NaN T0096 \n",
|
||
"260 NaN T0097 \n",
|
||
"\n",
|
||
"[97 rows x 4 columns]"
|
||
]
|
||
},
|
||
"execution_count": 6,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"techs = df[['DISARM Technique', 'DISARM Subtechnique', 'Description', 'DISARM ID']]\n",
|
||
"techs = techs[(techs['DISARM Technique'].notnull()) & (techs['DISARM Subtechnique'].isnull())]\n",
|
||
"techs"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"metadata": {
|
||
"scrolled": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"lengths are: 97 and 97\n",
|
||
"first list: Index(['Formal Diplomatic Channels', 'Develop Video-based Content',\n",
|
||
" 'Determine Strategic Ends',\n",
|
||
" 'Identify Social and Technical Vulnerabilities',\n",
|
||
" 'Measure Effectiveness Indicators (or KPIs)',\n",
|
||
" 'Leverage Existing Narratives', 'Cultivate ignorant agents',\n",
|
||
" 'Traditional Media', 'Create Inauthentic Accounts',\n",
|
||
" 'Merchandising/ Advertising', 'Develop Text-based Content', 'Distract',\n",
|
||
" 'Purchase Targeted Advertisements', 'Reuse Existing Content',\n",
|
||
" 'Co-opt Trusted Sources', 'Exploit TOS/Content Moderation',\n",
|
||
" 'Degrade Adversary', 'Create hashtags and search artifacts',\n",
|
||
" 'Develop Competing Narratives', 'Leverage Echo Chambers/Filter Bubbles',\n",
|
||
" 'Create personas', 'Create fake experts', 'Online polls',\n",
|
||
" 'Facilitate State Propaganda', 'Comment or Reply on Content', 'Email',\n",
|
||
" 'Media Sharing Networks', 'Post Content',\n",
|
||
" 'Encourage Attendance at Events', 'Blogging and Publishing Networks',\n",
|
||
" 'Seed distortions', 'Create inauthentic websites',\n",
|
||
" 'Control Information Environment through Offensive Cyberspace Operations',\n",
|
||
" 'Infiltrate Existing Networks', 'Dismay',\n",
|
||
" 'Employ Commercial Analytic Firms', ' Social Networks',\n",
|
||
" 'Physical Violence', 'Measure Performance', 'Develop New Narratives',\n",
|
||
" 'Amplify Existing Narrative', 'Flooding the Information Space',\n",
|
||
" 'Deliver Ads', 'Generate information pollution', 'Organize Events',\n",
|
||
" 'Prepare Assets Impersonating Legitimate Entities',\n",
|
||
" 'Conceal Operational Activity',\n",
|
||
" 'Map Target Audience Information Environment',\n",
|
||
" 'Attract Traditional Media', 'Use Search Engine Optimization',\n",
|
||
" 'Seed Kernel of truth', 'Conduct fundraising',\n",
|
||
" 'Consumer Review Networks', 'Chat apps',\n",
|
||
" 'Bookmarking and Content Curation', 'Prepare fundraising campaigns',\n",
|
||
" 'Suppress Opposition', 'Obtain Private Documents',\n",
|
||
" 'Compromise legitimate accounts',\n",
|
||
" 'Direct Users to Alternative Platforms', 'Conceal Infrastructure',\n",
|
||
" 'Acquire/ recruit Network', 'Leverage Content Farm', 'Distort facts',\n",
|
||
" 'Harass', 'Integrate Target Audience Vulnerabilities into Narrative',\n",
|
||
" 'Bait legitimate influencers', 'Discussion Forums',\n",
|
||
" 'Create Inauthentic Social Media Pages and Groups', 'Cross-Posting',\n",
|
||
" 'Segment Audiences', 'Create Clickbait', 'Develop Owned Media Assets',\n",
|
||
" 'Develop Image-based Content', 'Dismiss',\n",
|
||
" 'Respond to Breaking News Event or Active Crisis',\n",
|
||
" 'Determine Target Audiences',\n",
|
||
" 'Censor social media as a political force', 'Platform Filtering',\n",
|
||
" 'Conceal People', 'Livestream', 'Play the long game',\n",
|
||
" 'Use fake experts', 'Prepare Physical Broadcast Capabilities',\n",
|
||
" 'Manipulate Platform Algorithm', 'Incentivize Sharing',\n",
|
||
" 'Create Localized Content', 'Establish Inauthentic News Sites',\n",
|
||
" 'Demand insurmountable proof', 'Trial content', 'Divide',\n",
|
||
" 'Measure Effectiveness', 'Develop Audio-based Content',\n",
|
||
" 'Leverage Conspiracy Theory Narratives', 'Distort',\n",
|
||
" 'Recruit bad actors', 'Build Network'],\n",
|
||
" dtype='object')\n",
|
||
"second list: Index(['Conceal Operational Activity',\n",
|
||
" 'Identify Social and Technical Vulnerabilities',\n",
|
||
" 'Flooding the Information Space', ' Social Networks',\n",
|
||
" 'Conceal Infrastructure', 'Segment Audiences', 'Conceal People',\n",
|
||
" 'Map Target Audience Information Environment', 'Measure Effectiveness',\n",
|
||
" 'Create Inauthentic Accounts', 'Develop Image-based Content',\n",
|
||
" 'Control Information Environment through Offensive Cyberspace Operations',\n",
|
||
" 'Harass', 'Reuse Existing Content', 'Suppress Opposition',\n",
|
||
" 'Post Content', 'Media Sharing Networks', 'Develop Text-based Content',\n",
|
||
" 'Recruit bad actors', 'Measure Performance',\n",
|
||
" 'Leverage Echo Chambers/Filter Bubbles', 'Build Network',\n",
|
||
" 'Co-opt Trusted Sources', 'Obtain Private Documents', 'Cross-Posting',\n",
|
||
" 'Traditional Media', 'Physical Violence',\n",
|
||
" 'Establish Inauthentic News Sites', 'Organize Events',\n",
|
||
" 'Generate information pollution', 'Incentivize Sharing', 'Deliver Ads',\n",
|
||
" 'Livestream', 'Prepare Assets Impersonating Legitimate Entities',\n",
|
||
" 'Measure Effectiveness Indicators (or KPIs)',\n",
|
||
" 'Develop Video-based Content', 'Acquire/ recruit Network',\n",
|
||
" 'Prepare fundraising campaigns', 'Chat apps',\n",
|
||
" 'Develop Audio-based Content', 'Infiltrate Existing Networks',\n",
|
||
" 'Encourage Attendance at Events',\n",
|
||
" 'Leverage Conspiracy Theory Narratives', 'Distort facts',\n",
|
||
" 'Leverage Content Farm', 'Exploit TOS/Content Moderation',\n",
|
||
" 'Conduct fundraising', 'Create personas', 'Create fake experts',\n",
|
||
" 'Manipulate Platform Algorithm', 'Discussion Forums',\n",
|
||
" 'Merchandising/ Advertising', 'Dismiss', 'Comment or Reply on Content',\n",
|
||
" 'Determine Strategic Ends', 'Create inauthentic websites',\n",
|
||
" 'Seed distortions', 'Cultivate ignorant agents',\n",
|
||
" 'Facilitate State Propaganda', 'Dismay', 'Platform Filtering',\n",
|
||
" 'Trial content', 'Amplify Existing Narrative', 'Degrade Adversary',\n",
|
||
" 'Direct Users to Alternative Platforms', 'Develop New Narratives',\n",
|
||
" 'Formal Diplomatic Channels', 'Leverage Existing Narratives',\n",
|
||
" 'Distract', 'Create Inauthentic Social Media Pages and Groups',\n",
|
||
" 'Bait legitimate influencers',\n",
|
||
" 'Integrate Target Audience Vulnerabilities into Narrative',\n",
|
||
" 'Employ Commercial Analytic Firms', 'Create Clickbait', 'Email',\n",
|
||
" 'Compromise legitimate accounts', 'Bookmarking and Content Curation',\n",
|
||
" 'Consumer Review Networks', 'Create Localized Content',\n",
|
||
" 'Blogging and Publishing Networks', 'Divide',\n",
|
||
" 'Demand insurmountable proof',\n",
|
||
" 'Respond to Breaking News Event or Active Crisis',\n",
|
||
" 'Prepare Physical Broadcast Capabilities', 'Use fake experts',\n",
|
||
" 'Play the long game', 'Purchase Targeted Advertisements',\n",
|
||
" 'Develop Owned Media Assets',\n",
|
||
" 'Censor social media as a political force',\n",
|
||
" 'Determine Target Audiences', 'Seed Kernel of truth',\n",
|
||
" 'Use Search Engine Optimization', 'Online polls',\n",
|
||
" 'Develop Competing Narratives', 'Create hashtags and search artifacts',\n",
|
||
" 'Distort', 'Attract Traditional Media'],\n",
|
||
" dtype='object')\n",
|
||
"set difference: set()\n",
|
||
"null ids: Empty DataFrame\n",
|
||
"Columns: [DISARM Technique, DISARM Subtechnique, Description, DISARM ID]\n",
|
||
"Index: []\n",
|
||
"repeated ids: Empty DataFrame\n",
|
||
"Columns: [index, DISARM ID]\n",
|
||
"Index: []\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"check_diffs(techs['DISARM Technique'], df['DISARM Technique'])\n",
|
||
"check_ids(techs)\n",
|
||
"#techs.to_csv('temp_techs.csv', index=False)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 8,
|
||
"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>DISARM Subtechnique</th>\n",
|
||
" <th>Description</th>\n",
|
||
" <th>DISARM ID</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>4</th>\n",
|
||
" <td>Discredit Credible Sources</td>\n",
|
||
" <td>Plan to delegitimize the media landscape and d...</td>\n",
|
||
" <td>ST0001</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>5</th>\n",
|
||
" <td>Monitor Social Media Analytics</td>\n",
|
||
" <td>An influence operation may use social media an...</td>\n",
|
||
" <td>ST0002</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>6</th>\n",
|
||
" <td>Evaluate Media Surveys</td>\n",
|
||
" <td>An influence operation may evaluate its own or...</td>\n",
|
||
" <td>ST0003</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>7</th>\n",
|
||
" <td>Identify Trending Topics/Hashtags</td>\n",
|
||
" <td>An influence operation may identify trending h...</td>\n",
|
||
" <td>ST0004</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>8</th>\n",
|
||
" <td>Conduct Web Traffic Analysis</td>\n",
|
||
" <td>An influence operation may conduct web traffic...</td>\n",
|
||
" <td>ST0005</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>...</th>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>159</th>\n",
|
||
" <td>Awareness</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>ST0155</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>160</th>\n",
|
||
" <td>Knowledge</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>ST0156</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>161</th>\n",
|
||
" <td>Action/attitude</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>ST0157</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>162</th>\n",
|
||
" <td>Message reach</td>\n",
|
||
" <td>Monitor and evaluate message reach in misinfor...</td>\n",
|
||
" <td>ST0158</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>163</th>\n",
|
||
" <td>Social media engagement</td>\n",
|
||
" <td>Monitor and evaluate social media engagement i...</td>\n",
|
||
" <td>ST0159</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>160 rows × 3 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" DISARM Subtechnique \\\n",
|
||
"4 Discredit Credible Sources \n",
|
||
"5 Monitor Social Media Analytics \n",
|
||
"6 Evaluate Media Surveys \n",
|
||
"7 Identify Trending Topics/Hashtags \n",
|
||
"8 Conduct Web Traffic Analysis \n",
|
||
".. ... \n",
|
||
"159 Awareness \n",
|
||
"160 Knowledge \n",
|
||
"161 Action/attitude \n",
|
||
"162 Message reach \n",
|
||
"163 Social media engagement \n",
|
||
"\n",
|
||
" Description DISARM ID \n",
|
||
"4 Plan to delegitimize the media landscape and d... ST0001 \n",
|
||
"5 An influence operation may use social media an... ST0002 \n",
|
||
"6 An influence operation may evaluate its own or... ST0003 \n",
|
||
"7 An influence operation may identify trending h... ST0004 \n",
|
||
"8 An influence operation may conduct web traffic... ST0005 \n",
|
||
".. ... ... \n",
|
||
"159 NaN ST0155 \n",
|
||
"160 NaN ST0156 \n",
|
||
"161 NaN ST0157 \n",
|
||
"162 Monitor and evaluate message reach in misinfor... ST0158 \n",
|
||
"163 Monitor and evaluate social media engagement i... ST0159 \n",
|
||
"\n",
|
||
"[160 rows x 3 columns]"
|
||
]
|
||
},
|
||
"execution_count": 8,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"subs = df[['DISARM Subtechnique', 'Description', 'DISARM ID']]\n",
|
||
"subs = subs[subs['DISARM Subtechnique'].notnull()]\n",
|
||
"subs"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 9,
|
||
"metadata": {
|
||
"scrolled": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"lengths are: 159 and 159\n",
|
||
"first list: Index(['Conceal Network Identity', 'Message reach', 'View Focused',\n",
|
||
" 'Create dedicated hashtag', 'Create Echo Chambers/Filter Bubbles',\n",
|
||
" 'Aggregate Information into Evidence Collages', 'Astroturfing',\n",
|
||
" 'Leak Authentic Documents', 'Utilize Butterfly Attack', 'Awareness',\n",
|
||
" ...\n",
|
||
" 'Conceal Sponsorship', 'Evaluate Media Surveys', 'Utilize Spamoflauge',\n",
|
||
" 'Traditional Media', 'Enlist Troll Accounts', 'Geographic Segmentation',\n",
|
||
" 'Post Across Platform', 'Create Sockpuppet Accounts', 'Fund Proxies',\n",
|
||
" 'Hijack existing hashtag'],\n",
|
||
" dtype='object', length=159)\n",
|
||
"second list: Index(['Conceal Network Identity', 'Message reach', 'View Focused',\n",
|
||
" 'Create dedicated hashtag', 'Create Echo Chambers/Filter Bubbles',\n",
|
||
" 'Aggregate Information into Evidence Collages', 'Astroturfing',\n",
|
||
" 'Leak Authentic Documents', 'Utilize Butterfly Attack', 'Awareness',\n",
|
||
" ...\n",
|
||
" 'Conceal Sponsorship', 'Evaluate Media Surveys', 'Utilize Spamoflauge',\n",
|
||
" 'Traditional Media', 'Enlist Troll Accounts', 'Geographic Segmentation',\n",
|
||
" 'Post Across Platform', 'Create Sockpuppet Accounts', 'Fund Proxies',\n",
|
||
" 'Hijack existing hashtag'],\n",
|
||
" dtype='object', length=159)\n",
|
||
"set difference: set()\n",
|
||
"null ids: Empty DataFrame\n",
|
||
"Columns: [DISARM Subtechnique, Description, DISARM ID]\n",
|
||
"Index: []\n",
|
||
"repeated ids: index DISARM ID\n",
|
||
"0 ST0040 2\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"check_diffs(subs['DISARM Subtechnique'], df['DISARM Subtechnique'])\n",
|
||
"check_ids(subs)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# check against originals"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 10,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"dict_keys(['ADMIN_README', 'ADMIN CODES', 'phases', 'tactics', 'techniques', 'countermeasures', 'frameworks', 'tasks', 'detections', 'playbooks', 'responsetypes', 'metatechniques', 'actortypes', 'actortype_framework', 'actortype_sector', 'sectors', 'resources', 'MOE', 'MOP'])"
|
||
]
|
||
},
|
||
"execution_count": 10,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"MASTERDATA_DIR = '../DISARM_MASTER_DATA/'\n",
|
||
"frameworkfile = MASTERDATA_DIR + 'DISARM_FRAMEWORKS_MASTER.xlsx'\n",
|
||
" \n",
|
||
"metadata = {}\n",
|
||
"xlsx = pd.ExcelFile(frameworkfile)\n",
|
||
"for sheetname in xlsx.sheet_names:\n",
|
||
" metadata[sheetname] = xlsx.parse(sheetname)\n",
|
||
" metadata[sheetname].fillna('', inplace=True)\n",
|
||
"metadata.keys()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 11,
|
||
"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>disarm_id</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>name_DE</th>\n",
|
||
" <th>rank</th>\n",
|
||
" <th>summary</th>\n",
|
||
" <th>summary_DE</th>\n",
|
||
" <th>longname</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>P01</td>\n",
|
||
" <td>Plan</td>\n",
|
||
" <td>Planung</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>Envision the desired outcome. Lay out effectiv...</td>\n",
|
||
" <td></td>\n",
|
||
" <td>P01 - Plan</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>P02</td>\n",
|
||
" <td>Prepare</td>\n",
|
||
" <td>Vorbereitung</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>Activities conducted before execution to impro...</td>\n",
|
||
" <td></td>\n",
|
||
" <td>P02 - Prepare</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>P03</td>\n",
|
||
" <td>Execute</td>\n",
|
||
" <td>Durchführung</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>Run the action, from initial exposure to wrap-...</td>\n",
|
||
" <td></td>\n",
|
||
" <td>P03 - Execute</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>P04</td>\n",
|
||
" <td>Assess</td>\n",
|
||
" <td>Auswertung</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>Evaluate effectiveness of action, for use in f...</td>\n",
|
||
" <td></td>\n",
|
||
" <td>P04 - Assess</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" disarm_id name name_DE rank \\\n",
|
||
"0 P01 Plan Planung 1 \n",
|
||
"1 P02 Prepare Vorbereitung 2 \n",
|
||
"2 P03 Execute Durchführung 3 \n",
|
||
"3 P04 Assess Auswertung 4 \n",
|
||
"\n",
|
||
" summary summary_DE longname \n",
|
||
"0 Envision the desired outcome. Lay out effectiv... P01 - Plan \n",
|
||
"1 Activities conducted before execution to impro... P02 - Prepare \n",
|
||
"2 Run the action, from initial exposure to wrap-... P03 - Execute \n",
|
||
"3 Evaluate effectiveness of action, for use in f... P04 - Assess "
|
||
]
|
||
},
|
||
"execution_count": 11,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"metadata['phases']"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 12,
|
||
"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>DISARM Phase</th>\n",
|
||
" <th>DISARM Tactic</th>\n",
|
||
" <th>Description</th>\n",
|
||
" <th>DISARM ID</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>0</th>\n",
|
||
" <td>Plan</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Envision the desired outcome. Lay out effectiv...</td>\n",
|
||
" <td>P01</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>1</th>\n",
|
||
" <td>Prepare</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Activities conducted before execution to impro...</td>\n",
|
||
" <td>P02</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>2</th>\n",
|
||
" <td>Execute</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Run the action, from initial exposure to wrap-...</td>\n",
|
||
" <td>P03</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>3</th>\n",
|
||
" <td>Assess</td>\n",
|
||
" <td>NaN</td>\n",
|
||
" <td>Assess effectiveness of action, for use in fut...</td>\n",
|
||
" <td>P04</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" DISARM Phase DISARM Tactic \\\n",
|
||
"0 Plan NaN \n",
|
||
"1 Prepare NaN \n",
|
||
"2 Execute NaN \n",
|
||
"3 Assess NaN \n",
|
||
"\n",
|
||
" Description DISARM ID \n",
|
||
"0 Envision the desired outcome. Lay out effectiv... P01 \n",
|
||
"1 Activities conducted before execution to impro... P02 \n",
|
||
"2 Run the action, from initial exposure to wrap-... P03 \n",
|
||
"3 Assess effectiveness of action, for use in fut... P04 "
|
||
]
|
||
},
|
||
"execution_count": 12,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"phases"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 13,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# do union of both tables, to get new spreadsheet table\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 14,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"lengths are: 4 and 4\n",
|
||
"first list: Index(['Prepare', 'Execute', 'Plan', 'Assess'], dtype='object')\n",
|
||
"second list: Index(['Prepare', 'Execute', 'Plan', 'Assess'], dtype='object')\n",
|
||
"set difference: set()\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"check_diffs(metadata['phases']['name'], phases['DISARM Phase'])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 15,
|
||
"metadata": {
|
||
"scrolled": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"lengths are: 13 and 16\n",
|
||
"first list: Index(['Drive Offline Activity', 'Objective Planning',\n",
|
||
" 'Conduct Center of Gravity Analysis', 'Persistence', 'Develop Networks',\n",
|
||
" 'Microtargeting', 'Channel Selection', 'Develop People', 'Pump Priming',\n",
|
||
" 'Exposure', 'Strategic Planning', 'Develop Content',\n",
|
||
" 'Measure Effectiveness'],\n",
|
||
" dtype='object')\n",
|
||
"second list: Index(['Drive Offline Activity', 'Plan Objectives', 'Conduct Pump Priming',\n",
|
||
" 'Maximize Exposure', 'Target Audience Analysis', 'Microtarget',\n",
|
||
" 'Establish Social Assets', 'Establish Legitimacy', 'Deliver Content',\n",
|
||
" 'Select Channels and Affordances', 'Plan Strategy', 'Develop Content',\n",
|
||
" 'Drive Online Harms', 'Persist in the Information Space',\n",
|
||
" 'Develop Narratives', 'Assess Effectiveness'],\n",
|
||
" dtype='object')\n",
|
||
"set difference: {'Measure Effectiveness', 'Channel Selection', 'Strategic Planning', 'Pump Priming', 'Develop People', 'Microtargeting', 'Exposure', 'Develop Networks', 'Persistence', 'Conduct Center of Gravity Analysis', 'Objective Planning'}\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"check_diffs(metadata['tactics']['name'], tactics['DISARM Tactic'])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 16,
|
||
"metadata": {
|
||
"scrolled": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"lengths are: 71 and 97\n",
|
||
"first list: Index(['Twitter bots amplify', 'Create fake experts', 'Twitter',\n",
|
||
" 'Degrade adversary', 'Use concealment',\n",
|
||
" 'Muzzle social media as a political force',\n",
|
||
" 'Fabricate social media comment', 'Social media engagement',\n",
|
||
" 'Analyze existing communities', 'Cultivate ignorant agents',\n",
|
||
" 'Create fake videos and images', 'Distort facts',\n",
|
||
" 'Respond to active crisis', 'Kernel of Truth', 'Deny involvement',\n",
|
||
" 'Create hashtags', 'Tertiary sites amplify news',\n",
|
||
" 'Use SMS/ WhatsApp/ Chat apps', 'LinkedIn', 'Continue to amplify',\n",
|
||
" 'Backstop personas', 'Leverage Existing Narratives',\n",
|
||
" 'Legacy web content', 'YouTube', 'Use physical broadcast capabilities',\n",
|
||
" 'Create fake Social Media Profiles / Pages / Groups',\n",
|
||
" 'Adapt existing narratives', 'Use hashtag', 'Play the long game',\n",
|
||
" 'Generate information pollution', 'Develop Narrative Concepts',\n",
|
||
" 'Segment audiences', 'Facilitate State Propaganda',\n",
|
||
" 'Dedicated channels disseminate information pollution',\n",
|
||
" 'Leak altered documents', 'Demand unsurmountable proof',\n",
|
||
" 'Cow online opinion leaders', 'Plan to discredit credible sources',\n",
|
||
" 'Create fake or imposter news sites', 'Create competing narratives',\n",
|
||
" 'Devise Competing Narratives', 'Manipulate online polls',\n",
|
||
" 'Behaviour changes', 'Reddit', 'Flooding',\n",
|
||
" 'Prepare fundraising campaigns', 'Search Engine Optimization',\n",
|
||
" 'Respond to breaking news event', 'Bait legitimate influencers',\n",
|
||
" 'Cheerleading domestic social media ops',\n",
|
||
" 'Create pseudoscientific or disingenuous research',\n",
|
||
" 'Purchase advertisements', 'Conspiracy narratives', 'Use fake experts',\n",
|
||
" 'Pinterest', 'Create fake websites', 'Clickbait', 'Trial content',\n",
|
||
" '5Ds (dismiss, distort, distract, dismay, divide)', 'Facebook',\n",
|
||
" 'Conduct Fundraising Campaigns', 'WhatsApp', 'Memes', 'Instagram',\n",
|
||
" 'Find echo chambers', 'Twitter trolls amplify and manipulate',\n",
|
||
" 'Seed distortions', 'Organise remote rallies and events',\n",
|
||
" 'Sell merchandising', 'Message reach', 'Compromise legitimate account'],\n",
|
||
" dtype='object')\n",
|
||
"second list: Index(['Formal Diplomatic Channels', 'Develop Video-based Content',\n",
|
||
" 'Determine Strategic Ends',\n",
|
||
" 'Identify Social and Technical Vulnerabilities',\n",
|
||
" 'Measure Effectiveness Indicators (or KPIs)',\n",
|
||
" 'Leverage Existing Narratives', 'Cultivate ignorant agents',\n",
|
||
" 'Traditional Media', 'Create Inauthentic Accounts',\n",
|
||
" 'Merchandising/ Advertising', 'Develop Text-based Content', 'Distract',\n",
|
||
" 'Purchase Targeted Advertisements', 'Reuse Existing Content',\n",
|
||
" 'Co-opt Trusted Sources', 'Exploit TOS/Content Moderation',\n",
|
||
" 'Degrade Adversary', 'Create hashtags and search artifacts',\n",
|
||
" 'Develop Competing Narratives', 'Leverage Echo Chambers/Filter Bubbles',\n",
|
||
" 'Create personas', 'Create fake experts', 'Online polls',\n",
|
||
" 'Facilitate State Propaganda', 'Comment or Reply on Content', 'Email',\n",
|
||
" 'Media Sharing Networks', 'Post Content',\n",
|
||
" 'Encourage Attendance at Events', 'Blogging and Publishing Networks',\n",
|
||
" 'Seed distortions', 'Create inauthentic websites',\n",
|
||
" 'Control Information Environment through Offensive Cyberspace Operations',\n",
|
||
" 'Infiltrate Existing Networks', 'Dismay',\n",
|
||
" 'Employ Commercial Analytic Firms', ' Social Networks',\n",
|
||
" 'Physical Violence', 'Measure Performance', 'Develop New Narratives',\n",
|
||
" 'Amplify Existing Narrative', 'Flooding the Information Space',\n",
|
||
" 'Deliver Ads', 'Generate information pollution', 'Organize Events',\n",
|
||
" 'Prepare Assets Impersonating Legitimate Entities',\n",
|
||
" 'Conceal Operational Activity',\n",
|
||
" 'Map Target Audience Information Environment',\n",
|
||
" 'Attract Traditional Media', 'Use Search Engine Optimization',\n",
|
||
" 'Seed Kernel of truth', 'Conduct fundraising',\n",
|
||
" 'Consumer Review Networks', 'Chat apps',\n",
|
||
" 'Bookmarking and Content Curation', 'Prepare fundraising campaigns',\n",
|
||
" 'Suppress Opposition', 'Obtain Private Documents',\n",
|
||
" 'Compromise legitimate accounts',\n",
|
||
" 'Direct Users to Alternative Platforms', 'Conceal Infrastructure',\n",
|
||
" 'Acquire/ recruit Network', 'Leverage Content Farm', 'Distort facts',\n",
|
||
" 'Harass', 'Integrate Target Audience Vulnerabilities into Narrative',\n",
|
||
" 'Bait legitimate influencers', 'Discussion Forums',\n",
|
||
" 'Create Inauthentic Social Media Pages and Groups', 'Cross-Posting',\n",
|
||
" 'Segment Audiences', 'Create Clickbait', 'Develop Owned Media Assets',\n",
|
||
" 'Develop Image-based Content', 'Dismiss',\n",
|
||
" 'Respond to Breaking News Event or Active Crisis',\n",
|
||
" 'Determine Target Audiences',\n",
|
||
" 'Censor social media as a political force', 'Platform Filtering',\n",
|
||
" 'Conceal People', 'Livestream', 'Play the long game',\n",
|
||
" 'Use fake experts', 'Prepare Physical Broadcast Capabilities',\n",
|
||
" 'Manipulate Platform Algorithm', 'Incentivize Sharing',\n",
|
||
" 'Create Localized Content', 'Establish Inauthentic News Sites',\n",
|
||
" 'Demand insurmountable proof', 'Trial content', 'Divide',\n",
|
||
" 'Measure Effectiveness', 'Develop Audio-based Content',\n",
|
||
" 'Leverage Conspiracy Theory Narratives', 'Distort',\n",
|
||
" 'Recruit bad actors', 'Build Network'],\n",
|
||
" dtype='object')\n",
|
||
"set difference: {'Backstop personas', 'YouTube', 'Create fake Social Media Profiles / Pages / Groups', 'Use physical broadcast capabilities', 'Social media engagement', 'Continue to amplify', 'Develop Narrative Concepts', 'Segment audiences', 'Conspiracy narratives', 'Dedicated channels disseminate information pollution', 'Use SMS/ WhatsApp/ Chat apps', 'Tertiary sites amplify news', 'Twitter', 'Degrade adversary', 'Use concealment', 'Muzzle social media as a political force', 'Use hashtag', 'Fabricate social media comment', 'Create fake videos and images', 'Find echo chambers', 'Respond to active crisis', 'Kernel of Truth', 'Deny involvement', 'Create hashtags', 'Legacy web content', 'Leak altered documents', 'LinkedIn', 'Demand unsurmountable proof', 'Search Engine Optimization', 'Pinterest', 'Respond to breaking news event', '5Ds (dismiss, distort, distract, dismay, divide)', 'Clickbait', 'Create pseudoscientific or disingenuous research', 'Facebook', 'Conduct Fundraising Campaigns', 'WhatsApp', 'Sell merchandising', 'Organise remote rallies and events', 'Analyze existing communities', 'Message reach', 'Plan to discredit credible sources', 'Instagram', 'Compromise legitimate account', 'Cow online opinion leaders', 'Create fake or imposter news sites', 'Flooding', 'Create competing narratives', 'Behaviour changes', 'Devise Competing Narratives', 'Twitter bots amplify', 'Manipulate online polls', 'Reddit', 'Twitter trolls amplify and manipulate', 'Adapt existing narratives', 'Cheerleading domestic social media ops', 'Create fake websites', 'Purchase advertisements', 'Memes'}\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"check_diffs(metadata['techniques']['name'], techs['DISARM Technique'])"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": []
|
||
},
|
||
{
|
||
"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
|
||
}
|