開発から運用まで、IT部門のお役に立つ情報をお届けするサイトです

DevOpsに関する基礎知識や進め方がわかる!! DevOpsポータルサイト
  • コーディング高度化

静的解析とは?コードの問題を迅速・正確にチェックできるツールを紹介

  • #ソースコード解析
  • #脆弱性検知

2023.07.27

静的解析とは?コードの問題を迅速・正確にチェックできるツールを紹介

迅速かつ正確にコードの問題を発見できる静的解析

静的解析はソースコード解析手法の一種であり、「Static Code Analysis」、「静的コード解析」とも呼ばれています。
コンピュータプログラムのソースコードに欠陥が無いかを検証する手法の一つで、主に「静的解析ツール」と称されるソフトウェアを用いてプログラムコードを自動的に解析し、誤りが無いか確かめることを指します。

なお、厳密には、ソースコードを人間が目視して問題の有無を検証する「レビュー」も静的なテスト技法の一種として定義されますが、この記事では、ソフトウェアを用いる自動的な解析方法について取り上げ、ご紹介します。


「静的解析ツール」って何?

疑問をもつ男性

人間の記述したプログラムのソースコードに対して、「実行したらどうなるか、問題は無いか」を解析してくれるツールが、静的解析ツールです。
コード静的解析ツール、コードチェックツール、Linter、リントツール、静的解析器などとも呼ばれることがあります。

静的解析ツールは、プログラミング言語ごとに定められた文法や仕様をソースコードが満たしているか、また開発場面ごとに定められたコーディング規約に則っているかなどをチェックします。
さらに、個々の命令文などの単位で形式的な問題が見つからなかった場合でも、実行の流れ全体を解析して、例えば初期化前の変数の内容を参照している部分がある、メモリ領域の境界を超えたアクセスを命令している部分があるなど、実行時に問題となり得る箇所をあらゆる条件で検出し、指摘してくれます。

静的解析ツールは様々な開発現場で実際に活用されており、高い安全性や信頼性が求められる航空機や原子炉、人工衛星などの制御システム、セキュリティ分野などでも導入事例があります。
例えば火星着陸を果たしたロボット探査機「キュリオシティ(Curiosity)」の信頼性確保にも、静的解析ツールが採用されたことが知られています。


静的解析を行うメリット

静的解析ツールを用いてソースコード解析を行うと、以下のようなメリットを得られます。順に見ていきましょう。


1.開発の早い段階から、コーディングのエラーを検出できる

開発プロジェクトにおいて、完成時のみならず、コーディング時、開発の初期段階からこまめなチェックを行えます。
開発プロジェクト内の各工程内で早めに担当部分の問題検出が行えるため、迅速な修正が可能となり、結果的にプロジェクト全体のバグ対応コストを抑制することが可能です。


2.導入・運用が容易!

静的解析ツールを用いたソースコード解析においては、初期設定や導入さえ済んでしまえば、全チェック工程をツールによって自動化できます。


3.社内のコーディング規約に則っているかのチェックも行える

プログラミング言語の文法上の問題のみならず、あらかじめ定められた社内やプロジェクトのルールに従えているかの観点でもチェックを行えます。
プロジェクト全体の共通のコーディングスタイルでの開発を推進できるため、コードの可読性や保守性が向上します。


4.目視による「レビュー」の準備段階にも活用できる

高度な知識を持った専任者や、プロジェクトの責任者などが目視によるコーディングのレビューを行う必要がある場合においても、レビュー前にまず静的解析ツールを用いて機械的に拾える部分をチェックした後に、担当者がレビューを行うことによって、担当者は検出された脆弱性の優先度判断といった、「人間の判断」が必要な作業に注力できます。


5.開発チーム全体の意識向上に期待できる

静的解析による結果のフィードバック、プロジェクト内の周知共有などを経て、個々の開発者が「正しいコーディング、良いコーディングをしよう」と意識を高めてくれることにも期待できます。


静的解析ツールの種類

多種のツール

静的解析ツールには無料のもの、有料のものがあり、種類も様々です。ここでは、主なツールのタイプをご紹介します。一つのツールで複数の種類を兼ね備えているケースもあるため、各ツールの公式サイトなどで機能を確認しておくとよいでしょう。


コーディング規約違反をチェックするツール

フォーマッターとも呼ばれるツールタイプです。言語ごとの文法チェックのほか、独自のコーディング規約をあらかじめ定義しておき、そのルールに違反していないかをチェックするということも可能です。

ツール例:CheckStyle、Prettier など


プログラムの脆弱性をチェックしてくれるツール

セキュリティの観点で、ソースコード内の脆弱性を検出するツールです。

ツール例:SonarQube、DeepSource など


実行時のバグに成り得る、問題箇所を見つけてくれるツール

メモリに関する問題を引き起こす箇所や、クロスサイトスクリプティングなどの脆弱性に関する問題を引き起こす箇所などを検出してくれるツールです。

ツール例:SpotBugs、ESlint、Fortify、Coverity など


AI型静的解析ツール

上述まででご紹介したような各機能を持ちつつ、AIのアルゴリズムを用いた解析を行うツールです。

ツール例:Amazon CodeGuru、GAMMA など


「Fortify Static Code Analyzer」なら多角的にソースコードを静的解析

電球

「Fortify Static Code Analyzer(以下、Fortify SCA)」は、前項でご紹介したようなあらゆる種類のチェックを行える、統合型の静的解析ツールです。システムやソフトウェア開発における、ライフサイクルに組み込むことを前提に設計されており、ツールは脆弱性検知率100%を目標に開発されています。

多角的な観点によるコード解析を自動で実行した上で、複数の解析結果を統合したダッシュボードで分かりやすく結果を確認できます。

以下に、「Fortify SCA」の主な特徴を記します。


様々な既存のセキュリティ規約に準拠したチェックが可能

情報セキュリティの分野においては、関連団体が策定した様々なガイドラインが存在していますが、Fortify SCAではそれらの多くに対応しています。

準拠しているガイドラインの一例:OWASP TOP10、NIST、CWE、GDPR など


セキュリティのみならず入力妥当性やコード品質などあらゆるチェックを自動化できる

バッファーオーバーフロー、リソース・インジェクション、SQLインジェクションなどの観点を含めた、あらゆる項目でコードチェックを行えます。


8種の脆弱性アナライザでソースコードの安全性を確実にチェック

Fortify SCAでは、脆弱性を検出するためのルールとして、定義の異なる8種類のアナライザが搭載されています。
ソースコードのチェックを行うにあたっては、利用者は個々のアナライザを意識することなく、自動的に全ての観点でのチェックが行われます。
ご参考までに、Fortify SCAに搭載されている8つのアナライザの概要をご紹介します。

アナライザ 概要
Buffer バッファオーバーフローが発生する原因を検出するためのアナライザ
Configuration 環境設定ファイルの記述の問題や弱点、ポリシー違反を検出するためのアナライザ
Content ソースコード内のHTMLコンテンツ上のポリシー違反やセキュリティの問題を検出するためのアナライザ
Control Flow チェックを実行する時刻の問題や、初期化されていない変数などを検出するためのアナライザ
Dataflow テイントデータに関して、危険な関数の呼び出しや操作が行われないかを検出するためのアナライザ
Null Pointer ポインタ変数上でnullの割り当てや、逆参照などの問題を検出するためのアナライザ
Semantic プロシージャ内レベルでの、関数やAPIの潜在的問題を検出するためのアナライザ
Structural プログラムの構造や定義レベルでの、潜在的欠陥を検出するためのアナライザ

幅広い言語をカバー

Fortify SCAは、解析できる対象として様々なプログラミング言語に対応しています。
対応言語の数は、31言語(2023年7月現在)にものぼります。

対応言語の一例:C#、C/C++、Objective-C/C++、JavaScript、Java、JSP、Ruby、.NET Framework 、COBOL、ABAP、ASP.NET、Visual Basic、VBScript、XML、Python、PHP、Kotlin、Swift など


信頼のおけるチェック精度で、開発者のチェック工数を最小化

独自に開発されたスキャンエンジンにより、Fortify SCAは誤検知やノイズが少ない検出結果を誇っています。


脆弱性検出だけでなく、脆弱性の優先度付けを行う便利機能

脆弱性を検出するだけでなく、検出された脆弱性が、本当に悪用性が高いのかどうかという点までを判断する必要があります。Fortify SCAでは、検出された脆弱性の判断をサポートするAudit Assistant機能が含まれており、担当者の判断を手助けすることが可能です。


ソースコードのエラー検出を容易にする静的解析ツール

納品前やリリース前のチェックのみならず、コーディング中のチェックにも活用できる静的解析ツールは、開発プロジェクトの品質維持や、開発スピードの向上に大変役立ちます。

本記事でご紹介した統合的な静的解析ツールFortify SCAは、株式会社アシストが詳細説明やデモンストレーションなど、導入・活用するためのサポートを行っております。

アシストのサービスの説明や、Fortify SCAの資料もご自由にダウンロードしていただけますので、静的解析ツールの導入検討時には、ぜひこちらもご覧ください。




関連ソリューション

  • コーディング高度化

    アプリケーション構造の可視化とコード解析による脆弱性混入の防止により、開発の早期段階で不具合や脆弱性のリスクを回避します。

ご不明な点はお気軽にお問い合わせください
お求めの情報は見つかりましたでしょうか?
お客様の状況に合わせて詳しい情報をお届けします。
お気軽にご相談ください。