SCW アイコン
ヒーロー背景(区切りなし)
ブログ

Entwicklung eingebetteter Geräte und eingebetteter Systeme — ein Überblick

安全なコード戦士
2021年8月11日 発行
最終更新日: 2026年3月9日

Bei Secure Code Warrior sind wir stets bemüht, unseren Schulungsbereich zu erweitern. Um Embedded-Entwickler und Sicherheitsmanager in die Lage zu versetzen, sichere eingebettete Systeme zu entwickeln, nutzen wir die Welt der Sicherheit eingebetteter Systeme. In diesem Beitrag werden wir die wichtigsten Dinge vorstellen, die Entwickler und Architekten über den Aufbau sicherer eingebetteter Systeme wissen sollten.

Ein eingebettetes Gerät ist eine unabhängige Recheneinheit mit eigener mikroprozessorbasierter Hard- und Software. Sie werden in der Regel verwendet, um dedizierte Funktionen auszuführen, entweder unabhängig voneinander oder als Teil größerer Systeme.

Was ist ein eingebettetes Gerät und System?

Eingebettete Geräte sind speziell entwickelte Computersysteme mit minimalistischer Hard- und Software, die so programmiert sind, dass sie bestimmte Funktionen ausführen. Je nach Verwendungszweck kann die Komplexität eingebetteter Geräte variieren.

Wenn ein eingebettetes System komplizierte, ressourcenintensive Operationen ausführen muss, kann seine Hardware aus mehreren Prozessoren mit verschiedenen miteinander verbundenen Peripheriegeräten bestehen. Wenn es jedoch für eine einfache Aufgabe konzipiert ist, enthält es möglicherweise nur einen einzigen Mikrocontroller.

Einige eingebettete Systeme sind Blackboxen ohne Benutzeroberfläche, während andere über detaillierte, grafische Benutzeroberflächen verfügen können.

Beispiele für eingebettete Geräte

Embedded-Geräte finden in zahlreichen Branchen Anwendung, von der Luft- und Raumfahrt bis zur Computertechnik und von Haushaltsgeräten bis hin zum Gesundheitswesen. Hier sind ein paar Beispiele:

  • Ein Thermostat in einer Klimaanlage.
  • Ein Fitness-Tracker mit kleinen elektrischen Komponenten, auf denen ein winziges Betriebssystem läuft, der nichts weiter kann, als deine Gesundheitsdaten aufzuzeichnen und zu synchronisieren.
  • Digitale Klimaanlagen.
  • Navigationssysteme in einem Flugzeug.
  • Digitaluhren.
  • GPS-Geräte.
  • Wi-Fi-Komponenten in Mikrowellenherden und anderer Unterhaltungselektronik.
  • Blutdruck- und Herzschlagmessgeräte.
  • Netzwerkkomponente in einem MRT-Gerät, das Daten an die Cloud sendet.

Ist ein Laptop ein eingebettetes Gerät?

Kurze Antwort: Nein. Lange Antwort:

Per Definition kapselt ein eingebettetes Gerät die gesamte Software und Hardware, die es zur Ausführung seiner Funktionen benötigt. Ein Laptop fasst in der Tat verschiedene Hardwarekomponenten in einem Metallgehäuse und umfasst die gesamte Software, die es benötigt, um seinen Funktionsumfang bereitzustellen.

Im Gegensatz zu typischen eingebetteten Systemen, die über einen vordefinierten, minimalen Funktionsumfang verfügen, ist ein Laptop jedoch eher für allgemeine Zwecke geeignet und kann für eine Vielzahl von Aktivitäten verwendet werden.

Eingebettete Geräte im Internet der Dinge

Eingebettete Systeme sind das Herzstück des IoT. Ihr intelligenter Kühlschrank kann dank eines eingebetteten Geräts über Ihr Mobilgerät gesteuert werden. Es ist ein in Ihr Sicherheitssystem integriertes Gerät, mit dem Sie CCTV-Aufnahmen aus tausend Meilen Entfernung ansehen können. Und wenn Sie einen Knopf drücken, um Ihr Auto hinter den Kulissen auf Autopilot zu schalten, ist es ein integriertes Gerät, das die ganze Magie ausübt.

Lebenszyklus der Entwicklung eingebetteter Software

Die folgenden Schritte gehören zum typischen Softwareentwicklungszyklus eines eingebetteten Geräts:

Schritt 1: Zweck und Anforderungen

Ein eingebettetes Gerät verfügt über einen bestimmten und präzisen Funktionsumfang. Aus diesem Grund ist es sehr wichtig, den Zweck und die Anforderungen explizit anzugeben, bevor mit der Entwicklung begonnen wird. Es wird empfohlen, ein detailliertes Entwurfsdokument für das System zu erstellen. Beantworten Sie Fragen wie:

  • Welche Funktionen erfüllt das Gerät?
  • Wird es Teil einer anderen Maschine sein oder wird es eigenständig funktionieren?
  • Sollte das Gerät eine Benutzeroberfläche haben? Falls ja, reicht eine Befehlszeile aus oder wird eine grafische Benutzeroberfläche benötigt?
  • Welche Größen-, Kosten- oder Stromverbrauchsgrenzen muss das Gerät einhalten?
  • Gibt es Leistungsbenchmarks? Wird z. B. erwartet, dass das Gerät in Echtzeit oder innerhalb bestimmter Schwellenwerte reagiert?

Schritt 2: Systemarchitektur

Sobald wir die individuellen Systemanforderungen identifiziert haben, sind wir bereit, die Systemarchitektur zu entwerfen. Beantworten Sie Fragen wie:

  • Welche Hardwarekomponenten werden für die Entwicklung des Geräts benötigt? Dazu gehört die Identifizierung der Schaltkreise, Prozessorchips und Mikrocontroller sowie aller erforderlichen internen und externen Peripheriegeräte.
  • Wie viel Strom benötigen die Komponenten?
  • Wird das Gerät mit dem Internet verbunden sein?
  • Welche Schnittstellen müssen hinzugefügt/entwickelt werden, damit das Gerät eine Verbindung zu anderen Geräten oder der größeren Maschine herstellen kann?
  • Wie werden Sie Verschlüsselung implementieren? (Denken Sie an Algorithmen, Schlüsselspeicher usw.)
  • Wie werden Sie potenzielle Sicherheitslücken, Exploits und Malware erkennen und vermeiden?

Schritt 3: Wählen Sie das Betriebssystem

Die Wahl des Betriebssystems bestimmt oft die Effizienz Ihrer eingebetteten Anwendungen. Wählen Sie also mit Bedacht. Windows für IoT schneidet zwar bei der Grafik gut ab, es mangelt jedoch an Hardwareunterstützung. Embedded Linux und Android sind kostenlos, wohingegen für VxWorks und Windows for IoT Lizenzkosten anfallen.

Bei Open-Source-Systemen wie Linux und Android haben Ihre Entwickler mehr Kontrolle über den Kernel. Bei proprietären Systemen ist der Standardfunktionsumfang des Kernels jedoch alles, womit Sie arbeiten können.

Es ist auch wichtig, bei der Auswahl eines Betriebssystems die Auswirkungen auf die Sicherheit zu berücksichtigen. Werden Sicherheitspatches schnell veröffentlicht, falls Sicherheitslücken entdeckt werden? Gibt es einen eingebauten Schutz vor den häufigsten Cybersicherheitsangriffen?

Schritt 4: Die Entwicklungstools

Verschiedene Programmiersprachen und Frameworks haben verschiedene Vor- und Nachteile. Abhängig von Ihren Funktions-, Geschwindigkeits- und Zuverlässigkeitsanforderungen können Sie eine Sprache/ein Framework der anderen vorziehen.

Wenn Ihre Anwendung webbasiert ist und Sie eine hohe Leistung wünschen, entscheiden Sie sich für Java.
Wenn Sie jedoch den schnellsten Durchsatz wünschen, entscheiden Sie sich für C/C++. Wenn Sie die beste Unterstützung für Bibliotheken von Drittanbietern wünschen, entscheiden Sie sich für Python.

Schritt 5: Codieren, Refaktorieren, testen, noch mehr programmieren

Sobald Sie sich für die Entwicklungsplattform entschieden haben, können Sie mit dem Programmieren beginnen. Denken Sie daran, dass eingebettete Systeme empfindliche Geräte mit begrenzten Hardware- und Softwareressourcen sind. Es ist daher von entscheidender Bedeutung, die besten Praktiken in Bezug auf Anwendungssicherheit und Leistung zu berücksichtigen.

Code-Reviews helfen bei der Optimierung des Codes und der Identifizierung potenzieller Fehler. Sie müssen auch so gründlich wie möglich testen. Stellen Sie sicher, dass Sie eine vollständige Liste aller Testfälle zusammenstellen, auf die das Gerät bei der Verwendung in der Produktion stoßen kann.

Schritt 6: Wartung und Support

Wie bei jeder anderen Anwendung/Gerät endet der Lebenszyklus nicht, wenn das eingebettete Gerät versendet und installiert wurde. Wenn das Gerät in der Produktion eingesetzt wird, werden neue Anwendungsfälle identifiziert, für die neue Funktionen hinzugefügt werden müssen. Für alle gemeldeten Fehler müssen möglicherweise auch neue Firmware-Updates veröffentlicht werden.

Die besten eingebetteten Programmiersprachen

Es gibt viele seriöse Organisationen wie IEEE und TIOBE, die Programmiersprachen nach Beliebtheit und Verwendung einstufen. Unabhängig davon, ob Sie das überprüfen TIOBE-Index, oder die IEEE-Spektrum, Sie werden ein gemeinsames Thema bemerken.

Die drei wichtigsten Sprachen sind immer C, Python und Java. Der TIOBE-Index für Juli 2021 rangiert C auf #1, Java auf #2 und Python auf #3. Laut dem Ranking von IEEE Spectrum für eingebettete Programmiersprachen lautet die Reihenfolge: Python, Java und dann C.

Wie unterscheidet sich in Java, C oder Python geschriebene Firmware?

Verschiedene Sprachen verwalten Speicher, Interaktionen mit dem Betriebssystem und Laufzeit auf unterschiedliche Weise. Beispielsweise werden Java-Anwendungen in einer speziellen Laufzeitumgebung ausgeführt, die als Java Virtual Machine oder JVM bekannt ist.

Die Speicherverwaltung in C/C++ erfolgt manuell, in Java oder Python müssen Sie sich jedoch nicht selbst um die Speicherverwaltung kümmern; die Sprache erledigt das für Sie. Außerdem müssen Sie in C Ihren Müll selbst einsammeln; d. h. wenn Sie dynamisch ein Stück Speicher zuweisen, müssen Sie es explizit selbst freigeben. Wenn Sie das nicht tun, führt das zu einem Speicherleck. In Java oder Python erfolgt die Garbage-Collection automatisch. C ist jedoch von Natur aus viel schneller als Java oder Python.

Eine Sache, die C und Java (aber insbesondere C) im Vergleich zu Python fehlt, ist die Verfügbarkeit von Bibliotheken von Drittanbietern. Python verfügt über eine umfangreichere Datenbank mit Bibliotheken, was es Entwicklern erheblich erleichtert, bestimmte Funktionen hinzuzufügen.

Wählen Sie insgesamt C, wenn:

  • Sie möchten eine Low-Level-Schnittstelle mit dem Betriebssystem und der Hardware.
  • Sie wollen die bestmögliche Leistung.
  • Ihre Entwickler kennen sich mit C/C++ aus.
  • Sie benötigen nicht zu viel externe/Drittanbieter-Support.

Verwenden Sie Python, wenn:

  • Sie möchten Data-Science- oder Machine-Learning-Algorithmen implementieren.
  • Sie möchten umfangreiche Bibliotheksunterstützung von Drittanbietern.
  • Sie sind damit einverstanden, Geschwindigkeit gegen Benutzerfreundlichkeit einzutauschen.
  • Sie haben nur begrenzte Erfahrung in der Embedded-Entwicklung.
  • Sie benötigen keine Low-Level-Schnittstelle zum Betriebssystem oder zur Hardware.

Verwenden Sie Java, wenn:

  • Sie erstellen Webanwendungen.
  • Sie möchten eine einfachere Entwicklung als C, aber immer noch mehr Leistung als Python.
  • Sie benötigen nicht zu viel externe/Drittanbieter-Support.

Wird C langsam aufhören, die erste Wahl für Embedded-Entwicklung zu sein?

Hochsprachen erleichtern das Programmieren, indem sie die Komplexität abstrahieren, die in C einfach nicht vermieden werden kann. Trotz der Veröffentlichung ausgefallenerer Sprachen und Frameworks ist C jedoch jahrzehntelang die erste Wahl in der Embedded-Entwicklung geblieben.

Dies liegt daran, dass die Geschwindigkeit, Leistung und Zuverlässigkeit, die es bietet, immer noch beispiellos sind. Die Tatsache, dass Python und große Teile des Java-Ökosystems (einschließlich Runtime, Sprache und Compiler) in C geschrieben sind, spricht Bände über die Effizienz und Beständigkeit der Sprache.

Vor diesem Hintergrund ist C für neue Entwickler, die die Einfachheit von Sprachen wie Python bevorzugen, zweifellos schwieriger zu erlernen. Dies führt zu einem spürbaren Rückgang der Größe der C-Entwickler-Community. Der Anstieg der Entwicklung von KI- und ML-Anwendungen veranlasst die Menschen auch dazu, Python gegenüber C zu wählen, einfach weil es eine bessere Bibliotheksunterstützung bietet.

Es ist wichtig, sich daran zu erinnern, dass Python erst seit Kurzem Teil der Die beste eingebettete Programmiersprache Debatte. Ja, die Akzeptanz könnte in den kommenden Jahren weiter zunehmen, aber wir erwarten nicht, dass C jemals aufhören wird, die erste Wahl für die Embedded-Entwicklung zu sein.

Warum sichere Codierung in C/C++ wichtig ist

Beim Schreiben von Code in C/C++ kann viel schief gehen. Der Zugriff auf eine Speicheradresse, die nicht mehr auf gültige Daten verweist, oder die falsche gemeinsame Nutzung von Daten zwischen Threads kann zum Absturz Ihrer gesamten Anwendung führen.

Bei eingebetteten Geräten sind diese Auswirkungen weitaus schwerwiegender, da ein Absturz in ihnen dazu führen kann, dass eine viel größere Maschine nicht mehr funktioniert. Wenn beispielsweise das Autopilotmodul in einem Auto abgeschaltet wird, kann das Auto Hindernissen nicht mehr ausweichen.

Hier sind weitere Gründe, warum die sichere Codierung von C/C++-Anwendungen so wichtig ist:

  • Unsichere Speicherverwaltung (Nullzeiger, Speicherbeschädigung, Stacküberläufe, Puffer- und Heap-Überläufe) führt zum Absturz der gesamten Anwendung.
  • Zeiger sind ein wesentlicher Bestandteil von C und C++. Der Umgang mit ihnen erfordert äußerste Sorgfalt und eine gründliche Kenntnis der zugrunde liegenden Konzepte.
  • Die Müllabfuhr erfolgt manuell. Dies macht es für Programmierer zwingend erforderlich, jeden dynamisch zugewiesenen Speicher explizit zu löschen. Unfreier oder falsch freigegebener Speicher kann zu Speicherlecks oder Beschädigung führen.
  • Es fehlt an standardisierten APIs für fortgeschrittene Datenstrukturen (z. B. Hash-Tabellen, Sets usw.), was die Entwickler zwingt, das Rad neu zu erfinden.

Es ist absolut wichtig, dass Entwickler in der sicheren Codierung von C/C++-Anwendungen geschult werden. Secure Code Warrior bietet eine personalisierte Lernplattform mit interaktiven Herausforderungen, Kursen und Prüfungen, die es Entwicklern ermöglichen, sicheren C/C++-Code zu schreiben. Hier geht es um sprache:framework-spezifische Inhalte, nicht nur um eine Änderung der allgemeinen konzeptionellen Schulung.

Auschecken wie wir der Automobil- und Transportindustrie helfen. Oder versuche eine Herausforderung beim Embed-Focus-Codieren heute, um zu erleben, wie wir Entwickler befähigen, sichere eingebettete Anwendungen zu schreiben!

リソースを表示
リソースを表示

In diesem Beitrag erhalten Sie einen Überblick über die Entwicklung eingebetteter Geräte und eingebetteter Systeme.

もっと知りたいですか?

Secure Code Warrior macht sicheres Programmieren zu einer positiven und ansprechenden Erfahrung für Entwickler, die ihre Fähigkeiten erweitern. Wir begleiten jeden Programmierer auf seinem eigenen bevorzugten Lernweg, sodass sicherheitserfahrene Entwickler zu den alltäglichen Superhelden unserer vernetzten Welt werden.

もっと詳しく

Secure Code Warrior 、ソフトウェア開発サイクル全体を通じてコードの安全性を確保し、サイバーセキュリティを最優先とする文化を構築するため、貴社をSecure Code Warrior 。アプリセキュリティ管理者、開発者、CISO、あるいはセキュリティに関わるあらゆる立場の方々に対し、当社が貴社のビジネスにおける不安全なコードに関連するリスクの低減を支援します。

デモを予約する
共有する:
リンクトインのブランドソーシャルx ロゴ
著者
安全なコード戦士
2021年8月11日発行

Secure Code Warrior macht sicheres Programmieren zu einer positiven und ansprechenden Erfahrung für Entwickler, die ihre Fähigkeiten erweitern. Wir begleiten jeden Programmierer auf seinem eigenen bevorzugten Lernweg, sodass sicherheitserfahrene Entwickler zu den alltäglichen Superhelden unserer vernetzten Welt werden.

Dieser Artikel wurde vom Branchenexpertenteam von Secure Code Warrior verfasst, das sich zum Ziel gesetzt hat, Entwicklern von Anfang an das Wissen und die Fähigkeiten zu vermitteln, um sichere Software zu entwickeln. Wir stützen uns auf fundiertes Fachwissen in Bezug auf sichere Codierungspraktiken, Branchentrends und Erkenntnisse aus der Praxis.

共有する:
リンクトインのブランドソーシャルx ロゴ

Bei Secure Code Warrior sind wir stets bemüht, unseren Schulungsbereich zu erweitern. Um Embedded-Entwickler und Sicherheitsmanager in die Lage zu versetzen, sichere eingebettete Systeme zu entwickeln, nutzen wir die Welt der Sicherheit eingebetteter Systeme. In diesem Beitrag werden wir die wichtigsten Dinge vorstellen, die Entwickler und Architekten über den Aufbau sicherer eingebetteter Systeme wissen sollten.

Ein eingebettetes Gerät ist eine unabhängige Recheneinheit mit eigener mikroprozessorbasierter Hard- und Software. Sie werden in der Regel verwendet, um dedizierte Funktionen auszuführen, entweder unabhängig voneinander oder als Teil größerer Systeme.

Was ist ein eingebettetes Gerät und System?

Eingebettete Geräte sind speziell entwickelte Computersysteme mit minimalistischer Hard- und Software, die so programmiert sind, dass sie bestimmte Funktionen ausführen. Je nach Verwendungszweck kann die Komplexität eingebetteter Geräte variieren.

Wenn ein eingebettetes System komplizierte, ressourcenintensive Operationen ausführen muss, kann seine Hardware aus mehreren Prozessoren mit verschiedenen miteinander verbundenen Peripheriegeräten bestehen. Wenn es jedoch für eine einfache Aufgabe konzipiert ist, enthält es möglicherweise nur einen einzigen Mikrocontroller.

Einige eingebettete Systeme sind Blackboxen ohne Benutzeroberfläche, während andere über detaillierte, grafische Benutzeroberflächen verfügen können.

Beispiele für eingebettete Geräte

Embedded-Geräte finden in zahlreichen Branchen Anwendung, von der Luft- und Raumfahrt bis zur Computertechnik und von Haushaltsgeräten bis hin zum Gesundheitswesen. Hier sind ein paar Beispiele:

  • Ein Thermostat in einer Klimaanlage.
  • Ein Fitness-Tracker mit kleinen elektrischen Komponenten, auf denen ein winziges Betriebssystem läuft, der nichts weiter kann, als deine Gesundheitsdaten aufzuzeichnen und zu synchronisieren.
  • Digitale Klimaanlagen.
  • Navigationssysteme in einem Flugzeug.
  • Digitaluhren.
  • GPS-Geräte.
  • Wi-Fi-Komponenten in Mikrowellenherden und anderer Unterhaltungselektronik.
  • Blutdruck- und Herzschlagmessgeräte.
  • Netzwerkkomponente in einem MRT-Gerät, das Daten an die Cloud sendet.

Ist ein Laptop ein eingebettetes Gerät?

Kurze Antwort: Nein. Lange Antwort:

Per Definition kapselt ein eingebettetes Gerät die gesamte Software und Hardware, die es zur Ausführung seiner Funktionen benötigt. Ein Laptop fasst in der Tat verschiedene Hardwarekomponenten in einem Metallgehäuse und umfasst die gesamte Software, die es benötigt, um seinen Funktionsumfang bereitzustellen.

Im Gegensatz zu typischen eingebetteten Systemen, die über einen vordefinierten, minimalen Funktionsumfang verfügen, ist ein Laptop jedoch eher für allgemeine Zwecke geeignet und kann für eine Vielzahl von Aktivitäten verwendet werden.

Eingebettete Geräte im Internet der Dinge

Eingebettete Systeme sind das Herzstück des IoT. Ihr intelligenter Kühlschrank kann dank eines eingebetteten Geräts über Ihr Mobilgerät gesteuert werden. Es ist ein in Ihr Sicherheitssystem integriertes Gerät, mit dem Sie CCTV-Aufnahmen aus tausend Meilen Entfernung ansehen können. Und wenn Sie einen Knopf drücken, um Ihr Auto hinter den Kulissen auf Autopilot zu schalten, ist es ein integriertes Gerät, das die ganze Magie ausübt.

Lebenszyklus der Entwicklung eingebetteter Software

Die folgenden Schritte gehören zum typischen Softwareentwicklungszyklus eines eingebetteten Geräts:

Schritt 1: Zweck und Anforderungen

Ein eingebettetes Gerät verfügt über einen bestimmten und präzisen Funktionsumfang. Aus diesem Grund ist es sehr wichtig, den Zweck und die Anforderungen explizit anzugeben, bevor mit der Entwicklung begonnen wird. Es wird empfohlen, ein detailliertes Entwurfsdokument für das System zu erstellen. Beantworten Sie Fragen wie:

  • Welche Funktionen erfüllt das Gerät?
  • Wird es Teil einer anderen Maschine sein oder wird es eigenständig funktionieren?
  • Sollte das Gerät eine Benutzeroberfläche haben? Falls ja, reicht eine Befehlszeile aus oder wird eine grafische Benutzeroberfläche benötigt?
  • Welche Größen-, Kosten- oder Stromverbrauchsgrenzen muss das Gerät einhalten?
  • Gibt es Leistungsbenchmarks? Wird z. B. erwartet, dass das Gerät in Echtzeit oder innerhalb bestimmter Schwellenwerte reagiert?

Schritt 2: Systemarchitektur

Sobald wir die individuellen Systemanforderungen identifiziert haben, sind wir bereit, die Systemarchitektur zu entwerfen. Beantworten Sie Fragen wie:

  • Welche Hardwarekomponenten werden für die Entwicklung des Geräts benötigt? Dazu gehört die Identifizierung der Schaltkreise, Prozessorchips und Mikrocontroller sowie aller erforderlichen internen und externen Peripheriegeräte.
  • Wie viel Strom benötigen die Komponenten?
  • Wird das Gerät mit dem Internet verbunden sein?
  • Welche Schnittstellen müssen hinzugefügt/entwickelt werden, damit das Gerät eine Verbindung zu anderen Geräten oder der größeren Maschine herstellen kann?
  • Wie werden Sie Verschlüsselung implementieren? (Denken Sie an Algorithmen, Schlüsselspeicher usw.)
  • Wie werden Sie potenzielle Sicherheitslücken, Exploits und Malware erkennen und vermeiden?

Schritt 3: Wählen Sie das Betriebssystem

Die Wahl des Betriebssystems bestimmt oft die Effizienz Ihrer eingebetteten Anwendungen. Wählen Sie also mit Bedacht. Windows für IoT schneidet zwar bei der Grafik gut ab, es mangelt jedoch an Hardwareunterstützung. Embedded Linux und Android sind kostenlos, wohingegen für VxWorks und Windows for IoT Lizenzkosten anfallen.

Bei Open-Source-Systemen wie Linux und Android haben Ihre Entwickler mehr Kontrolle über den Kernel. Bei proprietären Systemen ist der Standardfunktionsumfang des Kernels jedoch alles, womit Sie arbeiten können.

Es ist auch wichtig, bei der Auswahl eines Betriebssystems die Auswirkungen auf die Sicherheit zu berücksichtigen. Werden Sicherheitspatches schnell veröffentlicht, falls Sicherheitslücken entdeckt werden? Gibt es einen eingebauten Schutz vor den häufigsten Cybersicherheitsangriffen?

Schritt 4: Die Entwicklungstools

Verschiedene Programmiersprachen und Frameworks haben verschiedene Vor- und Nachteile. Abhängig von Ihren Funktions-, Geschwindigkeits- und Zuverlässigkeitsanforderungen können Sie eine Sprache/ein Framework der anderen vorziehen.

Wenn Ihre Anwendung webbasiert ist und Sie eine hohe Leistung wünschen, entscheiden Sie sich für Java.
Wenn Sie jedoch den schnellsten Durchsatz wünschen, entscheiden Sie sich für C/C++. Wenn Sie die beste Unterstützung für Bibliotheken von Drittanbietern wünschen, entscheiden Sie sich für Python.

Schritt 5: Codieren, Refaktorieren, testen, noch mehr programmieren

Sobald Sie sich für die Entwicklungsplattform entschieden haben, können Sie mit dem Programmieren beginnen. Denken Sie daran, dass eingebettete Systeme empfindliche Geräte mit begrenzten Hardware- und Softwareressourcen sind. Es ist daher von entscheidender Bedeutung, die besten Praktiken in Bezug auf Anwendungssicherheit und Leistung zu berücksichtigen.

Code-Reviews helfen bei der Optimierung des Codes und der Identifizierung potenzieller Fehler. Sie müssen auch so gründlich wie möglich testen. Stellen Sie sicher, dass Sie eine vollständige Liste aller Testfälle zusammenstellen, auf die das Gerät bei der Verwendung in der Produktion stoßen kann.

Schritt 6: Wartung und Support

Wie bei jeder anderen Anwendung/Gerät endet der Lebenszyklus nicht, wenn das eingebettete Gerät versendet und installiert wurde. Wenn das Gerät in der Produktion eingesetzt wird, werden neue Anwendungsfälle identifiziert, für die neue Funktionen hinzugefügt werden müssen. Für alle gemeldeten Fehler müssen möglicherweise auch neue Firmware-Updates veröffentlicht werden.

Die besten eingebetteten Programmiersprachen

Es gibt viele seriöse Organisationen wie IEEE und TIOBE, die Programmiersprachen nach Beliebtheit und Verwendung einstufen. Unabhängig davon, ob Sie das überprüfen TIOBE-Index, oder die IEEE-Spektrum, Sie werden ein gemeinsames Thema bemerken.

Die drei wichtigsten Sprachen sind immer C, Python und Java. Der TIOBE-Index für Juli 2021 rangiert C auf #1, Java auf #2 und Python auf #3. Laut dem Ranking von IEEE Spectrum für eingebettete Programmiersprachen lautet die Reihenfolge: Python, Java und dann C.

Wie unterscheidet sich in Java, C oder Python geschriebene Firmware?

Verschiedene Sprachen verwalten Speicher, Interaktionen mit dem Betriebssystem und Laufzeit auf unterschiedliche Weise. Beispielsweise werden Java-Anwendungen in einer speziellen Laufzeitumgebung ausgeführt, die als Java Virtual Machine oder JVM bekannt ist.

Die Speicherverwaltung in C/C++ erfolgt manuell, in Java oder Python müssen Sie sich jedoch nicht selbst um die Speicherverwaltung kümmern; die Sprache erledigt das für Sie. Außerdem müssen Sie in C Ihren Müll selbst einsammeln; d. h. wenn Sie dynamisch ein Stück Speicher zuweisen, müssen Sie es explizit selbst freigeben. Wenn Sie das nicht tun, führt das zu einem Speicherleck. In Java oder Python erfolgt die Garbage-Collection automatisch. C ist jedoch von Natur aus viel schneller als Java oder Python.

Eine Sache, die C und Java (aber insbesondere C) im Vergleich zu Python fehlt, ist die Verfügbarkeit von Bibliotheken von Drittanbietern. Python verfügt über eine umfangreichere Datenbank mit Bibliotheken, was es Entwicklern erheblich erleichtert, bestimmte Funktionen hinzuzufügen.

Wählen Sie insgesamt C, wenn:

  • Sie möchten eine Low-Level-Schnittstelle mit dem Betriebssystem und der Hardware.
  • Sie wollen die bestmögliche Leistung.
  • Ihre Entwickler kennen sich mit C/C++ aus.
  • Sie benötigen nicht zu viel externe/Drittanbieter-Support.

Verwenden Sie Python, wenn:

  • Sie möchten Data-Science- oder Machine-Learning-Algorithmen implementieren.
  • Sie möchten umfangreiche Bibliotheksunterstützung von Drittanbietern.
  • Sie sind damit einverstanden, Geschwindigkeit gegen Benutzerfreundlichkeit einzutauschen.
  • Sie haben nur begrenzte Erfahrung in der Embedded-Entwicklung.
  • Sie benötigen keine Low-Level-Schnittstelle zum Betriebssystem oder zur Hardware.

Verwenden Sie Java, wenn:

  • Sie erstellen Webanwendungen.
  • Sie möchten eine einfachere Entwicklung als C, aber immer noch mehr Leistung als Python.
  • Sie benötigen nicht zu viel externe/Drittanbieter-Support.

Wird C langsam aufhören, die erste Wahl für Embedded-Entwicklung zu sein?

Hochsprachen erleichtern das Programmieren, indem sie die Komplexität abstrahieren, die in C einfach nicht vermieden werden kann. Trotz der Veröffentlichung ausgefallenerer Sprachen und Frameworks ist C jedoch jahrzehntelang die erste Wahl in der Embedded-Entwicklung geblieben.

Dies liegt daran, dass die Geschwindigkeit, Leistung und Zuverlässigkeit, die es bietet, immer noch beispiellos sind. Die Tatsache, dass Python und große Teile des Java-Ökosystems (einschließlich Runtime, Sprache und Compiler) in C geschrieben sind, spricht Bände über die Effizienz und Beständigkeit der Sprache.

Vor diesem Hintergrund ist C für neue Entwickler, die die Einfachheit von Sprachen wie Python bevorzugen, zweifellos schwieriger zu erlernen. Dies führt zu einem spürbaren Rückgang der Größe der C-Entwickler-Community. Der Anstieg der Entwicklung von KI- und ML-Anwendungen veranlasst die Menschen auch dazu, Python gegenüber C zu wählen, einfach weil es eine bessere Bibliotheksunterstützung bietet.

Es ist wichtig, sich daran zu erinnern, dass Python erst seit Kurzem Teil der Die beste eingebettete Programmiersprache Debatte. Ja, die Akzeptanz könnte in den kommenden Jahren weiter zunehmen, aber wir erwarten nicht, dass C jemals aufhören wird, die erste Wahl für die Embedded-Entwicklung zu sein.

Warum sichere Codierung in C/C++ wichtig ist

Beim Schreiben von Code in C/C++ kann viel schief gehen. Der Zugriff auf eine Speicheradresse, die nicht mehr auf gültige Daten verweist, oder die falsche gemeinsame Nutzung von Daten zwischen Threads kann zum Absturz Ihrer gesamten Anwendung führen.

Bei eingebetteten Geräten sind diese Auswirkungen weitaus schwerwiegender, da ein Absturz in ihnen dazu führen kann, dass eine viel größere Maschine nicht mehr funktioniert. Wenn beispielsweise das Autopilotmodul in einem Auto abgeschaltet wird, kann das Auto Hindernissen nicht mehr ausweichen.

Hier sind weitere Gründe, warum die sichere Codierung von C/C++-Anwendungen so wichtig ist:

  • Unsichere Speicherverwaltung (Nullzeiger, Speicherbeschädigung, Stacküberläufe, Puffer- und Heap-Überläufe) führt zum Absturz der gesamten Anwendung.
  • Zeiger sind ein wesentlicher Bestandteil von C und C++. Der Umgang mit ihnen erfordert äußerste Sorgfalt und eine gründliche Kenntnis der zugrunde liegenden Konzepte.
  • Die Müllabfuhr erfolgt manuell. Dies macht es für Programmierer zwingend erforderlich, jeden dynamisch zugewiesenen Speicher explizit zu löschen. Unfreier oder falsch freigegebener Speicher kann zu Speicherlecks oder Beschädigung führen.
  • Es fehlt an standardisierten APIs für fortgeschrittene Datenstrukturen (z. B. Hash-Tabellen, Sets usw.), was die Entwickler zwingt, das Rad neu zu erfinden.

Es ist absolut wichtig, dass Entwickler in der sicheren Codierung von C/C++-Anwendungen geschult werden. Secure Code Warrior bietet eine personalisierte Lernplattform mit interaktiven Herausforderungen, Kursen und Prüfungen, die es Entwicklern ermöglichen, sicheren C/C++-Code zu schreiben. Hier geht es um sprache:framework-spezifische Inhalte, nicht nur um eine Änderung der allgemeinen konzeptionellen Schulung.

Auschecken wie wir der Automobil- und Transportindustrie helfen. Oder versuche eine Herausforderung beim Embed-Focus-Codieren heute, um zu erleben, wie wir Entwickler befähigen, sichere eingebettete Anwendungen zu schreiben!

リソースを表示
リソースを表示

以下のフォームに記入してレポートをダウンロードしてください

当社製品および/またはセキュアコーディングに関連する情報について、お客様にご案内させていただくことをお許しください。お客様の個人情報は常に細心の注意をもって取り扱い、マーケティング目的で他社に販売することは一切ありません。

提出
SCW成功アイコン
SCWエラーアイコン
フォームを送信するには、「アナリティクス」クッキーを有効にしてください。完了後、いつでも無効に戻せます。

Bei Secure Code Warrior sind wir stets bemüht, unseren Schulungsbereich zu erweitern. Um Embedded-Entwickler und Sicherheitsmanager in die Lage zu versetzen, sichere eingebettete Systeme zu entwickeln, nutzen wir die Welt der Sicherheit eingebetteter Systeme. In diesem Beitrag werden wir die wichtigsten Dinge vorstellen, die Entwickler und Architekten über den Aufbau sicherer eingebetteter Systeme wissen sollten.

Ein eingebettetes Gerät ist eine unabhängige Recheneinheit mit eigener mikroprozessorbasierter Hard- und Software. Sie werden in der Regel verwendet, um dedizierte Funktionen auszuführen, entweder unabhängig voneinander oder als Teil größerer Systeme.

Was ist ein eingebettetes Gerät und System?

Eingebettete Geräte sind speziell entwickelte Computersysteme mit minimalistischer Hard- und Software, die so programmiert sind, dass sie bestimmte Funktionen ausführen. Je nach Verwendungszweck kann die Komplexität eingebetteter Geräte variieren.

Wenn ein eingebettetes System komplizierte, ressourcenintensive Operationen ausführen muss, kann seine Hardware aus mehreren Prozessoren mit verschiedenen miteinander verbundenen Peripheriegeräten bestehen. Wenn es jedoch für eine einfache Aufgabe konzipiert ist, enthält es möglicherweise nur einen einzigen Mikrocontroller.

Einige eingebettete Systeme sind Blackboxen ohne Benutzeroberfläche, während andere über detaillierte, grafische Benutzeroberflächen verfügen können.

Beispiele für eingebettete Geräte

Embedded-Geräte finden in zahlreichen Branchen Anwendung, von der Luft- und Raumfahrt bis zur Computertechnik und von Haushaltsgeräten bis hin zum Gesundheitswesen. Hier sind ein paar Beispiele:

  • Ein Thermostat in einer Klimaanlage.
  • Ein Fitness-Tracker mit kleinen elektrischen Komponenten, auf denen ein winziges Betriebssystem läuft, der nichts weiter kann, als deine Gesundheitsdaten aufzuzeichnen und zu synchronisieren.
  • Digitale Klimaanlagen.
  • Navigationssysteme in einem Flugzeug.
  • Digitaluhren.
  • GPS-Geräte.
  • Wi-Fi-Komponenten in Mikrowellenherden und anderer Unterhaltungselektronik.
  • Blutdruck- und Herzschlagmessgeräte.
  • Netzwerkkomponente in einem MRT-Gerät, das Daten an die Cloud sendet.

Ist ein Laptop ein eingebettetes Gerät?

Kurze Antwort: Nein. Lange Antwort:

Per Definition kapselt ein eingebettetes Gerät die gesamte Software und Hardware, die es zur Ausführung seiner Funktionen benötigt. Ein Laptop fasst in der Tat verschiedene Hardwarekomponenten in einem Metallgehäuse und umfasst die gesamte Software, die es benötigt, um seinen Funktionsumfang bereitzustellen.

Im Gegensatz zu typischen eingebetteten Systemen, die über einen vordefinierten, minimalen Funktionsumfang verfügen, ist ein Laptop jedoch eher für allgemeine Zwecke geeignet und kann für eine Vielzahl von Aktivitäten verwendet werden.

Eingebettete Geräte im Internet der Dinge

Eingebettete Systeme sind das Herzstück des IoT. Ihr intelligenter Kühlschrank kann dank eines eingebetteten Geräts über Ihr Mobilgerät gesteuert werden. Es ist ein in Ihr Sicherheitssystem integriertes Gerät, mit dem Sie CCTV-Aufnahmen aus tausend Meilen Entfernung ansehen können. Und wenn Sie einen Knopf drücken, um Ihr Auto hinter den Kulissen auf Autopilot zu schalten, ist es ein integriertes Gerät, das die ganze Magie ausübt.

Lebenszyklus der Entwicklung eingebetteter Software

Die folgenden Schritte gehören zum typischen Softwareentwicklungszyklus eines eingebetteten Geräts:

Schritt 1: Zweck und Anforderungen

Ein eingebettetes Gerät verfügt über einen bestimmten und präzisen Funktionsumfang. Aus diesem Grund ist es sehr wichtig, den Zweck und die Anforderungen explizit anzugeben, bevor mit der Entwicklung begonnen wird. Es wird empfohlen, ein detailliertes Entwurfsdokument für das System zu erstellen. Beantworten Sie Fragen wie:

  • Welche Funktionen erfüllt das Gerät?
  • Wird es Teil einer anderen Maschine sein oder wird es eigenständig funktionieren?
  • Sollte das Gerät eine Benutzeroberfläche haben? Falls ja, reicht eine Befehlszeile aus oder wird eine grafische Benutzeroberfläche benötigt?
  • Welche Größen-, Kosten- oder Stromverbrauchsgrenzen muss das Gerät einhalten?
  • Gibt es Leistungsbenchmarks? Wird z. B. erwartet, dass das Gerät in Echtzeit oder innerhalb bestimmter Schwellenwerte reagiert?

Schritt 2: Systemarchitektur

Sobald wir die individuellen Systemanforderungen identifiziert haben, sind wir bereit, die Systemarchitektur zu entwerfen. Beantworten Sie Fragen wie:

  • Welche Hardwarekomponenten werden für die Entwicklung des Geräts benötigt? Dazu gehört die Identifizierung der Schaltkreise, Prozessorchips und Mikrocontroller sowie aller erforderlichen internen und externen Peripheriegeräte.
  • Wie viel Strom benötigen die Komponenten?
  • Wird das Gerät mit dem Internet verbunden sein?
  • Welche Schnittstellen müssen hinzugefügt/entwickelt werden, damit das Gerät eine Verbindung zu anderen Geräten oder der größeren Maschine herstellen kann?
  • Wie werden Sie Verschlüsselung implementieren? (Denken Sie an Algorithmen, Schlüsselspeicher usw.)
  • Wie werden Sie potenzielle Sicherheitslücken, Exploits und Malware erkennen und vermeiden?

Schritt 3: Wählen Sie das Betriebssystem

Die Wahl des Betriebssystems bestimmt oft die Effizienz Ihrer eingebetteten Anwendungen. Wählen Sie also mit Bedacht. Windows für IoT schneidet zwar bei der Grafik gut ab, es mangelt jedoch an Hardwareunterstützung. Embedded Linux und Android sind kostenlos, wohingegen für VxWorks und Windows for IoT Lizenzkosten anfallen.

Bei Open-Source-Systemen wie Linux und Android haben Ihre Entwickler mehr Kontrolle über den Kernel. Bei proprietären Systemen ist der Standardfunktionsumfang des Kernels jedoch alles, womit Sie arbeiten können.

Es ist auch wichtig, bei der Auswahl eines Betriebssystems die Auswirkungen auf die Sicherheit zu berücksichtigen. Werden Sicherheitspatches schnell veröffentlicht, falls Sicherheitslücken entdeckt werden? Gibt es einen eingebauten Schutz vor den häufigsten Cybersicherheitsangriffen?

Schritt 4: Die Entwicklungstools

Verschiedene Programmiersprachen und Frameworks haben verschiedene Vor- und Nachteile. Abhängig von Ihren Funktions-, Geschwindigkeits- und Zuverlässigkeitsanforderungen können Sie eine Sprache/ein Framework der anderen vorziehen.

Wenn Ihre Anwendung webbasiert ist und Sie eine hohe Leistung wünschen, entscheiden Sie sich für Java.
Wenn Sie jedoch den schnellsten Durchsatz wünschen, entscheiden Sie sich für C/C++. Wenn Sie die beste Unterstützung für Bibliotheken von Drittanbietern wünschen, entscheiden Sie sich für Python.

Schritt 5: Codieren, Refaktorieren, testen, noch mehr programmieren

Sobald Sie sich für die Entwicklungsplattform entschieden haben, können Sie mit dem Programmieren beginnen. Denken Sie daran, dass eingebettete Systeme empfindliche Geräte mit begrenzten Hardware- und Softwareressourcen sind. Es ist daher von entscheidender Bedeutung, die besten Praktiken in Bezug auf Anwendungssicherheit und Leistung zu berücksichtigen.

Code-Reviews helfen bei der Optimierung des Codes und der Identifizierung potenzieller Fehler. Sie müssen auch so gründlich wie möglich testen. Stellen Sie sicher, dass Sie eine vollständige Liste aller Testfälle zusammenstellen, auf die das Gerät bei der Verwendung in der Produktion stoßen kann.

Schritt 6: Wartung und Support

Wie bei jeder anderen Anwendung/Gerät endet der Lebenszyklus nicht, wenn das eingebettete Gerät versendet und installiert wurde. Wenn das Gerät in der Produktion eingesetzt wird, werden neue Anwendungsfälle identifiziert, für die neue Funktionen hinzugefügt werden müssen. Für alle gemeldeten Fehler müssen möglicherweise auch neue Firmware-Updates veröffentlicht werden.

Die besten eingebetteten Programmiersprachen

Es gibt viele seriöse Organisationen wie IEEE und TIOBE, die Programmiersprachen nach Beliebtheit und Verwendung einstufen. Unabhängig davon, ob Sie das überprüfen TIOBE-Index, oder die IEEE-Spektrum, Sie werden ein gemeinsames Thema bemerken.

Die drei wichtigsten Sprachen sind immer C, Python und Java. Der TIOBE-Index für Juli 2021 rangiert C auf #1, Java auf #2 und Python auf #3. Laut dem Ranking von IEEE Spectrum für eingebettete Programmiersprachen lautet die Reihenfolge: Python, Java und dann C.

Wie unterscheidet sich in Java, C oder Python geschriebene Firmware?

Verschiedene Sprachen verwalten Speicher, Interaktionen mit dem Betriebssystem und Laufzeit auf unterschiedliche Weise. Beispielsweise werden Java-Anwendungen in einer speziellen Laufzeitumgebung ausgeführt, die als Java Virtual Machine oder JVM bekannt ist.

Die Speicherverwaltung in C/C++ erfolgt manuell, in Java oder Python müssen Sie sich jedoch nicht selbst um die Speicherverwaltung kümmern; die Sprache erledigt das für Sie. Außerdem müssen Sie in C Ihren Müll selbst einsammeln; d. h. wenn Sie dynamisch ein Stück Speicher zuweisen, müssen Sie es explizit selbst freigeben. Wenn Sie das nicht tun, führt das zu einem Speicherleck. In Java oder Python erfolgt die Garbage-Collection automatisch. C ist jedoch von Natur aus viel schneller als Java oder Python.

Eine Sache, die C und Java (aber insbesondere C) im Vergleich zu Python fehlt, ist die Verfügbarkeit von Bibliotheken von Drittanbietern. Python verfügt über eine umfangreichere Datenbank mit Bibliotheken, was es Entwicklern erheblich erleichtert, bestimmte Funktionen hinzuzufügen.

Wählen Sie insgesamt C, wenn:

  • Sie möchten eine Low-Level-Schnittstelle mit dem Betriebssystem und der Hardware.
  • Sie wollen die bestmögliche Leistung.
  • Ihre Entwickler kennen sich mit C/C++ aus.
  • Sie benötigen nicht zu viel externe/Drittanbieter-Support.

Verwenden Sie Python, wenn:

  • Sie möchten Data-Science- oder Machine-Learning-Algorithmen implementieren.
  • Sie möchten umfangreiche Bibliotheksunterstützung von Drittanbietern.
  • Sie sind damit einverstanden, Geschwindigkeit gegen Benutzerfreundlichkeit einzutauschen.
  • Sie haben nur begrenzte Erfahrung in der Embedded-Entwicklung.
  • Sie benötigen keine Low-Level-Schnittstelle zum Betriebssystem oder zur Hardware.

Verwenden Sie Java, wenn:

  • Sie erstellen Webanwendungen.
  • Sie möchten eine einfachere Entwicklung als C, aber immer noch mehr Leistung als Python.
  • Sie benötigen nicht zu viel externe/Drittanbieter-Support.

Wird C langsam aufhören, die erste Wahl für Embedded-Entwicklung zu sein?

Hochsprachen erleichtern das Programmieren, indem sie die Komplexität abstrahieren, die in C einfach nicht vermieden werden kann. Trotz der Veröffentlichung ausgefallenerer Sprachen und Frameworks ist C jedoch jahrzehntelang die erste Wahl in der Embedded-Entwicklung geblieben.

Dies liegt daran, dass die Geschwindigkeit, Leistung und Zuverlässigkeit, die es bietet, immer noch beispiellos sind. Die Tatsache, dass Python und große Teile des Java-Ökosystems (einschließlich Runtime, Sprache und Compiler) in C geschrieben sind, spricht Bände über die Effizienz und Beständigkeit der Sprache.

Vor diesem Hintergrund ist C für neue Entwickler, die die Einfachheit von Sprachen wie Python bevorzugen, zweifellos schwieriger zu erlernen. Dies führt zu einem spürbaren Rückgang der Größe der C-Entwickler-Community. Der Anstieg der Entwicklung von KI- und ML-Anwendungen veranlasst die Menschen auch dazu, Python gegenüber C zu wählen, einfach weil es eine bessere Bibliotheksunterstützung bietet.

Es ist wichtig, sich daran zu erinnern, dass Python erst seit Kurzem Teil der Die beste eingebettete Programmiersprache Debatte. Ja, die Akzeptanz könnte in den kommenden Jahren weiter zunehmen, aber wir erwarten nicht, dass C jemals aufhören wird, die erste Wahl für die Embedded-Entwicklung zu sein.

Warum sichere Codierung in C/C++ wichtig ist

Beim Schreiben von Code in C/C++ kann viel schief gehen. Der Zugriff auf eine Speicheradresse, die nicht mehr auf gültige Daten verweist, oder die falsche gemeinsame Nutzung von Daten zwischen Threads kann zum Absturz Ihrer gesamten Anwendung führen.

Bei eingebetteten Geräten sind diese Auswirkungen weitaus schwerwiegender, da ein Absturz in ihnen dazu führen kann, dass eine viel größere Maschine nicht mehr funktioniert. Wenn beispielsweise das Autopilotmodul in einem Auto abgeschaltet wird, kann das Auto Hindernissen nicht mehr ausweichen.

Hier sind weitere Gründe, warum die sichere Codierung von C/C++-Anwendungen so wichtig ist:

  • Unsichere Speicherverwaltung (Nullzeiger, Speicherbeschädigung, Stacküberläufe, Puffer- und Heap-Überläufe) führt zum Absturz der gesamten Anwendung.
  • Zeiger sind ein wesentlicher Bestandteil von C und C++. Der Umgang mit ihnen erfordert äußerste Sorgfalt und eine gründliche Kenntnis der zugrunde liegenden Konzepte.
  • Die Müllabfuhr erfolgt manuell. Dies macht es für Programmierer zwingend erforderlich, jeden dynamisch zugewiesenen Speicher explizit zu löschen. Unfreier oder falsch freigegebener Speicher kann zu Speicherlecks oder Beschädigung führen.
  • Es fehlt an standardisierten APIs für fortgeschrittene Datenstrukturen (z. B. Hash-Tabellen, Sets usw.), was die Entwickler zwingt, das Rad neu zu erfinden.

Es ist absolut wichtig, dass Entwickler in der sicheren Codierung von C/C++-Anwendungen geschult werden. Secure Code Warrior bietet eine personalisierte Lernplattform mit interaktiven Herausforderungen, Kursen und Prüfungen, die es Entwicklern ermöglichen, sicheren C/C++-Code zu schreiben. Hier geht es um sprache:framework-spezifische Inhalte, nicht nur um eine Änderung der allgemeinen konzeptionellen Schulung.

Auschecken wie wir der Automobil- und Transportindustrie helfen. Oder versuche eine Herausforderung beim Embed-Focus-Codieren heute, um zu erleben, wie wir Entwickler befähigen, sichere eingebettete Anwendungen zu schreiben!

ウェビナーを見る
始めましょう
もっと詳しく

以下のリンクをクリックして、このリソースのPDFをダウンロードしてください。

Secure Code Warrior 、ソフトウェア開発サイクル全体を通じてコードの安全性を確保し、サイバーセキュリティを最優先とする文化を構築するため、貴社をSecure Code Warrior 。アプリセキュリティ管理者、開発者、CISO、あるいはセキュリティに関わるあらゆる立場の方々に対し、当社が貴社のビジネスにおける不安全なコードに関連するリスクの低減を支援します。

レポートを見るデモを予約する
PDFをダウンロード
リソースを表示
共有する:
リンクトインのブランドソーシャルx ロゴ
もっと知りたいですか?

共有する:
リンクトインのブランドソーシャルx ロゴ
著者
安全なコード戦士
2021年8月11日発行

Secure Code Warrior macht sicheres Programmieren zu einer positiven und ansprechenden Erfahrung für Entwickler, die ihre Fähigkeiten erweitern. Wir begleiten jeden Programmierer auf seinem eigenen bevorzugten Lernweg, sodass sicherheitserfahrene Entwickler zu den alltäglichen Superhelden unserer vernetzten Welt werden.

Dieser Artikel wurde vom Branchenexpertenteam von Secure Code Warrior verfasst, das sich zum Ziel gesetzt hat, Entwicklern von Anfang an das Wissen und die Fähigkeiten zu vermitteln, um sichere Software zu entwickeln. Wir stützen uns auf fundiertes Fachwissen in Bezug auf sichere Codierungspraktiken, Branchentrends und Erkenntnisse aus der Praxis.

共有する:
リンクトインのブランドソーシャルx ロゴ

Bei Secure Code Warrior sind wir stets bemüht, unseren Schulungsbereich zu erweitern. Um Embedded-Entwickler und Sicherheitsmanager in die Lage zu versetzen, sichere eingebettete Systeme zu entwickeln, nutzen wir die Welt der Sicherheit eingebetteter Systeme. In diesem Beitrag werden wir die wichtigsten Dinge vorstellen, die Entwickler und Architekten über den Aufbau sicherer eingebetteter Systeme wissen sollten.

Ein eingebettetes Gerät ist eine unabhängige Recheneinheit mit eigener mikroprozessorbasierter Hard- und Software. Sie werden in der Regel verwendet, um dedizierte Funktionen auszuführen, entweder unabhängig voneinander oder als Teil größerer Systeme.

Was ist ein eingebettetes Gerät und System?

Eingebettete Geräte sind speziell entwickelte Computersysteme mit minimalistischer Hard- und Software, die so programmiert sind, dass sie bestimmte Funktionen ausführen. Je nach Verwendungszweck kann die Komplexität eingebetteter Geräte variieren.

Wenn ein eingebettetes System komplizierte, ressourcenintensive Operationen ausführen muss, kann seine Hardware aus mehreren Prozessoren mit verschiedenen miteinander verbundenen Peripheriegeräten bestehen. Wenn es jedoch für eine einfache Aufgabe konzipiert ist, enthält es möglicherweise nur einen einzigen Mikrocontroller.

Einige eingebettete Systeme sind Blackboxen ohne Benutzeroberfläche, während andere über detaillierte, grafische Benutzeroberflächen verfügen können.

Beispiele für eingebettete Geräte

Embedded-Geräte finden in zahlreichen Branchen Anwendung, von der Luft- und Raumfahrt bis zur Computertechnik und von Haushaltsgeräten bis hin zum Gesundheitswesen. Hier sind ein paar Beispiele:

  • Ein Thermostat in einer Klimaanlage.
  • Ein Fitness-Tracker mit kleinen elektrischen Komponenten, auf denen ein winziges Betriebssystem läuft, der nichts weiter kann, als deine Gesundheitsdaten aufzuzeichnen und zu synchronisieren.
  • Digitale Klimaanlagen.
  • Navigationssysteme in einem Flugzeug.
  • Digitaluhren.
  • GPS-Geräte.
  • Wi-Fi-Komponenten in Mikrowellenherden und anderer Unterhaltungselektronik.
  • Blutdruck- und Herzschlagmessgeräte.
  • Netzwerkkomponente in einem MRT-Gerät, das Daten an die Cloud sendet.

Ist ein Laptop ein eingebettetes Gerät?

Kurze Antwort: Nein. Lange Antwort:

Per Definition kapselt ein eingebettetes Gerät die gesamte Software und Hardware, die es zur Ausführung seiner Funktionen benötigt. Ein Laptop fasst in der Tat verschiedene Hardwarekomponenten in einem Metallgehäuse und umfasst die gesamte Software, die es benötigt, um seinen Funktionsumfang bereitzustellen.

Im Gegensatz zu typischen eingebetteten Systemen, die über einen vordefinierten, minimalen Funktionsumfang verfügen, ist ein Laptop jedoch eher für allgemeine Zwecke geeignet und kann für eine Vielzahl von Aktivitäten verwendet werden.

Eingebettete Geräte im Internet der Dinge

Eingebettete Systeme sind das Herzstück des IoT. Ihr intelligenter Kühlschrank kann dank eines eingebetteten Geräts über Ihr Mobilgerät gesteuert werden. Es ist ein in Ihr Sicherheitssystem integriertes Gerät, mit dem Sie CCTV-Aufnahmen aus tausend Meilen Entfernung ansehen können. Und wenn Sie einen Knopf drücken, um Ihr Auto hinter den Kulissen auf Autopilot zu schalten, ist es ein integriertes Gerät, das die ganze Magie ausübt.

Lebenszyklus der Entwicklung eingebetteter Software

Die folgenden Schritte gehören zum typischen Softwareentwicklungszyklus eines eingebetteten Geräts:

Schritt 1: Zweck und Anforderungen

Ein eingebettetes Gerät verfügt über einen bestimmten und präzisen Funktionsumfang. Aus diesem Grund ist es sehr wichtig, den Zweck und die Anforderungen explizit anzugeben, bevor mit der Entwicklung begonnen wird. Es wird empfohlen, ein detailliertes Entwurfsdokument für das System zu erstellen. Beantworten Sie Fragen wie:

  • Welche Funktionen erfüllt das Gerät?
  • Wird es Teil einer anderen Maschine sein oder wird es eigenständig funktionieren?
  • Sollte das Gerät eine Benutzeroberfläche haben? Falls ja, reicht eine Befehlszeile aus oder wird eine grafische Benutzeroberfläche benötigt?
  • Welche Größen-, Kosten- oder Stromverbrauchsgrenzen muss das Gerät einhalten?
  • Gibt es Leistungsbenchmarks? Wird z. B. erwartet, dass das Gerät in Echtzeit oder innerhalb bestimmter Schwellenwerte reagiert?

Schritt 2: Systemarchitektur

Sobald wir die individuellen Systemanforderungen identifiziert haben, sind wir bereit, die Systemarchitektur zu entwerfen. Beantworten Sie Fragen wie:

  • Welche Hardwarekomponenten werden für die Entwicklung des Geräts benötigt? Dazu gehört die Identifizierung der Schaltkreise, Prozessorchips und Mikrocontroller sowie aller erforderlichen internen und externen Peripheriegeräte.
  • Wie viel Strom benötigen die Komponenten?
  • Wird das Gerät mit dem Internet verbunden sein?
  • Welche Schnittstellen müssen hinzugefügt/entwickelt werden, damit das Gerät eine Verbindung zu anderen Geräten oder der größeren Maschine herstellen kann?
  • Wie werden Sie Verschlüsselung implementieren? (Denken Sie an Algorithmen, Schlüsselspeicher usw.)
  • Wie werden Sie potenzielle Sicherheitslücken, Exploits und Malware erkennen und vermeiden?

Schritt 3: Wählen Sie das Betriebssystem

Die Wahl des Betriebssystems bestimmt oft die Effizienz Ihrer eingebetteten Anwendungen. Wählen Sie also mit Bedacht. Windows für IoT schneidet zwar bei der Grafik gut ab, es mangelt jedoch an Hardwareunterstützung. Embedded Linux und Android sind kostenlos, wohingegen für VxWorks und Windows for IoT Lizenzkosten anfallen.

Bei Open-Source-Systemen wie Linux und Android haben Ihre Entwickler mehr Kontrolle über den Kernel. Bei proprietären Systemen ist der Standardfunktionsumfang des Kernels jedoch alles, womit Sie arbeiten können.

Es ist auch wichtig, bei der Auswahl eines Betriebssystems die Auswirkungen auf die Sicherheit zu berücksichtigen. Werden Sicherheitspatches schnell veröffentlicht, falls Sicherheitslücken entdeckt werden? Gibt es einen eingebauten Schutz vor den häufigsten Cybersicherheitsangriffen?

Schritt 4: Die Entwicklungstools

Verschiedene Programmiersprachen und Frameworks haben verschiedene Vor- und Nachteile. Abhängig von Ihren Funktions-, Geschwindigkeits- und Zuverlässigkeitsanforderungen können Sie eine Sprache/ein Framework der anderen vorziehen.

Wenn Ihre Anwendung webbasiert ist und Sie eine hohe Leistung wünschen, entscheiden Sie sich für Java.
Wenn Sie jedoch den schnellsten Durchsatz wünschen, entscheiden Sie sich für C/C++. Wenn Sie die beste Unterstützung für Bibliotheken von Drittanbietern wünschen, entscheiden Sie sich für Python.

Schritt 5: Codieren, Refaktorieren, testen, noch mehr programmieren

Sobald Sie sich für die Entwicklungsplattform entschieden haben, können Sie mit dem Programmieren beginnen. Denken Sie daran, dass eingebettete Systeme empfindliche Geräte mit begrenzten Hardware- und Softwareressourcen sind. Es ist daher von entscheidender Bedeutung, die besten Praktiken in Bezug auf Anwendungssicherheit und Leistung zu berücksichtigen.

Code-Reviews helfen bei der Optimierung des Codes und der Identifizierung potenzieller Fehler. Sie müssen auch so gründlich wie möglich testen. Stellen Sie sicher, dass Sie eine vollständige Liste aller Testfälle zusammenstellen, auf die das Gerät bei der Verwendung in der Produktion stoßen kann.

Schritt 6: Wartung und Support

Wie bei jeder anderen Anwendung/Gerät endet der Lebenszyklus nicht, wenn das eingebettete Gerät versendet und installiert wurde. Wenn das Gerät in der Produktion eingesetzt wird, werden neue Anwendungsfälle identifiziert, für die neue Funktionen hinzugefügt werden müssen. Für alle gemeldeten Fehler müssen möglicherweise auch neue Firmware-Updates veröffentlicht werden.

Die besten eingebetteten Programmiersprachen

Es gibt viele seriöse Organisationen wie IEEE und TIOBE, die Programmiersprachen nach Beliebtheit und Verwendung einstufen. Unabhängig davon, ob Sie das überprüfen TIOBE-Index, oder die IEEE-Spektrum, Sie werden ein gemeinsames Thema bemerken.

Die drei wichtigsten Sprachen sind immer C, Python und Java. Der TIOBE-Index für Juli 2021 rangiert C auf #1, Java auf #2 und Python auf #3. Laut dem Ranking von IEEE Spectrum für eingebettete Programmiersprachen lautet die Reihenfolge: Python, Java und dann C.

Wie unterscheidet sich in Java, C oder Python geschriebene Firmware?

Verschiedene Sprachen verwalten Speicher, Interaktionen mit dem Betriebssystem und Laufzeit auf unterschiedliche Weise. Beispielsweise werden Java-Anwendungen in einer speziellen Laufzeitumgebung ausgeführt, die als Java Virtual Machine oder JVM bekannt ist.

Die Speicherverwaltung in C/C++ erfolgt manuell, in Java oder Python müssen Sie sich jedoch nicht selbst um die Speicherverwaltung kümmern; die Sprache erledigt das für Sie. Außerdem müssen Sie in C Ihren Müll selbst einsammeln; d. h. wenn Sie dynamisch ein Stück Speicher zuweisen, müssen Sie es explizit selbst freigeben. Wenn Sie das nicht tun, führt das zu einem Speicherleck. In Java oder Python erfolgt die Garbage-Collection automatisch. C ist jedoch von Natur aus viel schneller als Java oder Python.

Eine Sache, die C und Java (aber insbesondere C) im Vergleich zu Python fehlt, ist die Verfügbarkeit von Bibliotheken von Drittanbietern. Python verfügt über eine umfangreichere Datenbank mit Bibliotheken, was es Entwicklern erheblich erleichtert, bestimmte Funktionen hinzuzufügen.

Wählen Sie insgesamt C, wenn:

  • Sie möchten eine Low-Level-Schnittstelle mit dem Betriebssystem und der Hardware.
  • Sie wollen die bestmögliche Leistung.
  • Ihre Entwickler kennen sich mit C/C++ aus.
  • Sie benötigen nicht zu viel externe/Drittanbieter-Support.

Verwenden Sie Python, wenn:

  • Sie möchten Data-Science- oder Machine-Learning-Algorithmen implementieren.
  • Sie möchten umfangreiche Bibliotheksunterstützung von Drittanbietern.
  • Sie sind damit einverstanden, Geschwindigkeit gegen Benutzerfreundlichkeit einzutauschen.
  • Sie haben nur begrenzte Erfahrung in der Embedded-Entwicklung.
  • Sie benötigen keine Low-Level-Schnittstelle zum Betriebssystem oder zur Hardware.

Verwenden Sie Java, wenn:

  • Sie erstellen Webanwendungen.
  • Sie möchten eine einfachere Entwicklung als C, aber immer noch mehr Leistung als Python.
  • Sie benötigen nicht zu viel externe/Drittanbieter-Support.

Wird C langsam aufhören, die erste Wahl für Embedded-Entwicklung zu sein?

Hochsprachen erleichtern das Programmieren, indem sie die Komplexität abstrahieren, die in C einfach nicht vermieden werden kann. Trotz der Veröffentlichung ausgefallenerer Sprachen und Frameworks ist C jedoch jahrzehntelang die erste Wahl in der Embedded-Entwicklung geblieben.

Dies liegt daran, dass die Geschwindigkeit, Leistung und Zuverlässigkeit, die es bietet, immer noch beispiellos sind. Die Tatsache, dass Python und große Teile des Java-Ökosystems (einschließlich Runtime, Sprache und Compiler) in C geschrieben sind, spricht Bände über die Effizienz und Beständigkeit der Sprache.

Vor diesem Hintergrund ist C für neue Entwickler, die die Einfachheit von Sprachen wie Python bevorzugen, zweifellos schwieriger zu erlernen. Dies führt zu einem spürbaren Rückgang der Größe der C-Entwickler-Community. Der Anstieg der Entwicklung von KI- und ML-Anwendungen veranlasst die Menschen auch dazu, Python gegenüber C zu wählen, einfach weil es eine bessere Bibliotheksunterstützung bietet.

Es ist wichtig, sich daran zu erinnern, dass Python erst seit Kurzem Teil der Die beste eingebettete Programmiersprache Debatte. Ja, die Akzeptanz könnte in den kommenden Jahren weiter zunehmen, aber wir erwarten nicht, dass C jemals aufhören wird, die erste Wahl für die Embedded-Entwicklung zu sein.

Warum sichere Codierung in C/C++ wichtig ist

Beim Schreiben von Code in C/C++ kann viel schief gehen. Der Zugriff auf eine Speicheradresse, die nicht mehr auf gültige Daten verweist, oder die falsche gemeinsame Nutzung von Daten zwischen Threads kann zum Absturz Ihrer gesamten Anwendung führen.

Bei eingebetteten Geräten sind diese Auswirkungen weitaus schwerwiegender, da ein Absturz in ihnen dazu führen kann, dass eine viel größere Maschine nicht mehr funktioniert. Wenn beispielsweise das Autopilotmodul in einem Auto abgeschaltet wird, kann das Auto Hindernissen nicht mehr ausweichen.

Hier sind weitere Gründe, warum die sichere Codierung von C/C++-Anwendungen so wichtig ist:

  • Unsichere Speicherverwaltung (Nullzeiger, Speicherbeschädigung, Stacküberläufe, Puffer- und Heap-Überläufe) führt zum Absturz der gesamten Anwendung.
  • Zeiger sind ein wesentlicher Bestandteil von C und C++. Der Umgang mit ihnen erfordert äußerste Sorgfalt und eine gründliche Kenntnis der zugrunde liegenden Konzepte.
  • Die Müllabfuhr erfolgt manuell. Dies macht es für Programmierer zwingend erforderlich, jeden dynamisch zugewiesenen Speicher explizit zu löschen. Unfreier oder falsch freigegebener Speicher kann zu Speicherlecks oder Beschädigung führen.
  • Es fehlt an standardisierten APIs für fortgeschrittene Datenstrukturen (z. B. Hash-Tabellen, Sets usw.), was die Entwickler zwingt, das Rad neu zu erfinden.

Es ist absolut wichtig, dass Entwickler in der sicheren Codierung von C/C++-Anwendungen geschult werden. Secure Code Warrior bietet eine personalisierte Lernplattform mit interaktiven Herausforderungen, Kursen und Prüfungen, die es Entwicklern ermöglichen, sicheren C/C++-Code zu schreiben. Hier geht es um sprache:framework-spezifische Inhalte, nicht nur um eine Änderung der allgemeinen konzeptionellen Schulung.

Auschecken wie wir der Automobil- und Transportindustrie helfen. Oder versuche eine Herausforderung beim Embed-Focus-Codieren heute, um zu erleben, wie wir Entwickler befähigen, sichere eingebettete Anwendungen zu schreiben!

目次

PDFをダウンロード
リソースを表示
もっと知りたいですか?

Secure Code Warrior macht sicheres Programmieren zu einer positiven und ansprechenden Erfahrung für Entwickler, die ihre Fähigkeiten erweitern. Wir begleiten jeden Programmierer auf seinem eigenen bevorzugten Lernweg, sodass sicherheitserfahrene Entwickler zu den alltäglichen Superhelden unserer vernetzten Welt werden.

もっと詳しく

Secure Code Warrior 、ソフトウェア開発サイクル全体を通じてコードの安全性を確保し、サイバーセキュリティを最優先とする文化を構築するため、貴社をSecure Code Warrior 。アプリセキュリティ管理者、開発者、CISO、あるいはセキュリティに関わるあらゆる立場の方々に対し、当社が貴社のビジネスにおける不安全なコードに関連するリスクの低減を支援します。

デモを予約するダウンロード
共有する:
リンクトインのブランドソーシャルx ロゴ
リソースハブ

入門リソース

さらに多くの投稿
リソースハブ

入門リソース

さらに多くの投稿