やられアプリ BadTodo - 18 クローラへの耐性

前回:BadTodo - 17 認証(パスワードの強度・ログアウト) - demandosigno

「ウェブ健康診断仕様」の最後の項目 p.21「クローラへの耐性」を見ていきます。

インターネットに公開されているホームページは通常の利用者(人間)によるアクセスだけではなく、「クローラ」と呼ばれる自動プログラムによるアクセスを受けています。この「クローラ」とは、主には検索エンジンの検索データベースを作成するために、ウェブページのデータを回収するプログラムのことです。
このクローラは、データの回収にあたって、ホームページへ連続的にアクセスをするのですが、そのようなクローラによるアクセスに耐えられないという欠陥を抱えるウェブシステムが一部にあることがわかりました。
クローラは既にインターネットにおいては検索エンジンをはじめたくさん利用されており、たとえば国立国会図書館でも、政府・地方公共団体等の公的機関を対象に、自動収集プログラム(クローラ)によるインターネットで公開されている資料の収集が実施されている状況です。
大半の一般的なウェブサーバ・ウェブアプリケーションはまず問題ありません。しかし万一、クローラによるアクセスに耐えられないシステムであった場合、クローラのアクセスによりサーバがエラーを出したり、レスポンスが極端に遅くなったり、最悪の場合、ウェブサーバが停止するといった不具合が発生し、利用者に不利益となる可能性があります(可用性が損なわれる)

2010年に、図書館の蔵書情報を取得するため違法性のないクローリングを行った人が逮捕された事件があり社会問題にもなりました(後に不起訴となっています)。Librahack : 容疑者から見た岡崎図書館事件

ZAP、BurpSuiteでのクロール時の挙動

BadTodo - 2 ZAPでのスキャンにおいて、アクティブスキャンの実行時にエラーが起きました。またBurpSuiteでのIntruder実行時も同様のエラーとなりました。

「致命的エラー:セッション管理でエラー発生(セッション数の上限超過)」(ステータスコードは「503 Service Unavailable」)

ウェブ健康診断仕様では負荷のかけ方として「最大 0.5 秒に 1 回」となっています。
ZAPでのスキャン間隔はデフォルトでは 0ミリ秒なのでちょっと「普通のクロール」とは言えません。

しかし無料のBurpSuite Community Edition のIntruderは1秒間に1回程度のアクセスで、徐々に遅くなっていくようですので *1、この程度のアクセスでエラーとなってしまうのでは問題ありでしょう。

クローラ耐性診断ツール

GitHub - yukisov/web-sindan-crawler: IPA ウェブ健康診断仕様の「クローラへの耐性」を診断するコマンドラインツール
その名の通り「ウェブ健康診断仕様:クローラへの耐性」に記載された通りの仕様で検査してくれます。
・HTTP シリアルアクセスを行う。並列アクセスはしない。
・アクセス毎に 0.5秒待機する。
  5秒待っても反応が返ってこない場合は次のアクセスまで5秒待機する。
・aタグのhref属性からURLを取得する。
等々。

別記事「クローラ耐性診断ツール - demandosigno」で実際に検査してみました。
「診断結果: ○ 正常」問題なしでした。

補足

BadTodo作者の徳丸さんによると『クロールするだけでダウンするってのは結構大変なんですが、セッション管理機能を手作りしたことにより実現しました』とのことです。
脆弱性てんこ盛り やられアプリ Bad Todo 公開の儀 - YouTube

ZAPの検査ではログインを大量に繰り返した(かつセッション管理に不備がある)ためアプリケーションで保持可能なセッションの上限を超え『致命的エラー:セッション管理でエラー発生(セッション数の上限超過)「503 Service Unavailable」』となったと推測します。
一方の「クローラ耐性診断ツール」では「ウェブ健康診断仕様」に沿って「手動入力を必要とするフォームによる遷移は行わない」ため「問題なし」と判断されました。
とはいえ「ウェブサイトの作りによっては低頻度のアクセスでも閲覧に支障が出る」という点で、BadTodoのような作りにしてはいけないという見本になると思います。

次回:やられアプリ BadTodo - 19 ディレクトリ・リスティング - demandosigno

/* -----codeの行番号----- */