JP5467271B2 - 情報処理装置及びプログラム、情報処理方法、記録媒体 - Google Patents
情報処理装置及びプログラム、情報処理方法、記録媒体 Download PDFInfo
- Publication number
- JP5467271B2 JP5467271B2 JP2010284054A JP2010284054A JP5467271B2 JP 5467271 B2 JP5467271 B2 JP 5467271B2 JP 2010284054 A JP2010284054 A JP 2010284054A JP 2010284054 A JP2010284054 A JP 2010284054A JP 5467271 B2 JP5467271 B2 JP 5467271B2
- Authority
- JP
- Japan
- Prior art keywords
- self
- routine
- rewriting
- program
- instruction
- 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.)
- Expired - Fee Related
Links
- 230000010365 information processing Effects 0.000 title claims description 9
- 238000003672 processing method Methods 0.000 title claims description 3
- 238000000034 method Methods 0.000 claims description 45
- 238000012545 processing Methods 0.000 claims description 42
- 238000004458 analytical method Methods 0.000 claims description 22
- 238000004364 calculation method Methods 0.000 claims description 15
- 230000008569 process Effects 0.000 claims description 12
- 230000001419 dependent effect Effects 0.000 claims description 5
- 238000012795 verification Methods 0.000 description 48
- 230000006870 function Effects 0.000 description 44
- 238000005516 engineering process Methods 0.000 description 8
- 230000008859 change Effects 0.000 description 7
- 230000004075 alteration Effects 0.000 description 6
- 230000002159 abnormal effect Effects 0.000 description 5
- 238000001514 detection method Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000000873 masking effect Effects 0.000 description 4
- 230000004044 response Effects 0.000 description 4
- 101100490488 Mus musculus Add3 gene Proteins 0.000 description 3
- 238000003780 insertion Methods 0.000 description 3
- 230000037431 insertion Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 125000004122 cyclic group Chemical group 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 101100269850 Caenorhabditis elegans mask-1 gene Proteins 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000005316 response function Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Description
また、特許文献1の耐タンパー化方法は、プログラムを実行して解析を行う動的解析に対する耐性が明らかではないという課題があった。本発明は、上記問題に鑑みてなされたものであり、プログラムの解析や改ざんをさらに困難にすることが可能な技術を提供することを目的とする。
動的自己書換えによる命令偽装)で保護し、前記自己書換えルーチンは相互に依存するように構成される。この構成によって、動的解析の実行を困難にし、かつ、動的自己書換えによる命令偽装を静的解析で無効化する攻撃の成功確率を相互に依存しない場合の攻撃の成功確率よりも小さくでき、プログラムの解析や改ざんをさらに困難にすることが可能な技術を提供することができる。
以下、添付する図面を参照して、本発明に係る実施の形態を詳細に説明する。ただし、この実施の形態に記載されている構成要素はあくまでも例示であって、本発明の範囲をそれらのみに限定する趣旨のものではない。また、本実施の形態で説明されている特徴の組み合わせの全てが発明の解決手段に必須のものとは限らない。
本実施形態におけるコンピュータ装置(情報処理装置)の内部構成について、図2を参照して説明する。図2は、コンピュータ装置の内部構成を示すブロック図である。この内部構成は、本明細書の全ての実施形態に共通とする。
図2に示されるように、コンピュータ装置200は、ネットワーク・インタフェース201、外部媒体読み書き装置202、CPU203、ROM204、RAM205、ハードディスク206を備える。また、電源207、指示入力装置インタフェース208、モニタ・インタフェース209、バス210等を備える。
最初に、動的自己書換えによる命令偽装を説明する。自己書換えとは、プログラムが自プログラムのコードを書換えることである。アセンブリプログラムで実現できる。Intel x86系CPUを想定し、アセンブリプログラムをAT&T表記で示す。自己書換え対象のアドレスにある値を書き込むアセンブリプログラムは、 mov を用いて、「mov 値, アドレス」と表現できる。例えば、「mov $0x74, (%eax)」は、レジスタ eax に格納されているアドレスに値0x74(16進数の74)を書き込む。
本実施例では、改ざんから保護したいプログラム(ホストコード)にアンチデバッギング技術を適用してプログラム実行型解析を妨げる。アンチデバッギング技術は、デバッガ等のツールを用いて行われるプログラム実行型解析,いわゆる動的解析を妨げる技術の総称である。
P_inの偽装対象の命令それぞれを対応する偽装命令に置換する。 図7の「je L9」が「jne L9」に、「addl $40, (%eax)」が「xorl $40, (%eax)」に置換される。
復帰ルーチン1、2と隠蔽ルーチン1、2のコードを以下のように生成する。
smaddress-base=f(hv)+mask
と定義できる。
movl $L10, %eax
addl %edx, %eax
subl $0x12345678, %eax
を生成する。L10のアドレスの方がsmaddressより大きい(L10の方が下にある)ためマスクが負の値になることを考慮してsublを使っている。レジスタeaxを使ってsmaddressが計算されるので、ハッシュ値も偽装対象の命令のアドレスも即値としてプログラムに現れない。
「偽装命令が実行される前に必ず偽装対象の命令に書換えられ、プログラム終了前に必ず元通り偽装命令に書換えられる」ことが保障されるように、復帰ルーチン1、2と隠蔽ルーチン1、2それぞれを、それぞれの挿入可能区間からランダムに選んだ位置に挿入する。
復帰ルーチン1と、復帰ルーチン2のマスク(mask-2)直前までを含む範囲を1番目の領域と定め、復帰ルーチン2と隠蔽ルーチン2の保護領域に割り当てる。1番目の領域は、復帰ルーチン1よりも上の命令を含むことができる。
step-4で確定した2番目の領域のマシン語プログラム(バイナリデータ)を入力としてハッシュ関数を計算して、復帰ルーチン1と隠蔽ルーチン1が実行時に計算するハッシュ値hvを求める。
movl $L13, %eax
subl $0x8c, %eax
とできる。そのような定数として、実行時のある特定の期間に特定の値となるホストコードの変数を採用すれば、解析はさらに困難になる。
P_inの偽装対象の命令それぞれを対応する偽装命令に置換する。 図25の「incl (%eax)」が「decl (%eax)」に、「je L8」が「jne L8」に置換される。偽装対象の命令3と偽装命令3は明示していないが、同様に置換される。図26は、置換された結果のアセンブリプログラムである。
復帰ルーチン1、2、3と隠蔽ルーチン1、2、3のコードを前述と同様の方法に従い、maskとbaseとsmaddressとhvを用いて生成する。生成されたコードのマスクの値および保護領域の先頭アドレスと長さには仮値を指定しておく。図27は、生成された復帰ルーチンと隠蔽ルーチンを示す、ただし復帰ルーチン3と隠蔽ルーチン3と隠蔽ルーチン1のコードは省略してある。
「偽装命令が実行される前に必ず偽装対象の命令に書換えられ、プログラム終了前に必ず元通り偽装命令に書換えられる」ことが保障されるように、復帰ルーチン1、2、3と隠蔽ルーチン1、2、3それぞれを、それぞれの挿入可能区間からランダムに選んだ位置に挿入する。
(step-4.1)復帰ルーチンを任意に1個選ぶ。中間に位置する復帰ルーチン2を選ぶ。
step-4で確定した2番目の領域のマシン語プログラム(バイナリデータ)を入力としてハッシュ関数を計算して、復帰ルーチン1が実行時に計算するハッシュ値hvを求める。求めたhvの値を式「smaddress-base=f(hv)+mask」に代入してmaskの値を求める。それをP_in内の仮値と入れ替える。図33は、復帰ルーチン1が2番目の領域を入力とすることを破線の矢印で示し、求めたmaskが0xe4であることを太い四角で示している。
署名対象とが対応するか否かを検証して対応しないときはプログラムを中断するディジタル署名検証ルーチンと署名検証鍵(Signature Verification Routine and Key)を保護領域の中に実装する。この実装は、step-1のときに行う。
耐タンパー化したいアセンブリプログラムP_inと、n組の偽装対象の命令と偽装命令の組を入力として、以下の手順を実行すると、耐タンパー化されたアセンブリプログラムP_outが作成される。
図12のプログラムの偽装対象の命令が偽装命令に置換され図13のプログラムになる。ディジタル署名検証ルーチンと署名検証鍵(Signature Verification Routine and Key)を保護領域の中に実装する。図13では、ディジタル署名検証ルーチンと署名検証鍵と仮値を入れた署名データは省略している。
プログラムPのオブジェクトファイル内の、あるいは実行時にPが格納されるメモリ内の、Pの命令列(コード)を含む領域をコードセグメントと呼ぶ。コードセグメントにおいてn個の偽装命令を上(アドレスの低い方)から順に偽装命令1、偽装命令2、...、偽装命令nと呼び、偽装命令i (iは1以上n以下の整数)とその本来の命令を自己書換えする復帰ルーチンと隠蔽ルーチンをそれぞれ復帰ルーチンi、隠蔽ルーチンiと呼ぶ。
各復帰ルーチンと隠蔽ルーチンを、その制御フローにおける挿入可能区間の中からランダムに選んだ位置に挿入する。その結果、上からi番目の復帰ルーチンが復帰ルーチンiとは限らず、隠蔽ルーチンについても同様であり、復帰ルーチンと偽装命令と隠蔽ルーチンのそれぞれが連続することもありうる。図14のような配置になったと仮定する。
コードセグメントをn個の領域に分割する。上から順にそれぞれi(=1、2、...、n)番目の領域と呼ぶ。
(分割条件1)各領域は復帰ルーチンを1個だけ完全に含む。(後述の割当条件3で述べる数珠繋ぎ状の構成にするため)。なお、ある領域があるルーチンを完全に含むとは、1個の領域がそのルーチンの全てを含み、そのルーチンが複数の領域にまたがることがないことである。
(分割条件2)1個の領域は隠蔽ルーチンを0個以上完全に含む。
(分割条件3)分割条件1と2を満たし可能な限り多くの領域が偽装命令を含むように、各領域が重ならず連続するように境界をランダムに定める。
(場合1)j番目の復帰ルーチンとj+1番目の復帰ルーチンとの間に隠蔽ルーチンが1個以上存在するとき、その1番上のものを隠蔽ルーチンαとして、j番目の復帰ルーチンのマスク直後から隠蔽ルーチンαのマスク直前までをj番目の領域とし、隠蔽ルーチンαのマスク直後から、j+1番目の復帰ルーチンを含み、j+2番目の領域の直前までをj+1番目の領域とする。図15のプログラムが、場合1に相当する。
(場合2)j番目とj+1番目の復帰ルーチンとの間に隠蔽ルーチンが1個も存在しない場合は、j番目の復帰ルーチンのマスク直後からj+1番目の領域の直前まで(境界はランダムに定める)をj番目の領域とし、j+1番目の領域はj+1番目の復帰ルーチンを完全に含み、分割条件1と2と3を満たす。図16のプログラムが、場合2に相当する。
(割当条件1)j-1とjとj+1番目の領域を除き、ある自己書換えルーチンセットに含まれる復帰ルーチンと隠蔽ルーチンは同じ領域を保護領域とする。
(割当条件2)j-1番目の復帰ルーチンとj番目の復帰ルーチンの保護領域は異なる。j番目の領域に隠蔽ルーチンαが含まれるとき、j番目の復帰ルーチンと隠蔽ルーチンαは同じ領域を保護領域とし、隠蔽ルーチンαとj+1番目の復帰ルーチンの保護領域は異なる。場合1にこの割当条件2を適用した例を図17に,場合2に割当条件2を適用した例を図18に示す。
(割当条件3)n個の領域それぞれは別の領域1個の自己書換えルーチンセットの保護対象に割り当てられ、各自己書換えルーチンセットはそれが含まれる領域ではない領域1個を保護対象とし、n個の領域の保護(依存)関係が数珠繋ぎ状の循環を形成する。
P_inの各復帰ルーチンと隠蔽ルーチンについて、以下の順序でそれぞれの保護領域のstep-4で確定したマシン語プログラムを入力としてハッシュ値を求め、それを用いてマスクの値を求め、P_inの対応する仮値とそれぞれ入れ替える。
本発明の耐タンパーソフトウェアの作成方法を説明する。最初にホストコードにアンチデバッギング技術を実装して、次に自己インテグリティ相互依存検証の一般的アルゴリズムを適用する。耐タンパー化したいアセンブリプログラムP_inを入力として、以下の手順を実行すると、耐タンパー化されたアセンブリプログラムP_outが作成される。図23を参照しながら説明する。
アンチデバッギング技術とハッシュ関数をP_inに追加実装する。追加実装の方法(サブルーチンあるいはインライン)は任意である。例えば、デバッガ検出処理と検出時にプログラムを中断する処理を実装したアンチデバッギング・ルーチンを、P_inの開始から終了まで定期的に実行するように実装する。
P_inの中から偽装対象の命令を選び、対応する偽装命令を定める。偽装対象の命令と偽装命令の組はランダムに選ばれる、あるいはプログラム開発者が直接指定する。n組の偽装対象の命令と偽装命令の組が決定されたとする。
耐タンパー化したいアセンブリプログラムP_inとn組の偽装対象の命令と偽装命令の組を、前述の一般的アルゴリズムに入力し、出力される耐タンパー化されたアセンブリプログラムを得る。作成されたマシン語プログラムに対して、最後に置換された2箇所のマスク値を含む領域を署名対象として署名生成鍵を用いてディジタル署名を生成し、その署名データをデータ領域の仮値と置換する。その結果をP_outとして出力する。(end)
Claims (8)
- 処理対象プログラムの命令列を入力として計算した値に応じて自己書換えを行う自己書換えルーチンを生成する手段と、動的解析を妨げるアンチデバッギングルーチンおよび前記自己書換えルーチンを処理対象プログラムに追加する手段と、を備え、前記追加手段は、複数個の前記自己書換えルーチンが相互に依存し、かつ前記自己書換えルーチンが計算の入力として用いる処理対象プログラムの命令列の中に前記アンチデバッギングルーチンと自己書換え対象の命令が含まれるように追加することを特徴とする情報処理装置。
- 前記自己書換えルーチン生成手段は、前記処理対象プログラムの特定の変数を自己書換えの対象とし、自己書き換えによって前記変数を予測困難な値に変更することを特徴とする、請求項1記載の情報処理装置。
- 前記自己書換えルーチン生成手段が生成する自己書換えルーチンは、前記処理対象プログラムを測定して計算した値に応じて複数の自己書換えを行うことを特徴とする、請求項1あるいは請求項2記載の情報処理装置。
- コンピュータに処理対象のプログラムを耐タンパー化させるプログラムであって、コンピュータを、処理対象プログラムの命令列を入力として計算した値に応じて自己書換えを行う自己書換えルーチンを生成する手段と、動的解析を妨げるアンチデバッギングルーチンおよび前記自己書換えルーチンを処理対象プログラムに追加する手段と、として機能させ、前記追加手段は、複数個の前記自己書換えルーチンが相互に依存し、かつ前記自己書換えルーチンが計算の入力として用いる処理対象プログラムの命令列の中に前記アンチデバッギングルーチンと自己書換え対象の命令が含まれるように追加することを特徴とするプログラム。
- 前記自己書換えルーチン生成手段は、前記処理対象プログラムの特定の変数を自己書換えの対象とし、自己書き換えによって前記変数を予測困難な値に変更することを特徴とする、請求項4記載のプログラム。
- 前記自己書換えルーチン生成手段が生成する自己書換えルーチンは、前記処理対象プログラムを測定して計算した値に応じて複数の自己書換えを行うことを特徴とする、請求項4あるいは請求項5記載のプログラム。
- コンピュータが、処理対象プログラムの命令列を入力として計算した値に応じて自己書換えを行う自己書換えルーチンを生成する工程と、
前記コンピュータが、動的解析を妨げるアンチデバッギングルーチンおよび前記自己書換えルーチンを処理対象プログラムに追加する工程と、
を有し、
前記追加する工程においては、前記コンピュータが、複数個の前記自己書換えルーチンが相互に依存し、かつ前記自己書換えルーチンが計算の入力として用いる処理対象プログラムの命令列の中に前記アンチデバッギングルーチンと自己書換え対象の命令が含まれるように追加することを特徴とする情報処理方法。 - 請求項4に記載のプログラムを格納したコンピュータ読み取り可能な記録媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010284054A JP5467271B2 (ja) | 2009-12-24 | 2010-12-21 | 情報処理装置及びプログラム、情報処理方法、記録媒体 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009291759 | 2009-12-24 | ||
JP2009291759 | 2009-12-24 | ||
JP2010284054A JP5467271B2 (ja) | 2009-12-24 | 2010-12-21 | 情報処理装置及びプログラム、情報処理方法、記録媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2011170836A JP2011170836A (ja) | 2011-09-01 |
JP5467271B2 true JP5467271B2 (ja) | 2014-04-09 |
Family
ID=44684851
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2010284054A Expired - Fee Related JP5467271B2 (ja) | 2009-12-24 | 2010-12-21 | 情報処理装置及びプログラム、情報処理方法、記録媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5467271B2 (ja) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP6149523B2 (ja) * | 2013-06-12 | 2017-06-21 | 株式会社島津製作所 | ファイル改ざん検知システム |
JP6005109B2 (ja) | 2014-08-06 | 2016-10-12 | 株式会社MersIntel | 太陽光出力オプティマイザ回路 |
JP5944452B2 (ja) | 2014-09-05 | 2016-07-05 | 株式会社MersIntel | 太陽光発電システムにおける電力最適採取制御方法および装置 |
KR101657950B1 (ko) * | 2015-03-05 | 2016-09-21 | (주)잉카엔트웍스 | 안티디버깅 장치 및 방법 |
JP6594213B2 (ja) * | 2016-01-20 | 2019-10-23 | 株式会社東芝 | 制御装置およびプログラム |
JP6391889B2 (ja) | 2016-04-19 | 2018-09-19 | 三菱電機株式会社 | 中継装置 |
EP3355218A1 (en) * | 2017-01-26 | 2018-08-01 | Gemalto Sa | Method to secure a software code |
DE112019006079T5 (de) | 2018-12-06 | 2021-09-02 | Cef., Ltd. | Solarphotovoltaik-Leistungsoptimierungsschaltung |
US20220376654A1 (en) | 2019-09-18 | 2022-11-24 | Clean Energy Factory Co., Ltd. | Monitoring/control system for photovoltaic generation site |
DE112020004445T5 (de) | 2019-09-18 | 2022-09-29 | Clean Energy Factory Co. , Ltd. | Bauverfahren für eine photovoltaische erzeugungsstätte |
DE112020004447T5 (de) | 2019-09-18 | 2022-09-22 | Clean Energy Factory Co. , Ltd. | Solarmodul |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3944069B2 (ja) * | 2002-12-06 | 2007-07-11 | 国立大学法人 奈良先端科学技術大学院大学 | 自己書換え処理追加プログラム、自己書換え処理追加装置及び自己書換え処理追加方法 |
JP2009104589A (ja) * | 2007-10-05 | 2009-05-14 | Canon Inc | 情報処理装置及びその方法、プログラム、記録媒体 |
-
2010
- 2010-12-21 JP JP2010284054A patent/JP5467271B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2011170836A (ja) | 2011-09-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5467271B2 (ja) | 情報処理装置及びプログラム、情報処理方法、記録媒体 | |
Burow et al. | SoK: Shining light on shadow stacks | |
US7757097B2 (en) | Method and system for tamperproofing software | |
US7287166B1 (en) | Guards for application in software tamperproofing | |
CN102598017B (zh) | 提高Java字节码的防窜改能力的系统和方法 | |
US7779270B2 (en) | Software self-defense systems and methods | |
JP5886926B2 (ja) | コンピュータプログラムコードを保護する方法 | |
JP7154365B2 (ja) | ソフトウェアコードをセキュアにするための方法 | |
Kong et al. | Improving software security via runtime instruction-level taint checking | |
Payer et al. | String oriented programming: When ASLR is not enough | |
CN101866406A (zh) | 一种栈溢出攻击防御方法 | |
JP4754635B2 (ja) | 制御フロー保護機構 | |
Zhu et al. | Protection against indirect overflow attacks on pointers | |
US11256786B2 (en) | Method to secure a software code | |
Oishi et al. | Self destructive tamper response for software protection | |
JP2009104589A (ja) | 情報処理装置及びその方法、プログラム、記録媒体 | |
CN111881485B (zh) | 一种基于arm指针验证的内核敏感数据完整性保护方法 | |
CN114981811A (zh) | 用于软件安全的装置和方法 | |
US20230161863A1 (en) | Method for executing a software program by a processing unit comprising a compilation phase | |
US20220292182A1 (en) | Method for the execution of a binary code of a computer program by a microprocessor | |
EP2966587A1 (en) | Method of protecting software program by corrupting memory chunks, and device for implementing said method | |
de Clercq | Hardware-supported software and control flow integrity | |
AU2023220809A1 (en) | Protecting software | |
Martinez Santos et al. | Static secure page allocation for light-weight dynamic information flow tracking | |
Wu et al. | An attack on SMC-based software protection |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110405 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20130926 |
|
A871 | Explanation of circumstances concerning accelerated examination |
Free format text: JAPANESE INTERMEDIATE CODE: A871 Effective date: 20130926 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20130926 |
|
A975 | Report on accelerated examination |
Free format text: JAPANESE INTERMEDIATE CODE: A971005 Effective date: 20131112 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20131119 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20131122 |
|
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: 20131210 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20131220 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 5467271 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
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 |
|
LAPS | Cancellation because of no payment of annual fees |