ブログ

組込み機器と組込みシステム開発-概要

Secure Code Warrior
2021年8月11日発行

Secure Code Warrior 、私たちは常にトレーニングの範囲を拡大しています。組み込み機器の開発者やセキュリティ管理者が安全な組み込みシステムを構築できるようにするために、私たちは組み込みシステムのセキュリティの世界を利用しています。この記事では、安全な組込みシステムを構築するために、開発者やアーキテクトが知っておくべき重要なことをご紹介します。 

組み込み機器とは、マイクロプロセッサを搭載したハードウェアとソフトウェアを備えた、独立した計算ユニットのことです。一般的には、独立して、または大規模なシステムの一部として、専用の機能を実行するために使用されます。

組み込み機器・システムとは?

組込み機器は、最小限のハードウェアとソフトウェアで構成され、特定の機能を実行するようにプログラムされた、目的に応じたコンピューティングシステムです。目的に応じて、組込み機器の複雑さは様々です。 

組込みシステムでは、複雑な処理を行う必要がある場合、複数のプロセッサと様々な周辺機器を接続してハードウェアを構成します。しかし、単純な作業を行うために設計されたシステムであれば、1つのマイクロコントローラーで十分です。 

組込みシステムには、ユーザーインターフェースを持たないブラックボックスもあれば、グラフィカルで詳細なユーザーインターフェースを持つものもあります。

組み込み機器の例

組込み機器は、航空宇宙からコンピュータ、家電からヘルスケアまで、さまざまな業界で利用されています。以下はその一例です。

  • エアコンの中のサーモスタット。 
  • 小さな電気部品と小さなOSで構成されたフィットネストラッカーは、健康状態を記録したり同期したりするだけの機能しかありません。
  • デジタルクライメートコントロールシステム。
  • 飛行機の中のナビゲーションシステム。
  • デジタル時計。
  • GPS機器です。
  • 電子レンジをはじめとする家電製品に搭載されているWi-Fiコンポーネント。
  • 血圧計、心拍計。
  • クラウドにデータを送信するMRI装置内のネットワークコンポーネント。

ノートパソコンは組み込み機器ですか?

短い答え。長い答え:いいえ。

組み込み機器とは、その機能を実現するために必要なソフトウェアとハードウェアのすべてを内包したものです。ノートパソコンは、さまざまなハードウェアを金属製のボディに収め、その機能を実現するために必要なすべてのソフトウェアを内包しています。

しかし、あらかじめ最低限の機能が定義されている一般的な組み込みシステムとは異なり、ノートパソコンはより汎用的で、さまざまな活動に使用することができます。

モノのインターネットの中の組み込み機器

IoTの中心となるのは、組み込みシステムです。スマートな冷蔵庫をモバイル機器で操作できるのは、組み込み機器があるからです。セキュリティシステムに組み込まれたデバイスのおかげで、1,000マイル離れたところからでもCCTVの映像を見ることができます。また、ボタンを押して車を自動運転にするときも、舞台裏では組み込み機器がすべての魔法をかけているのです。

組込みソフトウェア開発のライフサイクル

組込み機器のソフトウェア開発の典型的なライフサイクルには、次のようなステップがあります。

ステップ1:目的と要件

組込み機器には、明確で精密な機能セットがあります。そのため、開発に着手する前に、その目的や要件を明確にすることが非常に重要です。システムの詳細な設計書を作成することをお勧めします。などの質問に答えてください。

  • どのような機能を持ったデバイスなのか?
  • 他の機械の一部になるのか、それとも単独で機能するのか。
  • デバイスにはユーザーインターフェースが必要ですか?その場合、コマンドラインで十分なのか、それともグラフィカルなUIが必要なのか?
  • サイズ、コスト、消費電力など、どのような制限を設けているか?
  • パフォーマンスのベンチマークはありますか?例えば、デバイスはリアルタイムで応答することが期待されているのか、それとも一定のしきい値内で応答することが期待されているのか。

ステップ2:システムアーキテクチャ

固有のシステム要件を特定したら、システムアーキテクチャを設計する準備が整いました。などの質問に答えます。

  • デバイスの開発にはどのようなハードウェアコンポーネントが必要ですか?これには、回路、プロセッサチップ、マイクロコントローラ、および必要な内部および外部の周辺機器の特定が含まれます。 
  • コンポーネントに必要な電力はどのくらいですか? 
  • インターネットに接続されますか?
  • デバイスを他のデバイスや大きなマシンに接続するために、どのようなインターフェースを追加/開発する必要がありますか?
  • 暗号化をどのように実装するのか?(アルゴリズムや鍵の保管方法などを考えます。)
  • 潜在的な脆弱性、エクスプロイト、マルウェアをどのように特定し、回避するのか?

ステップ3: オペレーティングシステムの選択

オペレーティングシステムの選択は、組み込みアプリケーションの有効性を左右することが多いので、賢く選択しましょう。Windows for IoTは、グラフィックスでは高い評価を得ていますが、ハードウェアのサポートが不足しています。Embedded LinuxとAndroidは無償ですが、VxWorksとWindows for IoTはライセンス費用がかかります。 

LinuxやAndroidのようなオープンソースのシステムでは、開発者がカーネルをコントロールできますが、プロプライエタリなシステムでは、カーネルのデフォルトの機能セットがすべてです。 

OSを選択する際には、セキュリティへの影響を考慮することも重要です。脆弱性が発見された場合に備えて、セキュリティパッチはすぐにリリースされるか?最も一般的なサイバーセキュリティ攻撃に対する保護機能は組み込まれているか?

ステップ4:開発ツール

プログラミング言語やフレームワークには、さまざまな長所と短所があります。機能、スピード、信頼性などの要求に応じて、ある言語やフレームワークを選択することができます。 


しかし、最速のスループットを求めるのであれば、C/C++をお勧めします。最高のサードパーティ・ライブラリ・サポートを求めるならば、Pythonを使いましょう。

ステップ5:コード化、リファクタリング、テスト、さらにコード化

開発プラットフォームが決まれば、いよいよコーディングの開始です。組込みシステムは、ハードウェアとソフトウェアのリソースが限られた繊細なデバイスであることを忘れないでください。そのため、アプリケーションのセキュリティとパフォーマンスに関するベストプラクティスを念頭に置くことが非常に重要です。

コードレビューは、コードの最適化や潜在的なバグの発見に役立ちます。また、可能な限り厳密なテストを行う必要があります。本番環境でデバイスが遭遇する可能性のあるすべてのテストケースを網羅したリストを作成してください。

ステップ6:保守・サポート

他のアプリケーションやデバイスと同じように、組込み機器のライフサイクルは、出荷してインストールしただけでは終わりません。製品として使用されるようになると、新しいユースケースが発見され、新しい機能を追加する必要が出てきます。また、報告されたバグがあれば、新しいファームウェアのアップデートが必要になることもあります。

トップレベルの組み込み用プログラミング言語

IEEEやTIOBEのように、プログラミング言語を人気や使用率でランキングしている信頼できる組織はたくさんあります。しかし、TIOBEIEEE Spectrumのどちらのランキングを見ても、共通のテーマがあることに気がつきます。

トップ3の言語は常にC、Python、Javaです。2021年7月のTIOBE指数では、1位がC、2位がJava、3位がPythonとなっています。IEEE Spectrumの組み込み用プログラミング言語のランキングによると、順位は以下の通り。Python、Java、Cの順になっています。

Java、C、Pythonで書かれたファームウェアの違いは?

言語によって、メモリ、OSとのやりとり、ランタイムの管理方法が異なります。例えば、Javaアプリケーションは、Java Virtual Machine(JVM)と呼ばれる特殊なランタイム環境で実行されます。 

C/C++のメモリ管理は手動ですが、JavaやPythonでは、自分でメモリ管理をする必要はなく、言語がやってくれます。さらに、C言語では自分でゴミを回収しなければなりません。つまり、動的にメモリを確保した場合、自分で明示的に解放しなければなりません。そうしないと、メモリリークになってしまいます。JavaやPythonでは、ガベージコレクションは自動的に行われます。しかし、C言語は本質的にJavaやPythonよりもはるかに高速です。

CやJava(特にC)がPythonに比べて不足している点は、サードパーティ製のライブラリが利用できることです。Pythonはライブラリのデータベースが充実しているので、開発者が特定の機能を追加するのが非常に簡単です。

総合的に見て、もしCを選択する。

  • オペレーティングシステムやハードウェアとの低レベルのインターフェースが欲しい。
  • 最高のパフォーマンスを発揮したい。
  • 開発者はC/C++に精通しています。
  • 外部・第三者のサポートをあまり必要としない。

場合はPythonで行く。

  • データサイエンスや機械学習のアルゴリズムを実装したい方。
  • サードパーティ製の豊富なライブラリをサポートしたい。
  • 使いやすさのためにスピードを犠牲にしても構わない。
  • 組込み開発の経験が少ない方
  • OSやハードウェアとの低レベルのインターフェースは必要ありません。

以下のような場合にはJavaを使用します。

  • あなたはウェブアプリケーションを作っています。
  • C言語よりも開発しやすく、かつPythonよりもパフォーマンスが高いものを求めている。
  • 外部・第三者のサポートをあまり必要としない。

C言語は、組み込み開発のトップチョイスではなくなりつつあるのでしょうか?

高レベル言語は、C言語では避けることのできない複雑な要素を抽象化することで、コーディングを容易にします。しかし、より洗練された言語やフレームワークが発売されたにもかかわらず、何十年もの間、C言語は組み込み開発のトップチョイスであり続けました。 

それは、C言語が提供するスピード、パフォーマンス、そして信頼性が、いまだに他の追随を許さないからです。PythonやJavaのエコシステムの大部分(ランタイム、言語、コンパイラなど)がC言語で書かれていることが、この言語の効率性と耐久性を物語っています。

とはいえ、Pythonのようなシンプルな言語を好む新人開発者にとって、C言語は学ぶのが難しいのは否めません。そのため、C言語の開発者コミュニティの規模は顕著に減少しています。また、AIやMLアプリケーションの開発が増加していることから、C言語よりもPythonを選択する人が増えています。

忘れてはならないのは、Pythonが組み込み用プログラミング言語のトップ 争いに加わったのはごく最近のことだということです。確かに、Pythonの採用率は今後も上昇するかもしれませんが、私たちはC言語が組み込み開発のトップチョイスであることに変わりはないと考えています。

C/C++でセキュアコーディングが重要な理由

C/C++でコードを書いていると、多くの問題が発生します。有効なデータを指していないメモリアドレスにアクセスしたり、スレッド間で誤ってデータを共有したりすると、アプリケーション全体がクラッシュしてしまいます。 

組込み機器の場合、これらの影響ははるかに大きく、機器の内部でクラッシュが発生すると、より大きな機械が機能しなくなる可能性があるからです。例えば、自動車のオートパイロット・モジュールが停止すると、車は障害物を避けることができなくなります。

C/C++アプリケーションの安全なコーディングが非常に重要である理由は以下の通りです。

  • 安全でないメモリ処理(ヌルポインタ、メモリ破壊、スタックオーバーフロー、バッファオーバーフロー、ヒープオーバーフロー)により、アプリケーション全体がクラッシュする。
  • ポインターはCとC++の一部です。ポインターを扱うには、細心の注意と、基本的な概念に関する深い知識が必要です。
  • ガベージコレクションは手動で行われます。そのため、プログラマは動的に割り当てられたメモリを明示的に削除しなければなりません。解放されていないメモリや正しく解放されていないメモリは、メモリリークや破壊の原因となります。
  • 高度なデータ構造(ハッシュテーブル、セットなど)のための標準化されたAPIがないため、開発者は車輪の再発明を余儀なくされています。

開発者が C/C++ アプリケーションの安全なコーディングのトレーニングを受けることは絶対に必要です。Secure Code Warrior では、開発者が安全な C/C++ コードを書けるようにするためのインタラクティブな課題、courses 、評価を含む、個別のlearning platform を提供しています。ここでは、一般的な概念的なトレーニングに手を加えたものではなく、言語やフレームワークに特化した内容となっています。

自動車・輸送業界への貢献をご覧ください。また、embed-focusコーディングチャレンジに挑戦して、開発者が安全な組込みアプリケーションを作成するために当社がどのように支援しているかを体験してください。

リソースを見る
リソースを見る

この記事では、組み込み機器と組み込みシステム開発の概要について説明します。

ご興味がおありですか?

Secure Code Warrior は、開発者がスキルを向上させる際に、セキュアコーディングをポジティブで魅力的な体験にします。私たちは、セキュリティに精通した開発者がコネクテッドワールドの日常的なスーパーヒーローになるように、それぞれのコーダーが好む学習経路に沿って指導します。

Secure Code Warrior は、ソフトウェア開発ライフサイクル全体にわたってコードを保護し、サイバーセキュリティを最優先とする企業文化を創造するために、お客様の組織を支援します。AppSec マネージャー、開発者、CISO、またはセキュリティに関わるすべての人が、安全でないコードに関連するリスクを減らすことができるよう、支援します。

デモを予約する
シェアする
著者
Secure Code Warrior
2021年8月11日発行

Secure Code Warrior は、開発者がスキルを向上させる際に、セキュアコーディングをポジティブで魅力的な体験にします。私たちは、セキュリティに精通した開発者がコネクテッドワールドの日常的なスーパーヒーローになるように、それぞれのコーダーが好む学習経路に沿って指導します。

Secure Code Warrior は、セキュアなコードを書くためのスキルを開発者に提供することで、セキュリ ティを重視する開発者文化を構築する。当社の主力製品であるアジャイルLearning Platform は、開発者がセキュアなコードを記述するためのスキルを短期間で習得し、構築し、適用できるように、適切なスキルに基づくパスウェイ、実践的なmissions 、状況に応じたツールを提供します。

シェアする

Secure Code Warrior 、私たちは常にトレーニングの範囲を拡大しています。組み込み機器の開発者やセキュリティ管理者が安全な組み込みシステムを構築できるようにするために、私たちは組み込みシステムのセキュリティの世界を利用しています。この記事では、安全な組込みシステムを構築するために、開発者やアーキテクトが知っておくべき重要なことをご紹介します。 

組み込み機器とは、マイクロプロセッサを搭載したハードウェアとソフトウェアを備えた、独立した計算ユニットのことです。一般的には、独立して、または大規模なシステムの一部として、専用の機能を実行するために使用されます。

組み込み機器・システムとは?

組込み機器は、最小限のハードウェアとソフトウェアで構成され、特定の機能を実行するようにプログラムされた、目的に応じたコンピューティングシステムです。目的に応じて、組込み機器の複雑さは様々です。 

組込みシステムでは、複雑な処理を行う必要がある場合、複数のプロセッサと様々な周辺機器を接続してハードウェアを構成します。しかし、単純な作業を行うために設計されたシステムであれば、1つのマイクロコントローラーで十分です。 

組込みシステムには、ユーザーインターフェースを持たないブラックボックスもあれば、グラフィカルで詳細なユーザーインターフェースを持つものもあります。

組み込み機器の例

組込み機器は、航空宇宙からコンピュータ、家電からヘルスケアまで、さまざまな業界で利用されています。以下はその一例です。

  • エアコンの中のサーモスタット。 
  • 小さな電気部品と小さなOSで構成されたフィットネストラッカーは、健康状態を記録したり同期したりするだけの機能しかありません。
  • デジタルクライメートコントロールシステム。
  • 飛行機の中のナビゲーションシステム。
  • デジタル時計。
  • GPS機器です。
  • 電子レンジをはじめとする家電製品に搭載されているWi-Fiコンポーネント。
  • 血圧計、心拍計。
  • クラウドにデータを送信するMRI装置内のネットワークコンポーネント。

ノートパソコンは組み込み機器ですか?

短い答え。長い答え:いいえ。

組み込み機器とは、その機能を実現するために必要なソフトウェアとハードウェアのすべてを内包したものです。ノートパソコンは、さまざまなハードウェアを金属製のボディに収め、その機能を実現するために必要なすべてのソフトウェアを内包しています。

しかし、あらかじめ最低限の機能が定義されている一般的な組み込みシステムとは異なり、ノートパソコンはより汎用的で、さまざまな活動に使用することができます。

モノのインターネットの中の組み込み機器

IoTの中心となるのは、組み込みシステムです。スマートな冷蔵庫をモバイル機器で操作できるのは、組み込み機器があるからです。セキュリティシステムに組み込まれたデバイスのおかげで、1,000マイル離れたところからでもCCTVの映像を見ることができます。また、ボタンを押して車を自動運転にするときも、舞台裏では組み込み機器がすべての魔法をかけているのです。

組込みソフトウェア開発のライフサイクル

組込み機器のソフトウェア開発の典型的なライフサイクルには、次のようなステップがあります。

ステップ1:目的と要件

組込み機器には、明確で精密な機能セットがあります。そのため、開発に着手する前に、その目的や要件を明確にすることが非常に重要です。システムの詳細な設計書を作成することをお勧めします。などの質問に答えてください。

  • どのような機能を持ったデバイスなのか?
  • 他の機械の一部になるのか、それとも単独で機能するのか。
  • デバイスにはユーザーインターフェースが必要ですか?その場合、コマンドラインで十分なのか、それともグラフィカルなUIが必要なのか?
  • サイズ、コスト、消費電力など、どのような制限を設けているか?
  • パフォーマンスのベンチマークはありますか?例えば、デバイスはリアルタイムで応答することが期待されているのか、それとも一定のしきい値内で応答することが期待されているのか。

ステップ2:システムアーキテクチャ

固有のシステム要件を特定したら、システムアーキテクチャを設計する準備が整いました。などの質問に答えます。

  • デバイスの開発にはどのようなハードウェアコンポーネントが必要ですか?これには、回路、プロセッサチップ、マイクロコントローラ、および必要な内部および外部の周辺機器の特定が含まれます。 
  • コンポーネントに必要な電力はどのくらいですか? 
  • インターネットに接続されますか?
  • デバイスを他のデバイスや大きなマシンに接続するために、どのようなインターフェースを追加/開発する必要がありますか?
  • 暗号化をどのように実装するのか?(アルゴリズムや鍵の保管方法などを考えます。)
  • 潜在的な脆弱性、エクスプロイト、マルウェアをどのように特定し、回避するのか?

ステップ3: オペレーティングシステムの選択

オペレーティングシステムの選択は、組み込みアプリケーションの有効性を左右することが多いので、賢く選択しましょう。Windows for IoTは、グラフィックスでは高い評価を得ていますが、ハードウェアのサポートが不足しています。Embedded LinuxとAndroidは無償ですが、VxWorksとWindows for IoTはライセンス費用がかかります。 

LinuxやAndroidのようなオープンソースのシステムでは、開発者がカーネルをコントロールできますが、プロプライエタリなシステムでは、カーネルのデフォルトの機能セットがすべてです。 

OSを選択する際には、セキュリティへの影響を考慮することも重要です。脆弱性が発見された場合に備えて、セキュリティパッチはすぐにリリースされるか?最も一般的なサイバーセキュリティ攻撃に対する保護機能は組み込まれているか?

ステップ4:開発ツール

プログラミング言語やフレームワークには、さまざまな長所と短所があります。機能、スピード、信頼性などの要求に応じて、ある言語やフレームワークを選択することができます。 


しかし、最速のスループットを求めるのであれば、C/C++をお勧めします。最高のサードパーティ・ライブラリ・サポートを求めるならば、Pythonを使いましょう。

ステップ5:コード化、リファクタリング、テスト、さらにコード化

開発プラットフォームが決まれば、いよいよコーディングの開始です。組込みシステムは、ハードウェアとソフトウェアのリソースが限られた繊細なデバイスであることを忘れないでください。そのため、アプリケーションのセキュリティとパフォーマンスに関するベストプラクティスを念頭に置くことが非常に重要です。

コードレビューは、コードの最適化や潜在的なバグの発見に役立ちます。また、可能な限り厳密なテストを行う必要があります。本番環境でデバイスが遭遇する可能性のあるすべてのテストケースを網羅したリストを作成してください。

ステップ6:保守・サポート

他のアプリケーションやデバイスと同じように、組込み機器のライフサイクルは、出荷してインストールしただけでは終わりません。製品として使用されるようになると、新しいユースケースが発見され、新しい機能を追加する必要が出てきます。また、報告されたバグがあれば、新しいファームウェアのアップデートが必要になることもあります。

トップレベルの組み込み用プログラミング言語

IEEEやTIOBEのように、プログラミング言語を人気や使用率でランキングしている信頼できる組織はたくさんあります。しかし、TIOBEIEEE Spectrumのどちらのランキングを見ても、共通のテーマがあることに気がつきます。

トップ3の言語は常にC、Python、Javaです。2021年7月のTIOBE指数では、1位がC、2位がJava、3位がPythonとなっています。IEEE Spectrumの組み込み用プログラミング言語のランキングによると、順位は以下の通り。Python、Java、Cの順になっています。

Java、C、Pythonで書かれたファームウェアの違いは?

言語によって、メモリ、OSとのやりとり、ランタイムの管理方法が異なります。例えば、Javaアプリケーションは、Java Virtual Machine(JVM)と呼ばれる特殊なランタイム環境で実行されます。 

C/C++のメモリ管理は手動ですが、JavaやPythonでは、自分でメモリ管理をする必要はなく、言語がやってくれます。さらに、C言語では自分でゴミを回収しなければなりません。つまり、動的にメモリを確保した場合、自分で明示的に解放しなければなりません。そうしないと、メモリリークになってしまいます。JavaやPythonでは、ガベージコレクションは自動的に行われます。しかし、C言語は本質的にJavaやPythonよりもはるかに高速です。

CやJava(特にC)がPythonに比べて不足している点は、サードパーティ製のライブラリが利用できることです。Pythonはライブラリのデータベースが充実しているので、開発者が特定の機能を追加するのが非常に簡単です。

総合的に見て、もしCを選択する。

  • オペレーティングシステムやハードウェアとの低レベルのインターフェースが欲しい。
  • 最高のパフォーマンスを発揮したい。
  • 開発者はC/C++に精通しています。
  • 外部・第三者のサポートをあまり必要としない。

場合はPythonで行く。

  • データサイエンスや機械学習のアルゴリズムを実装したい方。
  • サードパーティ製の豊富なライブラリをサポートしたい。
  • 使いやすさのためにスピードを犠牲にしても構わない。
  • 組込み開発の経験が少ない方
  • OSやハードウェアとの低レベルのインターフェースは必要ありません。

以下のような場合にはJavaを使用します。

  • あなたはウェブアプリケーションを作っています。
  • C言語よりも開発しやすく、かつPythonよりもパフォーマンスが高いものを求めている。
  • 外部・第三者のサポートをあまり必要としない。

C言語は、組み込み開発のトップチョイスではなくなりつつあるのでしょうか?

高レベル言語は、C言語では避けることのできない複雑な要素を抽象化することで、コーディングを容易にします。しかし、より洗練された言語やフレームワークが発売されたにもかかわらず、何十年もの間、C言語は組み込み開発のトップチョイスであり続けました。 

それは、C言語が提供するスピード、パフォーマンス、そして信頼性が、いまだに他の追随を許さないからです。PythonやJavaのエコシステムの大部分(ランタイム、言語、コンパイラなど)がC言語で書かれていることが、この言語の効率性と耐久性を物語っています。

とはいえ、Pythonのようなシンプルな言語を好む新人開発者にとって、C言語は学ぶのが難しいのは否めません。そのため、C言語の開発者コミュニティの規模は顕著に減少しています。また、AIやMLアプリケーションの開発が増加していることから、C言語よりもPythonを選択する人が増えています。

忘れてはならないのは、Pythonが組み込み用プログラミング言語のトップ 争いに加わったのはごく最近のことだということです。確かに、Pythonの採用率は今後も上昇するかもしれませんが、私たちはC言語が組み込み開発のトップチョイスであることに変わりはないと考えています。

C/C++でセキュアコーディングが重要な理由

C/C++でコードを書いていると、多くの問題が発生します。有効なデータを指していないメモリアドレスにアクセスしたり、スレッド間で誤ってデータを共有したりすると、アプリケーション全体がクラッシュしてしまいます。 

組込み機器の場合、これらの影響ははるかに大きく、機器の内部でクラッシュが発生すると、より大きな機械が機能しなくなる可能性があるからです。例えば、自動車のオートパイロット・モジュールが停止すると、車は障害物を避けることができなくなります。

C/C++アプリケーションの安全なコーディングが非常に重要である理由は以下の通りです。

  • 安全でないメモリ処理(ヌルポインタ、メモリ破壊、スタックオーバーフロー、バッファオーバーフロー、ヒープオーバーフロー)により、アプリケーション全体がクラッシュする。
  • ポインターはCとC++の一部です。ポインターを扱うには、細心の注意と、基本的な概念に関する深い知識が必要です。
  • ガベージコレクションは手動で行われます。そのため、プログラマは動的に割り当てられたメモリを明示的に削除しなければなりません。解放されていないメモリや正しく解放されていないメモリは、メモリリークや破壊の原因となります。
  • 高度なデータ構造(ハッシュテーブル、セットなど)のための標準化されたAPIがないため、開発者は車輪の再発明を余儀なくされています。

開発者が C/C++ アプリケーションの安全なコーディングのトレーニングを受けることは絶対に必要です。Secure Code Warrior では、開発者が安全な C/C++ コードを書けるようにするためのインタラクティブな課題、courses 、評価を含む、個別のlearning platform を提供しています。ここでは、一般的な概念的なトレーニングに手を加えたものではなく、言語やフレームワークに特化した内容となっています。

自動車・輸送業界への貢献をご覧ください。また、embed-focusコーディングチャレンジに挑戦して、開発者が安全な組込みアプリケーションを作成するために当社がどのように支援しているかを体験してください。

リソースを見る
リソースを見る

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

弊社製品や関連するセキュアコーディングのトピックに関する情報をお送りする許可をお願いします。当社は、お客様の個人情報を細心の注意を払って取り扱い、マーケティング目的で他社に販売することは決してありません。

送信
フォームを送信するには、「Analytics」のCookieを有効にしてください。完了したら、再度無効にしてください。

Secure Code Warrior 、私たちは常にトレーニングの範囲を拡大しています。組み込み機器の開発者やセキュリティ管理者が安全な組み込みシステムを構築できるようにするために、私たちは組み込みシステムのセキュリティの世界を利用しています。この記事では、安全な組込みシステムを構築するために、開発者やアーキテクトが知っておくべき重要なことをご紹介します。 

組み込み機器とは、マイクロプロセッサを搭載したハードウェアとソフトウェアを備えた、独立した計算ユニットのことです。一般的には、独立して、または大規模なシステムの一部として、専用の機能を実行するために使用されます。

組み込み機器・システムとは?

組込み機器は、最小限のハードウェアとソフトウェアで構成され、特定の機能を実行するようにプログラムされた、目的に応じたコンピューティングシステムです。目的に応じて、組込み機器の複雑さは様々です。 

組込みシステムでは、複雑な処理を行う必要がある場合、複数のプロセッサと様々な周辺機器を接続してハードウェアを構成します。しかし、単純な作業を行うために設計されたシステムであれば、1つのマイクロコントローラーで十分です。 

組込みシステムには、ユーザーインターフェースを持たないブラックボックスもあれば、グラフィカルで詳細なユーザーインターフェースを持つものもあります。

組み込み機器の例

組込み機器は、航空宇宙からコンピュータ、家電からヘルスケアまで、さまざまな業界で利用されています。以下はその一例です。

  • エアコンの中のサーモスタット。 
  • 小さな電気部品と小さなOSで構成されたフィットネストラッカーは、健康状態を記録したり同期したりするだけの機能しかありません。
  • デジタルクライメートコントロールシステム。
  • 飛行機の中のナビゲーションシステム。
  • デジタル時計。
  • GPS機器です。
  • 電子レンジをはじめとする家電製品に搭載されているWi-Fiコンポーネント。
  • 血圧計、心拍計。
  • クラウドにデータを送信するMRI装置内のネットワークコンポーネント。

ノートパソコンは組み込み機器ですか?

短い答え。長い答え:いいえ。

組み込み機器とは、その機能を実現するために必要なソフトウェアとハードウェアのすべてを内包したものです。ノートパソコンは、さまざまなハードウェアを金属製のボディに収め、その機能を実現するために必要なすべてのソフトウェアを内包しています。

しかし、あらかじめ最低限の機能が定義されている一般的な組み込みシステムとは異なり、ノートパソコンはより汎用的で、さまざまな活動に使用することができます。

モノのインターネットの中の組み込み機器

IoTの中心となるのは、組み込みシステムです。スマートな冷蔵庫をモバイル機器で操作できるのは、組み込み機器があるからです。セキュリティシステムに組み込まれたデバイスのおかげで、1,000マイル離れたところからでもCCTVの映像を見ることができます。また、ボタンを押して車を自動運転にするときも、舞台裏では組み込み機器がすべての魔法をかけているのです。

組込みソフトウェア開発のライフサイクル

組込み機器のソフトウェア開発の典型的なライフサイクルには、次のようなステップがあります。

ステップ1:目的と要件

組込み機器には、明確で精密な機能セットがあります。そのため、開発に着手する前に、その目的や要件を明確にすることが非常に重要です。システムの詳細な設計書を作成することをお勧めします。などの質問に答えてください。

  • どのような機能を持ったデバイスなのか?
  • 他の機械の一部になるのか、それとも単独で機能するのか。
  • デバイスにはユーザーインターフェースが必要ですか?その場合、コマンドラインで十分なのか、それともグラフィカルなUIが必要なのか?
  • サイズ、コスト、消費電力など、どのような制限を設けているか?
  • パフォーマンスのベンチマークはありますか?例えば、デバイスはリアルタイムで応答することが期待されているのか、それとも一定のしきい値内で応答することが期待されているのか。

ステップ2:システムアーキテクチャ

固有のシステム要件を特定したら、システムアーキテクチャを設計する準備が整いました。などの質問に答えます。

  • デバイスの開発にはどのようなハードウェアコンポーネントが必要ですか?これには、回路、プロセッサチップ、マイクロコントローラ、および必要な内部および外部の周辺機器の特定が含まれます。 
  • コンポーネントに必要な電力はどのくらいですか? 
  • インターネットに接続されますか?
  • デバイスを他のデバイスや大きなマシンに接続するために、どのようなインターフェースを追加/開発する必要がありますか?
  • 暗号化をどのように実装するのか?(アルゴリズムや鍵の保管方法などを考えます。)
  • 潜在的な脆弱性、エクスプロイト、マルウェアをどのように特定し、回避するのか?

ステップ3: オペレーティングシステムの選択

オペレーティングシステムの選択は、組み込みアプリケーションの有効性を左右することが多いので、賢く選択しましょう。Windows for IoTは、グラフィックスでは高い評価を得ていますが、ハードウェアのサポートが不足しています。Embedded LinuxとAndroidは無償ですが、VxWorksとWindows for IoTはライセンス費用がかかります。 

LinuxやAndroidのようなオープンソースのシステムでは、開発者がカーネルをコントロールできますが、プロプライエタリなシステムでは、カーネルのデフォルトの機能セットがすべてです。 

OSを選択する際には、セキュリティへの影響を考慮することも重要です。脆弱性が発見された場合に備えて、セキュリティパッチはすぐにリリースされるか?最も一般的なサイバーセキュリティ攻撃に対する保護機能は組み込まれているか?

ステップ4:開発ツール

プログラミング言語やフレームワークには、さまざまな長所と短所があります。機能、スピード、信頼性などの要求に応じて、ある言語やフレームワークを選択することができます。 


しかし、最速のスループットを求めるのであれば、C/C++をお勧めします。最高のサードパーティ・ライブラリ・サポートを求めるならば、Pythonを使いましょう。

ステップ5:コード化、リファクタリング、テスト、さらにコード化

開発プラットフォームが決まれば、いよいよコーディングの開始です。組込みシステムは、ハードウェアとソフトウェアのリソースが限られた繊細なデバイスであることを忘れないでください。そのため、アプリケーションのセキュリティとパフォーマンスに関するベストプラクティスを念頭に置くことが非常に重要です。

コードレビューは、コードの最適化や潜在的なバグの発見に役立ちます。また、可能な限り厳密なテストを行う必要があります。本番環境でデバイスが遭遇する可能性のあるすべてのテストケースを網羅したリストを作成してください。

ステップ6:保守・サポート

他のアプリケーションやデバイスと同じように、組込み機器のライフサイクルは、出荷してインストールしただけでは終わりません。製品として使用されるようになると、新しいユースケースが発見され、新しい機能を追加する必要が出てきます。また、報告されたバグがあれば、新しいファームウェアのアップデートが必要になることもあります。

トップレベルの組み込み用プログラミング言語

IEEEやTIOBEのように、プログラミング言語を人気や使用率でランキングしている信頼できる組織はたくさんあります。しかし、TIOBEIEEE Spectrumのどちらのランキングを見ても、共通のテーマがあることに気がつきます。

トップ3の言語は常にC、Python、Javaです。2021年7月のTIOBE指数では、1位がC、2位がJava、3位がPythonとなっています。IEEE Spectrumの組み込み用プログラミング言語のランキングによると、順位は以下の通り。Python、Java、Cの順になっています。

Java、C、Pythonで書かれたファームウェアの違いは?

言語によって、メモリ、OSとのやりとり、ランタイムの管理方法が異なります。例えば、Javaアプリケーションは、Java Virtual Machine(JVM)と呼ばれる特殊なランタイム環境で実行されます。 

C/C++のメモリ管理は手動ですが、JavaやPythonでは、自分でメモリ管理をする必要はなく、言語がやってくれます。さらに、C言語では自分でゴミを回収しなければなりません。つまり、動的にメモリを確保した場合、自分で明示的に解放しなければなりません。そうしないと、メモリリークになってしまいます。JavaやPythonでは、ガベージコレクションは自動的に行われます。しかし、C言語は本質的にJavaやPythonよりもはるかに高速です。

CやJava(特にC)がPythonに比べて不足している点は、サードパーティ製のライブラリが利用できることです。Pythonはライブラリのデータベースが充実しているので、開発者が特定の機能を追加するのが非常に簡単です。

総合的に見て、もしCを選択する。

  • オペレーティングシステムやハードウェアとの低レベルのインターフェースが欲しい。
  • 最高のパフォーマンスを発揮したい。
  • 開発者はC/C++に精通しています。
  • 外部・第三者のサポートをあまり必要としない。

場合はPythonで行く。

  • データサイエンスや機械学習のアルゴリズムを実装したい方。
  • サードパーティ製の豊富なライブラリをサポートしたい。
  • 使いやすさのためにスピードを犠牲にしても構わない。
  • 組込み開発の経験が少ない方
  • OSやハードウェアとの低レベルのインターフェースは必要ありません。

以下のような場合にはJavaを使用します。

  • あなたはウェブアプリケーションを作っています。
  • C言語よりも開発しやすく、かつPythonよりもパフォーマンスが高いものを求めている。
  • 外部・第三者のサポートをあまり必要としない。

C言語は、組み込み開発のトップチョイスではなくなりつつあるのでしょうか?

高レベル言語は、C言語では避けることのできない複雑な要素を抽象化することで、コーディングを容易にします。しかし、より洗練された言語やフレームワークが発売されたにもかかわらず、何十年もの間、C言語は組み込み開発のトップチョイスであり続けました。 

それは、C言語が提供するスピード、パフォーマンス、そして信頼性が、いまだに他の追随を許さないからです。PythonやJavaのエコシステムの大部分(ランタイム、言語、コンパイラなど)がC言語で書かれていることが、この言語の効率性と耐久性を物語っています。

とはいえ、Pythonのようなシンプルな言語を好む新人開発者にとって、C言語は学ぶのが難しいのは否めません。そのため、C言語の開発者コミュニティの規模は顕著に減少しています。また、AIやMLアプリケーションの開発が増加していることから、C言語よりもPythonを選択する人が増えています。

忘れてはならないのは、Pythonが組み込み用プログラミング言語のトップ 争いに加わったのはごく最近のことだということです。確かに、Pythonの採用率は今後も上昇するかもしれませんが、私たちはC言語が組み込み開発のトップチョイスであることに変わりはないと考えています。

C/C++でセキュアコーディングが重要な理由

C/C++でコードを書いていると、多くの問題が発生します。有効なデータを指していないメモリアドレスにアクセスしたり、スレッド間で誤ってデータを共有したりすると、アプリケーション全体がクラッシュしてしまいます。 

組込み機器の場合、これらの影響ははるかに大きく、機器の内部でクラッシュが発生すると、より大きな機械が機能しなくなる可能性があるからです。例えば、自動車のオートパイロット・モジュールが停止すると、車は障害物を避けることができなくなります。

C/C++アプリケーションの安全なコーディングが非常に重要である理由は以下の通りです。

  • 安全でないメモリ処理(ヌルポインタ、メモリ破壊、スタックオーバーフロー、バッファオーバーフロー、ヒープオーバーフロー)により、アプリケーション全体がクラッシュする。
  • ポインターはCとC++の一部です。ポインターを扱うには、細心の注意と、基本的な概念に関する深い知識が必要です。
  • ガベージコレクションは手動で行われます。そのため、プログラマは動的に割り当てられたメモリを明示的に削除しなければなりません。解放されていないメモリや正しく解放されていないメモリは、メモリリークや破壊の原因となります。
  • 高度なデータ構造(ハッシュテーブル、セットなど)のための標準化されたAPIがないため、開発者は車輪の再発明を余儀なくされています。

開発者が C/C++ アプリケーションの安全なコーディングのトレーニングを受けることは絶対に必要です。Secure Code Warrior では、開発者が安全な C/C++ コードを書けるようにするためのインタラクティブな課題、courses 、評価を含む、個別のlearning platform を提供しています。ここでは、一般的な概念的なトレーニングに手を加えたものではなく、言語やフレームワークに特化した内容となっています。

自動車・輸送業界への貢献をご覧ください。また、embed-focusコーディングチャレンジに挑戦して、開発者が安全な組込みアプリケーションを作成するために当社がどのように支援しているかを体験してください。

リソースにアクセス

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

Secure Code Warrior は、ソフトウェア開発ライフサイクル全体にわたってコードを保護し、サイバーセキュリティを最優先とする企業文化を創造するために、お客様の組織を支援します。AppSec マネージャー、開発者、CISO、またはセキュリティに関わるすべての人が、安全でないコードに関連するリスクを減らすことができるよう、支援します。

レポートを見るデモを予約する
PDFをダウンロード
リソースを見る
シェアする
ご興味がおありですか?

シェアする
著者
Secure Code Warrior
2021年8月11日発行

Secure Code Warrior は、開発者がスキルを向上させる際に、セキュアコーディングをポジティブで魅力的な体験にします。私たちは、セキュリティに精通した開発者がコネクテッドワールドの日常的なスーパーヒーローになるように、それぞれのコーダーが好む学習経路に沿って指導します。

Secure Code Warrior は、セキュアなコードを書くためのスキルを開発者に提供することで、セキュリ ティを重視する開発者文化を構築する。当社の主力製品であるアジャイルLearning Platform は、開発者がセキュアなコードを記述するためのスキルを短期間で習得し、構築し、適用できるように、適切なスキルに基づくパスウェイ、実践的なmissions 、状況に応じたツールを提供します。

シェアする

Secure Code Warrior 、私たちは常にトレーニングの範囲を拡大しています。組み込み機器の開発者やセキュリティ管理者が安全な組み込みシステムを構築できるようにするために、私たちは組み込みシステムのセキュリティの世界を利用しています。この記事では、安全な組込みシステムを構築するために、開発者やアーキテクトが知っておくべき重要なことをご紹介します。 

組み込み機器とは、マイクロプロセッサを搭載したハードウェアとソフトウェアを備えた、独立した計算ユニットのことです。一般的には、独立して、または大規模なシステムの一部として、専用の機能を実行するために使用されます。

組み込み機器・システムとは?

組込み機器は、最小限のハードウェアとソフトウェアで構成され、特定の機能を実行するようにプログラムされた、目的に応じたコンピューティングシステムです。目的に応じて、組込み機器の複雑さは様々です。 

組込みシステムでは、複雑な処理を行う必要がある場合、複数のプロセッサと様々な周辺機器を接続してハードウェアを構成します。しかし、単純な作業を行うために設計されたシステムであれば、1つのマイクロコントローラーで十分です。 

組込みシステムには、ユーザーインターフェースを持たないブラックボックスもあれば、グラフィカルで詳細なユーザーインターフェースを持つものもあります。

組み込み機器の例

組込み機器は、航空宇宙からコンピュータ、家電からヘルスケアまで、さまざまな業界で利用されています。以下はその一例です。

  • エアコンの中のサーモスタット。 
  • 小さな電気部品と小さなOSで構成されたフィットネストラッカーは、健康状態を記録したり同期したりするだけの機能しかありません。
  • デジタルクライメートコントロールシステム。
  • 飛行機の中のナビゲーションシステム。
  • デジタル時計。
  • GPS機器です。
  • 電子レンジをはじめとする家電製品に搭載されているWi-Fiコンポーネント。
  • 血圧計、心拍計。
  • クラウドにデータを送信するMRI装置内のネットワークコンポーネント。

ノートパソコンは組み込み機器ですか?

短い答え。長い答え:いいえ。

組み込み機器とは、その機能を実現するために必要なソフトウェアとハードウェアのすべてを内包したものです。ノートパソコンは、さまざまなハードウェアを金属製のボディに収め、その機能を実現するために必要なすべてのソフトウェアを内包しています。

しかし、あらかじめ最低限の機能が定義されている一般的な組み込みシステムとは異なり、ノートパソコンはより汎用的で、さまざまな活動に使用することができます。

モノのインターネットの中の組み込み機器

IoTの中心となるのは、組み込みシステムです。スマートな冷蔵庫をモバイル機器で操作できるのは、組み込み機器があるからです。セキュリティシステムに組み込まれたデバイスのおかげで、1,000マイル離れたところからでもCCTVの映像を見ることができます。また、ボタンを押して車を自動運転にするときも、舞台裏では組み込み機器がすべての魔法をかけているのです。

組込みソフトウェア開発のライフサイクル

組込み機器のソフトウェア開発の典型的なライフサイクルには、次のようなステップがあります。

ステップ1:目的と要件

組込み機器には、明確で精密な機能セットがあります。そのため、開発に着手する前に、その目的や要件を明確にすることが非常に重要です。システムの詳細な設計書を作成することをお勧めします。などの質問に答えてください。

  • どのような機能を持ったデバイスなのか?
  • 他の機械の一部になるのか、それとも単独で機能するのか。
  • デバイスにはユーザーインターフェースが必要ですか?その場合、コマンドラインで十分なのか、それともグラフィカルなUIが必要なのか?
  • サイズ、コスト、消費電力など、どのような制限を設けているか?
  • パフォーマンスのベンチマークはありますか?例えば、デバイスはリアルタイムで応答することが期待されているのか、それとも一定のしきい値内で応答することが期待されているのか。

ステップ2:システムアーキテクチャ

固有のシステム要件を特定したら、システムアーキテクチャを設計する準備が整いました。などの質問に答えます。

  • デバイスの開発にはどのようなハードウェアコンポーネントが必要ですか?これには、回路、プロセッサチップ、マイクロコントローラ、および必要な内部および外部の周辺機器の特定が含まれます。 
  • コンポーネントに必要な電力はどのくらいですか? 
  • インターネットに接続されますか?
  • デバイスを他のデバイスや大きなマシンに接続するために、どのようなインターフェースを追加/開発する必要がありますか?
  • 暗号化をどのように実装するのか?(アルゴリズムや鍵の保管方法などを考えます。)
  • 潜在的な脆弱性、エクスプロイト、マルウェアをどのように特定し、回避するのか?

ステップ3: オペレーティングシステムの選択

オペレーティングシステムの選択は、組み込みアプリケーションの有効性を左右することが多いので、賢く選択しましょう。Windows for IoTは、グラフィックスでは高い評価を得ていますが、ハードウェアのサポートが不足しています。Embedded LinuxとAndroidは無償ですが、VxWorksとWindows for IoTはライセンス費用がかかります。 

LinuxやAndroidのようなオープンソースのシステムでは、開発者がカーネルをコントロールできますが、プロプライエタリなシステムでは、カーネルのデフォルトの機能セットがすべてです。 

OSを選択する際には、セキュリティへの影響を考慮することも重要です。脆弱性が発見された場合に備えて、セキュリティパッチはすぐにリリースされるか?最も一般的なサイバーセキュリティ攻撃に対する保護機能は組み込まれているか?

ステップ4:開発ツール

プログラミング言語やフレームワークには、さまざまな長所と短所があります。機能、スピード、信頼性などの要求に応じて、ある言語やフレームワークを選択することができます。 


しかし、最速のスループットを求めるのであれば、C/C++をお勧めします。最高のサードパーティ・ライブラリ・サポートを求めるならば、Pythonを使いましょう。

ステップ5:コード化、リファクタリング、テスト、さらにコード化

開発プラットフォームが決まれば、いよいよコーディングの開始です。組込みシステムは、ハードウェアとソフトウェアのリソースが限られた繊細なデバイスであることを忘れないでください。そのため、アプリケーションのセキュリティとパフォーマンスに関するベストプラクティスを念頭に置くことが非常に重要です。

コードレビューは、コードの最適化や潜在的なバグの発見に役立ちます。また、可能な限り厳密なテストを行う必要があります。本番環境でデバイスが遭遇する可能性のあるすべてのテストケースを網羅したリストを作成してください。

ステップ6:保守・サポート

他のアプリケーションやデバイスと同じように、組込み機器のライフサイクルは、出荷してインストールしただけでは終わりません。製品として使用されるようになると、新しいユースケースが発見され、新しい機能を追加する必要が出てきます。また、報告されたバグがあれば、新しいファームウェアのアップデートが必要になることもあります。

トップレベルの組み込み用プログラミング言語

IEEEやTIOBEのように、プログラミング言語を人気や使用率でランキングしている信頼できる組織はたくさんあります。しかし、TIOBEIEEE Spectrumのどちらのランキングを見ても、共通のテーマがあることに気がつきます。

トップ3の言語は常にC、Python、Javaです。2021年7月のTIOBE指数では、1位がC、2位がJava、3位がPythonとなっています。IEEE Spectrumの組み込み用プログラミング言語のランキングによると、順位は以下の通り。Python、Java、Cの順になっています。

Java、C、Pythonで書かれたファームウェアの違いは?

言語によって、メモリ、OSとのやりとり、ランタイムの管理方法が異なります。例えば、Javaアプリケーションは、Java Virtual Machine(JVM)と呼ばれる特殊なランタイム環境で実行されます。 

C/C++のメモリ管理は手動ですが、JavaやPythonでは、自分でメモリ管理をする必要はなく、言語がやってくれます。さらに、C言語では自分でゴミを回収しなければなりません。つまり、動的にメモリを確保した場合、自分で明示的に解放しなければなりません。そうしないと、メモリリークになってしまいます。JavaやPythonでは、ガベージコレクションは自動的に行われます。しかし、C言語は本質的にJavaやPythonよりもはるかに高速です。

CやJava(特にC)がPythonに比べて不足している点は、サードパーティ製のライブラリが利用できることです。Pythonはライブラリのデータベースが充実しているので、開発者が特定の機能を追加するのが非常に簡単です。

総合的に見て、もしCを選択する。

  • オペレーティングシステムやハードウェアとの低レベルのインターフェースが欲しい。
  • 最高のパフォーマンスを発揮したい。
  • 開発者はC/C++に精通しています。
  • 外部・第三者のサポートをあまり必要としない。

場合はPythonで行く。

  • データサイエンスや機械学習のアルゴリズムを実装したい方。
  • サードパーティ製の豊富なライブラリをサポートしたい。
  • 使いやすさのためにスピードを犠牲にしても構わない。
  • 組込み開発の経験が少ない方
  • OSやハードウェアとの低レベルのインターフェースは必要ありません。

以下のような場合にはJavaを使用します。

  • あなたはウェブアプリケーションを作っています。
  • C言語よりも開発しやすく、かつPythonよりもパフォーマンスが高いものを求めている。
  • 外部・第三者のサポートをあまり必要としない。

C言語は、組み込み開発のトップチョイスではなくなりつつあるのでしょうか?

高レベル言語は、C言語では避けることのできない複雑な要素を抽象化することで、コーディングを容易にします。しかし、より洗練された言語やフレームワークが発売されたにもかかわらず、何十年もの間、C言語は組み込み開発のトップチョイスであり続けました。 

それは、C言語が提供するスピード、パフォーマンス、そして信頼性が、いまだに他の追随を許さないからです。PythonやJavaのエコシステムの大部分(ランタイム、言語、コンパイラなど)がC言語で書かれていることが、この言語の効率性と耐久性を物語っています。

とはいえ、Pythonのようなシンプルな言語を好む新人開発者にとって、C言語は学ぶのが難しいのは否めません。そのため、C言語の開発者コミュニティの規模は顕著に減少しています。また、AIやMLアプリケーションの開発が増加していることから、C言語よりもPythonを選択する人が増えています。

忘れてはならないのは、Pythonが組み込み用プログラミング言語のトップ 争いに加わったのはごく最近のことだということです。確かに、Pythonの採用率は今後も上昇するかもしれませんが、私たちはC言語が組み込み開発のトップチョイスであることに変わりはないと考えています。

C/C++でセキュアコーディングが重要な理由

C/C++でコードを書いていると、多くの問題が発生します。有効なデータを指していないメモリアドレスにアクセスしたり、スレッド間で誤ってデータを共有したりすると、アプリケーション全体がクラッシュしてしまいます。 

組込み機器の場合、これらの影響ははるかに大きく、機器の内部でクラッシュが発生すると、より大きな機械が機能しなくなる可能性があるからです。例えば、自動車のオートパイロット・モジュールが停止すると、車は障害物を避けることができなくなります。

C/C++アプリケーションの安全なコーディングが非常に重要である理由は以下の通りです。

  • 安全でないメモリ処理(ヌルポインタ、メモリ破壊、スタックオーバーフロー、バッファオーバーフロー、ヒープオーバーフロー)により、アプリケーション全体がクラッシュする。
  • ポインターはCとC++の一部です。ポインターを扱うには、細心の注意と、基本的な概念に関する深い知識が必要です。
  • ガベージコレクションは手動で行われます。そのため、プログラマは動的に割り当てられたメモリを明示的に削除しなければなりません。解放されていないメモリや正しく解放されていないメモリは、メモリリークや破壊の原因となります。
  • 高度なデータ構造(ハッシュテーブル、セットなど)のための標準化されたAPIがないため、開発者は車輪の再発明を余儀なくされています。

開発者が C/C++ アプリケーションの安全なコーディングのトレーニングを受けることは絶対に必要です。Secure Code Warrior では、開発者が安全な C/C++ コードを書けるようにするためのインタラクティブな課題、courses 、評価を含む、個別のlearning platform を提供しています。ここでは、一般的な概念的なトレーニングに手を加えたものではなく、言語やフレームワークに特化した内容となっています。

自動車・輸送業界への貢献をご覧ください。また、embed-focusコーディングチャレンジに挑戦して、開発者が安全な組込みアプリケーションを作成するために当社がどのように支援しているかを体験してください。

目次

PDFをダウンロード
リソースを見る
ご興味がおありですか?

Secure Code Warrior は、開発者がスキルを向上させる際に、セキュアコーディングをポジティブで魅力的な体験にします。私たちは、セキュリティに精通した開発者がコネクテッドワールドの日常的なスーパーヒーローになるように、それぞれのコーダーが好む学習経路に沿って指導します。

Secure Code Warrior は、ソフトウェア開発ライフサイクル全体にわたってコードを保護し、サイバーセキュリティを最優先とする企業文化を創造するために、お客様の組織を支援します。AppSec マネージャー、開発者、CISO、またはセキュリティに関わるすべての人が、安全でないコードに関連するリスクを減らすことができるよう、支援します。

デモを予約するダウンロード
シェアする
リソース・ハブ

始めるためのリソース

その他の記事
リソース・ハブ

始めるためのリソース

その他の記事