项目作者: francescoracciatti

项目描述 :
A language to model cyber-physical attacks against cyber-physical systems and networks.
高级语言: Python
项目地址: git://github.com/francescoracciatti/aml.git
创建时间: 2016-12-08T09:19:07Z
项目社区:https://github.com/francescoracciatti/aml

开源协议:MIT License

下载


Build Status
codecov

AML

AML stands for Attack Modeling Language. It is a language to model cyber-physical attacks against cyber-physical systems and networks.

AML provides:

  • a set of keywords and syntax rules to model attack scenarios against generic systems,
  • an interpreter that provides the representation of the attack scenarios.

Synopsis

AML is designed to be used on top of the off-the-shelf cyber-physical systems and networks simulators.
Its purpose is to enable the simulation of the effects of the modeled attacks on the systems under survey.

Motivation

Cyber-physical systems and networks can be severely compromised by cyber-physical attacks.
Since addressing all possible attacks is not viable, due to performance and economic reasons, it is fundamental to choose which attacks to address and which countermeasures to adopt. Hence, a quantitative analysis of attack impact is crucial to make an effective choice.

To do this, it is fundamental to have a tool to model attack scenarios against the system under survey, to be run
afterward by using a dedicated simulator. AML is exactly the modeling tool to achieve this purpose.

Code Example

Let the figure 1 represent the network scenario.

TODO add the figure

When the simulation starts, we want to perform the attack scenario that follows:

  • at time 100 s destroy the sensor node 1
  • from time 100, every 10 ms, inject a fake udp packets toward the node 3
  • from time 100 drop all the messages having the source port number 80 passing through the node 4

The AML code is the following:

  1. scenario {
  2. from 100 {
  3. # Destroy node
  4. once {
  5. destroyNode(1)
  6. }
  7. # Inject fake packets
  8. every 10 ms {
  9. packet fake
  10. createPacket(fake, "udp")
  11. injectPacket(fake, 3, rx, 0, s)
  12. }
  13. # Selective drop
  14. list targets = [4]
  15. filter packetfilter = (("layer4.sourcePort" == 80))
  16. for nodes in targets {
  17. for packets matching packetfilter {
  18. drop(captured)
  19. }
  20. }
  21. }
  22. }

Requirements

  • Python 3.6+
  • PLY 3.9+

Installation

Linux/Unix

TBD

Windows

TBD

Mac OS X

TBD

How To Run It

TBD

Tests

Change the current working directory to the directory aml/test and type:

  1. $ python3 -B -m unittest discover -p '*_test.py' -v

API Reference

TBD

Acknowledgments

  • Marco Tiloca
  • Alessandro Pischedda
  • Gianluca Dini

License

Copyright © 2016, Francesco Racciatti.
Released under MIT license.