{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Generate DISARM files\n", "\n", "Generate DISARM files and database objects from the DISARM master spreadsheets." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Step 1. Generate DISARM github pages" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "updated ../generated_pages/disarm_red_framework.md\n", "updated ../generated_files/disarm_red_framework_clickable.html\n", "updated ../generated_pages/disarm_blue_framework.md\n", "updated ../generated_files/disarm_blue_framework_clickable.html\n", "Temp: objecttype phase\n", "updated ../generated_pages/phases_index.md\n", "Temp: objecttype tactic\n", "updated ../generated_pages/tactics_index.md\n", "Updating ../generated_pages/tactics/TA02.md\n", "Updating ../generated_pages/tactics/TA05.md\n", "Updating ../generated_pages/tactics/TA06.md\n", "Updating ../generated_pages/tactics/TA07.md\n", "Updating ../generated_pages/tactics/TA09.md\n", "Updating ../generated_pages/tactics/TA10.md\n", "Updating ../generated_pages/tactics/TA11.md\n", "Updating ../generated_pages/tactics/TA12.md\n", "Updating ../generated_pages/tactics/TA13.md\n", "Updating ../generated_pages/tactics/TA14.md\n", "Updating ../generated_pages/tactics/TA15.md\n", "Updating ../generated_pages/tactics/TA16.md\n", "Updating ../generated_pages/tactics/TA17.md\n", "Updating ../generated_pages/tactics/TA18.md\n", "Temp: objecttype technique\n", "updated ../generated_pages/techniques_index.md\n", "Updating ../generated_pages/techniques/T0009.001.md\n", "Updating ../generated_pages/techniques/T0014.001.md\n", "Updating ../generated_pages/techniques/T0014.002.md\n", "Updating ../generated_pages/techniques/T0017.001.md\n", "Updating ../generated_pages/techniques/T0019.001.md\n", "Updating ../generated_pages/techniques/T0019.002.md\n", "Updating ../generated_pages/techniques/T0022.001.md\n", "Updating ../generated_pages/techniques/T0022.002.md\n", "Updating ../generated_pages/techniques/T0023.001.md\n", "Updating ../generated_pages/techniques/T0023.002.md\n", "Updating ../generated_pages/techniques/T0043.001.md\n", "Updating ../generated_pages/techniques/T0043.002.md\n", "Updating ../generated_pages/techniques/T0048.001.md\n", "Updating ../generated_pages/techniques/T0048.002.md\n", "Updating ../generated_pages/techniques/T0048.003.md\n", "Updating ../generated_pages/techniques/T0048.004.md\n", "Updating ../generated_pages/techniques/T0049.001.md\n", "Updating ../generated_pages/techniques/T0049.002.md\n", "Updating ../generated_pages/techniques/T0049.003.md\n", "Updating ../generated_pages/techniques/T0049.004.md\n", "Updating ../generated_pages/techniques/T0049.005.md\n", "Updating ../generated_pages/techniques/T0049.006.md\n", "Updating ../generated_pages/techniques/T0049.007.md\n", "Updating ../generated_pages/techniques/T0057.001.md\n", "Updating ../generated_pages/techniques/T0057.002.md\n", "Updating ../generated_pages/techniques/T0061.001.md\n", "Updating ../generated_pages/techniques/T0072.001.md\n", "Updating ../generated_pages/techniques/T0072.002.md\n", "Updating ../generated_pages/techniques/T0072.003.md\n", "Updating ../generated_pages/techniques/T0072.004.md\n", "Updating ../generated_pages/techniques/T0072.005.md\n", "Updating ../generated_pages/techniques/T0075.001.md\n", "Updating ../generated_pages/techniques/T0080.001.md\n", "Updating ../generated_pages/techniques/T0080.002.md\n", "Updating ../generated_pages/techniques/T0080.003.md\n", "Updating ../generated_pages/techniques/T0080.004.md\n", "Updating ../generated_pages/techniques/T0080.005.md\n", "Updating ../generated_pages/techniques/T0081.001.md\n", "Updating ../generated_pages/techniques/T0081.002.md\n", "Updating ../generated_pages/techniques/T0081.003.md\n", "Updating ../generated_pages/techniques/T0081.004.md\n", "Updating ../generated_pages/techniques/T0081.005.md\n", "Updating ../generated_pages/techniques/T0081.006.md\n", "Updating ../generated_pages/techniques/T0081.007.md\n", "Updating ../generated_pages/techniques/T0081.008.md\n", "Updating ../generated_pages/techniques/T0084.001.md\n", "Updating ../generated_pages/techniques/T0084.002.md\n", "Updating ../generated_pages/techniques/T0084.003.md\n", "Updating ../generated_pages/techniques/T0084.004.md\n", "Updating ../generated_pages/techniques/T0085.001.md\n", "Updating ../generated_pages/techniques/T0085.002.md\n", "Updating ../generated_pages/techniques/T0085.003.md\n", "Updating ../generated_pages/techniques/T0086.001.md\n", "Updating ../generated_pages/techniques/T0086.002.md\n", "Updating ../generated_pages/techniques/T0086.003.md\n", "Updating ../generated_pages/techniques/T0086.004.md\n", "Updating ../generated_pages/techniques/T0087.001.md\n", "Updating ../generated_pages/techniques/T0087.002.md\n", "Updating ../generated_pages/techniques/T0088.001.md\n", "Updating ../generated_pages/techniques/T0088.002.md\n", "Updating ../generated_pages/techniques/T0089.001.md\n", "Updating ../generated_pages/techniques/T0089.002.md\n", "Updating ../generated_pages/techniques/T0089.003.md\n", "Updating ../generated_pages/techniques/T0090.001.md\n", "Updating ../generated_pages/techniques/T0090.002.md\n", "Updating ../generated_pages/techniques/T0090.003.md\n", "Updating ../generated_pages/techniques/T0090.004.md\n", "Updating ../generated_pages/techniques/T0091.001.md\n", "Updating ../generated_pages/techniques/T0091.002.md\n", "Updating ../generated_pages/techniques/T0091.003.md\n", "Updating ../generated_pages/techniques/T0092.001.md\n", "Updating ../generated_pages/techniques/T0092.002.md\n", "Updating ../generated_pages/techniques/T0092.003.md\n", "Updating ../generated_pages/techniques/T0093.001.md\n", "Updating ../generated_pages/techniques/T0093.002.md\n", "Updating ../generated_pages/techniques/T0094.001.md\n", "Updating ../generated_pages/techniques/T0094.002.md\n", "Updating ../generated_pages/techniques/T0096.001.md\n", "Updating ../generated_pages/techniques/T0096.002.md\n", "Updating ../generated_pages/techniques/T0097.001.md\n", "Updating ../generated_pages/techniques/T0098.001.md\n", "Updating ../generated_pages/techniques/T0098.002.md\n", "Updating ../generated_pages/techniques/T0099.001.md\n", "Updating ../generated_pages/techniques/T0099.002.md\n", "Updating ../generated_pages/techniques/T0100.001.md\n", "Updating ../generated_pages/techniques/T0100.002.md\n", "Updating ../generated_pages/techniques/T0100.003.md\n", "Updating ../generated_pages/techniques/T0102.001.md\n", "Updating ../generated_pages/techniques/T0102.002.md\n", "Updating ../generated_pages/techniques/T0102.003.md\n", "Updating ../generated_pages/techniques/T0103.001.md\n", "Updating ../generated_pages/techniques/T0103.002.md\n", "Updating ../generated_pages/techniques/T0104.001.md\n", "Updating ../generated_pages/techniques/T0104.002.md\n", "Updating ../generated_pages/techniques/T0104.003.md\n", "Updating ../generated_pages/techniques/T0104.004.md\n", "Updating ../generated_pages/techniques/T0104.005.md\n", "Updating ../generated_pages/techniques/T0104.006.md\n", "Updating ../generated_pages/techniques/T0105.001.md\n", "Updating ../generated_pages/techniques/T0105.002.md\n", "Updating ../generated_pages/techniques/T0105.003.md\n", "Updating ../generated_pages/techniques/T0106.001.md\n", "Updating ../generated_pages/techniques/T0111.001.md\n", "Updating ../generated_pages/techniques/T0111.002.md\n", "Updating ../generated_pages/techniques/T0111.003.md\n", "Updating ../generated_pages/techniques/T0114.001.md\n", "Updating ../generated_pages/techniques/T0114.002.md\n", "Updating ../generated_pages/techniques/T0115.001.md\n", "Updating ../generated_pages/techniques/T0115.002.md\n", "Updating ../generated_pages/techniques/T0115.003.md\n", "Updating ../generated_pages/techniques/T0116.001.md\n", "Updating ../generated_pages/techniques/T0119.001.md\n", "Updating ../generated_pages/techniques/T0119.002.md\n", "Updating ../generated_pages/techniques/T0119.003.md\n", "Updating ../generated_pages/techniques/T0120.001.md\n", "Updating ../generated_pages/techniques/T0120.002.md\n", "Updating ../generated_pages/techniques/T0121.001.md\n", "Updating ../generated_pages/techniques/T0123.001.md\n", "Updating ../generated_pages/techniques/T0123.002.md\n", "Updating ../generated_pages/techniques/T0123.003.md\n", "Updating ../generated_pages/techniques/T0123.004.md\n", "Updating ../generated_pages/techniques/T0124.001.md\n", "Updating ../generated_pages/techniques/T0124.002.md\n", "Updating ../generated_pages/techniques/T0124.003.md\n", "Updating ../generated_pages/techniques/T0126.001.md\n", "Updating ../generated_pages/techniques/T0126.002.md\n", "Updating ../generated_pages/techniques/T0127.001.md\n", "Updating ../generated_pages/techniques/T0127.002.md\n", "Updating ../generated_pages/techniques/T0128.001.md\n", "Updating ../generated_pages/techniques/T0128.002.md\n", "Updating ../generated_pages/techniques/T0128.003.md\n", "Updating ../generated_pages/techniques/T0128.004.md\n", "Updating ../generated_pages/techniques/T0128.005.md\n", "Updating ../generated_pages/techniques/T0129.001.md\n", "Updating ../generated_pages/techniques/T0129.002.md\n", "Updating ../generated_pages/techniques/T0129.003.md\n", "Updating ../generated_pages/techniques/T0129.004.md\n", "Updating ../generated_pages/techniques/T0129.005.md\n", "Updating ../generated_pages/techniques/T0129.006.md\n", "Updating ../generated_pages/techniques/T0129.007.md\n", "Updating ../generated_pages/techniques/T0129.008.md\n", "Updating ../generated_pages/techniques/T0129.009.md\n", "Updating ../generated_pages/techniques/T0129.010.md\n", "Updating ../generated_pages/techniques/T0130.001.md\n", "Updating ../generated_pages/techniques/T0130.002.md\n", "Updating ../generated_pages/techniques/T0130.003.md\n", "Updating ../generated_pages/techniques/T0130.004.md\n", "Updating ../generated_pages/techniques/T0130.005.md\n", "Updating ../generated_pages/techniques/T0131.001.md\n", "Updating ../generated_pages/techniques/T0131.002.md\n", "Updating ../generated_pages/techniques/T0132.001.md\n", "Updating ../generated_pages/techniques/T0132.002.md\n", "Updating ../generated_pages/techniques/T0132.003.md\n", "Updating ../generated_pages/techniques/T0133.001.md\n", "Updating ../generated_pages/techniques/T0133.002.md\n", "Updating ../generated_pages/techniques/T0133.003.md\n", "Updating ../generated_pages/techniques/T0133.004.md\n", "Updating ../generated_pages/techniques/T0133.005.md\n", "Updating ../generated_pages/techniques/T0134.001.md\n", "Updating ../generated_pages/techniques/T0134.002.md\n", "Temp: objecttype task\n", "updated ../generated_pages/tasks_index.md\n", "Temp: objecttype incident\n", "updated ../generated_pages/incidents_index.md\n", "Temp: objecttype counter\n", "updated ../generated_pages/counters_index.md\n", "Temp: objecttype metatechnique\n", "updated ../generated_pages/metatechniques_index.md\n", "Temp: objecttype actortype\n", "updated ../generated_pages/actortypes_index.md\n", "updated ../generated_pages/responsetype_index.md\n", "updated ../generated_pages/detections_index.md\n", "updated ../generated_pages/tactics_by_responsetype_table.md\n", "updated ../generated_pages/metatechniques_by_responsetype_table.md\n" ] } ], "source": [ "import pandas as pd\n", "from generate_DISARM_pages import Disarm\n", "disarm = Disarm()\n", "disarm.generate_and_write_datafiles()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Step 2. Generate DISARM STIX objects" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "import sys\n", "sys.path.insert(0, \"DISARM-STIX2\")\n", "from main import generate_disarm_stix\n", "\n", "generate_disarm_stix()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Step 3. Generate DISARM database objects" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from generate_disarm_sql import generate_disarm_sql\n", "\n", "generate_disarm_sql('sqlite')\n", "generate_disarm_sql('postgresql_local')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Step 4 (optional). Look at datasets" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
| \n", " | disarm_id\n", " | name\n", " | summary\n", " | sector_ids\n", " | framework_ids\n", " | longname\n", " | Jon's comments/questions\n", " | 
|---|---|---|---|---|---|---|---|
| 0\n", " | A001\n", " | data scientist\n", " | Person who can wrangle data, implement machine...\n", " | S001, S002, S003, S004, S005, S006, S007, S008...\n", " | FW01, FW02\n", " | A001 - data scientist\n", " | What actual actions do data scientists execute...\n", " | 
| 1\n", " | A002\n", " | target\n", " | Person being targeted by disinformation campaign\n", " | S001, S002, S003, S004, S005, S006, S007, S008...\n", " | FW02\n", " | A002 - target\n", " | Both red and blue framework users will refer t...\n", " | 
| 2\n", " | A003\n", " | trusted authority\n", " | Influencer\n", " | S001, S002, S003, S004, S005, S006, S007, S008...\n", " | FW01, FW02\n", " | A003 - trusted authority\n", " | Is A003 best summarised by the word \"Inluencer...\n", " | 
| 3\n", " | A004\n", " | activist\n", " | \n", " | S002\n", " | FW02\n", " | A004 - activist\n", " | What does this actortype do?\n", " | 
| 4\n", " | A005\n", " | community group\n", " | \n", " | S002\n", " | FW02\n", " | A005 - community group\n", " | What does this actortype do?\n", " | 
| 5\n", " | A006\n", " | educator\n", " | \n", " | S002\n", " | FW02\n", " | A006 - educator\n", " | \n", " | 
| 6\n", " | A007\n", " | factchecker\n", " | Someone with the skills to verify whether info...\n", " | S002\n", " | FW02\n", " | A007 - factchecker\n", " | \n", " | 
| 7\n", " | A008\n", " | library\n", " | \n", " | S002\n", " | FW02\n", " | A008 - library\n", " | Is this an actortype? A sub-sector, yes. But w...\n", " | 
| 8\n", " | A009\n", " | NGO\n", " | \n", " | S002\n", " | FW02\n", " | A009 - NGO\n", " | This is a sector, not an actortype\n", " | 
| 9\n", " | A010\n", " | religious organisation\n", " | \n", " | S002\n", " | FW02\n", " | A010 - religious organisation\n", " | \"Faith communities\" are a sub-sector of the Ci...\n", " | 
| 10\n", " | A011\n", " | school\n", " | \n", " | S002\n", " | FW02\n", " | A011 - school\n", " | This is a subsector of S004 - not an actortype...\n", " | 
| 11\n", " | A012\n", " | account owner\n", " | Anyone who owns an account online\n", " | S006\n", " | FW01\\nFW02\n", " | A012 - account owner\n", " | \n", " | 
| 12\n", " | A013\n", " | content creator\n", " | \n", " | S006\n", " | FW01\\nFW02\n", " | A013 - content creator\n", " | \n", " | 
| 13\n", " | A014\n", " | elves\n", " | \n", " | S006\n", " | FW02\n", " | A014 - elves\n", " | ??? SJ, you have told me, but I've forgotten\n", " | 
| 14\n", " | A015\n", " | general public\n", " | \n", " | S006\n", " | FW02\n", " | A015 - general public\n", " | Duplication of a field in the sector object. B...\n", " | 
| 15\n", " | A016\n", " | influencer\n", " | \n", " | S006\n", " | FW01\\nFW02\n", " | A016 - influencer\n", " | \n", " | 
| 16\n", " | A017\n", " | coordinating body\n", " | For example the DHS\n", " | S003\n", " | FW02\n", " | A017 - coordinating body\n", " | \"Response coordinator\"? Or just 'Coordinator\"\n", " | 
| 17\n", " | A018\n", " | government\n", " | Government agencies\n", " | S003\n", " | FW01\\nFW02\n", " | A018 - government\n", " | DHS (A017) is \"government\". Again, this is a f...\n", " | 
| 18\n", " | A019\n", " | military\n", " | \n", " | S003\n", " | FW02\n", " | A019 - military\n", " | A019 is a sub-sector of \"government\". Again, t...\n", " | 
| 19\n", " | A020\n", " | policy maker\n", " | \n", " | S003\n", " | FW02\n", " | A020 - policy maker\n", " | \n", " | 
| 20\n", " | A021\n", " | media organisation\n", " | \n", " | S010\n", " | FW01\\nFW02\n", " | A021 - media organisation\n", " | Not an actortype. The actor is perhaps as the ...\n", " | 
| 21\n", " | A022\n", " | company\n", " | \n", " | S009\n", " | FW02\n", " | A022 - company\n", " | \n", " | 
| 22\n", " | A023\n", " | adtech provider\n", " | \n", " | S008\n", " | FW02\n", " | A023 - adtech provider\n", " | Should Adtech be a called-out subsector of S00...\n", " | 
| 23\n", " | A024\n", " | developer\n", " | \n", " | S008\n", " | FW02\n", " | A024 - developer\n", " | \n", " | 
| 24\n", " | A025\n", " | funding_site_admin\n", " | Funding site admin\n", " | S008\n", " | FW02\n", " | A025 - funding_site_admin\n", " | What is this?\n", " | 
| 25\n", " | A026\n", " | games designer\n", " | \n", " | S008\n", " | FW01, FW02\n", " | A026 - games designer\n", " | Just \"Designer\"? Would the TTP context not mak...\n", " | 
| 26\n", " | A027\n", " | information security\n", " | \n", " | S008\n", " | FW02\n", " | A027 - information security\n", " | \n", " | 
| 27\n", " | A028\n", " | platform administrator\n", " | \n", " | S008\n", " | FW02\n", " | A028 - platform administrator\n", " | Just \"Administrator\"?\n", " | 
| 28\n", " | A029\n", " | server admininistrator\n", " | \n", " | S008\n", " | FW02\n", " | A029 - server admininistrator\n", " | Just \"Administrator\"? (de-duplicating A028)\n", " | 
| 29\n", " | A030\n", " | platforms\n", " | \n", " | S007\n", " | FW02\n", " | A030 - platforms\n", " | The same as S007? If there is an action here, ...\n", " | 
| 30\n", " | A031\n", " | social media platform adminstrator\n", " | Person with the authority to make changes to a...\n", " | S007\n", " | FW02\n", " | A031 - social media platform adminstrator\n", " | Not needed, given A028. The sector selection d...\n", " | 
| 31\n", " | A032\n", " | social media platform outreach\n", " | \n", " | S007\n", " | FW02\n", " | A032 - social media platform outreach\n", " | What does this do?\n", " | 
| 32\n", " | A033\n", " | social media platform owner\n", " | Person with authority to make changes to a soc...\n", " | S007\n", " | FW02\n", " | A033 - social media platform owner\n", " | \n", " |