VGL Guide — Attack-Defense Tree (ADTree)
Estimated reading time: 3 minutes.
Attack-Defense Tree (ADTree)
Security modelling after Kordy et al. (2014), extending classical attack trees with defense nodes at any level. Sufficient-cause logic: unjoined children are implicitly OR. The root can be an Attack or a Defense, which decides whether the proponent is the attacker or the defender.
Node types
Attack— an attacker's goal or sub-goalDefense— a defender's countermeasureAndJunctor— conjunctive refinement: all children required together
Edge types — the tree reads top to bottom from the root goal. Refinement edges (same type) are drawn solid, countermeasure edges (opposite type) dotted.
attack_refines_attack— decompose an attack into sub-attacksdefense_refines_defense— decompose a defense into sub-defensesdefense_counters_attack— a defense mitigating an attackattack_counters_defense— an attack circumventing a defense- Junctors:
attack_to_and_junctor,defense_to_and_junctor,and_junctor_to_attack,and_junctor_to_defense
A security modelling graph showing how defenses protect a system and how attacks can circumvent them. Based on the data confidentiality scenario from Kordy et al. (2014):
vgraph dataConfidentiality: ADTree "Data Confidentiality" {
// Defense nodes (defender's goals)
node dataConf: Defense "Data Confidentiality";
node networkSec: Defense "Network Security";
node physicalSec: Defense "Physical Security";
node accessControl: Defense "Access Control";
node passwords: Defense "Passwords";
node strongPasswords: Defense "Strong Passwords";
node lock1: Defense "Lock";
node screening: Defense "Screening";
node securityGuard: Defense "Security Guard";
node videoCameras: Defense "Video Cameras";
// Attack nodes (attacker's goals)
node employeeAttack: Attack "Employee Attack";
node breakIn: Attack "Break In";
node corruption: Attack "Corruption";
node socialEngineering: Attack "Social Engineering";
node dictionaryAttack: Attack "Dictionary Attack";
node backDoor: Attack "Back Door";
node defeatLock: Attack "Defeat Lock";
node forceOpen: Attack "Force Open";
node acquireKeys: Attack "Acquire Keys";
node defeatGuard: Attack "Defeat Guard";
node bribe: Attack "Bribe";
node overpower: Attack "Overpower";
node stealKeys: Attack "Steal Keys";
node outnumber: Attack "Outnumber";
node useWeapons: Attack "Use Weapons";
// AND junctors for conjunctive refinement
node andDataConf: AndJunctor;
node andOverpower: AndJunctor;
// Defense refines into sub-defenses via AND junctor (both required)
edge networkSec -> andDataConf: defense_to_and_junctor;
edge physicalSec -> andDataConf: defense_to_and_junctor;
edge andDataConf -> dataConf: and_junctor_to_defense;
edge accessControl -> networkSec: defense_refines_defense;
edge passwords -> accessControl: defense_refines_defense;
// Attack refines into sub-attacks (solid edges)
edge corruption -> employeeAttack: attack_refines_attack;
edge socialEngineering -> employeeAttack: attack_refines_attack;
edge backDoor -> breakIn: attack_refines_attack;
edge forceOpen -> defeatLock: attack_refines_attack;
edge acquireKeys -> defeatLock: attack_refines_attack;
edge bribe -> defeatGuard: attack_refines_attack;
edge overpower -> defeatGuard: attack_refines_attack;
edge stealKeys -> defeatGuard: attack_refines_attack;
// Countermeasure: defense counters attack (dotted edges)
edge strongPasswords -> dictionaryAttack: defense_counters_attack;
edge lock1 -> backDoor: defense_counters_attack;
edge screening -> corruption: defense_counters_attack;
edge securityGuard -> breakIn: defense_counters_attack;
edge videoCameras -> defeatGuard: defense_counters_attack;
// Countermeasure: attack counters defense (dotted edges)
edge employeeAttack -> dataConf: attack_counters_defense;
edge breakIn -> physicalSec: attack_counters_defense;
edge dictionaryAttack -> passwords: attack_counters_defense;
edge defeatLock -> lock1: attack_counters_defense;
edge defeatGuard -> securityGuard: attack_counters_defense;
// AND junctor: conjunctive refinement
edge outnumber -> andOverpower: attack_to_and_junctor;
edge useWeapons -> andOverpower: attack_to_and_junctor;
edge andOverpower -> overpower: and_junctor_to_attack;
}
The editor's ADTree — Data Confidentiality is the full Kordy tree, with firewalls, sensitivity training, a fire-escape break-in route and a strong-password attack subtree — and it leaves every edge type to inference.
Home