JPWO2005029328A1 - オペレーティングシステム、及びそれを記録した記録媒体 - Google Patents
オペレーティングシステム、及びそれを記録した記録媒体 Download PDFInfo
- Publication number
- JPWO2005029328A1 JPWO2005029328A1 JP2005514058A JP2005514058A JPWO2005029328A1 JP WO2005029328 A1 JPWO2005029328 A1 JP WO2005029328A1 JP 2005514058 A JP2005514058 A JP 2005514058A JP 2005514058 A JP2005514058 A JP 2005514058A JP WO2005029328 A1 JPWO2005029328 A1 JP WO2005029328A1
- Authority
- JP
- Japan
- Prior art keywords
- address
- program
- api
- operating system
- area
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring 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
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Abstract
【課題】 セキュリティホールの発生原因と言われるバッファオーバーラン現象を利用したコンピュータウイルスや不正アクセスを抑制することのできるオペレーティングシステム、及びそれを記録した記録媒体を提供する。【解決手段】 API(アプリケーションプログラムインタフェイス)またはシステムコールをプログラムに提供するオペレーティングシステム100において、プログラムから要求されたAPIまたはシステムコールの実行前に、メモリ装置上における前記プログラムの格納アドレスを読み取るアドレス取得手段5を備え、APIを要求したプログラムを1次プログラムとし、1次プログラムがサブルーチンである場合、1次プログラムの呼び出し元となる2次〜n次(nは2以上の整数)プログラムまでが、順に呼び出し階層を形成していると定義すると、前記アドレス取得手段5は、1次プログラムの格納アドレスと、2次〜n次プログラムまでの格納アドレスをそれぞれ取得する。
Description
本発明は、コンピュータウイルスに感染しにくい、安全性の高いオペレーティングシステム、及びそれを記録した記録媒体に関する。
インターネットの普及に従い、企業、個人用途のコンピュータシステムの多くが、ネットワークに接続し、相互にデータのやり取りをするに至っている。
しかしながら、コンピュータシステムに対し、外部より悪意あるネットワーク利用者が接続し、システム管理者が気付かないうちに、コンピュータシステムが書き換えられる問題が頻繁に発生している。また、所謂コンピュータウイルスと呼ばれる悪意ある実行形式のデータ(プログラム)がシステムに書き込まれるという問題も多く、これらは深刻な社会問題となっている。
尚、コンピュータシステムや、悪意あるネットワーク接続者による行為については、非特許文献1〜3にそれぞれ記載されている。
「ハッカー・プログラミング大全」,UNYUN著 「OPERATING SYSTEM Internals andDesign」,William Stalings,Ph.D.著 「インテル・アーキテクイチャ最適化マニュアル」,米インテル社
しかしながら、コンピュータシステムに対し、外部より悪意あるネットワーク利用者が接続し、システム管理者が気付かないうちに、コンピュータシステムが書き換えられる問題が頻繁に発生している。また、所謂コンピュータウイルスと呼ばれる悪意ある実行形式のデータ(プログラム)がシステムに書き込まれるという問題も多く、これらは深刻な社会問題となっている。
尚、コンピュータシステムや、悪意あるネットワーク接続者による行為については、非特許文献1〜3にそれぞれ記載されている。
「ハッカー・プログラミング大全」,UNYUN著 「OPERATING SYSTEM Internals andDesign」,William Stalings,Ph.D.著 「インテル・アーキテクイチャ最適化マニュアル」,米インテル社
前記したような悪意あるネットワーク接続者による行為は、コンピュータシステムに存在するセキュリティホールを利用して行われる。このセキュリティホールとは、インターネットを通じた不正アクセス及び、コンピュータウイルスによりコンピュータシステムを破壊改造するための警備の穴である。
現在では、世界中のコンピュータシステムにおいて、多数のセキュリティホールが存在し、前記したように、これを利用した不正アクセス、コンピュータウイルスが社会問題となっている。
現在では、世界中のコンピュータシステムにおいて、多数のセキュリティホールが存在し、前記したように、これを利用した不正アクセス、コンピュータウイルスが社会問題となっている。
セキュリティホールの発生原因の一つは、バッファオーバーラン現象にあると言われている。このバッファオーバーラン現象について説明すると、例えば、ある電子メールの送付ソフトにおいて、送付先の入力可能なメールアドレスの最大文字数が50文字とする。
ここで、送付先のメールアドレスに、1000文字の長さのメールアドレスを指定すると、(想定していない)50文字を超えた950文字のデータがメモリ領域を超えて書き込まれ、これによりコンピュータの制御が破綻を来たす。このような現象がバッファオーバーラン現象と呼ばれている。
ここで、送付先のメールアドレスに、1000文字の長さのメールアドレスを指定すると、(想定していない)50文字を超えた950文字のデータがメモリ領域を超えて書き込まれ、これによりコンピュータの制御が破綻を来たす。このような現象がバッファオーバーラン現象と呼ばれている。
更に、バッファオーバーラン現象について、詳細に説明する。図1は、一般的なコンピュータにおいて、アプリケーションプログラム(以下、単にプログラムとも呼ぶ)を実行する際に使用するメモリ装置(単にメモリとも呼ぶ)の構成を模式的に示した図である。
図1のメモリ構成のうち、プログラムは領域A11に格納される。そして、プログラムのデータ処理に使用する領域として、領域A12、A13、A14を確保する。このうち、領域A12は、プログラム全体で使用するデータの読み書きに使用する。領域A13は、プログラムを実行する上で、適時データ領域を確保したいときに使用し、プログラムの実行中にメモリ中の領域が伸縮する。また、領域A14は、スタックメモリと呼称する特殊なメモリ領域であって、プログラムを構成するサブルーチンと呼ばれる小さい構成のプログラムの実行管理と、サブルーチンが一時的に使用するデータの管理を行うための領域である。
尚、サブルーチンとは当文書において次のように定義する。
サブルーチンとはスタックメモリに事前にサブルーチンを実行し終わったら実行すべき次のプログラムの開始アドレスを格納して実行するプログラムと規定するものとする。サブルーチンコールとはこのサブルーチンを呼び出すこと、つまり実行する事を示すものとする。
尚、サブルーチンとは当文書において次のように定義する。
サブルーチンとはスタックメモリに事前にサブルーチンを実行し終わったら実行すべき次のプログラムの開始アドレスを格納して実行するプログラムと規定するものとする。サブルーチンコールとはこのサブルーチンを呼び出すこと、つまり実行する事を示すものとする。
図2に、サンプルプログラムと共に、領域A14のスタックメモリの働きを模式的に示す。尚、サンプルプログラムはC言語により記述されている。
前記サンプルプログラムは、プログラム12行目でtestという名称のサブルーチン(子プログラム)を呼び出し、それを実行する構成となっている。また、そのサブルーチン実行時に、引数と呼ばれるデータを4つ渡している。即ち、その引数は、‘T’、‘E’、‘S’、‘T’の4つである。これらのデータは、スタックメモリ上の領域A21、A22、A23、A24に書き込まれる。
前記サンプルプログラムは、プログラム12行目でtestという名称のサブルーチン(子プログラム)を呼び出し、それを実行する構成となっている。また、そのサブルーチン実行時に、引数と呼ばれるデータを4つ渡している。即ち、その引数は、‘T’、‘E’、‘S’、‘T’の4つである。これらのデータは、スタックメモリ上の領域A21、A22、A23、A24に書き込まれる。
このサンプルプログラム実行時において、前記引数がスタックメモリに書き込まれた後、サブルーチン‘test’に制御が移行する。また、このとき、サブルーチン実行終了後にプログラム13行目に制御が戻るように、スタックメモリの領域A25に、プログラム13行目を示すアドレスデータを記憶する。
そして、プログラム14行目から始まるサブルーチン‘test’の実行においては、先ず、プログラム14行目、16行目において初期設定が行われる。次いで、17行目において、変数sに‘A’という値が代入される。この値は、スタックメモリの領域A26に書き込まれる。
そして、プログラム18行目においては、故意に、変数sの存在するメモリ領域をアドレス指定し、そこからゼロ(0)を100文字、メモリに書き込むよう指示している。すなわち、これが実行されると、領域A21〜A26を含め、100文字分の全ての内容が、ゼロに上書きされ、その結果プログラムの流れが破壊される。
すなわち、プログラム19行目において、本来ならば、領域A25に格納されている、呼び出し元の13行目のアドレスに戻り、13行目からの処理に続くのであるが、実際には、領域A25にはゼロが書き込まれており、プログラムはゼロ番地から実行しようとする。その結果、コンピュータに障害が生じる。
以上、説明したように、本来設定されたメモリの領域を超えて不正に書き込まれる現象をバッファオーバーランと呼んでいる。尚、このような脆弱性が現在のCPU(中央処理装置)には存在しており、コンピュータウイルスや不正アクセスは、前記した現象を利用してコンピュータシステムに不正を働く。また、実際のコンピュータウイルスや不正アクセスにあっては、メモリへの上書きにおいて、自身に都合のよいメモリアドレスを書き込み、ここにプログラムの制御が移行するように仕向け、不正を働くようにしている。
不正アクセス利用者は、前記バッファオーバーランを悪用し、スタックメモリ上に自分の不正プログラムを書き込み、これを実行させることによりシステムの制御権を乗っ取る。すなわち、スタックメモリ上の不正プログラムが、不正行為を行う目的でOS(オペレーティングシステム)に対してAPI(アプリケーションプログラムインタフェイス)またはシステムコールを要求し、実行する。
本発明は、前記したような事情のもとになされたものであり、セキュリティホールの発生原因と言われるバッファオーバーラン現象を利用したコンピュータウイルスや不正アクセスを抑制することのできるオペレーティングシステム、及びそれを記録した記録媒体を提供することを目的とする。
前記した課題を解決するため、本発明に係るオペレーティングシステムは、API(アプリケーションプログラムインタフェイス)またはシステムコールをプログラムに提供するオペレーティングシステムにおいて、プログラムから要求されたAPIまたはシステムコールの実行前に、メモリ装置上における前記プログラムの格納アドレスを読み取るアドレス取得手段を備え、APIを要求したプログラムを1次プログラムとし、1次プログラムがサブルーチンである場合、1次プログラムの呼び出し元となる2次〜n次(nは2以上の整数)プログラムまでが、順に呼び出し階層を形成していると定義すると、前記アドレス取得手段は、1次プログラムの格納アドレスと、2次〜n次プログラムまでの格納アドレスをそれぞれ取得することに特徴を有する。
また、前記アドレス取得手段が取得したアドレスが、メモリ装置上の適正な位置を示しているか否かを、比較基準となるアドレスと大小比較することにより判定するアドレス比較判定手段と、メモリ装置上における所定のアドレスを前記比較基準アドレスとして検出する基準アドレス検出手段とを備えることに特徴を有する。
このような構成によれば、プログラムから要求されたAPIを実行する前に、メモリ装置上におけるプログラムの格納アドレスを取得し、そのアドレスが適正な位置を示しているか否かを比較判定することにより、プログラムが適正か不正かを判断することができる。
その結果、APIを要求したプログラムを適正なものと判断した場合は、APIを実行し、プログラムを不正なものと判断した場合は、プログラムを中断させることができる。したがって、本発明に係るオペレーティングシステムによれば、バッファオーバーラン現象を利用した不正アクセスが発生した場合には、それを抑制し、コンピュータシステムを保護することができる。
その結果、APIを要求したプログラムを適正なものと判断した場合は、APIを実行し、プログラムを不正なものと判断した場合は、プログラムを中断させることができる。したがって、本発明に係るオペレーティングシステムによれば、バッファオーバーラン現象を利用した不正アクセスが発生した場合には、それを抑制し、コンピュータシステムを保護することができる。
本発明によれば、セキュリティホールの発生原因と言われるバッファオーバーラン現象を利用したコンピュータウイルスや不正アクセスを抑制することのできるオペレーティングシステム、及びそれを記録した記録媒体を提供することができる。
以下、本発明に係る実施の形態について説明する。本発明に係るオペレーティングシステム(以下、OSと呼ぶ)は、例えば、パーソナルコンピュータシステム等に代表されるような、CPU、記憶装置等を備えたハードウエアにおいて好適に機能させることができる。
前記CPUとしては、スタックレジスタ(スタックメモリ専用レジスタ)を備えた全てのCPUに適用することができるが、以下の説明においては、IA32(Intel社の32ビットマイクロプロセッサ)を例に説明する。
図3に、IA32が有するレジスタ・セット200の概略構成図を示す。以下の説明におけるスタックメモリは、図3中のレジスタ装置R11(32ビット表現でESPのレジスタ)により管理され、レジスタ装置R12(32ビット表現でEBPのレジスタ)により操作される。
図3に、IA32が有するレジスタ・セット200の概略構成図を示す。以下の説明におけるスタックメモリは、図3中のレジスタ装置R11(32ビット表現でESPのレジスタ)により管理され、レジスタ装置R12(32ビット表現でEBPのレジスタ)により操作される。
尚、図3中、32ビット表現でEIPはプログラムカウンタ(CPUがこれから実行したいプログラムのメモリのアドレスを示すもの)であり、EAX、EBX、ECX、EDX、ESI、EDI、EBPの各レジスタは、汎用レジスタである。
図4は、本発明に係るOSの概略構成を示している。尚、一般にOSは、アプリケーションプログラムを代表とするプログラムに対して、API(アプリケーションプログラムインタフェイス)を提供する。APIとは、データファイルの読み書きや、マウス等の周辺装置を制御するための機能を提供するものである。すなわち、アプリケーションプログラムは、OSが提供するAPIを実行することによって、ファイルの読み書き等、OSが提供する様々な機能を利用することができる。また、APIは、OSによっては、システムコールとも呼ばれる。
図4に示すOS100は、周辺装置20を制御するAPI等を提供するOS本体1と、プログラム(メインルーチンまたはサブルーチン)10からのAPI要求窓口となるAPI入り口2と、記憶装置20に記録するデータの管理を行うファイル管理システム3とを備える。
以上の構成は、一般的なOS構成と同一であるが、OS100においては、さらにOS本体1とAPI入り口2との間にアドレス比較判定手段4を備える。さらには、アドレス比較判定手段4に対しプログラムの格納アドレスを提供するアドレス取得手段5と、アドレス比較判定手段4に対し比較の基準とするアドレスを提供する基準アドレス検出手段6とを備える。
以上の構成は、一般的なOS構成と同一であるが、OS100においては、さらにOS本体1とAPI入り口2との間にアドレス比較判定手段4を備える。さらには、アドレス比較判定手段4に対しプログラムの格納アドレスを提供するアドレス取得手段5と、アドレス比較判定手段4に対し比較の基準とするアドレスを提供する基準アドレス検出手段6とを備える。
API入り口2は、プログラムの実行の際に発生するAPI要求の入り口であって、OS100は、この部分で受け付けを行う。一般的なOSと同様に、OS100が提供するAPIには多数の種類が存在するが、プログラム10(メインルーチンまたはサブルーチン)からAPI実行の要求が発生すると、API入り口2で一括して受け付けし、要求のあったAPIに応じた処理に制御を渡す。
アドレス取得手段5は、APIを呼び出したプログラム(メインルーチンまたはサブルーチン)のメモリ領域上の格納アドレスを取得する機能を有している。
逐次処理型のコンピュータは、すべてのプログラムの実行をメモリのアドレスにより指定する方式をとる。すなわち、APIを要求するサブルーチンのプログラムを1次プログラムとし、1次プログラムの呼び出し元を2次プログラムとし、2次プログラムの呼び出し元を3次プログラムとし、以下、n次(この場合、nは4以上の整数)プログラムまでを定義すると、(n−1)次プログラムは、APIを実行後に復帰(リターン)して実行するn次プログラムのアドレスをメモリに保存している。アドレス取得手段5は、このアドレスをメモリ装置から読み取る働きをする。
逐次処理型のコンピュータは、すべてのプログラムの実行をメモリのアドレスにより指定する方式をとる。すなわち、APIを要求するサブルーチンのプログラムを1次プログラムとし、1次プログラムの呼び出し元を2次プログラムとし、2次プログラムの呼び出し元を3次プログラムとし、以下、n次(この場合、nは4以上の整数)プログラムまでを定義すると、(n−1)次プログラムは、APIを実行後に復帰(リターン)して実行するn次プログラムのアドレスをメモリに保存している。アドレス取得手段5は、このアドレスをメモリ装置から読み取る働きをする。
また、基準アドレス検出手段6は、OS上において、プログラムの格納が許されている領域と許されていない領域とを判定するためのアドレスを比較基準アドレスとして取得する。ここで、OS100を搭載したコンピュータシステムにおいて、プログラム10を実行する際に使用するメモリ構成の例を図5に示す。
前記比較基準アドレスを取得する具体的な一例としては、図5において、プログラムを格納する領域を示す開始アドレスA40及び終了アドレスA41を取得する方法がある。この方法が論理的に完全な実施例である。
前記比較基準アドレスを取得する具体的な一例としては、図5において、プログラムを格納する領域を示す開始アドレスA40及び終了アドレスA41を取得する方法がある。この方法が論理的に完全な実施例である。
しかしながら、実際のOSにおいてプログラムを格納する領域は、複数のメモリ領域に分断して格納する場合が多い。その場合、プログラムの格納領域ごとに、その開始アドレスと終了アドレスとを調べる必要があり煩雑である。
なお、基準アドレス検出手段6が比較基準アドレスとして取得するアドレスは、適正なプログラム格納領域の開始アドレス及び終了アドレスに限定されるものではない。すなわち、基準アドレス検出手段6は、メモリ領域における所望のアドレスを比較基準アドレスとして設定することができる。
そこで本実施の形態においては、本発明の理解を容易にするため、比較基準アドレスとして、スタック領域の上限及び下限(開始アドレス及び終了アドレス)を取得する方法を簡易例として示す。これは、バッファオーバーランを利用して、不正アクセスを行うプログラムは、その性質上、大多数がプログラム本体をスタック領域に保存するためである。
そこで本実施の形態においては、本発明の理解を容易にするため、比較基準アドレスとして、スタック領域の上限及び下限(開始アドレス及び終了アドレス)を取得する方法を簡易例として示す。これは、バッファオーバーランを利用して、不正アクセスを行うプログラムは、その性質上、大多数がプログラム本体をスタック領域に保存するためである。
図5のメモリ構成において、OS100がプログラム10に割り振るメモリ領域のうち、スタック領域の上限(0番地方向/終了アドレス)は符号A37で示すアドレスであり、下限(開始アドレス)は符号A38に示すアドレスである。
すなわち、基準アドレス検出手段6は、符号A37、A38に示したアドレスを取得する。
すなわち、基準アドレス検出手段6は、符号A37、A38に示したアドレスを取得する。
また、図4に示すアドレス比較判定手段4は、アドレス取得手段5が取得したプログラム格納アドレスと、基準アドレス取得手段6が取得した比較基準アドレスとを比較し、APIを要求するプログラム(メインルーチンまたはサブルーチン)が不正プログラムであるか否かを判断する。具体的には、アドレス取得手段5が取得した、プログラム格納領域のアドレスが、スタック領域の上限A37と下限A38の間にあるか否かを判断する。
すなわち、バッファオーバーランを利用して不正プログラムがコンピュータに寄生した場合、通常、その不正プログラムの格納領域は、図5のメモリ構成ではスタック領域中の使用中領域A34となる。したがって、アドレス取得手段5が取得した、プログラム格納領域のアドレスが、スタック領域の上限A37と下限A38の間である場合には、そのプログラムが不正プログラムであると判定される。
その場合、アドレス比較判定手段4は、不正プログラムが寄生している旨をOS本体1に通知する。OS本体1は、APIの要求を中断し、プログラムを強制終了させるとともに、警告を電子メール等の手段によりシステム管理者に通知する。
尚、アドレス比較判定手段4による判定の結果、APIを要求するプログラムが正常なものであると判断された場合には、要求されたAPIが実行される。
尚、アドレス比較判定手段4による判定の結果、APIを要求するプログラムが正常なものであると判断された場合には、要求されたAPIが実行される。
続いて、プログラムからAPIの要求があった場合のOS100の動作について、さらに図6のフロー図に基づいて説明する。
プログラム10(メインルーチンまたはサブルーチン)からAPIの要求が発生すると、アドレス取得手段5はAPIを要求したプログラムのメモリ上の格納アドレスを取得する(図6のステップS1)。
プログラム10(メインルーチンまたはサブルーチン)からAPIの要求が発生すると、アドレス取得手段5はAPIを要求したプログラムのメモリ上の格納アドレスを取得する(図6のステップS1)。
APIを要求したプログラムを1次プログラムとすれば、取得するアドレスは、1次プログラム中のAPIを要求した部分の次位置を示すアドレスである。すなわち、APIを実行した後に復帰(リターン)し、1次プログラムを継続する位置を示すアドレスである。具体的には、例えば、図7のスタックメモリの構成例における領域A51からアドレスを取得する。
また、基準アドレス検出手段6は、OS100がプログラム10に割り振ったメモリ領域を調べ、プログラムが存在してはならない領域のアドレスを比較基準アドレスとして取得する(ステップS2)。
前記したように、バッファオーバーランが発生したときに、不正プログラムが寄生するのはスタック領域である。このため、基準アドレス検出手段6は、スタック領域の上限(終了アドレス)A37と下限(開始アドレス)A38を取得し、その間の領域を、プログラムの存在してはならない領域として設定する。
前記したように、バッファオーバーランが発生したときに、不正プログラムが寄生するのはスタック領域である。このため、基準アドレス検出手段6は、スタック領域の上限(終了アドレス)A37と下限(開始アドレス)A38を取得し、その間の領域を、プログラムの存在してはならない領域として設定する。
次いで、アドレス比較判定手段4において、アドレス取得手段5が取得したプログラム格納アドレスと、基準アドレス検出手段6が検出した比較基準アドレスとが比較される(ステップS3)。すなわち、アドレス取得手段5が取得したプログラム格納アドレスが、不正なアドレスであるか否かが判断される。
具体的には、アドレス取得手段5が取得したプログラム格納アドレスが、基準アドレス検出手段6が検出したアドレス領域内である場合には、プログラム10は不正であると判断され、領域外である場合にはプログラム10は適正なものであると判断される。また、前提となるAPIの要求がOS本体である場合もあるため、呼び出し元のアドレスが、OSの管理領域内であるか否かも判断される。OSの管理領域内である場合は、適正な処理が行なわれていると判断する。
ステップS3において、APIを要求したプログラムが不正であると判断されると、システム管理者にその旨を電子メールにて送信し、APIの要求を中断し、プログラムを強制終了させる(ステップS7)。
一方、ステップS3において、APIを要求したプログラムが正常であると判断されると、さらに、アドレス取得手段5が、APIを要求したプログラムの親プログラムの格納アドレス(呼び出し元のアドレスと呼ぶ)を取得し、基準アドレス検出手段6が、プログラム領域A31の開始アドレス及び終了アドレスを検出して比較基準アドレスに設定する。そして、アドレス比較判定手段4は、APIを要求したプログラムの親プログラムの格納アドレスがプログラム領域A31にあるか否かを判断する(ステップS4)。
尚、この処理は、不正プログラムが、共有ライブラリのプログラムを経由してAPIを実行する可能性があるために行なわれる。
尚、この処理は、不正プログラムが、共有ライブラリのプログラムを経由してAPIを実行する可能性があるために行なわれる。
ステップS4において、呼び出し元アドレスが、プログラム領域A31の外である場合、共有ライブラリのアドレスであると見なし、呼び出し元のさらに親プログラムのアドレス(その親プログラムへのリターンアドレス)を取得し(ステップS5)、ステップS3の処理に戻る。
このように、ステップS3〜S5のループ処理においては、APIを要求したプログラムを1次プログラムとすれば、その呼び出し元(親プログラム)となる2次プログラムをはじめ、順に呼び出し階層を形成するn次プログラムまでの格納アドレスが適正か否か判定される。
このように、ステップS3〜S5のループ処理においては、APIを要求したプログラムを1次プログラムとすれば、その呼び出し元(親プログラム)となる2次プログラムをはじめ、順に呼び出し階層を形成するn次プログラムまでの格納アドレスが適正か否か判定される。
ここで、ステップS5の処理の具体例を示す。例えば、APIの実行元プログラムを1次プログラム、1次プログラムの呼び出し元を2次プログラム、2次プログラムの呼び出し元を3次プログラム、さらに3次プログラムの呼び出し元を4次プログラムとする。
図7に示すスタックメモリの、領域A54、A57、A510には、それぞれ2次〜4次プログラムへのリターンアドレス、すなわち、プログラム格納アドレスが格納されている。
よって、アドレス取得手段5は、領域A54、A57、A510の中から、所望のプログラムの格納アドレスをループ処理毎に順に取得する。
図7に示すスタックメモリの、領域A54、A57、A510には、それぞれ2次〜4次プログラムへのリターンアドレス、すなわち、プログラム格納アドレスが格納されている。
よって、アドレス取得手段5は、領域A54、A57、A510の中から、所望のプログラムの格納アドレスをループ処理毎に順に取得する。
ここで、それぞれのリターンアドレスを取得する方法について、図7及び図8に基づいて詳細に説明する。
図8は、IA32におけるサブルーチンプログラムの基本構成を示す図である。先ず、図8について説明する。図8のサブルーチンプログラムP1の1行目及び2行目は、サブルーチンの最初に固定的に存在し、4行目及び5行目は、サブルーチンの最後に固定的に存在する。
1行目は、EBPレジスタの内容(親プログラムのデータ開始領域を示す値)をスタックに格納する命令である。図7中の領域A53、A56、A59に示される親プログラムのデータ開始領域の値は、この手順により書き込まれている。
図8は、IA32におけるサブルーチンプログラムの基本構成を示す図である。先ず、図8について説明する。図8のサブルーチンプログラムP1の1行目及び2行目は、サブルーチンの最初に固定的に存在し、4行目及び5行目は、サブルーチンの最後に固定的に存在する。
1行目は、EBPレジスタの内容(親プログラムのデータ開始領域を示す値)をスタックに格納する命令である。図7中の領域A53、A56、A59に示される親プログラムのデータ開始領域の値は、この手順により書き込まれている。
2行目は、EBPレジスタへ、ESPレジスタの内容を複写する命令である。ESPレジスタは、常に、スタック領域における未使用のゼロ側最上位を示す。この命令以後は、そのプログラムの作業用データ領域の参照に、EBPレジスタを使用する。プログラム1〜3に対応する領域A52、A55、A58は、それぞれのプログラム実行時におけるEBPレジスタの内容として、そのプログラムの作業用データ領域開始位置を示している。
3行目は、サブルーチン本体である。図8においては、3行目のみに示すが、実際は複数行で示される。
4行目は、サブルーチンの終了を行う手順である。IA32固有のCPU命令であるleaveコマンドは、プログラム1〜3のそれぞれにおいて、EBPレジスタの値をESPレジスタに複写し、スタックメモリから領域A53、A56、A59の値をEBPレジスタへ読み取る。ESPレジスタの値は、減算して、領域A53、A56、A59を開放する。
4行目は、サブルーチンの終了を行う手順である。IA32固有のCPU命令であるleaveコマンドは、プログラム1〜3のそれぞれにおいて、EBPレジスタの値をESPレジスタに複写し、スタックメモリから領域A53、A56、A59の値をEBPレジスタへ読み取る。ESPレジスタの値は、減算して、領域A53、A56、A59を開放する。
5行目は、親プログラムに戻る命令である。これを実行すると、サブルーチンプログラムは、領域A51、A54、A57、A510にそれぞれ示される、対応するリターンアドレスに制御を移す。同時にESPレジスタの内容を減算して領域を開放する。
尚、ret命令の代わりにiret命令を使用する場合がある。すなわち、サブルーチンの呼び出しは、IA32においては、call命令とint命令が存在する。call命令に対しては、ret命令で復帰し、int命令に対してはiret命令にて復帰する約束となっている。
尚、ret命令の代わりにiret命令を使用する場合がある。すなわち、サブルーチンの呼び出しは、IA32においては、call命令とint命令が存在する。call命令に対しては、ret命令で復帰し、int命令に対してはiret命令にて復帰する約束となっている。
図8のサブルーチンプログラムP1の基本構成を前提として、各プログラムのリターンアドレスは、次のようにして取得することができる。
図7において、APIの実行元プログラム1へのリターンアドレスはスタック領域のゼロ側の最上位に存在する。その所在位置のESPレジスタの内容により機械的に取得することができる。すなわち、ESPレジスタは常に、未使用のゼロ側最上位を示すので、領域A51はESPレジスタの示す値の領域と隣接する領域として取得することができる。
図7において、APIの実行元プログラム1へのリターンアドレスはスタック領域のゼロ側の最上位に存在する。その所在位置のESPレジスタの内容により機械的に取得することができる。すなわち、ESPレジスタは常に、未使用のゼロ側最上位を示すので、領域A51はESPレジスタの示す値の領域と隣接する領域として取得することができる。
APIは通常、前記したサブルーチン呼び出し命令のうち、int命令を使用する。領域A51に示される値はint命令がスタック領域に書き込んだ、プログラム1へのリターンアドレスである。領域A51にはint命令の仕様に従い、APIの実行元プログラムに関するリターン情報と各種戻り情報が書き込まれている。すなわち、ここから、リターンアドレスのみを機械的に取得することができる。
また、前記したように、図8の1行目においてプログラム1〜3のそれぞれは、呼び出し元のプログラム(親プログラム)のEBPレジスタの値(親プログラムのデータ開始領域を示す値)を領域A53、A56、A59に格納している。領域A53は、領域A56と隣接するゼロ側の次の領域を示す。領域A56は、領域A59と隣接するゼロ側の次の領域を示す。したがって、プログラム1〜3のそれぞれにおいては、その親プログラムのデータ領域を芋づる式に取得することができる。
そして、プログラム2〜4へのリターンアドレスは、領域A53、A56、A59、すなわち親プログラムのデータ領域開始を示すアドレスの上位アドレス側に常に隣接している。これにより、プログラム2〜4のリターンアドレスは、親プログラムのデータ領域開始を示すアドレスに基づいて機械的に算出することができる。
一方、図6のステップS4において、呼び出し元アドレスが、プログラム領域A31内である場合、要求されたAPIを実行し(ステップS6)、制御はAPIの実行を要求した呼び出し元にリターンする。
尚、ステップS4において、呼び出し元アドレスと、共有ライブラリ領域A39のアドレスとを直接比較しないのは、共有ライブラリの格納領域A39が動的に変化するため、そのアドレスの取得が困難であるためである。
尚、ステップS4において、呼び出し元アドレスと、共有ライブラリ領域A39のアドレスとを直接比較しないのは、共有ライブラリの格納領域A39が動的に変化するため、そのアドレスの取得が困難であるためである。
以上のようにして、OS100における一連の動作が行なわれる。尚、APIを直接呼び出したプログラムの格納アドレスのみを判定する場合には、図6のフロー図は、図9に示すフロー図のように、図6のステップS4、S5が省略され、処理フローは簡素化される。
以上、説明した実施の形態によれば、プログラムから要求されたAPIを実行する前に、メモリ装置上におけるプログラムの格納アドレスを取得し、そのアドレスが適正な位置を示しているか否かを比較判定することにより、プログラムが適正か不正かを判断することができる。
その結果、APIを要求したプログラムを適正なものと判断した場合は、APIを実行し、プログラムを不正なものと判断した場合は、プログラムを中断させることができる。したがって、本発明に係るオペレーティングシステムによれば、バッファオーバーラン現象を利用した不正アクセスが発生した場合には、それを抑制し、コンピュータシステムを保護することができる。
その結果、APIを要求したプログラムを適正なものと判断した場合は、APIを実行し、プログラムを不正なものと判断した場合は、プログラムを中断させることができる。したがって、本発明に係るオペレーティングシステムによれば、バッファオーバーラン現象を利用した不正アクセスが発生した場合には、それを抑制し、コンピュータシステムを保護することができる。
Claims (8)
- API(アプリケーションプログラムインタフェイス)またはシステムコールをプログラムに提供するオペレーティングシステムにおいて、
プログラムから要求されたAPIまたはシステムコールの実行前に、メモリ装置上における前記プログラムの格納アドレスを読み取るアドレス取得手段を備え、
APIを要求したプログラムを1次プログラムとし、1次プログラムがサブルーチンである場合、1次プログラムの呼び出し元となる2次〜n次(nは2以上の整数)プログラムまでが、順に呼び出し階層を形成していると定義すると、
前記アドレス取得手段は、1次プログラムの格納アドレスと、2次〜n次プログラムまでの格納アドレスをそれぞれ取得することを特徴とするオペレーティングシステム。 - 前記アドレス取得手段が取得したアドレスが、メモリ装置上の適正な位置を示しているか否かを、比較基準となるアドレスと大小比較することにより判定するアドレス比較判定手段と、
メモリ装置上における所定のアドレスを前記比較基準アドレスとして検出する基準アドレス検出手段とを備えることを特徴とする請求項1に記載されたオペレーティングシステム。 - 前記基準アドレス検出手段は、プログラムに割り振られたメモリ領域を構成する各領域のアドレスを検出し、各領域のアドレスを、それぞれ前記比較基準アドレスとして設定する機能を有することを特徴とする請求項2に記載されたオペレーティングシステム。
- 前記基準アドレス検出手段は、プログラムに割り振られたメモリ領域のうち、プログラム格納用の開始アドレスおよび終了アドレスを検出し、該開始アドレスおよび終了アドレスを前記比較基準アドレスとして設定することを特徴とする請求項2に記載されたオペレーティングシステム。
- 前記基準アドレス検出手段は、プログラムに割り振られたメモリ領域のうち、スタックメモリ用の開始アドレスおよび終了アドレスを取得し、該開始アドレスおよび終了アドレスを前記比較基準アドレスとして設定することを特徴とする請求項2に記載されたオペレーティングシステム。
- 前記アドレス比較判定手段の判定結果により、プログラムが要求するAPIまたはシステムコールを実行するか否かが決定されることを特徴とする請求項2乃至請求項5のいずれかに記載されたオペレーティングシステム。
- 前記アドレス比較判定手段の判定結果により、プログラムが要求するAPIまたはシステムコールの実行の中止を決定した際、
APIまたはシステムコールの実行を中止すると共に、警報としての電子メールをシステム管理者に送信することを特徴とする請求項6に記載されたオペレーティングシステム。 - 請求項1乃至請求項7のいずれかに記載されたオペレーティングシステムを記録したコンピュータ読み取り可能な記録媒体。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003326982 | 2003-09-18 | ||
JP2003326982 | 2003-09-18 | ||
PCT/JP2004/013643 WO2005029328A1 (ja) | 2003-09-18 | 2004-09-17 | オペレーティングシステム、及びそれを記録した記録媒体 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPWO2005029328A1 true JPWO2005029328A1 (ja) | 2007-11-15 |
Family
ID=34372852
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2005514058A Pending JPWO2005029328A1 (ja) | 2003-09-18 | 2004-09-17 | オペレーティングシステム、及びそれを記録した記録媒体 |
Country Status (2)
Country | Link |
---|---|
JP (1) | JPWO2005029328A1 (ja) |
WO (1) | WO2005029328A1 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2008114560A1 (ja) * | 2007-02-21 | 2008-09-25 | Nec Corporation | コンピュータ、動作ルール適用方法、オペレーティングシステム |
KR101244731B1 (ko) * | 2012-09-11 | 2013-03-18 | 주식회사 안랩 | 디버그 이벤트를 이용한 악성 쉘 코드 탐지 장치 및 방법 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH03273346A (ja) * | 1990-03-22 | 1991-12-04 | Nec Corp | シンボリックデバッガによる動的呼出し関係解析方式 |
JP2003515219A (ja) * | 1999-11-14 | 2003-04-22 | クリックネット ソフトウエア,インク. | アプリケーションプログラムインターフェースを阻害する方法及びシステム |
JP2004126854A (ja) * | 2002-10-01 | 2004-04-22 | Mitsubishi Electric Corp | 攻撃対策装置 |
-
2004
- 2004-09-17 JP JP2005514058A patent/JPWO2005029328A1/ja active Pending
- 2004-09-17 WO PCT/JP2004/013643 patent/WO2005029328A1/ja active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2005029328A1 (ja) | 2005-03-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6185487B2 (ja) | ドメイン間で切り替わる際のセキュアなデータの非セキュアなアクセスから隔離された状態での維持 | |
JP4759059B2 (ja) | メモリページをプログラムに対応付けるページカラーリング | |
JP6370098B2 (ja) | 情報処理装置、情報処理監視方法、プログラム、及び記録媒体 | |
JP2018041438A (ja) | ファイル中の悪意のあるコードの検出システム及び方法 | |
US10545851B2 (en) | Breakpoint insertion into kernel pages | |
US20050240701A1 (en) | Interrupt control apparatus | |
JP5382450B2 (ja) | アクセス制御装置、その方法及び情報記録媒体 | |
JPH0619798A (ja) | セレクタの値のロードを回避する方法とシステム | |
US5873124A (en) | Virtual memory scratch pages | |
JP7432586B2 (ja) | スタック・ポインタを検証すること | |
CN112818327A (zh) | 基于TrustZone的用户级代码和数据安全可信保护方法及装置 | |
JP5131563B2 (ja) | コンピュータ、動作ルール適用方法、オペレーティングシステム | |
TW201923568A (zh) | 實現驅動的系統及方法 | |
TW202122995A (zh) | 用於處理異常的裝置及方法 | |
US7484239B1 (en) | Detecting heap and stack execution in the operating system using regions | |
JP5392263B2 (ja) | 情報処理装置及びそのメモリ保護方法 | |
JP2015166952A (ja) | 情報処理装置、情報処理監視方法、プログラム、及び記録媒体 | |
JPWO2005029328A1 (ja) | オペレーティングシステム、及びそれを記録した記録媒体 | |
JP4627266B2 (ja) | 未知のマルウェアによる情報漏洩防止システム | |
JP4516693B2 (ja) | コンピュータ、アドレス有効性照合プログラムを記録した記録媒体、及びアドレス有効性照合方法 | |
JP6317646B2 (ja) | 情報処理装置、不正プログラム実行防止方法、プログラム及び記録媒体 | |
KR100985073B1 (ko) | 네트워크 공유폴더 접근 제어 장치 및 방법 | |
Wen et al. | Towards thwarting data leakage with memory page access interception | |
JP6090057B2 (ja) | 状態情報記録装置及びプログラム | |
JP5081280B2 (ja) | 可搬記憶媒体 |