バイナリ・コードとバイナリ解析

バイナリ・コード解析とは

バイナリ・コードは、コンピュータによって直接解釈されるプログラミング・データの基本形式です。このコードは0と1を並べて組成された文字列で構成され、より大きなコンピュータ・プログラムの一部として読み取られ、実行されます。バイナリ・コードは、CやJavaなどの高級言語で記述されたソースコードをコンピュータ・プログラムが実行されるプロセッサ・アーキテクチャに固有の機械語に変換する、マルチステージのコンパイル・プロセスによって生成されます。ある意味では、人間が読めるソースコードから変換されたコンピュータが直接理解できる言語です。

バイナリ解析は、ソースコードへのアクセスなしでバイナリ・コードで構成されるファイルを参照し、その内容と構造を評価するコードレビューの一形式です。

バイナリ解析のしくみ

一部のバイナリ解析ツールは、パッケージ・マネージャーのインスペクタと同様、基本的にファイルの「目次」を読み取って内容を確認するしくみになっています。基本的な解析ならそれで十分かもしれませんが、高度な解析ツールがあれば、リバース・エンジニアリングなしでデータ型、フロー、制御パスをモデル化できます。

このモデルで高度なバイナリ解析ツールを使用すれば、コードをより詳細にレビューし、既知のソフトウェア・コンポーネントやセキュリティの欠陥パターンを見つけることができます。この解析結果を用いてセキュリティや使用状況に関するレポートを編集し、コードに潜む問題に対処する方法についてのアドバイスを得ることもできます。

バイナリ解析 | シノプシス

バイナリ解析が重要な理由

解析するソースコードを常に入手できるとは限りません。たとえば、企業がファームウェアを購入して自社製品のハードウェアと統合する際に、ファームウェアがバイナリ形式の場合があります。あるいは、フレームワーク、コンテナ、GUI、データベースなどのサードパーティ製のコードやライブラリを利用して独自開発のコードを拡張する場合、ライブラリにはソースコードが含まれていないことが珍しくありません。いずれにしても、使用者がバイナリファイルの中身を理解していることが重要です。

バイナリ解析ソリューションを利用すれば、ベンダーの手を借りずにバイナリコードを検査し、侵害につながる可能性のあるオープンソース・コンポーネント、セキュリティ脆弱性、ライセンス上の義務、機密情報を特定することが可能になります。

シノプシスの支援方法

シノプシスのBlack Duck®は、ソースコードへのアクセスなしで、ソフトウェアのコンポジション(構成)を可視化することで、購買の意思決定を改善させ、複雑なシステムやソフトウェアの運用に伴う継続的なリスクに対処する自動ソフトウェア・コンポジション解析(SCA)ツールです。Black Duck Binary Analysisでは、コンパイル済みソフトウェアのオープンソース・コンポーネントを特定して、オープンソースの部品表(BoM)と該当コンポーネントに関連する脆弱性およびライセンスのリストを生成します。

さらにコンパイラ・スイッチ、モバイル・アクセス許可をはじめ、重要情報露出の可能性があるその他の形式の情報漏洩を認識します。さらに、単にこれらの問題を検出するだけにとどまらず、見つかった脆弱性ごとに詳細情報を通知する独自のセキュリティ・アドバイザリを生成します。これによりユーザーは適切に問題を理解し、優先順位を付け、修正するために必要な情報を入手できます。

また、シノプシスの包括的な静的アプリケーション・セキュリティ・テスト(SAST)ソリューションや、ソースコードを参照することなくアプリケーションの脆弱性を発見することが可能な静的解析プロフェッショナルサービスを活用することもできます。バイナリ解析に基づく静的テスト・ソリューションのデータ型、データ、制御パスはあくまでもモデル化されたものであり、解析の有効性を向上させるには、解析結果を手動で検査することをお勧めします。また、評価時のノイズや誤検知が排除されるため、脆弱性が見つけやすくなり、実践的な修正ガイダンスも提示されます。