A6-MITM is a program which mutates packets using ENIP (Ethernet/IP) and CIP (Common Industrial Protocol) protocols.
This project has been created to help analyzing the behavior of SWaT, a water treatment testbed built at SUTD (Singapore University of Technology and Design).
Hardware
- Ubuntu OS
- Laptop with at least two network interfaces
Software
- Python 2.7
- Bridge Control (https://help.ubuntu.com/community/NetworkConnectionBridge)
- NetfilterQueue (https://github.com/kti/python-netfilterqueue)
- Scapy (http://www.secdev.org/projects/scapy/)
- Ethernet/IP dissectors for Scapy (https://github.com/scy-phy/scapy-cip-enip)
- Ensure the device is physically connected in the middle of two PLCs.
- Edit start.sh to bridge the two network adaptors.
- Edit mutate.py Line 202 with the incoming Ethernet interface.
Mutation Name | Code | Description |
---|---|---|
Add static ๐ฟ | ASD(๐ฟ) | Adds/subtracts an absolute, unchanging ๐ฟ to state measurements |
Add Limits ๐ฟ | ALD(๐ฟ) | Adds/subtracts random value between -๐ฟ and +๐ฟ to state measurements |
Add Random ๐ฟ | ARD(๐ฟ1,๐ฟ2) | Adds/subtracts a random value between ๐ฟ1and ๐ฟ2to state measurements |
Set to Zero | STZ | Sets state measurement to zero |
Set to One | STO | Sets state measurement to one" |
Set to Static | STS(๐ฟ) | Sets state measurement to static value |
Set to Random | STR(๐ฟ1,๐ฟ2) | Set state measurement to a random value between ๐ฟ1and ๐ฟ2 |
Bit Shift Left | BSL(๐ฟ) | Sets state measurement is bit-shifted to left by ๐ฟ bits |
Bit Shift Right | BSR(๐ฟ) | Sets state measurement is bit-shifted to right by ๐ฟ bits |
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (git checkout -b feature/AmazingFeature)
- Commit your Changes (git commit -m 'Add some AmazingFeature')
- Push to the Branch (git push origin feature/AmazingFeature)
- Open a Pull Request
Distributed under the GNU License. See LICENSE.txt for more information.
iTrust - [email protected]
- Francisco Furtado ([email protected])