Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
AALpy is a light-weight automata learning library written in Python. You can start learning models of black-box systems with a few lines of code.
AALpy supports both active and passive automata learning algorithms that can be used to learn a variety of modeling formalisms, including deterministic, non-deterministic, and stochastic automata, as well as deterministic context-free grammars/pushdown automata.
Automata Type | Supported Formalisms | Algorithms | Features |
---|---|---|---|
Deterministic | DFAs Mealy Machines Moore Machines | L* KV RPNI | Seamless Caching Counterexample Processing 13 Equivalence Oracles |
Non-Deterministic | ONFSM Abstracted ONFSM | L*ONFSM | Size Reduction Trough Abstraction |
Stochastic | Markov Decision Processes Stochastic Mealy Machines Markov Chains | L*MDP L*SMM ALERGIA | Counterexample Processing Exportable to PRISM format Bindings to jALERGIA |
Pushdown | VPA/SEVPA | KVVPA PAPNI | Passive learning of VPAs Exclusive call-return pairs |
Use the package manager pip to install the latest release of AALpy:
pip install aalpy
To install current version of the master branch (it might contain bugfixes and added functionalities between releases):
pip install https://github.com/DES-Lab/AALpy/archive/master.zip
The minimum required version of Python is 3.6.
Ensure that you have Graphviz installed and added to your path if you want to visualize models.
For manual installation, clone the repo and install pydot
(the only dependency).
If you are interested in automata learning or would like to understand the automata learning process in more detail, please check out our Wiki. On Wiki, you will find more detailed examples on how to use AALpy.
Examples.py contains examples covering almost the whole of AALpy's functionality and its a great starting point.
All active automata learning procedures follow this high-level approach:
Passive learning algorithm simply require you to provide data in the appropriate format (check Wiki and Examples) and run the learning function.
The following snippet demonstrates a short example in which an automaton is either loaded or randomly generated and then learned.
from aalpy.utils import load_automaton_from_file, generate_random_deterministic_automata
from aalpy.SULs import AutomatonSUL
from aalpy.oracles import RandomWalkEqOracle
from aalpy.learning_algs import run_Lstar, run_KV
# load an automaton
# automaton = load_automaton_from_file('path_to_the_file.dot', automaton_type='dfa')
# or randomly generate one
random_dfa = generate_random_deterministic_automata(automaton_type='dfa', num_states=8,
input_alphabet_size=5, output_alphabet_size=2)
# get input alphabet of the automaton
alphabet = random_dfa.get_input_alphabet()
# loaded or randomly generated automata are considered as BLACK-BOX that is queried
# learning algorithm has no knowledge about its structure
# create a SUL instance for the automaton/system under learning
sul = AutomatonSUL(random_dfa)
# define the equivalence oracle
eq_oracle = RandomWalkEqOracle(alphabet, sul, num_steps=5000, reset_prob=0.09)
# start learning
# run_KV is for the most part reacquires much fewer interactions with the system under learning
learned_dfa = run_KV(alphabet, sul, eq_oracle, automaton_type='dfa')
# or run L*
# learned_dfa_lstar = run_Lstar(alphabet, sul, eq_oracle, automaton_type='dfa')
# save automaton to file and visualize it
# save_automaton_to_file(learned_dfa, path='Learned_Automaton', file_type='dot')
# or
learned_dfa.save()
# visualize automaton
# visualize_automaton(learned_dfa)
learned_dfa.visualize()
# or just print its DOT representation
print(learned_dfa)
To make experiments reproducible, define a random seed at the beginning of your program.
from random import seed
seed(2) # all experiments will be reproducible
AALpy has been used to:
If you use AALpy in your research, please cite us with of the following:
If you have research suggestions or you need specific help concerning your research, feel free to start a discussion or contact edi.muskardin@silicon-austria.com. We are happy to help you and consult you in applying automata learning in various domains.
Pull requests are welcome. For significant changes, please open an issue first to discuss what you would like to change. In case of any questions or possible bugs, please open issues.
FAQs
An active automata learning library
We found that aalpy demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.