JP2019003309A - 検査装置 - Google Patents

検査装置 Download PDF

Info

Publication number
JP2019003309A
JP2019003309A JP2017115753A JP2017115753A JP2019003309A JP 2019003309 A JP2019003309 A JP 2019003309A JP 2017115753 A JP2017115753 A JP 2017115753A JP 2017115753 A JP2017115753 A JP 2017115753A JP 2019003309 A JP2019003309 A JP 2019003309A
Authority
JP
Japan
Prior art keywords
function
vulnerability
contract
inspection
source code
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
JP2017115753A
Other languages
English (en)
Other versions
JP6952506B2 (ja
Inventor
照博 田篭
Teruhiro Tagome
照博 田篭
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.)
Nomura Research Institute Ltd
Original Assignee
Nomura Research Institute 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 Nomura Research Institute Ltd filed Critical Nomura Research Institute Ltd
Priority to JP2017115753A priority Critical patent/JP6952506B2/ja
Publication of JP2019003309A publication Critical patent/JP2019003309A/ja
Application granted granted Critical
Publication of JP6952506B2 publication Critical patent/JP6952506B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

【課題】ブロックチェーンに関連するプログラムの脆弱性を検出する精度を向上する。【解決手段】検査装置10は、SC取得部16と解析部18を備える。SC取得部16は、ブロックチェーンを共有する複数の機器により実行可能なプログラムであって、実行結果が上記ブロックチェーンに記録されるプログラムであるコントラクトのソースコードを取得する。解析部18は、上記ブロックチェーンの仕様に基づき予め定められた評価項目にしたがって、SC取得部16により取得されたコントラクトのソースコードの脆弱性を検出する。【選択図】図1

Description

本発明はデータ処理技術に関し、特にコンピュータプログラムを検査する技術に関する。
コンピュータプログラムのソースコードを静的解析する装置が提案されている(例えば、特許文献1参照)。
また、近年、ブロックと呼ばれるデータの単位を一定時間ごとに生成し、複数のブロックを鎖のように連結していくことによりデータを保管する分散型のデータベースであるブロックチェーンの利用が進みつつある。
特開2005−202494号公報
従来より、ウェブアプリケーションやスマートフォンアプリケーションに対してセキュリティを検査するツールは提案されているが、ブロックチェーンを利用したシステムでは、従来とは異なる観点での検査が必要であると本発明者は考えた。
本発明は、発明者の上記着想に基づいてなされてものであり、1つの目的は、ブロックチェーンに関連するプログラムの脆弱性を検査する技術を提供することにある。
上記課題を解決するために、本発明のある態様の検査装置は、ブロックチェーンを共有する複数の機器により実行可能なプログラムであって、実行結果がブロックチェーンに記録されるプログラムであるコントラクトのソースコードを取得する取得部と、ブロックチェーンの仕様に基づき予め定められた評価項目にしたがって、取得部により取得されたコントラクトのソースコードの脆弱性を検出する検出部と、を備える。
なお、以上の構成要素の任意の組合せ、本発明の表現を、方法、プログラム、プログラムを格納した記録媒体などの間で変換したものもまた、本発明の態様として有効である。
本発明によれば、ブロックチェーンに関連するプログラムの脆弱性を検出する精度を向上することができる。
実施例の検査装置の機能構成を示すブロック図である。 図2(a)は、検査対象となるプログラムの例を示す図であり、図2(b)は、攻撃者プログラムの例を示す図である。 検査対象となるプログラムの例を示す図である。 検査対象となるプログラムの例を示す図である。 検査装置の動作を示すフローチャートである。
実施例の検査装置は、分散型のデータベース(台帳データとも言える)であるブロックチェーン上で実行可能なプログラムであるコントラクト(スマートコントラクト(Smart Contract)とも呼ばれる。以下「SC」と呼ぶ。)の脆弱性を検査する。SCは、デジタル化された約束事とも言え、P2P(Peer to Peer)ネットワークを介してブロックチェーンを共有する複数の機器により実行可能なコンピュータプログラムである。SCは、典型的には、フィールド(ステートともいえ、Java(登録商標)のインスタンス変数に相当)と、関数とを有する。また、上記複数の機器のそれぞれによるSCの実行結果は、ブロックチェーン上に記録され、具体的には、ブロックチェーンにおけるいずれかのブロックに記録される。
実施例のブロックチェーンは、「イーサリアム(Ethereum)」により実現される。イーサリアムは、パブリックなブロックチェーンのプラットフォームであり、イーサリアム・ネットワークと呼ばれるP2Pネットワーク上でSCの履行履歴(実行履歴とも言える)をブロックチェーンに記録していく。SCの履行履歴は、SCのインスタンスのデータ、そのインスタンスに対するアクション(関数呼び出し等)、アクションの結果を示すデータを含んでもよい。
また実施例では、SCのソースコードは、コントラクト指向言語である「Solidity」により記述される。変形例として、ブロックチェーンネットワークは、イーサリアム以外の他のプラットフォームにより実現されてもよい。また、SCのソースコードは、Solidity以外の公知のプログラミング言語により記述されてもよい。
図1は、実施例の検査装置10の機能構成を示すブロック図である。検査装置10は、一般的なPC、タブレット端末、スマートフォンであってもよい。本明細書のブロック図において示される各ブロックは、ハードウェア的には、コンピュータのCPU・メモリをはじめとする素子や機械装置で実現でき、ソフトウェア的にはコンピュータプログラム等によって実現されるが、ここでは、それらの連携によって実現される機能ブロックを描いている。これらの機能ブロックはハードウェア、ソフトウェアの組合せによっていろいろなかたちで実現できることは、当業者には理解されるところである。
検査装置10は、SC記憶部12、検査結果記憶部14、SC取得部16、解析部18、検査結果出力部20、キーワード記憶部22を備える。これらの機能ブロックに対応する複数のモジュールを含むコンピュータプログラムは、所定の記録媒体に格納され、その記録媒体を介して、検査装置10のストレージにインストールされてもよい。また、上記コンピュータプログラムは、通信網を介してダウンロードされ、検査装置10のストレージにインストールされてもよい。検査装置10のCPUは、ローカルのストレージにインストールされた上記コンピュータプログラムをメインメモリへ読み出して実行することにより、図1の各ブロックの機能を発揮してもよい。
SC記憶部12は、所定のブロックチェーンを共有する複数の機器により実行され得る1つ以上のSCのソースコードが格納される記憶領域である。検査結果記憶部14は、SCのソースコードに対する検査結果を示すデータが格納される記憶領域である。キーワード記憶部22は、SCのソースコードの脆弱性を検出するための複数のキーワードもしくはキーフレーズが格納される記憶領域である。
SC取得部16は、検査の担当者により指定されたSC(以下「検査対象SC」とも呼ぶ。)のソースコードをSC記憶部12から読み込む。以下、単に「検査対象SC」と呼ぶ場合、ソースコードを意味する。解析部18は、ブロックチェーン(実施例ではイーサリアム)の仕様に基づいて予め定められた複数の評価項目にしたがって、SC取得部16により取得された検査対象SCの脆弱性を検出する。解析部18は、脆弱性検出部とも言える。解析部18は、検査対象SCの脆弱性を、ソースコードを静的解析することにより検出する。
検査結果出力部20は、解析部18による脆弱性の検出結果を示す検査結果データを検査結果記憶部14に保存する。検査結果データは、検査対象SCの識別データと、複数の評価項目のそれぞれについての脆弱性の有無を示すデータとを含んでもよい。なお、検査結果出力部20は、所定のディスプレイに検査結果データを表示させてもよい。また、検査結果出力部20は、所定の外部装置へ検査結果データを送信して、その外部装置に検査結果データを記憶させ、また表示させてもよい。
解析部18による複数の評価項目を詳細に説明する。実施例では、7つの評価項目により検査対象SCの脆弱性を検出する。なお、解析部18は、公知の字句解析および構文解析の技術を使用して検査対象SCをパースし、検査対象SCに記述された字句(例えば、関数名、変数名、引数等に該当する文字列)を抽出してもよい。
評価項目1.外部関数呼び出し(External Call)
SCでは、「他のSCのアドレス(アカウントとも言える).関数名」の形で、他のSCの関数を呼び出すことができる(外部関数呼び出しと呼ぶ)。しかし、信頼できないコントラクトの関数を呼び出すことは予期しない結果をもたらす可能性がある。例えば、外部のSCに実装された悪意のあるコードを意図せず呼び出してしまう可能性がある。
解析部18は、検査対象SCに外部関数呼び出しのコードが記述されている場合、そのことを検出し、検査対象SCに脆弱性があることを検出する。また、解析部18は、評価項目「再入可能性」における脆弱性の有無を示す検査結果データを検査結果出力部20へ渡す。
具体的には、解析部18は、検査対象SCのコードの中から、Solidity言語において予め定められた外部関数呼び出しの形式に合致する文字列を検索してもよい。例えば、解析部18は、検査対象SCのコードの中から、「他のSCのアドレス(例えばaddress型の変数).関数名」の形式の文字列を検索し、該当する文字列が存在すれば、検査対象SCに脆弱性があると判定してもよい。
評価項目1を設けることにより、SCの開発者、例えば、ブロックチェーンの利用ユーザやシステムインテグレータ等に対して、外部関数呼び出しによるリスクの存在を報知し、対処を促すことができる。
評価項目2.再入可能性(Re−entrancy)
残高等のフィールド(言い換えればステート)を更新する前に送金等の処理(「特定処理」と呼ぶ。)を実行するようにSCが記述された場合、外部の不正プログラムにより、フィールドの更新前に特定処理を複数回実行するように制御されてしまう可能性がある。この結果、ユーザの残高を超える金銭が引き出されてしまう等、不正な結果が生じうる。なお、実施例における特定処理は、外部関数呼び出しの一種と言え、SCを呼び出した元のプログラムの関数(例えばフォールバック関数)を呼び出すものである。
図2(a)は、検査対象となるプログラムの例を示す。同図の検査対象SC30は、複数のユーザそれぞれの残高(言い換えれば預り金額)を保持するマップと、「withdrawBalance」関数を含む。この関数は、コード32とコード34を含み、実行順序はコード32→コード34である。コード32は、当該SCを呼び出した呼び出し元(例えば、ユーザまたはユーザのプログラムであり、コード内では「msg.sender」)の残高を引き出す処理である。具体的には、コード32は、呼び出し元の残高の全額を呼び出し元へ送金する処理である。また、コード34は、呼び出し元の残高を「0」に更新する処理である。
図2(b)は、攻撃者プログラムの例を示す。攻撃者プログラム40は、検査対象SC30における再入可能性の脆弱性をついて不正な送金処理を実行させるプログラムである。具体的には、(1)攻撃者は、検査対象SC30(すなわち攻撃対象のSC)のアドレスを引数に指定して攻撃者プログラム40の「withdraw」関数を呼び出す。(2)「withdraw」関数内のコード42は、検査対象SC30のアドレス(to)を用いて、検査対象SC30の「withdrawBalance」関数を呼び出す。
(3)検査対象SC30における「withdrawBalance」関数内のコード32は、上記の特定処理に該当し、攻撃者の残高分の金銭を攻撃者へ送金する。このとき、イーサリアムの仕様により、攻撃者プログラム40のフォールバック関数44(言い換えれば無名関数)が自動的に呼び出される。(4)攻撃者プログラム40のフォールバック関数44のコード46では、検査対象SC30のアドレス(msg.sender)を用いて、検査対象SC30の「withdrawBalance」関数を再度呼び出す。
このように、検査対象SC30のコード34(攻撃者の残高を0にする処理)が実行されないまま(3)と(4)が繰り返されるため、攻撃者の残高より多い金銭が引き出されてしまう。この攻撃を防止するために、検査対象SC30では、ユーザの残高を更新するコード34が、送金処理を行うコード32により前に実行されるように記述される必要がある。より一般的に言えば、SCは、呼び出し元のプログラムの関数を呼び出す特定処理を実行する前に、フィールドの更新処理を実行するように記述される必要がある。
そこで解析部18は、検査対象SCに、当該SCの関数を呼び出した呼び出し元(上記の攻撃者プログラム40)の関数を呼び出す第1処理(上記の特定処理)と、検査対象SCのフィールドのデータを更新する第2処理とが記述されており、かつ、第2処理が第1処理より後に実行されるように記述されている場合に検査対象SCの脆弱性を検出する。解析部18は、評価項目「再入可能性」について、脆弱性の有無を示す検査結果データを検査結果出力部20へ渡してもよい。なお、上記フィールドのデータは、呼び出し元に関するデータ(例えば預り金額等)であり、呼び出し元のユーザまたはプログラムのアカウント(またはアドレス)に対応付けられたデータであってもよい。
具体的には、解析部18は、検査対象SCのコードの中から、solidity言語で予め定められた外部関数呼び出しの形式に合致する第1文字列を検索してもよい。また、解析部18は、図2(a)で示したように、自動的(暗黙的)に呼び出し元のフォールバック関数を呼び出すコマンド(送金処理等)に合致する文字列を上記第1文字列として検索してもよい。上記第1文字列が存在する場合、解析部18は、同じ関数内で第1文字列の後に、呼び出し元に関するフィールドのデータを更新する処理を示す第2文字列が存在するかを検索する。そして、第1文字列の後に第2文字列が存在する場合、解析部18は、検査対象SCに脆弱性があると判定してもよい。
評価項目2を設けることにより、SCの開発者に対して、SCに再入可能性のリスクが存在することを報知し、対処を促すことができる。
評価項目3.トランザクションの順序への依存性(Transaction-Ordering Dependence(TOD))
ブロックチェーンにおいて、複数のトランザクション(具体的にはSCの関数を呼び出す処理等)がブロックに取り込まれる順序は、ブロックチェーンの維持管理作業への参加者(以下「マイナー」と呼ぶ。)に依存する。また、ブロックチェーンでは、複数のマイナーの合意形成を経て新たなブロックが確定したタイミングで、その新たなブロックに取り込まれた複数のトランザクションが、当該ブロックへ取り込まれた順序で実行される。したがって、ユーザが意図した順序でトランザクションが実行されないケースがある。
例えば、注文と取消の2つのトランザクションを、注文→取消の順序でユーザが発生させた場合でも、新たなブロックの確定タイミングでは、これらのトランザクションが取消→注文の順序で実行されてしまうかもしれない。このことは、コンストラクタ以外の第1の関数がフィールドの値(ステート)を変更し、第1の関数とは異なる第2の関数がそのフィールドの値を参照または更新する場合に問題となりうる。
図3は、検査対象となるプログラムの例を示す。検査対象SC50は、マーケットプレイスを抽象化したスマートコントラクトである。「price」フィールドは商品価格を示す。オーナーは、「updatePrice」関数を呼び出して商品価格を変更できる。また、購入者は、「buy」関数を呼び出して商品を購入できる。ここで、購入者が「price」フィールドの値を参照した上で「buy」関数を実行し、直後に、オーナーが「updatePrice」関数を実行して「price」フィールドの値を変更したとする。この場合、ブロックチェーン上では、マイナーに依存して、「updatePrice」関数が「buy」関数より先に実行されることがある。この結果、購入者は、商品購入の操作時に参照した価格とは異なる価格で商品を購入することになってしまう。例えば、図3のコードでは、条件分岐処理「if (msg.value < quantity * price || quantity > stockQuantity)」が、ユーザが想定する価格とは異なる価格を用いて実行されてしまう。
そこで解析部18は、検査対象SCに複数の関数が記述され、複数の関数のうち第1の関数に、検査対象SCに保持された特定のフィールドのデータを更新する処理が記述され、複数の関数のうち第2の関数に上記特定のフィールドのデータを参照または更新する処理が記述されている場合に、検査対象SC50の脆弱性を検出する。
例えば、解析部18は、検査対象SCに含まれる1つ以上の関数を抽出してもよい。解析部18は、検査対象SCにおける同じフィールドの値を参照または更新する複数の関数が存在し、それら複数の関数のうち少なくとも1つが上記同じフィールドの値を更新するものである場合に脆弱性有りと判定してもよい。解析部18は、評価項目「トランザクションの順序への依存性」について、脆弱性の有無を示す検査結果データを検査結果出力部20へ渡してもよい。
評価項目3を設けることにより、ブロックチェーンにおけるトランザクション実行順序に依存する問題の発生リスクをSCの開発者に報知し、対処を促すことができる。
評価項目4.権限確認の有無
パブリックなブロックチェーンといえど、ユーザ端末で直接SCを実行させるのではなく、ブロックチェーンを共有するP2Pネットワークに接続されるシステム(アプリケーションサーバ等)をユーザ端末とは別に設ける構成が考えられる。この場合、ユーザは、上記システムを経由してSCの関数等を実行させる。
このような構成で特に好適であるが、一般的に言っても、SCの関数は、当該SCのインスタンスを生成したオーナー(システムオーナーとも言える)のアカウント(アドレスとも言える)からのみ実行可能なように限定する方が安全である。このような限定がない場合、SC(厳密にはSCインスタンス)のパブリック属性の関数を、そのSCインスタンスを生成したオーナーとは異なる第三者に直接実行されてしまうからである。
図4は、検査対象となるプログラムの例を示す。検査対象SC60では、コンストラクタにて検査対象SC60をインスタンス化したオーナーのアカウントをフィールドへ記録する。関数62は、悪い例であり、権限確認の処理を含まない。関数62では、オーナー以外の第三者が、本来オーナーのみが実施すべき処理を実行できてしまう。
一方、関数64は、良い例であり、呼び出し元の権限を確認する処理を含む。具体的には、関数64は、呼び出し元のアカウントが予めフィールドに保持されたオーナーのアカウントに一致するか否かを確認する処理を含む。また、関数66も、良い例であり、「doSomethingWithPermissionByModifier」関数の実行前に呼び出される処理である「onlyowner」が、呼び出し元の権限を確認する処理を含む。
解析部18は、検査対象SCにパブリック属性の関数が記述され、かつ、そのパブリック属性の関数に、当該関数の呼び出し元のアカウントを確認する処理が記述されているか否かを確認する。この確認処理は、パブリック属性の関数に、当該関数の呼び出し元のアカウントを確認する処理を含むmodifierが設定されているか否かを確認する処理を含む。
具体的には、解析部18は、(1)コンストラクタが、オーナーアカウント(例えば「msg.sender」)をフィールドへ設定する処理、(2)パブリック関数が、実行者(例えば「msg.sender」)と、フィールドに設定されたオーナーアカウントとの同一性を判定する処理(例えば比較演算子または等価演算子により両者を比較すること)を含むか否かを判定してもよい。解析部18は、上記(1)(2)の少なくとも一方の処理が検査対象SCに記述されていない場合、検査対象SCの脆弱性を検出してもよい。解析部18は、評価項目「権限確認の有無」について、脆弱性の有無を示す検査結果データを検査結果出力部20へ渡してもよい。
評価項目4を設けることにより、SCのセキュリティリスクをSCの開発者に報知し、対処を促すことができる。
評価項目5.重要情報の有無
イーサリアム等のパブリックなブロックチェーンでは、通常、SCのトランザクションは暗号化されない。例えば、SCのフィールドに設定するデータは、たとえそのフィールドがプライベート属性であっても、第三者により閲覧可能である。そこで、第三者に対して秘匿すべき重要な情報(以下「重要情報」とも呼ぶ。)は、SCに保持させるべきではない。重要情報は、第三者に対して非公開にすべき各種秘密情報を含み、例えば、ユーザの個人情報や資産情報、営業秘密等を含む。
キーワード記憶部22は、重要情報に対して使用される可能性が高いと想定されるフィールド名候補の文字列を記憶する。フィールド名候補は、検査装置10の開発者やSCの検査担当者等の知見や経験により予め定められてよい。フィールド名候補は、例えば、「password」「name」「phonenumber」「ID」を含んでもよい。
解析部18は、検査対象SCに記述されたすべてのフィールド名を抽出する。解析部18は、検査対象SCに記述された少なくとも1つのフィールド名が、キーワード記憶部22に予め記憶されたフィールド名候補に一致する場合、検査対象SCの脆弱性を検出する。なお、解析部18は、完全一致に限らず、少なくとも部分一致の場合、例えば、検査対象SCに記述された少なくとも1つのフィールド名が、キーワード記憶部22に記憶されたフィールド名候補の文字列を含む場合、検査対象SCの脆弱性を検出してもよい。解析部18は、評価項目「重要情報の有無」について、脆弱性の有無を示す検査結果データを検査結果出力部20へ渡してもよい。
評価項目5を設けることにより、SCのトランザクションがそのトランザクションに関与しない第三者に閲覧され、重要情報が漏洩してしまうことを防止しやすくなる。
評価項目6.時刻への依存性
イーサリアムのSolidityには「now」という予約後が存在する。「now」には、トランザクション実行時(すなわちブロックチェーンにおけるブロック確定時)の現在時刻が設定される。一部記述したように、ブロックチェーンにおけるブロック確定タイミングはマイナーに依存する。そのため、SCの関数が「now」の値に依存したロジックの場合、「now」が予期せぬ値となって問題が生じることがある。このような問題は、「now」に限らず、SCの関数が、現在時刻等の何らかの時刻値に基づく処理を実行する場合に発生しうる。
キーワード記憶部22は、時刻に関連する予約語(「now」等)、コマンド名、関数名(これらを総称して「時刻関連語」と呼ぶ。)を1つ以上記憶する。解析部18は、キーワード記憶部22に記憶された1つ以上の時刻関連語のうち少なくとも1つが検査対象SCに記述されている場合、検査対象SCの脆弱性を検出する。例えば、解析部18は、検査対象SCから、1つ以上の時刻関連語のそれぞれを検索し、少なくとも1つの時刻関連語が検査対象SCに存在する場合、検査対象SCの脆弱性を検出してもよい。解析部18は、評価項目「時刻への依存性」について、脆弱性の有無を示す検査結果データを検査結果出力部20へ渡してもよい。
評価項目6を設けることにより、SCの関数が、予期せぬ時刻値のために予期せぬ動作となることを防止しやすくなる。
評価項目7.原子性
イーサリアムのSolidityでは、SCの関数内で何らかのエラー、例外、または問題が発生した場合、「return false」で処理を終了させることが考えられる。しかし、「return」コマンドでは、「return」前までの処理は実行される。その結果、処理の原子性が損なわれる可能性がある。その一方、「throw」を使用すると、「throw」前までの処理がロールバックされるため安全である。そのため、SCの関数内でエラー、例外、または問題が発生した場合は「throw」が使用されるべきである。
キーワード記憶部22は、トランザクションがロールバックされないコマンド(「return false」等)の文字列を記憶する。解析部18は、検査対象SCが含む1つ以上の関数の中に、トランザクションがロールバックされない上記コマンドにより終了する関数が少なくとも1つ存在する場合、検査対象SCの脆弱性を検出する。実施例では、解析部18は、検査対象SCの中の少なくとも1つの関数が「return false」を含む場合、検査対象SCの脆弱性を検出する。解析部18は、評価項目「原子性」について、脆弱性の有無を示す検査結果データを検査結果出力部20へ渡してもよい。
評価項目7を設けることにより、SCの関数における処理の原子性を維持しやすくなる。
以上の構成による検査装置10の動作を説明する。
図5は、検査装置10の動作を示すフローチャートである。SC記憶部12に予め記憶されたSCの中から特定の検査対象SCを指定した検査開始指示が検査者により入力されると(S10のY)、SC取得部16は、検査対象SCのソースコードをSC記憶部12から読み込む(S12)。解析部18は、予め定められた7つの評価項目のそれぞれについて検査対象SCのソースコードを検査し、検査対象SCにおける脆弱性の有無を検査する(S14)。検査結果出力部20は、検査対象SCにおける脆弱性の有無を示す検査結果データを検査結果記憶部14へ保存する(S16)。検査開始指示が未入力であれば(S10のN)、S12以降の処理をスキップして本図のフローを終了する。
実施例の検査装置10によると、ブロックチェーンを共有する複数の機器のそれぞれで実行されるスマートコントラクトの脆弱性を静的解析により精度よく検出することができる。これにより、スマートコントラクト実行時の不具合の発生、言い換えれば、スマートコントラクトのトランザクションにおける不具合の発生を抑制し、また、セキュリティのリスクを低減することができる。
以上、本発明を実施例をもとに説明した。この実施例は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
上記実施例において検査装置10は、7つの評価項目のそれぞれについて検査対象SCのソースコードを検査し、検査対象SCにおける脆弱性の有無を検査した。変形例として、全評価項目のうちユーザの指定をうけた評価項目のみについてソースコードを検査し、検査対象SCにおける脆弱性の有無を検査してもよい。また、全評価項目のソースコードを検査し、検査対象SCにおける脆弱性の有無を検査した上で、ユーザの指定を受けた評価項目の検査結果のみをユーザに表示する構成であってもよい。これらにより、ユーザの環境や条件によっては、考慮する必要がない評価項目を検査しなくてよくなり、または、考慮する必要がない評価項目をユーザが確認する必要がなくなる。
上記実施例において検査装置10は、ブロックチェーンに関連するプログラムの脆弱性を検出するための評価項目について検査した。ところで、周知慣用技術としてソースコードの品質上問題のある部分を検出する品質検査装置やそのソースコードを実行したときのパフォーマンスの観点から問題のある部分を検出するパフォーマンス検査装置がある。このような、ブロックチェーンに関連するプログラムの脆弱性以外の評価項目を検査する機能を検査装置10に追加してもよい。また、検査装置10は、入力されるソースコードがブロックチェーンに関連するプログラム(例えばスマートコントラクタ)である場合にのみ、ブロックチェーンに関連するプログラムの脆弱性を検査する動作を行う構成であってもよい。この場合に、検査装置10は、ソースコードがブロックチェーンに関連するプログラムであるかどうかを、ブロックチェーン特有の内容(変数、関数、ライブラリ名又はコメント)がソースコードに含まれるかどうかで識別してもよい。
上記実施例において検査装置10が備えた複数の機能ブロックは、複数の装置に分散して配置されてもよい。例えば、SC記憶部12、検査結果記憶部14、キーワード記憶部22の機能は、検査装置10の外部のデータベースサーバまたはファイルサーバが有してもよい。また、検査装置10を含む複数の装置が連携することにより、SCのソースコードの脆弱性を検査する検査システムが実現されてもよい。
上述した実施の形態および変形例の任意の組み合わせもまた本発明の実施の形態として有用である。組み合わせによって生じる新たな実施の形態は、組み合わされる実施の形態および変形例それぞれの効果をあわせもつ。また、請求項に記載の各構成要件が果たすべき機能は、実施の形態および変形例において示された各構成要素の単体もしくはそれらの連携によって実現されることも当業者には理解されるところである。
10 検査装置、 12 SC記憶部、 14 検査結果記憶部、 16 SC取得部、 18 解析部、 20 検査結果出力部、 22 キーワード記憶部。

Claims (5)

  1. ブロックチェーンを共有する複数の機器により実行可能なプログラムであって、実行結果が前記ブロックチェーンに記録されるプログラムであるコントラクトのソースコードを取得する取得部と、
    前記ブロックチェーンの仕様に基づき予め定められた評価項目にしたがって、前記取得部により取得されたコントラクトのソースコードの脆弱性を検出する検出部と、
    を備えることを特徴とする検査装置。
  2. 前記検出部は、前記コントラクトのソースコードに、前記コントラクトの関数を呼び出した呼び出し元の関数を呼び出す第1処理が記述され、前記第1処理の後に、前記コントラクトに保持された前記呼び出し元に関するデータを更新する第2処理が記述されている場合、前記脆弱性を検出することを特徴とする請求項1に記載の検査装置。
  3. 前記検出部は、前記コントラクトのソースコードに複数の関数が記述され、前記複数の関数のうち第1の関数に、前記コントラクトに保持されたフィールドのデータを更新する処理が記述され、前記複数の関数のうち第2の関数に、前記フィールドのデータを参照または更新する処理が記述されている場合、前記脆弱性を検出することを特徴とする請求項1または2に記載の検査装置。
  4. 前記検出部は、前記コントラクトのソースコードにパブリック属性の関数が記述され、かつ、前記パブリック属性の関数に、当該関数の呼び出し元のアカウントを確認する処理が記述されていない場合、前記脆弱性を検出することを特徴とする請求項1から3のいずれかに記載の検査装置。
  5. 前記検出部は、前記コントラクトのソースコードに、前記コントラクトとは別のプログラムの関数を呼び出す処理が記述されている場合、前記脆弱性を検出することを特徴とする請求項1から4のいずれかに記載の検査装置。
JP2017115753A 2017-06-13 2017-06-13 検査装置 Active JP6952506B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2017115753A JP6952506B2 (ja) 2017-06-13 2017-06-13 検査装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017115753A JP6952506B2 (ja) 2017-06-13 2017-06-13 検査装置

Publications (2)

Publication Number Publication Date
JP2019003309A true JP2019003309A (ja) 2019-01-10
JP6952506B2 JP6952506B2 (ja) 2021-10-20

Family

ID=65006015

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017115753A Active JP6952506B2 (ja) 2017-06-13 2017-06-13 検査装置

Country Status (1)

Country Link
JP (1) JP6952506B2 (ja)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109801166A (zh) * 2019-01-28 2019-05-24 浙江师范大学 一种基于状态锁的智能合约的安全函数的设计方法及系统
CN109960652A (zh) * 2019-02-13 2019-07-02 平安科技(深圳)有限公司 测试设备的共享方法、装置、存储介质及计算机设备
CN110390213A (zh) * 2019-07-31 2019-10-29 中国工商银行股份有限公司 区块链网络环境下智能合约的安全部署方法及系统
JP2020502617A (ja) * 2018-11-27 2020-01-23 アリババ・グループ・ホールディング・リミテッドAlibaba Group Holding Limited ブロックチェーン上のスマートコントラクトの安全性を向上するためのシステムと方法
CN112396521A (zh) * 2019-08-13 2021-02-23 国际商业机器公司 降低区块链中智能合约的风险
KR102247233B1 (ko) * 2019-10-28 2021-05-03 주식회사 린아레나 다중 레이어 기반 스마트 컨트랙트 감사 방법 및 그 장치
KR20210077136A (ko) * 2019-12-17 2021-06-25 주식회사 리드포인트시스템 블록 체인 네트워크 시스템의 동작 방법
US11138597B2 (en) 2018-11-27 2021-10-05 Advanced New Technologies Co., Ltd. System and method for improving security of smart contract on blockchain
WO2022003914A1 (ja) * 2020-07-02 2022-01-06 富士通株式会社 制御方法、情報処理装置及び制御プログラム
JP2022541929A (ja) * 2019-09-24 2022-09-28 京▲東▼科技信息技▲術▼有限公司 スマートコントラクトを発行するための方法及び装置
JP7447127B2 (ja) 2019-01-14 2024-03-11 ポリサイン・インコーポレイテッド 分散型台帳システムへのデータの記録の誤ったコピーの送信を防止する

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001134431A (ja) * 1999-11-09 2001-05-18 Mitsubishi Electric Corp 関数の再入可能性判定方法
US20170155515A1 (en) * 2015-11-26 2017-06-01 International Business Machines Corporation System, method, and computer program product for privacy-preserving transaction validation mechanisms for smart contracts that are included in a ledger
JP2018156159A (ja) * 2017-03-15 2018-10-04 株式会社東芝 解析装置、解析方法およびプログラム

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001134431A (ja) * 1999-11-09 2001-05-18 Mitsubishi Electric Corp 関数の再入可能性判定方法
US20170155515A1 (en) * 2015-11-26 2017-06-01 International Business Machines Corporation System, method, and computer program product for privacy-preserving transaction validation mechanisms for smart contracts that are included in a ledger
JP2018156159A (ja) * 2017-03-15 2018-10-04 株式会社東芝 解析装置、解析方法およびプログラム

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11354727B2 (en) 2018-11-27 2022-06-07 Advanced New Technologies Co., Ltd. System and method for improving security of smart contract on blockchain
JP2020502617A (ja) * 2018-11-27 2020-01-23 アリババ・グループ・ホールディング・リミテッドAlibaba Group Holding Limited ブロックチェーン上のスマートコントラクトの安全性を向上するためのシステムと方法
US11138597B2 (en) 2018-11-27 2021-10-05 Advanced New Technologies Co., Ltd. System and method for improving security of smart contract on blockchain
US11940987B2 (en) 2019-01-14 2024-03-26 Polysign Inc. Preventing a transmission of an incorrect copy of a record of data to a distributed ledger system
JP7447127B2 (ja) 2019-01-14 2024-03-11 ポリサイン・インコーポレイテッド 分散型台帳システムへのデータの記録の誤ったコピーの送信を防止する
CN109801166B (zh) * 2019-01-28 2023-04-18 浙江师范大学 一种基于状态锁的智能合约的安全函数的设计方法及系统
CN109801166A (zh) * 2019-01-28 2019-05-24 浙江师范大学 一种基于状态锁的智能合约的安全函数的设计方法及系统
CN109960652A (zh) * 2019-02-13 2019-07-02 平安科技(深圳)有限公司 测试设备的共享方法、装置、存储介质及计算机设备
CN110390213A (zh) * 2019-07-31 2019-10-29 中国工商银行股份有限公司 区块链网络环境下智能合约的安全部署方法及系统
CN112396521A (zh) * 2019-08-13 2021-02-23 国际商业机器公司 降低区块链中智能合约的风险
CN112396521B (zh) * 2019-08-13 2024-01-30 国际商业机器公司 用于降低区块链中智能合约的风险的方法和系统
JP2022541929A (ja) * 2019-09-24 2022-09-28 京▲東▼科技信息技▲術▼有限公司 スマートコントラクトを発行するための方法及び装置
KR102247233B1 (ko) * 2019-10-28 2021-05-03 주식회사 린아레나 다중 레이어 기반 스마트 컨트랙트 감사 방법 및 그 장치
KR102610532B1 (ko) * 2019-12-17 2023-12-06 주식회사 리드포인트시스템 블록 체인 네트워크 시스템의 동작 방법
KR20210077136A (ko) * 2019-12-17 2021-06-25 주식회사 리드포인트시스템 블록 체인 네트워크 시스템의 동작 방법
WO2022003914A1 (ja) * 2020-07-02 2022-01-06 富士通株式会社 制御方法、情報処理装置及び制御プログラム

Also Published As

Publication number Publication date
JP6952506B2 (ja) 2021-10-20

Similar Documents

Publication Publication Date Title
JP6952506B2 (ja) 検査装置
Huang Hunting the ethereum smart contract: Color-inspired inspection of potential attacks
RU2637477C1 (ru) Система и способ обнаружения фишинговых веб-страниц
CN104537308B (zh) 提供应用安全审计功能的系统及方法
Chen et al. Why do smart contracts self-destruct? investigating the selfdestruct function on ethereum
Demir et al. Security smells in smart contracts
Zhang et al. Ripple: Reflection analysis for android apps in incomplete information environments
CN111507086A (zh) 本地化应用程序中翻译文本位置的自动发现
Hwang et al. Gap between theory and practice: An empirical study of security patches in solidity
Sun et al. When gpt meets program analysis: Towards intelligent detection of smart contract logic vulnerabilities in gptscan
Mao et al. Detecting malicious behaviors in javascript applications
US10481996B2 (en) Hybrid code modification in intermediate language for software application
Kanwal et al. An app based on static analysis for android ransomware
Tahaei et al. Stuck in the permissions with you: Developer & end-user perspectives on app permissions & their privacy ramifications
US10248532B1 (en) Sensitive data usage detection using static analysis
Sun et al. GPTScan: Detecting Logic Vulnerabilities in Smart Contracts by Combining GPT with Program Analysis
Tsankov Security analysis of smart contracts in datalog
Fröwis et al. Not all code are create2 equal
CN104603791A (zh) 签名验证装置及签名验证方法和程序
N’Da et al. Characterizing the cost of introducing secure programming patterns and practices in ethereum
Mandloi et al. A machine learning-based dynamic method for detecting vulnerabilities in smart contracts
Beksultanova et al. Analysis tools for smart contract security
CN113191777A (zh) 风险识别方法和装置
US10789067B2 (en) System and method for identifying open source usage
JP2007299093A (ja) 文書管理システム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200330

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20210129

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210202

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210310

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: 20210831

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210928

R150 Certificate of patent or registration of utility model

Ref document number: 6952506

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150