「あれはウィルスなのですか?」

今回ブラウザの基本的な機能を用いたプログラムが刑法168条の2の言うウイルスだと認知されたとのことでした.

この件,話題になっておりますね.

高木浩光先生らがご意見を述べており,私も同意しておりますので,自分がそこに加わることになんら意味もないだろうと思っておりましたが,役人の友人より,「大学教授が意見を表明すること自体にも意味があるので,なんか言っておけ」と言われたこともあり,Twitterのアカウントを作成し,その上でMediumにこの記事を投稿しました.

言い訳ですが私自身この年度末色々と立て込んでおり,自身の専門に関する技術にも関わらずかなりラフな文章になってしまって不本意ですが,色々と急いだ方がよいと判断し,また,趣旨としては自分の意図を盛り込めたと判断しましたので,ここに示します.

実際に当該スクリプトを入手したわけでないので,以降は,この記事で言うalert(アラート)文をfor文で繰り返し呼び出すというプログラム(以降,対象プログラムという)を想定して議論を進めます.
また,この内容は,私の個人的な意見であり,所属する組織とは関係ありません


さて,結論から述べますが,

「当該プログラムは,コンピュータウィルスなのか?」

という問に対しては,

「いいえ,あれはウィルスではありません」

とお答えします.

なぜ,そのように判断したのかについては,私なりの見解を以下に示しますので,ご興味のある方はご笑覧ください.


ウィルスとは何か

コンピュータウィルス(以降,ウィルスという)とは,刑法168条の2において,

「人が電子計算機を使用するに際してその意図に沿うべき動作をさせず、又はその意図に反する動作をさせるべき不正な指令を与える電磁的記録」

とあります.

ここでの「人」とは「計算機の利用者を指す」と解釈するのが妥当のようですが,個別具体的な誰かを指すわけでなく「電磁的記録を作成した人物」つまり,ソフトウェア作成者一般が想定する利用者であると解釈するのだろうと思います.

そう解釈できないのであれば,高木浩光先生がおっしゃる通り

Webサイトの閲覧者は、見に行こうとしているWebサイトがどんな挙動をするのか事前に全て把握してなどいないから、ほとんど全てのサイトが「意図に反する動作をさせる」サイトであると言うこともできよう。

となってしまいます.

よって,「電磁的記録を作成した人物」が想定する利用者であると解釈しない場合,当該法は,「人が電子計算機を使用するに際してその意図に沿うべき動作をさせず、又はその意図に反する動作をさせるべき不正な指令を与える電磁的記録」のうちの「不正な指令を与える電磁的記録」だけになってしまい,何を特定しているのか分からない.

したがって,立法時の経緯は存じ上げませんが,刑法168条の2において,「人」とは「電磁的記録」を作成した人物が想定する利用者であると解釈するのが妥当なのだと思います.

今回は,その前提で,刑法168条の2でいうウィルスが何かを整理してみたいと思います.

コンピュータサイエンス中でのこの手の議論は,数学のような厳密な定義・公理の上の学問ではございませんので,議論の根源となるウィルスの定義も,所詮自然言語でそれっぽい文字を羅列しておるにとどまり,定義とその解釈が人により微妙にずれますが,シマンテック社のページにあるように,概ね以下の通りだと思います.

a computer virus is a type of malicious code or program written to alter the way a computer operates and is designed to spread from one computer to another. A virus operates by inserting or attaching itself to a legitimate program or document that supports macros in order to execute its code. In the process, a virus has the potential to cause unexpected or damaging effects, such as harming the system software by corrupting or destroying data.

この文章にあるようにウィルスとは「コンピュータの動作を変更する(to alter the way a computer operates)機能」や「コンピュータからコンピュータへと拡散する(to spread from one computer to another)機能」(以降,これらの機能をウィルス機能という)を中心として持つソフトウェアでと良いと考えます.

「コンピュータの動作を変更する(to alter the way a computer operates)機能」がポイントで,「ソフトウェアの作成者の意図を違えるケース」がウィルス機能なのだと考えます.


ウィルス機能が効果するための権限の整理

ウィルス機能を効果させる(=プログラムとしてその目的を達成すること)にあたり,重要な要件があります。

実行されるウィルス自体が,「ファイルを書き換えるなどのウィルス機能」を行使できうる権限をもつ必要があります

しかしながら,(様々なアプリケーションを動かすために必要な雑務をすべて担うソフトウェアである)OSにより,与えられた権限以上のことができない仕組みとなっております.いわゆる,アクセス制御という仕組みです.

当該ウィルスプログラムが実行されたという前提において,このアクセス制御を突破し必要な権限を取得することが,ウィルスの目的遂行のための最初の障害であります.

突破さえしてしまえば,その権限でウイルス作成者のやりたいことができるわけです.突破の方法には,以下の2つがあります.

  • (ケース1)脆弱性を悪用して,ウィルスプログラムを実行した利用者(もしくはウィルスプログラムの侵入時に悪用した別のプログラム)の持つ権限以上の権限を取得する
  • (ケース2)高い権限を持つ利用者にウィルスプログラムを起動してもらう

ケース1は,これは「人が電子計算機を使用するに際してその意図に沿うべき動作をさせず、又はその意図に反する動作をさせる」に当てはまるため,この行為を行う当該ウィルスプログラムは,ウィルスと断定して良いと思います.
「脆弱性」の定義や議論も細かく存在しますし,そもそもの脆弱性の定義自体が大きな争点になりそうですが,今回はこの後の議論に含まれると解釈し,以降,ケース1の議論は一旦ここで終えます.

問題はケース2なのだろうと思います.
一般に,通常PCにログインした際,その利用者(アカウント)にはその利用者に権限が割り当てられており,その利用者でできることは,その人の実行指示(ダブルクリックなど)により,起動されたプログラムも同じ権限をもちます.すなわち,管理者権限などを持つ利用者により実行されたウイルスは,実行した利用者と同じ権限を持ちます.
もし,この時,十分な権限を持たない場合,ウィルスプログラムはケース1の手法で,権限を引き上げます.このように組み合わせるケースも想定できますが,今回は,あくまで,ケース2のみでの議論に集中します.
このケース2では,最初に騙すようにして起動させる必要があります.たとえば,ほかの必要なものに見せかけるなどして目的を達成しようとします.

よって,想定利用者の期待と違わぬように,事前にある一定の合意性が求められるのだということなのでしょう.
しかし,ここで議論が循環するのですが,一般的な利用者がソフトウェアの動きを事前に予測することは不可能であります.
したがって,そもそも論として,「人が電子計算機を使用するに際してその意図に沿うべき動作をさせず、又はその意図に反する動作をさせる」における「人」を利用者とする概念定義でウィルスを特定することは困難なのであると思います.
これは高木浩光先生が仰るとおり,この法律自体を見直して頂くことが必要なのだと思います.


ウィルスの構成の概念整理

次に,ウィルスの構成について整理します.

コンピュータウィルスと言うと,なにか特別なプログラムの塊を想像するかもしれません.

それは間違えた認識と言えるでしょう.

特に,最近のウィルスは,一般的に正規のものとして使われている機能やツール・ソフトウェアを組み合わせて利用しつつ,ウィルスが「ウィルスたると特徴付く機能」の部分を作成者が都度用意する形であると言えます.「ウィルスがウィルスたると特徴付く機能の部分」を,以降,ウィルス主務部位とでも呼びましょうか.
ウィルス主務部位を中心とした機能により,他のソフトウェアのファイルやメモリを書き換えなどをし攻撃対象の他のソフトウェアの制御の奪取をして,その目的を達成します.
我々,正確に言えば,ウィルスベンダー各社が,通常のソフトウェアとウィルスプログラムとを区別する際には,このウィルス主務部位を持つ総体を呼んでいると推察されます.
図1に,ウィルスの構成例の概念図を示します.

図1ウィルスの構成例の概念


ウィルス主務部位の機能の概念整理

次に,ウィルス主務部位の機能をついて整理します.ウィルス主務部位の機能は,以下の2種類に分類されます.

  1. (ペイロード)ウィルスプログラム作成者の最終目的を叶えることを目的とするウィルス機能
  2. (エクスプロイト)ウィルスプログラムが脆弱性を悪用するケースにおいて,ターゲットプログラムの中で,「項目1に示すペイロードという機能部位を実行させること」を目的とするウィルス機能

この分類は,セキュリティの分野では知られた分類でありますが,一般的には区別がされていないようです.

項目1は,「ペイロードと呼ばれるウィルス主務部位」であり,項目2は「エクスプロイトと呼ばれるウィルス主務部位」となります.ウィルス主務部位を含むウィルス総体は一般に,この2つから構成されます.
よくある説明を使いますと,エクスプロイトをロケットにおける打ち上げ部としペイロードを人工衛星と見なします.すると,図2にように,エクスプロイトによりペイロードを目的地にまで連れて行くというアナロジーで,ウィルス主務部位の機能のイメージができます.

図2ウィルス主務部位の機能のイメージ


JavaScriptの概念整理

次に,ブラウザ上で実行されるJavaScriptについて,今回の論点に沿って整理します.

通称JavaScript,標準技術名としてはECMAScriptと呼ばれるプログラミング言語は,ブラウザにおいて,JavaScriptのソースコードを記述したファイルに記述される文字列が示す意味論を解釈し,通常はプログラムコードの一文ずつ都度マシン語の命令列として実行するタイプの言語,つまり,スクリプト言語です.
また,JavaScriptプログラムは,ブラウザ自体のセキュリティ機構により,ブラウザの製作者の意図を違える動きをしないように作られています.これが,スクリプト言語実行環境(ランタイム)およびブラウザにより実現される,いわゆるサンドボックス機構と呼ばれるものです.
さらに,ブラウザ自体もOS上で稼働するアプリケーションソフトウェアの一つであるので,ブラウザ中で実行されるJavaScriptなどが他のアプリケーションソフトウェアに不要な影響を与えないように,OSにより,できることが「その実行時に与えられた権限」でできることに限定されています.
つまり,JavaScriptプログラムは,その実行の際に,2重の檻の中で閉じ込められているわけです.

現状ブラウザでできることは,ブラウザの製作者の意図通りの機能と解釈してよいと考えます.

もちろん,「ブラウザが脆弱性を持つこととそれを悪用すること」については上述の通り別としても,「脆弱性とは言えないがブラウザの製作者の意図を違える動き」が意図せず残存しているケースや,「ブラウザの製作者の意図を違える動き」なので改修すべきであるが対応が間に合っていない(意図的に放置)ケースもあるでしょう.
「ブラウザの製作者の意図」なるものはどこにも明示されておりませんので,その区別は付きにくいものと言えますが,個人的な経験上,いわゆるバグを生み出す状況はあっても,一般的な書店で入手できる書籍に記載されている命令文の組み合わせ程度で,ブラウザの製作者の意図を違えることはないと思います.


ウィルスにおける不正とは何か

一般に「不正」とはあまりには広く曖昧な概念ですので,今回のウィルスに限定した議論にすると,セキュリティの3大要件である,「機密性」「完全性」「可用性」を損なう行為が不正と言えるでしょう.

それらの説明は・・・(だんだん疲れてきたので)Wikiから引用します.

機密性(confidentiality):情報へのアクセスを認められた者だけが、その情報にアクセスできる状態を確保すること
完全性(integrity):情報が破壊、改ざん又は消去されていない状態を確保すること
可用性(availability):情報へのアクセスを認められた者が、必要時に中断することなく、情報及び関連資産にアクセスできる状態を確保すること

当該プログラムは,機密性および完全性を損なうウィルス機能はないので,可用性のみが争点になります.


本題:「あれはウィルスなのですか?」

さて,ここまでが今回の争点を議論する上での前提になるのかと思います.ようやく本題に入れそうです.

改めて,この記事で言うalert文をfor文で繰り返し呼び出すという当該プログラムはウィルスなのかを,上記の前提のもとで検証します.

まず,
「一般論として,JavaScriptプログラムではウィルスを作れないのか?」
という質問には
「いいえ,作れます」
と言えるでしょう.

つまり,JavaScriptプログラムは,2重の檻の中で動くにも関わらず,脆弱性を悪用して目的を達成するケースや,ウィルス機能総体の一部として利用するケースはありますので,一般論としては「いいえ,作れます」というような結論となります.

よって,今回のケースを議論する上では,個別の具体的な話として,対象プログラムがウィルスなのかという判断をすることになります.

今回の対象プログラムは,エクスプロイトとみなせる部分はなく利用者の権限で実行できる範囲で動く通常のソフトウェアに準ずるものと言え,ウィルスの外形らしさを否定できないものではない,つまり,ウィルスらしさはほぼないと言えます.

ただし,ペイロードに当たる部分はalertを繰り返すという部分が認知できますので,可用性については判断が分かれるところです.

この点については,ブラウザ作成者らが,alertを繰り返しポップアップされる行為についてはそのままにしておるので,「想定する利用者」が回避可能なレベルの迷惑行為であると判断していると言えます.

(これはインターネット自体が,ある一定の技術的な自由さを保つために,このような「のびしろ」を残す必要があると考えます.個人的な経験上,「ブラウザ作成者らが『想定する利用者』にとって脅威とみなせる機能・非機能」があった場合,当該機能・非機能は,すぐに排除されます.ブラウザの仕様は頻繁に変わります.)

つまり,「実際の利用者」がそのページから離れるなどの操作により対象プログラムの引き起こす現象自体を避けられないのは,ブラウザ作成者の期待するリテラシーを持っていないと解釈しているとも言えます.

「ソフトウェアの作成者の意図を違えるケースがウィルス」と判断する観点からも,対象プログラムの「alertを繰り返しポップアップされる処理」については,ウィルス機能とは言えずとなります.

一般に,車の免許を持っていない歩行者であっても道路を歩く際に最低限の知識とその対処の能力を持つことが期待されていると考えるのであれば,今回の件も「alertを繰り返しポップアップされる処理」自体を避けるリテラシーを取得してから,インターネットを利用すべきであると考えているのではないでしょうか.

「そのようなことが,実際に老人や子供ができるのか?」というご指摘はごもっともですが,リテラシーのない利用者がインターネットを使うこの状況は商業主義の結果そうなっているのであって,道路交通事情に近いと言えます.

ソフトウェアは,現状,完全な人工物ではないどころか,他分野の工業製品の持つ水準と比べても劣っており,期待通りに動かないことが多いのが実情です.よって,議論が収斂しないことも散見されるですが,今回のケースは,そのような高度な議論ではなく,上述の通り,「対象プログラムは,ウイルスとは言えない」と簡潔に結論付くのだと思います.

そうは言うものの,この手の行為は確かに迷惑でありますので,私みたいな情報セキュリティを専ら研究している人間が,「あれはウィルスではない」と言うと「真似する人が増えて困るだろう!」とのご指摘も,ある意味正論だとは思います.

当該プログラムの作成・頒布は,「あれをウィルスだと決めつけ公費で捜査・逮捕するなんてなんて馬鹿げているんだ」と警察関係者を妄りに愚弄し一部の人に不快な思いをさせるのと同じような話であり,度が過ぎれば社会的にもウエルカムな行為ではないのは間違い無いと思います.

大学人の自分としましては,今回の一連の騒動の根源の一部は高等教育機関の力不足にもあると猛省し,ITリテラシーの向上へ寄与していきたいと思います.

以上

平成31年3月8日 
明治大学理工学部情報科学科教授 齋藤孝道


修正変更

2019/03/09

(不足を追記)
ここでの「人」とは「計算機の利用者を指す」と解釈するのが妥当のようですが,個別具体的な誰かを指すわけでなく「電磁的記録を作成した人物」が想定する利用者であると解釈するのだろうと思います.
ー>
ここでの「人」とは「計算機の利用者を指す」と解釈するのが妥当のようですが,個別具体的な誰かを指すわけでなく,「電磁的記録を作成した人物」,つまり,ソフトウェア作成者一般が想定する利用者であると解釈するのだろうと思います.

(誤字)
つまり,JavaScriptプログラムは,2重の檻の中で動くにも関わらず,脆弱性を悪用して目的を達成するケースや,ウィルス機能総体の一部として利用するケースが事例はありますので,一般論としては「いいえ,作れます」というような結論となります.
ー>
つまり,JavaScriptプログラムは,2重の檻の中で動くにも関わらず,脆弱性を悪用して目的を達成するケースや,ウィルス機能総体の一部として利用するケースはありますので,一般論としては「いいえ,作れます」というような結論となります.