Repository navigation
Expand file tree
/
Copy pathtutorial2_simulation.py
More file actions
49 lines (41 loc) · 1.56 KB
/
Copy pathtutorial2_simulation.py
File metadata and controls
49 lines (41 loc) · 1.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import os
from tutorial2_model import create_model
from maltoolbox.language import LanguageGraph
from maltoolbox.attackgraph import AttackGraph
from maltoolbox.visualization.graphviz_utils import render_model, render_attack_graph
from malsim.mal_simulator import MalSimulator, run_simulation
from malsim.config import AttackerSettings, MalSimulatorSettings, TTCMode
from malsim.policies import RandomAgent
def main():
# Assuming tyrlang has been cloned locally
lang_file = "/path/to/tyrLang/main.mal"
current_dir = os.path.dirname(os.path.abspath(__file__))
lang_file_path = os.path.join(current_dir, lang_file)
tyr_lang = LanguageGraph.load_from_file(lang_file_path)
# Assuming tyrLang is to be cloned automatically
# lang_file = "git@github.com:mal-lang/tyrLang.git"
# tyr_lang = LanguageGraph.load_from_file(lang_file)
model = create_model(tyr_lang)
attack_graph = AttackGraph(tyr_lang, model)
# render_model(model) # Uncomment to render graphviz pdf
# render_attack_graph(attack_graph) # Uncomment to render graphviz pdf
agent_settings = (
AttackerSettings(
"MyAttacker",
entry_points={"App1:fullAccess"},
goals={"DataOnApp4:read"},
policy=RandomAgent
),
)
simulator = MalSimulator(
attack_graph,
agents=agent_settings,
sim_settings=MalSimulatorSettings(
ttc_mode=TTCMode.PRE_SAMPLE
)
)
run_simulation(simulator)
import pprint
pprint.pprint(simulator.recording)
if __name__ == "__main__":
main()