
組込みデバイスと組込みシステム開発-概要
セキュア・コード・ウォリアーでは、常にトレーニング対象範囲の拡大を目指しています。組込み開発者とセキュリティ管理者が安全な組込みシステムを構築できるようにするために、私たちは組込みシステム・セキュリティの世界に参入しています。この投稿では、開発者とアーキテクトが安全な組み込みシステムを構築するために知っておくべき重要なことを紹介します。
組み込みデバイスは、独自のマイクロプロセッサベースのハードウェアとソフトウェアを備えた独立したコンピューティングユニットです。これらは通常、専用の機能を実行するために単独で、または大規模なシステムの一部として使用されます。
組み込みデバイスとシステムとは
組み込み機器は、特定の機能を実行するようにプログラムされた、最小限のハードウェアとソフトウェアを備えた専用のコンピューティングシステムです。目的に応じて、組み込みデバイスの複雑さはさまざまです。
組み込みシステムが複雑でリソースを大量に消費する操作を実行する必要がある場合、そのハードウェアは、さまざまな相互接続された周辺機器を備えた複数のプロセッサで構成されている場合があります。ただし、単純なタスクを実行するように設計されている場合は、マイクロコントローラが 1 つしかない場合もあります。
組み込みシステムの中には、ユーザーインターフェースのないブラックボックス型のものもあれば、詳細なグラフィカルユーザーインターフェースを備えているものもあります。
組み込みデバイスの例
組み込み機器は、航空宇宙からコンピューティング、家電製品から医療まで、さまざまな業界で使用されています。以下にいくつか例を挙げます。
- エアコン内のサーモスタット。
- 小さなオペレーティングシステムを実行する小さな電気部品を備えたフィットネストラッカーは、健康統計の記録と同期以外に何もできません。
- デジタル気候制御システム。
- 航空機内のナビゲーションシステム。
- デジタル時計。
- GPS デバイス。
- 電子レンジやその他の家庭用電化製品内のWi-Fiコンポーネント。
- 血圧と心拍のモニター。
- クラウドにデータを送信する MRI 装置内のネットワークコンポーネント。
ラップトップは組み込みデバイスですか?
簡単な答え:いいえ。長い答え:
当然のことながら、組み込みデバイスには、その機能を実行するために必要なすべてのソフトウェアとハードウェアがカプセル化されています。ラップトップは実際、さまざまなハードウェアコンポーネントを金属製のボディに包み、その機能セットを提供するために必要なすべてのソフトウェアを網羅しています。
ただし、あらかじめ定義された最小限の機能セットしか備えていない一般的な組み込みシステムとは異なり、ラップトップはより汎用性が高く、さまざまなアクティビティに使用できます。
IoT(モノのインターネット)の組み込みデバイス
組み込みシステムは IoT の中心です。スマート冷蔵庫は組み込みデバイスなので、モバイルデバイスを介して制御できます。セキュリティシステムに組み込まれたデバイスで、何千マイルも離れた場所から監視カメラの映像を見ることができます。そして、ボタンを押して車を自動操縦にすると、舞台裏では魔法のような機能をすべて果たす組み込みデバイスです。
組み込みソフトウェア開発ライフサイクル
組み込みデバイスの一般的なソフトウェア開発ライフサイクルには、以下のステップが含まれます。
ステップ 1: 目的と要件
組み込みデバイスには、明確で正確な機能セットがあります。そのため、開発を始める前にその目的と要件を明確に述べることが非常に重要です。システムの詳細な設計文書を作成することをおすすめします。次のような質問に答えてください。
- デバイスはどのような機能を実行しますか?
- それは別のマシンの一部になるのでしょうか、それとも単独で機能するのでしょうか?
- デバイスにはユーザーインターフェイスが必要ですか?「はい」の場合、コマンドラインで十分ですか、それともグラフィカルな UI が必要ですか?
- デバイスはどのサイズ、コスト、または消費電力の制限に従う必要がありますか?
- パフォーマンスベンチマークはありますか?たとえば、デバイスはリアルタイムに応答することが期待されているのか、それとも特定の閾値内で応答することが期待されているのか。
ステップ 2: システムアーキテクチャ
独自のシステム要件を特定したら、システムアーキテクチャを設計する準備が整います。次のような質問に答えてください。
- デバイスの開発にはどのようなハードウェアコンポーネントが必要ですか?これには、回路、プロセッサチップ、マイクロコントローラのほか、必要な内部および外部周辺機器の識別が含まれます。
- コンポーネントにはどのくらいの電力が必要ですか?
- デバイスはインターネットに接続されますか?
- デバイスを他のデバイス、またはより大きなマシンに接続できるようにするには、どのインターフェースを追加/開発する必要がありますか?
- どのように暗号化を実装しますか?(アルゴリズム、キーストレージなどを考えてみてください)
- 潜在的な脆弱性、エクスプロイト、マルウェアをどのように特定して回避しますか?
ステップ 3: オペレーティングシステムを選択する
多くの場合、オペレーティングシステムの選択によって組み込みアプリケーションの有効性が決まるため、賢明に選択してください。Windows for IoT はグラフィックスの点では高いかもしれませんが、ハードウェアのサポートはありません。組み込みLinuxとAndroidは無料ですが、VxWorksとWindows for IoTにはライセンスコストがかかります。
Linux や Android などのオープンソースシステムでは、開発者がカーネルをより細かく制御できますが、プロプライエタリシステムでは、カーネルのデフォルト機能セットだけで作業できます。
オペレーティングシステムを選択する際には、セキュリティへの影響を考慮することも重要です。脆弱性が発見された場合に備えて、セキュリティパッチはすぐにリリースされますか?最も一般的なサイバーセキュリティ攻撃に対する保護機能が組み込まれていますか?
ステップ 4: 開発ツール
さまざまなプログラミング言語とフレームワークには、さまざまな長所と短所があります。機能、速度、信頼性の要件に応じて、ある言語/フレームワークを他の言語/フレームワークよりも選択できます。
アプリケーションが Web ベースで、高いパフォーマンスを求める場合は、Java を使用してください。
ただし、最速のスループットが必要な場合は、C/C++ を使用してください。サードパーティライブラリのサポートを最高にしたいなら Python を選びましょう。
ステップ 5: コーディング、リファクタリング、テスト、さらにコーディングを行う
開発プラットフォームを決定したら、コーディングを開始する準備が整います。組み込みシステムは、ハードウェアとソフトウェアのリソースが限られている機密性の高いデバイスであることを忘れないでください。したがって、アプリケーションのセキュリティとパフォーマンスに関するベストプラクティスを念頭に置くことは極めて重要です。
コードレビューは、コードを最適化し、潜在的なバグを特定するのに役立ちます。また、できる限り厳密にテストする必要があります。デバイスを本番環境で使用する場合に発生する可能性のあるすべてのテストケースを網羅したリストを作成してください。
ステップ 6: メンテナンスとサポート
他のアプリケーション/デバイスと同様に、組み込みデバイスの出荷とインストールが完了してもライフサイクルは終了しません。デバイスが実稼働環境で使用されるにつれて、新しいユースケースが特定され、新しい機能を追加する必要があります。バグが報告された場合は、新しいファームウェアアップデートのリリースが必要になる場合もあります。
トップ組み込みプログラミング言語
IEEEやTIOBEなど、プログラミング言語を人気や用途でランク付けしている評判の良い組織はたくさんあります。ただし、チェックするかどうかに関係なく TIOBEインデックス、または IEEE スペクトラム、共通のテーマに気づくでしょう。
上位3つの言語は常にC、Python、およびJavaです。2021 年 7 月の TIOBE インデックスでは、C は #1、Java は #2、Python は #3 にランクされています。IEEE Spectrum の組み込みプログラミング言語のランキングによると、Python、Java、C の順になっています。
Java、C、Python で書かれたファームウェアはどう違うのですか?
メモリ、OS とのやり取り、ランタイムの管理方法は、言語によって異なります。例えば、Java アプリケーションは Java 仮想マシン (JVM) と呼ばれる特殊なランタイム環境で実行されます。
C/C++ でのメモリー管理は手動で行いますが、Java や Python ではメモリー管理について自分で心配する必要はありません。言語が代わりにやってくれます。さらに、C ではゴミを自分で収集する必要があります。つまり、メモリの一部を動的に割り当てる場合は、自分で明示的にメモリを解放する必要があります。そうしないと、メモリー・リークにつながります。Java または Python では、ガベージコレクションは自動的に行われます。ただし、C のほうが Java や Python よりも本質的にずっと高速です。
CとJava (特にC) がPythonと比較して欠けていることの1つは、サードパーティのライブラリが利用できることです。Python には豊富なライブラリーのデータベースがあり、開発者が特定の機能を追加するのがずっと簡単になっています。
全体として、次の場合は C を選択してください。
- オペレーティングシステムとハードウェアとの低レベルのインターフェースが必要です。
- 可能な限り最高のパフォーマンスを望んでいます。
- 開発者はC/C++に熟練しています。
- 外部/サードパーティのサポートはあまり必要ありません。
次のような場合は Python をお使いください。
- データサイエンスまたは機械学習アルゴリズムを実装したい。
- 豊富なサードパーティライブラリサポートが必要です。
- 使いやすさを優先してスピードをトレードオフしても問題ありません。
- 組み込み開発の経験は限られています。
- OS やハードウェアとの低レベルのインターフェースは必要ありません。
次の場合は Java を利用してください。
- Web アプリケーションを構築しています。
- C よりも開発しやすくしたいが、Python よりもパフォーマンスも高くしたい。
- 外部/サードパーティのサポートはあまり必要ありません。
Cが組み込み開発のトップチョイスになるのは徐々に止まるだろうか?
高水準言語は、C 言語では避けられない複雑さを抽象化することで、コーディングをより簡単にします。しかし、より洗練された言語やフレームワークがリリースされたにもかかわらず、何十年もの間、C は組み込み開発における最上位の選択肢であり続けています。
これは、提供する速度、パフォーマンス、信頼性がまだ他に類を見ないためです。Python と Java エコシステムの大部分 (ランタイム、言語、コンパイラを含む) が C で記述されているという事実は、C 言語の効率性と耐久性を物語っています。
そうは言っても、Python のようなシンプルな言語を好む新しい開発者にとって、C を学ぶのは間違いなく難しいです。これにより、C 開発者コミュニティの規模は著しく縮小しています。AI や ML アプリケーションの開発が盛んになったことで、C よりも Python を選択する人が増えています。これは単に、ライブラリサポートが充実しているという理由だけです。
Pythonが最近になってようやくその一部になったことを覚えておくことが重要です トップ組み込みプログラミング言語 ディベート。はい、その採用は今後数年間増加し続ける可能性がありますが、C が組み込み開発の最有力候補であり続けるとは考えていません。
C/C++ で安全なコーディングが重要な理由
C/C++ でコードを書いていると、多くのことがうまくいかないことがあります。有効なデータを指さなくなったメモリアドレスにアクセスしたり、スレッド間でデータを誤って共有したりすると、アプリケーション全体がクラッシュする可能性があります。
組み込みデバイスの場合、内部でクラッシュが発生すると、はるかに大きなマシンが機能しなくなる可能性があるため、これらの影響ははるかに深刻です。例えば、自動車内の自動操縦モジュールが停止すると、自動車は障害物を回避できなくなります。
C/C++ アプリケーションの安全なコーディングが非常に重要である理由は他にもあります。
- 安全でないメモリ処理 (ヌルポインタ、メモリ破損、スタックオーバーフロー、バッファオーバーフロー、ヒープオーバーフロー) は、アプリケーション全体をクラッシュさせます。
- ポインタは C と C++ の一部です。それらを扱うには細心の注意と、基礎となる概念に関する深い知識が必要です。
- ガベージコレクションは手動で行います。そのため、プログラマーは動的に割り当てられたメモリーを明示的に削除する必要があります。メモリを解放しなかったり、不適切に解放したりすると、メモリリークやメモリ破損が発生する可能性があります。
- 高度なデータ構造 (ハッシュテーブル、セットなど) 用の標準化された API が不足しているため、開発者は一からやり直す必要に迫られています。
開発者がC/C++アプリケーションの安全なコーディングのトレーニングを受けることは絶対に重要です。Secure Code Warrior は、開発者が安全な C/C++ コードを書けるようにする、インタラクティブなチャレンジ、コース、アセスメントを備えた、パーソナライズされた学習プラットフォームを提供します。ここでは、一般的な概念トレーニングの微調整だけでなく、言語:フレームワーク固有のコンテンツについて説明しています。
チェックアウト 自動車および輸送産業への支援方法。または試してみてください エンベッド・フォーカス・コーディングの課題 今日は、開発者がどのように安全な組み込みアプリケーションを作成できるようにしているかを体験してください!
Secure Code Warrior convierte la programación segura en una experiencia positiva y atractiva a medida que los desarrolladores mejoran sus habilidades. Guía a cada programador por la ruta de aprendizaje que desea, para que los desarrolladores con habilidades de seguridad puedan convertirse en superhéroes en el mundo conectado en el que vivimos.

Secure Code Warrior le ayuda a proteger el código a lo largo de todo el ciclo de vida del desarrollo de software y a crear una cultura que dé prioridad a la ciberseguridad. Tanto si es gestor de seguridad de aplicaciones, desarrollador, CISO o responsable de seguridad, le ayudamos a reducir los riesgos asociados al código inseguro.
Reservar una demostraciónSecure Code Warrior convierte la programación segura en una experiencia positiva y atractiva a medida que los desarrolladores mejoran sus habilidades. Guía a cada programador por la ruta de aprendizaje que desea, para que los desarrolladores con habilidades de seguridad puedan convertirse en superhéroes en el mundo conectado en el que vivimos.
Este artículo ha sido escrito por el equipo de expertos del sector de Secure Code Warrior. Su objetivo es que los desarrolladores adquieran los conocimientos y habilidades necesarios para crear software seguro desde el principio. Aprovecha los profundos conocimientos especializados sobre la práctica de la codificación segura, las tendencias del sector y las perspectivas del mundo real.


セキュア・コード・ウォリアーでは、常にトレーニング対象範囲の拡大を目指しています。組込み開発者とセキュリティ管理者が安全な組込みシステムを構築できるようにするために、私たちは組込みシステム・セキュリティの世界に参入しています。この投稿では、開発者とアーキテクトが安全な組み込みシステムを構築するために知っておくべき重要なことを紹介します。
組み込みデバイスは、独自のマイクロプロセッサベースのハードウェアとソフトウェアを備えた独立したコンピューティングユニットです。これらは通常、専用の機能を実行するために単独で、または大規模なシステムの一部として使用されます。
組み込みデバイスとシステムとは
組み込み機器は、特定の機能を実行するようにプログラムされた、最小限のハードウェアとソフトウェアを備えた専用のコンピューティングシステムです。目的に応じて、組み込みデバイスの複雑さはさまざまです。
組み込みシステムが複雑でリソースを大量に消費する操作を実行する必要がある場合、そのハードウェアは、さまざまな相互接続された周辺機器を備えた複数のプロセッサで構成されている場合があります。ただし、単純なタスクを実行するように設計されている場合は、マイクロコントローラが 1 つしかない場合もあります。
組み込みシステムの中には、ユーザーインターフェースのないブラックボックス型のものもあれば、詳細なグラフィカルユーザーインターフェースを備えているものもあります。
組み込みデバイスの例
組み込み機器は、航空宇宙からコンピューティング、家電製品から医療まで、さまざまな業界で使用されています。以下にいくつか例を挙げます。
- エアコン内のサーモスタット。
- 小さなオペレーティングシステムを実行する小さな電気部品を備えたフィットネストラッカーは、健康統計の記録と同期以外に何もできません。
- デジタル気候制御システム。
- 航空機内のナビゲーションシステム。
- デジタル時計。
- GPS デバイス。
- 電子レンジやその他の家庭用電化製品内のWi-Fiコンポーネント。
- 血圧と心拍のモニター。
- クラウドにデータを送信する MRI 装置内のネットワークコンポーネント。
ラップトップは組み込みデバイスですか?
簡単な答え:いいえ。長い答え:
当然のことながら、組み込みデバイスには、その機能を実行するために必要なすべてのソフトウェアとハードウェアがカプセル化されています。ラップトップは実際、さまざまなハードウェアコンポーネントを金属製のボディに包み、その機能セットを提供するために必要なすべてのソフトウェアを網羅しています。
ただし、あらかじめ定義された最小限の機能セットしか備えていない一般的な組み込みシステムとは異なり、ラップトップはより汎用性が高く、さまざまなアクティビティに使用できます。
IoT(モノのインターネット)の組み込みデバイス
組み込みシステムは IoT の中心です。スマート冷蔵庫は組み込みデバイスなので、モバイルデバイスを介して制御できます。セキュリティシステムに組み込まれたデバイスで、何千マイルも離れた場所から監視カメラの映像を見ることができます。そして、ボタンを押して車を自動操縦にすると、舞台裏では魔法のような機能をすべて果たす組み込みデバイスです。
組み込みソフトウェア開発ライフサイクル
組み込みデバイスの一般的なソフトウェア開発ライフサイクルには、以下のステップが含まれます。
ステップ 1: 目的と要件
組み込みデバイスには、明確で正確な機能セットがあります。そのため、開発を始める前にその目的と要件を明確に述べることが非常に重要です。システムの詳細な設計文書を作成することをおすすめします。次のような質問に答えてください。
- デバイスはどのような機能を実行しますか?
- それは別のマシンの一部になるのでしょうか、それとも単独で機能するのでしょうか?
- デバイスにはユーザーインターフェイスが必要ですか?「はい」の場合、コマンドラインで十分ですか、それともグラフィカルな UI が必要ですか?
- デバイスはどのサイズ、コスト、または消費電力の制限に従う必要がありますか?
- パフォーマンスベンチマークはありますか?たとえば、デバイスはリアルタイムに応答することが期待されているのか、それとも特定の閾値内で応答することが期待されているのか。
ステップ 2: システムアーキテクチャ
独自のシステム要件を特定したら、システムアーキテクチャを設計する準備が整います。次のような質問に答えてください。
- デバイスの開発にはどのようなハードウェアコンポーネントが必要ですか?これには、回路、プロセッサチップ、マイクロコントローラのほか、必要な内部および外部周辺機器の識別が含まれます。
- コンポーネントにはどのくらいの電力が必要ですか?
- デバイスはインターネットに接続されますか?
- デバイスを他のデバイス、またはより大きなマシンに接続できるようにするには、どのインターフェースを追加/開発する必要がありますか?
- どのように暗号化を実装しますか?(アルゴリズム、キーストレージなどを考えてみてください)
- 潜在的な脆弱性、エクスプロイト、マルウェアをどのように特定して回避しますか?
ステップ 3: オペレーティングシステムを選択する
多くの場合、オペレーティングシステムの選択によって組み込みアプリケーションの有効性が決まるため、賢明に選択してください。Windows for IoT はグラフィックスの点では高いかもしれませんが、ハードウェアのサポートはありません。組み込みLinuxとAndroidは無料ですが、VxWorksとWindows for IoTにはライセンスコストがかかります。
Linux や Android などのオープンソースシステムでは、開発者がカーネルをより細かく制御できますが、プロプライエタリシステムでは、カーネルのデフォルト機能セットだけで作業できます。
オペレーティングシステムを選択する際には、セキュリティへの影響を考慮することも重要です。脆弱性が発見された場合に備えて、セキュリティパッチはすぐにリリースされますか?最も一般的なサイバーセキュリティ攻撃に対する保護機能が組み込まれていますか?
ステップ 4: 開発ツール
さまざまなプログラミング言語とフレームワークには、さまざまな長所と短所があります。機能、速度、信頼性の要件に応じて、ある言語/フレームワークを他の言語/フレームワークよりも選択できます。
アプリケーションが Web ベースで、高いパフォーマンスを求める場合は、Java を使用してください。
ただし、最速のスループットが必要な場合は、C/C++ を使用してください。サードパーティライブラリのサポートを最高にしたいなら Python を選びましょう。
ステップ 5: コーディング、リファクタリング、テスト、さらにコーディングを行う
開発プラットフォームを決定したら、コーディングを開始する準備が整います。組み込みシステムは、ハードウェアとソフトウェアのリソースが限られている機密性の高いデバイスであることを忘れないでください。したがって、アプリケーションのセキュリティとパフォーマンスに関するベストプラクティスを念頭に置くことは極めて重要です。
コードレビューは、コードを最適化し、潜在的なバグを特定するのに役立ちます。また、できる限り厳密にテストする必要があります。デバイスを本番環境で使用する場合に発生する可能性のあるすべてのテストケースを網羅したリストを作成してください。
ステップ 6: メンテナンスとサポート
他のアプリケーション/デバイスと同様に、組み込みデバイスの出荷とインストールが完了してもライフサイクルは終了しません。デバイスが実稼働環境で使用されるにつれて、新しいユースケースが特定され、新しい機能を追加する必要があります。バグが報告された場合は、新しいファームウェアアップデートのリリースが必要になる場合もあります。
トップ組み込みプログラミング言語
IEEEやTIOBEなど、プログラミング言語を人気や用途でランク付けしている評判の良い組織はたくさんあります。ただし、チェックするかどうかに関係なく TIOBEインデックス、または IEEE スペクトラム、共通のテーマに気づくでしょう。
上位3つの言語は常にC、Python、およびJavaです。2021 年 7 月の TIOBE インデックスでは、C は #1、Java は #2、Python は #3 にランクされています。IEEE Spectrum の組み込みプログラミング言語のランキングによると、Python、Java、C の順になっています。
Java、C、Python で書かれたファームウェアはどう違うのですか?
メモリ、OS とのやり取り、ランタイムの管理方法は、言語によって異なります。例えば、Java アプリケーションは Java 仮想マシン (JVM) と呼ばれる特殊なランタイム環境で実行されます。
C/C++ でのメモリー管理は手動で行いますが、Java や Python ではメモリー管理について自分で心配する必要はありません。言語が代わりにやってくれます。さらに、C ではゴミを自分で収集する必要があります。つまり、メモリの一部を動的に割り当てる場合は、自分で明示的にメモリを解放する必要があります。そうしないと、メモリー・リークにつながります。Java または Python では、ガベージコレクションは自動的に行われます。ただし、C のほうが Java や Python よりも本質的にずっと高速です。
CとJava (特にC) がPythonと比較して欠けていることの1つは、サードパーティのライブラリが利用できることです。Python には豊富なライブラリーのデータベースがあり、開発者が特定の機能を追加するのがずっと簡単になっています。
全体として、次の場合は C を選択してください。
- オペレーティングシステムとハードウェアとの低レベルのインターフェースが必要です。
- 可能な限り最高のパフォーマンスを望んでいます。
- 開発者はC/C++に熟練しています。
- 外部/サードパーティのサポートはあまり必要ありません。
次のような場合は Python をお使いください。
- データサイエンスまたは機械学習アルゴリズムを実装したい。
- 豊富なサードパーティライブラリサポートが必要です。
- 使いやすさを優先してスピードをトレードオフしても問題ありません。
- 組み込み開発の経験は限られています。
- OS やハードウェアとの低レベルのインターフェースは必要ありません。
次の場合は Java を利用してください。
- Web アプリケーションを構築しています。
- C よりも開発しやすくしたいが、Python よりもパフォーマンスも高くしたい。
- 外部/サードパーティのサポートはあまり必要ありません。
Cが組み込み開発のトップチョイスになるのは徐々に止まるだろうか?
高水準言語は、C 言語では避けられない複雑さを抽象化することで、コーディングをより簡単にします。しかし、より洗練された言語やフレームワークがリリースされたにもかかわらず、何十年もの間、C は組み込み開発における最上位の選択肢であり続けています。
これは、提供する速度、パフォーマンス、信頼性がまだ他に類を見ないためです。Python と Java エコシステムの大部分 (ランタイム、言語、コンパイラを含む) が C で記述されているという事実は、C 言語の効率性と耐久性を物語っています。
そうは言っても、Python のようなシンプルな言語を好む新しい開発者にとって、C を学ぶのは間違いなく難しいです。これにより、C 開発者コミュニティの規模は著しく縮小しています。AI や ML アプリケーションの開発が盛んになったことで、C よりも Python を選択する人が増えています。これは単に、ライブラリサポートが充実しているという理由だけです。
Pythonが最近になってようやくその一部になったことを覚えておくことが重要です トップ組み込みプログラミング言語 ディベート。はい、その採用は今後数年間増加し続ける可能性がありますが、C が組み込み開発の最有力候補であり続けるとは考えていません。
C/C++ で安全なコーディングが重要な理由
C/C++ でコードを書いていると、多くのことがうまくいかないことがあります。有効なデータを指さなくなったメモリアドレスにアクセスしたり、スレッド間でデータを誤って共有したりすると、アプリケーション全体がクラッシュする可能性があります。
組み込みデバイスの場合、内部でクラッシュが発生すると、はるかに大きなマシンが機能しなくなる可能性があるため、これらの影響ははるかに深刻です。例えば、自動車内の自動操縦モジュールが停止すると、自動車は障害物を回避できなくなります。
C/C++ アプリケーションの安全なコーディングが非常に重要である理由は他にもあります。
- 安全でないメモリ処理 (ヌルポインタ、メモリ破損、スタックオーバーフロー、バッファオーバーフロー、ヒープオーバーフロー) は、アプリケーション全体をクラッシュさせます。
- ポインタは C と C++ の一部です。それらを扱うには細心の注意と、基礎となる概念に関する深い知識が必要です。
- ガベージコレクションは手動で行います。そのため、プログラマーは動的に割り当てられたメモリーを明示的に削除する必要があります。メモリを解放しなかったり、不適切に解放したりすると、メモリリークやメモリ破損が発生する可能性があります。
- 高度なデータ構造 (ハッシュテーブル、セットなど) 用の標準化された API が不足しているため、開発者は一からやり直す必要に迫られています。
開発者がC/C++アプリケーションの安全なコーディングのトレーニングを受けることは絶対に重要です。Secure Code Warrior は、開発者が安全な C/C++ コードを書けるようにする、インタラクティブなチャレンジ、コース、アセスメントを備えた、パーソナライズされた学習プラットフォームを提供します。ここでは、一般的な概念トレーニングの微調整だけでなく、言語:フレームワーク固有のコンテンツについて説明しています。
チェックアウト 自動車および輸送産業への支援方法。または試してみてください エンベッド・フォーカス・コーディングの課題 今日は、開発者がどのように安全な組み込みアプリケーションを作成できるようにしているかを体験してください!

セキュア・コード・ウォリアーでは、常にトレーニング対象範囲の拡大を目指しています。組込み開発者とセキュリティ管理者が安全な組込みシステムを構築できるようにするために、私たちは組込みシステム・セキュリティの世界に参入しています。この投稿では、開発者とアーキテクトが安全な組み込みシステムを構築するために知っておくべき重要なことを紹介します。
組み込みデバイスは、独自のマイクロプロセッサベースのハードウェアとソフトウェアを備えた独立したコンピューティングユニットです。これらは通常、専用の機能を実行するために単独で、または大規模なシステムの一部として使用されます。
組み込みデバイスとシステムとは
組み込み機器は、特定の機能を実行するようにプログラムされた、最小限のハードウェアとソフトウェアを備えた専用のコンピューティングシステムです。目的に応じて、組み込みデバイスの複雑さはさまざまです。
組み込みシステムが複雑でリソースを大量に消費する操作を実行する必要がある場合、そのハードウェアは、さまざまな相互接続された周辺機器を備えた複数のプロセッサで構成されている場合があります。ただし、単純なタスクを実行するように設計されている場合は、マイクロコントローラが 1 つしかない場合もあります。
組み込みシステムの中には、ユーザーインターフェースのないブラックボックス型のものもあれば、詳細なグラフィカルユーザーインターフェースを備えているものもあります。
組み込みデバイスの例
組み込み機器は、航空宇宙からコンピューティング、家電製品から医療まで、さまざまな業界で使用されています。以下にいくつか例を挙げます。
- エアコン内のサーモスタット。
- 小さなオペレーティングシステムを実行する小さな電気部品を備えたフィットネストラッカーは、健康統計の記録と同期以外に何もできません。
- デジタル気候制御システム。
- 航空機内のナビゲーションシステム。
- デジタル時計。
- GPS デバイス。
- 電子レンジやその他の家庭用電化製品内のWi-Fiコンポーネント。
- 血圧と心拍のモニター。
- クラウドにデータを送信する MRI 装置内のネットワークコンポーネント。
ラップトップは組み込みデバイスですか?
簡単な答え:いいえ。長い答え:
当然のことながら、組み込みデバイスには、その機能を実行するために必要なすべてのソフトウェアとハードウェアがカプセル化されています。ラップトップは実際、さまざまなハードウェアコンポーネントを金属製のボディに包み、その機能セットを提供するために必要なすべてのソフトウェアを網羅しています。
ただし、あらかじめ定義された最小限の機能セットしか備えていない一般的な組み込みシステムとは異なり、ラップトップはより汎用性が高く、さまざまなアクティビティに使用できます。
IoT(モノのインターネット)の組み込みデバイス
組み込みシステムは IoT の中心です。スマート冷蔵庫は組み込みデバイスなので、モバイルデバイスを介して制御できます。セキュリティシステムに組み込まれたデバイスで、何千マイルも離れた場所から監視カメラの映像を見ることができます。そして、ボタンを押して車を自動操縦にすると、舞台裏では魔法のような機能をすべて果たす組み込みデバイスです。
組み込みソフトウェア開発ライフサイクル
組み込みデバイスの一般的なソフトウェア開発ライフサイクルには、以下のステップが含まれます。
ステップ 1: 目的と要件
組み込みデバイスには、明確で正確な機能セットがあります。そのため、開発を始める前にその目的と要件を明確に述べることが非常に重要です。システムの詳細な設計文書を作成することをおすすめします。次のような質問に答えてください。
- デバイスはどのような機能を実行しますか?
- それは別のマシンの一部になるのでしょうか、それとも単独で機能するのでしょうか?
- デバイスにはユーザーインターフェイスが必要ですか?「はい」の場合、コマンドラインで十分ですか、それともグラフィカルな UI が必要ですか?
- デバイスはどのサイズ、コスト、または消費電力の制限に従う必要がありますか?
- パフォーマンスベンチマークはありますか?たとえば、デバイスはリアルタイムに応答することが期待されているのか、それとも特定の閾値内で応答することが期待されているのか。
ステップ 2: システムアーキテクチャ
独自のシステム要件を特定したら、システムアーキテクチャを設計する準備が整います。次のような質問に答えてください。
- デバイスの開発にはどのようなハードウェアコンポーネントが必要ですか?これには、回路、プロセッサチップ、マイクロコントローラのほか、必要な内部および外部周辺機器の識別が含まれます。
- コンポーネントにはどのくらいの電力が必要ですか?
- デバイスはインターネットに接続されますか?
- デバイスを他のデバイス、またはより大きなマシンに接続できるようにするには、どのインターフェースを追加/開発する必要がありますか?
- どのように暗号化を実装しますか?(アルゴリズム、キーストレージなどを考えてみてください)
- 潜在的な脆弱性、エクスプロイト、マルウェアをどのように特定して回避しますか?
ステップ 3: オペレーティングシステムを選択する
多くの場合、オペレーティングシステムの選択によって組み込みアプリケーションの有効性が決まるため、賢明に選択してください。Windows for IoT はグラフィックスの点では高いかもしれませんが、ハードウェアのサポートはありません。組み込みLinuxとAndroidは無料ですが、VxWorksとWindows for IoTにはライセンスコストがかかります。
Linux や Android などのオープンソースシステムでは、開発者がカーネルをより細かく制御できますが、プロプライエタリシステムでは、カーネルのデフォルト機能セットだけで作業できます。
オペレーティングシステムを選択する際には、セキュリティへの影響を考慮することも重要です。脆弱性が発見された場合に備えて、セキュリティパッチはすぐにリリースされますか?最も一般的なサイバーセキュリティ攻撃に対する保護機能が組み込まれていますか?
ステップ 4: 開発ツール
さまざまなプログラミング言語とフレームワークには、さまざまな長所と短所があります。機能、速度、信頼性の要件に応じて、ある言語/フレームワークを他の言語/フレームワークよりも選択できます。
アプリケーションが Web ベースで、高いパフォーマンスを求める場合は、Java を使用してください。
ただし、最速のスループットが必要な場合は、C/C++ を使用してください。サードパーティライブラリのサポートを最高にしたいなら Python を選びましょう。
ステップ 5: コーディング、リファクタリング、テスト、さらにコーディングを行う
開発プラットフォームを決定したら、コーディングを開始する準備が整います。組み込みシステムは、ハードウェアとソフトウェアのリソースが限られている機密性の高いデバイスであることを忘れないでください。したがって、アプリケーションのセキュリティとパフォーマンスに関するベストプラクティスを念頭に置くことは極めて重要です。
コードレビューは、コードを最適化し、潜在的なバグを特定するのに役立ちます。また、できる限り厳密にテストする必要があります。デバイスを本番環境で使用する場合に発生する可能性のあるすべてのテストケースを網羅したリストを作成してください。
ステップ 6: メンテナンスとサポート
他のアプリケーション/デバイスと同様に、組み込みデバイスの出荷とインストールが完了してもライフサイクルは終了しません。デバイスが実稼働環境で使用されるにつれて、新しいユースケースが特定され、新しい機能を追加する必要があります。バグが報告された場合は、新しいファームウェアアップデートのリリースが必要になる場合もあります。
トップ組み込みプログラミング言語
IEEEやTIOBEなど、プログラミング言語を人気や用途でランク付けしている評判の良い組織はたくさんあります。ただし、チェックするかどうかに関係なく TIOBEインデックス、または IEEE スペクトラム、共通のテーマに気づくでしょう。
上位3つの言語は常にC、Python、およびJavaです。2021 年 7 月の TIOBE インデックスでは、C は #1、Java は #2、Python は #3 にランクされています。IEEE Spectrum の組み込みプログラミング言語のランキングによると、Python、Java、C の順になっています。
Java、C、Python で書かれたファームウェアはどう違うのですか?
メモリ、OS とのやり取り、ランタイムの管理方法は、言語によって異なります。例えば、Java アプリケーションは Java 仮想マシン (JVM) と呼ばれる特殊なランタイム環境で実行されます。
C/C++ でのメモリー管理は手動で行いますが、Java や Python ではメモリー管理について自分で心配する必要はありません。言語が代わりにやってくれます。さらに、C ではゴミを自分で収集する必要があります。つまり、メモリの一部を動的に割り当てる場合は、自分で明示的にメモリを解放する必要があります。そうしないと、メモリー・リークにつながります。Java または Python では、ガベージコレクションは自動的に行われます。ただし、C のほうが Java や Python よりも本質的にずっと高速です。
CとJava (特にC) がPythonと比較して欠けていることの1つは、サードパーティのライブラリが利用できることです。Python には豊富なライブラリーのデータベースがあり、開発者が特定の機能を追加するのがずっと簡単になっています。
全体として、次の場合は C を選択してください。
- オペレーティングシステムとハードウェアとの低レベルのインターフェースが必要です。
- 可能な限り最高のパフォーマンスを望んでいます。
- 開発者はC/C++に熟練しています。
- 外部/サードパーティのサポートはあまり必要ありません。
次のような場合は Python をお使いください。
- データサイエンスまたは機械学習アルゴリズムを実装したい。
- 豊富なサードパーティライブラリサポートが必要です。
- 使いやすさを優先してスピードをトレードオフしても問題ありません。
- 組み込み開発の経験は限られています。
- OS やハードウェアとの低レベルのインターフェースは必要ありません。
次の場合は Java を利用してください。
- Web アプリケーションを構築しています。
- C よりも開発しやすくしたいが、Python よりもパフォーマンスも高くしたい。
- 外部/サードパーティのサポートはあまり必要ありません。
Cが組み込み開発のトップチョイスになるのは徐々に止まるだろうか?
高水準言語は、C 言語では避けられない複雑さを抽象化することで、コーディングをより簡単にします。しかし、より洗練された言語やフレームワークがリリースされたにもかかわらず、何十年もの間、C は組み込み開発における最上位の選択肢であり続けています。
これは、提供する速度、パフォーマンス、信頼性がまだ他に類を見ないためです。Python と Java エコシステムの大部分 (ランタイム、言語、コンパイラを含む) が C で記述されているという事実は、C 言語の効率性と耐久性を物語っています。
そうは言っても、Python のようなシンプルな言語を好む新しい開発者にとって、C を学ぶのは間違いなく難しいです。これにより、C 開発者コミュニティの規模は著しく縮小しています。AI や ML アプリケーションの開発が盛んになったことで、C よりも Python を選択する人が増えています。これは単に、ライブラリサポートが充実しているという理由だけです。
Pythonが最近になってようやくその一部になったことを覚えておくことが重要です トップ組み込みプログラミング言語 ディベート。はい、その採用は今後数年間増加し続ける可能性がありますが、C が組み込み開発の最有力候補であり続けるとは考えていません。
C/C++ で安全なコーディングが重要な理由
C/C++ でコードを書いていると、多くのことがうまくいかないことがあります。有効なデータを指さなくなったメモリアドレスにアクセスしたり、スレッド間でデータを誤って共有したりすると、アプリケーション全体がクラッシュする可能性があります。
組み込みデバイスの場合、内部でクラッシュが発生すると、はるかに大きなマシンが機能しなくなる可能性があるため、これらの影響ははるかに深刻です。例えば、自動車内の自動操縦モジュールが停止すると、自動車は障害物を回避できなくなります。
C/C++ アプリケーションの安全なコーディングが非常に重要である理由は他にもあります。
- 安全でないメモリ処理 (ヌルポインタ、メモリ破損、スタックオーバーフロー、バッファオーバーフロー、ヒープオーバーフロー) は、アプリケーション全体をクラッシュさせます。
- ポインタは C と C++ の一部です。それらを扱うには細心の注意と、基礎となる概念に関する深い知識が必要です。
- ガベージコレクションは手動で行います。そのため、プログラマーは動的に割り当てられたメモリーを明示的に削除する必要があります。メモリを解放しなかったり、不適切に解放したりすると、メモリリークやメモリ破損が発生する可能性があります。
- 高度なデータ構造 (ハッシュテーブル、セットなど) 用の標準化された API が不足しているため、開発者は一からやり直す必要に迫られています。
開発者がC/C++アプリケーションの安全なコーディングのトレーニングを受けることは絶対に重要です。Secure Code Warrior は、開発者が安全な C/C++ コードを書けるようにする、インタラクティブなチャレンジ、コース、アセスメントを備えた、パーソナライズされた学習プラットフォームを提供します。ここでは、一般的な概念トレーニングの微調整だけでなく、言語:フレームワーク固有のコンテンツについて説明しています。
チェックアウト 自動車および輸送産業への支援方法。または試してみてください エンベッド・フォーカス・コーディングの課題 今日は、開発者がどのように安全な組み込みアプリケーションを作成できるようにしているかを体験してください!

Haga clic en el siguiente enlace para descargar el PDF de este recurso.
Secure Code Warrior le ayuda a proteger el código a lo largo de todo el ciclo de vida del desarrollo de software y a crear una cultura que dé prioridad a la ciberseguridad. Tanto si es gestor de seguridad de aplicaciones, desarrollador, CISO o responsable de seguridad, le ayudamos a reducir los riesgos asociados al código inseguro.
Mostrar informeReservar una demostraciónSecure Code Warrior convierte la programación segura en una experiencia positiva y atractiva a medida que los desarrolladores mejoran sus habilidades. Guía a cada programador por la ruta de aprendizaje que desea, para que los desarrolladores con habilidades de seguridad puedan convertirse en superhéroes en el mundo conectado en el que vivimos.
Este artículo ha sido escrito por el equipo de expertos del sector de Secure Code Warrior. Su objetivo es que los desarrolladores adquieran los conocimientos y habilidades necesarios para crear software seguro desde el principio. Aprovecha los profundos conocimientos especializados sobre la práctica de la codificación segura, las tendencias del sector y las perspectivas del mundo real.
セキュア・コード・ウォリアーでは、常にトレーニング対象範囲の拡大を目指しています。組込み開発者とセキュリティ管理者が安全な組込みシステムを構築できるようにするために、私たちは組込みシステム・セキュリティの世界に参入しています。この投稿では、開発者とアーキテクトが安全な組み込みシステムを構築するために知っておくべき重要なことを紹介します。
組み込みデバイスは、独自のマイクロプロセッサベースのハードウェアとソフトウェアを備えた独立したコンピューティングユニットです。これらは通常、専用の機能を実行するために単独で、または大規模なシステムの一部として使用されます。
組み込みデバイスとシステムとは
組み込み機器は、特定の機能を実行するようにプログラムされた、最小限のハードウェアとソフトウェアを備えた専用のコンピューティングシステムです。目的に応じて、組み込みデバイスの複雑さはさまざまです。
組み込みシステムが複雑でリソースを大量に消費する操作を実行する必要がある場合、そのハードウェアは、さまざまな相互接続された周辺機器を備えた複数のプロセッサで構成されている場合があります。ただし、単純なタスクを実行するように設計されている場合は、マイクロコントローラが 1 つしかない場合もあります。
組み込みシステムの中には、ユーザーインターフェースのないブラックボックス型のものもあれば、詳細なグラフィカルユーザーインターフェースを備えているものもあります。
組み込みデバイスの例
組み込み機器は、航空宇宙からコンピューティング、家電製品から医療まで、さまざまな業界で使用されています。以下にいくつか例を挙げます。
- エアコン内のサーモスタット。
- 小さなオペレーティングシステムを実行する小さな電気部品を備えたフィットネストラッカーは、健康統計の記録と同期以外に何もできません。
- デジタル気候制御システム。
- 航空機内のナビゲーションシステム。
- デジタル時計。
- GPS デバイス。
- 電子レンジやその他の家庭用電化製品内のWi-Fiコンポーネント。
- 血圧と心拍のモニター。
- クラウドにデータを送信する MRI 装置内のネットワークコンポーネント。
ラップトップは組み込みデバイスですか?
簡単な答え:いいえ。長い答え:
当然のことながら、組み込みデバイスには、その機能を実行するために必要なすべてのソフトウェアとハードウェアがカプセル化されています。ラップトップは実際、さまざまなハードウェアコンポーネントを金属製のボディに包み、その機能セットを提供するために必要なすべてのソフトウェアを網羅しています。
ただし、あらかじめ定義された最小限の機能セットしか備えていない一般的な組み込みシステムとは異なり、ラップトップはより汎用性が高く、さまざまなアクティビティに使用できます。
IoT(モノのインターネット)の組み込みデバイス
組み込みシステムは IoT の中心です。スマート冷蔵庫は組み込みデバイスなので、モバイルデバイスを介して制御できます。セキュリティシステムに組み込まれたデバイスで、何千マイルも離れた場所から監視カメラの映像を見ることができます。そして、ボタンを押して車を自動操縦にすると、舞台裏では魔法のような機能をすべて果たす組み込みデバイスです。
組み込みソフトウェア開発ライフサイクル
組み込みデバイスの一般的なソフトウェア開発ライフサイクルには、以下のステップが含まれます。
ステップ 1: 目的と要件
組み込みデバイスには、明確で正確な機能セットがあります。そのため、開発を始める前にその目的と要件を明確に述べることが非常に重要です。システムの詳細な設計文書を作成することをおすすめします。次のような質問に答えてください。
- デバイスはどのような機能を実行しますか?
- それは別のマシンの一部になるのでしょうか、それとも単独で機能するのでしょうか?
- デバイスにはユーザーインターフェイスが必要ですか?「はい」の場合、コマンドラインで十分ですか、それともグラフィカルな UI が必要ですか?
- デバイスはどのサイズ、コスト、または消費電力の制限に従う必要がありますか?
- パフォーマンスベンチマークはありますか?たとえば、デバイスはリアルタイムに応答することが期待されているのか、それとも特定の閾値内で応答することが期待されているのか。
ステップ 2: システムアーキテクチャ
独自のシステム要件を特定したら、システムアーキテクチャを設計する準備が整います。次のような質問に答えてください。
- デバイスの開発にはどのようなハードウェアコンポーネントが必要ですか?これには、回路、プロセッサチップ、マイクロコントローラのほか、必要な内部および外部周辺機器の識別が含まれます。
- コンポーネントにはどのくらいの電力が必要ですか?
- デバイスはインターネットに接続されますか?
- デバイスを他のデバイス、またはより大きなマシンに接続できるようにするには、どのインターフェースを追加/開発する必要がありますか?
- どのように暗号化を実装しますか?(アルゴリズム、キーストレージなどを考えてみてください)
- 潜在的な脆弱性、エクスプロイト、マルウェアをどのように特定して回避しますか?
ステップ 3: オペレーティングシステムを選択する
多くの場合、オペレーティングシステムの選択によって組み込みアプリケーションの有効性が決まるため、賢明に選択してください。Windows for IoT はグラフィックスの点では高いかもしれませんが、ハードウェアのサポートはありません。組み込みLinuxとAndroidは無料ですが、VxWorksとWindows for IoTにはライセンスコストがかかります。
Linux や Android などのオープンソースシステムでは、開発者がカーネルをより細かく制御できますが、プロプライエタリシステムでは、カーネルのデフォルト機能セットだけで作業できます。
オペレーティングシステムを選択する際には、セキュリティへの影響を考慮することも重要です。脆弱性が発見された場合に備えて、セキュリティパッチはすぐにリリースされますか?最も一般的なサイバーセキュリティ攻撃に対する保護機能が組み込まれていますか?
ステップ 4: 開発ツール
さまざまなプログラミング言語とフレームワークには、さまざまな長所と短所があります。機能、速度、信頼性の要件に応じて、ある言語/フレームワークを他の言語/フレームワークよりも選択できます。
アプリケーションが Web ベースで、高いパフォーマンスを求める場合は、Java を使用してください。
ただし、最速のスループットが必要な場合は、C/C++ を使用してください。サードパーティライブラリのサポートを最高にしたいなら Python を選びましょう。
ステップ 5: コーディング、リファクタリング、テスト、さらにコーディングを行う
開発プラットフォームを決定したら、コーディングを開始する準備が整います。組み込みシステムは、ハードウェアとソフトウェアのリソースが限られている機密性の高いデバイスであることを忘れないでください。したがって、アプリケーションのセキュリティとパフォーマンスに関するベストプラクティスを念頭に置くことは極めて重要です。
コードレビューは、コードを最適化し、潜在的なバグを特定するのに役立ちます。また、できる限り厳密にテストする必要があります。デバイスを本番環境で使用する場合に発生する可能性のあるすべてのテストケースを網羅したリストを作成してください。
ステップ 6: メンテナンスとサポート
他のアプリケーション/デバイスと同様に、組み込みデバイスの出荷とインストールが完了してもライフサイクルは終了しません。デバイスが実稼働環境で使用されるにつれて、新しいユースケースが特定され、新しい機能を追加する必要があります。バグが報告された場合は、新しいファームウェアアップデートのリリースが必要になる場合もあります。
トップ組み込みプログラミング言語
IEEEやTIOBEなど、プログラミング言語を人気や用途でランク付けしている評判の良い組織はたくさんあります。ただし、チェックするかどうかに関係なく TIOBEインデックス、または IEEE スペクトラム、共通のテーマに気づくでしょう。
上位3つの言語は常にC、Python、およびJavaです。2021 年 7 月の TIOBE インデックスでは、C は #1、Java は #2、Python は #3 にランクされています。IEEE Spectrum の組み込みプログラミング言語のランキングによると、Python、Java、C の順になっています。
Java、C、Python で書かれたファームウェアはどう違うのですか?
メモリ、OS とのやり取り、ランタイムの管理方法は、言語によって異なります。例えば、Java アプリケーションは Java 仮想マシン (JVM) と呼ばれる特殊なランタイム環境で実行されます。
C/C++ でのメモリー管理は手動で行いますが、Java や Python ではメモリー管理について自分で心配する必要はありません。言語が代わりにやってくれます。さらに、C ではゴミを自分で収集する必要があります。つまり、メモリの一部を動的に割り当てる場合は、自分で明示的にメモリを解放する必要があります。そうしないと、メモリー・リークにつながります。Java または Python では、ガベージコレクションは自動的に行われます。ただし、C のほうが Java や Python よりも本質的にずっと高速です。
CとJava (特にC) がPythonと比較して欠けていることの1つは、サードパーティのライブラリが利用できることです。Python には豊富なライブラリーのデータベースがあり、開発者が特定の機能を追加するのがずっと簡単になっています。
全体として、次の場合は C を選択してください。
- オペレーティングシステムとハードウェアとの低レベルのインターフェースが必要です。
- 可能な限り最高のパフォーマンスを望んでいます。
- 開発者はC/C++に熟練しています。
- 外部/サードパーティのサポートはあまり必要ありません。
次のような場合は Python をお使いください。
- データサイエンスまたは機械学習アルゴリズムを実装したい。
- 豊富なサードパーティライブラリサポートが必要です。
- 使いやすさを優先してスピードをトレードオフしても問題ありません。
- 組み込み開発の経験は限られています。
- OS やハードウェアとの低レベルのインターフェースは必要ありません。
次の場合は Java を利用してください。
- Web アプリケーションを構築しています。
- C よりも開発しやすくしたいが、Python よりもパフォーマンスも高くしたい。
- 外部/サードパーティのサポートはあまり必要ありません。
Cが組み込み開発のトップチョイスになるのは徐々に止まるだろうか?
高水準言語は、C 言語では避けられない複雑さを抽象化することで、コーディングをより簡単にします。しかし、より洗練された言語やフレームワークがリリースされたにもかかわらず、何十年もの間、C は組み込み開発における最上位の選択肢であり続けています。
これは、提供する速度、パフォーマンス、信頼性がまだ他に類を見ないためです。Python と Java エコシステムの大部分 (ランタイム、言語、コンパイラを含む) が C で記述されているという事実は、C 言語の効率性と耐久性を物語っています。
そうは言っても、Python のようなシンプルな言語を好む新しい開発者にとって、C を学ぶのは間違いなく難しいです。これにより、C 開発者コミュニティの規模は著しく縮小しています。AI や ML アプリケーションの開発が盛んになったことで、C よりも Python を選択する人が増えています。これは単に、ライブラリサポートが充実しているという理由だけです。
Pythonが最近になってようやくその一部になったことを覚えておくことが重要です トップ組み込みプログラミング言語 ディベート。はい、その採用は今後数年間増加し続ける可能性がありますが、C が組み込み開発の最有力候補であり続けるとは考えていません。
C/C++ で安全なコーディングが重要な理由
C/C++ でコードを書いていると、多くのことがうまくいかないことがあります。有効なデータを指さなくなったメモリアドレスにアクセスしたり、スレッド間でデータを誤って共有したりすると、アプリケーション全体がクラッシュする可能性があります。
組み込みデバイスの場合、内部でクラッシュが発生すると、はるかに大きなマシンが機能しなくなる可能性があるため、これらの影響ははるかに深刻です。例えば、自動車内の自動操縦モジュールが停止すると、自動車は障害物を回避できなくなります。
C/C++ アプリケーションの安全なコーディングが非常に重要である理由は他にもあります。
- 安全でないメモリ処理 (ヌルポインタ、メモリ破損、スタックオーバーフロー、バッファオーバーフロー、ヒープオーバーフロー) は、アプリケーション全体をクラッシュさせます。
- ポインタは C と C++ の一部です。それらを扱うには細心の注意と、基礎となる概念に関する深い知識が必要です。
- ガベージコレクションは手動で行います。そのため、プログラマーは動的に割り当てられたメモリーを明示的に削除する必要があります。メモリを解放しなかったり、不適切に解放したりすると、メモリリークやメモリ破損が発生する可能性があります。
- 高度なデータ構造 (ハッシュテーブル、セットなど) 用の標準化された API が不足しているため、開発者は一からやり直す必要に迫られています。
開発者がC/C++アプリケーションの安全なコーディングのトレーニングを受けることは絶対に重要です。Secure Code Warrior は、開発者が安全な C/C++ コードを書けるようにする、インタラクティブなチャレンジ、コース、アセスメントを備えた、パーソナライズされた学習プラットフォームを提供します。ここでは、一般的な概念トレーニングの微調整だけでなく、言語:フレームワーク固有のコンテンツについて説明しています。
チェックアウト 自動車および輸送産業への支援方法。または試してみてください エンベッド・フォーカス・コーディングの課題 今日は、開発者がどのように安全な組み込みアプリケーションを作成できるようにしているかを体験してください!
Índice
Secure Code Warrior convierte la programación segura en una experiencia positiva y atractiva a medida que los desarrolladores mejoran sus habilidades. Guía a cada programador por la ruta de aprendizaje que desea, para que los desarrolladores con habilidades de seguridad puedan convertirse en superhéroes en el mundo conectado en el que vivimos.

Secure Code Warrior le ayuda a proteger el código a lo largo de todo el ciclo de vida del desarrollo de software y a crear una cultura que dé prioridad a la ciberseguridad. Tanto si es gestor de seguridad de aplicaciones, desarrollador, CISO o responsable de seguridad, le ayudamos a reducir los riesgos asociados al código inseguro.
Reservar una demostración[Descargar]Recursos para empezar
Temas y contenidos de la formación en código seguro
Nuestro contenido, líder en el sector, evoluciona constantemente para adaptarse al entorno de desarrollo de software en constante cambio, teniendo siempre en cuenta las funciones de nuestros clientes. Abarca todo tipo de temas, desde la inteligencia artificial hasta la inyección de XQuery, y está diseñado para satisfacer las necesidades de diversos perfiles, desde arquitectos e ingenieros hasta gestores de productos y responsables de control de calidad. Echemos un vistazo al contenido que ofrece nuestro catálogo, clasificado por temas y funciones.
La Cámara de Comercio establece el estándar para la seguridad impulsada por desarrolladores a gran escala
Kamer van Koophandel comparte cómo ha integrado la codificación segura en el desarrollo diario mediante certificaciones basadas en roles, evaluaciones comparativas de Trust Score y una cultura de responsabilidad compartida en materia de seguridad.
Modelado de amenazas con IA: convertir a cada desarrollador en un modelador de amenazas
Saldrá mejor equipado para ayudar a los desarrolladores a combinar ideas y técnicas de modelado de amenazas con las herramientas de IA que ya utilizan para reforzar la seguridad, mejorar la colaboración y crear software más resistente desde el principio.
Recursos para empezar
Cybermon ha vuelto: la misión de IA para derrotar al jefe ya está disponible bajo demanda.
Ahora se puede jugar a «Cybermon 2025 Beat the Boss» en SCW durante todo el año. Introduzca retos de seguridad avanzados de IA/LLM y refuerce a gran escala el desarrollo seguro de la IA.
Explicación de la Ley de Resiliencia Cibernética: su significado para el desarrollo de software seguro desde el diseño
Descubra qué exige la Ley de Resiliencia Cibernética (CRA) de la UE, a quién se aplica y cómo puede prepararse el equipo de ingeniería para las prácticas de seguridad desde el diseño, la prevención de vulnerabilidades y el desarrollo de las capacidades de los desarrolladores.
Enable 1: Criterios de éxito predefinidos y medibles
Enabler 1 es la primera parte de la serie Enablers of Success, compuesta por diez partes, y presenta cómo madurar un programa a largo plazo vinculando la codificación segura con resultados empresariales como la reducción de riesgos y la velocidad.




%20(1).avif)
.avif)
