このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

Code Red Killer - QPQ 1.x 用 Code Red クラッシュ問題対策 Plugin -

発言者:田中求之
( Date Monday, August 06, 2001 23:25:07 )


別の話題の中ですでに前薗さんによってアナウンスされていますが、話題の
中に埋もれてしまいそうなので、別の話題として起こしておきます。

Code Red および Code Red II の worm のアタックによって Quid Pro Quo 1.x
のサーバがクラッシュするという問題が起きます(感染はしません)。

このクラッシュを回避するための Plugin を前薗建一さんが作成し、
Code Red Killer というフリーウェアとして公開しています。

前薗さんのコメント:

 とりあえず版 ( ベータ版ともゆう ) を公開します。

 "default.ida" を含むリクエストに対してはルートのインデックス
 ファイルを reply します。それだけです。

 無料です。しかし、この plug-in を使用することによる
 一切の責任を私はおいません。


私(田中)が試したかぎりでは、Code Red によるクラッシュは起きなく
なります。

→  Code Red Killer

田中求之 さんからのコメント
( Monday, August 06, 2001 23:25:54 )

元になった話題はこれ↓

→  拡張子idaとは? 2

たまちゃん さんからのコメント
( Tuesday, August 07, 2001 08:23:54 )

MacInTouch に QPQ のクラッシュの件が載ったので,Code Red
Killer についても知らせておきました。

無断でごめんなさい。前薗さん。

阿仁生真修 さんからのコメント
( Tuesday, August 07, 2001 13:50:35 )

前園さんの作成したCode Red KillerはQPQの2.1版とも互換しますか?

前薗 健一 さんからのコメント
( Tuesday, August 07, 2001 14:05:08 )

W*API 対応であれば動くはずです。

前薗 健一 さんからのコメント
( Wednesday, August 08, 2001 01:10:26 )

Filter の設定を変更できる v1.1 を作ってみました。

GET/HEAD/Redirect が選択できます。
詳細は read me を読んで下さい。

→  CodeRedKiller v1.1

石井 さんからのコメント
( Wednesday, August 08, 2001 02:16:33 )

日曜日にコメントしたものです

昨晩,前薗さんのPlug-inを入れてから安定して稼働しております.
しかも昨晩からフレッツADSLになって,Timbuktsuによるリモート管理も
快適です.

今回の件では,田中先生をはじめ,Plug-Inを提供してくださった前薗さん
をはじめ報告して情報提供していただいた皆様
大変ありがとうございました.
これからもMacでインターネットサーバーの維持につとめたいと思います

田中求之 さんからのコメント
( Wednesday, August 08, 2001 08:57:04 )

Code Red Killer 1.1 の設定を行おうとして QPQ 1.0 で pi_admin.crk にアクセス
しようとすると、エラーが起きて設定ページにうまくいけないのですが、他の
みなさんはどうでしょうか? 1.0 なんてバージョンで動かしているのが問題
なのかもしれませんが。

デフォルトの処理はちゃんと行われます。

前薗 健一 さんからのコメント
( Wednesday, August 08, 2001 09:37:29 )

あらららら。

やっぱり W*API のバージョンの問題がでましたかね?
どんなエラーでしょうか?

やっているのは WSAPI_Run をハンドルして ScriptName が
/pi_admin.crk だったらリソースから admin のページデータを
読み込んでブラウザに返すという W*API v1.0 からサポートされて
いることなんですけど。

ちなみに 'STR ' リソースの ID 128 の内容を GET/HEAD/file name
と直接書き換えても機能するはずです。 

前薗 健一 さんからのコメント
( Wednesday, August 08, 2001 09:53:12 )

QPQ v1.0.2 でテストしてみたのですが、/pi_admin.crk で
動作確認しました。

田中求之 さんからのコメント
( Wednesday, August 08, 2001 11:32:47 )

v1.0 固有の問題だったみたいですね。1.02 でうまくいくなら OK でしょう。
お手数かけました。

前薗 健一 さんからのコメント
( Wednesday, August 08, 2001 12:54:22 )

W*API のドキュメントを読み返していたら、WSAPI_Filter のパラメータ
ブロックの扱いに潜在的なバグがあるのを発見したので、修正したものを
作りました。

pb->param.filter.request を NULL Terminate String と仮定しては
いけないそうです。そう仮定して string 関数を使っていました。(^^;

たまちゃん さんからのコメント
( Thursday, August 09, 2001 06:34:55 )

前薗さん:

MacInTouch の Reader Report に CRK が紹介されました。それを
見た WebSTAR-Talk の購読者が「誰か試した?」状態になっていま
す。

我々が英語をおそれるように,日本語におそれをなしているようで
す。

簡単な英語のドキュメントをくっつけてはどうでしょうか。

just drag this plug-in into Plug-Ins folder and it should
work

てな具合に。

→  Reader Report: Code Red Worm

前薗 健一 さんからのコメント
( Thursday, August 09, 2001 09:57:22 )

Web ページとドキュメントに英語を含めました。
変な英語だけど、通じないことはないでしょう。(^^;

→  Code Red Killer

たまちゃん さんからのコメント
( Thursday, August 09, 2001 10:11:08 )

前薗さん。早速対応していただき有り難うございました。

WebSTAR-TALK の方へは先ほど投稿しておきました。

たまちゃん さんからのコメント
( Thursday, August 09, 2001 10:21:56 )

>WebSTAR-TALK の方へは先ほど投稿しておきました。

投稿してものの2分と経たないうちに質問が来ました。(^_^;;

適当にあしらっておきますので,まかせておいてください。

前薗 健一 さんからのコメント
( Thursday, August 09, 2001 10:34:55 )

to たまちゃんさん

ありがとうございます。
ドキュメントには

Suggetion and bug report

Web Scripter's Meeting
http://mtlab.ecn.fpu.ac.jp/webcon.mtxt

と書いておいたんですけど...

たまちゃん さんからのコメント
( Thursday, August 09, 2001 10:43:02 )

何にも読まずに質問してきたんですよ。「お前のページ(ではない
んですけど)はまだ日本語が入っていて読めない。どこでダウンロ
ードできんねん。」みたいな。英語のフォントが入ってないのかし
ら。

すみません本当に。

p さんからのコメント
( Thursday, August 09, 2001 10:57:42 )

あのう。
ダウンロード用のページの背景色指定の記述に文法エラーがあります。

日本語より先に英語を出しておいたほうが喜ばれるかと。
日本人向けの説明は一番下でいいので。

前薗 健一 さんからのコメント
( Thursday, August 09, 2001 11:08:32 )

あららら、本当だ。

<body bgcolor = "#ffffff)">

になってました。

<body bgcolor = "#ffffff">

に直しました。御指摘ありがとうございます。

前薗 健一 さんからのコメント
( Sunday, August 12, 2001 16:02:21 )

Logging オプションを設定できる Code Red Killer v1.1.2 を作ってみました。

Status Window および Log ファイルに、例えば

!!CodeRedKiller-PLUGIN  08/12/01  13:50:08  WARNING Code Red !!!!!!!!

と、記録されます。
サーバによっては Status Window には表示されません。
ログのフォーマットは変更できません。


→  Code Red Killer


あゆみ さんからのコメント
( Tuesday, August 14, 2001 09:54:39 )

前薗さんのCodeRedKillerは重宝しております.ありがとうございます.

ただ,CodeRedKillerの亜種か,おそらくdefaul.idaなしで,
後ろの"XXXX...=a"の部分だけで攻撃をかけてきたサイトがありました.
#今のところ確認できましたのは1件だけです.

CodRedKillerで引っかけられないので,エラー処理に回っていました.
当方はWebSTAR 3.0.2ですので何ともなかったですが,QPQ 1.xだと
またクラッシュするのではないかと思われます.

参考になりましたら幸いです.

稲垣 さんからのコメント
( Tuesday, August 14, 2001 10:40:41 )

 私のサイトにも上記のファイル名のないアクセスがきていました。
とりあえず、私のところは8/14 7:26頃に1度アクセスがあったきりでした。

 私も報告まで・・・。

 にしても、CodoRedはまだきていますが、なかなか収まらないですね。

前薗 健一 さんからのコメント
( Tuesday, August 14, 2001 11:04:07 )

なんか、ここまでくるとたんなる嫌がらせですね。

確定要素としては "XXXX..." でしょうか。こちらでも調べてみます。

前薗 健一 さんからのコメント
( Tuesday, August 14, 2001 14:55:12 )

'X' が 224 bytes 連続を確定要素にはできそうですね。

ただ、あゆみさん、稲垣さんからの報告しかないので、worm が自動的に
アタックしているというよりも、誰かが手動で悪戯をしている様な気も
しないではないです。

実装は簡単ですが、もう少し様子を見ませんか?それでは遅い?

それに、この会議室で CodeRedKiller plug-in の手の内を見せたら、
それを読んだ悪意のある人間がそこを突いて悪戯をする可能性もなきにしも
あらずだと思います。難しいところですね。

稲垣 さんからのコメント
( Tuesday, August 14, 2001 15:21:34 )

 私のところは、X Server 10.0を使っているので私としては対策の必要は
ないのですが、たまたま自分もログを見たら同様のログがあったので、報告
をしました。

 また、あゆみさんの所でもファイルが見つからないエラーとなるだけで、
システムエラーになるわけではなさそうですので、至急ではないと思われ
ます。
#この辺はユーザーにテストしてもらうしかないでしょうけど・・・。

 まあ、世間は盆休みかなにかで、見ていない人が多いからじゃないですか?
同様のログなどがあったら、再度報告をあげます。


BOSS さんからのコメント
( Tuesday, August 14, 2001 15:21:37 )

Code Redが流行したために、にわかに話題になっているようですが、
QPQは、Linuxなどで動作するセキュリティスキャナを使った疑似攻撃
でもクラッシュしてしまいます。

私はW*APIは知らないのでよく分かりませんが、
Code Redだけではなく、バッファオーバーフローを狙う攻撃一般から
身を守るように、汎用性を持たせられないでしょうか?>前薗さん

あゆみ さんからのコメント
( Tuesday, August 14, 2001 15:37:59 )

 私のところも実害はありませんので,対策はしばらく様子を見てからというのに
賛成です.その後は同じ形式のアタックはありません.
ちなみに,ログに残っていたのは 166.114.102.41 でボリビアからのお客さんでした.

 現在は通常のCode Redと,.asp,.phpと.php3をindex, default, main, homeにつけて
片っ端からスキャンかけているのが記録されている程度です.

前薗 健一 さんからのコメント
( Tuesday, August 14, 2001 16:07:17 )

今回の問題の根本的な原因は バッファオーバーフローにあるので、
サーバがどのくらい HTTP Request 用のバッファを確保して
いるかが判明すれば対処はできますが、それは私には判らないこと
です。テストして解析すれば、だいたいの値は判るとは思いますが...

Code Red では search args に約 390 bytes + HTTP header ? bytes
です。おそらく QPQ 1.X では HTTP Request のバッファを固定で持って
いるのだと思います。

例えばユーザの責任で 1024 bytes 以上の HTTP Request は reject
するといった実装はできますが、その判断はあくまでユーザの責任になり
ます。

前薗 健一 さんからのコメント
( Tuesday, August 14, 2001 16:32:09 )

HTTP Request の byte 数は判りますので Code Red Killer 1.1.2 の logging 機能を
拡張して、例えば

!!CodeRedKiller-PLUGIN  08/12/01  13:50:08  WARNING Code Red !!!!!!!! 1024 bytes

というように HTTP Request の byte 数を記録するようにして、それを皆さんに
テストしていただいて MIN/MAX/AVE の統計を出すということは可能ですね。

あゆみ さんからのコメント
( Tuesday, August 14, 2001 19:20:49 )

> !!CodeRedKiller-PLUGIN  08/12/01  13:50:08  WARNING Code Red !!!!!!!! 1024 bytes
> というように HTTP Request の byte 数を記録するようにして、それを皆さんに
> テストしていただいて MIN/MAX/AVE の統計を出すということは可能ですね。

byte数の表示は便利ですね.亜種の監視にも役立ちそうです.

#毎日同じくらいのアクセスが続いて,収まる気配がありませんね.
 いつになったら収束するんでしょうね.

BOSS さんからのコメント
( Tuesday, August 14, 2001 19:26:31 )

なるほど、可能なのですね。
いくつかのパターンで、ブラウザを使って長いリクエストを送ってみ
たところ、ちょうど何バイトかはわからないのですが、二百数十文字
程度のリクエストでクラッシュするようです。

指定バイト数以上の Request を Reject する機能を追加していただ
けると、うれしいです。

ehara さんからのコメント
( Wednesday, August 15, 2001 16:49:22 )

CodeRedKillerをQPQ1.02に入れていますが、このところ、2日に1度くらいの頻度でタイプ2のエラーが出て終了します。
やはりオーバーフローを起こす新種のせいでしょうか。

江原

aki さんからのコメント
( Thursday, August 16, 2001 20:12:24 )

CodeRedKillerをQPQ1.02に入れていますが、このところ、2日に1度くらいの頻度でタイプ2のエラーが出て終了します。

当方でも同じ症状です。しかし、Webstar2.1にして、このpluginを入れたら問題なくなりました。ああ〜よかった。ホッとしました。
なにが違うのでしょうねQPQとWebstarは?
なにしろ朝方になるとコケてましたからね。

前薗 健一 さんからのコメント
( Friday, August 17, 2001 05:36:25 )

バッファーオーバーフローに対応した v1.1.3  をリリースしました。
試してみてください。

→  Code Red Killer v1.1.3

BOSS さんからのコメント
( Friday, August 17, 2001 15:33:28 )

v1.1.3試してみました。

汎用バッファーオーバーフロー対策機能、すばらしい!、便利です。
これで、やっとQPQもインターネットサーバーとして使い物になりそうです。
ありがとうございました。

BOSS さんからのコメント
( Friday, August 17, 2001 20:14:00 )

しばらく様子を見ていて気がついたのですが、

オプション設定の Misc. Logging をチェックするとログに記録されず、
チェックを外すと記録されるのですがこれは正しい動作ですか?

それから、Rejectしたときのログの先頭にいつも、
%02d/%02d/%02d %02d:%02d:%02d
のような文字が出るのですが、私の環境だけでしょうか?

たまちゃん さんからのコメント
( Friday, August 17, 2001 20:49:03 )

以前に触れましたが,Windows ユーザのために QPQ 1.0.2 のインス
トールマニュアルもどきのものを書きました。

Code Red Killer の設定についても触れています。

Windows ユーザ(特に IIS の管理者)に読んでもらえるといいと
思います。皆さんは読まなくていいですよ。(^^)

→  Windows (IIS) ユーザのための Quid Pro Quo 1.0.2 インストールメモ

前薗 健一 さんからのコメント
( Friday, August 17, 2001 21:10:43 )

> ログに記録されず

Activity Log Window のことでしょうか?
WebSTAR では Logging をオンにすると WebSTAR.log に記録され
Status Window にも表示され、オフにすると Status Window のみ
に表示されます。
QPQ の場合、オンにするとserver logfile には記録されて Activity Log Window
には表示されません。オフにすると Activity Log Window に表示されます。
WebSTAR と QPQ では W*API の実装が違います。

> %02d/%02d/%02d %02d:%02d:%02d

こちらでは例えば 17/08/01 21:08:10 つまり dd/mm/yy hh:mm:ss
のフォーマットで表示およびログへ記録されています。

BOSS さんからのコメント
( Friday, August 17, 2001 21:54:06 )

>Activity Log Window のことでしょうか?
その通りです。
Activity Log Window に表示されるのはログに記録された内容だと
ばかり思っていました。 失礼しました。

>こちらでは例えば 17/08/01 21:08:10 つまり dd/mm/yy hh:mm:ss
>のフォーマットで表示およびログへ記録されています。

そうですか、こちらではログ、表示、どちらも、
%02d/%02d/%02d %02d:%02d:%02dになっています。
LC475/漢字Talk7.5.5/QPQ1.0.2という組み合わせです。
環境による問題でしょうか、目的ははたしているので問題ないです。
お答えいただき、ありがとうございました。

田中求之 さんからのコメント
( Friday, August 17, 2001 22:34:42 )

>%02d/%02d/%02d %02d:%02d:%02d

printf (だっけ?)のフォーマット指定が、そのまんま印字されているみたい
ですね。

漢字 Talk 7.6.1 が入った Q800 が研究室にありますので、日曜日にでも
再現するかどうか私の方でもテストしてみますね。

sig さんからのコメント
( Saturday, August 18, 2001 15:27:30 )

Code Red Killer v1.1.3 を使わせて頂いています。
Activity Logに表示される
WARNING Code Red !!!!!!!! 442
の442はHTTP RequestのBytes数を表示しているのでしょうか。

ちなみにpi_admin.crkのReject Over 442 HTTP Request
と指定すると正規のRequestがRejectされ、Activity LogにそのSize?が494と表示されますのでとりあえず500と指定して運用していますが、HTTP Requestが500Bytesもあるとは
自分のSitesのFile構成とFile名からして考えられないのですが、これを正確に掴む方法を教えてください。

前薗 健一 さんからのコメント
( Saturday, August 18, 2001 15:48:40 )

HTTP Request のサイズというのは HTTP Header 全体のサイズのことです。
詳細は W*API のドキュメントを参照してください。

sig さんからのコメント
( Sunday, August 19, 2001 11:05:28 )

前薗さん ありがとうございました。
QPQ1.0.2は半月振りに元気な朝を迎えました。
Code Red Killer v1.1.3は素晴らしいです。

HTTP RequestのSizeを400bytes〜1024bytesの間の値を指定してSimulationをしてみました。私のSitesの場合は500Bytesで正規のHTTP Requestが問題なく実行されましたので500bytes以上のHTTP RequestはRejectするように指定しました。


ERA さんからのコメント
( Sunday, August 19, 2001 12:24:25 )

CetrisでQPQ1.0.2の環境です。

v1のCode Red Killerではタイプ2のエラーが2日に1度くらいの割合で起こるので、Code Red Killer v1.1.3 に変えてみたのですが、今度はタイプ1のエラーが1日に1度くらいの割合で起こります。

QPQには10Mのメモリーを割当てているのですが、エラーはこのPlug-inと関係があるでしょうか。ほかにはTimbkutuを入れていますが、今回のワーム騒動までは全く順調でした。

前薗 健一 さんからのコメント
( Sunday, August 19, 2001 12:49:13 )

オプションの設定はどうなっていますか?

田中求之 さんからのコメント
( Sunday, August 19, 2001 13:43:08 )

>漢字 Talk 7.6.1 が入った Q800 が研究室にありますので、日曜日にでも
>再現するかどうか私の方でもテストしてみますね。

テストしてみました。私のところでも、ログファイルの記録は

08/19/1  13:09:12  OK  /  3565  GET  
!!CodeRedKiller-PLUGIN %02d/%02d/%02d  %02d:%02d:%02d  WARNING Code Red !!!!!!!!  597
!!CodeRedKiller-PLUGIN GET /
(以下、リクエストの記録は省略)

というようになっています。日付データの部分がちゃんと文字列になっていない
ですね。

Qudora 800 + KT 7.6.1 + QPQ 1.02 です。
Plugin の設定は codered.html へのリダイレクト
容量によるチェックは行っていません。


なお、Phantom で動かしているほう(MacOS 8.1 + QPQ 1.02 plugin は 1.11)
で、タイプ2で QPQ が終了するという現象が起きていました。

Q800 の方では、今のところ落ちてませんが、この後 Macbug を入れて、
ストレステストを行ってみます。

前薗 健一 さんからのコメント
( Sunday, August 19, 2001 14:30:05 )

!!CodeRedKiller-PLUGIN %02d/%02d/%02d  %02d:%02d:%02d  WARNING Code Red !!!!!!!!  597

の最後の 597 が有効ということは sprintf の問題ではないですね。
こちらでは 68k のテストはできないのですが、考えうることを
やってみます。

田中求之 さんからのコメント
( Sunday, August 19, 2001 14:33:59 )

>Q800 の方では、今のところ落ちてませんが、この後 Macbug を入れて、
>ストレステストを行ってみます。

3000 回ぐらいのアクセスでは落ちませんね。とりあえず、Heap などにも
これといって問題の起きそうな変化は起きていませんでした。

前薗 健一 さんからのコメント
( Sunday, August 19, 2001 16:21:33 )

日時表示の部分を推測で修正してみました。
あと QPQ の Activity Log Window の表示を変更しました。

テストしてみてください。

→  CodeRedKiller114b1

BOSS さんからのコメント
( Sunday, August 19, 2001 16:56:56 )

残念ながら、私の環境ではv1.1.3と同じ結果でした。
実際に68kマシンがないと修正は難しいですよね。

前薗 健一 さんからのコメント
( Sunday, August 19, 2001 17:16:53 )

テストありがとうございます。

あと、ふたつほどアイデアがあるので、少々お待ち下さい。

前薗 健一 さんからのコメント
( Sunday, August 19, 2001 19:07:46 )

今度はいかがでしょう?

URL は上記と同じです。

BOSS さんからのコメント
( Sunday, August 19, 2001 20:26:15 )

起動時に、プラグイン名が表示されるところで、
%s v.%s: Running.
とでます。

Reject した部分のログは、
%s %s %d bytes received.
になってます。

それから、Misc. の設定がうまくできません。Saveすると、
Reject over [0] bytes HTTP Request.
になってしまいます。

前薗 健一 さんからのコメント
( Sunday, August 19, 2001 20:54:50 )

どんどん、はまっていっていますね。(^^;
こちらでテストできないものは no support とさせてください。

BOSS さん、ありがとうございました。不便でしょうが、v1.1.3 に
もどしてください。