diff --git a/.DS_Store b/.DS_Store index 3ecc2a3..612138f 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/AMITT_MASTER_DATA/CountersPlaybook_MASTER.xlsx b/AMITT_MASTER_DATA/AMITT_Counters_MASTER.xlsx similarity index 100% rename from AMITT_MASTER_DATA/CountersPlaybook_MASTER.xlsx rename to AMITT_MASTER_DATA/AMITT_Counters_MASTER.xlsx diff --git a/AMITT_MASTER_DATA/amitt_metadata_v3.xlsx b/AMITT_MASTER_DATA/AMITT_TTPs_MASTER.xlsx similarity index 100% rename from AMITT_MASTER_DATA/amitt_metadata_v3.xlsx rename to AMITT_MASTER_DATA/AMITT_TTPs_MASTER.xlsx diff --git a/HTML_GENERATING_CODE/.ipynb_checkpoints/AMITT_create_counters_summaries-checkpoint.ipynb b/HTML_GENERATING_CODE/.ipynb_checkpoints/AMITT_create_counters_summaries-checkpoint.ipynb new file mode 100644 index 0000000..76394ff --- /dev/null +++ b/HTML_GENERATING_CODE/.ipynb_checkpoints/AMITT_create_counters_summaries-checkpoint.ipynb @@ -0,0 +1,1860 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Create counters summaries\n", + "Create summaries of disinfo countermeasures for use in dataset cleaning etc." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Writing ../tactics/ALcounters.md\n", + "Writing ../tactics/TA01counters.md\n", + "Writing ../tactics/TA02counters.md\n", + "Writing ../tactics/TA03counters.md\n", + "Writing ../tactics/TA04counters.md\n", + "Writing ../tactics/TA05counters.md\n", + "Writing ../tactics/TA06counters.md\n", + "Writing ../tactics/TA07counters.md\n", + "Writing ../tactics/TA08counters.md\n", + "Writing ../tactics/TA09counters.md\n", + "Writing ../tactics/TA09counters.md\n", + "Writing ../tactics/TA10counters.md\n", + "Writing ../tactics/TA11counters.md\n", + "Writing ../tactics/TA12counters.md\n", + "updated ../tactic_counts.md\n", + "Writing ../metatag/cleaningcounters.md\n", + "Writing ../metatag/countermessagingcounters.md\n", + "Writing ../metatag/data pollutioncounters.md\n", + "Writing ../metatag/daylightcounters.md\n", + "Writing ../metatag/dilutioncounters.md\n", + "Writing ../metatag/diversioncounters.md\n", + "Writing ../metatag/frictioncounters.md\n", + "Writing ../metatag/metatechniquecounters.md\n", + "Writing ../metatag/reduce resourcescounters.md\n", + "Writing ../metatag/removalcounters.md\n", + "Writing ../metatag/resiliencecounters.md\n", + "Writing ../metatag/scoringcounters.md\n", + "Writing ../metatag/targetingcounters.md\n", + "Writing ../metatag/verificationcounters.md\n", + "updated ../metatag_counts.md\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
IDmetatechniqueTitleDetailsPlaybook(s)Resources neededHow foundReferencesIncidentsTacticResponseTechniquesNOTES
0C00043cleaningDetect hijacked accounts and reallocate themNaNIn all playbooks the platform must force user ...platform_admin,activists,civil_society,money2019-11-workshopNaNNaNTA03 Develop PeopleD3 DisruptT0011 - Hijack accountsNaN
1C00053cleaningDelete old accounts / Remove unused social med...NaNSocial media companies remove inactive account...platform_admin,platform_admin:socialmedia,publ...2019-11-workshop,2019-11-searchNaNI00004TA04 Develop NetworksD4 DegradeT0011 - Hijack accounts\\nTA06 - Develop Conten...NaN
2C00074cleaningIdentify identical content and mass deplatform\\nIn all cases some checks need to prevent depla...platform_admin,platform_admin:socialmedia2019-11-workshopNaNNaNTA06 Develop ContentD2 DenyT0022 - Conspiracy narratives\\nT0026 - Create ...NaN
3C00026countermessagingShore up democracy based messages (peace, free...UnsureNaNNaN2019-11-workshopNaNNaNTA01 Strategic PlanningD4 DegradeT0002 - Facilitate State PropagandaNaN
4C00082countermessagingGround truthing as automated response to pollu...NaNNaNNaN2019-11-workshopNaNNaNTA06 Develop ContentD3 DisruptNaNNaN
5C00136countermessagingMicrotarget most likely targets then send them...NaNPlaybook 1: Work with platform to identify act...NaN2019-11-workshopNaNNaNTA11 PersistenceD3 DisruptTA08 - Pump Priming\\nTA09 - Exposure\\nTA10 - G...NaN
6C00169countermessagingdevelop a creative content hubinternational donors will donate to a basket f...NaNNaN2019-11-searchRand2237NaNTA09 - ExposureD3 DisruptNaNNaN
7C00211countermessagingUse humorous counter-narrativesNaNNaNNaN2019-11-searchNaNI00004TA09 - ExposureD3 DisruptNaNNaN
8C00137data pollutionPollute the AB-testing data feedsPolluting A/B testing requires knowledge of MO...Playbook 1: Promote damp squibs. Within a kno...NaN2019-11-workshopNaNNaNTA11 PersistenceD3 DisruptT0020 - Trial contentNaN
9C00140data pollution\"Bomb\" link shorteners with lots of callsApplies to most of the content used by exposur...Playbook 1: DDoS adversary link shorteners by ...NaN2019-11-workshopNaNNaNTA11 PersistenceD4 DegradeTA05 - Microtargeting\\nTA09 - Exposure*\\nTA10 ...NaN
10C00145data pollutionPollute the data voids with wholesome content ...NaNNaNNaN2019-11-workshopNaNNaNTA11 PersistenceD4 DegradeT0015 - Create hashtag\\nT0046 - Search Engine ...NaN
11C00148data pollutionAdd random links to network graphsIf creators are using network analysis to dete...Playbook 1: Degrade TA engagement using bots; ...platform_algorithms2019-11-workshopNaNNaNTA12 Measure EffectivenessD4 DegradeNaNNaN
12C00149data pollutionPoison the monitoring & evaluation dataNaNPlaybook 1: Distort TA demographics by posting...NaN2019-11-workshopNaNNaNTA12 Measure EffectivenessD4 DegradeTA12 - Measure Effectiveness\\nT0020 - Trial co...NaN
13C00018daylightPromote constructive communication by shaming ...Duplicate of \"Promote playbooks to call out di...NaNNaN2019-11-workshopNaNNaNTA01 Strategic PlanningD3 DisruptTA08 - Pump Priming\\nTA09 - Exposure\\nTA10 - G...NaN
14C00019daylightPromote playbooks to call out division-enablersDuplicate of \"Promote constructive communicati...Spread Infographics & Training Material teachi...NaN2019-11-workshopNaNNaNTA01 Strategic PlanningD3 DisruptTA08 - Pump Priming\\nTA09 - Exposure\\nTA10 - G...NaN
15C00048daylightName and ShameNaNIdentify the accounts, the real person's name ...NaN2019-11-workshopNaNNaNTA03 Develop PeopleD7 DeterTA08 - Pump Priming\\nT0048 - Cow online opinio...NaN
16C00068daylightExpose online funding as fakeNaNNaNNaN2019-11-workshopNaNNaNTA05 MicrotargetingD3 DisruptT0017 - Promote online funding\\nT0061 - Sell m...NaN
17C00069daylightMark clickbait visuallyNaNNaNNaN2019-11-workshopNaNNaNTA05 MicrotargetingD3 DisruptT0016 - ClickbaitNaN
18C00081daylightDiscredit by pointing out the \"noise\" and info...NaNNaNNaN2019-11-workshopNaNNaNTA06 Develop ContentD3 Disruptinfo pollutionNaN
19C00094daylightForce full disclosure on corporate sponsor of ...NaNNaNNaN2019-11-workshopNaNNaNTA06 Develop ContentD7 DeterT0026 - Create fake researchNaN
20C00113daylightDebunk and defuse a fake expert / credentials....NaNNaNNaN2019-11-workshopNaNNaNTA08 Pump PrimingD2 DenyT0045NaN
21C00115daylightExpose actor and intentionsNaNNaNNaN2019-11-workshopNaNNaNTA08 Pump PrimingD2 DenyT0046\\nT0048\\nT0052\\nT0053\\nT0054\\nT0055\\nT0056NaN
22C00116daylightProvide proof of involvementNaNNaNNaN2019-11-workshopNaNNaNTA08 Pump PrimingD2 DenyT0041 - Deny involvementNaN
23C00126daylightSocial media amber alertNaNNaNNaN2019-11-workshopNaNNaNTA09 ExposureD3 DisruptT0052\\nT0053\\nT0054\\nT0055\\nT0056NaN
24C00150daylight“calling them out”Identify social media accounts as sources of p...NaNNaN2019-11-searchRand2237NaNTA03 Develop PeopleD2 DenyNaNNaN
25C00151daylight“fight in the light”Use leadership in the arts, entertainment, and...NaNNaN2019-11-searchHicks19NaNTA09 ExposureD3 DisruptNaNNaN
26C00152daylight“name and shame”USAID has been restructuring its programs to a...NaNNaN2019-11-searchDalton19NaNTA04 Develop NetworksD2 DenyNaNNaN
27C00184daylightMedia exposureNaNNaNNaN2019-11-searchNaNI00010,I00015,I00032,I00044TA09 ExposureD4 DegradeNaNNaN
28C00189daylightOngoing analysis/monitoring of \"flagged\" profilesConfirm whether platforms are actively removin...NaNNaN2019-11-searchRand2237NaNTA03 Develop PeopleD6 DestroyNaNNaN
29C00031dilutionDilute the core narrative - create multiple pe...Create competing narratives. Included \"Facilit...Playbook 1: Create multiple versions of the na...NaN2019-11-workshopNaNNaNTA02 Objective PlanningD3 DisruptT0002 - Facilitate State Propaganda\\nT0003 - L...CAVEAT: some element of disinformation is simp...
..........................................
156C00122frictionContent moderation. Censorship?NaNNaNplatform_admin2019-11-workshopNaNNaNTA09 ExposureD2 DenyNaNNaN
157C00123frictionBot controlNaNNaNNaN2019-11-workshopNaNNaNTA09 ExposureD3 DisruptT0049\\nT0051\\nT0052\\nT0053\\nT0054\\nT0055\\nT0056NaN
158C00124frictionDon't feed the trollsNaNNaNpublic,media2019-11-workshopNaNNaNTA09 ExposureD3 DisruptTA08 - Pump Priming\\nTA09 - ExposureNaN
159C00139frictionWeaponise youtube content matricesNaNNaNNaN2019-11-workshopNaNNaNTA11 PersistenceD3 DisruptNaNNaN
160C00143targeting(botnet) DMCA takedown requests to waste group...NaNNaNpublic,elves2019-11-workshopNaNNaNTA11 PersistenceD4 DegradeNaNNaN
161C00153targetingUse offensive cyber actionAlign offensive cyber action with information ...NaNinfosec2019-11-searchDalton19NaNTA01 Strategic PlanningD3 DisruptNaNNaN
162C00156countermessagingBetter tell the U.S., NATO, and EU story.Civil engagement activities conducted on the p...NaNgovernment,military2019-11-searchRand2237NaNTA09 ExposureD3 DisruptNaNNaN
163C00157countermessagingBuild alternative news sourcesCreate alternative local-language news sources...NaNNaN2019-11-searchp143 of Corker18NaNTA04 Develop NetworksD2 DenyNaNNaN
164C00159metatechniqueCampaign mindset and associated toolboxA campaign plan for the gray zone must account...NaNNaN2019-11-searchHicks19NaNTA01 Strategic PlanningD3 DisruptNaNNaN
165C00160resiliencefind and train influencersIdentify key influencers (e.g. use network ana...NaNdata scientist,influencers2019-11-searchRand2237NaNTA03 Develop PeopleD2 DenyNaNNaN
166C00161metatechniqueCoalition Building and Third-Party Inducements:Advance coalitions across borders and sectors,...NaNNaN2019-11-searchDalton19NaNTA01 Strategic PlanningD7 DeterNaNNaN
167C00162targetingcollect data/map constellations of Russian“civ...Kremlin’s narrative spin extends through const...NaNNaN2019-11-searchRand2237NaNTA04 Develop NetworksD3 DisruptNaNNaN
168C00164targetingcompatriot policyprotect the interests of this population and, ...NaNNaN2019-11-searchRand2237NaNTA03 Develop PeopleD3 DisruptNaNNaN
169C00165frictionLimit access to alterable documentse.g. for leaked legal documents, use court mot...NaNNaN2019-11-searchNaNI00015TA06 Develop ContentD2 DenyT00025NaN
170C00167countermessagingDeploy Information and Narrative-Building in S...Promote a narrative of transparency, truthfuln...NaNNaN2019-11-searchHicks19NaNTA06 Develop ContentD2 DenyNaNNaN
171C00176metatechniqueImprove Coordination with and feedback from th...gray zone challenges are increasingly multidis...NaNNaN2019-11-searchDalton19NaNTA01 Strategic PlanningD7 DeterNaNNaN
172C00179removalIdentify, monitor, and, if necessary, target R...Impact of and Dealing with Trolls - \"Chatham H...NaNNaN2019-11-searchRand2237NaNTA03 Develop PeopleD3 DisruptNaNNaN
173C00182removalmalware detection/quarantine/deletion(2015) Trustwave reported that a Bedep Trojan ...NaNinfosec2019-11-searchRand2237NaNTA09 ExposureD2 DenyNaNNaN
174C00196metatechniqueInclude the role of social media in the regula...The European Union created significant new reg...NaNgovernment2019-11-searchHicks19NaNTA07 Channel SelectionD3 DisruptNaNNaN
175C00200countermessagingRespected figure (influencer) disavows misinfoHas been done in e.g. IndiaNaNinfluencers2019-11-searchNaNI00044TA09 ExposureD3 DisruptNaNNaN
176C00202diversionSet data 'honeytraps'NaNNaNNaN2019-11-searchNaNI00004,I00022TA06 Develop ContentD2 DenyT0025 leak altered documentsNaN
177C00203frictionStop offering press credentials to propaganda ...NaNNaNgovernment2019-11-searchNaNI00022TA08 Pump PrimingD3 DisruptNaNNaN
178C00205metatechniquestrong dialogue between the federal government...Increase civic resilience by partnering with b...NaNcompanies,government2019-11-searchHicks19NaNTA01 Strategic PlanningD3 DisruptNaNNaN
179C00207targetingtit-for-tat campaignAs used by Saudis?NaNgovernment,platforms2019-11-searchNaNI00042TA01 Strategic PlanningD7 DeterNaNNaN
180C00210resilienceUse encrypted apps for confidential communicationNaNNaNNaN2019-11-searchNaNI00022TA06 Develop ContentD2 DenyT0025NaN
181C00214metatechniqueCreate policy that makes social media police d...German model: facebook forced to police conten...NaNgovernment:policymakers2019-11-workshopNaNNaNTA07 Channel SelectionD3 DisruptNaNNaN
182C00215metatechniqueUse fraud legislation to clean up social mediaNaNNaNgovernment:policymakers2019-11-workshopNaNNaNTA07 Channel SelectionD3 DisruptNaNNaN
183C00217daylightRegistries alert when large batches of newsy U...NaNNaNplatform_admingrugqNaNNaNTA07 Channel SelectionD2 DenyNaNNaN
184C00218removalCensorshipAlter and/or block the publication/disseminati...NaNplatform_admingrugqTaylor81NaNTA09 ExposureD2 DenyNaNNaN
185C00219daylightAdd metadata to content - out of the control o...NaNAdd date and source to imagesNaNgrugqNaNNaNTA06 Develop ContentD3 DisruptNaNNaN
\n", + "

186 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " ID metatechnique \\\n", + "0 C00043 cleaning \n", + "1 C00053 cleaning \n", + "2 C00074 cleaning \n", + "3 C00026 countermessaging \n", + "4 C00082 countermessaging \n", + "5 C00136 countermessaging \n", + "6 C00169 countermessaging \n", + "7 C00211 countermessaging \n", + "8 C00137 data pollution \n", + "9 C00140 data pollution \n", + "10 C00145 data pollution \n", + "11 C00148 data pollution \n", + "12 C00149 data pollution \n", + "13 C00018 daylight \n", + "14 C00019 daylight \n", + "15 C00048 daylight \n", + "16 C00068 daylight \n", + "17 C00069 daylight \n", + "18 C00081 daylight \n", + "19 C00094 daylight \n", + "20 C00113 daylight \n", + "21 C00115 daylight \n", + "22 C00116 daylight \n", + "23 C00126 daylight \n", + "24 C00150 daylight \n", + "25 C00151 daylight \n", + "26 C00152 daylight \n", + "27 C00184 daylight \n", + "28 C00189 daylight \n", + "29 C00031 dilution \n", + ".. ... ... \n", + "156 C00122 friction \n", + "157 C00123 friction \n", + "158 C00124 friction \n", + "159 C00139 friction \n", + "160 C00143 targeting \n", + "161 C00153 targeting \n", + "162 C00156 countermessaging \n", + "163 C00157 countermessaging \n", + "164 C00159 metatechnique \n", + "165 C00160 resilience \n", + "166 C00161 metatechnique \n", + "167 C00162 targeting \n", + "168 C00164 targeting \n", + "169 C00165 friction \n", + "170 C00167 countermessaging \n", + "171 C00176 metatechnique \n", + "172 C00179 removal \n", + "173 C00182 removal \n", + "174 C00196 metatechnique \n", + "175 C00200 countermessaging \n", + "176 C00202 diversion \n", + "177 C00203 friction \n", + "178 C00205 metatechnique \n", + "179 C00207 targeting \n", + "180 C00210 resilience \n", + "181 C00214 metatechnique \n", + "182 C00215 metatechnique \n", + "183 C00217 daylight \n", + "184 C00218 removal \n", + "185 C00219 daylight \n", + "\n", + " Title \\\n", + "0 Detect hijacked accounts and reallocate them \n", + "1 Delete old accounts / Remove unused social med... \n", + "2 Identify identical content and mass deplatform \n", + "3 Shore up democracy based messages (peace, free... \n", + "4 Ground truthing as automated response to pollu... \n", + "5 Microtarget most likely targets then send them... \n", + "6 develop a creative content hub \n", + "7 Use humorous counter-narratives \n", + "8 Pollute the AB-testing data feeds \n", + "9 \"Bomb\" link shorteners with lots of calls \n", + "10 Pollute the data voids with wholesome content ... \n", + "11 Add random links to network graphs \n", + "12 Poison the monitoring & evaluation data \n", + "13 Promote constructive communication by shaming ... \n", + "14 Promote playbooks to call out division-enablers \n", + "15 Name and Shame \n", + "16 Expose online funding as fake \n", + "17 Mark clickbait visually \n", + "18 Discredit by pointing out the \"noise\" and info... \n", + "19 Force full disclosure on corporate sponsor of ... \n", + "20 Debunk and defuse a fake expert / credentials.... \n", + "21 Expose actor and intentions \n", + "22 Provide proof of involvement \n", + "23 Social media amber alert \n", + "24 “calling them out” \n", + "25 “fight in the light” \n", + "26 “name and shame” \n", + "27 Media exposure \n", + "28 Ongoing analysis/monitoring of \"flagged\" profiles \n", + "29 Dilute the core narrative - create multiple pe... \n", + ".. ... \n", + "156 Content moderation. Censorship? \n", + "157 Bot control \n", + "158 Don't feed the trolls \n", + "159 Weaponise youtube content matrices \n", + "160 (botnet) DMCA takedown requests to waste group... \n", + "161 Use offensive cyber action \n", + "162 Better tell the U.S., NATO, and EU story. \n", + "163 Build alternative news sources \n", + "164 Campaign mindset and associated toolbox \n", + "165 find and train influencers \n", + "166 Coalition Building and Third-Party Inducements: \n", + "167 collect data/map constellations of Russian“civ... \n", + "168 compatriot policy \n", + "169 Limit access to alterable documents \n", + "170 Deploy Information and Narrative-Building in S... \n", + "171 Improve Coordination with and feedback from th... \n", + "172 Identify, monitor, and, if necessary, target R... \n", + "173 malware detection/quarantine/deletion \n", + "174 Include the role of social media in the regula... \n", + "175 Respected figure (influencer) disavows misinfo \n", + "176 Set data 'honeytraps' \n", + "177 Stop offering press credentials to propaganda ... \n", + "178 strong dialogue between the federal government... \n", + "179 tit-for-tat campaign \n", + "180 Use encrypted apps for confidential communication \n", + "181 Create policy that makes social media police d... \n", + "182 Use fraud legislation to clean up social media \n", + "183 Registries alert when large batches of newsy U... \n", + "184 Censorship \n", + "185 Add metadata to content - out of the control o... \n", + "\n", + " Details \\\n", + "0 NaN \n", + "1 NaN \n", + "2 \\n \n", + "3 Unsure \n", + "4 NaN \n", + "5 NaN \n", + "6 international donors will donate to a basket f... \n", + "7 NaN \n", + "8 Polluting A/B testing requires knowledge of MO... \n", + "9 Applies to most of the content used by exposur... \n", + "10 NaN \n", + "11 If creators are using network analysis to dete... \n", + "12 NaN \n", + "13 Duplicate of \"Promote playbooks to call out di... \n", + "14 Duplicate of \"Promote constructive communicati... \n", + "15 NaN \n", + "16 NaN \n", + "17 NaN \n", + "18 NaN \n", + "19 NaN \n", + "20 NaN \n", + "21 NaN \n", + "22 NaN \n", + "23 NaN \n", + "24 Identify social media accounts as sources of p... \n", + "25 Use leadership in the arts, entertainment, and... \n", + "26 USAID has been restructuring its programs to a... \n", + "27 NaN \n", + "28 Confirm whether platforms are actively removin... \n", + "29 Create competing narratives. Included \"Facilit... \n", + ".. ... \n", + "156 NaN \n", + "157 NaN \n", + "158 NaN \n", + "159 NaN \n", + "160 NaN \n", + "161 Align offensive cyber action with information ... \n", + "162 Civil engagement activities conducted on the p... \n", + "163 Create alternative local-language news sources... \n", + "164 A campaign plan for the gray zone must account... \n", + "165 Identify key influencers (e.g. use network ana... \n", + "166 Advance coalitions across borders and sectors,... \n", + "167 Kremlin’s narrative spin extends through const... \n", + "168 protect the interests of this population and, ... \n", + "169 e.g. for leaked legal documents, use court mot... \n", + "170 Promote a narrative of transparency, truthfuln... \n", + "171 gray zone challenges are increasingly multidis... \n", + "172 Impact of and Dealing with Trolls - \"Chatham H... \n", + "173 (2015) Trustwave reported that a Bedep Trojan ... \n", + "174 The European Union created significant new reg... \n", + "175 Has been done in e.g. India \n", + "176 NaN \n", + "177 NaN \n", + "178 Increase civic resilience by partnering with b... \n", + "179 As used by Saudis? \n", + "180 NaN \n", + "181 German model: facebook forced to police conten... \n", + "182 NaN \n", + "183 NaN \n", + "184 Alter and/or block the publication/disseminati... \n", + "185 NaN \n", + "\n", + " Playbook(s) \\\n", + "0 In all playbooks the platform must force user ... \n", + "1 Social media companies remove inactive account... \n", + "2 In all cases some checks need to prevent depla... \n", + "3 NaN \n", + "4 NaN \n", + "5 Playbook 1: Work with platform to identify act... \n", + "6 NaN \n", + "7 NaN \n", + "8 Playbook 1: Promote damp squibs. Within a kno... \n", + "9 Playbook 1: DDoS adversary link shorteners by ... \n", + "10 NaN \n", + "11 Playbook 1: Degrade TA engagement using bots; ... \n", + "12 Playbook 1: Distort TA demographics by posting... \n", + "13 NaN \n", + "14 Spread Infographics & Training Material teachi... \n", + "15 Identify the accounts, the real person's name ... \n", + "16 NaN \n", + "17 NaN \n", + "18 NaN \n", + "19 NaN \n", + "20 NaN \n", + "21 NaN \n", + "22 NaN \n", + "23 NaN \n", + "24 NaN \n", + "25 NaN \n", + "26 NaN \n", + "27 NaN \n", + "28 NaN \n", + "29 Playbook 1: Create multiple versions of the na... \n", + ".. ... \n", + "156 NaN \n", + "157 NaN \n", + "158 NaN \n", + "159 NaN \n", + "160 NaN \n", + "161 NaN \n", + "162 NaN \n", + "163 NaN \n", + "164 NaN \n", + "165 NaN \n", + "166 NaN \n", + "167 NaN \n", + "168 NaN \n", + "169 NaN \n", + "170 NaN \n", + "171 NaN \n", + "172 NaN \n", + "173 NaN \n", + "174 NaN \n", + "175 NaN \n", + "176 NaN \n", + "177 NaN \n", + "178 NaN \n", + "179 NaN \n", + "180 NaN \n", + "181 NaN \n", + "182 NaN \n", + "183 NaN \n", + "184 NaN \n", + "185 Add date and source to images \n", + "\n", + " Resources needed \\\n", + "0 platform_admin,activists,civil_society,money \n", + "1 platform_admin,platform_admin:socialmedia,publ... \n", + "2 platform_admin,platform_admin:socialmedia \n", + "3 NaN \n", + "4 NaN \n", + "5 NaN \n", + "6 NaN \n", + "7 NaN \n", + "8 NaN \n", + "9 NaN \n", + "10 NaN \n", + "11 platform_algorithms \n", + "12 NaN \n", + "13 NaN \n", + "14 NaN \n", + "15 NaN \n", + "16 NaN \n", + "17 NaN \n", + "18 NaN \n", + "19 NaN \n", + "20 NaN \n", + "21 NaN \n", + "22 NaN \n", + "23 NaN \n", + "24 NaN \n", + "25 NaN \n", + "26 NaN \n", + "27 NaN \n", + "28 NaN \n", + "29 NaN \n", + ".. ... \n", + "156 platform_admin \n", + "157 NaN \n", + "158 public,media \n", + "159 NaN \n", + "160 public,elves \n", + "161 infosec \n", + "162 government,military \n", + "163 NaN \n", + "164 NaN \n", + "165 data scientist,influencers \n", + "166 NaN \n", + "167 NaN \n", + "168 NaN \n", + "169 NaN \n", + "170 NaN \n", + "171 NaN \n", + "172 NaN \n", + "173 infosec \n", + "174 government \n", + "175 influencers \n", + "176 NaN \n", + "177 government \n", + "178 companies,government \n", + "179 government,platforms \n", + "180 NaN \n", + "181 government:policymakers \n", + "182 government:policymakers \n", + "183 platform_admin \n", + "184 platform_admin \n", + "185 NaN \n", + "\n", + " How found References \\\n", + "0 2019-11-workshop NaN \n", + "1 2019-11-workshop,2019-11-search NaN \n", + "2 2019-11-workshop NaN \n", + "3 2019-11-workshop NaN \n", + "4 2019-11-workshop NaN \n", + "5 2019-11-workshop NaN \n", + "6 2019-11-search Rand2237 \n", + "7 2019-11-search NaN \n", + "8 2019-11-workshop NaN \n", + "9 2019-11-workshop NaN \n", + "10 2019-11-workshop NaN \n", + "11 2019-11-workshop NaN \n", + "12 2019-11-workshop NaN \n", + "13 2019-11-workshop NaN \n", + "14 2019-11-workshop NaN \n", + "15 2019-11-workshop NaN \n", + "16 2019-11-workshop NaN \n", + "17 2019-11-workshop NaN \n", + "18 2019-11-workshop NaN \n", + "19 2019-11-workshop NaN \n", + "20 2019-11-workshop NaN \n", + "21 2019-11-workshop NaN \n", + "22 2019-11-workshop NaN \n", + "23 2019-11-workshop NaN \n", + "24 2019-11-search Rand2237 \n", + "25 2019-11-search Hicks19 \n", + "26 2019-11-search Dalton19 \n", + "27 2019-11-search NaN \n", + "28 2019-11-search Rand2237 \n", + "29 2019-11-workshop NaN \n", + ".. ... ... \n", + "156 2019-11-workshop NaN \n", + "157 2019-11-workshop NaN \n", + "158 2019-11-workshop NaN \n", + "159 2019-11-workshop NaN \n", + "160 2019-11-workshop NaN \n", + "161 2019-11-search Dalton19 \n", + "162 2019-11-search Rand2237 \n", + "163 2019-11-search p143 of Corker18 \n", + "164 2019-11-search Hicks19 \n", + "165 2019-11-search Rand2237 \n", + "166 2019-11-search Dalton19 \n", + "167 2019-11-search Rand2237 \n", + "168 2019-11-search Rand2237 \n", + "169 2019-11-search NaN \n", + "170 2019-11-search Hicks19 \n", + "171 2019-11-search Dalton19 \n", + "172 2019-11-search Rand2237 \n", + "173 2019-11-search Rand2237 \n", + "174 2019-11-search Hicks19 \n", + "175 2019-11-search NaN \n", + "176 2019-11-search NaN \n", + "177 2019-11-search NaN \n", + "178 2019-11-search Hicks19 \n", + "179 2019-11-search NaN \n", + "180 2019-11-search NaN \n", + "181 2019-11-workshop NaN \n", + "182 2019-11-workshop NaN \n", + "183 grugq NaN \n", + "184 grugq Taylor81 \n", + "185 grugq NaN \n", + "\n", + " Incidents Tactic Response \\\n", + "0 NaN TA03 Develop People D3 Disrupt \n", + "1 I00004 TA04 Develop Networks D4 Degrade \n", + "2 NaN TA06 Develop Content D2 Deny \n", + "3 NaN TA01 Strategic Planning D4 Degrade \n", + "4 NaN TA06 Develop Content D3 Disrupt \n", + "5 NaN TA11 Persistence D3 Disrupt \n", + "6 NaN TA09 - Exposure D3 Disrupt \n", + "7 I00004 TA09 - Exposure D3 Disrupt \n", + "8 NaN TA11 Persistence D3 Disrupt \n", + "9 NaN TA11 Persistence D4 Degrade \n", + "10 NaN TA11 Persistence D4 Degrade \n", + "11 NaN TA12 Measure Effectiveness D4 Degrade \n", + "12 NaN TA12 Measure Effectiveness D4 Degrade \n", + "13 NaN TA01 Strategic Planning D3 Disrupt \n", + "14 NaN TA01 Strategic Planning D3 Disrupt \n", + "15 NaN TA03 Develop People D7 Deter \n", + "16 NaN TA05 Microtargeting D3 Disrupt \n", + "17 NaN TA05 Microtargeting D3 Disrupt \n", + "18 NaN TA06 Develop Content D3 Disrupt \n", + "19 NaN TA06 Develop Content D7 Deter \n", + "20 NaN TA08 Pump Priming D2 Deny \n", + "21 NaN TA08 Pump Priming D2 Deny \n", + "22 NaN TA08 Pump Priming D2 Deny \n", + "23 NaN TA09 Exposure D3 Disrupt \n", + "24 NaN TA03 Develop People D2 Deny \n", + "25 NaN TA09 Exposure D3 Disrupt \n", + "26 NaN TA04 Develop Networks D2 Deny \n", + "27 I00010,I00015,I00032,I00044 TA09 Exposure D4 Degrade \n", + "28 NaN TA03 Develop People D6 Destroy \n", + "29 NaN TA02 Objective Planning D3 Disrupt \n", + ".. ... ... ... \n", + "156 NaN TA09 Exposure D2 Deny \n", + "157 NaN TA09 Exposure D3 Disrupt \n", + "158 NaN TA09 Exposure D3 Disrupt \n", + "159 NaN TA11 Persistence D3 Disrupt \n", + "160 NaN TA11 Persistence D4 Degrade \n", + "161 NaN TA01 Strategic Planning D3 Disrupt \n", + "162 NaN TA09 Exposure D3 Disrupt \n", + "163 NaN TA04 Develop Networks D2 Deny \n", + "164 NaN TA01 Strategic Planning D3 Disrupt \n", + "165 NaN TA03 Develop People D2 Deny \n", + "166 NaN TA01 Strategic Planning D7 Deter \n", + "167 NaN TA04 Develop Networks D3 Disrupt \n", + "168 NaN TA03 Develop People D3 Disrupt \n", + "169 I00015 TA06 Develop Content D2 Deny \n", + "170 NaN TA06 Develop Content D2 Deny \n", + "171 NaN TA01 Strategic Planning D7 Deter \n", + "172 NaN TA03 Develop People D3 Disrupt \n", + "173 NaN TA09 Exposure D2 Deny \n", + "174 NaN TA07 Channel Selection D3 Disrupt \n", + "175 I00044 TA09 Exposure D3 Disrupt \n", + "176 I00004,I00022 TA06 Develop Content D2 Deny \n", + "177 I00022 TA08 Pump Priming D3 Disrupt \n", + "178 NaN TA01 Strategic Planning D3 Disrupt \n", + "179 I00042 TA01 Strategic Planning D7 Deter \n", + "180 I00022 TA06 Develop Content D2 Deny \n", + "181 NaN TA07 Channel Selection D3 Disrupt \n", + "182 NaN TA07 Channel Selection D3 Disrupt \n", + "183 NaN TA07 Channel Selection D2 Deny \n", + "184 NaN TA09 Exposure D2 Deny \n", + "185 NaN TA06 Develop Content D3 Disrupt \n", + "\n", + " Techniques \\\n", + "0 T0011 - Hijack accounts \n", + "1 T0011 - Hijack accounts\\nTA06 - Develop Conten... \n", + "2 T0022 - Conspiracy narratives\\nT0026 - Create ... \n", + "3 T0002 - Facilitate State Propaganda \n", + "4 NaN \n", + "5 TA08 - Pump Priming\\nTA09 - Exposure\\nTA10 - G... \n", + "6 NaN \n", + "7 NaN \n", + "8 T0020 - Trial content \n", + "9 TA05 - Microtargeting\\nTA09 - Exposure*\\nTA10 ... \n", + "10 T0015 - Create hashtag\\nT0046 - Search Engine ... \n", + "11 NaN \n", + "12 TA12 - Measure Effectiveness\\nT0020 - Trial co... \n", + "13 TA08 - Pump Priming\\nTA09 - Exposure\\nTA10 - G... \n", + "14 TA08 - Pump Priming\\nTA09 - Exposure\\nTA10 - G... \n", + "15 TA08 - Pump Priming\\nT0048 - Cow online opinio... \n", + "16 T0017 - Promote online funding\\nT0061 - Sell m... \n", + "17 T0016 - Clickbait \n", + "18 info pollution \n", + "19 T0026 - Create fake research \n", + "20 T0045 \n", + "21 T0046\\nT0048\\nT0052\\nT0053\\nT0054\\nT0055\\nT0056 \n", + "22 T0041 - Deny involvement \n", + "23 T0052\\nT0053\\nT0054\\nT0055\\nT0056 \n", + "24 NaN \n", + "25 NaN \n", + "26 NaN \n", + "27 NaN \n", + "28 NaN \n", + "29 T0002 - Facilitate State Propaganda\\nT0003 - L... \n", + ".. ... \n", + "156 NaN \n", + "157 T0049\\nT0051\\nT0052\\nT0053\\nT0054\\nT0055\\nT0056 \n", + "158 TA08 - Pump Priming\\nTA09 - Exposure \n", + "159 NaN \n", + "160 NaN \n", + "161 NaN \n", + "162 NaN \n", + "163 NaN \n", + "164 NaN \n", + "165 NaN \n", + "166 NaN \n", + "167 NaN \n", + "168 NaN \n", + "169 T00025 \n", + "170 NaN \n", + "171 NaN \n", + "172 NaN \n", + "173 NaN \n", + "174 NaN \n", + "175 NaN \n", + "176 T0025 leak altered documents \n", + "177 NaN \n", + "178 NaN \n", + "179 NaN \n", + "180 T0025 \n", + "181 NaN \n", + "182 NaN \n", + "183 NaN \n", + "184 NaN \n", + "185 NaN \n", + "\n", + " NOTES \n", + "0 NaN \n", + "1 NaN \n", + "2 NaN \n", + "3 NaN \n", + "4 NaN \n", + "5 NaN \n", + "6 NaN \n", + "7 NaN \n", + "8 NaN \n", + "9 NaN \n", + "10 NaN \n", + "11 NaN \n", + "12 NaN \n", + "13 NaN \n", + "14 NaN \n", + "15 NaN \n", + "16 NaN \n", + "17 NaN \n", + "18 NaN \n", + "19 NaN \n", + "20 NaN \n", + "21 NaN \n", + "22 NaN \n", + "23 NaN \n", + "24 NaN \n", + "25 NaN \n", + "26 NaN \n", + "27 NaN \n", + "28 NaN \n", + "29 CAVEAT: some element of disinformation is simp... \n", + ".. ... \n", + "156 NaN \n", + "157 NaN \n", + "158 NaN \n", + "159 NaN \n", + "160 NaN \n", + "161 NaN \n", + "162 NaN \n", + "163 NaN \n", + "164 NaN \n", + "165 NaN \n", + "166 NaN \n", + "167 NaN \n", + "168 NaN \n", + "169 NaN \n", + "170 NaN \n", + "171 NaN \n", + "172 NaN \n", + "173 NaN \n", + "174 NaN \n", + "175 NaN \n", + "176 NaN \n", + "177 NaN \n", + "178 NaN \n", + "179 NaN \n", + "180 NaN \n", + "181 NaN \n", + "182 NaN \n", + "183 NaN \n", + "184 NaN \n", + "185 NaN \n", + "\n", + "[186 rows x 13 columns]" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import generate_amitt_counters\n", + "\n", + "counter = generate_amitt_counters.Counter()\n", + "counter.write_tactics_markdown()\n", + "counter.write_metacounts_markdown()\n", + "counter.dfcounters" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " index Res\n", + "0 DHS 1\n", + "1 NGO 1\n", + "2 activists 2\n", + "3 adtech 1\n", + "4 civil_society 1\n", + "5 community_groups 1\n", + "6 companies 1\n", + "7 content_creators 1\n", + "8 data scientist 1\n", + "9 data_scientist 1\n", + "10 datastreams 1\n", + "11 developers 2\n", + "12 educators 11\n", + "13 elves 1\n", + "14 factcheckers 2\n", + "15 funding 1\n", + "16 gamesdesigners 1\n", + "17 government 7\n", + "18 government:policymakers 8\n", + "19 influencers 3\n", + "20 influencers:trusted_authority 1\n", + "21 infosec 2\n", + "22 libraries 1\n", + "23 media 10\n", + "24 military 1\n", + "25 money 2\n", + "26 platform_admin 11\n", + "27 platform_admin:adtech 1\n", + "28 platform_admin:fundingsites 1\n", + "29 platform_admin:socialmedia 5\n", + "30 platform_algorithms 8\n", + "31 platform_outreach 1\n", + "32 platforms 1\n", + "33 public 4\n", + "34 public:account_owners 1\n", + "35 religious_organisations 1\n", + "36 schools 1\n", + "37 server_admin 1\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "print('{}'.format(counter.idresource['Res'].value_counts().sort_index().reset_index()))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Writing ../resource/DHScounters.md\n", + "Writing ../resource/NGOcounters.md\n", + "Writing ../resource/activistscounters.md\n", + "Writing ../resource/adtechcounters.md\n", + "Writing ../resource/civil_societycounters.md\n", + "Writing ../resource/community_groupscounters.md\n", + "Writing ../resource/companiescounters.md\n", + "Writing ../resource/content_creatorscounters.md\n", + "Writing ../resource/data scientistcounters.md\n", + "Writing ../resource/data_scientistcounters.md\n", + "Writing ../resource/datastreamscounters.md\n", + "Writing ../resource/developerscounters.md\n", + "Writing ../resource/educatorscounters.md\n", + "Writing ../resource/elvescounters.md\n", + "Writing ../resource/factcheckerscounters.md\n", + "Writing ../resource/fundingcounters.md\n", + "Writing ../resource/gamesdesignerscounters.md\n", + "Writing ../resource/governmentcounters.md\n", + "Writing ../resource/government:policymakerscounters.md\n", + "Writing ../resource/influencerscounters.md\n", + "Writing ../resource/influencers:trusted_authoritycounters.md\n", + "Writing ../resource/infoseccounters.md\n", + "Writing ../resource/librariescounters.md\n", + "Writing ../resource/mediacounters.md\n", + "Writing ../resource/militarycounters.md\n", + "Writing ../resource/moneycounters.md\n", + "Writing ../resource/platform_admincounters.md\n", + "Writing ../resource/platform_admin:adtechcounters.md\n", + "Writing ../resource/platform_admin:fundingsitescounters.md\n", + "Writing ../resource/platform_admin:socialmediacounters.md\n", + "Writing ../resource/platform_algorithmscounters.md\n", + "Writing ../resource/platform_outreachcounters.md\n", + "Writing ../resource/platformscounters.md\n", + "Writing ../resource/publiccounters.md\n", + "Writing ../resource/public:account_ownerscounters.md\n", + "Writing ../resource/religious_organisationscounters.md\n", + "Writing ../resource/schoolscounters.md\n", + "Writing ../resource/server_admincounters.md\n", + "updated ../resource_counts.md\n" + ] + } + ], + "source": [ + "import os\n", + "import numpy as np\n", + "\n", + "def create_resource_file(index, rowtype, datadir):\n", + " oid = index\n", + " counterrows = counter.idresource[counter.idresource['Res'] == index]['ID'].to_list()\n", + " html = '''# {} counters: {}\\n\\n'''.format(rowtype, index)\n", + " html += '## by action\\n\\n'\n", + " omatrix = counter.dfcounters[counter.dfcounters['ID'].isin(counterrows)].groupby('Response')\n", + " for resp, clist in omatrix:\n", + " html += '\\n### {}\\n'.format(resp)\n", + " for c in clist.iterrows():\n", + " html += '* {}: {} (needs {})\\n'.format(c[1]['ID'], c[1]['Title'],\n", + " c[1]['Resources needed'])\n", + "\n", + " datafile = '{}/{}counters.md'.format(datadir, oid)\n", + " print('Writing {}'.format(datafile))\n", + " with open(datafile, 'w') as f:\n", + " f.write(html)\n", + " f.close()\n", + " return(oid, omatrix)\n", + "\n", + "\n", + "def write_resource_markdown(outfile = '../resource_counts.md'):\n", + "\n", + " coltype = 'Response'\n", + " rowtype = 'resource'\n", + " rowname = 'resource'\n", + "\n", + " html = '''# AMITT {} courses of action\n", + "\n", + "\n", + "\n", + "\n", + "'''.format(rowtype)\n", + "\n", + " # Table heading row\n", + " colvals = counter.dfcounters[coltype].value_counts().sort_index().index\n", + " for col in colvals:\n", + " html += '\\n'.format(col)\n", + " html += '\\n'\n", + "\n", + " # Data rows\n", + " datadir = '../{}'.format(rowname)\n", + " if not os.path.exists(datadir):\n", + " os.makedirs(datadir)\n", + " for index in counter.idresource['Res'].value_counts().sort_index().index:\n", + " (oid, omatrix) = create_resource_file(index, rowtype, datadir) #self\n", + " row = pd.DataFrame(omatrix.apply(len), index=colvals).fillna(' ')\n", + " html += '\\n'.format(\n", + " rowname, oid, index)\n", + " if len(row.columns) > 0:\n", + " for val in row[0].to_list():\n", + " html += '\\n'.format(val)\n", + " html += '\\n\\n'.format('')\n", + "\n", + " html += '\\n
{}TOTALS
{2}{}{}
\\n' \n", + "\n", + " with open(outfile, 'w') as f:\n", + " f.write(html)\n", + " print('updated {}'.format(outfile))\n", + "\n", + " return\n", + "\n", + "write_resource_markdown()" + ] + }, + { + "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": 2 +} diff --git a/HTML_GENERATING_CODE/.ipynb_checkpoints/AMITT_create_incident_visualisations-checkpoint.ipynb b/HTML_GENERATING_CODE/.ipynb_checkpoints/AMITT_create_incident_visualisations-checkpoint.ipynb new file mode 100644 index 0000000..8acf5cd --- /dev/null +++ b/HTML_GENERATING_CODE/.ipynb_checkpoints/AMITT_create_incident_visualisations-checkpoint.ipynb @@ -0,0 +1,135 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Create AMITT incident visualisations\n", + "\n", + "Many thanks to https://python-graph-gallery.com/91-customize-seaborn-heatmap/" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "import seaborn as sns\n", + "import pandas as pd\n", + "import numpy as np\n", + "import generate_amitt_ttps\n", + "\n", + "# Check that heatmap works\n", + "df = pd.DataFrame(np.random.random((10,12)), columns=[\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\"])\n", + "sns.heatmap(df, annot=True, annot_kws={\"size\": 7})" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 5, 0, 8, 11, 1, 12, 2, 3, 1, 4, 2, 0],\n", + " [ 2, 0, 1, 1, 1, 4, 2, 2, 1, 0, 0, 0],\n", + " [ 0, 0, 1, 0, 3, 4, 10, 0, 2, 0, 0, 0],\n", + " [ 0, 0, 0, 0, 0, 1, 10, 0, 2, 0, 0, 0],\n", + " [ 0, 0, 0, 0, 0, 2, 2, 1, 1, 0, 0, 0],\n", + " [ 0, 0, 0, 1, 0, 2, 3, 1, 5, 0, 0, 0],\n", + " [ 0, 0, 0, 0, 0, 4, 3, 1, 14, 0, 0, 0],\n", + " [ 0, 0, 0, 0, 0, 0, 3, 12, 15, 0, 0, 0],\n", + " [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],\n", + " [ 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0]])" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "amitt = generate_amitt_ttps.Amitt()\n", + "\n", + "techcounts = amitt.it[['id_incident','id_technique']].drop_duplicates().groupby('id_technique').count().to_dict()['id_incident']\n", + "techlabels = amitt.grid[2:][:]\n", + "nrows = len(techlabels)\n", + "ncols = len(techlabels[0])\n", + "techgrid = np.zeros([nrows, ncols], dtype = int)\n", + "\n", + "for row in range(nrows):\n", + " for col in range(ncols):\n", + " if techlabels[row][col] in techcounts:\n", + " techgrid[row][col] = techcounts[techlabels[row][col]]\n", + "\n", + "sns.heatmap(techgrid, annot=True, annot_kws={\"size\": 7})\n", + "techgrid" + ] + }, + { + "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": 2 +} diff --git a/HTML_GENERATING_CODE/AMITT_create_counters_summaries.ipynb b/HTML_GENERATING_CODE/AMITT_create_counters_summaries.ipynb index db46321..76394ff 100644 --- a/HTML_GENERATING_CODE/AMITT_create_counters_summaries.ipynb +++ b/HTML_GENERATING_CODE/AMITT_create_counters_summaries.ipynb @@ -1644,9 +1644,9 @@ } ], "source": [ - "import counter\n", + "import generate_amitt_counters\n", "\n", - "counter = counter.Counter()\n", + "counter = generate_amitt_counters.Counter()\n", "counter.write_tactics_markdown()\n", "counter.write_metacounts_markdown()\n", "counter.dfcounters" @@ -1852,7 +1852,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.8.3" } }, "nbformat": 4, diff --git a/HTML_GENERATING_CODE/AMITT_create_incident_visualisations.ipynb b/HTML_GENERATING_CODE/AMITT_create_incident_visualisations.ipynb index b591a5c..8acf5cd 100644 --- a/HTML_GENERATING_CODE/AMITT_create_incident_visualisations.ipynb +++ b/HTML_GENERATING_CODE/AMITT_create_incident_visualisations.ipynb @@ -41,7 +41,7 @@ "import seaborn as sns\n", "import pandas as pd\n", "import numpy as np\n", - "import amitt\n", + "import generate_amitt_ttps\n", "\n", "# Check that heatmap works\n", "df = pd.DataFrame(np.random.random((10,12)), columns=[\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\"])\n", @@ -86,7 +86,7 @@ } ], "source": [ - "amitt = amitt.Amitt()\n", + "amitt = generate_amitt_ttps.Amitt()\n", "\n", "techcounts = amitt.it[['id_incident','id_technique']].drop_duplicates().groupby('id_technique').count().to_dict()['id_incident']\n", "techlabels = amitt.grid[2:][:]\n", @@ -127,7 +127,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.3" + "version": "3.8.3" } }, "nbformat": 4, diff --git a/HTML_GENERATING_CODE/counter.py b/HTML_GENERATING_CODE/generate_amitt_counters.py similarity index 92% rename from HTML_GENERATING_CODE/counter.py rename to HTML_GENERATING_CODE/generate_amitt_counters.py index 608c7e0..e1fb22f 100644 --- a/HTML_GENERATING_CODE/counter.py +++ b/HTML_GENERATING_CODE/generate_amitt_counters.py @@ -11,7 +11,7 @@ from sklearn.feature_extraction.text import CountVectorizer class Counter: - def __init__(self, infile = 'CountersPlaybook_MASTER.xlsx'): + def __init__(self, infile = '../AMITT_MASTER_DATA/AMITT_Counters_MASTER.xlsx'): # Load metadata from counters excelfile # FIXIT: Ungodly hack = please fix @@ -61,7 +61,7 @@ class Counter: # Print list of counters for each square of the COA matrix # Write HTML version of framework diagram to markdown file - def write_tactics_markdown(self, outfile = '../tactic_counts.md'): + def write_tactics_markdown(self, outfile = '../counter_tactic_counts.md'): coacounts = pd.pivot_table(self.dfcounters[['Tactic', 'Response', 'ID']], index='Response', columns='Tactic', aggfunc=len, fill_value=0) @@ -75,7 +75,7 @@ class Counter: #Table heading = Tactic names for col in coacounts.columns.get_level_values(1): tid = self.create_tactic_file(col) - html += '{1}\n'.format( + html += '{1}\n'.format( tid, col) html += '\n' @@ -98,8 +98,8 @@ class Counter: return def create_tactic_file(self, tname): - if not os.path.exists('../tactics'): - os.makedirs('../tactics') + if not os.path.exists('../counter_tactics'): + os.makedirs('../counter_tactics') tid = tname[:tname.find(' ')] html = '''# Tactic {} counters\n\n'''.format(tname) @@ -127,7 +127,7 @@ class Counter: html += '* {}: {} (needs {})\n'.format(c[1]['ID'], c[1]['Title'], c[1]['Resources needed']) - datafile = '../tactics/{}counters.md'.format(tid) + datafile = '../counter_tactics/{}counters.md'.format(tid) print('Writing {}'.format(datafile)) with open(datafile, 'w') as f: f.write(html) @@ -156,7 +156,7 @@ class Counter: return(oid) - def write_metacounts_markdown(self, outfile = '../metatag_counts.md'): + def write_metacounts_markdown(self, outfile = '../counter_metatag_counts.md'): coltype = 'Response' rowtype = 'metatechnique' @@ -179,12 +179,12 @@ class Counter: html += 'TOTALS\n' # Data rows - datadir = '../{}'.format(rowname) + datadir = '../counters_{}'.format(rowname) if not os.path.exists(datadir): os.makedirs(datadir) for index, counts in mtcounts.iterrows(): tid = self.create_object_file(index, rowtype, datadir) - html += '{2}\n'.format( + html += '{2}\n'.format( rowname, tid, index) for val in counts.values: html += '{}\n'.format(val) diff --git a/HTML_GENERATING_CODE/amitt.py b/HTML_GENERATING_CODE/generate_amitt_ttps.py similarity index 99% rename from HTML_GENERATING_CODE/amitt.py rename to HTML_GENERATING_CODE/generate_amitt_ttps.py index a4bad9c..4aa8233 100644 --- a/HTML_GENERATING_CODE/amitt.py +++ b/HTML_GENERATING_CODE/generate_amitt_ttps.py @@ -15,7 +15,7 @@ import os class Amitt: - def __init__(self, infile = 'amitt_metadata_v3.xlsx'): + def __init__(self, infile = '../AMITT_MASTER_DATA/AMITT_TTPs_MASTER.xlsx'): # Load metadata from file metadata = {} diff --git a/README.md b/README.md index 14c78c3..9942e0b 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # AMITT Disinformation Tactics, Techniques and Processes (TTP) Framework -* [Framework diagram](matrix.md) +* Incident creator TTPs: [Framework diagram](matrix.md) +* Countermeasures, by: [tactic](counter_tactic_counts.md), [metatechnique](counter_metatag_counts.md), [resource](counter_resource_counts.md) * [List of incidents](incidents.md) -* [Counters matrix](counter_tactic_counts.md) AMITT (Adversarial Misinformation and Influence Tactics and Techniques) is a framework designed for describing and understanding disinformation incidents. AMITT is part of work on adapting information security (infosec) practices to help track and counter misinformation, and is designed to fit existing infosec practices and tools. @@ -32,7 +32,7 @@ The framework was created by finding and analysing a set of existing misinformat Countermeasures are shown grouped by: -* Red team tactic stage and technique (see https://github.com/misinfosecproject/amitt_framework for descriptions of these) in directory [tactics](tactics), with a clickable grid for this in [counter_tactic_counts.md](counter_tactic_counts.md) +* Red team tactic stage and technique, with a clickable grid for this in [counter_tactic_counts.md](counter_tactic_counts.md) * A higher-level label, "metatechnique",in directory [counter_metatag](counter_metatag), with a clickable grid for this in [counter_metatag_counts.md](counter_metatag_counts.md) (To be fair this is mostly so we can group and make sure we're getting the cleaning right.) * The types of people who can respond [counter_resource_counts.md](counter_resource_counts.md). @@ -40,8 +40,8 @@ Countermeasures are shown grouped by: The code to create all the HTML datasheets is in directory [HTML_GENERATING_CODE](HTML_GENERATING_CODE) -* If you change something in the metadata file, go into generating_code, and type "python amitt.py" - this will update the metadata in all the datasheets, and create a datasheet each for any new objects you've added to the spreadsheet. -* If you change anything in the countermeasures spreadsheet, typing "python counter.py" creates all html pages for countermeasures. +* If you change something in the metadata file, go into generating_code, and type "python generate_amitt_ttps.py" - this will update the metadata in all the datasheets, and create a datasheet each for any new objects you've added to the spreadsheet. +* If you change anything in the countermeasures spreadsheet, typing "python generate_amitt_counters.py" creates all html pages for countermeasures. ## Provenance diff --git a/counter_metatag_counts.md b/counter_metatag_counts.md index 51c56d7..f47f9b6 100644 --- a/counter_metatag_counts.md +++ b/counter_metatag_counts.md @@ -11,7 +11,7 @@ D6 Destroy D7 Deter TOTALS -cleaning +cleaning 0 2 1 @@ -22,7 +22,7 @@ 4 -countermessaging +countermessaging 0 3 8 @@ -33,7 +33,7 @@ 17 -data pollution +data pollution 0 0 1 @@ -44,7 +44,7 @@ 6 -daylight +daylight 0 6 8 @@ -55,7 +55,7 @@ 19 -dilution +dilution 0 0 5 @@ -66,7 +66,7 @@ 6 -diversion +diversion 0 2 10 @@ -77,7 +77,7 @@ 17 -friction +friction 0 13 7 @@ -88,7 +88,7 @@ 26 -metatechnique +metatechnique 4 3 6 @@ -99,7 +99,7 @@ 16 -reduce resources +reduce resources 0 2 1 @@ -110,7 +110,7 @@ 4 -removal +removal 0 15 4 @@ -121,7 +121,7 @@ 19 -resilience +resilience 0 10 7 @@ -132,7 +132,7 @@ 28 -scoring +scoring 0 7 0 @@ -143,7 +143,7 @@ 10 -targeting +targeting 0 1 6 @@ -154,7 +154,7 @@ 11 -verification +verification 0 2 1 diff --git a/counter_tactic_counts.md b/counter_tactic_counts.md index 40ba239..df699c4 100644 --- a/counter_tactic_counts.md +++ b/counter_tactic_counts.md @@ -3,19 +3,19 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/counters_metatag/cleaningcounters.md b/counters_metatag/cleaningcounters.md new file mode 100644 index 0000000..fdcb891 --- /dev/null +++ b/counters_metatag/cleaningcounters.md @@ -0,0 +1,14 @@ +# metatechnique counters: cleaning + +## by action + + +### D2 Deny +* C00074: Identify identical content and mass deplatform (needs platform_admin,platform_admin:socialmedia) +* C00016: Social media as a privilege not right (needs nan) + +### D3 Disrupt +* C00043: Detect hijacked accounts and reallocate them (needs platform_admin,activists,civil_society,money) + +### D4 Degrade +* C00053: Delete old accounts / Remove unused social media accounts (needs platform_admin,platform_admin:socialmedia,public:account_owners) diff --git a/counters_metatag/countermessagingcounters.md b/counters_metatag/countermessagingcounters.md new file mode 100644 index 0000000..32c9153 --- /dev/null +++ b/counters_metatag/countermessagingcounters.md @@ -0,0 +1,31 @@ +# metatechnique counters: countermessaging + +## by action + + +### D2 Deny +* C00075: normalise language (needs nan) +* C00157: Build alternative news sources (needs nan) +* C00167: Deploy Information and Narrative-Building in Service of Statecraft (needs nan) + +### D3 Disrupt +* C00082: Ground truthing as automated response to pollution (needs nan) +* C00136: Microtarget most likely targets then send them countermessages (needs nan) +* C00169: develop a creative content hub (needs nan) +* C00211: Use humorous counter-narratives (needs nan) +* C00017: Media campaign promoting in-group to out-group in person communication / activities (needs media) +* C00042: Address truth contained in narratives (needs nan) +* C00156: Better tell the U.S., NATO, and EU story. (needs government,military) +* C00200: Respected figure (influencer) disavows misinfo (needs influencers) + +### D4 Degrade +* C00026: Shore up democracy based messages (peace, freedom) - make it sexy (needs nan) +* C00025: Promote identity neutral narratives (needs nan) +* C00117: Downgrade de-amplify label promote counter to disinformation (needs nan) +* C00118: Repurpose images with new text (needs nan) + +### D6 Destroy +* C00062: Free open library sources worldwide (needs nan) + +### D7 Deter +* C00119: Engage payload and debunk. Provide link to facts. (needs nan) diff --git a/counters_metatag/data pollutioncounters.md b/counters_metatag/data pollutioncounters.md new file mode 100644 index 0000000..ab797d1 --- /dev/null +++ b/counters_metatag/data pollutioncounters.md @@ -0,0 +1,16 @@ +# metatechnique counters: data pollution + +## by action + + +### D3 Disrupt +* C00137: Pollute the AB-testing data feeds (needs nan) + +### D4 Degrade +* C00140: "Bomb" link shorteners with lots of calls (needs nan) +* C00145: Pollute the data voids with wholesome content (Kittens! Babyshark!) (needs nan) +* C00148: Add random links to network graphs (needs platform_algorithms) +* C00149: Poison the monitoring & evaluation data (needs nan) + +### D5 Deceive +* C00047: Coordinated inauthentics (needs nan) diff --git a/counters_metatag/daylightcounters.md b/counters_metatag/daylightcounters.md new file mode 100644 index 0000000..22488ff --- /dev/null +++ b/counters_metatag/daylightcounters.md @@ -0,0 +1,33 @@ +# metatechnique counters: daylight + +## by action + + +### D2 Deny +* C00113: Debunk and defuse a fake expert / credentials. Attack audience quality of fake expert (needs nan) +* C00115: Expose actor and intentions (needs nan) +* C00116: Provide proof of involvement (needs nan) +* C00150: “calling them out” (needs nan) +* C00152: “name and shame” (needs nan) +* C00217: Registries alert when large batches of newsy URLs get registered together (needs platform_admin) + +### D3 Disrupt +* C00018: Promote constructive communication by shaming division-enablers (needs nan) +* C00019: Promote playbooks to call out division-enablers (needs nan) +* C00068: Expose online funding as fake (needs nan) +* C00069: Mark clickbait visually (needs nan) +* C00081: Discredit by pointing out the "noise" and informing public that "flooding" is a technique of disinformation campaigns; point out intended objective of "noise" (needs nan) +* C00126: Social media amber alert (needs nan) +* C00151: “fight in the light” (needs nan) +* C00219: Add metadata to content - out of the control of the adversary (needs nan) + +### D4 Degrade +* C00184: Media exposure (needs nan) +* C00085: Demuting content (needs nan) + +### D6 Destroy +* C00189: Ongoing analysis/monitoring of "flagged" profiles (needs nan) + +### D7 Deter +* C00048: Name and Shame (needs nan) +* C00094: Force full disclosure on corporate sponsor of research (needs nan) diff --git a/counters_metatag/dilutioncounters.md b/counters_metatag/dilutioncounters.md new file mode 100644 index 0000000..b88399e --- /dev/null +++ b/counters_metatag/dilutioncounters.md @@ -0,0 +1,14 @@ +# metatechnique counters: dilution + +## by action + + +### D3 Disrupt +* C00031: Dilute the core narrative - create multiple permutations, target / amplify (needs nan) +* C00066: Co-opt a hashtag and drown it out (hijack it back) (needs nan) +* C00105: Buy more advertising than the adversary to shift influence and algorithms (needs money,adtech) +* C00128: Create friction by marking content with ridicule or other "decelerants" (needs influencers:trusted_authority) +* C00178: Fill information voids with non-disinformation content (needs nan) + +### D4 Degrade +* C00087: Make more noise (needs nan) diff --git a/counters_metatag/diversioncounters.md b/counters_metatag/diversioncounters.md new file mode 100644 index 0000000..141eff6 --- /dev/null +++ b/counters_metatag/diversioncounters.md @@ -0,0 +1,29 @@ +# metatechnique counters: diversion + +## by action + + +### D2 Deny +* C00195: Redirect Method (needs nan) +* C00202: Set data 'honeytraps' (needs nan) + +### D3 Disrupt +* C00029: Create fake website to issue counter narrative and counter narrative through physical merchandise (needs nan) +* C00030: Develop a compelling counter narrative (truth based) (needs nan) +* C00032: Hijack content and link to truth- based info (platform) (needs nan) +* C00078: Change Search Algorithms for Disinformation Content. More specifically, change image search algorithms for hate groups and extremists (needs nan) +* C00079: Change search algorithms for hate and extremist queries to show content sympathetic to opposite side (needs nan) +* C00080: Create competing narrative (needs nan) +* C00084: Steal their truths (needs nan) +* C00100: Hashtag jacking (needs nan) +* C00106: Click-bait centrist content (needs nan) +* C00194: Provide an alternative to Russian information by expanding and improving local content. (needs nan) + +### D4 Degrade +* C00088: Poison pill recasting of message (needs nan) +* C00086: Distract from noise with addictive content (needs nan) + +### D5 Deceive +* C00090: Fake engagement system (needs nan) +* C00091: Honeypot social community (needs nan) +* C00103: Create a bot that engages / distract trolls (needs developers) diff --git a/counters_metatag/frictioncounters.md b/counters_metatag/frictioncounters.md new file mode 100644 index 0000000..9428a18 --- /dev/null +++ b/counters_metatag/frictioncounters.md @@ -0,0 +1,36 @@ +# metatechnique counters: friction + +## by action + + +### D2 Deny +* C00006: Charge for social media (needs platform_admin:socialmedia) +* C00034: Create more friction at account creation (needs nan) +* C00035: Friction (needs nan) +* C00056: Get off social media (needs nan) +* C00097: Require use of verified identities to contribute to poll or comment (needs platform_algorithms) +* C00098: Revocation of "verified" (needs platform_admin) +* C00099: Strengthen verification methods (needs platform_algorithms) +* C00010: Enhanced privacy regulation for social media (needs government:policymakers) +* C00110: Monetize centrist SEO by subsidizing the difference in greater clicks towards extremist content (needs funding) +* C00112: "Prove they are not an op!" (needs nan) +* C00114: Don't engage with payloads (needs public) +* C00122: Content moderation. Censorship? (needs platform_admin) +* C00165: Limit access to alterable documents (needs nan) + +### D3 Disrupt +* C00044: Keep people from posting to social media immediately (needs platform_algorithms) +* C00147: Make amplification of social media ports expire (e.g. can't like/ retweet after n days) (needs platform_algorithms) +* C00045: S4d detection and re-allocation approaches (needs nan) +* C00123: Bot control (needs nan) +* C00124: Don't feed the trolls (needs public,media) +* C00139: Weaponise youtube content matrices (needs nan) +* C00203: Stop offering press credentials to propaganda outlets (needs government) + +### D4 Degrade +* C00089: Throttle number of forwards (needs nan) +* C00101: Create participant friction (needs platform_algorithms) +* C00102: Make repeat voting harder (needs platform_admin) +* C00141: "Hey this story is old" popup when messaging with old URL (needs platform_algorithms) +* C00142: "This has been disproved - do you want to forward it" (needs platform_algorithms) +* C00020: Deligitimise the 24 hour news cycle (needs media) diff --git a/counters_metatag/metatechniquecounters.md b/counters_metatag/metatechniquecounters.md new file mode 100644 index 0000000..107688c --- /dev/null +++ b/counters_metatag/metatechniquecounters.md @@ -0,0 +1,28 @@ +# metatechnique counters: metatechnique + +## by action + + +### ALL +* C00001: Better models of info spread up the layers (needs nan) +* C00003: How can we safeguard against extremists using the tools that we will produce? (needs nan) +* C00004: Managing like a chronic disease (needs nan) +* C00005: Policy: makers, terminology, elements: a) broad, b) specific (needs nan) + +### D2 Deny +* C00012: Platform regulation (needs government:policymakers) +* C00055: Empower existing regulators to govern social media (needs government:policymakers,government,platform_admin) +* C00174: Free and Fair Press (needs nan) + +### D3 Disrupt +* C00170: elevate information as a critical domain of statecraft (needs nan) +* C00159: Campaign mindset and associated toolbox (needs nan) +* C00196: Include the role of social media in the regulatory framework for media (needs government) +* C00205: strong dialogue between the federal government and private sector to encourage better reporting (needs companies,government) +* C00214: Create policy that makes social media police disinformation (needs government:policymakers) +* C00215: Use fraud legislation to clean up social media (needs government:policymakers) + +### D7 Deter +* C00120: Open dialogue about design of platforms to produce different outcomes (needs nan) +* C00161: Coalition Building and Third-Party Inducements: (needs nan) +* C00176: Improve Coordination with and feedback from the U.S. private sector (needs nan) diff --git a/counters_metatag/reduce resourcescounters.md b/counters_metatag/reduce resourcescounters.md new file mode 100644 index 0000000..e92e7cd --- /dev/null +++ b/counters_metatag/reduce resourcescounters.md @@ -0,0 +1,14 @@ +# metatechnique counters: reduce resources + +## by action + + +### D2 Deny +* C00129: Use banking to cut off access (needs nan) +* C00216: Use advertiser controls to stem flow of funds to bad actors (needs platform_admin:adtech) + +### D3 Disrupt +* C00138: Spam domestic actors with lawsuits (needs nan) + +### D4 Degrade +* C00144: Buy out troll farm employees / offer them jobs (needs nan) diff --git a/counters_metatag/removalcounters.md b/counters_metatag/removalcounters.md new file mode 100644 index 0000000..a84f69e --- /dev/null +++ b/counters_metatag/removalcounters.md @@ -0,0 +1,27 @@ +# metatechnique counters: removal + +## by action + + +### D2 Deny +* C00039: Standard reporting for false profiles (needs nan) +* C00070: Block access to platform. DDOS an attacker. (needs nan) +* C00071: Block source of pollution (needs nan) +* C00072: Content censorship in non-relevant domains e.g. Pinterest antivax (needs nan) +* C00131: Seize and analyse botnet servers (needs server_admin) +* C00154: Ask media not to report false information (needs media) +* C00155: Ban incident actors from funding sites (needs platform_admin:fundingsites) +* C00171: social media content take-downs (needs platform_admin:socialmedia) +* C00172: social media page removal (needs platform_admin:socialmedia) +* C00197: remove suspicious facebook accounts (needs nan) +* C00058: Report crowdfunder as violator (needs nan) +* C00063: Ban political microtargeting (needs government:policymakers) +* C00076: Prohibit images in political discourse channels (needs nan) +* C00182: malware detection/quarantine/deletion (needs infosec) +* C00218: Censorship (needs platform_admin) + +### D3 Disrupt +* C00133: Deplatform Account* (needs platform_admin) +* C00135: Deplatform message groups and/or message boards (needs platform_admin) +* C00065: Ban political ads (needs government:policymakers) +* C00179: Identify, monitor, and, if necessary, target Russia-based nonattributed social media accounts (needs nan) diff --git a/counters_metatag/resiliencecounters.md b/counters_metatag/resiliencecounters.md new file mode 100644 index 0000000..2c250bd --- /dev/null +++ b/counters_metatag/resiliencecounters.md @@ -0,0 +1,40 @@ +# metatechnique counters: resilience + +## by action + + +### D2 Deny +* C00009: Educate high profile influencers on best practices (needs influencers,educators) +* C00011: Media literacy. Games to identify fake news (needs educators,gamesdesigners,developers) +* C00033: Build cultural resistance to false content (needs nan) +* C00049: Influence literacy training (needs educators) +* C00050: Anti-elicitation training (needs educators) +* C00051: Phishing prevention education etc (needs educators) +* C00073: Educate on how to handle info pollution. Push out targeted education on why it's pollution (needs educators) +* C00204: Strengthen local media (needs media) +* C00160: find and train influencers (needs data_scientist,influencers) +* C00210: Use encrypted apps for confidential communication (needs nan) + +### D3 Disrupt +* C00061: Innoculating at language (needs nan) +* C00125: Prepare the population with pre-announcements (needs nan) +* C00188: Newsroom/Journalist training to counter SEO influence (needs media,educators) +* C00190: open engagement with civil society (needs public) +* C00193: promotion of a “higher standard of journalism” (needs media,educators) +* C00212: build public resilence by making civil society more vibrant (needs educators,government) +* C00109: De-escalation (needs nan) + +### D4 Degrade +* C00022: Innoculate. Positive campaign to promote feeling of safety - to counter ability and fear based attacks (needs nan) +* C00023: Promote civility as an identity that people will defend (needs nan) +* C00024: Promote constructive narratives i.e. not polarising. Pro-life, pro-choice, or pro-USA? (needs nan) +* C00054: Media literacy training. (needs educators,libraries,schools,DHS,NGO,platform_outreach,media,community_groups,religious_organisations) +* C00158: Use training to build the resilience of at-risk populations. (needs educators,media) +* C00021: Encourage in-person communication (needs nan) +* C00111: Present sympathetic views of opposite side (needs media,content_creators) + +### D7 Deter +* C00130: Mentorship: elders, youth, credit. Learn vicariously. (needs nan) +* C00027: Create culture of civility (needs nan) +* C00093: Establish tailored code of conduct for individuals with many followers (needs nan) +* C00121: Tool transparency and literacy for channels people follow. (needs nan) diff --git a/counters_metatag/scoringcounters.md b/counters_metatag/scoringcounters.md new file mode 100644 index 0000000..53c5372 --- /dev/null +++ b/counters_metatag/scoringcounters.md @@ -0,0 +1,18 @@ +# metatechnique counters: scoring + +## by action + + +### D2 Deny +* C00007: Create framework for BetterBusinessBureau (BBB) for news media (needs nan) +* C00008: Create shared fact-checking database (needs factcheckers) +* C00013: Rating framework for news - full transcripts, link source, add items, BBB for news (needs nan) +* C00014: Real-time updates to fact-checking database (needs factcheckers) +* C00015: Reputation scores for social media users (needs data_scientist,datastreams) +* C00057: Privacy standards (needs nan) +* C00107: Content moderation (needs nan) + +### D7 Deter +* C00092: Establish a truth teller reputation score for individuals with many followers (needs nan) +* C00095: Keep score (needs nan) +* C00096: Strengthen institutions that are always truth tellers (needs nan) diff --git a/counters_metatag/targetingcounters.md b/counters_metatag/targetingcounters.md new file mode 100644 index 0000000..e69d901 --- /dev/null +++ b/counters_metatag/targetingcounters.md @@ -0,0 +1,23 @@ +# metatechnique counters: targeting + +## by action + + +### D2 Deny +* C00036: Infiltrate the in-group to discredit leaders (divide) (needs nan) + +### D3 Disrupt +* C00060: Enhanced legal enforcement against for-profit follower/engagement factories (needs government:policymakers) +* C00067: Denigrate the recipient/ project (of online funding) (needs nan) +* C00077: Active defence: replay "develop people" (needs nan) +* C00153: Use offensive cyber action (needs infosec) +* C00162: collect data/map constellations of Russian“civil society”. Unravel/target the Potemkin villages (needs nan) +* C00164: compatriot policy (needs nan) + +### D4 Degrade +* C00046: Marginalise and discredit extremist (needs nan) +* C00052: Infiltrate platforms (needs activists) +* C00143: (botnet) DMCA takedown requests to waste group time (needs public,elves) + +### D7 Deter +* C00207: tit-for-tat campaign (needs government,platforms) diff --git a/counters_metatag/verificationcounters.md b/counters_metatag/verificationcounters.md new file mode 100644 index 0000000..d020c44 --- /dev/null +++ b/counters_metatag/verificationcounters.md @@ -0,0 +1,11 @@ +# metatechnique counters: verification + +## by action + + +### D2 Deny +* C00040: third party verification for people (needs nan) +* C00059: Verification of project before posting (counters funding campaigns) (needs nan) + +### D3 Disrupt +* C00028: Blockchain audit log and validation with collaborative decryption to post comments (needs nan)
ALLTA01 Strategic PlanningTA02 Objective PlanningTA03 Develop PeopleTA04 Develop NetworksTA05 MicrotargetingTA06 Develop ContentTA07 Channel SelectionTA08 Pump PrimingTA09 ExposureTA10 Go PhysicalTA11 PersistenceTA12 Measure EffectivenessALLTA01 Strategic PlanningTA02 Objective PlanningTA03 Develop PeopleTA04 Develop NetworksTA05 MicrotargetingTA06 Develop ContentTA07 Channel SelectionTA08 Pump PrimingTA09 ExposureTA10 Go PhysicalTA11 PersistenceTA12 Measure Effectiveness
ALL 4