<前の日記(2004年10月02日) 次の日記(2004年10月07日)> 最新 編集

高木浩光@自宅の日記

目次 はじめに 連絡先:blog@takagi-hiromitsu.jp
訪問者数 本日: 1806   昨日: 2734

2004年10月04日

不正アクセス禁止法 数理的理解の試み

7月15日の日記では、不正アクセス禁止法の立法上の不備として一部法学者が主張する、「『電子計算機の利用』とは有体物としての電子計算機の利用を指し、個々の情報処理を指すと解釈することはできない」という考え方があることを確認し、続く7月18日の日記では、法案を作成した警察庁関係者によって書かれた書籍「逐条不正アクセス行為禁止等に関する法律」から立法者の意図を推定した上で、「制限されている」の定義が不明だということを書いた。

さて、推定される立法者の意図に沿ってこの法律を読むとき、(差別的表現としての)「理系的」思考で3条2項の2号を読むと、「制限されている」の定義とは別に、何か変だと直感するはずである。変だと感じるのは法律の読み方を知らないせいで、法律とはそういうものなんだろうと郷に従い、考えるのを避けてきたが、どうもそういうことではないらしい。

変だと感じた原因を突き詰めていくと、「アクセス制御機能」が複数ある場合についての規定の曖昧さにあることがわかる。

一般に「理系的」思考では、どんなものであれそれが複数あるうちの一つのことを言っているのか、全部のことを言っているのか、一つしか存在しないそれのことを言っているのかを常に意識し、複数ある場合には帰納的理解を試みようとするものだが、この法律には、2つ以上のアクセス制御機能が存在する場合についての直接的な記述がない。

第3条に「アクセス制御機能を有する特定電子計算機に電気通信回線を通じて」という文があることから、アクセス制御機能は1個存在するか、または0個存在するのいずれかであると想定しているようにも読める。もちろんそうとは限らないわけだが、実際に、法曹の人たちが、「アクセス制御機能はあったのか?なかったのか?」という点だけに注目してしまう現実がある。

アクセス制御機能が複数存在する可能性は、3条2項1号を理解するうえでは、問題にならない。なぜなら、1号違反行為では、識別符号を入力するのであるから、その入力を受け付けた「アクセス制御機能」が1つ存在し、それだけが構成要件となるのだから、他にも「アクセス制御機能」があるかどうかは関係がない*1

ところが、2号、3号を理解しようとするときには、「当該アクセス制御機能による利用の制限を免れることができる情報」の、「アクセス制御機能による制限」というのが、「すべてのアクセス制御機能によって制限されている」――(A) という意味なのか、「少なくともひとつのアクセス制御機能により制限されている」――(B)という意味なのか、どちらなのかという疑問がわいてくる。

この点を明確にするため、不正アクセス禁止法の内容を数理的に記述することを試みたが、1つの解釈には定まらないためうまく結果を出せなかった。以下では図を用いた直感的な理解の試行により、その曖昧さを明らかにすることを試みる。

まず、「アクセス制御機能」と、それによって「制限された利用」を以下の図で表すことにする。

箱の底辺は、その電子計算機に存在し得るあらゆる「利用」の集合を表し、赤線部分は、アクセス制御機能によって利用の制限が解除されるという条件を満たす部分集合を表している。

次の図は、1つのアクセス制御機能が複数の利用権者についての制御をしている場合を表したものである。

黄色と橙色が異なる2つの利用権者を表し、それぞれが赤色の部分集合と、青色の部分集合の要素である利用を可能にする。

このとき、赤色と青色は共通部分を持ち得る。具体例で考えてみると、このアクセス制御機能がUnixのログイン機能であるならば、「ファイル 『/usr/include/stdio.h』の読み出し」という利用がこれに相当する。ログインしないと利用できないという意味でこのアクセス制御機能により利用が制限された利用であり、かつ、ユーザAでログインしたときでも、ユーザBでログインしたときでも利用の制限が解除される利用である。

赤には含まれるが青には含まれない利用の例としては、ownerがユーザAで、permissionが「rw-------」と設定されたファイル(通常、ユーザAのホームディレクトリに置かれることが多い)の読み出しなどが該当する。

不正アクセス禁止法には、2条3項で、「当該特定利用の制限の全部又は一部を解除するものをいう」という文章が現れるが、「一部」というのは、このように、赤には含まれるが青には含まれない利用が存在するのであるから「一部」となるわけで、1つのアクセス制御機能において複数の利用権者が存在する場合を想定していることがうかがえる。

次に、複数のアクセス制御機能が付加されている場合を考えてみる。

この図は、2つの異なるアクセス制御機能が司るそれぞれの利用権者(黄色と橙色)によって利用の制限が解除される利用を、赤と青で表したものである。一般的には、この図のように、赤と青の共通部分が存在し得るであろう。

ここで、誰でも利用できる利用、つまり「アクセス制御機能により制限されていない利用」がこの図でどのように表せるのかを考えてみる。

誰でも利用できる利用とは、例えば、HTTPサーバで公開されているWebコンテンツの閲覧であったり、SMTPサーバへの接続などである。さらには、loginプロンプトを表示させる処理や、誤ったパスワードを入力してエラーを表示させる処理なども、どのアクセス制御機能によっても制限されていない「利用」であろう。

そうした利用を可能にするには、何らかの「サービス」が電子計算機上で稼働していなくてはならない。Unixでは「daemon」などと呼ばれる。しかし、それに該当する言葉は、不正アクセス禁止法の法文上には全く現れない。そこをどう理解すればよいだろうか。

そもそも、もし、単純に「アクセス制御機能とは利用を制限するものである」と理解するならば、そのアクセス制御機能が存在しないことは、その利用の制限がないのであるから、「可能な利用の範囲はより広くなる」と導いてしまう。それは全くおかしい。何の機能も備えていない電子計算機では利用できる利用は何一つないはずであり、そのことに矛盾してしまう。

結局のところ、不正アクセス禁止法における「アクセス制御機能の付加」とは、利用を制限するだけでなしに、同時にサービスの稼働もさせることを暗に前提としていると考えるしかない。

つまり、以下の図で表すように、1つのアクセス制御機能には必ず1つのサービスも付随しており、まずサービスが稼働することによって、ある範囲の利用集合が(便宜上一時的に)可能になったところへ、アクセス制御機能本体が即座に働くことによって、その利用集合の全部または一部*2が一旦利用を制限され、後に利用権者の識別符号が入力されると「入力された符号が当該利用に係る識別符号であることを確認して当該利用の制限の全部又は一部を解除する」という動作をするのだ――とみなすのが妥当であろう。

逐条解説においては、

オ 「当該利用の制限の全部又は一部を解除する」とは、当該利用をすることができるようにすることである。

明文で規定はしていないが、アクセス制御機能については、識別符号等が入力されない状態では利用が制限されていることが前提となっている。

逐条不正アクセス行為禁止等に関する法律, p.54

と書かれているが、さらに明文で規定されていないこととして、アクセス制御機能が付加されることは、当該アクセス制御機能で制限しようとする利用の全部を一旦利用可能にするサービスを稼働させることを前提としているのである。その上で、識別符号が入力されない状態で、その全部の利用が制限されていることを前提としている。

そのように理解すると、誰でも利用できる利用、つまり「アクセス制御機能により制限されていない利用」は、以下の図で表すのが妥当であるように思える。

つまり、それはアクセス制御機能の特殊なケース(常に1つの利用権者で識別符号の入力なしに利用可能な状態)とみなせる。

これを裏付けるものとして、逐条解説に次の記述がある。

エ 識別符号は、「当該利用権者等を他の利用権者等と区別して識別することができるように」付されるものでなければならない。(略)

利用権者等が一人しかいない場合、すなわちアクセス管理者以外に電子計算機の利用に係る許諾を得て利用をする利用権者をおよそ予定していない場合には、当該利用の際に自分が用いるID・パスワードをアクセス管理者が設定していたとしても当該ID・パスワードはアクセス管理者を他の利用権者と区別して識別することができるように付されているわけではないから、当該ID・パスワードは識別符号に該当しない。

電子計算機の利用の一部(例えばホームページの閲覧)についてはすべてのネットワーク利用者に許諾し、その他の利用全体はアクセス管理者のみがID・パスワードを入力して行うような場合には、利用権者等は複数存在し、符号によりアクセス管理者を他の利用権者と区別して識別することができるから、当該ID・パスワードは識別符号に該当する。

逐条不正アクセス行為禁止等に関する法律, p.40

これによると、「ホームページの閲覧」という誰にでも利用できるようにした利用についても、その利用者を利用権者とみなすという考え方があり得るらしい。まさに、上の図のように、識別符号による利用の制限の解除を予定しないで(利用を制限しないで)サービスだけを提供するアクセス制御機能(の特殊形)と捕らえることができる。

では、上の逐条解説からの引用部分にあるように、アクセス管理者が一人いて、「ホームページの閲覧」というサービスが提供されている状況を図に表すとどうなるだろうか。

まず、以下のように考えてみた。左のアクセス制御機能が管理者のためのもので、右の(擬似)アクセス制御機能がWebサーバを表す。

ここで、Webサーバで公開されるファイルの読み出しという利用は、ネットワーク利用者が右の擬似アクセス制御機能(公開サービス)を通して利用するのみならず、コンテンツ管理者が左のアクセス制御機能にコンテンツ管理者の識別符号を入力して利用することもできる。すなわち、図のように、赤色と青色が重なった部分の利用が存在する*3

この重なった領域をどのように考えるべきだろうか。公開サービスによって利用可能な利用が「アクセス制御機能によって制限されている利用」とは言えないのだとすると、次の図のように修正されるべきであろう。

こちらの図の考え方は、利用について、利用の手段を問わないという前提をおいている。つまり、あるファイルのデータを取得するにあたり、Webサーバ経由でアクセスしているのか、コンテンツ管理者用識別符号を入力してアクセスしているのかに関係なく、同じ「利用」であるとみなしている。そのため、青色部分の利用のすべては、左のアクセス制御機能によって「制限された利用」とはなり得ないことになる。

では、利用の手段を問わずに同じ利用だとみなすことが、この法律の意図したところかどうかというと、3条2項の2号および3号で、「利用の制限を免れることができる情報又は指令を入力して(略)その制限されている利用をし得る状態にさせる行為」という規定があることから、利用の手段を問わずに同じ利用だとみなしているとしか考えられない*4

そのように整理してみると、3番目の図、

はちょっとおかしいということになる。「2つの利用権者に共通の制限された利用」とある部分は、右のアクセス制御機能に識別符号が入力されてある利用権者に利用可能になっているときには、左のアクセス制御機能で利用が制限されていないことになってしまう。

この時点で既にこの法律のほころびが見えてきたような気がするのだが、ひとまずこれはおいておく。

次に、3条2項2号の行為、すなわちセキュリティホールを突いて制限された利用をし得る状態にするという状況を図にしてみる。

このように、例えばバッファオーバーフロー脆弱性を突いてroot権限を得たような場合は、ほとんど全ての利用(青色の部分)がし得る状態になる。

root権限を奪取したが何の利用もしなかった行為であっても、この法律はそれを罰するものであるが、上の図の青色の領域が、アクセス制御機能が制限している利用である赤色の領域に重なっているかどうかが、構成要件の一つとなっている。

セキュリティホールには他にも色々の種類があり、次の図のように、ごく狭い範囲の利用だけが利用し得る状態になるものもある。

もし、青の領域が、赤の領域*5に重なっていない、つまり以下の図のような場合は、構成要件を満たさないことになるはずである。

つまり、この電子計算機にはアクセス制御機能が1つだけ付加されているが、そのアクセス制御機能のどの利用権者の識別符号を入力しても利用可能にならない利用を、セキュリティホールを突いて利用可能にしたとしても、不正アクセス禁止法違反にならないことになってしまう。

これはどうなのか。

不正アクセス禁止法 罪数の矛盾?

ここまで整理したところで、次の図を考えてみる。

このセキュリティホールは、「制限されている利用をし得る状態にさせる」わけであるが、その「制限されている利用」の制限する主体は、法文に「当該アクセス制御機能による利用の制限を免れることができる情報又は指令」とあるように、「当該アクセス制御機能」であるわけだが、それが、図中のAのアクセス制御機能を指すのか、Bのアクセス制御機能を指すのか、という疑問が出てくる。

ここは、AとBが対称であることから、両方が該当するとしか考えられない。

ところで、逐条解説には、第八条の解説の部分で次のように書かれている。

6 罪数

(1) 不正アクセス行為の罪数

不正アクセス罪は、アクセス制御機能に対する社会的信頼の侵害に着目してこれを処罰しようとするものであり、他人の識別符号等を電子計算機に入力してアクセス制御機能により制限されている利用をし得る状態にすることで成立する。 したがって、不正アクセス罪は、アクセス制御機能を単位として成立すると考えるのが相当である。アクセス制御機能の単位は、これを付加したアクセス管理者ごとに判断されるべきものであり、具体的には次の通りであると考えられる。

ア 一のアクセス管理者が電子計算機に付加した一のアクセス制御機能を侵害すれば、一の不正アクセス罪が成立することになる。

ところで、一のアクセス管理者が電子計算機に付加した一のアクセス制御機能が、同一機会に連続して二回以上にわたり侵害されることも考えられるが、その場合にも、不正アクセス行為に該当する行為は複数回行われてはいるものの一のアクセス制御機能が侵害されるにとどまるものであることから、一罪として処断されるべきである。

この場合、不正アクセス行為の手段として入力される識別符号等が同一でなくとも一罪として評価できるものと解する。 例えば、(略)

イ 一の電子計算機に付されたアクセス制御機能であっても、二以上のアクセス管理者が各別に付加したアクセス制御機能であれば、それらが順次侵害されれば、それぞれについて不正アクセス罪が成立することになる。 例えば、一のISPのユーザA、Bが当該ISPのWWWサーバにそれぞれホームページを開設し、Aが会員制のインターネット・ショップを、Bが会員制の有料コンテンツ事業を営むためにそれぞれのホームページの閲覧についてアクセス制御機能を付加した場合には、これらのホームページに各会員の識別符号を盗用して順次アクセスすれば、各別に不正アクセス罪が成立することになる。

また、(略) ウ 同一の者が付加したアクセス制御機能であっても、各別の立場から付加されたものに対して不正アクセス行為が行われた場合には、アクセス管理者としては同一であると評価できないことから、それぞれについて不正アクセス罪が成立する。

例えば、(略)

逐条不正アクセス行為禁止等に関する法律, p.146

このことから、上の図で、AとBの二つのアクセス制御機能があるが、このアクセス制御機能を付加した者(それぞれのアクセス管理者)が同一であれば一罪であり、別々であるなら二罪ということになる。

ここで不可解なことが生ずる。

上の図のケースのように、一つのセキュリティホールを突いて、緑色の領域で示した「利用」を一回だけし得る状態にしたとき、それによって、二つのアクセス制御機能(に対する社会的信頼)を侵害したことになるのである。

具体例で考えてみる。

あるレンタルサーバ屋のホスティングサービスを使ってWebサイトを開設している会社Aがあるとする。会社Aは、レンタルサーバ屋から、

/usr/local/apache/public_html/company_A/
の場所にコンテンツを置くよう指示された。ここに置いたファイルがWebサイトのコンテンツとして公開される。ファイルの設置には、FTPを使ってアップロードするように指示された。

次に、ショッピングカートをCGIとして設置した。その場所は、

/usr/local/apache/cgi-bin/form.cgi
で、これはレンタルサーバ屋が作成して自由に使わせているものだった。このCGIで受け付けたデータは、
/usr/local/apache/public_html/company_A/data/order.csv
に保存するようにし、「http://company_A.com/data/」にアクセスがあったときにはパスワードによるアクセス制限がかかるよう、会社Aの担当者がBasic認証の設定をした。

このとき、このCGIにセキュリティ上の欠陥があって、ある方法で、任意のパス名のファイルを読み出せる状態だったとする。攻撃者がその方法を使って、

/usr/local/apache/public_html/company_A/data/order.csv
を読み出したとする。

さて、この行為は、どのアクセス制御機能(に対する社会的信頼)を侵害したことになるだろうか?

上の図で抽象的に検討した通りであれば、この行為は、レンタルサーバ屋が付加したアクセス制御機能(FTPサーバ)と、会社Aの担当者が付加したアクセス制御機能(Basic認証)の両方を侵害したことになる。

「order.csv」というファイルを読み取ったことから、「直感的に最も近い」位置にある会社Aの付加したアクセス制御機能が侵害された感が強いかもしれないが、この法律はそうした感覚による罪の大きさの違いの存在を予定していない。第3条2項は、実際に利用をしたかを構成要件としておらず、利用をし得る状態にした段階で処罰しようとしている。したがって、「order.csv」というファイルを読んだことは、罪の判断に何ら関係がない。「order.csv」が読めたということは、FTPサーバのアクセス制御機能による制限も回避したことになるし、Basic認証による制限も回避したことにもなる。

よってこの行為は、二罪と評価されるしかないことになる。

次に、この同じレンタルサーバ屋に、別の会社BもAと同様に契約してWebサイトを開設していたとする。会社Bも、

/usr/local/apache/public_html/company_B/data/
にBasic認証をかけている。

このとき、CGIプログラム「form.cgi」が、apacheのowner権限で稼働するものであるため、「form.cgi」のセキュリティ欠陥を突いた任意パス名のファイルの読み出しの行為では、

/usr/local/apache/public_html/company_A/data/order.csv
/usr/local/apache/public_html/company_B/data/order.csv
も、両方とも読み出せるのだとする。

この場合に上と同じ行為が行われると、これは三罪ということになる。たとえ、「company_A/data/order.csv」だけを読んだのだとしても、どのファイルを読んだかは関係がなく、その直前にform.cgiで読み出し可能な任意のパス名のファイルを読み出し可能な状態にさせたわけであって、そこが罪に問われているのだから、「company_B/data/order.csv」の読み出しという利用もし得る状態にさせたわけであるから、会社Bの付加したアクセス制御機能(に対する社会的信頼)をも侵害したことになるはずである。

ということは、そのレンタルサーバ屋の同一の電子計算機内に100の会社が同じようにWebサイトを開設していたとすると、101罪ということになる。

これはいくらなんでもおかしいのではないか?

とすると、どこが間違っているのだろうか。

form.cgiを使って「company_A/data/order.csv」を読み出した行為が、どの範囲の利用をし得る状態にしたかについて、「company_A/data/order.csv」の読み出しという利用だけをし得る状態にしたと評価するべきなのだろうか? それはどのような理由によるものなのか?

攻撃者が突いたセキュリティホールが、apacheのバッファオーバフロー脆弱性だった場合はどうか。シェルを起動し、それ以上は何もしなかったとする。この法律は、それだけで罪に問うものであるから、それによってどの範囲の利用をし得る状態にさせたかが問われる。シェルを乗っ取ったわけであるから、何でもできよう。会社AのBasic認証で保護されている「company_A/data/order.csv」も読めたであろうし、会社BのBasic認証で保護されている「company_B/data/order.csv」も読めたであろう。100社が利用しているサーバならば、101罪と評価しなくてはならないはずである。これとCGIの場合とで、何が違うというのか?

この推論から得られる結果が、常識からかけ離れているように感じられるのは、「company_A/data/order.csv」を読み出した行為者が、他の99社のBasic認証のアクセス制御機能の存在を認識していなかったであろうと推察されるからではないだろうか。

一般に刑罰を科すには、行為者に故意が認められなければならないのだそうだ。「company_A/data/order.csv」を偶然にでなく読み取った行為者は、(行為に至るまでの背景しだいでは)会社Aの付加したアクセス制御機能による制限を免れようとする故意を持って行為に及んだと解されるだろう。しかし、存在自体を知らない、会社Bやその他98社の付加したアクセス制御機能による制限については、免れようとする故意はなかったと解されるのかもしれない。

そのような法理解が正しいのだとすると、アクセス制御機能(に対する社会的信頼)を侵害したことを罪を問う不正アクセス禁止法は、行為者がそのアクセス制御機能の存在を認識していたことが要件となるはずである。さらには、存在を認識した上で、自分の行為がそのアクセス制御機能によって制限されている利用をし得る状態にさせるものであることを認識している必要がある。

となると、次の場合はどうだろうか。上のレンタルサーバ屋の事例で、攻撃者がform.cgiを使って読み出したのは、

/usr/local/apache/cgi-bin/form.log
だったとする。行為者は、会社Aが付加したBasic認証のアクセス制御機能の存在を知らなかった。

行為者の認識が以下のどれだったかが鍵になるということになるだろうか。

黄色はレンタルサーバ屋が用意したFTPサーバに対する誰かのログインを示す

*1 2号、3号では「識別符号であるものを除く」とされているので、1号違反が同時に2号、3号違反にもなることは起こり得ない。

*2 Apacheが稼働しているところへBasic認証というアクセス制御機能を付加する場合は、Apacheというサービスの存在を前提としてBasic認証があるのであり、Basic認証の付加はサービスの一部を制限するものととらえる。

*3 黄色の利用権者がこの電子計算機全体の管理者であるならば、青色部分の全部が赤色部分に重なるが、他のコンテンツ管理者も存在し得るのであるから、一般には、赤に重ならない青も存在し得る。

*4 (telnetでログインしてファイルを読む行為と、バッファオーバーフロー脆弱性を突いてファイルデータを引き出す行為とを、同一の利用だとみなさない限り、「アクセス制御機能により制限されている利用をし得る状態にさせる」という2号、3号の規定は成り立たない。

*5 正確には、このアクセス制御機能が司るすべての利用権者の領域の和集合。

本日のTrackBacks(全1件) [TrackBack URL: http://takagi-hiromitsu.jp/diary/tb.rb/20041004]

 大昔の話だが、法律というのは一部の権力者だけが知っているものだった。不文律といって、長老なりなんなりだけが知っていて、何か困ったことがあればその権力者に尋ねに行っていた

検索

<前の日記(2004年10月02日) 次の日記(2004年10月07日)> 最新 編集

最近のタイトル

2024年03月16日

2024年03月13日

2024年03月11日

2023年03月27日

2022年12月30日

2022年12月25日

2022年06月09日

2022年04月01日

2022年01月19日

2021年12月26日

2021年10月06日

2021年08月23日

2021年07月12日

2020年09月14日

2020年08月01日

2019年10月05日

2019年08月03日

2019年07月08日

2019年06月25日

2019年06月09日

2019年05月19日

2019年05月12日

2019年03月19日

2019年03月16日

2019年03月09日

2019年03月07日

2019年02月19日

2019年02月11日

2018年12月26日

2018年10月31日

2018年06月17日

2018年06月10日

2018年05月19日

2018年05月04日

2018年03月07日

2017年12月29日

2017年10月29日

2017年10月22日

2017年07月22日

2017年06月04日

2017年05月13日

2017年05月05日

2017年04月08日

2017年03月10日

2017年03月05日

2017年02月18日

2017年01月08日

2017年01月04日

2016年12月30日

2016年12月04日

2016年11月29日

2016年11月23日

2016年11月05日

2016年10月25日

2016年10月10日

2016年08月23日

2016年07月23日

2016年07月16日

2016年07月02日

2016年06月12日

2016年06月03日

2016年04月23日

2016年04月06日

2016年03月27日

2016年03月14日

2016年03月06日

2016年02月24日

2016年02月20日

2016年02月11日

2016年02月05日

2016年01月31日

2015年12月12日

2015年12月06日

2015年11月23日

2015年11月21日

2015年11月07日

2015年10月20日

2015年07月02日

2015年06月14日

2015年03月15日

2015年03月10日

2015年03月08日

2015年01月05日

2014年12月27日

2014年11月12日

2014年09月07日

2014年07月18日

2014年04月23日

2014年04月22日

2000|01|
2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|05|06|07|08|09|10|11|12|
2012|02|03|04|05|06|07|08|09|
2013|01|02|03|04|05|06|07|
2014|01|04|07|09|11|12|
2015|01|03|06|07|10|11|12|
2016|01|02|03|04|06|07|08|10|11|12|
2017|01|02|03|04|05|06|07|10|12|
2018|03|05|06|10|12|
2019|02|03|05|06|07|08|10|
2020|08|09|
2021|07|08|10|12|
2022|01|04|06|12|
2023|03|
2024|03|
<前の日記(2004年10月02日) 次の日記(2004年10月07日)> 最新 編集