Deutschland: außerhalb D6, D7: Vor-Ort-Einsatz < 100%
Weitere Länder: Vor-Ort-Einsatz max. 50%
Erweiterung der Software von Geräten zur Energieverteilung um E-Mail-Transportverschlüsselung und Anmeldeverzögerung bei einem Premiumanbieter von Elektrotechnik. Die Geräte laufen unter Embedded Linux.
Tätigkeiten: Ermittlung der Anforderungen zum E-Mail-Versand mit Transport Layer Security (TLS)-Verschlüsselung, Erstellung und Abstimmung des Umsetzungskonzepts mit dem Produkt-Management, Bewertung möglicher Open Source-Pakete, Auswahl und Integration des SMTP-Clients msmtp, Implementierung eines SMTP-Client-Wrappes in C++, der den SMTP-Client in einem separaten Prozess ausführt; Verwendung von TLS und StartTLS jeweils in Abhängigkeit von der konfigurierten Portnummer, Installation der benötigten Herausgeber- und Root-Zertifikate, geschützte Übergabe des SMTP-Passworts an den SMTP-Client über temporäre Pipe, Tests mit den wichtigsten öffentlichen SMTP-Servern, Erstellung von Unit-Tests mit Boost.Test, Analyse des vorhandenen Sourcecodes der Gerätesoftware und Ermittlung, wie sich eine Anmeldeverzögerung (Login-Delay) realisieren lässt, das heißt eine temporäre Sperre des Benutzerzugangs nach mehrmaliger Falscheingabe des Passworts unter Berücksichtigung der Zugangsarten Web, SSH und SNMP; Konfiguration der Pluggable Authentication Modules (Linux PAM) mit dem Modul pam_faillock.so, Anpassung der Webanwendung in C++ und JavaScript, um dem Benutzer bei Authentifizierungsfehler entsprechende Meldungen anzuzeigen; Ergänzung des Loggings bei Login-Fehlversuchen und -Sperren, Erweiterung der Anwendungsmodule in C++, um die Login-Delay-Konfiguration zu ändern und zu speichern; Erstellung eines neuen Kommandos, das zwischen diesen Modulen über den D-Bus ausgetauscht wird, einschließlich Code-Generierung mit dem Tool gdbus-codegen; Erweiterung der D-Bus- und SQLite-Schnittstellen in der Anwendung um boolschen Datentyp, Versionsverwaltung mit Git und Bitbucket, Ticketverwaltung mit Jira
Analyse und Aktualisierung der Geräte- und Build-Software bei einem Premiumanbieter von Elektrotechnik. Ziel war die weitere Gewährleistung der IT-Sicherheit von im Einsatz befindlichen Geräten zur Energieverteilung.
Tätigkeiten: Abfrage der Common Vulnerabilities and Exposures (CVE) der verwendeten Open Source-Pakete von der National Vulnerability Database (NVD) mittels Python-Skript, Analyse einzelner CVEs und Einschätzung des jeweiligen Sicherheitsrisikos im Endprodukt, Entwicklung und Vergleich von Konzepten zur Schwachstellenbeseitigung, Aktualisierung des Werkzeugs Buildroot, mit dem ein Embedded Linux-System erstellt wird, einschließlich der enthaltenen Pakete; Beseitigung verbliebener Schwachstellen durch Hinzufügen von Patch-Dateien, Anpassung der Bash-Skripte, mit denen ein Update-Paket erstellt und auf dem Target installiert wird; Verwendung der MTD- und UBI-Tools, um auf Partitionen zuzugreifen, die auf Raw Flash Devices liegen; Anpassung der voreingestellten SSH-Konfiguration auf dem Gerät, um SSH-Verbindungen ohne den mittlerweile unsicheren Secure Hash Algorithm SHA-1 zu ermöglichen (z. B. mit WinSCP); Update auf neue Versionen der Cross-Compiler-Toolchains für ARM Microchip SoCs (zum Teil Bare Metal) und des Build-Tools CMake einschließlich entsprechender Anpassungen der Projektdateien, Erstellung einer Native-Compiler-Toolchain durch Bauen des GCC-8 aus den Quellen, System-Update des Jenkins-Buildservers, Erstellung eines Skripts zur Prüfung, ob der öffentliche Schlüssel in einem X.509-Zertifikat mit einem gegebenen privaten Schlüssel korrespondiert; Konfiguration des Webservers lighttpd für HTTPS, Versionsverwaltung mit Bitbucket, Ticketverwaltung mit Jira
Entwicklung der Detektion von Treppenstufen zur Bewegungsplanung für mobile Roboter unter Verwendung einer LiDAR-Tiefenbildkamera. Das Projekt ist komplett Open Source.
Tätigkeiten: Entwicklung einer Methode zur geometrischen Kalibrierung der Kamera und Erstellung des entsprechenden Programms, Verwendung des Intel RealSense SDK zu Kamerasteuerung, Bild-/Punktwolkeneinzug und Projektion/Deprojektion einzelner Punkte; Implementierung der Koordinatentransformation mit Boost QVM und der weiteren Verarbeitung von 3D-Punktwolken in C++20, Segmentierung von konventionellen 2D-Bildern mit OpenCV, Visualisierung mittels OpenGL, Erstellung eines Wrappers in Python als Robot Operating System (ROS)-Komponente, Analyse eines Quirks des USB3-Controllers ASM1042 durch Debugging und Tracing des Linux-Kernels, Entwicklung eines Workarounds in Form eines Patches für den xHCI-Treiber im Kernel
Entwicklung der Konnektivitäts-Software für eine neue Gerätegeneration bei einem Medizintechnikhersteller. Das Connectivity-Modul dient dem Datenaustausch der Geräte mit der Umgebung, auch über das Internet. Der Fokus lag bei dem Projekt auf der IT-Sicherheit.
Tätigkeiten: Entwurf und Implementierung der Hauptanwendung für das Embedded System, Programmierung in C++17, Verwendung der Bibliothek Boost und der Werkzeuge GCC und CMake, Programmerstellung auf einer Workstation unter Linux Ubuntu für das Target (Toradex Colibri) unter Embedded Linux / Yocto, Konfiguration der Dienste auf dem Target mit systemd, Debuggen auf dem Target mit GDB, Konzepterstellung und Umsetzung der Serveranbindung des Gerätes über das Internet unter Beachtung der besonderen Anforderungen an die IT-Sicherheit, Implementierung des sicheren Datenaustauschs für Logfiles, Software-Updates usw. basierend auf Verschlüsselung und digitalen Signaturen, Realisierung einer gesicherten Verbindung über das Protokoll TLS mit gegenseitiger Authentifizierung unter Verwendung von X.509-Zertifikaten, Verwendung der OpenSSH- und OpenSSL-Tools sowie Anbindung der OpenSSL-Bibliothek, Absicherung des Systems mit den Programmen Fail2ban und iptables, Erstellung von entsprechenden Tests der Netzwerk-Sicherheit, Definition und Umsetzung spezieller Protokolle für die Kommunikation über serielle Ports und TCP-Sockets mittels Boost.Asio, Implementierung von Multithreading mit der C++11-Thread-Bibliothek, Erstellung eines Datenbankadapters zur Speicherung von Gerätedaten und -ereignissen in einer SQLite-Datenbank, Implementierung von State Machines und Puffern, Entwicklung von Unit-Tests mit Boost.Test, Erstellung von Modul- und Hardware-Tests sowie einer Teststeuerung mit Umgebungssimulation, Requirements- und Test-Management unter Beachtung der Medizingeräte-Software-Norm IEC 62304 mit dem Werkzeug Polarion, Erweiterung der Softwarearchitektur mit Enterprise Architect, Verwendung der Werkzeuge Eclipse (Papyrus), Doxygen, PuTTY, WinSCP; Installation des Remote Desktop Protocol Servers Xrdp unter Linux
Weiterentwicklung einer Client/Server-Anwendung bei einem Hersteller von Spektrometern. Im Mittelpunkt standen dabei SOAP-basierte Webservices und eine Web-Oberfläche, sämtlich in C++ programmiert.
Tätigkeiten: Entwicklung neuer Programmteile in C++14, Umstellung der Webservices auf gSOAP-Toolkit einschließlich Optimierung der Architektur, Erstellung einer hierarischen WSDL-Dateistruktur, Entwicklung eines Code-Generators (zusätzlich zum gSOAP-eigenen) zur Erzeugung umfangreichen Datenüberführungs-Codes, Weiterentwicklung der Web Toolkit (Wt)-basierten Web-GUI, Programmierung einer neuen Tabelle zur Darstellung von Messdaten, Umsetzung eines adaptiven Layouts mittels CSS, Umstellung der Web-GUI auf Wt4, dadurch stärkere Orientierung an den C++ Core Guidelines (Stroustrup/Sutter), Implementierung der verschlüsselten Speicherung von Passwörtern mit Hashwert und Salt, Entwicklung von Unit-Tests mit Boost.Test, Erstellung eines Konzepts für automatisierte Tests der Web-GUI mit dem Microsoft-UI-Testframework im Visual Studio Enterprise, Aufsetzen einer Testumgebung bestehend aus Microsoft IIS, ODBC-Datenquelle und SQL-Server; Konfiguration der Webservices zur verschlüsselten Übertragung über https, Erstellung selbst-signierter X.509-Zertifikate mit OpenSSL und Installation dieser im Webserver Microsoft IIS und in den Webservice-Clients, digitales Signieren von Dateien mit OpenSSL und Microsoft Authenticode, Code-Analyse und Debugging (auch der Spektroskopiesoftware), Fehlersuche und -behebung, Projekt- und Versionsverwaltung mit Microsoft TFS
Entwicklung von Unit-Tests für Steuerungssoftware bei einem führenden Hersteller von Antriebstechnik
Tätigkeiten: Programmierung von Unit-Tests einschließlich dazu benötigter Mock-Objekte in C++ auf den Plattformen Windows, Windows CE und Green Hills Integrity; Verwendung des Google C++ Testing- und Mocking-Frameworks (Google Test / Google Mock); Erstellung flexibel verwendbarer Tester-Klassen als gemeinsame Basis für die Tests verschiedener Softwarekomponenten und für eine große Anzahl unterschiedlicher Testszenarien; Nachbildung der Umgebung für jeweils ein isoliertes Testobjekt; Erstellung von Mock-Objekten u. a. für die Dateizugriffs- und Socket-Schnittstellen; Prüfung des Verhaltens, des Outputs und der Thread-Sicherheit von Softwarekomponenten; Realisierung der Thread-Sicherheit des oben genannten Testframeworks und der Bibliothek STLport unter Windows und Integrity durch Implementieren der Synchronisierungsmechanismen (Synchronization Primitives), plattformunabhängig mittels Platform Abstraction Layer (PAL); Black-Box- und White-Box-Tests, Codeanalyse, Code-Review, Verwendung des Visual Studio Team Foundation Server 2012
Mitarbeit an der Neuentwicklung von Steuer- und Auswertesoftware für Prüfstände in der Automotive Industrie. In diesem Projekt kamen verstärkt Open Source-Software und moderne Programmiertechniken zum Einsatz. Außerdem stand eine hochentwickelte Infrastruktur zur Verfügung.
Tätigkeiten: Programmierung in C++ mit den Compilern MinGW und GCC sowie dem Buildsystem CMake, Entwicklung eines Messdatenkonverters mit grafischer Oberfläche unter Verwendung des Frameworks Qt 5 und seiner Model/View-Architektur, Erstellung eines Tools zur grafischen Darstellung von Messwertekurven unter Einsatz des Model View ViewModel (MVVM)-Musters, Entwurf und Implementierung von Klassen zum Lesen und Schreiben von Hierarchical Data Format (HDF5)-Dateien sowie eines Iterators für den Messdatenzugriff, der das Strategy-Muster nutzt; Template-Metaprogrammierung mit Typlisten zur Verarbeitung verschiedener Messwerte-Datentypen, Verwendung der Xerces-C++-Bibliothek zum Parsen und Manipulieren von Ressourcen-XML-Dateien, Entwurf einer GUI-Softwarearchitektur, die sich an einem Schichtenmodell orientiert; Implementierung einfacher und zusammengesetzter Widgets, basierend auf dem Modul Qt Widgets, zum Beispiel einer numerischen Anzeige von Signalwerten mit Editiermöglichkeit und Konfiguration per Drag & Drop; Umsetzung von extern erstellten GUI-Designvorgaben, Erstellung von Unit Tests unter Windows 7 und Linux, basierend auf den Frameworks CppUnit und Qt Test; Nutzung des Continuous Integration-Systems Jenkins zum automatisierten Bauen und Testen, Versionsverwaltung mit Subversion (SVN), Verwendung weiterer Werkzeuge wie Qt Creator, Eclipse, Sparx Enterprise Architect und Doxygen
ab 2013
(siehe oben)
05/2012 ? 10/2012 Infotainmentsystem
Softwareanalyse und -fehlerbehebung im Bereich Informations-, Kommunikations- und Entertainment-Systeme bei einem Premium-Automotive-Zulieferer. Die Systeme integrieren neben Navigation und Telefon auch multimediale Unterhaltung und ermöglichen die Anbindung externer Geräte und Speichermedien.
Tätigkeiten: Voranalyse von Tickets einschließlich zugehöriger Fehler-Traces, Kommunizieren von Fehlerursachen und Zuständigkeiten, Identifizierung der betroffen Komponenten, Layer oder Subsysteme (z. B. Cinemo, MoCCA Framework, MOST); Weiterleitung der Tickets an die verantwortlichen Entwickler, Abteilungen und ausgelagerten Teams (zum Teil im Ausland: Ukraine, Indien, China), Koordinieren von Change Requests, Stacktrace-Analyse, C++-Codeanalyse und Implementieren von Bugfixes im Bereich Medien-Erkennung und -Wiedergabe, Einrichtung eines Testsystems (unter QNX), Erstellen und Testen neuer Softwarestände
03/2012 ? 05/2012 WMV-Konverter
Entwicklung einer Software zur Konvertierung von Windows Media-Audio-/Videodateien
Tätigkeiten: Erstellung von Funktionen zum Lesen und Schreiben von Advanced Systems Format (ASF)-Dateien, DLL-Injection mittels Remote-Thread, API-Hooking durch Überschreiben von Code, Thread-Synchronisation mittels Mutex und Event/Wait-Funkionen
Mitarbeit an der Weiterentwicklung der Gerätesoftware für einen bekannten Hersteller von mobilen Navigationssystemen unter Windows CE 5 und 6
Als Softwarearchitekt und Entwickler bin ich mit dem gesamten Prozess der Softwareentwicklung vertraut. Durch Einsatz effektiver Methoden und leistungsfähiger Werkzeuge sowie moderner Design- und Programmiertechniken erhalten Sie qualitativ hochwertige Software.
IoT-Sicherheit:
Beurteilung der Sicherheits-Schwachstellen eingebetteter Systeme in einem Netzwerk
Erstellung von optimal angepassten Sicherheitskonzepten
Abfrage von Common Vulnerabilities and Exposures (CVE) von öffentlichen Datenbanken, Analyse und Bewertung der CVEs
Erstellung von Sicherheitsupdates für Embedded Linux-Systeme
Erweiterung bestehender Gerätesoftware um Sicherheitsfunktionen wie TLS-Verschlüsselung des E-Mail-Versands oder Login-Delay
Portierung der Open Portable Trusted Execution Environment (OP-TEE) auf neue Geräte und Testen der Sicherheit von OP-TEE-Installationen
Implementierung der Prüfung digitaler Signaturen mittels OpenSSL zur Wahrung der Integrität eines Systems
Verschlüsselte Datenübertragung über das Protokoll MQTT mit TLS sowie mit den OpenSSH-Tools ssh und scp zum Schutz der Vertraulichkeit übertragener Informationen
Implementierung gesicherter Verbindungen über das Protokoll TLS mit gegenseitiger Authentifizierung unter Verwendung von X.509-Zertifikaten
Erstellung von TLS-Clients als Trusted Application
Gewährleistung der Verfügbarkeit eines Systems durch Abwehr von Denial of Service (DoS)-Angriffen, indem die IP-Adressen der Angreifer erkannt und blockiert werden; mögliche Realisierung mit dem Programm Fail2ban bzw. geeigneten Scripten zur Steuerung der Linux-Firewall (iptables, ipset)
Erhöhung der Sicherheit durch Kontrolle und Minimierung der offenen Ports sowie Einstellung unüblicher Portnummern
Test weiterer Sicherheitsfunktionen eines Systems einschließlich Analyse des Netzwerkverkehrs mit den Werkzeugen Wireshark und tcpdump sowie Entwicklung von entsprechenden automatisierten Tests
Durchführung von Penetrationstests
Softwareengineering:
Anforderungsanalyse, Softwaredesign und Implementierung in C++ und verwandten Programmiersprachen
Modellieren von Softwarearchitekturen mit UML-Werkzeugen (sowohl freie als auch proprietäre)
Anwendung von Entwurfsmustern (Design Patterns) mithilfe passender Programmiertechniken wie objektorientierte, generische oder funktionale Programmierung
Modernes C++-Design unter Verwendung der C++-Bibliotheken Loki und Boost
Flexible Entwürfe mit Policy-basiertem Klassendesign
Template-Metaprogrammierung mit Typlisten, zum Beispiel zur Erzeugung gestreuter oder linearer Vererbungshierarchien
Verwendung generischer Komponenten, wie generalisierte Funktoren zur Anwendung des Command-Musters, abstrakte Fabrik (Abstract Factory-Muster) oder Small-Object-Allokator
Berücksichtigung der Features der neuen Standards C++11 bis 20, zum Beispiel Typinferenz und Lambda-Funktionen, um die Produktivität beim Programmieren zu steigern
Einsatz weiterer C++11-Neuerungen, wie Rvalue-Referenzen und der dadurch ermöglichten Move-Semantik, Variadic Templates, sowie der integrierten Unicode-Unterstützung
Nutzung der neuen C++11-Multithreading-Funktionalität und der Standardbibliotheks-Erweiterungen für reguläre Ausdrücke, Type Traits, Smart Pointer sowie die neuen Container Tupel und Array
Verwendung der C++17-Features String-Sicht, optionaler Wert und Variante, sowie der Dateisystem-Bibliothek und der parallelen Algorithmen der Standardbibliothek
Konfiguration und Nutzung komplexer Continuous Integration-Systeme zur Software-Qualitätssicherung
Entwurf, Erstellung und Wartung automatisierter Modultests mithilfe geeigneter Test-Frameworks
Bauen des Linux-Kernels zum Debuggen und Patchen
Erstellen des Kernels und Root-FS für Embedded-Systeme mit Yocto und Buildroot
Verwendung von Werkzeugen zur Versionsverwaltung und zur Erzeugung der Softwaredokumentation aus Sourcecode-Kommentaren, Erstellung von Spezifikationen zu Schnittstellen und Datenformaten sowie von Anwenderdokumentation
Technische Anwendungen:
Entwicklung von PC-basierten Anwendungen der Mess-, Steuer- und Regelungstechnik
Software für die berührungslose Koordinatenmesstechnik
Ansteuerung von Sensoren; Aufzeichnung, Auswertung und Visualisierung von Messwerten
Kalibrierung, Fehlerrechnung, Nachweis der Messgerätefähigkeit
Programmierung von mehrachsigen Bahnsteuerungen (Motion Control)
Bildaufnahme und Steuerung digitaler Videokameras (USB, IEEE 1394 / FireWire) mit DirectShow
Bildverarbeitung: Segmentierung, Klassifizierung, Muster- und Bewegungserkennung; zum Teil auf der Open Source Computer Vision Library (OpenCV) basierend
Audio- und Videosignalcodierung (MP3, AAC, JPEG, MPEG, H.264), Implementierung von Bild- und Videokompressionsverfahren (Transformation, Quantisierung, Codierung), zum Teil optimiert für Mobilgeräte
Signalverarbeitung mit den Intel Integrated Performance Primitives (IPP): effiziente Arithmetik, digitale Filter, Short-Time Fourier-Transformation, Spektralanalyse, Farbkonvertierung, Schwellwertoperationen, FFT, DCT, Statistik, geometrische Transformationen, Wavelet-Operationen
Anwendungen und Grundlagen im Bereich Machine Vision, zum Beispiel normalisierte 2D-Grauwertkorrelation
Erarbeitung von Grundlagen zum Einsatz von LiDAR-Kameras: geometrische Kalibrierung, Transformation und Verarbeitung von 3D-Punktwolken, Identifikation und Vermessung von Objekten
Verwendung des Robot Operating System (ROS) sowie Erstellung neuer ROS-Komponenten
Erweitern und Patchen von Digital Living Network Alliance (DLNA)-Servern
Kommunikation über Bluetooth Low Energy (BLE) mittels Tiny Bluetooth LE Library (TinyB) bzw. Android-Bluetooth-Stack
Analyse von Hardware-Quirks, zum Beispiel in einem USB3-Controller, durch Debuggen des Linux-Kernels mittels Kernel-Debugger KGDB, Dynamic-Debug und Event-Tracing
Entwicklung von Workarounds in Form von Patches, zum Beispiel für den xHCI-Treiber im Kernel
Ich bin sowohl an der Übernahme von Teilaufgaben innerhalb größerer Projekte als auch an der Abwicklung kompletter Projekte, einschließlich Beratung und Support interessiert.
IoT Security Consultant
Software engineer with focus on embedded systems and network security
If you are developing devices that are to be connected to the Internet, I support you in securing the connection. I create vulnerability assessments and security concepts tailored to your needs. Appropriate security tests are an important part of this. I develop automated tests of the security features of a system and carry out penetration tests.
About me
During numerous projects in a wide variety of industries, I gained extensive experience as a software architect and developer. Most recently, I specialized in the security of networked devices. I implemented the Internet connection of medical devices and developed corresponding security tests.
Current open-source projects: https://github.com/peter-nebe
Deutschland: außerhalb D6, D7: Vor-Ort-Einsatz < 100%
Weitere Länder: Vor-Ort-Einsatz max. 50%
Erweiterung der Software von Geräten zur Energieverteilung um E-Mail-Transportverschlüsselung und Anmeldeverzögerung bei einem Premiumanbieter von Elektrotechnik. Die Geräte laufen unter Embedded Linux.
Tätigkeiten: Ermittlung der Anforderungen zum E-Mail-Versand mit Transport Layer Security (TLS)-Verschlüsselung, Erstellung und Abstimmung des Umsetzungskonzepts mit dem Produkt-Management, Bewertung möglicher Open Source-Pakete, Auswahl und Integration des SMTP-Clients msmtp, Implementierung eines SMTP-Client-Wrappes in C++, der den SMTP-Client in einem separaten Prozess ausführt; Verwendung von TLS und StartTLS jeweils in Abhängigkeit von der konfigurierten Portnummer, Installation der benötigten Herausgeber- und Root-Zertifikate, geschützte Übergabe des SMTP-Passworts an den SMTP-Client über temporäre Pipe, Tests mit den wichtigsten öffentlichen SMTP-Servern, Erstellung von Unit-Tests mit Boost.Test, Analyse des vorhandenen Sourcecodes der Gerätesoftware und Ermittlung, wie sich eine Anmeldeverzögerung (Login-Delay) realisieren lässt, das heißt eine temporäre Sperre des Benutzerzugangs nach mehrmaliger Falscheingabe des Passworts unter Berücksichtigung der Zugangsarten Web, SSH und SNMP; Konfiguration der Pluggable Authentication Modules (Linux PAM) mit dem Modul pam_faillock.so, Anpassung der Webanwendung in C++ und JavaScript, um dem Benutzer bei Authentifizierungsfehler entsprechende Meldungen anzuzeigen; Ergänzung des Loggings bei Login-Fehlversuchen und -Sperren, Erweiterung der Anwendungsmodule in C++, um die Login-Delay-Konfiguration zu ändern und zu speichern; Erstellung eines neuen Kommandos, das zwischen diesen Modulen über den D-Bus ausgetauscht wird, einschließlich Code-Generierung mit dem Tool gdbus-codegen; Erweiterung der D-Bus- und SQLite-Schnittstellen in der Anwendung um boolschen Datentyp, Versionsverwaltung mit Git und Bitbucket, Ticketverwaltung mit Jira
Analyse und Aktualisierung der Geräte- und Build-Software bei einem Premiumanbieter von Elektrotechnik. Ziel war die weitere Gewährleistung der IT-Sicherheit von im Einsatz befindlichen Geräten zur Energieverteilung.
Tätigkeiten: Abfrage der Common Vulnerabilities and Exposures (CVE) der verwendeten Open Source-Pakete von der National Vulnerability Database (NVD) mittels Python-Skript, Analyse einzelner CVEs und Einschätzung des jeweiligen Sicherheitsrisikos im Endprodukt, Entwicklung und Vergleich von Konzepten zur Schwachstellenbeseitigung, Aktualisierung des Werkzeugs Buildroot, mit dem ein Embedded Linux-System erstellt wird, einschließlich der enthaltenen Pakete; Beseitigung verbliebener Schwachstellen durch Hinzufügen von Patch-Dateien, Anpassung der Bash-Skripte, mit denen ein Update-Paket erstellt und auf dem Target installiert wird; Verwendung der MTD- und UBI-Tools, um auf Partitionen zuzugreifen, die auf Raw Flash Devices liegen; Anpassung der voreingestellten SSH-Konfiguration auf dem Gerät, um SSH-Verbindungen ohne den mittlerweile unsicheren Secure Hash Algorithm SHA-1 zu ermöglichen (z. B. mit WinSCP); Update auf neue Versionen der Cross-Compiler-Toolchains für ARM Microchip SoCs (zum Teil Bare Metal) und des Build-Tools CMake einschließlich entsprechender Anpassungen der Projektdateien, Erstellung einer Native-Compiler-Toolchain durch Bauen des GCC-8 aus den Quellen, System-Update des Jenkins-Buildservers, Erstellung eines Skripts zur Prüfung, ob der öffentliche Schlüssel in einem X.509-Zertifikat mit einem gegebenen privaten Schlüssel korrespondiert; Konfiguration des Webservers lighttpd für HTTPS, Versionsverwaltung mit Bitbucket, Ticketverwaltung mit Jira
Entwicklung der Detektion von Treppenstufen zur Bewegungsplanung für mobile Roboter unter Verwendung einer LiDAR-Tiefenbildkamera. Das Projekt ist komplett Open Source.
Tätigkeiten: Entwicklung einer Methode zur geometrischen Kalibrierung der Kamera und Erstellung des entsprechenden Programms, Verwendung des Intel RealSense SDK zu Kamerasteuerung, Bild-/Punktwolkeneinzug und Projektion/Deprojektion einzelner Punkte; Implementierung der Koordinatentransformation mit Boost QVM und der weiteren Verarbeitung von 3D-Punktwolken in C++20, Segmentierung von konventionellen 2D-Bildern mit OpenCV, Visualisierung mittels OpenGL, Erstellung eines Wrappers in Python als Robot Operating System (ROS)-Komponente, Analyse eines Quirks des USB3-Controllers ASM1042 durch Debugging und Tracing des Linux-Kernels, Entwicklung eines Workarounds in Form eines Patches für den xHCI-Treiber im Kernel
Entwicklung der Konnektivitäts-Software für eine neue Gerätegeneration bei einem Medizintechnikhersteller. Das Connectivity-Modul dient dem Datenaustausch der Geräte mit der Umgebung, auch über das Internet. Der Fokus lag bei dem Projekt auf der IT-Sicherheit.
Tätigkeiten: Entwurf und Implementierung der Hauptanwendung für das Embedded System, Programmierung in C++17, Verwendung der Bibliothek Boost und der Werkzeuge GCC und CMake, Programmerstellung auf einer Workstation unter Linux Ubuntu für das Target (Toradex Colibri) unter Embedded Linux / Yocto, Konfiguration der Dienste auf dem Target mit systemd, Debuggen auf dem Target mit GDB, Konzepterstellung und Umsetzung der Serveranbindung des Gerätes über das Internet unter Beachtung der besonderen Anforderungen an die IT-Sicherheit, Implementierung des sicheren Datenaustauschs für Logfiles, Software-Updates usw. basierend auf Verschlüsselung und digitalen Signaturen, Realisierung einer gesicherten Verbindung über das Protokoll TLS mit gegenseitiger Authentifizierung unter Verwendung von X.509-Zertifikaten, Verwendung der OpenSSH- und OpenSSL-Tools sowie Anbindung der OpenSSL-Bibliothek, Absicherung des Systems mit den Programmen Fail2ban und iptables, Erstellung von entsprechenden Tests der Netzwerk-Sicherheit, Definition und Umsetzung spezieller Protokolle für die Kommunikation über serielle Ports und TCP-Sockets mittels Boost.Asio, Implementierung von Multithreading mit der C++11-Thread-Bibliothek, Erstellung eines Datenbankadapters zur Speicherung von Gerätedaten und -ereignissen in einer SQLite-Datenbank, Implementierung von State Machines und Puffern, Entwicklung von Unit-Tests mit Boost.Test, Erstellung von Modul- und Hardware-Tests sowie einer Teststeuerung mit Umgebungssimulation, Requirements- und Test-Management unter Beachtung der Medizingeräte-Software-Norm IEC 62304 mit dem Werkzeug Polarion, Erweiterung der Softwarearchitektur mit Enterprise Architect, Verwendung der Werkzeuge Eclipse (Papyrus), Doxygen, PuTTY, WinSCP; Installation des Remote Desktop Protocol Servers Xrdp unter Linux
Weiterentwicklung einer Client/Server-Anwendung bei einem Hersteller von Spektrometern. Im Mittelpunkt standen dabei SOAP-basierte Webservices und eine Web-Oberfläche, sämtlich in C++ programmiert.
Tätigkeiten: Entwicklung neuer Programmteile in C++14, Umstellung der Webservices auf gSOAP-Toolkit einschließlich Optimierung der Architektur, Erstellung einer hierarischen WSDL-Dateistruktur, Entwicklung eines Code-Generators (zusätzlich zum gSOAP-eigenen) zur Erzeugung umfangreichen Datenüberführungs-Codes, Weiterentwicklung der Web Toolkit (Wt)-basierten Web-GUI, Programmierung einer neuen Tabelle zur Darstellung von Messdaten, Umsetzung eines adaptiven Layouts mittels CSS, Umstellung der Web-GUI auf Wt4, dadurch stärkere Orientierung an den C++ Core Guidelines (Stroustrup/Sutter), Implementierung der verschlüsselten Speicherung von Passwörtern mit Hashwert und Salt, Entwicklung von Unit-Tests mit Boost.Test, Erstellung eines Konzepts für automatisierte Tests der Web-GUI mit dem Microsoft-UI-Testframework im Visual Studio Enterprise, Aufsetzen einer Testumgebung bestehend aus Microsoft IIS, ODBC-Datenquelle und SQL-Server; Konfiguration der Webservices zur verschlüsselten Übertragung über https, Erstellung selbst-signierter X.509-Zertifikate mit OpenSSL und Installation dieser im Webserver Microsoft IIS und in den Webservice-Clients, digitales Signieren von Dateien mit OpenSSL und Microsoft Authenticode, Code-Analyse und Debugging (auch der Spektroskopiesoftware), Fehlersuche und -behebung, Projekt- und Versionsverwaltung mit Microsoft TFS
Entwicklung von Unit-Tests für Steuerungssoftware bei einem führenden Hersteller von Antriebstechnik
Tätigkeiten: Programmierung von Unit-Tests einschließlich dazu benötigter Mock-Objekte in C++ auf den Plattformen Windows, Windows CE und Green Hills Integrity; Verwendung des Google C++ Testing- und Mocking-Frameworks (Google Test / Google Mock); Erstellung flexibel verwendbarer Tester-Klassen als gemeinsame Basis für die Tests verschiedener Softwarekomponenten und für eine große Anzahl unterschiedlicher Testszenarien; Nachbildung der Umgebung für jeweils ein isoliertes Testobjekt; Erstellung von Mock-Objekten u. a. für die Dateizugriffs- und Socket-Schnittstellen; Prüfung des Verhaltens, des Outputs und der Thread-Sicherheit von Softwarekomponenten; Realisierung der Thread-Sicherheit des oben genannten Testframeworks und der Bibliothek STLport unter Windows und Integrity durch Implementieren der Synchronisierungsmechanismen (Synchronization Primitives), plattformunabhängig mittels Platform Abstraction Layer (PAL); Black-Box- und White-Box-Tests, Codeanalyse, Code-Review, Verwendung des Visual Studio Team Foundation Server 2012
Mitarbeit an der Neuentwicklung von Steuer- und Auswertesoftware für Prüfstände in der Automotive Industrie. In diesem Projekt kamen verstärkt Open Source-Software und moderne Programmiertechniken zum Einsatz. Außerdem stand eine hochentwickelte Infrastruktur zur Verfügung.
Tätigkeiten: Programmierung in C++ mit den Compilern MinGW und GCC sowie dem Buildsystem CMake, Entwicklung eines Messdatenkonverters mit grafischer Oberfläche unter Verwendung des Frameworks Qt 5 und seiner Model/View-Architektur, Erstellung eines Tools zur grafischen Darstellung von Messwertekurven unter Einsatz des Model View ViewModel (MVVM)-Musters, Entwurf und Implementierung von Klassen zum Lesen und Schreiben von Hierarchical Data Format (HDF5)-Dateien sowie eines Iterators für den Messdatenzugriff, der das Strategy-Muster nutzt; Template-Metaprogrammierung mit Typlisten zur Verarbeitung verschiedener Messwerte-Datentypen, Verwendung der Xerces-C++-Bibliothek zum Parsen und Manipulieren von Ressourcen-XML-Dateien, Entwurf einer GUI-Softwarearchitektur, die sich an einem Schichtenmodell orientiert; Implementierung einfacher und zusammengesetzter Widgets, basierend auf dem Modul Qt Widgets, zum Beispiel einer numerischen Anzeige von Signalwerten mit Editiermöglichkeit und Konfiguration per Drag & Drop; Umsetzung von extern erstellten GUI-Designvorgaben, Erstellung von Unit Tests unter Windows 7 und Linux, basierend auf den Frameworks CppUnit und Qt Test; Nutzung des Continuous Integration-Systems Jenkins zum automatisierten Bauen und Testen, Versionsverwaltung mit Subversion (SVN), Verwendung weiterer Werkzeuge wie Qt Creator, Eclipse, Sparx Enterprise Architect und Doxygen
ab 2013
(siehe oben)
05/2012 ? 10/2012 Infotainmentsystem
Softwareanalyse und -fehlerbehebung im Bereich Informations-, Kommunikations- und Entertainment-Systeme bei einem Premium-Automotive-Zulieferer. Die Systeme integrieren neben Navigation und Telefon auch multimediale Unterhaltung und ermöglichen die Anbindung externer Geräte und Speichermedien.
Tätigkeiten: Voranalyse von Tickets einschließlich zugehöriger Fehler-Traces, Kommunizieren von Fehlerursachen und Zuständigkeiten, Identifizierung der betroffen Komponenten, Layer oder Subsysteme (z. B. Cinemo, MoCCA Framework, MOST); Weiterleitung der Tickets an die verantwortlichen Entwickler, Abteilungen und ausgelagerten Teams (zum Teil im Ausland: Ukraine, Indien, China), Koordinieren von Change Requests, Stacktrace-Analyse, C++-Codeanalyse und Implementieren von Bugfixes im Bereich Medien-Erkennung und -Wiedergabe, Einrichtung eines Testsystems (unter QNX), Erstellen und Testen neuer Softwarestände
03/2012 ? 05/2012 WMV-Konverter
Entwicklung einer Software zur Konvertierung von Windows Media-Audio-/Videodateien
Tätigkeiten: Erstellung von Funktionen zum Lesen und Schreiben von Advanced Systems Format (ASF)-Dateien, DLL-Injection mittels Remote-Thread, API-Hooking durch Überschreiben von Code, Thread-Synchronisation mittels Mutex und Event/Wait-Funkionen
Mitarbeit an der Weiterentwicklung der Gerätesoftware für einen bekannten Hersteller von mobilen Navigationssystemen unter Windows CE 5 und 6
Als Softwarearchitekt und Entwickler bin ich mit dem gesamten Prozess der Softwareentwicklung vertraut. Durch Einsatz effektiver Methoden und leistungsfähiger Werkzeuge sowie moderner Design- und Programmiertechniken erhalten Sie qualitativ hochwertige Software.
IoT-Sicherheit:
Beurteilung der Sicherheits-Schwachstellen eingebetteter Systeme in einem Netzwerk
Erstellung von optimal angepassten Sicherheitskonzepten
Abfrage von Common Vulnerabilities and Exposures (CVE) von öffentlichen Datenbanken, Analyse und Bewertung der CVEs
Erstellung von Sicherheitsupdates für Embedded Linux-Systeme
Erweiterung bestehender Gerätesoftware um Sicherheitsfunktionen wie TLS-Verschlüsselung des E-Mail-Versands oder Login-Delay
Portierung der Open Portable Trusted Execution Environment (OP-TEE) auf neue Geräte und Testen der Sicherheit von OP-TEE-Installationen
Implementierung der Prüfung digitaler Signaturen mittels OpenSSL zur Wahrung der Integrität eines Systems
Verschlüsselte Datenübertragung über das Protokoll MQTT mit TLS sowie mit den OpenSSH-Tools ssh und scp zum Schutz der Vertraulichkeit übertragener Informationen
Implementierung gesicherter Verbindungen über das Protokoll TLS mit gegenseitiger Authentifizierung unter Verwendung von X.509-Zertifikaten
Erstellung von TLS-Clients als Trusted Application
Gewährleistung der Verfügbarkeit eines Systems durch Abwehr von Denial of Service (DoS)-Angriffen, indem die IP-Adressen der Angreifer erkannt und blockiert werden; mögliche Realisierung mit dem Programm Fail2ban bzw. geeigneten Scripten zur Steuerung der Linux-Firewall (iptables, ipset)
Erhöhung der Sicherheit durch Kontrolle und Minimierung der offenen Ports sowie Einstellung unüblicher Portnummern
Test weiterer Sicherheitsfunktionen eines Systems einschließlich Analyse des Netzwerkverkehrs mit den Werkzeugen Wireshark und tcpdump sowie Entwicklung von entsprechenden automatisierten Tests
Durchführung von Penetrationstests
Softwareengineering:
Anforderungsanalyse, Softwaredesign und Implementierung in C++ und verwandten Programmiersprachen
Modellieren von Softwarearchitekturen mit UML-Werkzeugen (sowohl freie als auch proprietäre)
Anwendung von Entwurfsmustern (Design Patterns) mithilfe passender Programmiertechniken wie objektorientierte, generische oder funktionale Programmierung
Modernes C++-Design unter Verwendung der C++-Bibliotheken Loki und Boost
Flexible Entwürfe mit Policy-basiertem Klassendesign
Template-Metaprogrammierung mit Typlisten, zum Beispiel zur Erzeugung gestreuter oder linearer Vererbungshierarchien
Verwendung generischer Komponenten, wie generalisierte Funktoren zur Anwendung des Command-Musters, abstrakte Fabrik (Abstract Factory-Muster) oder Small-Object-Allokator
Berücksichtigung der Features der neuen Standards C++11 bis 20, zum Beispiel Typinferenz und Lambda-Funktionen, um die Produktivität beim Programmieren zu steigern
Einsatz weiterer C++11-Neuerungen, wie Rvalue-Referenzen und der dadurch ermöglichten Move-Semantik, Variadic Templates, sowie der integrierten Unicode-Unterstützung
Nutzung der neuen C++11-Multithreading-Funktionalität und der Standardbibliotheks-Erweiterungen für reguläre Ausdrücke, Type Traits, Smart Pointer sowie die neuen Container Tupel und Array
Verwendung der C++17-Features String-Sicht, optionaler Wert und Variante, sowie der Dateisystem-Bibliothek und der parallelen Algorithmen der Standardbibliothek
Konfiguration und Nutzung komplexer Continuous Integration-Systeme zur Software-Qualitätssicherung
Entwurf, Erstellung und Wartung automatisierter Modultests mithilfe geeigneter Test-Frameworks
Bauen des Linux-Kernels zum Debuggen und Patchen
Erstellen des Kernels und Root-FS für Embedded-Systeme mit Yocto und Buildroot
Verwendung von Werkzeugen zur Versionsverwaltung und zur Erzeugung der Softwaredokumentation aus Sourcecode-Kommentaren, Erstellung von Spezifikationen zu Schnittstellen und Datenformaten sowie von Anwenderdokumentation
Technische Anwendungen:
Entwicklung von PC-basierten Anwendungen der Mess-, Steuer- und Regelungstechnik
Software für die berührungslose Koordinatenmesstechnik
Ansteuerung von Sensoren; Aufzeichnung, Auswertung und Visualisierung von Messwerten
Kalibrierung, Fehlerrechnung, Nachweis der Messgerätefähigkeit
Programmierung von mehrachsigen Bahnsteuerungen (Motion Control)
Bildaufnahme und Steuerung digitaler Videokameras (USB, IEEE 1394 / FireWire) mit DirectShow
Bildverarbeitung: Segmentierung, Klassifizierung, Muster- und Bewegungserkennung; zum Teil auf der Open Source Computer Vision Library (OpenCV) basierend
Audio- und Videosignalcodierung (MP3, AAC, JPEG, MPEG, H.264), Implementierung von Bild- und Videokompressionsverfahren (Transformation, Quantisierung, Codierung), zum Teil optimiert für Mobilgeräte
Signalverarbeitung mit den Intel Integrated Performance Primitives (IPP): effiziente Arithmetik, digitale Filter, Short-Time Fourier-Transformation, Spektralanalyse, Farbkonvertierung, Schwellwertoperationen, FFT, DCT, Statistik, geometrische Transformationen, Wavelet-Operationen
Anwendungen und Grundlagen im Bereich Machine Vision, zum Beispiel normalisierte 2D-Grauwertkorrelation
Erarbeitung von Grundlagen zum Einsatz von LiDAR-Kameras: geometrische Kalibrierung, Transformation und Verarbeitung von 3D-Punktwolken, Identifikation und Vermessung von Objekten
Verwendung des Robot Operating System (ROS) sowie Erstellung neuer ROS-Komponenten
Erweitern und Patchen von Digital Living Network Alliance (DLNA)-Servern
Kommunikation über Bluetooth Low Energy (BLE) mittels Tiny Bluetooth LE Library (TinyB) bzw. Android-Bluetooth-Stack
Analyse von Hardware-Quirks, zum Beispiel in einem USB3-Controller, durch Debuggen des Linux-Kernels mittels Kernel-Debugger KGDB, Dynamic-Debug und Event-Tracing
Entwicklung von Workarounds in Form von Patches, zum Beispiel für den xHCI-Treiber im Kernel
Ich bin sowohl an der Übernahme von Teilaufgaben innerhalb größerer Projekte als auch an der Abwicklung kompletter Projekte, einschließlich Beratung und Support interessiert.
IoT Security Consultant
Software engineer with focus on embedded systems and network security
If you are developing devices that are to be connected to the Internet, I support you in securing the connection. I create vulnerability assessments and security concepts tailored to your needs. Appropriate security tests are an important part of this. I develop automated tests of the security features of a system and carry out penetration tests.
About me
During numerous projects in a wide variety of industries, I gained extensive experience as a software architect and developer. Most recently, I specialized in the security of networked devices. I implemented the Internet connection of medical devices and developed corresponding security tests.
Current open-source projects: https://github.com/peter-nebe
Direktester geht's nicht! Ganz einfach Freelancer finden und direkt Kontakt aufnehmen.
"Der Consultant verfügt über umfassende Kenntnisse in der Programmierung mit C# und dem .NET Compact Framework. So konnte er ohne nennenswerte Einarbeitungszeit mehrere Entwurfsvarianten erarbeiten. Durch die präzise Umsetzung unter Beachtung der Design-Richtlinien sowie vollständige Dokumentation erfüllte er die hohen Qualitätsanforderungen in diesem Projekt. Die von ihm entwickelten Komponenten bilden eine wichtige und zuverlässige Grundlage für das System. Wir sind mit seiner engagierten und kooperativen Mitarbeit sehr zufrieden und würden uns über weitere Projekte mit ihm freuen."
— Projekt C# Programmierung Mobile Client, 04/05 - 05/05
Referenz durch Leiter der Entwicklung Systemhaus (70 MA), vom 20.05.05