雑記帳


ウィルス!


ある日のこと、いろいろのいやな事が重なっていて、さっさと帰りたいという気分の時であった。
「残作業を確認する」
という非常によくわからない理由で残され、まもなく7時半という頃のことだった。

いまだにわからないのが「残作業」という単語。
この場合、現在進めている仕事が主だったのだが、「やり残し」みたいですごく後ろ向きな単語だと思いませんか?

ちょうど今ぐらいの時間に帰れば「WA風が来た!」を観ることが出来るだろう、と帰り支度をはじめたときだった。
「ちょっとみんな、帰らないで待ってくれ」
と、まだなんだかんだで残っていた連中を上司が呼び止めた。
「実は・・・・」
と現在の状況をかいつまんで教えてくれたのを聞き、愕然としたのであった。

こちらで紹介している通り、コンピュータに関わる会社に勤めているが、実はプロバイダなんかもやっている。

正確にはそのプロバイダ、書類上存在するだけのようなもので、実際の機器の設置・運用からユーザ登録・サポートまですべてうちの会社でやっているのだが。

さて、そのプロバイダのメールサーバがちょっとやばいらしい。
どうやら誰かがウィルス付きのメールを受け取ったらしく、それが一斉にばらまかれているというのだ。
「というわけで、今向こうの部屋でウィルスの削除をやっているんだけど、手伝ってもらうことになるかも知れないからちょっと待ってて」

はい?

そーっとその部屋を覗いてみると、その部署の連中が全員揃って何やらやっている
適当に一人捕まえて状況を確認してみると、メールサーバへ手動(telnet)で接続し、一つ一つメールを削除しているという。
「こんなにあるんですよ」
と半分泣きそうになりながらそいつはユーザ名とパスワードの一覧表を見せた。
1枚に7、80件はあるだろうその紙の右上隅には11/141と書かれていた。
こんな紙が全部で150枚近くあるって事ですか。

サーバへの接続を一部のアドレスからのみ、と限定しているため、作業できる人数に限りがあるのでちょっと様子を見ていることにした。

ちまちま
ちまちま
ちまちま
ちまちま







だーーーーーー!

本気か?本気でこんな作業をやるのか?
単純計算で1万人のユーザがいるんだぞ!それをたかだか20人程度でやるのか?一人あたり500人だぞ!一人分の作業をするのに2〜3分程度かかっているから、休憩なしでやっても単純計算で20時間以上だぞ!
とてもじゃないが、つきあいきれない。

仕方がないので、この辺のサーバを管理しているハズのNとTを捕まえて聞いてみる。
Pop「一応聞きたいんだが」
N「はい」
P「本当にこれしか方法がないのか?」
T「今のところは」

これは、メールサーバにウィルス対策ソフトを入れるべきかどうかという議論につながると言っていい。
僕個人の見解としては企業が独自に立てた社員用のメールサーバには必要だが、一般のプロバイダ向けには不要と考えている。理由はいろいろあるけど、基本的に自分の身は自分で守るのがインターネットの世界というものだからだ。
さて、これしか方法がない、と言われても、こんな方法はゴメンだ。さっさと別の対策をとらないと明日の朝まで仕事になってしまう。

もう一度NとTを捕まえて尋問する。
P「メールサーバってこの間入れたばっかりのあのマシンだよな」
T「はい」
P「・・・・念のために聞いておくんだけど」
N「はい」
P「アレって、某UNIXマシンだよな」
N「はい」
P「・・・・参考までに聞いておきたいんだけど」
N「はい」
P「メールって、テキストファイルになってるんじゃないか?
T「はい、確かに」
P「そのファイルを持ってこい!

Nがあるユーザのファイルを持ってきたところで、普通にテキストエディタで開いてみる。
P「ウィルスの入っているメールはどれだ?」
N「エーと、あ、これです」
P「それをざっくり削除するようなスクリプトを書くというのはダメかな?」
N&T「
P「これなら30分かからずに終わるんじゃないか?」
T「うーむ・・・・でも、このパターンを正規表現で探して・・・・」
N「ちときついか」
パターンを拾うのは比較的簡単だが、ちょっとやっかいなのだ。
と言うのも、

普通のメール
ウィルスの付いているメール
普通のメール

とまぁ、間に挟まっていたりするモンだから、ウィルスだけ削除という指定がめんどくさいのだ。

しょうがない、
P「おい、Mさん(NとTの上司)に作業の許可もらってこい」
N「え?」
P「ウィルス削除プログラムを一本書く。一応話は通しておかないとな。それと、フロッピーは後から持って来い」
そう言い残し、自分の席へ。
既に電源を切ってあったPCの電源を入れ(すごく時間がかかるのだ)、テキストエディタでプログラムを書き始める。
N「許可もらってきました」
そう言いながらNがフロッピーディスク(ウィルス入り)を持ってきた。
ガションと差し込み、こちらもテキストエディタで開く。
P「適当に書くから確認してくれ」

メールのパターンだけ確認し、カタカタと打ち込みはじめる。
僕的にはいつもとほぼ変わらないペースだが・・・・
T「は、早い・・・・」
P「このくらい言われる前にやってくれ・・・・」
愚痴りながら「このパターンを持つメールを削除」というプログラムを書き上げ、試しに実行。
P「うまく行ったね」
N「・・・・他のメールも試しに持ってきます!」
他のメールをいくつか試したところ、問題なくいけると言うことがわかった。
P「んじゃ、これをサーバに持っていこう」
こう言うとき、Cという言語の移植性は非常に助かる。

パソコンベースのプログラムと聞くとVisualBASICを連想する某部長に是非とも聞いて欲しいところである。

それはさておき、サーバでもいくつか試してみたが、問題なくいけそうだ。
P「じゃ、後はこのプログラムを全部のメールに対して実行すること」
プログラムはコマンドライン引数にメールのファイル名(この場合ユーザID)を指定するだけという非常にシンプルなもの。すべてのファイルに対して実行する、くらいのスクリプトなら簡単に書けるはず。案の定、NとTは「どちらが先に書き上げるか」と言う競争をし、2分で書き上げた(所要時間の半分はエディタを動かせる端末への移動時間だ)。

こうして、構想1秒、設計5秒、製作5分のプログラムは完成した。
さて、ここまで一気に仕上げたところで少し休憩・・・・ではなくて、いろいろ報告である。

とりあえず、このあたりの話をまとめているKさん(このプロバイダのユーザサポートの担当。もともとは一緒の部署で仕事をしたこともある)へ話す。事が事なだけにKさんも慎重だ。
K「どういうプログラムを書いたの?」
P「これこれこう言うことをするプログラムです」
K「・・・・こういうパターンはテストした?」

つまり、先頭にウィルスがある場合とかウィルスが何もない場合とか。
こう言うところを見落とすと後で痛い目に遭う。
P「こういうパターンとこういうパターンもテストしました」
K「そうか」
一通り確認したところでKさんの決断は・・・・条件付きで決行だ。

Kさんの出した条件は

  • S常務(この事態についての責任者となっている)の許可をもらう
  • きちんとバックアップを取ること
  • 何人かのメールを事前、事後に確認すること

ま、当たり前ですな。S常務へはKさんが話をしてくれるので、NとTがバックアップの準備にかかる。
しかし、ここで一つ疑問に思ったことを聞いてみた。
P「みんなが作業はじめる前にバックアップ取った?」
N「取ってません

なんだかなぁ、と思いながらバックアップの準備をまかせて少し休憩。何しろプログラムを作り始めてからずーーーーーっとかけずり回りながらいろいろやっていたのだ。一番の理由が、そのマシンでのバックアップ方法を知らないからってのは内緒だ。UNIXを巧みに操っていたのは5年前。すっかり忘れている。

みんながちまちまやっている部屋で「ふぃー」と言いながら烏龍茶などすすっているとS常務とKさんがやってきた。
K「ちょっとさ、プログラムの説明してあげてよ」
と言うので、ホワイトボードを使って「これこれこういうモノ」という説明をする。
S「うーむ」
P「僕の意見としては『やるなら早い方がいい』と言うものなんですが」
S「・・・・」
P「あっちの作業、どのくらいまで進んでいるかにもよりますけど」
S「どのくらい進んでる?」
K「作業開始から・・・・5時間経ってますけど、4分の1行ってるかどうか、ですね」
S「やろう。バックアップをきちんと取ってからやれば今より悪くなることはないだろう
K&P「はい」
S「どのくらいかかる?」
K「セーブに・・・・30分弱かな?処理の方はどんな感じ?」
P「わかりません。何しろテストしている限りではファイル一つあたり1秒かかってないんで」

多い人で200通くらいのメールをため込んでいることが判明したが、それでも1秒かからない。
もちろん計測ツールなど使えばわかるんだけど、そこまでする必要はない。
K「トータル1時間かからないかな?」
P「多分」
S「よし、開始準備をしてくれ。皆の作業は一時中断してもらう」

皆の作業を一時停止させる口実で吉○屋の牛丼が差し入れされるのを横目で見ながら作業開始。
「あれ?食べないのか?」
「いりません」

牛丼あまり好きじゃないから
そんな言い訳を胸の内にしまっているうちにバックアップが終了。

N「やります」
P「おう」
N&T&P「ポチッとな」

エラー連発

P「何でだぁ!」
N「ファイルのアクセスが出来てませんねぇ・・・・何ででしょう?」
T「えーっと・・・・あ!
P「ん?」
T「ファイル名、全部違ってます・・・・ごめんなさい」

とまぁ、予定外の事態もあったものの、30分程度で全作業終了。実際にプログラムが流れていた時間が5分程度だったため、本当に処理されたのかが不安で文字列検索とかやってみたが、どうやらよさそう。
で終われば良かったんですが、似たようなパターンの怪しい添付EXEファイルを見つけてしまったんですね。

とりあえず正体を探るべく、メールを受信し、添付ファイルをフロッピーに吸い出し。
T「はい、これに入れました」
P「あ、こいつウィルスに触ったぞ」
N「わー、近づくな」
等と騒ぎながらウィルスチェックの出来るパソコンのところへ移動。チェックしてみると、今まで騒いでいたウィルスの亜種らしい。
他にはそれっぽいヤツが見つからないので、作業終了って事で撤収。

午前1時なんですけど

帰りのタクシー(もちろんタクシー代会社持ち)の中でふと考えた。
今回のこれ、もしも手作業でやっていたらどうなっていたんだろうか、と。

作業開始から5時間経っても4分の1というペースを考えると終了まで全部で20時間。

朝までかかっても終わらないって事かい
で、作業していた人数は15人ほど。
単純に掛け算してみると300人・時間。 一日8時間で割ると37.5人・日。 一ヶ月を20日とすると1.875人・月。
簡単に言えば一人の人を2ヶ月間ずっとこの仕事させるのに等しい作業量。
うわー、勿体ない。コスト意識って言う観点からすると無駄以外の何者でもないじゃないか。

教訓:UNIXサーバを導入して利用して行くなら管理者にC言語くらい覚えさせておかないと後々苦労する。



↑もしもここに何も表示されていなかったら、ブラウザの「戻る」で戻ってください。