サイト内の現在位置

セキュアコーディング検証サービス

お客様が開発するシステムや機器が外部ネットワークと繋がるようになった事で、外部ネットワークからのシステムや機器に無許可の侵入を防止する為にソフトウェアの脆弱性対策をしたセキュア開発が必要です。本サービスは、お客様が開発されるソースコードに対して、CERT C コーディングスタンダードからの逸脱をチェックする事で判明する脆弱性を報告し、その対策を支援する検証サービスです。

概要

特長

短期開発/技術者不足の時に

  • セキュアコーディング開発に対応したソフトウェアを提供したい
  • ソースコードの品質保証をアウトソーシングしたい

開発者に負荷をかけたくない時に

  • ツール導入時のリソースが一切不要
  • 開発者へのツール使用方法の教育不要

外部調達したソフトウェアの品質管理を向上したい時に

  • ソフトウェアのセキュアコーディング対応を同一基準で数値的に把握したい
  • 受入試験の負荷を軽減したい

サービス内容

サービス内容(通常サービス)

「セキュアコーディング検証サービス」は、お客様のソースコード(C言語)に対して、CERT C コーディングスタンダード からの逸脱を検出してご報告します。

CERT C コーディングスタンダードはルールとレコメンデーションで構成されます。

  • ルール
    必ず適用すべきコーディング作法
  • レコメンデーション
    適用によりセキュリティが向上するコーディング作法

サービス内容(オプションサービス)

ルールのカスタマイズ(有償)

CERT C コーディングスタンダードの中で、お客様のコーディング規約に採用されているルールに限定して検証を実施したり、お客様が独自で制定したコーディングルールを追加してご報告するサービスです。

オンサイト対応(有償)

通常の検証作業は、お客様のソースコードをお預かりして弊社内の検証センターにて行いますが、お客様のソースコードの持出しが困難な場合には、お客様のオフィスにて検証を実施します。お客様のオフィスからソースファイルを持ち出すことはありません。
作業場所の借用等についてはご相談させていただきます。

サービス提供形態

検証サービスの流れを以下に示します。

サービスの流れ
  • ソースコードのお預かり
    NECグループセキュア情報交換サイトにアップロードします。
  • セキュアコーディング検証作業
    ツールによる1次解析をし、専任技術者による2次解析をします。
  • 検証レポート作成
    ソフトウェアの脆弱性の危険性についてレポートします。
  • 報告会実施
    作成した検証レポートについて報告会を実施します。

実例・実績

事例1:車載機器で利用

  • 〈実施状況〉
    CERT C コーディングスタンダード適用しているソースコード56KL
  • 〈実施結果〉
    逸脱を14件検出
  • 〈成果〉
    CERT C コーディングスタンダードの遵守状況の確認と改善

事例2:建設機械で利用

  • 〈実施状況〉
    CERT C コーディングスタンダードを適用していないソースコード90KL
  • 〈実施結果〉
    逸脱を889件検出
  • 〈成果〉
    CERT C コーディングスタンダード適用に向けた現状把握データとして活用

ご提供レポート

「セキュアコーディング検証サービス」は、お預かりしたソースコードをツールによる一次解析後に、専任技術者による二次解析(スクリーニング)を実施し、「管理者向けレポート」と「開発者向けレポート」にて役割毎に必要な報告を行います。また二次解析で得られたセキュリティの傾向を「サマリレポート」として報告します。

開発者向けレポート

CERT C コーディングスタンダードから逸脱した箇所のレポート例を以下に示します。
開発者は、ソフトウェア脆弱性のリスクを減らすために解説の内容を参考に対策が必要です。

開発者向けレポート

管理者向けレポート

管理を容易に行うために、XLSX形式のレポートを提供します。
ファイル毎やルール毎の逸脱箇所確認、警告内容を一覧で報告します。

管理者向けレポート

サマリレポート

CERT C コーディングスタンダードのルールとレコメンデーションの対応状況を見える化しセキュリティの傾向を報告します。本サマリレポートよりコーディング規約の見直しやセキュリティ対策が可能です。

サマリレポート

逸脱検出サンプル(参考)

「セキュアコーディング検証サービス」では、ソースコードに潜むこのような逸脱を検出可能です。

ケース1:INT31-C:整数変換によってデータの消失や解釈間違いが発生しないことを保証する

解説:
uint32を返す関数の戻り値をuint16に切り捨てキャストして使用しています。

考え方:
返り値を受け取る変数に入りきらない値が返る場合、値が切り捨てられてしまい意図しない動作に繋がる可能性があります。

ケース2:INT36-C:ポインタから整数への変換、整数からポインタへの変換

ケース2:誤字

解説:
ポインタのinf_t*型を整数型のuint32_tにキャストしています。

考え方:
ポインタ・整数間での変換を行うと、移植性のないコードになり、想定外のポインタを生成してしまう可能性があります。

ケース3:MSC37-C:非 void 型関数の制御が関数定義の最終行に到達しないことを保証する

ケース3:初期化漏れ

解説:
intを返す関数の最後にreturnがありません。

考え方:
非 void 型関数でreturnせずに関数の終わりまで到達している場合、
その戻り値を使用すると、バッファオーバーフローや予期せぬ動作を引き起こす可能性があります。