<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Evaluating Trainees in Large Cyber Exercises</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Andrea Artioli</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Mauro Andreolini</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Luca Ferretti</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Mirco Marchetti</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>ITASEC24: Italian Conference on Cybersecurity</institution>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>University of Modena and Reggio Emilia</institution>
          ,
          <addr-line>Modena</addr-line>
          ,
          <country country="IT">Italy</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Cyber ranges are becoming a widely used alternative to teach trainees security through practice on realistic systems. They support evaluation and awareness through dashboards that display how many training objectives have been achieved in a cyber exercise. In our previous paper [1] we have outlined all the limitations of standard dashboards and proposed a new framework for modeling and assessing trainee activity through trainee graphs, reference graphs and scoring functions. In particular, we have introduced a scoring function based on the symmetric diference between a trainee and a reference graph, which allows to pinpoint quite efectively the ineficiencies of a trainee in an exercise. In this paper, we show how that model, while working well for small and coherent exercises, poses several problems when applied to a larger labs made of several, heterogeneous challenges. The accuracy of the symmetrical diference rapidly drops down as the number of nodes and edges in the reference graph increases, thus making it impossible to use it in large environments. Furthermore, there might be edge cases where trainees that do not complete an exercise obtain a higher score than those who do. This happens because the symmetric diference turns out to be higher if the trainee advances exploring fewer nodes of the reference graph (which is the case of a skilled attacker). To address these problems, we aim at reducing the complexity of the graphs fed to the scores. We improve the older model by representing an exercise as a set of smaller local graphs (each one for a coherent, intermediate challenge which can be assessed with a specific local score) and a global graph (representing the interconnection between intermediate challenges, that can be assessed with a specific global score). The main benefits of introducing global and local graphs using global and local progress are twofold: (a) having smaller graphs, scores related to precision (symmetric diferences) are more performant; (b) we can assign diferent scores to diferent parts of the exercise, which is crucial in heterogeneous engagements. We have implemented a Python-based simulator that generates random exercises and compares the performance of the previous and proposed trainee models under specific scores. Our results empirically show that, on average, the original model fails to scale to sizes in the order of tens of vertices and or edges, while the new is able to preserve precise scores locally and better track overall progress.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;Cyber range</kwd>
        <kwd>Graph analytics</kwd>
        <kwd>Training</kwd>
        <kwd>Cyber exercise</kwd>
        <kwd>Monitoring</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        General consensus states that security is best learned by practice on realistic systems including
workstations and servers, IoT devices and cyber-physical systems. A cyber range is a
prearranged virtual environment that allows trainees to simulate realistic attack and defense
scenarios on an architecture resembling some original system. Cyber ranges typically support
evaluation and awareness through dashboards that display how many training goals have been
fulfilled. This approach does not allow to identify the reasons behind a bad trainee performance.
To overcome this limitation, Andreolini et al. [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] introduce a novel, modular and extensible
framework that captures trainee activity into a trainee graph and compares it with a reference
graph provided by the instructor. Given specific learning objectives, novel scores are proposed
in order to measure trainee proficiency in achieving them. A score is a scalar function over a
set of graphs. Many scoring strategies have been considered to assess trainee speed (shortest
path to a goal) and precision (combined symmetric diference between trainee edges/vertices
and reference graph edges/vertices).
      </p>
      <p>While these scores work well for small and coherent challenge environments (e.g., a single
host executing a Web server), several problems arise when trying to apply this approach to
a larger environment (e.g, heterogeneous multi-host labs located in diferent subnets). The
accuracy of the symmetrical diference decreases abruptly as the number of nodes and edges in
the reference graph increases. Furthermore, there might be edge cases where trainees that do not
reach the exercise main goal obtain a higher score than those who do. To address these problems,
we aim at reducing the complexity of the graphs fed to the scores. We model an exercise as a set
of smaller local graphs (representing a coherent, intermediate challenge which can be assessed
with a specific local score) and a global graph (representing the interconnection between
intermediate challenges, that can be assessed with a specific global score). The main benefits
of introducing global and local graphs using global and local progress are twofold: (a) having
smaller graphs, scores related to precision (symmetric diferences) are more performant; (b) we
can assign diferent scores to diferent parts of the exercise, which is crucial in heterogeneous
engagements.</p>
      <p>We have implemented a Python-based simulator that generates random exercises and
compares the performance of the previous and proposed trainee models under specific scores. Our
results empirically show that, on average, the original model fails to scale to sizes in the order
of tens of vertices and or edges, while the new is able to preserve precise scores locally and
better track overall progress.</p>
      <p>
        The paper is organized as follows. Section 2 briefly recalls the original scoring model
introduced in [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ], while Section 3 points out the limitations of the old model and introduces the
new one. Section 4 describes our testbed and compares the performance of the old and new
models under diferent scenarios. Section 5 discusses related work. Finally, Section 6 concludes
the paper and outlines possible future work.
      </p>
    </sec>
    <sec id="sec-2">
      <title>2. Background</title>
      <sec id="sec-2-1">
        <title>2.1. Modeling trainee activities</title>
        <p>
          In this section we briefly recall the original scoring model introduced in [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ]. We model trainee
activities through oriented graphs where vertices represent intermediate states that are reached
by a trainee during an exercise, while edges represent the actions performed by a trainee to move
from a particular state to the next one. Unintended actions are modeled as edges towards special
vertices representing errors. The start and end dummy vertices enclose a specific challenge.
Both vertices and edges may be labelled with additional information (timestamps on vertices
and edges to track progress over time, or command options on edges to better discern useful
from useless commands). A reference graph is prepared by an instructor and models the ideal
behavior of a trainee during an exercise. Figure 1 shows an example reference graph with
intermediate steps  (i=1, 2, 3, 4, 5) carried out through actions  (k=1, 2, 3, 4, 5, 6, 7). A trainee
Start
        </p>
        <p>a2
a1
a3</p>
        <p>S1
S2
S3
a4
a5
a6</p>
        <p>S4
a7</p>
        <p>S5</p>
        <p>End
graph tracks the actions performed by a trainee during an exercise. It is built automatically
ofline (at the end of an exercise, for a post-mortem performance analysis) or online (during an
engagement, to track live trainee progress on a dashboard). The build process uses a reference
graph and a set of metrics collected on the game network (e.g., command history and Web
browsing history) during the exercise. These metrics allow to built an event timeline and to
match it with the intermediate states of a reference graph. Whenever an event in the timeline
matches an edge (,  ) in the reference graph, the trainee graph is updated as follows: vertex
 is added to the trainee graph; vertex  is located in the trainee graph; an edge (,  ) is
added to the trainee graph. Figure 2 shows the incremental update of a trainee graph with
vertex 2 and edge 2. Matching of timeline events with trainee actions is done in ordered
fashion on all nodes of the reference graph. If, on the other hand, a timeline event  cannot be
Lab Network</p>
        <p>M1 M2 ... Mn
Metrics</p>
        <p>Framework</p>
        <p>Events
tiEmveelinnte e1
e2
... en</p>
        <p>Match
Update</p>
        <p>S2</p>
        <p>e4
End</p>
        <p>Trainee graph
e1 Start e2
S1</p>
        <p>S2
matched against any edge in the reference graph, the trainee graph is updated as follows: the
current vertex  in the trainee graph is located; the next expected vertex  in the reference
graph is identified (such a vertex always exists, be it “start” if the trainee hasn’t yet followed
the recommended solution, or an intermediate one if the trainee has followed some steps of the
exercise); the label  of the vertex  is identified; a new dummy vertex  is added to the
trainee graph with label  _ (if it already exists, omit vertex insertion); an edge (,  ) is
added with label set to . Figure 3 shows the insertion of a dummy node in a trainee graph with
event .</p>
        <p>Trainee graph
e1 Start e
S1</p>
        <p>S2_err</p>
        <p>Reference graph
e1 Start e2</p>
        <p>S1 S2
e3 S3 e4</p>
        <p>End</p>
      </sec>
      <sec id="sec-2-2">
        <title>2.2. Scoring functions</title>
        <p>
          A score is a function  :  → R that takes as input a set of  oriented graphs (including at
least one trainee and a reference graph), and outputs a real number  in a specified interval
[, ] (e.g., [
          <xref ref-type="bibr" rid="ref1">0, 1</xref>
          ]). Diferent learning objectives call for diferent scores. We pick the following
scores from [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ] that will be used in the rest of the paper.
        </p>
        <p>Score 0. Let  be a trainee graph and  a reference graph. Let  and  be the length of
the shortest path from the starts vertex to the end vertex in the trainee and reference graph,
respectively. We define 0 in the following equation:
0 =
{︃ 

0
if the trainee completes the exercise
otherwise
The rationale is as follows. If the trainee completes the exercise, the  fraction rewards shorter
exploitation paths ( is lower). An unsolved exercise is not rewarded.</p>
        <p>
          Score 1. Let  = (, ) be a trainee graph and  = (, ) a reference graph. We
consider the symmetric diference of two sets , : △ = ( ∖ ) ∪ ( ∖ ). In other
words, △ contains all members of  not in  and all members of  not in . We use two
interesting properties of symmetric diference: (a) if two sets  and  coincide, △ = ∅; (b)
if two sets  and  are disjoint, △ =  ∪ . We define the eficacy  as following:
 = 1 −
|△|
| ∪ |
If the trainee and reference graph coincide, we have △ = ∅, thus  = 1; the trainee
has followed exactly the sequence of intermediate states modeled by the reference graph, and
obtains the highest possible score. On the other hand, if the trainee and reference graph are
completely disjoint, we have △ =  ∪ , thus  = 0; the trainee hasn’t reached one
single intermediate state of those in the reference graph, and obtains the lowest possible score.
Intermediate performance produces scores in the [
          <xref ref-type="bibr" rid="ref1">0, 1</xref>
          ] interval. Eficacy measures the ability of
a trainee to follow the paths of a solution described in the reference graph.
(1)
(2)
Similarly, we define the eficiency  as following:
 = 1 −
|△|
| ∪ |
(3)
(4)
The same observations hold for  . A trainee that performs the exact actions modeled in the
reference graph is assigned the highest score, while a trainee that misses every action is assigned
the lowest score. Intermediate performance produces scores in the [
          <xref ref-type="bibr" rid="ref1">0, 1</xref>
          ] interval.
        </p>
        <p>Score 1 is defined as a linear combination of  and  :
1(, ) = 
+ (1 −  )
In this paper, we choose  = 0.5, but the score may be tuned to weigh more eficacy or eficiency,
according to the specific learning objective. This score rewards trainees who are able to reach
the final goal of an exercise following the path defined by the reference graph. Trainees who
could not reach the goal or make many mistakes are penalized with a low score. This is a good
candidate for teaching exercises, since it tracks trainee actions during the exercise, taking into
account the ability to follow the taught path to reach a goal.</p>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>3. A trainee model for large environments</title>
      <sec id="sec-3-1">
        <title>3.1. Limitations of the original trainee model</title>
        <p>
          While the original scoring model introduced in [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ] works well for small and coherent
engagements that can be evaluated consistently with a single scoring function, it poses several
challenges in larger environments. With “larger environment” here we refer for example to
labs made of multiple hosts with heterogeneous architectures, operating systems, libraries and
applications, where a trainee has to showcase diferent skills (speed, precision, defense evasion,
stealthiness, discovery of novel exploitation paths) in diferent contexts (UNIX, Windows, Web
applications, networks, cryptography, reverse engineering). Under these circumstances it is
often impossible to sum up trainee performance with a single scoring function. Furthermore,
larger environments imply a larger number of interconnected hosts and services, resulting in
larger trainee and reference graphs. Unfortunately, the accuracy of the symmetrical diference
drops significantly as the number of vertices and edges in the reference graph increases. Even
worse, in some pathological cases trainees that do not complete an exercise obtain a higher
score than those who do. This happens because the symmetric diference turns out to be higher
if the trainee explores fewer nodes of the reference graph (which is the case of a skilled attacker).
These factors contribute to making the 1 score useless.
        </p>
        <p>To address these limitations we change the scoring model with the aim to reduce the
complexity of the graphs fed to the scoring functions, as shown in the following section.</p>
      </sec>
      <sec id="sec-3-2">
        <title>3.2. The proposed trainee model</title>
        <p>Instead of modeling an exercise as a single, potentially large graph we split it as a set of 
smaller, local graphs  ( ∈ [1, ]) representing a single intermediate step. Figure 4 shows a
possible local reference graph with local start, end and intermediate vertices ,, ,
and , respectively ( ∈ [1, ],  ∈ [0, 7]). Local trainee graphs are built exactly as in the
older model. Each local graph is assigned a scoring function  :  → R ( ∈ [1, ]) that
assesses trainee performance in that specific intermediate step.</p>
        <p>LSi,1</p>
        <p>LSi,2
LSi,start</p>
        <p>LSi,0</p>
        <p>LSi,3</p>
        <p>LSi,4</p>
        <p>LSi,5</p>
        <p>LSi,6</p>
        <p>LSi,7</p>
        <p>LSi,end</p>
        <p>Similarly, we create a global graph  that models the interconnection between the
intermediate steps. Figure 5 shows a possible global graph with global start, end and intermediate
vertices ,  and  respectively ( ∈ [0, ]). Global trainee graphs are built
exactly as in the older model by observing transition events from an intermediate challenge
to another. The global graph is assigned a scoring function  :  → R that assesses trainee
performance in advancing through the intermediate challenges.</p>
        <p>GSstart</p>
        <p>GS0</p>
        <p>GS1</p>
        <p>GS2</p>
        <p>In principle there is no impediment to assigning multiple scores to a specific graph (e.g., to
simultaneously capture multiple skills such as speed and precision); however, for reasons of
simplicity in this paper we will use only one score per graph. At the end of an exercise, the
instructor has available:
• a set of  + 1 graphs (, 1, 2, . . . , ) that track out the overall advancement
of a trainee through the intermediate challenges and in every single challenge;
• a set of  + 1 scores (, 1, 2, . . . , ) that quantify the aforementioned advancement
and allow to compare it against the performance of other trainees (or even the same
trainees over several, repeated exercises).</p>
        <p>Aggregating these scores to produce a leaderboard is a very interesting topic that is out of scope
for the current paper. Here, we show that the scores produced by the new model are more
consistent than those of the old one in large graphs.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. Results</title>
      <p>In Section 4.1 we briefly discuss the simulator, the hardware/software testbed and the simulation
scenarios carried out. In Section 4 we compare the performance of the 1 score in the old and
new model under diferent simulation scenarios.</p>
      <sec id="sec-4-1">
        <title>4.1. Testbed</title>
        <p>
          We have implemented a simulator that models an exercise based on a multitude of hosts
organized in multiple networks. Each host exhibits a specific challenge which the trainee is
supposed to solve. The trainee is also supposed to advance through the lab in a specific sequence.
This is a quite popular model in the cyber exercise world (e.g. HackTheBox Pro Labs [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ] and
Ofensive Security Proving Grounds [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ]). The simulator automates the analysis proposed in
this paper performing the following operations. It receives an input parameter the number of
challenges  which, in this paper, is also the lab size in terms of number of hosts. We range
 ∈ [5, 60] hosts because current lab deployments are similarly sized. Then, it generates 
nodes of the global graph and connects them randomly using the Watts-Strogatz algorithm
which is used to create small world graphs. Then, for each node in the global graph a local
graph is generated which represents the intermediate challenge. For simplicity in each local
graph we use a constant number of ten nodes; we have verified that this design choice does
not alter the main results of the paper. We also connect the nodes of the local graph randomly
using the Watts-Strogatz algorithm. At this point, we have represented an exercise in the new
model. To perform a fair comparison, we also generate the equivalent large reference graph in
the old model by connecting the local graphs as shown by the global graph.
        </p>
        <p>After setting up the graphs, the simulator performs random walks over the global graph
and, for each node of the global graph, performs random walks into the associated local graph.
To speed up simulations, local random walks are performed with two diferent error rates:
0.95 (related to a beginner) and 0.0 (related to an expert). The goal is twofold: (a) simulate
the progress of a trainee through diferent hosts in the lab; (b) simulate the progress of both a
high skilled and a rookie trainee into a specific challenge. At every step of the global and local
random walks we compute the appropriate global and local scoring functions. Finally, at the
end of an exercise the simulator saves the test configuration ( , the local and global reference
and trainee graphs, the global and local scores) into separate files.</p>
        <p>The simulator has been developed in Python 3.11.7 and uses the networkx package to handle
large graphs. Simulations have been run in a host with an Intel Core 12700H CPU, 16 GB RAM
and 1 TB SSD, running the ArchLinux GNU/Linux distribution.</p>
      </sec>
      <sec id="sec-4-2">
        <title>4.2. Simulation results</title>
        <p>Figure 6 shows the evaluation of scores 0 and 1 under diferent simulation scenarios. Labels
have the form score/model/stats, where “score” is either the 0 or 1 score, “model” refers to
the old-style or new-style trainee graphs (local or global in the latter case) and “stats” is either
the minimum or maximum score value observed during a specific simulation. Let’s focus on
the 1/old/max and 1/old/min labels that represent the maximum and minimum values of 1
computed with the old model in exercises of increasing complexity in terms of vertices. As can
be seen, the maximum value of the symmetric diference drops with , making 1 unusable
starting with approximately  = 15 machines. The ratio of vertices in common between a
trainee graph and a reference graph tends to drop as the number of vertices and edges increases.
Keeping a high 1 score would mean that an attacker exploits every node in exactly every
possible way as defined by an instructor, which is very hard and often simply not needed.
On the other hand, the minimum value stabilizes to zero for pretty much the whole range of
considered hosts; this means that bad performance is consistently evaluated. A very similar
behavior is exhibited by the 1 score in the new model (labels 1/new-global/*) when operating
on larger and larger global trainee graphs.</p>
        <p>Let us now focus on the other 0/new-global/* and 1/new-local/* labels that represent
respectively 0 in the new model (applied on a global trainee graph) and 1 in the new model
(applied to local trainee graphs). Here, the aforementioned limitations does not apply; both
good and bad performance is consistently evaluated for the whole range of considered hosts.
In particular, the 0/new-global/max plot is consistently high because 0 rewards very highly
a trainee that is able to find the shortest exploitation path (which almost always happens in
repeated simulations). Regarding 1/new-local/max, 1 performs extremely well due to the
constant and low number of ten nodes in every local graph generated by the simulator.</p>
        <p>Table 4.2 shows the values of the 1 score in a pathological simulation representing an exercise
run in a lab of  = 50 nodes. We show only this value for reasons of space, but we have verified
that the problem persists basically for every value of , and is more frequent with increasing
values of . The old reference graph has a shortest path to the goal of length 1. Two trainees
carry out the exercise, each one exhibiting diferent skills (a beginner with error rate 0.95 and an
expert with error rate 0). The expert trainee finds the shortest path and completes the challenge,
while the beginner trainee develops an incomplete exploitation path of length 9 and fails to
complete the challenge. One would expect a higher score for the expert trainee with respect
to the beginner trainee; however, this is not the case. The expert trainee receives a score of
0.035, while the beginner trainee receives a score of 0.07 (exactly doubled). The reason for this
anomaly lies again in the way symmetrical graph diference works. The beginner trainee graph
shares a longer path with the reference graph than the expert trainee would; this leads to a
higher similarity of graphs and a higher 1 score.</p>
        <p>Error rate</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>5. Related Work</title>
      <p>
        Previous literature has explored formal representations to articulate an attacker’s maneuvers
in terms of the techniques utilized and vulnerabilities exploited within systems and
configurations. Attack trees [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ], bring the first structured representation of attacks on a system and
the corresponding countermeasures, organized in a hierarchical tree format. The concept of
attack trees has been broadened in academic research. Attack-defense trees [5] explicitly model
interactions between attackers and defenders, enabling a more comprehensive and precise
security assessment compared to traditional attack trees. Attack-response trees [6] enhance
attack-defense trees to account for uncertainties in intrusion detection such as false positives
and negatives.
      </p>
      <p>It is worth pointing out that as the number of vertices and edges in attack trees increases, their
complexity escalates rapidly. Specifically, it becomes increasingly resource-intensive to trace all
pathways from a leaf node to the root node. In realistic scenarios, the network of nodes and
connections often surpasses thousands, where the mere addition of a single node significantly
expands the number of arcs and potential attack routes. Moreover, given that the root node
symbolizes the ultimate aim of the attack, complex multi-stage attacks may necessitate the
utilization of multiple attack trees for accurate representation. Attack graphs [7] represent the
infrastructure requiring protection, including network topology, vulnerable assets, and available
exploits. They point out the pathways an attacker must traverse to achieve specific objectives.
All the aforementioned approaches ofer a static perspective of attacks and mitigation strategies,
but they fail to track the progress of an attacker on a live system.</p>
      <p>
        In the nascent stages of scoring systems research for cyber ranges, the main approaches
are focused on signaling goal completion rather than evaluating trainee performance, as in
[8], [9], [10]. To the best of our knowledge, [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] is the first proposal that models and assesses
user activity in cyber exercises with the help of trainee graphs, reference graphs and scoring
functions. However, as this paper shows, the original trainee and scoring model may perform
poorly in large environments.
      </p>
    </sec>
    <sec id="sec-6">
      <title>6. Conclusions</title>
      <p>
        In this paper we have discussed our previously published trainee and scoring model [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] in
the context of larger exercise labs. We have shown how the accuracy of the symmetrical
diference decreases abruptly as the number of nodes and edges in the reference graph increases.
Furthermore, there are pathological corner cases where trainees performing worse receive
higher scores than those who perform better. We have tracked down the failures in the way
the symmetric diference works and have devised a strategy to mitigate some of its flaws by
feeding smaller graphs to the scoring functions. We have verified through simulations that our
approach indeed improves the accuracy of the 1 score.
      </p>
      <p>
        Future work will be centered on fixing the scoring anomaly produced by 1 in some corner
case simulations and on implementing the new scoring model in the prototype presented in
[
        <xref ref-type="bibr" rid="ref1">1</xref>
        ].
[5] B. Kordy, P. Kordy, S. Mauw, P. Schweitzer, Adtool: security analysis with attack–defense
trees, in: International conference on quantitative evaluation of systems, Springer, 2013,
pp. 173–176.
[6] S. A. Zonouz, H. Khurana, W. H. Sanders, T. M. Yardley, Rre: A game-theoretic intrusion
response and recovery engine, IEEE Transactions on Parallel and Distributed Systems 25
(2013) 395–406.
[7] X. Ou, W. F. Boyer, M. A. McQueen, A scalable approach to attack graph generation,
in: Proceedings of the 13th ACM conference on Computer and communications security,
ACM, 2006, pp. 336–345.
[8] P. Čeleda, J. Čegan, J. Vykopal, D. Tovarňák, Kypo–a platform for cyber defence exercises,
M&amp;S Support to Operational Tasks Including War Gaming, Logistics, Cyber Defence.
      </p>
      <p>NATO Science and Technology Organization (2015).
[9] J. Vykopal, M. Vizváry, R. Oslejsek, P. Celeda, D. Tovarnak, Lessons learned from
complex hands-on defence exercises in a cyber range, in: 2017 IEEE Frontiers in Education
Conference (FIE), IEEE, 2017, pp. 1–8.
[10] M. Carlisle, M. Chiaramonte, D. Caswell, Using ctfs for an undergraduate cyber education,
in: 2015 {USENIX} Summit on Gaming, Games, and Gamification in Security Education
(3GSE 15), 2015.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>M.</given-names>
            <surname>Andreolini</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V. G.</given-names>
            <surname>Colacino</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Colajanni</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Marchetti</surname>
          </string-name>
          ,
          <article-title>A framework for the evaluation of trainee performance in cyber range exercises</article-title>
          ,
          <source>Mob. Netw. Appl</source>
          .
          <volume>25</volume>
          (
          <year>2020</year>
          )
          <fpage>236</fpage>
          -
          <lpage>247</lpage>
          . URL: https://doi.org/10.1007/s11036-019-01442-0. doi:
          <volume>10</volume>
          .1007/s11036-019-01442-0.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2] htbprolabs, HackTheBox Pro Labs, https://www.hackthebox.com/hacker/pro-labs,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3] ospg, Ofensive Security Proving Grounds, https://www.ofsec.com/labs/,
          <year>2020</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>B.</given-names>
            <surname>Schneier</surname>
          </string-name>
          ,
          <article-title>Attack trees</article-title>
          ,
          <source>Dr. Dobb's journal 24</source>
          (
          <year>1999</year>
          )
          <fpage>21</fpage>
          -
          <lpage>29</lpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>