{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Quick Start" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " In this tutorial, we will explore a small Boolean model designed to simulate different cybersecurity scenarios. The model consists of nodes representing key components of a cybersecurity system, and the goal of this tutorial is to evaluate how different conditions and guidelines affect the overall security state of the system.\n", "
\n", "\n",
" The model includes the following nodes:
\n",
"
Security_Policies
,\n",
" User_Education
,\n",
" Network_Monitoring
, and\n",
" Security_Patches
.Backups
,\n",
" Malware
,\n",
" Firewall
,\n",
" Unauthorized_Access
,\n",
" Exploits
,\n",
" Antivirus
,\n",
" Strong_Password
,\n",
" TwoFactAut
, and\n",
" Phishing_Attack
.Security_State
.\n",
" \n", " | 0 | \n", "3 | \n", "2 | \n", "1 | \n", "6 | \n", "7 | \n", "4 | \n", "5 | \n", "8 | \n", "15 | \n", "12 | \n", "11 | \n", "9 | \n", "14 | \n", "13 | \n", "10 | \n", "DNF | \n", "NDNF | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
User_Education | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "User_Education | \n", "~User_Education | \n", "
Security_Policies | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "Security_Policies | \n", "~Security_Policies | \n", "
Security_Patches | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "Security_Patches | \n", "~Security_Patches | \n", "
Network_Monitoring | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "Network_Monitoring | \n", "~Network_Monitoring | \n", "
Backups | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "And(~Malware, Security_Policies) | \n", "Or(Malware, ~Security_Policies) | \n", "
Malware | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "And(~Antivirus, Exploits, ~Firewall, ~Strong_P... | \n", "Or(Antivirus, ~Exploits, Firewall, Strong_Pass... | \n", "
Security_State | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "And(Backups, ~Unauthorized_Access) | \n", "Or(~Backups, Unauthorized_Access) | \n", "
Firewall | \n", "0 | \n", "1 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "1 | \n", "1 | \n", "Or(Network_Monitoring, Security_Patches) | \n", "And(~Network_Monitoring, ~Security_Patches) | \n", "
Unauthorized_Access | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "Or(And(~Firewall, Malware, ~Strong_Password, ~... | \n", "Or(Firewall, Strong_Password, TwoFactAut, And(... | \n", "
Exploits | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "Or(~Strong_Password, ~TwoFactAut) | \n", "And(Strong_Password, TwoFactAut) | \n", "
Antivirus | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "Or(Security_Patches, User_Education) | \n", "And(~Security_Patches, ~User_Education) | \n", "
Strong_Password | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "User_Education | \n", "~User_Education | \n", "
TwoFactAut | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "Or(Security_Policies, Strong_Password, User_Ed... | \n", "And(~Security_Policies, ~Strong_Password, ~Use... | \n", "
Phishing_Attack | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "Or(~TwoFactAut, ~User_Education) | \n", "And(TwoFactAut, User_Education) | \n", "
\n",
"A total of 16 stable states are reached upon different input combinations. We will check the how secure our system is based on the number of paths leading to the activation or inactivation of the Security_State
node.\n",
"
\n", " | 0 | \n", "6 | \n", "3 | \n", "2 | \n", "1 | \n", "8 | \n", "15 | \n", "12 | \n", "11 | \n", "7 | \n", "4 | \n", "5 | \n", "9 | \n", "14 | \n", "13 | \n", "10 | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Security_State | \n", "-35 | \n", "-6 | \n", "-1 | \n", "-1 | \n", "-1 | \n", "-1 | \n", "-1 | \n", "-1 | \n", "-1 | \n", "4 | \n", "5 | \n", "7 | \n", "21 | \n", "24 | \n", "26 | \n", "29 | \n", "
\n", " | 0 | \n", "6 | \n", "3 | \n", "2 | \n", "1 | \n", "8 | \n", "15 | \n", "12 | \n", "11 | \n", "7 | \n", "4 | \n", "5 | \n", "9 | \n", "14 | \n", "13 | \n", "10 | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
User_Education | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "
Security_Policies | \n", "0 | \n", "1 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "1 | \n", "
Security_Patches | \n", "0 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "1 | \n", "0 | \n", "0 | \n", "1 | \n", "1 | \n", "
Network_Monitoring | \n", "0 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "0 | \n", "1 | \n", "
\n",
"In the table above, we can see that the absence of all inputs simultaneously results in the worst security outcome (SS = 0, Path count = 35). Activating any single input is not sufficient to change the inactive state of Security_States
, although it reduces the number of paths leading to inactivation to one, except for Security_Policies
, which leads to a slightly improved outcome (SS = 6, Path count = -6).
\n",
"Most input combinations result in a positive security state, except for the combination of Security_Patches
and Network_Monitoring
. The strongest security state occurs when all inputs are active, but the combination of User_Education
, Security_Policies
, and any additional input is enough to trigger almost the maximum observed secure paths.\n",
"
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n",
"Lastly, we will examine how common scenarios impact security, either by reducing the number of activating paths or shifting the system toward insecurity. To do so, we will perturb the model by simulating virus triggers and system bugs affecting the defenders, introducing additive activations or inactivations of specific nodes.\n",
"\n",
"BooLEVARD
allows for two types of perturbations: non-additive, where the perturbation completely overrides the target node’s regulation, and additive, where its regulatory effect is combined with the existing one. We will analyze the effects of these perturbations when all inputs are ON.\n",
"
\n", " | Unauthorized_Access%ACT | \n", "TwoFactAut%INH | \n", "Strong_Password%INH | \n", "Phishing_Attack%ACT | \n", "Exploits%ACT | \n", "Firewall%INH | \n", "Antivirus%INH | \n", "
---|---|---|---|---|---|---|---|
Security_State | \n", "-1 | \n", "9 | \n", "16 | \n", "16 | \n", "21 | \n", "23 | \n", "25 | \n", "
\n",
"We observe that, except for the activation of Unauthorized_Access
, all perturbations still allow for security, albeit with varying strengths. In this system, the loss of security strategies is predicted to have a greater impact than losing the antivirus or deactivating the firewall.\n",
"
" ] } ], "metadata": { "kernelspec": { "display_name": "usr", "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.11.2" } }, "nbformat": 4, "nbformat_minor": 2 }