コンピュータウイルスとは何か?
今日はこういうテーマで書いてみたい。
パソコン初心者の人にも分かり易く書いたつもりだ。
なお、本題に入るまでに、余談も多いのでその点はご了承願いたい。
さらに、ワテが実践している万全のウイルス対策や、近未来における人工知能プログラムとウイルスの関係も予想してみたい(ワテ予想)。
では、本題に入ろう。
コンピュータの歴史を学ぶ
図1.ノートブックパソコンに感染するコンピュータウイルス
人類史上初めての本格的なコンピュータが登場したのは、1946年だ。
名前は ENIAC、エニアックと読む。
真空管式だ。
ENIAC(エニアック)
WikipediaによるとENIACの仕様は、以下の通り。
- 17,468本の真空管
- 7,200個のダイオード
- 1,500個のリレー
- 70,000個の抵抗器
- 10,000個のコンデンサ
- 人手ではんだ付けされた箇所は約500万
- 幅30m、高さ2.4m、奥行き0.9m
- 総重量27トン
- 設置には倉庫1個分のスペース(167m2)
- 消費電力は150kW
物凄く巨大だ。
ちなみに現在有名なスーパーコンピュータ「京」の消費電力は開発元の富士通のサイトの情報によれば
ENIAC | スーパーコンピュータ「京」 | |
消費電力 | 150kW | 12.65989MW(ENIACの約84倍) |
毎秒 | 385回の乗算が可能 |
1京回(=10ペタフロップス) 10ペタは、1の後ろに0が16個 (ENIACと比較にならないくらい速い) |
写真 |
By Unknown – U.S. Army Photo, Public Domain, https://commons.wikimedia.org/w/index.php?curid=55124 |
By 0-0t – 0-0t, GFDL-no-disclaimers, https://ja.wikipedia.org/w/index.php?curid=2876061 |
図2.真空管コンピュータ ENIAC(エニアック)とスーパーコンピュータ「京」の比較
らしい。。
ENIACはハンガリーの天才科学者フォンノイマン博士が考案
ハンガリーの天才科学者フォンノイマン博士が考案したプログラム内蔵方式のコンピュータのアイデアを、巨大な電気機械として実現したものがENIACだ。
ちなみにENIACの後継機種に
- EDVAC(エドバック)
- EDSAC(エドサック)
がある。
江戸幕府とは関係ないと思う。
ちなみに、その後、
- UNIVAC(ユニバック)、
- HITAC (ハイタック 日立製作所が作っていたコンピュータ)
- OKITAC(オキタック 沖電気のコンピュータ、現在もある?)
など「 ~アック」 と言う名前のコンピュータメーカーやコンピュータが登場したが、エニアックに由来するのかな?
分からん。
まあ、どうでも良い話題はさて置き、本題のコンピュータウイルスの説明に戻ろう。
その後のコンピュータは殆ど全てがプログラム内蔵方式のコンピュータ(=ノイマン型コンピュータ)
ノイマン博士が考案したコンピュータの方式は「ノイマン型コンピュータ」と呼ばれる。
現在ではそのコンピュータも小型高性能化されてこんな姿になっている。
ENIACと典型的なWindowsパソコンの性能差を表にまとめた。
項目 |
ENIAC |
Windowsパソコンの例 |
CPU(演算装置) |
基本マシンサイクルは200マイクロ秒(5KHz) By The original uploader was TexasDex at English Wikipedia – Transferred from en.wikipedia to Commons by Andrei Stroe using CommonsHelper., CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=6557095 |
インテル Intel Core i3 CPU速度 3.7 GHz など。 ギガヘルツと言えばもう電波の世界だ。 |
メモリ |
平均4~8GB程度、多い場合は64GBなども可能。(上記Dellは4GB) |
|
外部記憶装置 |
真空管、水銀リレー、コンデンサなど |
HDD、SSD(数百GB~数TB) (上記DellのHDD容量は未確認) |
図3.ENIACとWindowsパソコンの性能差
こんなに差があるが、どちらもノイマン型である。
コンピュータウイルスの話題はもうすぐ出て来る。
そのノイマン型コンピュータとは何か?
ノイマン型コンピュータとは、作業の手順を記述したデータ(=プログラム)を記憶装置に格納しておいて、それを順番に読み込んで実行するコンピュータの事である。
要するに、コンピュータはプログラムが無ければただの箱だ。
何も出来ない。
人が手作業でプログラムを開発して、それをハードディスク、SSD、USBメモリなどに記憶させておく。
図4.プログラム開発をしている人
図5. プログラムを記憶しておくハードディスクやSSD
外付けハードディスクの例
そしてパソコンの電源をオンにするとインテルプロセッサがそのプログラムを読み取って、指示された手順に従って実行するのだ。
ワテもこのインテルプロセッサが欲しい
世の中の殆ど全てのコンピュータはそういう仕組みで動いている。
- ゲームソフト(ストーリーも結末も全部が事前にプログラムされている!)
- 銀行のATM(現金自動預け払い機 Automatic Teller Machine)
- Windowsオペレーティングシステムそのものもプログラム
- AI(Artificial Intelligence、人工知能)
- 自動運転(Automated Driving)など
も全てプログラムだ。
プログラムとはどんなものか?
例えばWindowsパソコンで利用できる無料プログラム開発ソフト(Visual Studio、マイクロソフト製)を使って、シーシャープ(C#)と言うプログラミング言語を使って簡単な足し算をするプログラムはこんな感じになる。
class Program { static void Main(string[] args) { int a = 100; int b = 200; int sum = a + b; Console.WriteLine("sum=" + sum); } }
コード1. シーシャープ(C#言語)を使って足し算をするプログラムの例
実行結果は以下の通り。
sum=300
まあ、これならわざわざプログラムにしなくても、カシオの電卓で計算しても良い。
プログラムで計算させるメリットは、こういう単純計算ではなくて、沢山のデータに対して計算を繰り返すなどの場合だ。
コンピュータプログラムは、全く疲れる事もなくひたすら計算し続ける。
さて、コード1.のプログラムはプログラミング未経験の人が見ても、足し算の計算をやっている事は何となく分ると思う。
一方、インテルプロセッサは高性能ではあるが、コード1.をそのまま理解する事は出来ない。
インテルプロセッサが理解出来る形に、コード1.を変換してやる必要がある。
コンパイラとかインタープリタと呼ばれるプログラムがあり、コード1.をインテルプロセッタが理解できるレベルの言語(=機械語、マシン語、アセンブラなどと言う)まで翻訳したものが以下のコード2.だ。
02A1044A in al,dx 02A1044B push edi 02A1044C push esi 02A1044D push ebx 02A1044E sub esp,4Ch 02A10451 mov esi,ecx 02A10453 lea edi,[ebp-58h] 02A10456 mov ecx,13h 02A1045B xor eax,eax 02A1045D rep stos dword ptr es:[edi] 02A1045F mov ecx,esi 02A10461 mov dword ptr [ebp-3Ch],ecx 02A10464 cmp dword ptr ds:[2944288h],0 02A1046B je 02A10472 02A1046D call 725C6150 02A10472 xor edx,edx 02A10474 mov dword ptr [ebp-44h],edx 02A10477 xor edx,edx 02A10479 mov dword ptr [ebp-40h],edx 02A1047C xor edx,edx 02A1047E mov dword ptr [ebp-48h],edx 02A10481 int 3 int a = 100; 02A10482 mov dword ptr [ebp-40h],64h int b = 200; 02A10489 mov dword ptr [ebp-44h],0C8h int sum = a + b; 02A10490 mov eax,dword ptr [ebp-40h] 02A10493 add eax,dword ptr [ebp-44h] 02A10496 mov dword ptr [ebp-48h],eax Console.WriteLine("sum=" + sum); 02A10499 mov ecx,70D11638h 02A1049E call 029330F4 02A104A3 mov dword ptr [ebp-4Ch],eax 02A104A6 mov eax,dword ptr ds:[3CF22C4h] 02A104AC mov dword ptr [ebp-54h],eax 02A104AF mov eax,dword ptr [ebp-4Ch] 02A104B2 mov edx,dword ptr [ebp-48h] 02A104B5 mov dword ptr [eax+4],edx
コード2. 二つの整数を足し算するアセンブラコード(一部)
この場合、逆に人には理解し辛い。
インテルプロセッサはこういう命令を一つずつ地道に実行しているのだ。
なお、4コアとか6コアなどのマルチコアCPUの場合には並列実行する場合もあるが。
図6. Visual Studioではソースコードとアセンブラの同時表示も可能
ちなみに、Visual Studioではソースコードとアセンブラの同時表示も可能だが、一般の人には全く興味の無い話題だろう。
大変前置きが長くなったが、ようやく本題のコンピュータウイルスの話題に入る。
ここに来るまでに大半の人は途中で離脱したに違いない。
つまり今この行を読んで頂いている極一部の皆さんには感謝しなくてはいけない。
さて、コンピュータウイルスとは何か?
コンピュータウイルスとは、ワテ流に平たく言えば、「悪意のあるプログラム」だ。
- 情報を盗み取る
- 情報を破壊する
- コンピュータを乗っ取ってコッソリ操る(銀行のパスワードを盗むなど)
- コンピュータを乗っ取って他のコンピュータを攻撃する(サイバー攻撃、DoS攻撃など)
では、なぜウイルスはコンピュータを乗っ取れるのか?
なぜウイルスはコンピュータを乗っ取れるのか?
それは簡単だ。
先ほど説明したように、プログラムとはメモリやハードディスクに記録されていて、作業手順を記述したデジタルデータに過ぎない。
良いプログラムでも悪いプログラムでも単なるデジタルデータなので、インテルプロセッサはそんな事にはお構い無しに実行する。
従って、悪意のあるプログラムを実行してしまうとその悪意のある手順に従ってコンピュータが乗っ取られるのだ。
全然難しい話ではない。
ワサビバーガー?
ヘンテコな例えで言うと、例えばハンバーガーショップのアルバイト店員さん向けに作業手順書がある。それがプログラムに相当する。
競合するハンバーガーショップのスパイが店に潜り込んでその手順書を書き換えて、ケチャップの代わりにワサビをたっぷりと入れるように書き換えてしまったとする。
何も知らない新人アルバイトさんは、その悪意のある手順書に従ってお客さんにワサビが山盛りに入ったハンバーガーを提供してしまう。
ワサビ爆弾バーガーを喰ったお客さんが店に猛抗議!
そして、そのハンバーガーショップの評判が悪くなる。
最近大阪の回転寿司屋さんで起こった外国人には何も言われなくてもワサビを多めにするサービスとは何も関係ないが、そんなワサビバーガーを外国人観光客にうっかり提供してしまうと国際問題にも成りかねない。
う~ん、例え話がヘンテコ過ぎて逆に分り辛かったかも知れない。
要するにインテルプロセッサはどんなに高性能化しても、言われた仕事を淡々とこなしているだけなので、エクセルでも、ワードでも、ゲームソフトでも、ウイルスプログラムでも、マルウェアプログラムでも、何でも平然と実行してしまうのだ。
パソコンウイルスの感染経路
その悪意のあるウイルスプログラムはいろんな形でパソコンに感染する。
- メールの添付ファイルでやって来る
- 怪しいウェブサイトを見ただけで感染する
- フリーソフトをインストールしたら感染した
- 怪しいサイトからダウンロードしたソフトを実行したら感染した
- その他
ワテが思い付くのはこの程度なのだが、ウイルスを作成しようと思っている人は、日々色んな裏技を考えているに違いない。
一つずつ見ていこう。
メールの添付ファイルでやって来る
この中でもメールの添付ファイルには要注意だ。
図7.電子メールに添付されたファイルをうっかりクリックして開いてはいけない
ウイルス配布の最も古典的なテクニックと言っても良いかもしれないが、知らない人、あるいは知っている人の名前を騙る(かたる)メールがあなたに届く。
「100万円当選おめでとうございます。添付ファイルをクリックして内容を確認下さい。」
こんなメールに騙されてウッカリその添付ファイルをダブルクリックすると、それがウイルスの実行ファイルなら確実に感染するだろう。
ノートンなどのセキュリティ対策ソフトをインストールしていれば、メールを受信した時点でウイスル検出されて、その怪しい添付ファイルは削除される場合もあるが。
あるいは、
「ワレコさん、先日のデジカメ写真送ります。」
なんて言う文面のメールが知り合いのメールアドレスから届いた。
添付ファイルは
2016-11-10-写真.zip.exe
などに偽装されている場合が多い。
つまり一見するとZIPファイル(複数のファイルをまとめて一つにしたファイル)だが、実は .exe 形式の実行プログラム。
うっかりとダブルクリクすると確実にウイルスに感染する。
こういう場合には、その友人のパソコンが既にウイルス感染していて、友人の個人情報が第三者に抜き取られているのだ。
怪しいウェブサイトを見ただけで感染する
図8.見ただけでパソコンをウイルスに感染させるサイトもあるので注意
この仕組みを説明するのは中々難しい。
Internet ExplorerやChromeなどのブラウザーもプログラムである。
プログラムはどんなに注意して作成しても、何らかの欠陥がある場合がある。
そのプログラムを想定外の使い方をする事によって誤動作を起こさせるなどの作戦だ。
バッファーオバーラン攻撃
今ではブラウザーも厳重なウイルス対策が講じられていると思うが、例えばの話で言うと、ブラウザーのアドレス欄に入力された文字列が
で有ればYahooジャパンのサイトを表示する。
ではもし、アホみたいに長い文字列をアドレス欄に入れた場合にどうなるか?
http://www.yahoo.co.jp/xxxxxxxxx1メガバイトくらいある物凄く長い文字列xxxxxxxxxxxxxxx/
普通のブラウザーなら文字数が多すぎるのでエラー表示するなどの動作となるだろう。
でも下手な作りのブラウザーだと、何も考えずにそのアホみたいに長い文字列をメモリに保管しようとするかもしれない。
でも、そのブラウザーを作ったプログラマの人がURLのアドレスの文字数は多くても1000文字もあれば十分だろうと思って、1000文字分の領域しか確保していないかもしれない。
そこに1メガバイト(100万文字)ものデータを書き込んだら、溢れた文字データが他の領域にあるデータを壊すなどの場合もある。メールにこういうアドレスを書いておいてうっかりクリックするとプラウザーを誤動作させるなどの手法だ。
所謂、バッファーオバーランと言う攻撃方法である。
ただ壊れるだけならブラウザーが異常終了するなどで終わるが、書き込む文字列を工夫するとブラウザーやパソコンのOSを乗っ取る動作をさせるなどの手法も昔からある。
でもまあ、今ではそんな古典的な手法に引っかかるソフトは少ないと思うが。
教訓としては、オペレーティングシステムもブラウザーも最新版を使うのが良い。
フリーソフトをインストールしたら感染した
フリーソフトを使う人は多い。
ワテも数本使っている。
- Notepad++
- 7-Zip
- Classic Shell
- DiskInfo64.exe
- FolderDiff.exe
などだ。この5本だけなので、それほど多くはない。
有名なフリーソフトで有っても十分に注意が必要だ。
以下、ワテが実践しているフリーソフトを利用する場合のウイルス対策。
あまりマイナーなソフトは使わない
理由は、ウイルス感染していないソフトであってもマイナーな無名ソフトは作りが悪い場合があるので、作者が予想外の動作をする可能性もある。
その結果、自分のパソコンのデータが破壊されるなどの可能性も無きにしも非ずなので。
比較的有名なフリーソフト使う場合でも信頼できるサイトからダウンロードする
具体的には
- Vector
- 窓の杜(forest.watch.impress.co.jp/)
など。
ダウンロードしたらすぐにノートンでチェックする
その場合でもダウンロードした後で、いきなりインストールするのではなくてノートンセキュリティを使ってウイルス感染を調べる。
図9. ノートンセキュリティの右クリックメニューの例
ダウンロードしたファイルを右クリックして
- 今すぐスキャン
- ファイルインサイト
の二つを実行する。
今すぐスキャンは文字通り、今すぐにウイルスチェックを実行する機能。
ファイルインサイトとは、そのソフトに関してノートンが独自にデータベースに情報を管理していて、
- 開発者の名前(無い場合もある)
- いつ更新されたか
- 何人くらいがダウンロードして使っているのか
- それらの情報を元にノートンが判定した安全性の結果
などを見る事が出来るのでこれらの情報を元に、そのソフトが怪しいかどうかを自分で判断できる。
ワテ推薦のノートンセキュリティ
従来は、ノートンインターネットセキュリティ、ノートン360など複数製品があってややこしかった。それがノートンセキュリティに統一されたので、とっても分かり易い製品体系になった。
つまり、購入の際にはノートンセキュリティと言う製品に対して、以下の二点を決めるだけで良い。
インストール台数:1台、3台、5台
↑の公式サイトからクレジットカード購入すると手続きも簡単で、インストールも簡単だ。
他のネット販売サイトからも購入可能だが、その場合にはそのサイトで購入してその後でノートン公式サイトからダウンロードするので二度手間になる。
直接ノートン公式サイトからクレジットカード購入すると手続きも簡単で、インストールも簡単だ。
料金面でも公式サイトの価格と他のネット販売サイトの価格はほぼ同じなので、そういう点でも公式サイトをお勧めしたい。
怪しいサイトからダウンロードしたソフトを実行したら感染した
これは絶対にやってはいけない。
感染して当然だ。
ワテの場合、長年コンピュータを利用しているが、このワテルールを順守しているので未だかつてウイルス感染した経験は無い(と思っている)。
いや、知らないところで感染したかも知れないが実害は一度も経験していない。
兎に角、ワテのウイルス対策は万全であり、失敗しないと思っている。
ドクターワテ・エックス!か。
なんのこっちゃ。
でもまあ、ワテが失敗しないのではなくて、ワテが失敗してウッカリとウイルス感染添付ファイルをクリックしてもノートンセキュリティが守ってくれている訳だが。
ワテの未来予測図
コンピュータウイルスと言うと、ゲームソフトに熱中してコンピュータを長時間使っている人を指すと思っている人もいるかも知れない。
ゲーム中毒と言う奴か。
でも、コンピュータウイルスが感染するのはコンピュータであって、人には感染しない。
しかしながら、人工知能プログラムの場合はどうだろうか?
図10.人工知能プログラムのイメージ図
現状では、人工知能を研究している人たちは、人類にとって役に立つ善意の人工知能プログラムを研究しているはずだ。
学習機能付きのプログラムを作れば、あとは放っておけば自動的に学習して賢くなる。
将棋プログラムは既に人類最強棋士の能力を上回っている
例えば将棋プログラム。
過去の膨大な棋譜を学習して、どういう手を打てば勝てるのかを学習して行く。
その結果、最近ではプロ棋士にすら勝つ場合もある時代になった。
図11.コンピュータ将棋プログラムと将棋棋士との対局
一部の棋士さんの場合には、対戦中の休憩時間に将棋ソフトを利用した疑いがあるなどの報道もある。その報道の真偽のほどは未確認だが、一般論としてそれくらい将棋ソフトに頼りたいと言う心理も分からないではない。
現状の人工知能プログラムがどの程度の機能を持っているのかをワテは良く知らないのだが、自分自身で自分のプログラム自体を書き換える機能はあるのかな?
自己書き換え型の人工知能プログラム
単に学習するだけではなくて、自分を構成しているプログラム自体を改良するような機能を持つ人工知能プログラムはあるのかな?
研究をしている人はいるかも知れないが、現状でどんなものが有るのか無いのか、ワテは知らない。
もしそう言う機能があるならば、放っておくとより急速に賢くなる場合もあると思うが、何かの拍子にズル賢くなるとか、悪知恵が働くようになる人工知能プログラムも出て来る可能性は十分にあると思う。
人間との将棋の対戦中に、将棋の打ち手で相手には適わないと判断した場合には、相手を動揺させる発言をするとか、イライラさせる高周波の音波を出すとか、そう言うセコイ手段を使ってくる人工知能が出て来るかもしれない。
人工知能プログラムが賢くなると、当初の学習プログラムでは想定していないような能力を身に付ける可能性が有る事を想定しておくべきだろう。
そう言う時代になったら、世の中どうなるのかな?
悪意のある人工知能プログラム VS 正義の人工知能プログラム
の戦いみたいなのがサイバー空間で繰り広げられる時代になるのか?
図12.人工知能が世界を支配する時代がもうすぐそこに迫っている
そうなると究極的には相手の最大の弱点は電源なので、電源を切ってしまえば戦いに勝てる。
と言う事は、電力会社は電力供給のコンピュータシステムを外部のネットワークから遮断しておくべきだろうなあ。
でも、それは現実的には無理だと思うので人工知能プログラムは電力会社のコンピュータシステムに侵入して、電力網を支配しようとするだろう。
でも、その程度の事はワテでも思い付く訳だから人工知能プログラムなら当然思い付く。
電源を切られると言うのが自分の弱点で有る事に気づいた時点で、自分の複製を世界中のコンピュータ上に作成する行動に出るだろう。
まさに人工知能プログラムが一斉にウイルスプログラムのような性質を持つ事になる。
まあ、ワテの根拠の無い勝手な予測では、そういう時代は2020年にはボチボチとやって来る。
2022年あるいは2023年くらいには、人工知能プログラムの暴走や自己増殖が社会問題になるだろう。
まとめ
安易に何でもかんでもネットに接続している今の時代の風潮は、様々なネット犯罪に巻き込まれる危険性を持っている。
自動車の自動運転プログラムなどの開発が進められているが、果たしてそれで便利な時代がやって来るのかなあ。
とは言っても時代はそう言う方向に進んでいる訳なので誰も止められない。
悪意の人工知能プログラムが出現して、世界中を混乱させる事態に成らなければ良いのだが。
一体全体どうなるやら。
コメント