IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ミツビシ・エレクトリック・アールアンドディー・センター・ヨーロッパ・ビーヴィの特許一覧

特許7433510セキュリティポリシーの実施を検証する方法、記憶媒体、コンピュータプログラム、及び処理回路
<>
  • 特許-セキュリティポリシーの実施を検証する方法、記憶媒体、コンピュータプログラム、及び処理回路 図1
  • 特許-セキュリティポリシーの実施を検証する方法、記憶媒体、コンピュータプログラム、及び処理回路 図2
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-02-08
(45)【発行日】2024-02-19
(54)【発明の名称】セキュリティポリシーの実施を検証する方法、記憶媒体、コンピュータプログラム、及び処理回路
(51)【国際特許分類】
   G06F 21/54 20130101AFI20240209BHJP
   G06F 21/57 20130101ALI20240209BHJP
【FI】
G06F21/54
G06F21/57 370
【請求項の数】 9
(21)【出願番号】P 2023502025
(86)(22)【出願日】2021-03-11
(65)【公表番号】
(43)【公表日】2023-05-10
(86)【国際出願番号】 JP2021010956
(87)【国際公開番号】W WO2022004072
(87)【国際公開日】2022-01-06
【審査請求日】2022-09-22
(31)【優先権主張番号】20305745.0
(32)【優先日】2020-07-02
(33)【優先権主張国・地域又は機関】EP
(73)【特許権者】
【識別番号】503163527
【氏名又は名称】ミツビシ・エレクトリック・アールアンドディー・センター・ヨーロッパ・ビーヴィ
【氏名又は名称原語表記】MITSUBISHI ELECTRIC R&D CENTRE EUROPE B.V.
【住所又は居所原語表記】Capronilaan 46, 1119 NS Schiphol Rijk, The Netherlands
(74)【代理人】
【識別番号】100110423
【弁理士】
【氏名又は名称】曾我 道治
(74)【代理人】
【識別番号】100111648
【弁理士】
【氏名又は名称】梶並 順
(74)【代理人】
【識別番号】100122437
【弁理士】
【氏名又は名称】大宅 一宏
(74)【代理人】
【識別番号】100147566
【弁理士】
【氏名又は名称】上田 俊一
(74)【代理人】
【識別番号】100161171
【弁理士】
【氏名又は名称】吉田 潤一郎
(72)【発明者】
【氏名】ボワイエ、ブノワ
【審査官】宮司 卓佳
(56)【参考文献】
【文献】米国特許出願公開第2008/0184208(US,A1)
【文献】国際公開第2006/087780(WO,A1)
【文献】特開2009-129206(JP,A)
【文献】米国特許出願公開第2007/0271617(US,A1)
【文献】米国特許出願公開第2009/0138729(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 21/54
G06F 21/57
(57)【特許請求の範囲】
【請求項1】
処理ユニットによって実行されるコンピュータプログラムによるセキュリティポリシーの実施を検証する方法であって、
各式が出力変数の内容を設定する複数の式について、セキュリティタイプを前記出力変数に関連付ける少なくとも1つの命令を含む、前記式に関連付けられた伝播ルールセットを取得する(S1)ことと、
前記複数の式のサブセットに関連付けられたセキュリティポリシー対応表を取得する(S2)ことであって、前記セキュリティポリシー対応表は、前記サブセットの各式について、内容が前記式によって設定される各出力変数に予想セキュリティタイプを関連付けることと、
複数の命令を含む前記コンピュータプログラムを取得する(S3)ことであって、各命令は、前記複数の式の中の式の実現値であり、少なくとも1つの命令は、前記サブセットの式の実現値であることと、
前記取得されたセキュリティポリシー対応表に基づいて、前記取得されたコンピュータプログラムをアノテートする(S4)ことであって、それによって、前記サブセットの式の実現値である各命令について、前記命令に関連付けられたアノテーションを含むとともに、内容が前記式によって設定される前記出力変数に関連付けられた前記予想セキュリティタイプを含む、アノテートされた前記コンピュータプログラムを取得することと、
前記取得された伝播ルールセットを使用して前記アノテートされたコンピュータプログラムの前記命令を解析することによって、伝播セキュリティタイプを、内容が前記アノテートされたコンピュータプログラムの命令によって設定される各出力変数に関連付ける(S5)ことと、
前記サブセットの式の実現値である前記アノテートされたコンピュータプログラムの各命令について、前記伝播セキュリティタイプを前記予想セキュリティタイプと比較する(S6)ことによって、前記コンピュータプログラムによる前記セキュリティポリシーの前記実施を検証することと、
を含み、
取得された前記伝播ルールセットは、変数の配列への参照子を入力データとして使用して所与の内容を所与の出力変数に設定する式に関連付けられ、
前記変数の配列は複数の変数を含み、
前記アノテートされたコンピュータプログラムは、前記式の実現値である命令を含み、
前記アノテートされたコンピュータプログラムの前記命令を解析することは、
変数セキュリティタイプを前記変数の配列の各変数に関連付けることと、
前記関連付けられた変数セキュリティタイプに基づいて、配列セキュリティタイプを前記変数の配列に関連付けることと、
前記取得された伝播ルールセット及び前記配列セキュリティタイプに基づいて、前記伝播セキュリティタイプを前記所与の出力変数に関連付けることと
を含む、方法。
【請求項2】
処理ユニットによって実行されるコンピュータプログラムによるセキュリティポリシーの実施を検証する方法であって、
各式が出力変数の内容を設定する複数の式について、セキュリティタイプを前記出力変数に関連付ける少なくとも1つの命令を含む、前記式に関連付けられた伝播ルールセットを取得する(S1)ことと、
前記複数の式のサブセットに関連付けられたセキュリティポリシー対応表を取得する(S2)ことであって、前記セキュリティポリシー対応表は、前記サブセットの各式について、内容が前記式によって設定される各出力変数に予想セキュリティタイプを関連付けることと、
複数の命令を含む前記コンピュータプログラムを取得する(S3)ことであって、各命令は、前記複数の式の中の式の実現値であり、少なくとも1つの命令は、前記サブセットの式の実現値であることと、
前記取得されたセキュリティポリシー対応表に基づいて、前記取得されたコンピュータプログラムをアノテートする(S4)ことであって、それによって、前記サブセットの式の実現値である各命令について、前記命令に関連付けられたアノテーションを含むとともに、内容が前記式によって設定される前記出力変数に関連付けられた前記予想セキュリティタイプを含む、アノテートされた前記コンピュータプログラムを取得することと、
前記取得された伝播ルールセットを使用して前記アノテートされたコンピュータプログラムの前記命令を解析することによって、伝播セキュリティタイプを、内容が前記アノテートされたコンピュータプログラムの命令によって設定される各出力変数に関連付ける(S5)ことと、
前記サブセットの式の実現値である前記アノテートされたコンピュータプログラムの各命令について、前記伝播セキュリティタイプを前記予想セキュリティタイプと比較する(S6)ことによって、前記コンピュータプログラムによる前記セキュリティポリシーの前記実施を検証することと、
を含み、
取得された前記伝播ルールセットは、構造体への参照子を入力データとして使用して所与の内容を所与の出力変数に設定する式に関連付けられ、
前記構造体は、変数の複数の配列を含み、
変数の各配列は複数の変数を含み、
前記アノテートされたコンピュータプログラムは、前記式の実現値である命令を含み、
前記アノテートされたコンピュータプログラムの前記命令を解析することは、
変数の各配列について、変数セキュリティタイプを前記変数の配列の各変数に関連付け、前記関連付けられた変数セキュリティタイプに基づいて、配列セキュリティタイプを前記変数の配列に関連付けることと、
前記関連付けられた配列セキュリティタイプに基づいて、構造体セキュリティタイプを前記構造体に関連付けることと、
前記取得された伝播ルールセット及び前記関連付けられた構造体セキュリティタイプに基づいて、前記伝播セキュリティタイプを前記所与の出力変数に関連付けることと、
を含む方法。
【請求項3】
取得された第1の伝播ルールセットが、第1の内容を第1の出力変数に設定する第1の式に関連付けられ、
取得された第2の伝播ルールセットが、前記第1の出力変数を入力変数として使用して第2の内容を第2の出力変数に設定する第2の式に関連付けられ、
前記アノテートされたコンピュータプログラムは、前記第1の式の実現値である第1の命令と、前記第1の式から下流にある、前記第2の式の実現値である第2の命令とを含み、
前記アノテートされたコンピュータプログラムの前記命令を解析することは、前記第1の伝播ルールセットに基づいて、第1の伝播セキュリティタイプを前記第1の出力変数に関連付けることと、前記第2の伝播ルールセット及び前記第1の伝播セキュリティタイプに基づいて、第2の伝播セキュリティタイプを前記第2の出力変数に関連付けることとを含む
請求項1又は2に記載の方法。
【請求項4】
取得された第1の伝播ルールセットが、第1の内容を第1の出力変数に設定する第1の式に関連付けられ、
取得された第2の伝播ルールセットが、第2の内容を前記第1の出力変数に設定する第2の式に関連付けられ、
取得された第3の伝播ルールセットが、前記第1の出力変数を入力変数として使用して第2の出力変数の出力内容を求める第3の式に関連付けられ、
前記アノテートされたコンピュータプログラムは、前記第1の式の実現値である第1の命令を含む第1の分岐を含み、
前記アノテートされたコンピュータプログラムは、前記第2の式の実現値である第2の命令を含む第2の分岐を含み、
前記アノテートされたコンピュータプログラムは、前記第1の分岐及び前記第2の分岐から下流に、前記第3の式の実現値である第3の命令を含み、
前記アノテートされたコンピュータプログラムの前記命令を解析することは、前記第1の伝播ルールセット及び前記第2の伝播ルールセットに基づいて、第1の伝播セキュリティタイプを前記第1の出力変数に関連付けることと、前記第3の伝播ルールセット及び前記第1の伝播セキュリティタイプに基づいて、第2の伝播セキュリティタイプを前記第2の出力変数に関連付けることとを含む
請求項1又は2に記載の方法。
【請求項5】
取得された第1の伝播ルールセットが、第1の内容を第1の出力変数に設定する第1の式に関連付けられ、
取得された第2の伝播ルールセットが、前記第1の出力変数を入力変数として使用して前記第1の出力変数の出力内容を更新する第2の式に関連付けられ、
前記アノテートされたコンピュータプログラムは、前記第1の式の実現値である第1の命令を含み、
前記アノテートされたコンピュータプログラムは、前記第1の命令から下流にループを含み、前記ループは、前記第2の式の実現値である第2の命令をn回反復し、
前記アノテートされたコンピュータプログラムの前記命令を解析することは、
前記第1の命令を解析することであって、それによって、前記第1の伝播ルールセットに基づいて、前記伝播セキュリティタイプを前記第1の出力変数に関連付けることと、
前記第2の命令の解析のn回の反復を実行することであって、それによって、前記第2の伝播ルールセットに基づいて、前記第1の出力変数に関連付けられた前記伝播セキュリティタイプを更新することと、
を含む
請求項1又は2に記載の方法。
【請求項6】
前記サブセットの式の実現値である前記アノテートされたコンピュータプログラムの命令について、前記伝播セキュリティタイプを前記予想セキュリティタイプと比較した後、前記伝播セキュリティタイプは、前記予想セキュリティタイプと異なり、
前記命令を示す表示と、内容が前記命令によって設定される前記出力変数を示す表示と、前記出力変数に関連付けられた前記伝播セキュリティタイプを示す表示とを記憶することにより、前記記憶された表示に基づいて解析報告をその後に生成する
請求項1から請求項までのいずれか1項に記載の方法。
【請求項7】
前記サブセットの式の実現値である前記アノテートされたコンピュータプログラムの命令について、前記伝播セキュリティタイプを前記予想セキュリティタイプと比較した後、前記伝播セキュリティタイプは、前記予想セキュリティタイプと異なり、
前記命令を示す表示と、内容が前記命令によって設定される前記出力変数を示す表示と、前記出力変数に関連付けられた前記予想セキュリティタイプを示す表示とを記憶することにより、前記記憶された表示に基づいて解析報告をその後に生成する
請求項1から請求項までのいずれか1項に記載の方法。
【請求項8】
前記処理ユニットによって実行されると、請求項1から請求項までのいずれか1項に記載の方法を前記処理ユニットに実行させる前記命令を含む
コンピュータ可読記憶媒体。
【請求項9】
メモリ(MEM)に動作可能に接続された前記処理ユニット(CPU)を具備する処理回路であって、前記処理回路は、請求項1から請求項までのいずれか1項に記載の方法を実行するように構成される
処理回路。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、サイバーセキュリティの分野に属する。
【0002】
特に、コンピュータプログラムによるセキュリティポリシーの実施を検証する方法、並びに対応するコンピュータ可読記憶媒体、コンピュータプログラム及び処理回路が開示される。
【背景技術】
【0003】
モノのインターネット及びモノの産業インターネットの現在発展している開発は、これまで閉ざされていた既存のシステムの相互接続をもたらしている。
【0004】
強く接続されたデバイス及び広く分散したシステムを相互接続するために、開発は、例えばWi-Fi技術、4G技術、及び/又は5G技術に基づく広帯域インターネット又は無線ネットワークのような公衆ネットワークインフラストラクチャに集中的に依拠している。
【0005】
その結果、ますます多くのデバイス及びシステムが、オープンネットワークに接続され、サイバー攻撃にますます多く晒されている。今日では、ソフトウェア及びシステムの技術者が、サイバー攻撃のリスクを真剣に検討し、セキュリティ専門家と共同で、セキュリティポリシーを設計している。
【0006】
残念なことに、そのようなデバイス又はシステム上で実行されるソフトウェアが、セキュリティポリシーを不適切に実施した場合、その結果として、ソフトウェアは、セキュリティポリシーが高品質であるにもかかわらず、いくつかの脅威に依然として晒されることになる。
【0007】
したがって、コンピュータプログラムによるセキュリティポリシーの実施を検証する方法、製品、デバイス及びシステムが必要とされている。
【0008】
データフローに関連したセキュリティプロパティを解析する既存の手法は、ランタイム解析、静的解析及び特定のプログラミング言語の使用を含む。
【0009】
ランタイム解析は、ソフトウェアテストの方法である。テイント解析(taint analysis)と呼ばれる特定のタイプのランタイム解析を以下に説明する。テイント解析は、どの変数をユーザ入力によって変更することができるのかをチェックするように構成された一般に用いられる方法である。全てのユーザ入力は、適切にチェックされないと危険を伴う可能性がある。この方法によると、ユーザによって制御することができるレジスタ及びメモリエリアをチェックすることが可能である。
【0010】
ランタイム解析を実行するには、プログラム実行中にオンザフライでデータフローを監視することを可能にするために、ソフトウェアのソースコードをインスツルメントすることが事前に必要とされる。
【0011】
コードをインスツルメントすることは、コードの各命令にプリハンドラ及びポストハンドラを追加することを特に含む。そのようなハンドラが呼び出されると、命令又はメモリ環境についての全ての情報を取り出すことができる。
【0012】
ソフトウェアは、その後、毎回異なる入力サンプルを使用して数回実行される。テイントとは、あらゆるユーザ入力をその性質によって特徴付け、その後、プログラムの実行中に行われる全ての計算を通じてこの性質を伝播させることである。
【0013】
例えば、ソフトウェアは、ユーザが変数v1に内容を代入することを可能にする場合がある。変数v1は、安全でないユーザ入力とみなされる場合があり、したがって、安全でないものとしてテイントされる場合がある。これを考慮すると、変数v1の内容を変数v2に代入することは、変数v2を安全でないものにする。変数v1の安全でないテイントは、変数v2に伝播される。
【0014】
並行して、クリティカル(critical)として識別されたデータを操作する命令を監視することができる。
【0015】
例えば、ソフトウェアは、クリティカルデータを操作することが考えられる。クリティカルデータは、所与のセキュリティポリシーに従ってトラステッド(trusted)の状態にあるべきデータであり、したがって、ソフトウェアの実行の全体にわたってテイントされていない状態にあるべきデータである。これを考慮すると、ソフトウェアの実行中に安全でないユーザ入力の安全でないテイントを伝播させることが、そのようなクリティカルデータがテイントされることをもたらす場合には、この実行のセキュリティポリシー違反を示すアラームが生成される。
【0016】
ランタイム解析の主な欠点は不完全性である。実際、一般的に、入力ドメインのサイズは、無限とみなされるほど十分に大きく、このことは、ランタイム解析がプログラムの起こり得る全ての実行をカバーすることができないことを意味する。この不完全性に起因して、セキュリティポリシーの順守のいくつかの障害が未検出のまま残るおそれがある。
【0017】
その上、多数の可能な入力をテストすることは、多くの時間を要する場合がある。
【0018】
静的解析は、ソースコードを直接検査することに対応する。その手法の主な利点は、静的解析が実行可能コードを必ずしも必要としないことである。
【0019】
これとは逆に、静的解析は、開発中のプログラムのいくつかの部分である命令のセットに対しても行うことができる。その結果、静的解析は、ソフトウェア開発の早期の段階であってもソースコードを修正することが可能である。
【0020】
セキュリティ問題に対処する多くの静的アナライザが知られている。対処されるセキュリティ問題の種類は、メモリ管理障害(例えば、バッファオーバフロー、ダングリングポインタ...)と、コードインジェクションに基づく一般的な攻撃とを含むことができる。セキュリティの政府機関又は連邦機関は、そのようなセキュリティ問題に対処することができる静的アナライザの一覧表を定期的に公表し更新している。これらの静的アナライザの多くは、セキュリティ問題を引き起こすクリティカルなプログラミングパターンを探し、それらのセキュリティ問題を開発者に報告するという点でバグファインダとして振る舞う。これらのアナライザはかなり高速である。しかしながら、これらのアナライザのほとんどのものの欠点は、アラーム報告がないことが、コードがセキュア(secure)であることを保証するものでないことである。
【0021】
形式的方法に基づく静的アナライザのみが健全であり、アラームが静的解析中に発生していない場合にコードがセキュアであることを保証する。ランタイム解析又はバグファインダと比較して、健全性は、明らかに強い利点である。しかしながら、形式的方法に基づく静的アナライザに依拠することによって、開発者は、解析報告を理解するためにこの形式的方法に高度な知識を有する必要がある。この必要条件は、そのような静的アナライザの受け入れを制限する。
【0022】
データフローに関連したセキュリティプロパティの解析は、特定のプログラミング言語を使用してコード化することによって行うこともできる。
【0023】
実際、いくつかのプログラミング言語は、設計によってセキュリティ型(security-typed)にされる。セキュリティ型言語は、特にデータフロー関連セキュリティプロパティについて、セキュリティに専用化されたタイプシステム(type-system)を組み込んでいる。セキュリティ型言語を使用すると、ソフトウェア開発者は、タイプ宣言を介してアプリケーションセキュリティポリシーを指定することが必要となる。したがって、安全でないユーザ入力の上記例を引用すると、ユーザ入力の要求に関連付けられた命令は、開発者によって手動入力されたアノテーションとして、このユーザ入力が安全でないことを示す表示を含むことができる。その上、クリティカルデータの操作に関連付けられた命令の上記例を引用すると、この命令は、開発者によって手動入力されたアノテーションとして、このクリティカルデータがトラステッドであるべきであり、そうでなければ、アラームが生成されるべきであることを示す表示を含むことができる。
【0024】
セキュリティ型言語の手法は、セキュリティタイプ及びタイプチェッカーによって返されるアラームメッセージを理解することが必要とされるので、バグファインダの場合のように適用するのが容易であり、開発者にとって使用するのが簡単である。最後に、この種の解析は、コンパイラに直接統合することができる。タイプアノテーションは、セキュリティポリシーに従ってプログラムに挿入される。その上、タイプアノテーションは、機密性及び完全性の問題を容易にハンドリングすることができる。
【0025】
しかしながら、タイプ宣言を用いて命令を手動でアノテートすることは、多くの時間を要し、開発者によって入力される不適切な宣言がセキュリティポリシーの違反を特定できなくするおそれがあるので、本質的なエラー源である。
【0026】
したがって、組み込みソフトウェアがセキュリティポリシーを正しく実施することを効率的且つ完全に検証する方法が必要とされている。
【0027】
そのような方法は、実施レベルにおいて高レベルセキュリティポリシーを置き換えること(transposing)を可能にするべきである。
【0028】
そのような方法は、実施がセキュリティポリシーを満たしていることを更に自動的に検証するべきである。
【0029】
そのような方法は、セキュリティ問題が報告されない場合には、検証されたコードがセキュリティポリシーに関してセキュアであるとみなされるべき強い保証を提供するべきである。
【0030】
任意選択で、そのような方法は、開発者がセキュリティポリシー違反を特定、理解及び訂正することを助けるデバッグ情報を返すべきである。
【0031】
任意選択で、そのような方法は、どの特定の命令型言語にも限定されるべきでない。
【発明の概要】
【発明が解決しようとする課題】
【0032】
本発明は、添付の独立請求項によって定義される。本明細書に開示される概念の更なる特徴及び利点が以下の記載において示される。
【0033】
本開示は、上記状況を改善することを目的とする。
【課題を解決するための手段】
【0034】
したがって、本開示は、コンピュータプログラムによるセキュリティポリシーの実施を検証する方法であって、
-各式が出力変数の内容を設定する複数の式について、セキュリティタイプを上記出力変数に関連付ける少なくとも1つの命令を含む、当該式に関連付けられた伝播ルールセットを取得することと、
-複数の式のサブセットに関連付けられたセキュリティポリシー対応表を取得することであって、セキュリティポリシー対応表は、サブセットの各式について、内容が当該式によって設定される各出力変数に予想セキュリティタイプを関連付けることと、
-複数の命令を含むコンピュータプログラムを取得することであって、各命令は、複数の式の中の式の実現値(occurrence)であり、少なくとも1つの命令は、サブセットの式の実現値であることと、
-取得されたセキュリティポリシー対応表に基づいて、取得されたコンピュータプログラムをアノテートすることであって、それによって、サブセットの式の実現値である各命令について、当該命令に関連付けられたアノテーションを含むとともに、内容が当該式によって設定される出力変数に関連付けられた予想セキュリティタイプを含む、アノテートされたコンピュータプログラムを取得することと、
-取得された伝播ルールセットを使用してアノテートされたコンピュータプログラムの命令を解析することによって、伝播セキュリティタイプを、内容がアノテートされたコンピュータプログラムの命令によって設定される各出力変数に関連付けることと、
-サブセットの式の実現値であるアノテートされたコンピュータプログラムの各命令について、伝播セキュリティタイプを予想セキュリティタイプと比較することによって、コンピュータプログラムによるセキュリティポリシーの実施を検証することと、
を含む、方法を説明する。
【0035】
本開示に関して、変数は、内容又は値を収容する記憶アドレスと対になったシンボル名である。変数又はその名称を参照することは、記憶された値を参照するためのコンピュータサイエンスにおける通常の方法である。
【0036】
本開示に関して、式は、プログラミング言語が解釈及び計算して、本明細書では出力変数と呼ばれる別の値を生成する1つ以上の定数、変数、演算子、及び関数の組み合わせである。式の例には、以下のものがある。
-出力変数への内容の代入、又は
-結果として出力変数を出力する算術演算、又は
-結果として出力変数を出力する関数、若しくはサブルーチン。
【0037】
本開示に関して、セキュリティタイプは、変数に関連付けられたセキュリティの度合い、例えばセキュリティの2値の度合いを示す。例えば、各変数は、セキュア又はコンプロマイズド(compromised)とすることができる。例えば、データ完全性に関して、各変数は、非安全(unsafe)又はトラステッドとすることができる。例えば、データ機密性に関して、各変数は、シークレット又はパブリックとすることができる。
【0038】
本開示に関して、予想セキュリティタイプは、セキュリティポリシーに従って予想され、セキュリティポリシー対応表に実装されるセキュリティタイプに対応する。或る程度の自律性を有する車両の電子制御ユニットに適用されるセキュリティポリシーの一例は、車両の方向又は速度に対して直接の影響を有する全ての式をクリティカル式とみなすことである。この例によれば、セキュリティポリシー対応表は、トラステッドタイプの予想セキュリティタイプを上記クリティカル式によって出力される全ての変数に関連付けることができる。
【0039】
本開示に関して、伝播ルールセットは、最初は第1の変数に付属するセキュリティタイプが、例えば、第1の変数が、第2の変数を出力する関数によって入力データとして使用された結果として、第2の変数にどのように伝播するのかを示す。
【0040】
本開示に関して、アノテーションは、ソースコード内のテキストコメント等の表示である。このアノテーションは、例えばテキストエディターを使用して読むことができ、コンピュータプログラムによるセキュリティポリシーの実施を検証することを目的として、開示される方法によって使用される。ただし、そのようなアノテーションは、ソースコードの実行に影響を与えず、したがって、コンパイル及びインタープリットの際には無視される。
【0041】
そのような方法によって、専用のタイプシステムを用いてソースコードをアノテートすることによってセキュリティポリシーをアーキテクチャレベルから実施レベルに置き換えることが可能になる。
【0042】
そのような方法によって、実施がセキュリティポリシーを満たしていることを自動的且つモジュール式に検証することが可能になる。検証は、コード内の各式について1つずつ行われる。
【0043】
そのような方法は、検証がどのセキュリティ問題も報告しない場合には、コードがセキュリティポリシーアノテーションに関してセキュアであるとみなすことができるので、強い保証を提供する。
【0044】
そのような方法は、コード内で見つけられた各セキュリティポリシー違反のデバッグ情報を返すことを可能にすることができ、このデバッグ情報は、開発者がその問題を理解し、コードを修正することを助ける。
【0045】
ランタイム解析と比較して、開示される方法は、より高速であり、より強い保証を提供する。ランタイム解析は、通常、全てのテストを実行するのに数時間を要し、大量のテストにもかかわらず、決して網羅的でない。開示される方法は、起こり得る全てのプログラムの挙動をカバーする一方で、解析が数秒で行われるので、より高速である。
【0046】
開示される方法は、既知のバグファインダとほぼ同等に高速である。既知のバグファインダは、同種のセキュリティ問題に対処しておらず、代わりに、不良なメモリ管理(バッファオーバフロー、ダングリングポインタ...)等の実行エラー又は計算エラー(算術オーバフロー、未定義計算...)に焦点を当てている。
【0047】
形式的方法(モデル検査、抽象解釈)に基づく静的解析と比較して、開示される方法は、特にモジュール性(関数単位の解析)が本方法をスケーラブルにするので、適用するのがより容易である。これに対して、スケーラビリティは、既知の静的アナライザを使用した場合は管理するのが非常に困難であり、高度な専門知識を必要とする。
【0048】
セキュリティ型言語と比較して、開示される方法は、任意の命令型プログラミング言語に適用可能である。
【0049】
任意選択で、各伝播セキュリティタイプは、少なくともトラステッドタイプ及びサスピシャスタイプを含むセキュリティタイプのリストの中から選択される。
【0050】
任意選択で、各伝播セキュリティタイプは、少なくともシークレットタイプ及びパブリックタイプを含むセキュリティタイプのリストの中から選択される。
【0051】
セキュリティポリシーは、トラステッドタイプ及びサスピシャス(suspicious)タイプを完全性タイプとして使用して実施される完全性ポリシーと、シークレットタイプ及びパブリックタイプを機密性タイプとして使用して実施される機密性ポリシーとを含むことができる。各式によって出力される出力変数は、完全性タイプ及び/又は機密性タイプに関連付けることができる。
【0052】
任意選択で、
-取得された伝播ルールセットは、変数への参照子を入力データとして使用して所与の内容を所与の出力変数に設定する式に関連付けられ、
-アノテートされたコンピュータプログラムは、上記式の実現値である命令を含み、
-アノテートされたコンピュータプログラムの命令を解析することは、変数セキュリティタイプを変数に関連付けることと、取得された伝播ルールセット及び変数セキュリティタイプに基づいて、伝播セキュリティタイプを所与の出力変数に関連付けることとを含む。
【0053】
したがって、入力変数に関連付けられている事前に求められたセキュリティタイプを、入力変数への参照子を使用する命令の出力変数に伝播させることができる。
【0054】
任意選択で、
-取得された伝播ルールセットは、変数の配列への参照子を入力データとして使用して所与の内容を所与の出力変数に設定する式に関連付けられ、
-変数の配列は複数の変数を含み、
-アノテートされたコンピュータプログラムは、上記式の実現値である命令を含み、
-アノテートされたコンピュータプログラムの命令を解析することは、
-変数セキュリティタイプを変数の配列の各変数に関連付けることと、
-関連付けられた変数セキュリティタイプに基づいて、配列セキュリティタイプを変数の配列に関連付けることと、
-取得された伝播ルールセット及び配列セキュリティタイプに基づいて、伝播セキュリティタイプを所与の出力変数に関連付けることと、
を含む。
【0055】
したがって、入力変数に関連付けられている事前に求められたセキュリティタイプを、そのような入力変数を含む配列への参照子を使用する命令の出力変数に伝播させることができる。
【0056】
任意選択で、
-取得された伝播ルールセットは、構造体への参照子を入力データとして使用して所与の内容を所与の出力変数に設定する式に関連付けられ、
-構造体は、変数の複数の配列を含み、
-変数の各配列は複数の変数を含み、
-アノテートされたコンピュータプログラムは、上記式の実現値である命令を含み、
-アノテートされたコンピュータプログラムの命令を解析することは、
-変数の各配列について、変数セキュリティタイプを上記変数の配列の各変数に関連付け、関連付けられた変数セキュリティタイプに基づいて、配列セキュリティタイプを上記変数の配列に関連付けることと、
-関連付けられた配列セキュリティタイプに基づいて、構造体セキュリティタイプを構造体に関連付けることと、
-取得された伝播ルールセット及び関連付けられた構造体セキュリティタイプに基づいて、伝播セキュリティタイプを所与の出力変数に関連付けることと、
を含む。
【0057】
したがって、入力変数に関連付けられている事前に求められたセキュリティタイプを、そのような入力変数を含む配列を含んだ構造体への参照子を使用する命令の出力変数に伝播させることができる。
【0058】
より一般的には、命令が入力変数、入力配列及び/又は入力構造体への参照子を含むコンピュータプログラムを解析することが可能である。
【0059】
任意選択で、
取得された伝播ルールセットは、第1の内容を有する第1の変数への第1の参照子と、第2の内容を有する第2の変数への第2の参照子とを入力データとして使用して、第2の内容を有する更新された第1の変数と、第1の内容を有する更新された第2の変数とを出力する式に関連付けられ、
-アノテートされたコンピュータプログラムは、上記式の実現値である命令を含み、
-アノテートされたコンピュータプログラムの命令を解析することは、
-第1の変数セキュリティタイプを第1の変数に関連付けることと、
-第2の変数セキュリティタイプを第2の変数に関連付けることと、
-第1の変数セキュリティタイプを更新された第2の変数に関連付けることと、
-第2の変数セキュリティタイプを更新された第1の変数に関連付けることと、
を含む。
【0060】
したがって、2つの変数の内容を交換する命令を含むコンピュータプログラムを解析することが可能である。
【0061】
任意選択で、
-第1の取得された伝播ルールセットが、第1の内容を第1の出力変数に設定する第1の式に関連付けられ、
-第2の取得された伝播ルールセットが、第1の出力変数を入力変数として使用して第2の内容を第2の出力変数に設定する第2の式に関連付けられ、
-アノテートされたコンピュータプログラムは、第1の式の実現値である第1の命令と、第1の式から下流にある、第2の式の実現値である第2の命令とを含み、
-アノテートされたコンピュータプログラムの命令を解析することは、第1の伝播ルールセットに基づいて、第1の伝播セキュリティタイプを第1の出力変数に関連付けることと、第2の伝播ルールセット及び第1の伝播セキュリティタイプに基づいて、第2の伝播セキュリティタイプを第2の出力変数に関連付けることとを含む。
【0062】
したがって、2つ以上の命令からなるシーケンスを含むコンピュータプログラムを解析することが可能である。
【0063】
任意選択で、
-第1の取得された伝播ルールセットが、第1の内容を第1の出力変数に設定する第1の式に関連付けられ、
-第2の取得された伝播ルールセットが、第2の内容を第1の出力変数に設定する第2の式に関連付けられ、
-第3の取得された伝播ルールセットが、第1の出力変数を入力変数として使用して第2の出力変数の出力内容を求める第3の式に関連付けられ、
-アノテートされたコンピュータプログラムは、第1の式の実現値である第1の命令を含む第1の分岐を含み、
-アノテートされたコンピュータプログラムは、第2の式の実現値である第2の命令を含む第2の分岐を含み、
-アノテートされたコンピュータプログラムは、第1の分岐及び第2の分岐から下流に、第3の式の実現値である第3の命令を含み、
-アノテートされたコンピュータプログラムの命令を解析することは、第1の伝播ルールセット及び第2の伝播ルールセットに基づいて、第1の伝播セキュリティタイプを第1の出力変数に関連付けることと、第3の伝播ルールセット及び第1の伝播セキュリティタイプに基づいて、第2の伝播セキュリティタイプを第2の出力変数に関連付けることとを含む。
【0064】
したがって、条件分岐を含むコンピュータプログラムを解析することが可能である。
【0065】
任意選択で、
-第1の取得された伝播ルールセットが、第1の内容を第1の出力変数に設定する第1の式に関連付けられ、
-第2の取得された伝播ルールセットが、第1の出力変数を入力変数として使用して第1の出力変数の出力内容を更新する第2の式に関連付けられ、
-アノテートされたコンピュータプログラムは、第1の式の実現値である第1の命令を含み、
-アノテートされたコンピュータプログラムは、第1の命令から下流にループを含み、ループは、第2の式の実現値である第2の命令をn回反復し、
-アノテートされたコンピュータプログラムの命令を解析することは、
-第1の命令を解析することであって、それによって、第1の伝播ルールセットに基づいて、伝播セキュリティタイプを第1の出力変数に関連付けることと、
-第2の命令の解析のn回の反復を実行することであって、それによって、第2の伝播ルールセットに基づいて、第1の出力変数に関連付けられた伝播セキュリティタイプを更新することと、
を含む。
【0066】
したがって、条件ループを含むコンピュータプログラムを解析することが可能である。
【0067】
任意選択で、
-サブセットの式の実現値であるアノテートされたコンピュータプログラムの命令について、伝播セキュリティタイプを予想セキュリティタイプと比較した後、伝播セキュリティタイプは、予想セキュリティタイプと異なり、
-上記命令を示す表示と、内容が上記命令によって設定される出力変数を示す表示と、上記出力変数に関連付けられた伝播セキュリティタイプを示す表示とを記憶することにより、当該記憶された表示に基づいて解析報告をその後に生成する。
【0068】
任意選択で、
-サブセットの式の実現値であるアノテートされたコンピュータプログラムの命令について、伝播セキュリティタイプを予想セキュリティタイプと比較した後、伝播セキュリティタイプは、予想セキュリティタイプと異なり、
-上記命令を示す表示と、内容が上記命令によって設定される出力変数を示す表示と、上記出力変数に関連付けられた予想セキュリティタイプを示す表示とを記憶することにより、当該記憶された表示に基づいて解析報告をその後に生成する。
【0069】
したがって、コンピュータプログラム内のセキュリティポリシー違反を開発者に通知することができる有益な解析報告を生成することが可能である。この解析報告は、関連した命令と、セキュリティポリシー違反に関与する各変数とを指摘する。
【0070】
本開示はまた、処理ユニットによって実行されると、本明細書によって説明される方法のいずれかを処理ユニットに実行させる命令を含む、コンピュータ可読記憶媒体を説明する。
【0071】
本開示はまた、処理ユニットがアクセス可能であるとともに、処理ユニットによって実行されると、本明細書によって説明される方法のいずれかを処理ユニットに実行させる1つ以上の記憶された命令シーケンスを含む、コンピュータプログラムを説明する。
【0072】
本開示はまた、メモリに動作可能に接続された処理ユニットを具備する処理回路であって、当該処理回路は、本明細書によって説明される方法のいずれかを実行するように構成される、処理回路を説明する。
【図面の簡単な説明】
【0073】
図1】提案した方法を実行する処理回路の一例を示す図である。
図2】提案した方法を実行する例示的なソフトウェアの全体的なアルゴリズムのフローチャートである。
【発明を実施するための形態】
【0074】
次に図1を参照する。図1は処理回路の一例を示している。
【0075】
処理回路は、メモリMEM(102)に動作可能に接続された処理ユニットCPU(101)を具備する。処理ユニットCPU(101)は、1つ以上の処理コアを指す。メモリMEM(102)は、ROM、RAM、キャッシュ、又はそれらの組み合わせ等の任意の形態のコンピュータ可読記憶媒体を指す。
【0076】
メモリMEM(102)は、例示的なソフトウェアの1つ以上の命令シーケンスを記憶する。処理ユニットを使用してこれらの命令を実行することによって、処理ユニットは、本明細書によって説明される、コンピュータプログラムによるセキュリティポリシーの実施を検証する方法を実行する。
【0077】
次に図2を参照する。図2は、そのような例示的なソフトウェアの全体的なアルゴリズムのフローチャートを示している。
【0078】
プログラムがセキュリティポリシーを正しく実施することを検証することは、プログラムが操作する情報のエンドツーエンドの機密性、完全性及び/又は可用性を当該プログラムが安全に保護するかを判断することを意味する。したがって、セキュリティポリシーの実施を検証することは、コンピュータプログラムの各入力及び各出力を直接又は間接的にチェックして、セキュリティポリシーの起こり得るあらゆる違反を検出することを伴う。
【0079】
命令型プログラミング言語は、式に基づいている。式は、解釈及び計算されて少なくとも1つの結果値を出力として生成することができる1つ以上の定数、入力変数、演算子及び関数の組み合わせである。
【0080】
配列は、複数の入力変数又は出力変数から形成することができる。
【0081】
構造体は、複数の入力配列又は出力配列から形成することができる。
【0082】
式の例として、特に以下のものがある。
-少なくとも1つの出力値を出力変数に代入する式である代入、
-所定のプログラム命令シーケンスを呼び出し、したがって、少なくとも1つの出力値を出力し、場合によっては各出力値を出力変数に代入し、その後、プログラムの実行を再開する式である関数呼び出し、
-少なくとも1つの出力値が計算され、変数に代入されることもある点で、概ね関数のように挙動する演算子、
-等。
【0083】
式は、通常、式文としてコンピュータコードに組み込まれる。式文は、組み込まれた式が計算されて結果値を出力することを表す命令を形成する。いくつかの命令型プログラミング言語では、文の他の例として、goto(ゴーツー)文及びreturn(リターン)文が含まれることがある。これらの文はいずれも、通常は制御を返す関数呼び出しとは対照的に、別のラインのコードへの制御の一方向の転送を実行する命令を形成する。文の他の例として、文を構成要素として含む複合文がある。複合文の例には、ブロック、if文、ループ等がある。
【0084】
所与の命令型プログラミング言語によって許可されている全ての解釈可能な式を列挙することはここでは不可能である。しかしながら、全ての可能な式を組み合わせることは、複雑なメモリ管理をもたらす場合があることに留意されたい。例えば、複数参照、再帰データタイプ又は複雑なデータネスティングは、一般に、複雑なエイリアス関係をメモリに誘発する。
【0085】
上記のように、コンピュータプログラムによるセキュリティポリシーの実施を検証することは、コンピュータプログラムの各入力及び各出力を直接又は間接的にチェックして、セキュリティポリシーの起こり得るあらゆる違反を検出することを伴う。したがって、コンピュータプログラムの全体にわたって変数間の全ての関係を正しく識別することが必要とされる。
【0086】
実際には、産業デバイスに組み込まれることになるコンピュータプログラム等のほとんどの産業アプリケーション用に設計されるコンピュータプログラムを記述することは、そのような複雑なメモリ管理をもたらすことなく互いに組み合わせることができる所定の式の限られたセット以外の式を使用することを必要としない。このために、ソフトウェアが所定の式のリスト以外の式をサポートすることは必要でない。
【0087】
次に、産業アプリケーションの一例を示す。この例では、車両のブレーキを制御するプログラムが、電気エンジン、ブレーキ、ハンドル等の制御を担当する電子メカニズムを作動させるために、CANバスを介して複数の車両デバイスと通信することができる電子制御ユニットにおいて実施される。
【0088】
この例では、セキュリティの観点から、
-CANバスから電子制御ユニットによって取得される全てのデータは、コンプロマイズドとみなされ、
-フィールドデバイスの作動に関連したプログラムの全ての命令は、クリティカルとみなされ、そのようなものとして、セキュアなデータに基づいてのみ実行される。
【0089】
このアーキテクチャが確立されると、アントラステッド(untrusted)データをサニタイズするメカニズムを定義しなければならない。これらのメカニズムは、セキュリティ専門家によって精査及び承認された関数の所定のリストとして開発者に提供される。この関数の所定のリストに加えて、ソフトウェアは、演算子及び代入等の他の所定の式をサポートすることができる。
【0090】
ソフトウェアによってサポートされる各所定の式について、その所定の式に関連付けられた対応する伝播ルールセットが取得される(OBT PROP(S1))。
【0091】
取得された伝播ルールセットは、データセキュリティタイプを取り扱う。データセキュリティタイプは、変数に付属するラベルであり、この変数がセキュアであるとみなされるか否かを示す。
【0092】
データセキュリティタイプは、ラティスとして表すことができるタイプシステムによって形式化される。データセキュリティの中でも、完全性及び機密性は、2つの別個のラティスによってハンドリングすることができる。
【0093】
完全性のラティスの一例は、データを、タイプトラステッド又はタイプアントラステッドのいずれかであるとして分類することができる。タイプトラステッドは、タイプアントラステッドの厳密なサブタイプと更にみなすことができる(トラステッド<アントラステッドで示される)。具体的には、あらゆるトラステッドデータは、完全性の配慮がなければアントラステッドであるかのようにみなすことができる。一方、その逆は偽である。すなわち、いくつかのアントラステッドデータをトラステッドであるかのようにみなすことは、完全性の観点から障害がある。データセキュリティタイプは、テイントチェックに使用することができる。例えば、いくつかの関数は、第1の変数のデータセキュリティタイプを事前にチェックし、このデータセキュリティタイプがトラステッドである場合にのみ第2の変数を設定するために、この第1の変数の使用を続けるように設計することができる。
【0094】
完全性のラティスの上記例を取り扱う取得された伝播ルールセットの一例を以下に開示する。この例では、取得された伝播ルールセットは、式a+bに関連付けられている。この式は、出力値を計算するために、第1の変数a及び第2の変数bの配列への参照子を入力データとして使用する。第1の変数は、第1のセキュリティタイプ(τaで示す)を有する。第2の変数は、第2のセキュリティタイプ(τbで示す)を有する。この伝播ルールセットによれば、式a+bによって出力される値のタイプは、τa及びτbのより大きな上界として定義される。第1の変数a及び第2の変数bのうちの少なくとも一方がタイプアントラステッドを有する場合には、式a+bによって出力される値も、タイプアントラステッドを有する。そうでない場合には、式a+bによって出力される値には、タイプトラステッドを割り当てることができる。
【0095】
一般に、式は、当該式によって出力される値に影響を与えるという点で、当該式によって操作される1つ以上の変数として定義される変数環境を有することができる。上記例では、式a+bは、第1の変数a及び第2の変数bから形成される変数環境を有する。取得された各伝播ルールセットは、式に関連付けられており、どのデータセキュリティタイプがこの式によって出力される値に関連付けられるべきであるのかをこの式の変数環境に基づいて判断することを可能にするルールの演繹セットである。上記例では、取得された伝播ルールセットは、第1の変数aと第2の変数bとの和に関連付けられたデータセキュリティタイプを、これらの第1の変数及び第2の変数のそれぞれに関連付けられたデータセキュリティタイプに基づいて判断する。
【0096】
例として、代入に関連付けられた伝播ルールセットを含めることができる。
【0097】
一例では、定数値を出力変数に代入すると、その結果、出力変数は、タイプトラステッドに関連付けられる。
【0098】
一例では、タイプトラステッドに関連付けられた入力変数の値を出力変数に代入すると、その結果、出力変数は、タイプトラステッドに関連付けられる。
【0099】
一例では、タイプアントラステッドに関連付けられた入力変数の値を出力変数に代入すると、その結果、出力変数は、タイプアントラステッドに関連付けられる。
【0100】
別の例として、演算子に関連付けられた伝播ルールセットを含めることができる。
【0101】
一例では、全てタイプトラステッドに関連付けられている定数及び/又は入力変数に対して算術演算を実行すると、その結果として、タイプトラステッドに関連付けられた出力変数が出力される。
【0102】
一例では、タイプアントラステッドに関連付けられた少なくとも1つの入力変数を伴う算術演算を実行すると、その結果として、タイプアントラステッドに関連付けられた出力変数が出力される。
【0103】
別の例として、関数に関連付けられた伝播ルールセットを含めることができる。
【0104】
引き続き、電子制御ユニットにおいて実施されるプログラムの開発用に許可された関数の所定のリストの上記例について、そのような関数に関連付けられている取得された伝播ルールセットの例を以下に提供する。
【0105】
伝播ルールセットの第1の例は、変数の値を出力するget_user_id()で示される第1の関数に関連付けられている。この出力変数は、ユーザによって入力されるユーザ識別子に対応する。この例では、第1の関数は、ユーザ識別子が常にタイプトラステッドであるとみなされるように、それ自身のサニタイジングメカニズムを備える。
【0106】
伝播ルールセットの第2の例は、変数の値を出力するget_unsafe_cmd()で示される第2の関数に関連付けられている。この出力変数は、ユーザによって入力されるコマンドに対応する。この例では、第2の関数は、コマンドが常にタイプアントラステッドであるとみなされなければならないように、それ自身のサニタイジングメカニズムを備えていない。
【0107】
伝播ルールセットの第3の例は、サニタイザー関数であるauthenticate()で示される第3の関数に関連付けられている。このサニタイザー関数は、或る入力コマンドが所与の入力ユーザ識別子に許可されているかをチェックする。その結果、入力コマンドは許可される場合もあるし、許可されない場合もある。入力コマンドが許可される場合には、入力コマンドは出力され、タイプトラステッドに関連付けられる。入力コマンドが許可されない場合には、無効果のコマンドが出力され、タイプトラステッドに関連付けられる。この例では、出力コマンドは、常にタイプトラステッドであるとみなされる。
【0108】
伝播ルールセットの第4の例は、入力コマンドに基づいて或るデバイスを作動させる出力コマンドを出力するcritical_operation()で示される第4の関数に関連付けられている。この例では、出力コマンドは、入力コマンドと同じタイプであるとみなされなければならない。入力コマンドがタイプトラステッドである場合には、出力コマンドもタイプトラステッドである一方、入力コマンドがタイプアントラステッドである場合には、出力コマンドもタイプアントラステッドである。
【0109】
二元的に、機密性は、データを、タイプシークレット又はタイプパブリックのいずれかであるとして分類することによってハンドリングすることができる。加えて、タイプパブリックは、タイプシークレットの厳密なサブタイプと更にみなすことができ(パブリック<シークレットで示す)、これは、パブリックデータをシークレットデータとみなすことができるが、シークレットデータをパブリックデータとみすことはできないことを意味する(そうでない場合に、プログラムはいくつかのシークレットデータをリークするおそれがある)。
【0110】
暗号関数は、そのような関数によって出力される任意の出力変数にタイプシークレットを関連付ける伝播ルールセットに付属することができる関数の一例である。
【0111】
取得された伝播ルールセットは、いくつかのデータをシークレットに維持するように定義することができる。第1の変数を操作して第2の変数を得る所与の式を考えると、この所与の式に関連付けられた伝播ルールセットの一例は、第1の変数がタイプパブリックを有する場合に、いくつかのシークレットデータのリークの危険を回避するために、第2の変数にもタイプパブリックが割り当てられなければならないことを示すことができる。
【0112】
所与のプログラムがセキュリティポリシーを正しく実施するかをソフトウェアが正しく識別するには、セキュリティポリシーに従ってクリティカルとみなされるこのソフトウェアによってサポートされる所定の式のうちの式のサブセットを識別することも必要である。
【0113】
クリティカル式が、或る特定のタイプを有する変数のみを操作すると予想される式として、セキュリティポリシーに従って定義される。
【0114】
このために、複数の式の上記サブセットに関連付けられたセキュリティポリシー対応表が取得される(OBT EXP(S2))。取得されるセキュリティポリシー対応表は、サブセットの各式について、予想セキュリティタイプを、内容が当該式によって設定される各出力変数に関連付ける。
【0115】
引き続き、電子制御ユニットにおいて実施されるプログラムの開発用に許可された関数の所定のリストの上記例について、セキュリティポリシーは、critical_operation()で示される関数によって出力される出力コマンドが常にタイプトラステッドを有することを必要とし得る。
【0116】
この例では、セキュリティポリシー対応表は、少なくともcritical_operation()で示される関数を含むものとして定義された複数の式のサブセットに関連付けられる。セキュリティポリシー対応表は、この関数によって出力される出力コマンドに、予想タイプトラステッドを関連付ける。
【0117】
所与の産業アプリケーションの取得された伝播ルールセット及び取得されたセキュリティポリシー対応表に基づいて、ソフトウェアは、サポートされた式を使用して記述された任意のコンピュータプログラムのセキュリティポリシーの順守をチェックすることができる。
【0118】
順守についてチェックされるコンピュータプログラムが取得される(OBT PROG(S3))。
【0119】
このコンピュータプログラムは、複数の命令を含む少なくとも1つのソースコードファイルから形成される。各命令は、複数の式のうちの1つの式の実現値である。
【0120】
換言すれば、取得されたコンピュータプログラムの全ての命令は、これらの全ての命令にわたるタイプの伝播を評価することができるように、コンピュータプログラムを解析するソフトウェアによってサポートされる式の実現値である。
【0121】
その上、このコンピュータプログラムは、サブセットの式の実現値である少なくとも1つの命令を含む。
【0122】
換言すれば、取得されたコンピュータプログラムの少なくとも1つの命令は、出力変数が、セキュリティポリシー対応表において、予想データセキュリティタイプに関連付けられる式の実現値である。
【0123】
引き続き、電子制御ユニットにおいて実施されるプログラムの上記例について、以下のリスト1は、Cによって記述された取得可能なそのようなコンピュータプログラムの一例を示している。
【0124】
【表1】
【0125】
このプログラムは、3つの変数v1、v2及びv3を定義し、変数v3の初期値を定数に設定し、次に、第1の分岐及び第2の分岐において分岐する。
【0126】
第1の分岐に従って、変数v1は、ユーザ識別子USER_1を記憶する。変数v2は、ユーザ識別子がUSER_1であることによって認証されるコマンドを記憶する。変数v3は、変数v2の内容に基づいて更新される。関数critical_operation(v3)の呼び出しはセキュアである。
【0127】
第2の分岐に従って、変数v1は、USER_1と異なるユーザ識別子を記憶する。変数v2は、まだ認証されていない内容を記憶する。変数v3は、変数v2の内容に基づいて更新される。関数critical_operation(v3)の呼び出しは、セキュリティポリシーの違反である。
【0128】
取得されたコンピュータプログラムのクリティカル式によって内容が設定される各出力変数が、取得されたセキュリティポリシー対応表に従ってこの式の出力変数に関連付けられた予想セキュリティタイプを用いてアノテートされる(ANNOT PROG EXP(S4))。
【0129】
アノテートは、開発者が手動で行うこともできるし、検索エンジンを使用して自動的に行うこともできる。この段階では、命令が互いにどのように相互作用するのか、どの命令がプログラムの様々な実行に従って計算されるのかを考慮する必要はない。代わりに、クリティカル式を含むあらゆる命令について、その命令によって出力される出力変数がアノテートされる。
【0130】
取得されたコンピュータプログラムをアノテートした結果、アノテートされたコンピュータプログラムが得られる。取得されたコンピュータプログラムを形成する各ソースコードファイルについて、アノテーションは、そのソースコードファイルにコメントとして含めることもできるし、追加ファイルを形成するセキュリティヘッダーとして提供することもできる。
【0131】
全ての場合において、アノテートされたコンピュータプログラムは、以下のものから形成される。
-コンピュータプログラムのソースコードであって、ソースコードは命令を含み、命令のうちの少なくとも1つはクリティカル式の実現値を含む、ソースコード、及び
-ソースコード内のクリティカル式の各実現値について、その実現値の出力に対するアノテーションであって、予想セキュリティタイプを含むアノテーション。
【0132】
アノテートされたコンピュータプログラムの命令は、その後、取得された伝播ルールセットを使用して、例えば1つずつ解析される。
【0133】
より正確には、アノテートされたコンピュータプログラムの命令の実行全体にわたって、入力変数が操作され、出力変数が得られる。プログラムの全ての可能な実行にわたって操作される入力変数及び出力変数は、ともにいわゆる変数環境を形成する。
【0134】
所与の命令の解析の結果、以下のいずれかが行われる。
-この所与の命令によって出力された出力変数が、現在、伝播セキュリティタイプのいずれにも関連付けられていない場合には、伝播セキュリティタイプが求められ、上記出力変数に関連付けられるか、又は
-この所与の命令によって出力された出力変数が、現在、伝播セキュリティタイプに関連付けられている場合には、更新された伝播セキュリティタイプが求められ、上記出力変数に関連付けられている伝播セキュリティタイプが更新される。
【0135】
アノテートされたコンピュータプログラムの全ての命令を解析することは、伝播セキュリティタイプを変数環境内の全ての変数に関連付けることに対応する。各変数について、その変数に関連付けられた伝播セキュリティタイプは、解析が完了すると、セキュリティポリシーの順守に関してコンピュータプログラムの起こり得る最悪の実行に対応する。
【0136】
個別に検討されるいくつかの特定の命令を解析する方法の例を以下に論じる。
【0137】
例えば、アノテートされたコンピュータプログラムは、所与の入力変数への参照子を入力データとして使用して、所与の内容を少なくとも1つの所与の出力変数に設定する所与の式の実現値である所与の命令を含むことができる。
【0138】
この例では、所与の入力変数の内容は、先行する命令によって設定される。この先行する命令は、所与の入力変数が、トラステッド、アントラステッド、シークレット又はパブリック等のセキュリティタイプに既に関連付けられているように、既に解析済みであることが考えられる。
【0139】
この例では、取得された伝播ルールセットのうちの1つが、上記所与の式に関連付けられている。この取得された伝播ルールセットは、所与の出力変数に関連付けられる伝播データセキュリティタイプを所与の入力変数に関連付けられたデータセキュリティタイプに基づいて求める演繹ルールセットを含む。
【0140】
この例では、所与の命令を解析することは、
-所与の入力変数に関連付けられたセキュリティタイプを取り出すことと、
-伝播データセキュリティタイプが求められ、少なくとも1つの所与の出力変数に関連付けられるように、演繹ルールセットを適用することと、
を含む。
【0141】
例えば、アノテートされたコンピュータプログラムは、複数の所与の入力変数を含む所与の変数の配列への参照子を入力データとして使用して、所与の出力内容を少なくとも1つの所与の出力変数に設定する所与の式の実現値である所与の命令を含むことができる。
【0142】
この例では、各所与の入力変数の内容は、少なくとも1つの先行する命令によって設定される。この少なくとも1つの先行する命令は、各所与の入力変数が、トラステッド、アントラステッド、シークレット又はパブリック等のセキュリティタイプに既に関連付けられているように、既に解析済みであることが考えられる。
【0143】
この例では、取得された伝播ルールセットのうちの1つが、上記所与の式に関連付けられている。この取得された伝播ルールセットは、所与の出力変数に関連付けられる伝播データセキュリティタイプを所与の変数の配列に関連付けられた配列セキュリティタイプに基づいて求める演繹ルールセットを含む。
【0144】
この例では、所与の命令を解析することは、
-配列を形成する各入力変数について、その入力変数に関連付けられたセキュリティタイプを取り出すことと、
-取り出された各セキュリティタイプに基づいて配列セキュリティタイプを配列に関連付けることと、
-伝播データセキュリティタイプが求められ、少なくとも1つの出力変数に関連付けられるように、演繹ルールセットを適用することと、
を含む。
【0145】
種々の可能なルールセットを、上記配列セキュリティタイプを求めることに適用することができる。
【0146】
マキシマリスト(maximalist)手法は、配列のセルのうちの1つがサスピシャスな(疑わしい)内容を含むと直ちに、配列がサスピシャスな内容を有するとみなすことである。逆に、配列の全てのセルがセキュアであるとみなすことができる場合にのみ、配列はセキュアとみなすことができる。この手法は、少なくとも1つのセルの内容がサスピシャスとして検出されると、他のセルの内容をもはや検査する必要がないので、少数の計算リソースしか必要としない。
【0147】
したがって、少なくとも1つの入力変数が、タイプアントラステッド(完全性ラティスの場合)又はパブリック(機密性ラティスの場合)に関連付けられた場合には、配列セキュリティタイプも、それぞれアントラステッド又はパブリックに自動的に選ぶことができる。逆に、全ての入力変数がタイプトラステッド(完全性ラティスの場合)又はシークレット(機密性ラティスの場合)に関連付けられる限り、配列セキュリティタイプも、それぞれトラステッド又はシークレットに選ぶことができる。
【0148】
しかしながら、この手法は、実際のサスピシャスな内容が、下流において決して使用されない変数に関するものであっても、変数の配列全体をサスピシャスとみなすことにもなる。この手法は、配列を複数の部分配列に分割することによって緻密化することができる。例えば、サスピシャスとみなされる第1の部分配列は、変数タイプアントラステッドに関連付けられた配列の全ての変数を含むと定義することができる一方、セキュアであるみなされる第2の部分配列は、変数タイプトラステッドに関連付けられた配列の全ての変数を含むと定義することができる。アノテートされたコンピュータプログラムの解析の全体にわたって、当初変数タイプトラステッドに関連付けられ、第2の部分配列に含まれる所与の変数の内容は、コンプロマイズドになる場合がある。そのような場合には、この所与の変数は、変数タイプトラステッドに関連付けられる。
【0149】
例えば、アノテートされたコンピュータプログラムは、所与の構造体への参照子を入力データとして使用して、所与の出力内容を少なくとも1つの所与の出力変数に設定する所与の式の実現値である所与の命令を含むことができる。この所与の構造体は変数の複数の配列を含み、各配列は複数の所与の入力変数を含む。
【0150】
この例では、各所与の入力変数の内容は、少なくとも1つの先行する命令によって設定される。この少なくとも1つの先行する命令は、各所与の入力変数が、トラステッド、アントラステッド、シークレット又はパブリック等のセキュリティタイプに既に関連付けられているように、既に解析済みであることが考えられる。
【0151】
この例では、取得された伝播ルールセットのうちの1つが、上記所与の式に関連付けられている。この取得された伝播ルールセットは、所与の出力変数に関連付けられる伝播データセキュリティタイプを所与の構造体に関連付けられた構造体セキュリティタイプに基づいて求める演繹ルールセットを含む。
【0152】
この例では、所与の命令を解析することは、
-各配列を形成する各入力変数について、その入力変数に関連付けられたセキュリティタイプを取り出すことと、
-取り出された各セキュリティタイプに基づいて、配列セキュリティタイプを各配列に関連付けることと、
-関連付けられた各配列セキュリティタイプに基づいて、構造体セキュリティタイプを構造体に関連付けることと、
-伝播データセキュリティタイプが求められ、少なくとも1つの出力変数に関連付けられるように、演繹ルールセットを適用することと、
を含む。
【0153】
命令シーケンスのいくつかの特定のタイプを解析することができる方法の例を以下に論述する。
【0154】
一例では、アノテートされたコンピュータプログラムは、特定の順序で計算される2つ以上の命令からなるシーケンスを含む。この順序は、コンピュータプログラムのあらゆる可能な実行について同じである。
【0155】
命令シーケンスは、例えば、第1の命令と、第1の命令から常に直下流にある第2の命令とを含む。第1の命令は、第1の内容を第1の出力変数に設定する式文である。第2の命令は、第1の出力変数を入力変数として使用して、第2の内容を第2の出力変数に設定する式文である。
【0156】
この例では、第1の伝播ルールセット及び第2の伝播ルールセットが取得される。第1の取得された伝播ルールセットは、第1の命令に組み込まれた式に関連付けられる。第2の取得された伝播ルールセットは、第2の命令に組み込まれた式に関連付けられる。
【0157】
この例では、アノテートされたコンピュータプログラムの命令を解析することは、
-第1の命令を解析し、その結果、第1の伝播ルールセットに基づいて、第1の伝播セキュリティタイプを第1の出力変数に関連付けることと、
-第1の命令を解析した後に、第2の命令を解析し、その結果、第2の伝播ルールセット及び第1の伝播セキュリティタイプに基づいて、第2の伝播セキュリティタイプを第2の出力変数に関連付けることと、
を含む。
【0158】
セキュリティポリシーの一例によれば、上記第1の命令を解析することによって、その結果、第1の伝播セキュリティタイプがタイプアントラステッドに設定される場合には、第2の伝播セキュリティタイプも、タイプアントラステッドに関連付けられた入力変数に基づいて取得されたことに起因して、タイプアントラステッドに設定することができる。
【0159】
より一般的には、コンピュータプログラムのあらゆる可能な実行について同じである特定の順序で計算される命令シーケンスを、この特定の順序に従って1つの命令ずつ解析することができる。
【0160】
一例では、アノテートされたコンピュータプログラムは、if文等の少なくとも1つの条件分岐命令を含む。そのような条件分岐命令の下流では、それぞれの分岐が異なる命令シーケンスである第1の分岐又は第2の分岐のいずれかを計算することができる。
【0161】
第1の分岐及び第2の分岐のいずれを計算するのかは、条件分岐命令において定義される事前に設定された条件が満たされるかに依存する。
【0162】
例えば、アノテートされたコンピュータプログラムは、以下の順序で、
-条件が満たされる場合には第1の分岐が計算され、この条件が満たされない場合には第2の分岐が代わりに計算されることを示すif文と、
-第1の分岐の一部である第1の命令と、
-第2の分岐の一部である第2の命令と、
-第1の分岐及び第2の分岐の双方の一部である第3の命令と、
を含むことができる。
【0163】
したがって、そのようなアノテートされたコンピュータプログラムの全ての可能な実行の中で、
-第1の可能な実行は、第1の分岐を計算することを含み、したがって、第1の命令を計算し、その後、第3の命令を計算すること含む一方、
-第2の可能な実行は、代わりに第2の分岐を計算することを含み、したがって、第1の命令を計算し、その後、第3の命令を計算することを含む。
【0164】
この例では、
-第1の命令は、第1の内容を第1の出力変数に設定する式文であり、
-第2の命令は、第2の内容を第1の出力変数に設定する式文であり、
-第3の命令は、第1の出力変数を入力変数として使用して、第2の出力変数の出力内容を求める式文である。
【0165】
この例では、第1の命令に組み込まれた式についての第1の伝播ルールセットが取得され、第2の命令に組み込まれた式についての第2の伝播ルールセットが取得され、第3の命令に組み込まれた式についての第3の伝播ルールセットが取得される。
【0166】
アノテートされたコンピュータプログラムの命令を解析することは、ここでは、双方の分岐の命令を解析することを含む。
【0167】
一例では、第1の分岐が解析され、その後、第2の分岐が解析されるが、この逆を行うこともできる。
【0168】
第1の分岐を解析することは、第1の命令を解析し、その後、第3の命令を解析することを含む。
【0169】
これに関連して、
-第1の命令を解析することは、その結果として、第1の伝播ルールセットに基づいて、第1の伝播セキュリティタイプを第1の出力変数に関連付けることになり、次に、
-第3の命令を解析することは、その結果として、第1の伝播セキュリティタイプ及び第3の伝播ルールセットに基づいて、第2の伝播セキュリティタイプを第2の出力変数に関連付けることになる。
【0170】
セキュリティポリシーの一例によれば、第1の命令が、セキュアな内容を第1の出力変数に設定する場合には、第1の命令を解析することによって、第1の伝播セキュリティタイプはトラステッドに設定される。その後、第3の命令を解析することによって、第2の伝播セキュリティタイプも、タイプトラステッドに関連付けられた入力変数に基づいて取得されていることに起因してトラステッドに設定することができる。
【0171】
逆に、第1の命令が、コンプロマイズドな内容を第1の出力変数に設定する場合には、第1の命令を解析することによって、第1の伝播セキュリティタイプはアントラステッドに設定される。その後、第3の命令を解析することによって、第2の伝播セキュリティタイプも、タイプアントラステッドに関連付けられた入力変数に基づいて取得されていることに起因してアントラステッドに設定することができる。
【0172】
セキュリティポリシーの上記例によれば、第1の分岐を解析した後、第1の変数及び第2の変数の双方がタイプアントラステッドに関連付けられている場合には、このタイプを更に変更することはできない。したがって、第2の分岐の解析をスキップすることが可能である。
【0173】
一般に、分岐によって操作される全ての変数が、アントラステッド又はパブリック等のコンプロマイズドタイプに既に設定されているときは常に、当該分岐の解析をスキップすることが可能である。上記に示したように解析の一部をスキップすることによって、健全性を危険に晒すことなく、解析を完了するのに必要な時間を削減することが可能になる。
【0174】
第2の分岐を解析することは、第2の命令を解析し、その後、第3の命令を解析することを含む。
【0175】
これに関連して、
-第2の命令を解析することは、その結果として、第2の伝播ルールセットに基づいて、第1の伝播セキュリティタイプを更新することになり、次に、
-第3の命令を解析することは、その結果として、第3の伝播ルールセットに基づいて、第2の伝播セキュリティタイプを更新することになる。
【0176】
セキュリティポリシーの上記例によれば、第2の命令が、コンプロマイズドな内容を第1の出力変数に設定する場合には、第2の命令を解析することによって、第1の伝播セキュリティタイプはアントラステッドに更新される。その後、第3の命令を解析することによって、第2の伝播セキュリティタイプも、タイプアントラステッドに関連付けられた入力変数に基づいて取得されていることに起因してアントラステッドに更新することができる。
【0177】
以下の例は、繰り返し制御構造とも呼ばれる条件ループを含むアノテートされたコンピュータプログラムを解析することができる方法を示すのに役立つ。例として、whileループ及びforループがある。
【0178】
この例では、条件ループは、複数回反復され、1つ以上の所与の変数の内容を入力として使用して、その1つ以上の所与の変数の少なくとも一部を更新する出力内容を求める命令又は命令シーケンスを含む。
【0179】
ループの命令又は命令シーケンスを解析するには、検討対象の各所与の変数がセキュリティタイプに事前に関連付けられていることが必要である。
【0180】
通常、アノテートされたコンピュータプログラムがループを含むこの例では、アノテートされたコンピュータプログラムが実行可能コードであるためには、内容が入力として使用される各所与の変数について、その所与の変数の内容を初期化する初期化命令がループから上流に存在することが必要である。
【0181】
アノテートされたコンピュータプログラムが、そのような初期化命令をループから上流に含む場合には、これらの初期化命令は、既に解析されており、検討対象の所与の変数はそれぞれ、セキュリティタイプに既に関連付けられている。
【0182】
ちなみに、アノテートされたコンピュータプログラムは、実行可能コードでなくてもよく、開発中の未完成のプログラムのソースコードであってもよいことを指摘しておくべきである。前述した例では、代入等の同様の初期化命令も示されている。そのような初期化命令は、アノテートされたコンピュータプログラムを実行可能コードにするのに必要とされる命令の例であるが、これらの命令は、アノテートされたコンピュータプログラムの解析のためには存在しなくてもよい。
【0183】
代わりに、コンピュータプログラムを解析することは、所与の変数の内容を入力データとして使用して命令を解析する前に、
-所与の変数の内容を初期化する初期化命令が、アノテートされたコンピュータプログラムにおいて上流に存在し、既に解析済みであるかをチェックすることと、
-そのような初期化命令が見つからない場合には、事前に取得されたルールセットに基づいてデフォルトセキュリティタイプをその所与の変数に関連付けることと、
を含むことができる。
【0184】
例えば、一般的なルールセットは、内容が初期化されていない全ての変数に関連付けることができ、それらの各変数を、その変数の内容が未知であるので、サスピシャスとみなされることを示すデフォルトタイプアントラステッドに関連付けることができることを示すことができる。
【0185】
例えば、所与の変数に特に関連付けられたルールセットを事前に取得することができ、このルールセットは、特にその所与の変数についてデフォルトタイプ、例えば、その所与の変数が本来サスピシャスとみなされることを示すデフォルトタイプアントラステッドを示すことができる。
【0186】
所与の変数に関連付けられている事前に取得されたルールセットは、例えば、どのデフォルトタイプが所与の変数に関連付けられるべきであるのかを示すように開発者に指示することを含むことができる。
【0187】
ループのあらゆる反復を通じて内容を変更することができる各所与の変数が、セキュリティタイプ又はデフォルトのセキュリティタイプに関連付けられると、ループを形成する命令又は命令シーケンスの解析に進むことが可能である。
【0188】
ループがn回反復される場合に、ループを解析することは、ループを形成する命令又は命令シーケンスを解析するn回の反復を実行して、ループを形成する命令又は命令シーケンスに組み込まれた式に関連付けられた伝播ルールセットに基づいて、各所与の変数に関連付けられた伝播セキュリティタイプを更新することを含む。
【0189】
上記全ての例の共通の特徴は、アノテートされたコンピュータプログラムを解析することによって、出力変数を出力する各命令について、その出力変数は、伝播セキュリティタイプに関連付けられる(ASSO PROG PROP(S5))ということである。
【0190】
一般に、解析を行った後、変数が、伝播セキュリティタイプアントラステッドに関連付けられていることは、コンピュータプログラムの少なくとも1つの可能な実行において、この変数が、完全性に関してコンプロマイズドであり得ることを示す。変数が、伝播セキュリティタイプシークレットに関連付けられていることは、コンピュータプログラムの少なくとも1つの可能な実行において、この所与の出力変数が、シークレットに維持すべき内容を含み得ることを示す。
【0191】
一般に、解析を行った後、変数が、伝播セキュリティタイプトラステッド又はパブリックに関連付けられていることは、コンピュータプログラムのあらゆる可能な実行において、この所与の出力変数を、それぞれ完全性又は機密性に関してセキュアとみなすことができることを示す。
【0192】
全ての場合において、解析を行った後、変数を出力するソースコード内の各命令について、伝播タイプがその変数に関連付けられる。
【0193】
上記で説明したように、アノテートされたコンピュータプログラムの1つ以上の命令は、クリティカル式の実現値を含み、これらの各実現値について、少なくとも1つの出力変数が、アノテーションに従って、予想セキュリティタイプに関連付けられる。
【0194】
クリティカル式の実現値を含む各命令について、そのような出力変数に関連付けられた伝播セキュリティタイプは、予想セキュリティタイプと比較される(COMP PROP/EXP(S6))。伝播タイプがアントラステッドである一方、予想タイプがトラステッドであること等、又は、伝播タイプがシークレットである一方、予想タイプがパブリックであること等の各不一致は、セキュリティポリシー違反を示す。
【0195】
実際、伝播タイプがアントラステッドである一方、予想タイプがトラステッドであることは、セキュアな入力データのみを使用して呼び出されるクリティカル関数が、コンピュータプログラムの少なくとも1つの実行において、コンプロマイズドな入力データを使用して呼び出される場合があることを意味する。
【0196】
したがって、伝播タイプがシークレットである一方、予想タイプがパブリックであることは、無制限の入力データのみを使用して呼び出されるクリティカル関数が、コンピュータプログラムの少なくとも1つの実行において、機密データを使用して呼び出される場合があることを意味する。
【0197】
本方法は、そのような不一致を検出すると、したがって、そのようなセキュリティポリシー違反を検出すると、記憶された表示に基づいて解析報告をその後に生成することを考慮して、セキュリティポリシー違反に関連した複数の表示を記憶することを含むことができる。
【0198】
リスト1に示した例示的なコンピュータプログラムの解析と、その結果生成することができる解析報告との一例を以下に詳述する。明確にするために、前置きとして、伝播タイプを出力変数に関連付けることは、一例示的なセキュリティポリシーに従ってこの出力変数を出力する式に関連付けられている取得された伝播ルールセットに常に基づいていることに留意すべきである。
【0199】
この例では、変数環境は、変数v1、v2及びv3から形成される。
【0200】
変数v3は、クリティカル関数critical_operation()の出力であることから、関連付けられた予想セキュリティタイプトラステッドを示すアノテーションに関連付けられている。
【0201】
v3を0の定数値に設定する命令が解析される。その結果、定数値は、ユーザ入力に起因するものとすることはできないので、変数v3は、例示的なセキュリティポリシーに従って、伝播タイプトラステッドに関連付けられる。
【0202】
関数get_user_id()を呼び出し、出力を変数v1に代入する命令が解析される。get_user_id()は、サニタイジングメカニズムを含むので、変数v1は、伝播タイプトラステッドに関連付けられる。
【0203】
関数get_unsafe_cmd()を呼び出し、出力を変数v2に代入する命令が解析される。get_unsafe_cmd()は、サニタイジングメカニズムを含まないので、変数v2は、伝播タイプアントラステッドに関連付けられる。
【0204】
if文が解析される。その結果、2つの分岐が識別される。
【0205】
if文に定義された条件が満たされたことに対応する第1の分岐、すなわち左分岐が解析される。
【0206】
変数v2を認証する命令が解析される。authenticate()は、セキュアな値しか出力することができないので、変数v2は、伝播タイプトラステッドに関連付けられる。
【0207】
入力変数v2に基づいて値を出力変数v3に代入する次の命令が解析される。入力変数v2に関連付けられたタイプはトラステッドであるので、出力変数v3は、伝播タイプトラステッドに関連付けられる。
【0208】
次に、変数v3を入力変数として用いて関数critical_operation()を呼び出す命令が解析される。左分岐の後、変数v3は、伝播タイプトラステッドに関連付けられる一方、予想セキュリティタイプもトラステッドであるので、アノテートされたコンピュータプログラムは、この実行用のセキュリティポリシーを順守している。
【0209】
if文に定義された条件が満たされなかったことに対応する第2の分岐、すなわち右分岐が解析される。
【0210】
入力変数v2に基づいて値を出力変数v3に代入する命令が解析される。入力変数v2に関連付けられた初期伝播タイプはアントラステッドであるので、出力変数v3は、伝播タイプアントラステッドに関連付けられる。
【0211】
最後に、変数v3を入力変数として用いて関数critical_operation()を呼び出す命令が解析される。右分岐の後、変数v3は、伝播タイプアントラステッドに関連付けられる一方、予想セキュリティタイプはトラステッドであるので、アノテートされたコンピュータプログラムは、この実行用のセキュリティポリシーを順守していない。
【0212】
上記解析に基づいて、解析報告を生成することができ、この解析報告は、以下の情報を含むことができる。
【0213】
1つのセキュリティポリシー違反が特定される。
【0214】
このセキュリティポリシー違反による変数環境は、以下のとおりである。
-変数v1は、伝播タイプトラステッドに関連付けられ、
-変数v2は、伝播タイプアントラステッドに関連付けられ、
-変数v3は、伝播タイプアントラステッドに関連付けられる。
【0215】
特定されたセキュリティポリシー違反は、命令クリティカル演算(&v3)に関するものである。
【0216】
変数v3の予想セキュリティタイプはトラステッドである一方、伝播タイプはアントラステッドである。
【0217】
関数example()はアンセキュア(unsecure)である。
【0218】
解析報告において、セキュリティポリシー違反が関係している命令を特定することは、開発者が上流の命令においてセキュリティポリシー違反の原因を探すのを助ける。
【0219】
解析報告において、セキュリティポリシー違反に関連付けられた変数環境を特定することによって、開発者は、セキュリティポリシー違反の原因を訂正するために、どの変数が望ましくない伝播タイプを有するのかを理解することが可能になる。
【0220】
変数v3のタイプが、変数v2に依存する代入に起因していることを理解するには、プログラムを更に深く調べることで十分である。つまり、変数v3は、変数v2が原因でアントラステッドである。したがって、開発者は、ソースコードを修正してセキュリティ問題を取り除くことができ、全てのエラーが修正されるまで解析を再び適用することができる。全てのエラーが修正されると、タイプチェック解析は、それ以上エラーを報告しない。すなわち、コードは、タイプアノテーションのおかげで置き換えられたセキュリティポリシーに従ってセキュアにされる。
図1
図2