(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-12-04
(54)【発明の名称】安全なソフトウェア・コンパイルおよびソフトウェア検証
(51)【国際特許分類】
G06F 21/12 20130101AFI20241127BHJP
G06F 21/51 20130101ALI20241127BHJP
G06F 8/60 20180101ALI20241127BHJP
G06F 21/64 20130101ALI20241127BHJP
G06F 8/41 20180101ALI20241127BHJP
【FI】
G06F21/12 350
G06F21/51
G06F8/60
G06F21/64
G06F8/41
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024529965
(86)(22)【出願日】2022-11-16
(85)【翻訳文提出日】2024-05-21
(86)【国際出願番号】 IB2022061024
(87)【国際公開番号】W WO2023100011
(87)【国際公開日】2023-06-08
(32)【優先日】2021-12-01
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【氏名又は名称】片岡 忠彦
(72)【発明者】
【氏名】ボウイ、デール
(72)【発明者】
【氏名】マディネニ、ナラヤナ、アディティア
(72)【発明者】
【氏名】グリーン、マシュー
【テーマコード(参考)】
5B081
5B376
【Fターム(参考)】
5B081AA00
5B081CC41
5B376BA18
5B376BC57
5B376BC79
(57)【要約】
デプロイメントの前に、アーティファクトまたはバイナリあるいはその両方が、署名で二重署名されたソース・コード・ファイルから、コンパイルのプロセスによって生成される。デプロイメントの直前に、計画されたデプロイメントのためにアーティファクトまたはバイナリあるいはその両方の複製が作成され、ソース・コードの整合性および安全性を保証するために二重署名した署名がチェックされる。
【特許請求の範囲】
【請求項1】
コンパイラおよびソース・コードを含むソース・ファイルと共に使用するための、コンピュータ実施方法であって、
前記ソース・ファイルに署名することと、
コミットにより前記ソース・ファイルを編集することと、
コミットによる前記ソース・ファイルの前記編集に応答して、前記ソース・ファイルに関連付けられた複数の署名を更新することと、
前記ソース・コードの少なくとも一部をコンパイルするためのリクエストを受信することと、
前記リクエストの前記受信に応答して、
前記複数の署名を検証することと、
前記複数の署名でバイナリおよびアーティファクトに二重署名して前記ソース・コードの前記少なくとも一部をコンパイルすることと、を含む、コンピュータ実施方法。
【請求項2】
前記ソース・ファイルから生成された前記アーティファクトおよび前記バイナリの少なくとも1つをデプロイするためのリクエストを受信することと、
前記ソース・ファイルが安全であると判断することを助けるために前記複数の署名の妥当性を確認することと、をさらに含む、請求項1に記載のコンピュータ実施方法。
【請求項3】
前記複数の署名の前記妥当性確認に応答して、前記ソース・ファイルから生成された前記バイナリおよび前記アーティファクトをデプロイすることをさらに含む、請求項2に記載のコンピュータ実施方法。
【請求項4】
前記コンパイラが、スケーリングの必要性を低下させ、かつ強力な暗号保証を提供するために、出力バイナリに対して実行される署名に対して暗号関係を有する署名付きソース・コードのみをコンパイルする、修正コンパイラである、請求項1ないし3のいずれかに記載のコンピュータ実施方法。
【請求項5】
署名することが、前記ソース・コード管理システムから取り出され、かつ前記コンパイラの署名を有する出力アーティファクトを提供するソース・コード・ファイルに拡張される、請求項1ないし4のいずれかに記載のコンピュータ実施方法。
【請求項6】
コンパイラおよびソース・コードを含むソース・ファイルと共に使用するためのコンピュータ・プログラム製品であって、
記憶デバイスのセットと、
前記記憶デバイスのセットにまとめて記憶されたコンピュータ・コードであって、前記コンピュータ・コードが、データと、プロセッサ・セットに少なくとも、
前記ソース・ファイルに署名する動作と、
コミットにより前記ソース・ファイルを編集する動作と、
コミットによる前記ソース・ファイルの前記編集に応答して、前記ソース・ファイルに関連付けられた複数の署名を更新する動作と、
前記ソース・コードの少なくとも一部をコンパイルするためのリクエストを受信する動作と、
前記リクエストの前記受信に応答して、
前記複数の署名を検証する動作と、
前記複数の署名でバイナリおよびアーティファクトに二重署名して前記ソース・コードの前記少なくとも一部をコンパイルする動作と、
を行わせるための命令とを含む、コンピュータ・プログラム製品。
【請求項7】
前記コンピュータ・コードが、前記プロセッサ・セットに、
前記ソース・ファイルから生成された前記アーティファクトおよび前記バイナリの少なくとも1つをデプロイするためのリクエストを受信する動作と、
前記ソース・ファイルが安全であると判断することを助けるために前記複数の署名の妥当性を確認する動作と、
を行わせるための命令をさらに含む、請求項6に記載のコンピュータ・プログラム製品。
【請求項8】
前記コンピュータ・コードが、前記プロセッサ・セットに、
前記複数の署名の前記妥当性確認に応答して、前記ソース・ファイルから生成された前記バイナリおよび前記アーティファクトをデプロイすること
の動作を実行させる命令をさらに含む、請求項7に記載のコンピュータ・プログラム製品。
【請求項9】
前記コンパイラが、スケーリングの必要性を低下させ、かつ強力な暗号保証を提供するために、出力バイナリに対して実行される署名に対して暗号関係を有する署名付きソース・コードのみをコンパイルする、修正コンパイラである、請求項6ないし8のいずれかに記載のコンピュータ・プログラム製品。
【請求項10】
署名することが、前記ソース・コード管理システムから取り出され、かつ前記コンパイラの署名を有する出力アーティファクトを提供するソース・コード・ファイルに拡張される、請求項6ないし9のいずれかに記載のコンピュータ・プログラム製品。
【請求項11】
コンパイラおよびソース・コードを含むソース・ファイルと共に使用するためのコンピュータ・システムであって、
プロセッサ・セットと、
記憶デバイスのセットと、
前記記憶デバイスのセットにまとめて記憶されたコンピュータ・コードであって、前記コンピュータ・コードが、データと、前記プロセッサ・セットに少なくとも、
前記ソース・ファイルに署名する動作と、
コミットにより前記ソース・ファイルを編集する動作と、
コミットによる前記ソース・ファイルの前記編集に応答して、前記ソース・ファイルに関連付けられた複数の署名を更新する動作と、
前記ソース・コードの少なくとも一部をコンパイルするためのリクエストを受信する動作と、
前記リクエストの前記受信に応答して、
前記複数の署名を検証する動作と、
前記複数の署名でバイナリおよびアーティファクトに二重署名して前記ソース・コードの前記少なくとも一部をコンパイルする動作と、
を行わせるための命令とを含む、コンピュータ・システム。
【請求項12】
前記コンピュータ・コードが、前記プロセッサ・セットに、
前記ソース・ファイルから生成された前記アーティファクトおよび前記バイナリの少なくとも1つをデプロイするためのリクエストを受信する動作と、
前記ソース・ファイルが安全であると判断することを助けるために前記複数の署名の妥当性を確認する動作と、
を行わせるための命令をさらに含む、請求項11に記載のコンピュータ・システム。
【請求項13】
前記コンピュータ・コードが、前記プロセッサ・セットに、
前記複数の署名の前記妥当性確認に応答して、前記ソース・ファイルから生成された前記バイナリおよび前記アーティファクトをデプロイする動作を行わせるための命令をさらに含む、請求項12に記載のコンピュータ・システム。
【請求項14】
前記コンパイラが、スケーリングの必要性を低下させ、かつ強力な暗号保証を提供するために、出力バイナリに対して実行される署名に対して暗号関係を有する署名付きソース・コードのみをコンパイルする、修正コンパイラである、請求項11ないし13のいずれかに記載のコンピュータ・システム。
【請求項15】
署名することが、前記ソース・コード管理システムから取り出され、かつ前記コンパイラの署名を有する出力アーティファクトを提供するソース・コード・ファイルに拡張される、請求項11ないし14のいずれかに記載のコンピュータ・システム。
【請求項16】
コンピュータ・プログラムであって、前記プログラムが、コンピュータ上で実行されると、請求項1ないし5のいずれかに記載の方法を実行するように適合されたプログラム・コード手段を含む、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般的に、ソフトウェア・コンパイルの分野に関し、ソフトウェア検証にも関する。
【背景技術】
【0002】
「コンパイラ」についてのウィキペディアのエントリ(2021年7月28日現在)には、「コンピューティングにおいて、コンパイラは、あるプログラミング言語(ソース言語)で書かれたコンピュータ・コードを別の言語(ターゲット言語)に変換するコンピュータ・プログラムである」と記載されている。「コンパイラ」という名称は主に、ソース・コードを高水準プログラミング言語から低水準言語(例えば、アセンブリ言語、オブジェクト・コード、またはマシン・コード)に変換して実行可能プログラムを作成するプログラムに対して使用される。異なる有用な形式で出力を生成する多くの異なる種類のコンパイラが存在する。コンパイラが生成するコードが稼働するものとはCPUまたはオペレーティング・システムが異なるコンピュータ上で稼働し得るコンパイラは、クロスコンパイラと呼ばれる。ブートストラップ・コンパイラは、コンパイルすることを意図した言語で書かれている。低水準言語から高水準言語へ変換するプログラムは、逆コンパイラである。高水準言語間で変換するプログラムは、通常、ソース・トゥ・ソース・コンパイラまたはトランスコンパイラと呼ばれる。言語リライタは、通常、言語の変更を伴わない表現の形式を変換するプログラムである。コンパイラ・コンパイラという用語は、構文解析を実行するパーサを作成するために使用されるツールを指す。コンパイラは、前処理、字句解析、構文解析、意味解析(構文主導型変換)、入力プログラムの中間表現への変換、コード最適化、およびコード生成の動作の多くまたは全てを実行する可能性が高い。コンパイラは、効率的な設計およびソース入力からターゲット出力への正確な変換を促進する段階においてこれらの動作を実施する。コンパイラの誤った挙動によって生じるプログラム障害は、追跡および回避することが非常に困難である場合があり、したがって、コンパイラ実装者は、コンパイラの正確性を保証するために多大な労力を費やしている。コンパイラだけが、ソース・プログラムを変換するために使用される言語プロセッサではない。インタープリタは、指示された動作を変換し、次いで実行する、コンピュータ・ソフトウェアである。変換プロセスは、コンピュータ言語設計に影響を及ぼし、それがコンパイルまたはインタープリテーションの選好につながる。理論上、プログラミング言語は、コンパイラおよびインタープリタの両方を有し得る。実際には、プログラミング言語は、ただ一方(コンパイラまたはインタープリタ)だけに関連付けられる傾向がある。
【0003】
「ソフトウェア検証」についてのウィキペディアのエントリ(2021年7月28日現在)には、一部、以下のように記載されている。「ソフトウェア検証は、ソフトウェア・エンジニアリングの分野であり、その目的は、ソフトウェアが期待される要件全てを完全に満たすことを保証することである。幅広い範囲および分類[.]。検証を幅広く定義すると、それはソフトウェア・テストと等価になる。その場合、検証には2つの基本的なアプローチがある。動的検証は、実験、動的テスト、または単にテストとも呼ばれる。これは欠陥(ソフトウェア・バグ)を発見するのに適している。静的検証は、分析または静的テストとも呼ばれ、これはプログラムの正確性を証明するのに役立つ。もっとも、ソフトウェアが実際に行うプロセスと、静的検証が想定しているプロセスとの間に1つまたは複数の矛盾がある場合、偽陽性をもたらすことがある。」
【0004】
これらのウィキペディアのエントリは、クリエイティブ・コモンズ表示-継承ライセンス3.0-https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_Licenseに基づき利用可能とされている。
【発明の概要】
【0005】
本発明の態様によれば、以下の動作(必ずしも以下の順序ではない)、(i)ソース・ファイルに署名すること、(ii)コミットによりソース・ファイルを編集すること、(iii)コミットによるソース・ファイルの編集に応答して、ソース・ファイルに関連付けられた複数の署名を更新すること、(iv)ソース・コードの少なくとも一部をコンパイルするためのリクエストを受信すること、(v)リクエストの受信に応答して、(a)複数の署名を検証すること、ならびに(b)複数の署名でバイナリおよびアーティファクトに二重署名してソース・コードの少なくとも一部をコンパイルすること、を実行する、コンパイラおよびソース・コードを含むソース・ファイルとともに使用するための方法、コンピュータ・プログラム製品、またはシステム、あるいはそれらの組み合わせが存在する。
【0006】
ここで、本発明の好適な実施形態が、単なる例として、以下の図面を参照しながら説明される。
【図面の簡単な説明】
【0007】
【
図1】本発明によるシステムの第1の実施形態のブロック図である。
【
図2】第1の実施形態のシステムによって少なくとも一部実行される第1の実施形態の方法を示すフローチャートの図である。
【
図3】第1の実施形態のシステムのマシン・ロジック(例えば、ソフトウェア)部分を示すブロック図である。
【
図4】本発明による方法の第2の実施形態を示す第1のフローチャートの図である。
【
図5】本発明による方法の第2の実施形態を示す第2のフローチャートの図である。
【発明を実施するための形態】
【0008】
この発明を実施するための形態の項目は、以下の小項目、(i)ハードウェアおよびソフトウェア環境、(ii)実施形態の例、(iii)さらなるコメントまたは実施形態あるいはその両方、および(iv)定義に分割されている。
【0009】
I.ハードウェアおよびソフトウェア環境
本発明は、統合の任意の可能な技術的詳細レベルにおけるシステム、方法、またはコンピュータ・プログラム製品、あるいはそれらの組み合わせであってもよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読記憶媒体(または複数の媒体)を含み得る。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読記憶媒体(または複数の媒体)を含み得る。
【0010】
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のための命令を保持し、記憶し得る有形デバイスであってもよい。コンピュータ可読記憶媒体は、例えば、電子記憶デバイス、磁気記憶デバイス、光学記憶デバイス、電磁気記憶デバイス、半導体記憶デバイス、または前述したものの任意の適当な組み合わせであってもよいが、それらに限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、消去可能プログラマブル読み取り専用メモリ(EPROMまたはフラッシュ・メモリ)、静的ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD-ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フロッピー(R)・ディスク、パンチカードまたは命令をその上に記録させる溝内の隆起構造などの機械的に符号化されたデバイス、および前述したものの任意の適当な組み合わせを含む。本明細書で用いられるコンピュータ可読記憶媒体は、電波もしくは他の自由伝播する電磁波、導波管もしくは他の送信媒体を通って伝播する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、または電線を通って送信される電気信号などの、一過性信号それ自体であると解釈されるべきではない。
【0011】
「記憶デバイス」は、ここでは、コンピュータ・コードがコンピュータ・プロセッサによってアクセス可能であるような方法で、コンピュータ・コードを記憶するように作られたもの、または適合されたものであると定義される。記憶デバイスは、典型的には、記憶媒体を含み、記憶媒体は、コンピュータ・コードのデータがその中またはその上に記憶される物質である。単一の「記憶デバイス」は、(i)離隔もしくは分散された複数の分離した部分(例えば、単一のコンピュータ・プログラムをまとめて記憶する6つのラップトップ・コンピュータにそれぞれ位置する6つのソリッド・ステート記憶デバイスのセット)を有してもよく、または(ii)複数の記憶媒体(例えば、コンピュータの不揮発性ストレージ内の磁気ドメインとして部分的に記憶され、かつコンピュータの揮発性メモリ内の半導体スイッチのセットに部分的に記憶された、コンピュータ・コードのセット)を使用してもよく、あるいはその両方である。「記憶媒体」という用語は、複数の異なる種類の記憶媒体が使用される状況を包含するように解釈されるべきである。
【0012】
本明細書に記載されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、あるいはネットワーク、例えば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくは無線ネットワーク、またはそれらの組み合わせを介して外部コンピュータまたは外部記憶デバイスに、ダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはそれらの組み合わせを含み得る。各コンピューティング/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、コンピュータ可読プログラム命令をネットワークから受信し、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体の記憶用にコンピュータ可読プログラム命令を転送する。
【0013】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、またはSmalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語もしくは類似のプログラミング言語などの従来の手続き型プログラミング言語を含む、1つもしくは複数のプログラミング言語の任意の組み合わせで書かれたソース・コードもしくはオブジェクト・コードのいずれかであってもよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で完全に、ユーザのコンピュータ上で部分的に、スタンドアロン・ソフトウェア・パッケージとして、ユーザのコンピュータ上で部分的にかつリモート・コンピュータ上で部分的に、またはリモート・コンピュータもしくはサーバ上で完全に、実行してもよい。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む任意の種類のネットワークを通してユーザのコンピュータに接続されてもよく、または、接続は、(例えば、インターネット・サービス・プロバイダを用いてインターネットを通して)外部コンピュータに対して行われてもよい。いくつかの実施形態では、例えば、プログラマブル・ロジック回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA)を含む電子回路は、本発明の態様を実行するために、コンピュータ可読プログラム命令の状態情報を用いて電子回路を個別化することによって、コンピュータ可読プログラム命令を実行し得る。
【0014】
本発明の態様は、発明の実施形態による、方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して、本明細書に記載される。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方のブロックの組み合わせが、コンピュータ可読プログラム命令によって実施され得ると理解されたい。
【0015】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラマブル・データ処理装置のプロセッサによって実行する命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定される機能/動作を実施する手段を生成するように、汎用コンピュータ、専用コンピュータ、または他のプログラマブル・データ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。また、これらのコンピュータ可読プログラム命令は、命令が記憶されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定される機能/動作の態様を実施する命令を含む製品を含むように、コンピュータ可読記憶媒体に記憶され、コンピュータ、プログラマブル・データ処理装置、または他のデバイス、あるいはそれらの組み合わせに特定の方式で機能するように指示することができるものであってもよい。
【0016】
また、コンピュータ可読プログラム命令は、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックにおいて指定される機能/動作を実施するように、コンピュータ実施プロセスを作り出すために、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードされ、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させるものであってもよい。
【0017】
図面中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の考えられる実施態様のアーキテクチャ、機能性、および動作を例示している。この点に関して、フローチャートまたはブロック図内の各ブロックは、指定された論理機能を実施するための1つまたは複数の実行可能命令を含む、モジュール、セグメント、または命令の一部を表し得る。いくつかの代替実施態様において、ブロック内に記載された機能は、図面中に記載された順序以外で発生してもよい。例えば、連続して示される2つのブロックが、実際には、実質的に同時に実行されてもよく、または、ブロックが、関係する機能性次第で逆の順序で実行されることがあってもよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組み合わせが、指定された機能もしくは動作を実行し、または専用ハードウェアおよびコンピュータ命令の組み合わせを実行する専用ハードウェア・ベース・システムによって実施され得ることにも留意されたい。
【0018】
図1に示すように、ネットワーク化コンピュータ・システム100は、本発明の様々な実施形態と共に使用するためのハードウェアおよびソフトウェア環境の実施形態である。ネットワーク化コンピュータ・システム100は、サーバ・サブシステム102(本明細書ではより簡単にサブシステム102と呼ぶこともある)、クライアント・サブシステム104、106、108、110、112、および通信ネットワーク114を含む。サーバ・サブシステム102は、サーバ・コンピュータ200、通信ユニット202、プロセッサ・セット204、入力/出力(I/O)インターフェース・セット206、メモリ208、永続的ストレージ210、ディスプレイ212、外部デバイス214、ランダム・アクセス・メモリ(RAM)230、キャッシュ232、およびプログラム300を含む。
【0019】
サブシステム102は、ラップトップ・コンピュータ、タブレット・コンピュータ、ネットブック・コンピュータ、パーソナル・コンピュータ(PC)、デスクトップ・コンピュータ、携帯情報端末(PDA)、スマートフォン、または任意の他の種類のコンピュータ(以下の定義の項目における「コンピュータ」の定義を参照)であってもよい。プログラム300は、この発明を実施するための形態の項目の実施形態の例の小項目において、以下で詳細に述べるあるソフトウェア機能を作成し、管理し、制御するために使用される機械可読命令またはデータあるいはその両方の集合体である。
【0020】
サブシステム102は、通信ネットワーク114を介して他のコンピュータ・サブシステムと通信可能である。ネットワーク114は、例えば、ローカル・エリア・ネットワーク(LAN)、インターネットなどのワイド・エリア・ネットワーク(WAN)、または2つの組み合わせであってもよく、有線、無線、または光ファイバ接続を含んでもよい。概して、ネットワーク114は、接続およびサーバとクライアント・サブシステムとの間の通信をサポートするプロトコルの任意の組み合わせであってもよい。
【0021】
サブシステム102は、多くの両矢印を有するブロック図として示されている。これらの両矢印(別個の参照番号がない)は、通信ファブリックを表し、通信ファブリックは、サブシステム102の様々なコンポーネント間に通信を提供する。この通信ファブリックは、プロセッサ(マイクロプロセッサ、通信およびネットワーク・プロセッサなど)、システム・メモリ、周辺デバイス、およびコンピュータ・システム内の任意の他のハードウェア・コンポーネント間でデータまたは制御情報あるいはその両方を受け渡すように設計された任意のアーキテクチャで実施され得る。例えば、通信ファブリックは、少なくとも一部、1つまたは複数のバスで実施され得る。
【0022】
メモリ208および永続的ストレージ210は、コンピュータ可読記憶媒体である。概して、メモリ208は、任意の適当な揮発性または不揮発性コンピュータ可読記憶媒体を含み得る。現在または近い将来あるいはその両方において、(i)外部デバイス214は、サブシステム102のためのいくつかのもしくは全てのメモリを供給することが可能であってもよく、または(ii)サブシステム102の外部のデバイスは、サブシステム102にメモリを提供することが可能であってもよく、あるいはその両方であることにさらに留意されたい。メモリ208および永続的ストレージ210の両方が、(i)転送中の信号よりも一時的でない方法でデータを記憶し、(ii)(磁気または光学ドメインなどの)有形媒体上にデータを記憶する。この実施形態では、メモリ208は、揮発性ストレージであり、永続的ストレージ210は、不揮発性ストレージを提供する。永続的ストレージ210によって使用される媒体は、また、着脱可能であってもよい。例えば、着脱可能なハード・ドライブは、永続的ストレージ210に使用されてもよい。他の例は、永続的ストレージ210の一部でもある別のコンピュータ可読記憶媒体上への転送のためにドライブ内に挿入される、光ディスクおよび磁気ディスク、サム・ドライブ、ならびにスマート・カードを含む。
【0023】
通信ユニット202は、サブシステム102の外部の他のデータ処理システムまたはデバイスとの通信を提供する。これらの例では、通信ユニット202は、1つまたは複数のネットワーク・インターフェース・カードを含む。通信ユニット202は、物理的通信リンクおよび無線通信リンクのいずれかまたは両方の使用を通して通信を提供し得る。本明細書で述べるいかなるソフトウェア・モジュールも、永続的記憶デバイス(永続的ストレージ210など)に通信ユニット(通信ユニット202など)を通してダウンロードされ得る。
【0024】
I/Oインターフェース・セット206は、サーバ・コンピュータ200とのデータ通信においてローカルに接続され得る他のデバイスとのデータの入力および出力を可能にする。例えば、I/Oインターフェース・セット206は、外部デバイス・セット214への接続を提供する。外部デバイス・セット214は、典型的には、キーボード、キーパッド、タッチ・スクリーン、またはいくつかの他の適当な入力デバイス、あるいはそれらの組み合わせなどのデバイスを含む。外部デバイス・セット214は、例えば、サム・ドライブ、ポータブル光ディスクまたは磁気ディスク、およびメモリ・カードなどの、ポータブル・コンピュータ可読記憶媒体も含み得る。本発明の実施形態を実践するために使用されるソフトウェアおよびデータ、例えば、プログラム300は、このようなポータブル・コンピュータ可読記憶媒体上に記憶され得る。I/Oインターフェース・セット206は、また、ディスプレイ212とのデータ通信において接続する。ディスプレイ212は、ユーザにデータを表示するための機構を提供するディスプレイ・デバイスであり、例えば、コンピュータ・モニタまたはスマートフォン・ディスプレイ・スクリーンであってもよい。
【0025】
この実施形態では、プログラム300は、通常はメモリ208の1つまたは複数のメモリを通して、プロセッサ・セット204の1つまたは複数のコンピュータ・プロセッサによるアクセスまたは実行あるいはその両方のために、永続的ストレージ210に記憶される。プログラム300は、実行時の間または実行中でないときあるいはその両方において、より高度に分散された方式で記憶されてもよいことを、当業者には理解されたい。プログラム300は、機械可読命令および機械実行可能命令の両方または実体データ(即ち、データベースに記憶されたデータの種類)あるいはその両方を含み得る。この特定の実施形態では、永続的ストレージ210は、磁気ハード・ディスク・ドライブを含む。いくつかの可能な変形を挙げると、永続的ストレージ210は、ソリッド・ステート・ハード・ドライブ、半導体記憶デバイス、読み取り専用メモリ(ROM)、消去可能プログラマブル読み取り専用メモリ(EPROM)、フラッシュ・メモリ、またはプログラム命令もしくはデジタル情報を記憶することが可能な任意の他のコンピュータ可読記憶媒体を含み得る。
【0026】
本明細書で説明するプログラムは、本発明の特定の実施形態で実施されるアプリケーションに基づいて識別される。しかしながら、本明細書における任意の特定のプログラムの名称は、単に便宜上使用されているに過ぎず、したがって、本発明は、そのような名称によって識別されまたは示唆され、あるいはその両方である任意の特定のアプリケーションにおいてのみ使用するように限定されるべきではないことを理解すべきである。
【0027】
本発明の様々な実施形態の説明は、例示の目的で提示されているが、網羅的であること、または開示された実施形態に限定することを意図するものではない。説明する実施形態の範囲および思想から逸脱することなく、多くの変更および変形が当業者には明らかであろう。本明細書で使用される用語は、実施形態の原理、実際の用途、もしくは市場で発見される技術を超える技術的改善を最もよく説明するため、または他の当業者が本明細書で開示された実施形態を理解することを可能にするために、選択された。
【0028】
II.実施形態の例
図1に示すように、ネットワーク化コンピュータ・システム100は、本発明による例示的な方法が実行され得る環境である。
図2に示すように、フローチャート250は、本発明による例示的な方法を示している。
図3に示すように、プログラム300は、フローチャート250の方法の動作の少なくともいくつかの実行を行うかまたは制御する。この方法および関連するソフトウェアについて、ここで、
図1、
図2、および
図3のブロックを広範囲に参照して以下の段落にわたって述べる。
【0029】
処理は、動作S255において開始し、S255において、ソース・ファイル署名モジュール(「mod」)302は、ソース・コードを含むソース・ファイルに署名する。処理は、動作S260に進み、S260において、ソース・ファイル編集モジュール304は、コミットによりソース・ファイルを編集する。この編集によって、ソース・ファイルに関連付けられた更新後の署名の生成が発生する。処理は、動作S265に進み、S265において、コンパイラ306は、ソース・コードの少なくとも一部をコンパイルするためのリクエストを受信し、コンパイルされるソース・ファイルの署名の妥当性を確認する。ソース・ファイルの署名の妥当性確認の成功に応答して、処理はS270に進み、S270において、バイナリおよびアーティファクト署名サブモジュール308は、バイナリおよびアーティファクトに二重署名を行う。処理は、動作S275に進み、S275において、デプロイメント・モジュール310は、バイナリおよびアーティファクトの複製をデプロイするためのリクエストを受信する。処理は、動作S280に進み、S280において、バイナリおよびアーティファクト署名検証サブモジュール312は、ソース・ファイルが安全であると判断するのを助けるために、デプロイメントのために作られたバイナリおよびアーティファクトの二重署名された署名の妥当性を確認する。処理は、動作S285に進み、S285において,複数の署名の妥当性確認に応答して、モジュール310は、安全性および整合性の懸念に関して比較的確信をもって、複製が使用され得るクライアント・サブシステム104にバイナリおよびアーティファクトの複製をデプロイする。
【0030】
本発明のいくつかの実施形態では、(i)修正コンパイラが、スケーリングの必要性を低下させ、かつ強力な暗号保証を提供するために、出力バイナリに対して実行される署名に対して暗号関係を有する署名付きソース・コードのみをコンパイルし、または(ii)署名することが、ソース・コード管理システムから取り出され、かつコンパイラの署名を有する出力アーティファクトを提供する、ソース・コード・ファイルに拡張され、あるいはその両方である。
【0031】
III.さらなるコメントまたは実施形態あるいはその両方
本発明のいくつかの実施形態は、現在の技術水準に関する以下の事実、潜在的な問題、または改善の可能性のある領域、あるいはそれらの組み合わせとして、(i)サプライ・チェーン攻撃についてのアタック・サーフェスを減少させるさらなる方法が必要とされること、または(ii)ソフトウェアを顧客に出荷する前にベンダが攻撃指標を検出するための方法が必要であること、あるいはその両方を認識している。
【0032】
本発明のいくつかの実施形態は、以下の動作、特徴、特性、または利点、あるいはそれらの組み合わせとして、(i)出力バイナリに対して実行される署名に対して暗号関係を有する署名付きソース・コードのみをコンパイルする修正コンパイラを使用すること、(ii)スケーリングの必要性を低下させること、(iii)強力な暗号保証を提供すること、(iv)ソース・コード管理システムから取り出されたソース・コード・ファイルに署名することを拡張すること、(v)使用されたコンパイラの署名を有するアーティファクトを出力すること、または(vi)上述の組み合わされた拡張が、配布後に結果として生じるソフトウェアの顧客によるものを含む、より大きな外部検証を可能にすること、あるいはそれらの組み合わせ、のうちの1つまたは複数を含み得る。
【0033】
本発明のいくつかの実施形態は、以下の動作、特徴、特性、または利点、あるいはそれらの組み合わせとして、(i)(a)コンパイラによって使用されたソース・コードがトラステッドであること、もしくは(b)コンパイラ自体がトラステッドであること、もしくはその両方を検証し得るように、証明書チェーンおよび修正コンパイラを利用すること、(ii)プロセスがビルド・エンジンの外部で実行され得ること、(iii)各ソース・ファイルを個別の署名付きエンティティとして扱い、コンパイラ内でそれを使用して、コンパイルされたアーティファクトが真正でありソースの正確な表現であるという保証を与えること、(iv)ソース・コード管理システムにコミットされた後のコードのパスにより重点を置くこと、または(v)チェックアウトされたコードと最終的な成果物との間の暗号関係が本発明の実施形態であること、あるいはそれらの組み合わせ、のうちの1つまたは複数を含み得る。
【0034】
本発明の実施形態による方法は、以下の動作(必ずしも以下の順序ではない)、(i)キーチェーンが使用されるPKI(公開鍵インフラストラクチャ)を使用したサプライ・チェーン攻撃から保護すること、(ii)ソース管理システムにのみ利用可能な秘密鍵を使用して改ざんから保護するためにソース・ファイルに署名すること、(iii)コンパイル中にコンパイラによってソース・ファイル署名の妥当性を確認すること、(iv)検証失敗の場合に警告を報告すること、(v)ベンダ・コンパイル鍵を使用してコンパイラによってバイナリ/実行可能ファイルに二重署名すること、および(vi)コンパイラに付属する事前構築鍵を使用して、コンパイラがトラステッドであることを保証すること、を含む。
【0035】
本発明のいくつかの実施形態は、以下の動作、特徴、特性、または利点、あるいはそれらの組み合わせとして、(i)修正コンパイラを使用することにより、ビルド・システムにおいてソース・コードを改ざんから保護すること、(ii)システムにおいて、全てのソース・ファイルがベンダ・ソース・コード署名鍵を使用して署名されること、(iii)ファイルがコミットを通して編集されるときに署名が更新されること、(iv)コンパイラが、ソース・コードのコンパイル中に署名の妥当性を確認することによってソース・コードが改ざんされていないことを検証すること、(v)コンパイラが、ベンダ・コンパイル署名鍵およびコンパイラ内蔵鍵を使用して生成されたバイナリ/アーティファクトに二重署名すること、または(vi)ソフトウェアをデプロイする前に、システムがバイナリの署名の妥当性を確認すること、あるいはそれらの組み合わせ、のうちの1つまたは複数を含み得る。
【0036】
本発明のいくつかの実施形態は、以下の動作、特徴、特性、または利点、あるいはそれらの組み合わせとして、(i)トラステッドなコンパイラおよびトラステッドなソース・コードから生じるアーティファクト自体の両方の第三者検証を可能にすること、(ii)攻撃を成功させるには全てに侵入する必要があるように、複数の分離したシステムにセキュリティを分散すること、(iii)大規模組織および政府機関を含む世界中の何千もの顧客のためにソフトウェアを製造する大手企業によって使用され得ること、(iv)顧客および企業の評判に有害であり得るソフトウェアのいかなる悪意のある侵入に対しても保護を提供すること、または(v)サプライ・チェーン攻撃に対して製品を強化するためのセキュリティの実践を含むこと、あるいはそれらの組み合わせ、のうちの1つまたは複数を含み得る。
【0037】
本発明のいくつかの実施形態は、ベンダ保護に関する以下の動作、特徴、特性、または利点、あるいはそれらの組み合わせとして、(i)キー・チェーンが、ソース・コードおよび結果として生じるアーティファクトに署名するために使用されること、または(ii)チェーンのセットアップが、チェーンの各要素がチェーン内の前の要素によって署名されている、以下の手法:(a)ルート-グローバルな信頼機関、(b)中間-「n」連続の中間層の開始、(d)中間-「n」連続の中間層の終了、(d)ベンダ・ソース・コード鍵-ソース・コード管理システムからダウンロードされたソース・コードに署名するために使用され、このための秘密鍵が、ソース・コード管理システムのみにおいて利用可能であり、サーバ側の最初のコミット/プッシュに可能な限り近いソース・コードに署名する、および/もしくは(e)ベンダ・コンパイル鍵-コンパイルされたアーティファクトに署名するために使用され、これがコンパイラによるアクセスのためにビルド・エンジン上に分配された唯一の秘密鍵である、に従うこと、あるいはその両方、のうちの1つまたは複数を含み得る。
【0038】
本発明のいくつかの実施形態は、コンパイラ修正に関する以下の動作、特徴、特性、または利点、あるいはそれらの組み合わせとして、(i)コンパイラが、コンパイラ秘密鍵で事前に構築され、出力アーティファクトに署名するためにそれが使用されること、(ii)コンパイラの公開鍵が検証のために周知されていること、(iii)コンパイラが、ベンダ・ソース・コード鍵によって署名された、ベンダ・コンパイル鍵へのアクセスで構成されること、(iv)コンパイラが、同一のベンダ・ソース・コード鍵によって署名されているソース・ファイルのみにアクセスするように修正されること、(v)コンパイラにより出力されたアーティファクトが、その後ベンダ・コンパイル鍵およびコンパイラ鍵の両方によって署名されること、または(vi)二重署名プロセスが、(a)アーティファクトが、それ自体修正されていないトラステッドなコンパイラによって生成されたこと、もしくは(b)アーティファクトが、改ざんされていない署名付きソース・コード・ファイルのみから導出された鍵で署名されたこと、もしくはその両方を検証することを可能にすること、あるいはそれらの組み合わせ、のうちの1つまたは複数を含み得る。
【0039】
本発明の実施形態に従って、ここで、ビルド・マシンにおける悪意で挿入されたコードの検出について述べる。サンスポット(Sunspot)などのマルウェアが、正当なソース・コードを悪意のあるソース・コードで置換しようとする状況を考えてみよう。コンパイラが、ソース・ファイルをビルドしようとするとき、コンパイラはまず、ベンダ・ソース・コード公開鍵を使用して署名の検証を実行する。悪意のあるソース・コード・ファイルの場合、このチェックは失敗し、コンパイラは、警告のフラグを立て、ビルドを中止する。さらに、ビルド・エンジン上のコンパイラが侵入を受けて、上記チェックが除去された場合、出力バイナリ上の署名の検証(または署名の欠如)によって、出力が安全かつトラステッドな環境で生成されていないことが識別される。
【0040】
図4に示すように、修正コンパイラを有するビルド/CI(継続的インテグレーション)システムのフローチャート400は、リポジトリをビルドするブロックと、生成されるバイナリ毎に、ベンダ・ソース・コード公開鍵を使用して全ての関連ソース・ファイル署名を検証するブロックと、検証失敗(はい/いいえ)決定ブロックと、コンパイルしてバイナリを生成し、ベンダ・コンパイル鍵およびコンパイラ鍵を使用して二重署名するブロックと、警告ブロックと、を含む。
図4のフローチャート400は、本発明の実施形態を理解するのに役立つ。
【0041】
図5に示すように、デプロイ・ソフトウェア(CD(継続的デリバリ))フローチャート500は、リリースをデプロイするブロックと、バイナリ毎に、ベンダ・コンパイル公開鍵およびコンパイラ公開鍵を使用して両方の署名を検証するブロックと、検証失敗(はい/いいえ)決定ブロックと、ソフトウェアをデプロイするブロックと、警告ブロックと、を含む。
図5のフローチャート500は、本発明の実施形態を理解するのに役立つ。
【0042】
本発明のいくつかの実施形態は、以下の動作、特徴、特性、または利点、あるいはそれらの組み合わせとして、(i)ソース・コード管理システムにアクセス可能な秘密鍵を使用してソース・ファイルに署名すること、(ii)コンパイル中にコンパイラによって署名の検証を提供すること、(iii)コンパイラがトラステッドであることを保証するためにコンパイラによるバイナリの二重署名を含むこと、(iv)コミット時にソース・コード管理システムによってソース・コードに署名することに重点を置くこと、(v)コンパイラによるコンパイルのための必要条件として署名を検証すること、(vi)コミット時にソース・コード管理システムにアクセス可能な鍵によってソース・コードが署名されることを保証することによって、ソース・コードの改ざんを防止すること、(vii)コンパイル実行前にビルド・システム内のコンパイラによって署名の妥当性が確認されること、(viii)トラステッドなコンパイラが使用されることを保証するために、コンパイラもアーティファクトに二重署名すること、(ix)ソース・コード管理にアクセス可能な鍵によってコミット時にソース・コードに署名することに重点を置くこと、または(x)コンパイルする前にコンパイラによる署名を検証すること、あるいはそれらの組み合わせ、のうちの1つまたは複数を含み得る。
【0043】
IV.定義
本発明:「本発明」という用語によって説明される主題が、出願時の特許請求の範囲、または特許審査後に最終的に発行され得る特許請求の範囲のいずれかによって包含されることの絶対的指示として取られるべきではなく、「本発明」という用語は、読み手が、本明細書における開示が新規である可能性があると思われる全般的な感触を得ることを助けるために使用されるが、「本発明」という用語の使用によって示されるこの理解は、関連する情報が開発され、かつ特許請求の範囲が補正される可能性があるために、一時的かつ暫定的なものであり、特許審査の過程で変更される可能性がある。
【0044】
実施形態:上記の「本発明」の定義を参照のこと。類似の注意事項が「実施形態」という用語に当てはまる。
【0045】
および/または:包括的、または例えば、A、B、「および/または」Cは、AまたはBまたはCのうちの少なくとも1つが真であり、適用可能であることを意味する。
【0046】
含むこと(including)/含む(include)/含む(includes):明示的に記載しない限り、「含むが、必ずしも限定されない」ことを意味する。
【0047】
モジュール/サブモジュール:モジュールが、(i)単独でローカルに近接しているか、(ii)広範囲に分散しているか、(iii)ソフトウェア・コードの大きな部分の中で単独で近接しているか、(iv)ソフトウェア・コードの単一部分の中に位置しているか、(v)単一の記憶デバイス、メモリ、または媒体に位置しているか、(vi)機械的に接続されているか、(vii)電気的に接続されているか、または(viii)データ通信で接続されているか、あるいはそれらの組み合わせに関係なく、何らかの種類の機能を行うために動作可能に作動する、ハードウェア、ファームウェア、またはソフトウェア、あるいはそれらの組み合わせの任意のセット。
【0048】
コンピュータ:デスクトップ・コンピュータ、メインフレーム・コンピュータ、ラップトップ・コンピュータ、フィールド・プログラマブル・ゲート・アレイ(FPGA)ベース・デバイス、スマートフォン、携帯情報端末(PDA)、身体装着型または挿入型コンピュータ、組み込みデバイス型コンピュータ、特定用途向け集積回路デバイス(ASIC)ベース・デバイスを含むが、これらに限定されない、重要なデータ処理ケイパビリティまたは機械可読命令読取ケイパビリティあるいはその両方を有する任意の装置。
【国際調査報告】