タグ別アーカイブ: CAPTCHA

YY-BOARDのCAPTCHAは破られている?

長らくYY-BOARDの5.33というバージョンを使っていましたが、スパムの自動投稿に耐え切れなくなった辺りで6.3にCAPTCHAが実装されたことを知り、バージョンアップ。ですが結果は惨敗でした。YY-BOARDはものすごく人気がありもの多くのユーザーが使っていたため、自動投稿ツールの方が画像解析能力を備えたのでしょう。

YY-BOARDのCAPTCHA画像はデータが埋め込まれているため、高度なOCR機能ではなく簡単なパターンマッチングで破られてしまったのではないかと考えました。これを確かめるため、また自動投稿ツール側の能力がどれ程のものか、戦いを挑むつもりでCAPTCHA画像を変えてみた経緯を書き留めておきます。

まずは方針ですが、以下の可能性をチェックすることにしました。

  • 暗号化アルゴリズムが破られている
  • CAPTCHA画像が解析されている

結論から言えば、現時点で前者の可能性は低く、明らかに後者であると言えます。

前者は、YY-BOARDで使われている「ゆいさんの簡易暗号化サブルーチン」のチェックとなります。「ゆいさん」と言えばかつてチャットが流行っていた頃、「ゆいちゃっと」で一世を風靡し、精力的にプログラムを開発されていた方です。私がPerlの勉強を始めた頃、そのプログラムコードを覗いて見ましたが高度過ぎてチンプンカンプンだった記憶があります。ゆいさんのHPは既に閉鎖されているため、このサブルーチンはYY-BOARDに添付されているものか、パソコンおやじさんのCAPTCHAによるBBSスパム対策で再配布されているものだけのようです。

さて、暗号化アルゴリズムのことはさっぱり分からないのでその強度についてアレコレ言えませんが、ソフトウェアとして公開されているためアクセスを重ねると秘密鍵がバレてしまうのかも知れません。そこで正解とは異なる数字を表示してみたり、サブルーチン中のハッシュテーブルを差し替えてみたりと、あれこれ試してみましたが、スパマーはピタリと表示されている数字を当てて来ました。よって現時点では暗号化が破られている可能性は低く、画像が解析されていると言って良いと思います。

次に後者をチェックするため、画像自体をデザインし直してみる実験を行いました。FONTS 500とかdafont.comとかからフリーで使えるフォントをダウンロード→PCにインストール→カウンター画像を作る要領でgif画像やpng画像を作り、gifcat.plやpngren.pl (開発者のサイトは既に閉鎖されているもよう) で出力するように変えてみたところ、結果は次のようになりました。

  • gifでもpngでもカチッとしたフォントは、フォントサイズに依存せずにそれなりに解析してくる
  • 手書き風で崩れた感じのデザインフォントは、解析に失敗し誤った数字を投稿してくる
  • アルファベットには対応していない

おそらくOCRと言う程のものではなく、簡単な相関演算で最も類似性の高い数字を選んでくるだけなのでしょう。画像を差し替えればスパム投稿を十分防げるということが分かりました。1種類の画像であればYY-BOARD中のファイルregistkey.cgiで定義されている関数key_imageの最後の数行付近

#-------------------------------------------------
#  投稿キー画像
#-------------------------------------------------
sub key_image {
	...(略)
	print &gif_head;
	print &gif_body;
	print "x3B";

	exit;
}

#-------------------------------------------------
#  投稿キー画像
#-------------------------------------------------
sub key_image {
	...(略)
	require "./lib/gifcat.pl";
	my @files = map("$gif_path/$_.gif", (split //, $plain));
	print &gifcat'gifcat(@files);

	exit;
}

などと書き換えれば(縦横のサイズを統一した)任意のCAPTCHA画像を出力できます(gif画像は$gif_pathの下、gifcat.plはlibの下に置いてある場合を想定)。画像を何種類も用意してランダムに切り替えるようにすればなお良いと思います。

ところで、英数字画像を使ったCAPTCHAはキカイだけでなくヒトにも読みにくく、ストレスの元です。キカイとヒトを見分けるのが目的なら他の手段もあるのでは? この件は後日考察をしてみたいと思います。