JP2011516953A - 自動解析を採用する改竄防止システム - Google Patents

自動解析を採用する改竄防止システム Download PDF

Info

Publication number
JP2011516953A
JP2011516953A JP2011502441A JP2011502441A JP2011516953A JP 2011516953 A JP2011516953 A JP 2011516953A JP 2011502441 A JP2011502441 A JP 2011502441A JP 2011502441 A JP2011502441 A JP 2011502441A JP 2011516953 A JP2011516953 A JP 2011516953A
Authority
JP
Japan
Prior art keywords
function
software
frequency
check
execution
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2011502441A
Other languages
English (en)
Other versions
JP5564034B2 (ja
Inventor
ニール ウィリアム スチュアート,
グレイム カー ハークネス,
ダグラス マクファーソン リトル,
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Metaforic Ltd
Original Assignee
Metaforic Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Metaforic Ltd filed Critical Metaforic Ltd
Publication of JP2011516953A publication Critical patent/JP2011516953A/ja
Application granted granted Critical
Publication of JP5564034B2 publication Critical patent/JP5564034B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/54Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/565Static detection by checking file integrity

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Bioethics (AREA)
  • Virology (AREA)
  • Storage Device Security (AREA)
  • Debugging And Monitoring (AREA)

Abstract

完全性チェックをソフトウェアに導入する場所を決定し、ソフトウェアが改竄されたか否かの検証を可能にするためにソフトウェアの実行時プロファイリングを採用するコンピュータにより実現された改竄防止システム。性能の犠牲及び手作業による設定の必要性を最小限にしつつ、保護セキュリティを最適化するために実行時完全性チェックの場所及び対象を設定するために、実行時プロファイリング及び解析を使用してアプリケーションに関する情報を記録する。

Description

本発明は、改竄防止システム、すなわちハッカーがソフトウェアを変更することを困難にするシステムに関する。システムは、ユーザによる設定又は介入が殆どない高性能でセキュリティの高いシステムを達成するために固有の自動解析を採用する。
現代の生活において、コンピュータソフトウェアアプリケーションは広く普及している。コンピュータソフトウェアアプリケーションを使用するユーザは楽しみ満足し、それらがないと出来ないことを可能にする複雑な手順が自動化される。コンピュータソフトウェアアプリケーションは、通信を可能にし、複雑な情報を提供且つ視覚化するのを支援できる。これらの全ての能力において、好適なソフトウェアは、消費者が代金を支払う価値のある商品である。
その結果、急成長するソフトウェア業界は、この市場の需要を満たすような製品の開発に巨額の投資をしてきたし、投資し続けている。
この資産を保護するために、開発者及び発行者は、ソフトウェアに保護を挿入し、許可された人のみがそのソフトウェアを使用でき且つ他の人が秘密を得るためにそのソフトウェアを解析したり又はソフトウェアの挙動を変更するためにソフトウェアを変更したりすることにより優位に立つことはできないことを保証する。
しかし、リバースエンジニアリング及びそのようなソフトウェアの変更に熟練した個人(ハッカー)が多く存在する。彼らの目的は、例えば「トライアル」の制限を除去し、秘密の暗号情報にアクセスし且つオンライン競争で不正行為をするために、挿入された保護を回避することである。「ハッキング」されたバージョンは、通常インターネット上で潜在的に数千人ものユーザに配布され、ソフトウェア会社の収益に明らかに影響を及ぼす。
「改竄防止」システムの目的は、ハッカーが保護された市販のソフトウェアを変更することを防止するか又は少なくとも非常に困難にすることである。
改竄防止システムにより採用された方法は、大きく2つの主な分野に入る。
第1に、コードを難読化する。ソフトウェアを変更する前の分かりやすい原型は、動作方法、場合によっては限られた範囲内での動作方法を理解する。この理解する処理を困難にするためにアプリケーションコードを難読化するための方法が多くの特許で説明されている。尚、難読化されたコードは、難読化された状態で実行されてもよく、あるいはコード暗号化が使用される場合のように実行される前に難読化解除が行われる必要があってもよいことが重要である。いずれの場合においても、ハッカーが難読化処理を理解できた場合、保護が無効にされるという問題がある。ハッカーが有する困難さ及び保護システムの強度を判定することは容易ではない。
本発明において使用される第2の方法は、アプリケーションが改竄されていないことを検証することである。ここで、改竄には、コード及び/又はデータの変更、実行環境に対する変更、あるいは最終的にアプリケーションの挙動を変更する他のあらゆる方法が含まれる。これらの検証ポイントを「完全性チェック」と呼ぶ。
例えば正常に実行している間、アプリケーションは自身のコードの完全性をチェックしてもよい。アプリケーションコードの特定の領域は、コードの別の(対象)領域が変更されていないことを検証するためにチェックサムアルゴリズムを使用してもよい。そのようなチェック方法の推定により、相互チェック網(トポロジ)が構成される。アプリケーションコードに対するあらゆる変更が検出され、防御対策が行なわれることを意図する。これらのコード完全性チェックは、既存のプログラムに手作業で又は自動的に導入される。
Chris Crawfordは、論文を公開し、自己検査システムにハッキングを防止する機能を与えるためにチェックサムを使用することを説明した。Crawfordは、これより前にPatton Strikes Backを保護するために1990年にこのシステムを採用し、1988年にTrust and Betrayalを保護するために使用していた可能性がある。原物の論文を見つけるのは困難であるが、Crawfordは2003年の自身の著「Chris Crawford on Game Design」においてPatton Strikes Backで使用された自己検査システムを説明しており、それ以来全ての自己検査保護システムにより使用されている基礎的な概念である大きな「チェック網」を形成するために互いに検査する検査について明示している。更にCrawfordは、検査及びあらゆる応答を隠すために分散を使用することを説明している。
この基本的な方法の多くの種々の変形例が公開されている。
完全性チェックの別の形態は、デバッギング/ハッキングツールの存在を明らかにできるか又はハッカーが保護されたプログラムに対してそのようなツールを容易に配布できないようにそれらを使用不能にする技術を使用することを含む。この種の完全性チェックは、一般にアンチデバッグ手法と呼ばれる。これは、既存のプログラムに手作業で又は自動的に導入される。
そのような方法においては大きな問題があり、その問題に対しては新しい枠組み及び技術を導入することにより本発明の方法を使用して対処する。
完全性チェックが実行時に実行されているため、保護アプリケーションに対する性能が犠牲になる可能性がある。チェックが不適切な時に実行されると、ユーザ体験は低品質なものになる可能性がある。この危険性を最小限にするために、開発者は、少ない数のそのようなチェックを加える傾向がある。その結果、保護強度は低下する。すなわち、ハッカーは全てのチェックを発見し易く、理解し易く且つ除去し易い。更にこれまでに考案されたコード自己検査方法は、チェックされたコードが実行される時期と比較していつチェックが実行されるかという問題に対処していない。偶然に任せると、ハッカーは非常に容易に自身が望むコードを変更し、それを実行し且つそれを元の状態に戻せるだろう。
従って、特にユーザの介入が殆ど必要とされない場合、多くのチェック、実行時性能及び結果として得られる保護強度の関連する側面を均衡させることは、完全性検証保護方式を正常に適用するための鍵である。更に、その方式がアプリケーションコード実行の実行時シーケンスを考慮に入れることが重要である。
本発明は、ソフトウェアが改竄されたか否かの検証を可能にするために完全性チェックをソフトウェアに導入する場所を決定するために、ソフトウェアの実行時プロファイリングを採用するコンピュータにより実現された改竄防止システムを提供する。更に、各チェックが行うべき作業量が決定されてもよい。種々のチェックを配置する場所は、各チェックが行うべき作業量及び所定の場所に配布されたチェックの種類に基づいてもよい。
一実現例において、性能の犠牲及び手作業による設定の必要性を最小限にしつつ、保護セキュリティを最適化するために実行時完全性チェックの場所、対象及び可能な労力を設定するために、実行時プロファイリング及び解析を使用してアプリケーションに関する情報を記録する方法が存在する。更なる一実現例において、本発明は、プロファイリング及び情報収集、並びにこの情報の使用の方法を提供し、実際のアプリケーションにおいて本発明の有効性を向上する。
本発明の他の態様は以下を含む。
・ソフトウェアの完全性をチェックすることを可能にするようにソフトウェアを変更する方法であり、ソフトウェアに完全性チェックを導入する場所を決定するためにソフトウェアに対して実時間プロファイリングを行うステップを有することを特徴とする方法。
・コンピュータ可読媒体に格納されたコンピュータプログラムであり、上述したシステム又は方法を使用して導入された完全性チェックを含むことを特徴とするコンピュータプログラム。
・コンピュータ可読媒体に格納されたコンピュータプログラムであり、ソフトウェアに完全性チェックを導入する場所を決定するためにソフトウェアの実行時プロファイリングを採用するように動作可能なコンピュータプログラム。
図1は、本発明を概略的に示す図である。
実行時に完全性チェックを実行する改竄防止方式において、本発明は、チェックコードの挿入を自動化し、コードの場所に対する最適化された位置を判定し、チェックされるアプリケーションメモリの領域をより適切に決定し、各チェックが行うべき作業量を判定し、且つチェック処理において種々の他の設定可能なパラメータを最適化する方法を説明する。
本発明は3段階から成る処理である。
・第1に、元の保護されていないアプリケーションは、実行時にプロファイルされ、アプリケーションに関するタイミング及び/又は構造情報を提供する。プログラムは、インストルメント又は変更されずにあらゆる方法でプロファイルされる。例えばサンプリングを用いたプロファイラが使用可能である。インストルメントも可能である。詳細な情報、又は構造情報を含むような情報、を記録することにより更に適切な結果を提供できるが、記録された情報は、そのような情報である必要はない。
・第2に、この情報は挿入されるべきチェックに関する決定を行うために処理される。
・第3に、ハッカーによる改竄に対する耐性がある最終的な保護されたバージョンを生成するために、チェックはアプリケーションに挿入される。
これを図1に概略的に示す。好適な実施形態は、保護されるアプリケーションに対するソースコードを処理する。本実施形態において、第1の段階におけるプロファイリングは、アプリケーションソースコードに対する変更を自動的にインストルメントし且つ標準的な方法でコードをコンパイルすることにより実現される。データは、インストルメントされたアプリケーションを実行することにより収集される。同様に、第3の段階では、必要なチェックを導入するためにアプリケーションソースコードを再度変更し、保護されたアプリケーション自体は標準的な技術を使用してコードをコンパイルした結果として得られる。
従来技術を体験し且つ従来技術に精通しているユーザは、アプリケーションコードのアセンブリ言語のバージョンが変更される場合、あるいはアプリケーションのオブジェクトコード自体が変更される場合、あるいはプロファイリング要素の場合にはいかなるコードも変更されない場合等の本発明の更なる応用例をすぐに認識できるが、それらに限定されない。
上記の第1の段階におけるプロファイリング及びその後の対象アプリケーションの実行の目的は、種々の構成要素のレイアウト、構造及びタイミングに関するデータを収集することである。尚、上述したように、それらの全てが基本動作に必要なわけではない。
好適な実施形態において、このデータを取り込むためにアプリケーションをインストルメントする処理に対する鍵は、アプリケーションの機能が列挙されるプレインストルメンテーション静的解析である。これは、プロファイリングテーブルが静的に割り当てられ、実行時に全てのデータが直接テーブルアクセスにより更新されることを意味する。これにより、収集したデータに影響を及ぼさないように、対象アプリケーションに対する性能影響は低減される。
方法は、いくつかの種類の情報を収集する。
・機能実行回数、実行時間及び合計のプログラム実行時間等の基本的なプロファイリング情報。
・コールグラフデータは、どのアプリケーション機能が他のどのアプリケーション機能により呼び出されるかを取り込む。これは、この呼び出し処理が行われた回数、行われた時期、並びに各機能自体の実行時間及び自身が呼び出す機能の実行時間を含む各機能の実行時間を記録する。これにより、完全なアプリケーションコールグラフが再構成可能である。
・実行グラフデータは、機能の実行順序を取り込む。これは、対象をチェックに割り当てるための重要な情報を提供する。
・周波数領域データは、所定のあらゆる機能が呼び出される際の時間周波数及びアプリケーションの実行時に各周波数が発生する時期を取り込む。例えばプログラムの実行の一部分において、特定の機能が非常に頻繁に何回も呼び出されてもよい。そのアプリケーションの存続期間の後半で、再度呼び出されることがなくてもよい。そのような情報は、効率的でセキュリティ保護されたチェック網を確立するのに不可欠であり、一般に汎用プロファイラアプリケーションにより取り込まれない。
これらの情報が組み合わされることにより、性能影響が最小である可能性があり且つ強度が最高である可能性がある位置にチェックを配置できる。更にシステムは、ソフトウェア開発者にとって使用し易く、専門的なセキュリティ知識を必要としない。
例えばアプリケーションの1分間の実行時に2,000回呼び出される機能は、ほぼ1/30秒に1回呼び出されるため中周波機能と解釈され、チェックを導入するのに適切な場所である。
しかし、この特定の機能はアプリケーションの開始後最初の1秒間に2,000回呼び出されたが、その後は再度呼び出されることがないような機能であってもよく、これにより一時的な高周波機能になる。
この機能又は同様の機能にチェックを導入することは、アプリケーションの起動時に大きく影響を及ぼし、望ましくない。同様に、不完全な情報に基づいてアプリケーションの時間の影響を受け易い対話型の部分にチェックを導入することにより、アプリケーションのユーザにとって非常に顕著である性能のスパイクが起こる可能性がある。
これを解決するために、本発明の導入システムは、機能が実際には一時的な高周波機能であることを判定するために記録する周波数領域情報を使用し、それに従って動作する。
更に、本発明の導入システムは、あらゆる所定の機能の時間的安定性に関して信頼度計測値を設定するためにこの周波数領域情報を使用する。機能がプロファイリング中に多くの種々の周波数で実行すると考えられる場合、その機能は時間的に不安定であると考えられ、アプリケーションの将来の実行時に他の未知の(可能性として非常に高い)周波数で実行する可能性が高いと仮定する。従って、この機能は性能のスパイク又は単純に全体的に低い性能をもたらす可能性があるため、不適切な導入対象になる。一般にそのような機能への導入を回避する一方で、より安定した別の機能が利用可能である。
性能を低下させる導入、すなわちスパイクを導入する導入の可能性が非常に低減されるため、当然、この機構は安全に導入できるチェック数を増加する。そのような機構がない場合、一般にユーザは不適切な導入を回避するためにチェック数を「戻す」必要があり、最終的には導入できるチェック数を制限する必要がある。これにより、適用された保護の強度は数桁も厳しく制限される。
本発明の導入システムは、主に性能の観点から、あらゆる所定のチェックがとるべき形態を決定するためにプロファイリングデータを更に使用する。より高価なチェックは、呼び出される頻度がより少ない機能に導入される傾向があり、より安価なチェックは、呼び出される頻度がより多い機能に導入される傾向がある。一般に、チェックが導入される機能と関連付けられたプロファイルデータとチェックの性能特性とを密接に関係付けることにより、関係付けない場合より大きい性能影響を与えることなく、より多くのチェックをアプリケーションに導入できる。尚、保護されたアプリケーションの性能プロファイルを見ているハッカーにより導出される可能性のある導入の決定を改竄防止システムが行うことは望ましくないため、この関係付けは故意に不完全である場合が多い。
コード自己検査の場合、チェックのコストは、他の特性(アクセスされるメモリの種類及び速度等)も状況によっては重要であるが主にチェックされるコード量及びチェックを実行するのに使用されるチェックサムアルゴリズム(又は他の完全性チェックアルゴリズム)に依存する。
尚、本発明のシステムは、性能に大きく影響を及ぼさずに配布できるチェック数を更に増加するためにより頻繁に呼び出される機能において使用される増分チェック及び定期的なチェック等のコード自己検査に対してコストを削減する方法を採用できる。
アンチデバッグチェックの場合、一般にチェックのコストは、導入されるアンチデバッグ技術毎に固有である。一部のアンチデバッグチェックは、オペレーティングシステム又はCPUにおいて非常に高価な例外機構をトリガすることを含んでもよいが、他のアンチデバッグチェックは、少数の安価な動作のみを含んでもよい。
他の形態の完全性チェックは同様に処理される。ここで、各チェックは実行時コストに関して評価され、一般にこのコストはアプリケーションに対するプロファイルデータと密接に関係付けられる。
主に本発明は、あらゆる所定のレベルの性能影響に対してチェック数及びチェックが行うチェック作業量を最大にすることにより向上した保護強度を提供する。一般にチェック数が多い程(且つチェック活動が多い程)、ハッカーは保護を無力化するためにより多くの作業を行う必要があることを意味し、これは実世界の保護強度の有用な尺度である。
本発明は、他の手段により向上された保護を更に提供する。他の手段には、一般にコードが実行される直前及び実行された直後にチェックされることを保証すること、一般に相互依存するチェックがアプリケーションの実行プロファイルにおいて互いに近接して実行されることを保証すること、並びに一般に同一の対象、種類又はモードの動作に対する複数のチェックが時間、空間及び周波数において標準的なランダム分布で分離されることを保証することが含まれるが、これらに限定されない。これらの目標の相反する特性のために、全ての目標が適切な範囲で満たされるように、各目標の重要性がチェック間で分散される。
これらの保護強度を向上する目的は、保護されているアプリケーションに対して記録するコールグラフ、実行グラフ及び周波数領域プロファイリング情報を使用することにより達成可能である。例えば、コールグラフ及び実行グラフにより、一般にアプリケーションの機能が互いに対していつ実行されるかを判定できるため、コードが実行の前後にチェックされることを保証できる。同様に、一般に相互依存するチェックが同一のコールグラフ及び実行グラフデータを使用して又は周波数領域データを使用して時間的に互いに近接して実行されることを保証でき、これにより、各機能が各呼び出し周波数で実行する時期に関する大まかな指示が提供される。この同一のデータは、時間及び空間において同一の対象、種類又はモードの動作によりチェックの分散を最大にするために使用される。
コードを実行の前後にチェックすることにより、自己検査機構が一時的な変更を検出しないように、ハッカーがコードを変更し、それを実行させ且つ元のコードを置換する機会の可能性を可能な限り短い時間に低減し、どの所定の時点においても自己検査システムの効果を最大限にする。
相互依存するチェックが一般に時間的に互いに近接して実行するようにそれらのチェックを配置することにより、コードの他の有効なセクションとは相対的に関係なく実行されるコードの有効なセクションを含むアプリケーションは、一般にチェックを含むコードとは非常に異なる時間に実行されるコードを範囲に含むチェックが多すぎるために低減された保護強度の悪影響を受けないことを保証する。
時間及び空間において同一の対象、種類又はモードの動作によりチェックを分散することにより、一般に、ハッカーが保護方式のパターンを見つけ且つ利用するのに更に労力を必要とすることを保証する。この目的は、上述の2つの目的が単独で動作可能な場合に低品質な分散を結果として与える可能性があるため、それらの目的を強化するために更に使用される。
本発明の一実現例において、貪欲算法を使用して説明された最適化する目的の全てを組み合わせる。ここで、チェックの配置、チェックの形態、チェックの対象(該当する場合)及びチェックにより行われる作業量に対する最適な決定は、性能及び保護強度を最大にすることに関連して説明した全ての目的及び構築されたチェックトポロジに対して各段階で行われる。本発明の別の実現例において、別の最適化処理が使用されてもよい。別の最適化処理には、全ての可能なチェックトポロジの総当り検索又は本明細書で設定された目的に従って最適な適合性を有するチェックトポロジを判定するために遺伝的アルゴリズムを使用することが含まれるが、これらに限定されない。
ソフトウェアツールである本発明の一実現例において、ソフトウェアは以下のように使用される。
1.ソフトウェアは、他のソフトウェアアプリケーションを開発するために使用されるコンピュータシステムにインストールされる。
2.コンパイルされる全てのソースファイルが本来のコンパイラに渡される前にソフトウェアを通過し且つプロファイリングインストルメンテーション又は保護コードを導入するためにソフトウェアにより変換されるように、また、コンパイル後の最終的なプログラムが発生した際にソフトウェアが動作可能であるように、ソフトウェアはコンパイル処理を中断するために手作業で又は自動的にセットアップされる。
3.保護されているアプリケーションは、全てのソースファイルがソフトウェアを通過するようにコンパイルされ、ソフトウェアは「解析モード」に設定され、プロファイリングインストルメンテーションをアプリケーションに導入する。
4.その後保護コードが導入される時に効果的な決定を行うのに必要とされる情報をプロファイリングインストルメンテーションが実行時に収集できるように、インストルメントされたアプリケーションが実行される。
5.実行中、プロファイリングインストルメンテーションに対して可能な限り多くのアプリケーションコードが実行されるように、アプリケーションは、ユーザにより又は自動化されたテストを使用して「実行」される。
6.アプリケーションは、ソフトウェアが保護コードをアプリケーションに導入する「保護モード」に設定された状態で再度コンパイルされ、前の段階で収集されたプロファイリングデータに従って決定を行う。各保護コードの特性及び場所は、次の段階で使用するために記録される。
7.コンパイル後、ソースコードレベルで又はコンパイル中に行えないある特定の保護の側面を解決するために、ソフトウェアは前の段階の記録された保護情報を使用して最終的なプログラムバイナリを変更する。例えば、コードのチェックサムは、最終的なコードで計算される必要があるため、これはバイナリ自体に対する最終的な処理として行われる。
8.結果として得られるプログラムバイナリが保護される。
本発明の実現例の主な特徴の概要は以下の通りである。
以下の2つの主な目的のために使用されるプロファイリングシステム。
・基礎となるプログラムに対する性能影響を最小限にするために、完全性チェックを導入する場所及び各チェックが行うべき作業量を決定すること。
・改竄に対する保護を最大にするために完全性チェックを導入する場所を決定すること。
プログラム性能に対する影響を最小限にするように設計されたプロファイラが使用されてもよい。これは、特に非同期通信及び/又はハードウェアが含まれる場合に、正確なタイミング情報を得るために重要だろう。
導入ポリシーは、プログラム性能及び改竄に対する保護への影響に関して戦略的な決定を自動的に行うように設計される。すなわち、ソフトウェア開発者の介入又は専門的なセキュリティ知識を必要とせずに保護を容易に使用し且つ適用できるように設計される。
ソース解析により、機能が列挙される。
・プロファイリングテーブルが事前に割り当てられることを可能にし、性能影響を最小限にする。
・各プロファイルポイントは直接テーブルアクセスを使用し、性能影響を更に最小限にする。
システムはいくつかの記録の種類を使用してもよい。
・機能実行回数、実行時間及び合計のプログラム実行時間等の基本的なプロファイリング情報。
・コールグラフ−あらゆる所定の機能により呼び出される機能及び呼び出される頻度を記録する。
・周波数領域のタイミング−各機能が呼び出される際の周波数及び各周波数が発生する時間帯を記録する。
・実行グラフ−あらゆる所定の機能の前に実行された機能を記録する。
コールグラフの記録には、静的テーブル及び入力された機能のスタックが使用されてもよい。
・静的テーブルは、機能及び呼び出す(親)機能により索引付けされた2Dテーブルである。親機能の索引は現在のスタックの最上部から取得される。
・テーブルは、親−子の対毎のエントリ数を記録する。
・コールグラフ全体は、テーブルの親−子のパスに従って統計的に再構成される。
・この方式により、情報の内容と記録するコストとの間の最適な妥協点が得られる。
周波数領域の記録には、静的テーブルが使用されてもよい。
・静的テーブルは、機能及び周波数により索引付けされた2Dテーブルである。
・テーブルは、機能毎にプログラムにおける周波数の発生の開始時間及び終了時間を保持する。
・周波数索引は、精度とテーブルのサイズとの間の妥協点を提供するためにlog2である。
・テーブルの問い合わせは、境界の場合の処理を簡略化するために隣接する周波数スロットを合わせる。ここで、機能の呼び出し周波数は2つのスロットにわたる。
実行グラフの記録には、静的テーブルが使用されてもよい。
・コールグラフの記録と同様に、現在の機能及び先行機能により索引付けされた2Dテーブルである。先行機能は、単一の値(コールグラフの場合のようなスタックではなく)として格納される。
・テーブルは、先行機能−現在の機能の対毎にエントリ数を記録する。
・実行グラフ全体は、テーブルの先行機能−現在の機能のパスに従って統計的に再構成される。
・この方式により、情報の内容と記録するコストとの間の最適な妥協点が得られる。
周波数領域情報は、自己検査コードに対する最適な導入ポイントを判定するために使用されてもよい。
・低周波機能は、性能オーバヘッドを最小限にするのに適切な候補である。
・高周波機能は、実行されているチェックのレベルを最大にするのに適切な候補である。
・低周波機能と高周波機能との間の妥協により、低い性能オーバヘッドと強力な保護との間の実質的な均衡が可能になる。
・ある期間にわたりあらゆる所定の機能の周波数範囲を考慮することにより、異常な周波数の挙動が回避されるか又は補償される。
・性能オーバヘッドを考慮する場合、機能毎に発生する最大の周波数を使用する(周波数が非常に短い期間発生する場合以外)
・チェックレベルを考慮する場合、機能毎に発生する平均周波数又は中間周波数を使用する。
コールグラフ及び実行グラフ情報は、自己検査トポロジを誘導するために使用されてもよい。
・各ゾーンは、複数の他の機能によりチェックされる。理想的には、ゾーンのコードの直前に実行する機能に少なくとも1つのそのようなチェックを配置し、ゾーンのコードの直後に実行する機能に1つのチェックを配置する。
・コールグラフの親機能は、親機能が呼び出すあらゆる機能に対して機能の前後に有効であると考えられる。
完全性チェックをソフトウェアに導入する場所を決定するためにソフトウェアの実行時プロファイリングを説明したが、プロファイリングソフトウェアの原理はどんな形態のプログラム変換導入を誘導するのにも使用可能である。従って、改竄防止保護コードの導入は、コードを既存のアプリケーションに導入する一例にすぎない。そのような導入に依存する他のシステムは、この方法を使用することにより低減される性能影響を有する。従って、本発明は、プロファイリングソフトウェアに拡張され、どんな形態のプログラム変換導入も誘導できる。

Claims (22)

  1. 完全性チェックをソフトウェアに導入する場所を決定し、前記ソフトウェアが改竄されたか否かの検証を可能にするために前記ソフトウェアの実行時プロファイリングを採用するコンピュータにより実現されたことを特徴とする改竄防止システム。
  2. 前記ソフトウェアに対する性能影響を最小限にするために完全性チェックを導入する場所を決定するように動作可能であることを特徴とする請求項1記載のシステム。
  3. 前記ソフトウェアの改竄に対する保護を最大にするために完全性チェックを導入する場所を決定するように動作可能であることを特徴とする請求項1又は2記載のシステム。
  4. 各チェックが行うべき作業量を判定するように動作可能であることを特徴とする請求項1乃至3のいずれか1項に記載のシステム。
  5. (a) 元の保護されていないソフトウェアは、前記ソフトウェアに関するタイミング及び/又は構造情報を提供するために実行時にプロファイルされ、
    (b) この情報は、挿入される前記チェックに関して決定を行うために処理され、
    (c) 前記チェックは、ハッカーによる改竄に対して耐性のある最終的な保護されたバージョンを生成するために前記ソフトウェアに挿入されることを特徴とする請求項1乃至4のいずれか1項に記載のシステム。
  6. 前記ソフトウェアの前記プロファイリング及びその後の実行の目的は、前記ソフトウェアの種々の構成要素のレイアウト、構造及びタイミングのうちの1つ以上に関するデータを収集することであることを特徴とする請求項5記載のシステム。
  7. プログラム性能及び改竄に対する保護への影響に関して戦略的な決定を自動的に行うように設計された導入ポリシーを使用することを特徴とする請求項1乃至6のいずれか1項に記載のシステム。
  8. (a) 機能実行回数、実行時間及び合計のプログラム実行時間等の基本的なプロファイリング情報;
    (b) あらゆる所定の機能により呼び出される機能及び呼び出される頻度を記録するコールグラフ;
    (c) 各機能が呼び出される際の周波数及び各周波数が発生する時間帯を記録する周波数領域のタイミング;
    (d) あらゆる所定の機能の前に実行された機能を記録する実行グラフ
    の集合から選択された1つ以上の記録の種類を使用することを特徴とする請求項1乃至7のいずれか1項に記載のシステム。
  9. 周波数領域情報は、
    a.低周波機能が性能オーバヘッドを最小限にするのに適切な候補であること;
    b.高周波機能が実行されているチェックのレベルを最大にするのに適切な候補であること;
    c.低周波機能と高周波機能との間の妥協により、低い性能オーバヘッドと強力な保護との間の実質的な均衡が可能になること;
    d.ある期間にわたりあらゆる所定の機能の周波数範囲を考慮することにより、異常な周波数の挙動が回避されるか又は補償され、
    i. 性能オーバヘッドを考慮する場合、機能毎に発生する最大の周波数を使用し(周波数が非常に短い期間発生する場合以外)、
    ii. チェックレベルを考慮する場合、機能毎に発生する平均周波数又は中間周波数を使用すること
    のうち1つ以上の規則を適用することにより、最適な導入ポイントを判定するために使用されることを特徴とする請求項8記載のシステム。
  10. 前記コールグラフ及び実行グラフ情報は、
    e.各ゾーンが複数の他の機能によりチェックされ、理想的には、前記ゾーンの前記コードの直前に実行する機能に少なくとも1つのそのようなチェックを配置し、前記ゾーンの前記コードの直後に実行する機能に1つのチェックを配置すること;
    f.コールグラフの親機能は、前記親機能が呼び出すあらゆる機能に対して機能の前後に有効であると考えられること
    のうち1つ以上の規則を適用することにより自己検査トポロジを誘導するために使用されることを特徴とする請求項8記載のシステム。
  11. コールグラフの記録には、静的テーブル及び入力された機能のスタックが使用されることを特徴とする請求項8記載のシステム。
  12. 前記静的テーブルは、機能及び呼び出す(親)機能により索引付けされた2Dテーブルであり、前記親機能の索引は現在のスタックの最上部から取得され、前記テーブルは、親−子の対毎のエントリ数を記録し、前記コールグラフ全体は、テーブルの親−子のパスに従って統計的に再構成されることを特徴とする請求項11記載のシステム。
  13. 前記周波数領域の記録には、機能及び周波数により索引付けされた2Dテーブルである静的テーブルが使用され、前記テーブルは、機能毎にプログラムにおける周波数の発生の開始時間及び終了時間を保持し、前記周波数索引は、精度とテーブルのサイズとの間の妥協点を提供するためにlog2であり、テーブルの問い合わせは、境界の場合の処理を簡略化するために隣接する周波数スロットを合わせ、機能の呼び出し周波数は2つのスロットにわたることを特徴とする請求項8記載のシステム。
  14. 実行グラフの記録には、現在の機能及び先行機能により索引付けされた2Dテーブルである静的テーブルが使用され、前記先行機能は、単一の値として格納され、前記テーブルは、先行機能−現在の機能の対毎にエントリ数を記録し、前記実行グラフ全体は、テーブルの先行機能−現在の機能のパスに従って統計的に再構成されることを特徴とする請求項8記載のシステム。
  15. 特に非同期通信及び/又はハードウェアが含まれる場合に、正確なタイミング情報を得ることによりプログラム性能に対する影響を最小限にするように設計されたプロファイラを更に含むことを特徴とする請求項1乃至14のいずれか1項に記載のシステム。
  16. ソース解析により機能が列挙されることを特徴とする請求項1乃至15のいずれか1項に記載のシステム。
  17. プロファイリングテーブルが事前に割り当てられることにより、性能影響を最小限にし、各プロファイルポイントが直接テーブルアクセスを使用することにより、更に性能影響を最小限にすることを特徴とする請求項16記載のシステム。
  18. ソフトウェアの完全性をチェックできるように前記ソフトウェアを変更する方法であって、完全性チェックを前記ソフトウェアに導入する場所を決定するために前記ソフトウェアに対して実行時プロファイリングを行うステップを有することを特徴とする方法。
  19. 請求項1乃至17のいずれか1項に記載のシステムにより実行されたあらゆる更なるステップを更に含むことを特徴とする請求項18記載の方法。
  20. コンピュータ可読媒体に格納されたコンピュータプログラムであって、請求項1乃至17のいずれか1項に記載のシステム、あるいは請求項18又は19記載の方法を使用して導入された完全性チェックを含むことを特徴とするコンピュータプログラム。
  21. コンピュータ可読媒体に格納されたコンピュータプログラムであって、(i)完全性チェックをソフトウェアに導入する場所を決定するために前記ソフトウェアの実行時プロファイリングを採用し、(ii)前記完全性チェックを前記ソフトウェアに導入するように動作可能なコンピュータプログラム。
  22. 請求項1乃至17のいずれか1項に記載のシステムにおいて使用されるか、あるいは請求項18又は19記載の方法を実行するために使用されることを特徴とする請求項21記載のコンピュータプログラム。
JP2011502441A 2008-04-07 2009-04-07 自動解析を採用する改竄防止システム Active JP5564034B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GBGB0806284.6A GB0806284D0 (en) 2008-04-07 2008-04-07 Profile-guided tamper-proofing
GB0806284.6 2008-04-07
PCT/GB2009/050340 WO2009125220A1 (en) 2008-04-07 2009-04-07 An anti-tamper system employing automated analysis

Publications (2)

Publication Number Publication Date
JP2011516953A true JP2011516953A (ja) 2011-05-26
JP5564034B2 JP5564034B2 (ja) 2014-07-30

Family

ID=39433242

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011502441A Active JP5564034B2 (ja) 2008-04-07 2009-04-07 自動解析を採用する改竄防止システム

Country Status (5)

Country Link
US (1) US9892282B2 (ja)
EP (1) EP2277128A1 (ja)
JP (1) JP5564034B2 (ja)
GB (2) GB0806284D0 (ja)
WO (1) WO2009125220A1 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011170847A (ja) * 2010-02-18 2011-09-01 Thomson Licensing ソフトウェアのインテグリティを実行中に確かめる方法及び装置、並びにこのようなソフトウェアを生成する装置
KR20150122149A (ko) * 2013-02-28 2015-10-30 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 컴파일러 기반 난독화 기법
JP2017538217A (ja) * 2014-11-28 2017-12-21 トムソン ライセンシングThomson Licensing アプリケーション整合性の検証を提供する方法及びデバイス

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10055251B1 (en) 2009-04-22 2018-08-21 The Trustees Of Columbia University In The City Of New York Methods, systems, and media for injecting code into embedded devices
US9392017B2 (en) * 2010-04-22 2016-07-12 The Trustees Of Columbia University In The City Of New York Methods, systems, and media for inhibiting attacks on embedded devices
WO2013176711A2 (en) 2012-02-15 2013-11-28 The Trustees Of Columbia University In The City Of New York Methods, systems, and media for inhibiting attacks on embedded devices
US8949992B2 (en) * 2011-05-31 2015-02-03 International Business Machines Corporation Detecting persistent vulnerabilities in web applications
US9721120B2 (en) 2013-05-14 2017-08-01 Apple Inc. Preventing unauthorized calls to a protected function
US20170249460A1 (en) * 2014-09-23 2017-08-31 The Regents Of The University Of California Provably secure virus detection
FR3035240B1 (fr) * 2015-04-15 2018-04-06 Rambus Inc. Procede de securisation de l'execution d'un programme
US10073975B2 (en) 2016-08-11 2018-09-11 International Business Machines Corporation Application integrity verification in multi-tier architectures
US11354218B2 (en) * 2020-05-06 2022-06-07 Sap Se Generation of optimal program variation
FR3114890A1 (fr) 2020-10-07 2022-04-08 Tages Methode de regulation du degre de protection d’un programme logiciel

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04163627A (ja) * 1990-10-29 1992-06-09 Hitachi Ltd プログラム変換方法
JP2007513422A (ja) * 2003-12-04 2007-05-24 アクサルト・エス・アー 放射またはそれ以外による攻撃に対抗したプログラムの実行を保証するための方法
JP2007316905A (ja) * 2006-05-25 2007-12-06 Hitachi Ltd アプリケーションプログラムを監視する計算機システム及びその方法

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6126329A (en) * 1993-06-08 2000-10-03 Rational Software Coporation Method and apparatus for accurate profiling of computer programs
CN1260055A (zh) * 1997-06-09 2000-07-12 联信公司 用于提高软件安全性的模糊技术
US6430741B1 (en) * 1999-02-26 2002-08-06 Hewlett-Packard Company System and method for data coverage analysis of a computer program
US7051200B1 (en) * 2000-06-27 2006-05-23 Microsoft Corporation System and method for interfacing a software process to secure repositories
US7539875B1 (en) * 2000-06-27 2009-05-26 Microsoft Corporation Secure repository with layers of tamper resistance and system and method for providing same
US20030066055A1 (en) * 2001-04-26 2003-04-03 Spivey John Michael Profiling computer programs
US7581103B2 (en) * 2001-06-13 2009-08-25 Intertrust Technologies Corporation Software self-checking systems and methods
US6880149B2 (en) * 2002-04-01 2005-04-12 Pace Anti-Piracy Method for runtime code integrity validation using code block checksums
KR100509650B1 (ko) * 2003-03-14 2005-08-23 주식회사 안철수연구소 코드 삽입 기법을 이용한 악성 스크립트 감지 방법
US8510571B1 (en) * 2003-03-24 2013-08-13 Hoi Chang System and method for inserting security mechanisms into a software program
US7512936B2 (en) * 2004-12-17 2009-03-31 Sap Aktiengesellschaft Code diversification
US8375369B2 (en) * 2005-04-26 2013-02-12 Apple Inc. Run-time code injection to perform checks
US20070266434A1 (en) * 2006-05-11 2007-11-15 Reifer Consultants, Inc. Protecting Applications Software Against Unauthorized Access, Reverse Engineering or Tampering
US7770157B2 (en) * 2005-08-08 2010-08-03 International Business Machines Corporation System and method for improving virtual machine performance using an offline profile repository
US8443354B1 (en) * 2006-03-29 2013-05-14 Symantec Corporation Detecting new or modified portions of code
US20070240141A1 (en) * 2006-03-30 2007-10-11 Feng Qin Performing dynamic information flow tracking
US8458673B2 (en) * 2006-04-26 2013-06-04 Flexera Software Llc Computer-implemented method and system for binding digital rights management executable code to a software application
US20080148061A1 (en) * 2006-12-19 2008-06-19 Hongxia Jin Method for effective tamper resistance
US20080163375A1 (en) * 2006-12-28 2008-07-03 Savagaonkar Uday R Embedding and patching integrity information in a program file having relocatable file sections
US7841010B2 (en) * 2007-01-08 2010-11-23 Apple Inc. Software or other information integrity verification using variable block length and selection
US20080235802A1 (en) * 2007-03-21 2008-09-25 Microsoft Corporation Software Tamper Resistance Via Integrity-Checking Expressions
US8434064B2 (en) * 2008-03-28 2013-04-30 Microsoft Corporation Detecting memory errors using write integrity testing

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04163627A (ja) * 1990-10-29 1992-06-09 Hitachi Ltd プログラム変換方法
JP2007513422A (ja) * 2003-12-04 2007-05-24 アクサルト・エス・アー 放射またはそれ以外による攻撃に対抗したプログラムの実行を保証するための方法
JP2007316905A (ja) * 2006-05-25 2007-12-06 Hitachi Ltd アプリケーションプログラムを監視する計算機システム及びその方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011170847A (ja) * 2010-02-18 2011-09-01 Thomson Licensing ソフトウェアのインテグリティを実行中に確かめる方法及び装置、並びにこのようなソフトウェアを生成する装置
KR20150122149A (ko) * 2013-02-28 2015-10-30 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 컴파일러 기반 난독화 기법
KR102107872B1 (ko) 2013-02-28 2020-05-07 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 컴파일러 기반 난독화 기법
JP2017538217A (ja) * 2014-11-28 2017-12-21 トムソン ライセンシングThomson Licensing アプリケーション整合性の検証を提供する方法及びデバイス

Also Published As

Publication number Publication date
US20110088095A1 (en) 2011-04-14
GB0806284D0 (en) 2008-05-14
GB0906028D0 (en) 2009-05-20
GB2459032A (en) 2009-10-14
US9892282B2 (en) 2018-02-13
EP2277128A1 (en) 2011-01-26
WO2009125220A1 (en) 2009-10-15
JP5564034B2 (ja) 2014-07-30

Similar Documents

Publication Publication Date Title
JP5564034B2 (ja) 自動解析を採用する改竄防止システム
Wu et al. Eliminating timing side-channel leaks using program repair
Ma et al. Accurate, low cost and instrumentation-free security audit logging for windows
Doychev et al. Rigorous analysis of software countermeasures against cache attacks
Borrello et al. Constantine: Automatic side-channel resistance using efficient control and data flow linearization
JP7154365B2 (ja) ソフトウェアコードをセキュアにするための方法
Lee et al. Design and implementation of the secure compiler and virtual machine for developing secure IoT services
KR20040063824A (ko) 타임 및 웨이트 기반의 유연하고 내성이 있는 하드웨어id를 제공하기 위한 시스템 및 방법
Lin et al. AutoPaG: towards automated software patch generation with source code root cause identification and repair
JP2011170836A (ja) 情報処理装置及びプログラム、情報処理方法、記録媒体
JP5455914B2 (ja) 耐タンパ技術
Chen et al. Control flow obfuscation with information flow tracking
Ceccato et al. Codebender: Remote software protection using orthogonal replacement
Nassirzadeh et al. Gas gauge: A security analysis tool for smart contract out-of-gas vulnerabilities
Dalai et al. A code obfuscation technique to prevent reverse engineering
Fang et al. Beyond “Protected” and “Private”: An Empirical Security Analysis of Custom Function Modifiers in Smart Contracts
Ahmadvand et al. Practical integrity protection with oblivious hashing
Park et al. Identifying behavior dispatchers for malware analysis
Banescu et al. Detecting patching of executables without system calls
Dao et al. Security sensitive data flow coverage criterion for automatic security testing of web applications
Fanti et al. Toward register spilling security using LLVM and ARM pointer authentication
Smolka et al. Fuzz on the Beach: Fuzzing Solana Smart Contracts
US11256786B2 (en) Method to secure a software code
Oishi et al. Self destructive tamper response for software protection
Chakraborty et al. Embedded software security through key-based control flow obfuscation

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120406

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130829

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130906

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20131206

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20131213

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140306

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140530

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140613

R150 Certificate of patent or registration of utility model

Ref document number: 5564034

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250