OpENer ist ein EtherNet/IP™-Stack für I/O-Adaptergeräte; unterstützt mehrere I/O- und explizite Verbindungen; umfasst Objekte und Dienste zur Herstellung von EtherNet/IP™-kompatiblen Produkten, die in DER ETHERNET/IP-SPEZIFIKATION definiert und von ODVA (http://www.odva.org) veröffentlicht sind.
Benutzer und Entwickler von OpENer können den jeweiligen Google-Gruppen beitreten, um Erfahrungen auszutauschen, die Verwendung von OpENer zu diskutieren und neue Funktionen und CIP-Objekte vorzuschlagen, die für die Community nützlich wären.
Mailingliste für Entwickler: https://groups.google.com/forum/#!forum/eip-stack-group-opener-developers
Benutzer-Mailingliste: https://groups.google.com/forum/#!forum/eip-stack-group-opener-users
OpENer wurde für eine hohe Portabilität entwickelt. Die Standardversion richtet sich an PCs mit einem POSIX-Betriebssystem und einer BSD-Socket-Netzwerkschnittstelle. Zum Testen dieser Version empfehlen wir einen Linux-PC oder Windows mit installiertem Cygwin (http://www.cygwin.com). Folgendes muss installiert sein:
für normales Bauen. Diese sollten auf den meisten Linux-Installationen installiert sein und sind Teil der Entwicklungspakete von Cygwin.
Wenn Sie die Unit-Tests ausführen möchten, müssen Sie auch CppUTest über https://github.com/cpputest/cpputest herunterladen
Für die Konfiguration des Projekts empfehlen wir die Verwendung einer CMake-GUI (z. B. das cmake-gui-Paket unter Linux oder den bei CMake erhältlichen Installer für Windows).
setup_posix.sh
auf Rufen Sie den Befehl make
auf
Aufruf von OpENer:
./src/ports/POSIX/OpENer
zB ./src/ports/POSIX/OpENer eth1
OpENer verfügt jetzt auch über einen echtzeitfähigen POSIX-Start über die OpENer_RT-Option, was erfordert, dass auf dem verwendeten Kernel die vollständigen präventiven RT-Patches angewendet und aktiviert sind. Wenn Sie OpENer_RT verwenden möchten, führen Sie vor Schritt 2 sudo setcap cap_ipc_lock,cap_sys_nice+ep ./src/ports/POSIX/OpENer
aus, um OpENer CAP_SYS_NICE
und die CAP_IPC_LOCK
Funktionen zu gewähren, die für den RT-Modus erforderlich sind
OpENer kann auch als Bibliothek erstellt und installiert werden, indem das CMake-Flag -DOPENER_INSTALL_AS_LIB
gesetzt wird. Um eine gemeinsam genutzte Bibliothek zu erstellen, sollte auch die globale Option -DBUILD_SHARED_LIBS=ON
gesetzt werden. Es wurde nur auf der Linux/POSIX-Plattform getestet.
Build All
in Visual Studio auswählenWechseln Sie zu binwin32srcportsWIN32
Je nachdem, ob Sie in Visual Studio die Debug
oder Release
Konfiguration gewählt haben, wird Ihre ausführbare Datei entweder im Unterordner Debug oder Release angezeigt
Rufen Sie OpENer über auf
OpENer
zB OpENer 3
Um den richtigen Schnittstellenindex zu erhalten, geben Sie den Befehl route print
in eine Eingabeaufforderung ein und suchen Sie am Anfang der Ausgabe nach der MAC-Adresse der von Ihnen gewählten Netzwerkschnittstelle. Die Zahl ganz links ist der entsprechende Schnittstellenindex.
Die POSIX-Setup-Datei kann für Cygwin wiederverwendet werden. Bitte beachten Sie, dass Sie den RT-Modus nicht verwenden können und den Code entfernen müssen, der für die Überprüfung und den Erhalt der erforderlichen Funktionen verantwortlich ist, da libcap in Cygwin nicht verfügbar ist. Der einfachere und besser unterstützte Weg, OpENer für Windows zu erstellen, ist die Verwendung von MinGW oder Visual Studio.
setup_mingw.bat
in einer DOS-Befehlszeile aus. (Keine Bash-Shell). Wenn eine Ablaufverfolgung gewünscht ist, verwenden Sie Folgendes (wobei der cmake-Parameter in Anführungszeichen gesetzt werden muss) oder ändern Sie die Datei ./source/CMakeList.txt. setup_mingw.bat "-DOpENer_TRACES:BOOL=TRUE"
Die Dokumentation der Funktionen von OpENer ist Teil des Quellcodes. Die Quellpakete enthalten die generierte Dokumentation im Verzeichnis doc/api_doc. Wenn Sie die GIT-Version verwenden, benötigen Sie zum Generieren der HTML-Dokumentation das Programm Doxygen. Sie können die Dokumentation generieren, indem Sie doxygen über die Befehlszeile im Hauptverzeichnis des Openers aufrufen.
Fuzzing ist eine automatisierte Testmethode, die unterschiedliche Eingabedaten an ein Programm weiterleitet, um die Ausgabe zu überwachen. Dies ist eine Möglichkeit, die Gesamtzuverlässigkeit zu testen und potenzielle Sicherheitslücken zu identifizieren.
Der Fuzzer, den wir verwenden, ist AFL, ein Fuzzer, der laufzeitgesteuerte Techniken verwendet, um Eingaben für das getestete Programm zu erstellen. Aus übergeordneter Sicht funktioniert AFL wie folgt:
Um mit dem Fuzzen dieses Projekts mit AFL zu beginnen, müssen Sie es mit AFL kompilieren. Stellen Sie zunächst sicher, dass AFL installiert ist:
sudo apt install build-essential
wget http://lcamtuf.coredump.cx/afl/releases/afl-latest.tgz
tar xzf afl-latest.tgz
cd afl*
make && sudo make install
echo "AFL is ready at: $(which afl-fuzz)"
Kompilieren Sie dann OpENer mit AFL:
OpENer/bin/posix
./setup_posix_fuzz_afl.sh
make
Generieren Sie abschließend einige Testfälle und starten Sie AFL:
# Generate inputs
mkdir inputs
echo 630000000000000000000000000000000000000000000000 | xxd -r -p > ./inputs/enip_req_list_identity
# You can also use the inputs we prepared from OpENer/fuzz/inputs
# Finally, let's fuzz!
afl-fuzz -i inputs -o findings ./src/ports/POSIX/OpENer
Um einen Absturz zu reproduzieren, reicht es normalerweise aus, den Testfall mit cat testcase | nc IP_ADDR 44818
erneut zu übertragen cat testcase | nc IP_ADDR 44818
Da CIP jedoch über die EtherNet/IP-Schicht läuft, muss es zunächst eine gültige Sitzung registrieren. Daher müssen wir ein spezielles Skript verwenden: python fuzz/scripts/send_testcase.py IP testcase_path
Überprüfen Sie das von Ihnen erstellte Netzwerk mit: docker network inspect mac_vlan_network
Das Netzwerk weist den Docker-Containern IP-Adressen zu und ein externer Scanner kann mit ihnen kommunizieren. Um vom Docker-Host aus auf die Container zuzugreifen, müssen Sie eine Brücke erstellen.
Erstellen Sie eine Docker-Datei. Dabei wird Ubuntu als Basis-Image verwendet. Es kopiert OpENer in das Image-Stammverzeichnis und installiert die erforderlichen Pakete. Führen Sie abschließend OpENer auf eth0 des Images aus: #Dateiname: Dockerfile FROM ubuntu:20.04 ADD ./bin/posix/src/ports/POSIX/OpENer / RUN apt-get update && apt-get install -y --no-install- empfiehlt libcap-dev nmap ENTRYPOINT ["./OpENer", "eth0"]
Erstellen Sie eine docker-compose.yml, mit der Sie das Macvlan-Netzwerk mit den Containern verbinden und diese einfach erstellen und abbauen können: Version: „3.3“ Dienste: Dockerimagename: Netzwerkmodus: Mac_vlan_network Bild: Dockeruser/Dockerimagename
Beachten Sie, dass Sie zum Anmelden bei einem laufenden Container einen Port in den Dockerfile- und Dockercompose-Dateien freigeben und eine Netzwerkbrücke einrichten müssen.
Docker-Befehle zum Starten und Stoppen mehrerer Instanzen der OpENer-Container: 128 Docker-Image-Instanzen starten: docker-compose up --scale dockerimagename=128 -d Alle Instanzen herunterfahren: docker-compose down
Informationen zur Portierung von OpENer auf neue Plattformen finden Sie im Abschnitt zur Portierung in der Doxygen-Dokumentation.
Der einfachste Weg besteht darin, das Repository zu forken und dann einen Feature-/Bugfix-Zweig zu erstellen. Nachdem Sie Ihr Feature/Ihren Bugfix fertiggestellt haben, erstellen Sie einen Pull-Request und erläutern Sie Ihre Änderungen. Bitte aktualisieren Sie außerdem die bereitgestellten Codeabschnitte und/oder fügen Sie doxygen-Kommentare hinzu. Bitte halten Sie sich an die Codierungskonventionen, wie in source/doc/coding_rules definiert. Der einfachste Weg, sich an die Einrückungskonvertierung anzupassen, besteht darin, uncrustify als Git-Filter im OpENer-Repository festzulegen, was mit den folgenden to-Befehlen erfolgen kann:
git config filter.uncrustify.clean "/path/to/uncrustify/uncrustify -c uncrustify.cfg --mtime --no-backup"
git config filter.uncrustify.smudge "cat"