凪瀬 Blog
Programming SHOT BAR

目次

Blog 利用状況
  • 投稿数 - 260
  • 記事 - 0
  • コメント - 2208
  • トラックバック - 192
ニュース
広告
  • Java開発者募集中
  • 経歴不問
  • 腕に自信のある方
  • 富山市内
  • (株)凪瀬アーキテクツ
アクセサリ
  • あわせて読みたい
凪瀬悠輝(なぎせ ゆうき)
  • Java技術者
  • お茶好き。カクテル好き。
  • 所属は(株)凪瀬アーキテクツ
  • Twitter:@nagise

書庫

日記カテゴリ

 

CAPTCHAをご存知でしょうか。
スパム防止のために歪んだ文字とかを入力させる、アレのことなのですが、 はてなのCAPTCHAの強度が妙に低く思えたので検証してみました。

CAPTCHAというのはいわゆる逆チューリングテストという奴で、 人間には可能だが機械には処理しにくいことをさせることで、 ロボットによる操作を弾こうというものです。

たとえば、Gmailのユーザ登録には以下のような画像が表示され、 表示されている文字を入力することが求められます。

CAPTCHAの強度

例えばスパムを送るために大量のGmailアカウントを得ようとしてる人がいたとします。 手作業でGmailを登録するのは骨が折れる。 そこでプログラムによる機械化を試みることになるわけです。

その際、障壁となるのがこのCAPTCHAなのです。 この画像から正解である文字列"vittac"を得ることは機械には難しい
プログラミング初心者にはどのようなプログラムを書けばそのようなことが 可能になるか想像もつかないでしょうし、プログラムをある程度かじった人間なら これがいかに難しいことか容易に想像がつくと思います。では、その難しさはどこからくるのか?

ちょっと古い記事になりますが、Radium Software DevelopmentにCAPTCHAの強度に関する記事 「Breaking CAPTCHAs with NNs」 がありました。

CAPTCHAをプログラムで破ろうとする場合、 プログラムは二つの過程を経ることになります。 それは、文字の分割と認識です。

まずは、個別の文字を切り分けなくてはなりません。 それから、その個々の文字が何であるかを判別するのです。

先の記事によると、CAPTCHA破りにおいて難しいのは分割のほうであり、 認識はさほど難しくないとあります。

はてなのCAPTCHAを破る

さて、はてなのCAPTCHAですが、アカウント登録していないユーザが書き込みを行おうとすると 以下のような画像と入力欄が表示されます。

しばらく利用していれば、この画像には0-9とa-fまでの16種類の文字しか表示されない ことに気が付くことでしょう。 10回画像を表示して、並べて見ると以下のようになりました。

どうも文字の表示位置は決まっているように思いませんか?
固定のフォントで固定の位置に幾分色を変えて表示した文字に、ノイズを多少加えたモノのようです。 背景色は同じグレーです(ノイズはjpg化する際に乗るブロックノイズと思われる)。

位置が固定なので、座標を直接指定して文字を切り出します。 この切り出し過程は非常に容易です。あらかじめ、いくつかの画像をもとに、 文字の表示される位置を計測しておくだけでよい。

次に、色の違いをそろえるために白と黒の2値化します。 背景色が一緒なのでその色だけ背景として除去する方法も考えられますが、 jpg化に伴うモノとみられるブロックノイズが乗っていますので、 そこまでの手抜きはできませんが、単にRGBのどれかが0x80以下のものを黒、それ以外を白という 単純な条件判断で綺麗に2値化できてしまいます。

以上の過程を経て抽出文字を複数個サンプリングして、 論理和をとってノイズが乗っていない生のフォントを抽出します。

さて、あとは、これを実際の画像と重ねて一致率を見ます。
一致するピクセルと、しないピクセルの比率を計測するわけです。 ノイズは線が加わるだけなので、もともとのフォントで黒の部分が白になることはありません。 元フォントの黒部分に対して判別対象が黒であることを確認すれば用が足ります。
さらに文字が16種に限られるため、ループ回数も少なくて済むため軽い。 このうち、もっとも一致率の高いものが元の画像であると判断するようにプログラムしてみました。

さて、テストとして、以下の画像を読み込ませます。

そして、結果はこの通り。

左端のフォントが論理和をとった画像。右は元になった画像です。 上図ではサンプル数が20個程度と少ないのでノイズが除去し切れていませんが、 かなり容易に文字が抽出できることがわかると思います。

このプログラムに何個かのCHAPCHA画像を読み込ませて見ましたが、全て認識することが出来ました。

以上ではてなのCAPTCHAを破ることができたわけですが、ポイントは以下の4つ。

  • 文字の位置がドット単位で固定であるため切り出しが非常に容易
  • 色が限られるため、2値化することが非常に容易
  • ノイズが加算に限られるためパターンマッチングが非常に容易
  • 文字種が少ないため高い精度で認識しやすい

今回、検証のために書いたプログラムはJavaでおよそ200行程度です。 製作時間は1.5時間程度。swingによるUIがありますから、 純粋なCAPTCHA破りロジックは100行程度になります。 スパマーによる悪用の可能性があるため公開はしませんが、 プログラムに慣れた人間であれば短時間にCAPTCHA破りのコードを書くことができるわけです。

はてなのblogはシェアも大きいですから、コメントスパムの標的にされることは多いと思います。 その点リスクは高く、このように安易に破られるCAPTCHAの実装では、 早晩スパマーによってコメントスパムで荒らされるのではないでしょうか。

2008/03/10追記

費用対効果について「 はてながCAPTCHAの費用対効果で見落としていること」にて考察しました。

投稿日時 : 2007年10月26日 20:21
コメント
  • # re: はてなのCAPTCHAは簡単に破れる
    さかもと
    Posted @ 2007/10/26 20:58
    技術があってもこういう視点がないと・・・。

    技術+視点ということで、だつぼーです。

    さすが凪瀬さんだと納得しました。

    いえ、お世辞ではなく。


  • # re: はてなのCAPTCHAは簡単に破れる
    凪瀬
    Posted @ 2007/10/26 21:41
    この手のネタは危なげなので書くのを躊躇するんですけどね…。
    守るには攻撃側の視点が必要になるってアレですよ。
    別に技術的には先駆的なことをしているわけでもありませんし。

    一応、はてなアイデアにも投稿してあります。
    はてなの対応やいかに。
  • # re: はてなのCAPTCHAは簡単に破れる
    凪瀬
    Posted @ 2007/10/26 22:36
    はてなアイデアへのトラックバック
    http://i.hatena.ne.jp/idea/17563
  • # re: はてなのCAPTCHAは簡単に破れる
    裏口
    Posted @ 2007/10/26 23:07
    こういうネタ大好きwww

    いや、HNとは無関係です。
    # なんか最近HN変えたい衝動に駆られてます。
    # 今更変更できないけど思い入れがなけりゃ変なHN付ける
    # べきじゃないって思っただけです。
  • # re: はてなのCAPTCHAは簡単に破れる
    RUN
    Posted @ 2007/10/26 23:51
    ども、多分初めましてかな?

    手入力文字認識系のプログラムはわずかながら縁があったので書かれている事は非常に納得しました。

    人間にとって見難い状態と、プログラムから見て見難い状態の違いへの理解度が重要って所ですよね。

    このはてなの件も、人間の目にはとっても見難くなってますからね。

    ここら辺の知識が乏しい人から見れば、人間にとって見難い=コンピューターにも見難い筈だって思い込みがあるのかと思います。
  • # re: はてなのCAPTCHAは簡単に破れる
    やじゅ
    Posted @ 2007/10/26 23:53
    CAPTCHAって言葉を始めて知りました。
    そういえば歪んだ文字入力させるのは
    デザインかお遊びと思ってましたので
    深い意味があったんですね。

    勉強になりました。
  • # re: はてなのCAPTCHAは簡単に破れる
    凪瀬
    Posted @ 2007/10/27 0:14
    もし、Webシステムを作る際にCAPTCHAの実装を要求されたならば、
    参考にしていただけると幸いです。
    (そんな人がどれだけいるのだろう…)

    また、システムを使う側の人でも、セキュリティ上の危険は
    察知できるようにあって欲しいと思います。
    技術者としては「知らなかった」という言い訳はしたくないものですが
    かといって全知全能であることは不可能ですから、
    相互の指摘によってサービスの質を向上したいものですね。
  • # re: はてなのCAPTCHAは簡単に破れる
    中博俊
    Posted @ 2007/10/27 0:29
    それ以前にキャプチャは絶対にやめていただきたい。
    うちのサイトには絶対につけません。
    No More Captchaです。
  • # re: はてなのCAPTCHAは簡単に破れる
    凪瀬
    Posted @ 2007/10/28 10:58
    ユーザに不便を強いるものであることはわかりますが、
    対スパムの現実解であるとも思います。
    「絶対につけてはいけない」と主張されるのであれば
    その根拠を示されてはどうでしょうか?
  • # re: はてなのCAPTCHAは簡単に破れる
    yama
    Posted @ 2007/10/29 12:35
    キャプチャは視覚障害者のことを考慮していないので、
    私も反対ですね。
  • # re: はてなのCAPTCHAは簡単に破れる
    凪瀬
    Posted @ 2007/10/29 14:55
    はてなアイデア側ではてなの見解が書かれていた。

    hatenaidea 『ご指摘ありがとうございます。完全な強度であるとはいえないと思いますが、今のところ被害はむしろスパム日記やトラックバックの分野に出ており、こちらに重点をおきたいと思います』 (2007-10-29 12:10:46)

    根本的にシステムを作り変える案でも持っているのかな?
    目先、大きな被害はないと思うけど、スクリプトキディではないクラッカーがその気にならないことを祈るばかり。
  • # re: はてなのCAPTCHAは簡単に破れる
    凪瀬
    Posted @ 2007/10/29 14:56
    キャプチャの存在意義については別エントリを設けないといけないかなぁ。
  • # re: はてなのCAPTCHAは簡単に破れる
    はとはと
    Posted @ 2007/10/29 16:00
    最低限画像と音声、セットにしないと意味がない気がする。
    ってこれは関係ない話題ですね(汗)
  • # いい検証てすね!
    hg
    Posted @ 2007/10/29 18:37
    たしかに簡単ですねぇ。
    ぐにゃぐにゃした文字のはやっぱり難しそうですね。
  • # re: はてなのCAPTCHAは簡単に破れる
    っd
    Posted @ 2007/10/29 21:49
    実際に破っての話じゃないんですか?
  • # re: はてなのCAPTCHAは簡単に破れる

    Posted @ 2007/10/29 22:58
    で、実は、kyeupを拾うとか別のチェックが本命で、こうやって送信したらoutにするための「おとり」だったりして。わたしはよくそんな手を使います。
  • # CAPTCHA祭り
    かつのりの日記2
    Posted @ 2007/10/30 0:31
    CAPTCHA祭り
  • # re: はてなのCAPTCHAは簡単に破れる
    AC
    Posted @ 2007/10/30 0:35
    破れるのは、はてなだけじゃないですよ
    http://takagi-hiromitsu.jp/diary/20060810.html#p01
  • # re: はてなのCAPTCHAは簡単に破れる
    凪瀬
    Posted @ 2007/10/30 1:22
    実際のところ、スパマーから見た費用対効果なわけです。
    プログラムをかじった人間なら、何が面倒で、何が簡単なのかはある程度予測がつく。
    歪んだり、回転したりしている文字をマッチングするのはちょっとやる気が起きないけれど、
    はてなのようなシロモノだったらちょっとコードを書くだけで破れてしまう。

    あまりにも破るのが簡単すぎやしませんか?という問題提起なわけです。
    はてブのコメントを見ていると、はてなのCAPTCHAを破った人が過去にもいるようですね。
    はてなに限らず、CAPTCHA破りをする場合に何が難しいかを把握せずに
    CAPTCHAっぽいものを作ってもあまり強い防壁にならない。
    とくに、はてななんかはメジャーなサービスになっていますから、
    小一時間で破れるなら破ってやろうと考える人がいてもおかしくはないですよね。
  • # re: はてなのCAPTCHAは簡単に破れる
    凪瀬
    Posted @ 2007/10/30 1:46
    さて、法律的にこういう記事はどうなのよ?という指摘もあったので、見解を書いておきます。
    電子計算機損壊等業務妨害の教唆になるんじゃないか?という指摘がありました。

    まず、CAPTCHAはパスワードではないので、CAPTCHAの手動の入力を
    機械によって置き換えること自体は犯罪とはならないと考えています。

    DoS攻撃などにより、はてなのサーバに損害を与えた場合、
    電子計算機損壊等業務妨害となるのは間違いないでしょう。
    ですが、単なるDoSと、CAPTCHAを破った上でのDoSと区別されるのでしょうか?
    この点についてはわかりませんが、そのものズバリの判例はないでしょう。

    見る人が見れば脆弱と分かるものを実証した、というのが教唆に当たるのか?
    これは線引きの難しい問題です。表現の自由との兼ね合いもありますし。
    TVなどでの空き巣の手口公開!とかやってる番組とかと扱いは近いのではないかと考えます。

    社会的な利益があると見て警鐘を鳴らしているものですから、
    判例を出すための人柱になるようなことがあれば、それも致し方ないと思っています。

    コレを見て悪用してはてなに損害を与えるような行為をすることは厳に謹んで貰いたい。
    また、類似のCAPTCHAの実装をしているシステムはできるだけ早く改修していただきたいと考えています。
    文字のサイズを可変にする、回転させる、歪ませるといったことで、
    小一時間で破れるようなものではなくなるのですから。
  • # ココログのCAPTCHAも貧弱らしい
    凪瀬 Blog
    Posted @ 2007/10/30 10:39
    ココログのCAPTCHAも貧弱らしい
  • # re: はてなのCAPTCHAは簡単に破れる
    AC
    Posted @ 2007/10/30 11:30
    このくらいで逮捕されるんなら、
    高木浩光氏はとっくにムショ暮らしのはずですよ。
  • # re: はてなのCAPTCHAは簡単に破れる
    凪瀬
    Posted @ 2007/10/30 11:45
    法律はコンピュータゲームのように安直にルールが適用されるようなものではないですからね。
    実情を鑑みて判断されるものですから、脆弱性指摘が問題となって裁判になってみないとわからないところでしょう。

    もっとも、セキュリティの指摘と称してクラッキングをデモして捕まった人も過去にいますので
    この手の話題をネタにする場合は十分に気をつける必要があるとは思っています。
  • # re: はてなのCAPTCHAは簡単に破れる
    TELCOM
    Posted @ 2007/11/01 0:13
    逆にCAPTCHA以外に何か面白セキュリティーを考えている人はいないですかね?
  • # CAPTCHAとスパマー
    凪瀬 Blog
    Posted @ 2007/11/03 18:06
    CAPTCHAとスパマー
  • # CAPTCHA解読ソフトの価格表に見るCAPTCHAのレベル差
    秋元@サイボウズラボ・プログラマー・ブログ
    Posted @ 2007/11/22 0:24
    via del.icio.us/popular Coding Horrorブログ...
  • # Gmail遮断の動き
    凪瀬 Blog
    Posted @ 2008/04/09 12:50
    Gmail遮断の動き
  • # Articles like this are an example of quick, helupfl answers.
    Cathy
    Posted @ 2011/07/10 10:41
    Articles like this are an example of quick, helupfl answers.
  • # ImageMagickでCAPTCHA生成
    こて丸
    Posted @ 2011/12/31 12:22
    こちらの記事を読んでImageMagickで一定の強度を持つCAPTCHAを生成する方法を書いてみました。
    どうでしょう、簡単には突破できないと思うのですが..
  • # ImageMagickでCAPTCHA生成
    こて丸
    Posted @ 2011/12/31 12:23
    こちらの記事を読んでImageMagickで一定の強度を持つCAPTCHAを生成する方法を書いてみました。
    どうでしょう、簡単には突破できないと思うのですが..
  • # I'm so glad I found my sulotoin online.
    Karsen
    Posted @ 2012/10/17 18:44
    I'm so glad I found my sulotoin online.
タイトル  
名前  
Url
コメント