ソースコード診断の必要性とは?目的とメリットを紹介

Share

ソースコードとはシステムやWebアプリを動かすコンピュータプログラムのことです。ソースコード診断を行うことで防げるサイバー攻撃や、ソースコード診断ならではの強み、ソースコード診断とDevSecOpsとの関連、上手な利用手順などを解説しています

企業が提供するWebサービスや、社内で活用するさまざまな業務用アプリケーションを検査、評価する方法はいくつも存在しています。この記事では、その中の「ソースコード診断」を取り上げて、その定義、特徴、メリット、目的などを紹介します。

ソースコード診断とは?

ソースコード診断とは、アプリケーションのソースコード(開発者が書いたプログラム)を解析して、セキュリティを含めて品質上の問題となるバグを検出する診断です。無料の診断ツールや、セキュリティベンダーが提供する診断サービスがあります。診断対象はWebアプリケーションを始めとして、スマートフォンやIoT機器上で動くアプリケーションにまで広がっています。

ソースコードを開示するため、ソースコード診断はホワイトボックステストと呼ばれます。これに対して、ソースコードや設計書を見ずに、システムの外部からアクセスして脆弱性や動作を検証する方法をブラックボックステストと呼びます。

ソースコード診断の特徴とメリット

ブラックボックステストでは検出が難しい脆弱性がソースコード診断なら検知できる場合があります。具体的には 「ソースコード診断で検出できる脆弱性」で後述します。

ブラックボックステストは、すでにソフトウェアあるいはシステムが機能していることを前提とした、リリース前あるいはリリース後に実施します。これに対して、ソースコード診断はその前段である開発プロセスから実施できるため、テスト結果を受けてプログラムを修正することが可能です。

開発の手戻りを減らすことでコストや工数削減につながります。詳細は「ソースコード診断の有効性」を参照してください。

ソースコード診断を実施する目的

ソースコード診断の目的は、プログラムに作りこんでしまった脆弱性を網羅的に検出することです。開発時に繰り返し実施し、開発者が修正していく運用が想定されています。

システムのセキュリティを確保する方法

開発(Dev)、運用(Ops)、セキュリティ(Sec)を一体にしてシステムライフサイクルを回すDevSecOpsという考え方が注目を集めています。DevSecOpsではシステムライフサイクルの初期から各段階でセキュリティについて考察、対処していきます。ここでは、開発プロセスのどこで、セキュリティを確保するための施策を実施するか説明します。

セキュアプログラミング

ソースコード診断の前に、そもそもシステムの設計・開発段階で、開発者が脆弱性を作りこまないようにする手法があります。これをセキュアプログラミングと呼びます。セキュアプログラミングで開発し、本当に脆弱性を作りこんでいないかどうかソースコード診断でチェックします。

ソースコード診断

ソースコード診断には、ツールを用いて自動的に処理するツール診断(自動診断)と、セキュリティエンジニアが目視で確認する手動診断があります。

効率的に網羅性を確保できる自動診断ツールの支援は欠かせません。

一方手動診断は、機械的に検出できず、人間による判断が必要な脆弱性を発見します。手動のみで行う場合もありますが、多くはツール診断と組み合わせて網羅性と精度を上げていきます。

脆弱性診断(セキュリティ診断)

システムのセキュリティを確保する方法には、ソースコード診断のほかに脆弱性診断(セキュリティ診断)もあります。脆弱性診断とは、システムの外部からアクセスして既知の脆弱性の有無を検証する方法です。システム構築後のさまざまなフェーズで実施します。

診断対象は、Webアプリケーションスマホアプリケーション、サーバ(OS等)ネットワークインフラなどさまざまです。

なお「セキュリティ診断」という名称で、脆弱性診断サービスが提供されている場合もあります。

ソースコード診断の有効性

ソースコード診断は開発フェーズ初期から実施可能です。リリース直前やリリース後に脆弱性が発見される可能性を抑えることで、より効率的で信頼性の高いシステム開発が可能になります。

CPE-Coreとはソースコード内の脆弱性と品質面の問題を検査する当社の自動自動静的解析ツールです。

ソースコード診断で検出できる脆弱性

一般的な脆弱性診断では検出しにくい脆弱性も、ソースコード診断では発見できる場合があります。たとえば未使用のコード、ログの改ざん、ログファイルやエラーメッセージへの機密情報の出力などは、ソースコードを直接確認することで検知可能になります。

以下、代表的な脆弱性(セキュリティバグ)について説明します。これらのバグを突く攻撃の名称としても用いられています。

バッファオバーフロー

プログラムを実行する際に確保するメモリ上のバッファ領域に対して、このサイズを超過するデータを書き込めるようになっているバグです。攻撃者は超過する部分に不正なプログラムを書いて実行します。

フォーマットストリング

プログラム中の、書式設定用の関数(フォーマットストリング)の引数の処理に関するセキュリティバグです。正しくは、引数として不正な値が入力された場合には、処理を止めてエラーメッセージを返さなければなりません。

SQLインジェクション/コマンドインジェクション

SQL(データベースを定義、操作する言語)文や、その他のコマンドが入力された場合でも、エラーにせずに処理してしまうバグです。攻撃者の観点からは、コマンドを注入(インジェクション)する形になるため、この名が付いています。攻撃の入り口はアプリケーション上の通常の入力欄で、ここに不正な値を入力することで攻撃を開始します。

クロスサイト・スクリプティング

悪意のあるスクリプト(プログラム)をユーザのコンピュータに注入して、複数のWebサイトをまたいで(クロスサイト)行う攻撃や、その攻撃で利用される脆弱性を指します。

まとめ

・ソースコード診断はソースコード(開発者が書いたプログラム)を解析し、セキュリティ上の問題点を発見する
・開発フェーズの初期から実施することで、リリース直前に脆弱性が発見されるようなスケジュールに影響するトラブルを防止する
・ソースコード診断のためのツールを効果的に活用しながら、熟練の技術者が手動でソースコード診断を行う


年二回発行されるセキュリティトレンドの詳細レポート。BBSecで行われた診断の統計データも掲載。
サービスに関する疑問や質問はこちらからお気軽にお問合せください。

Share