春の訪れも聞こえ始めた今日この頃、皆様いかがお過ごしでしょうか?
まだ3月だと言うのにセキュリティ界隈では大口な話題がポンポンと出ていますね。
2月にはWordPressの過去最大級の脆弱性があり、150万のサイトに被害が出たとの報道もありました。
WordPressの脆弱性対策について
そして、最近ではJavaのWebフレームワークであるStruts2に重大な脆弱性が発覚し、都税納付サイト等が被害を受けているようです。
Apache Struts2 の脆弱性対策について(CVE-2017-5638)(S2-045)
さてさて、前置きが長くなりましたが、今回のお勉強会は久々のTBKハッカーズマニュアルシリーズ
ま、シリーズと名乗ってますが、イマイチ定着している感が無いので、頑張らないといけません。
でもね、セキュリティ系のサンプルやデモって環境作るのが、とっても難しいんですよ!
影響を限定的にしつつ、さもありなんな環境を作るのって!!
と、くだらない愚痴をこぼしてしまいましたが、今回のテーマは
「Webアプリケーションデバッグ」です。
アプリケーションを作る上でデバッギングは最重要な問題です。
Microsoft系ならVisual Studio、JavaならEclipseなど強力な統合開発環境があるのでデバッギングってやりやすいんですけど、Webアプリケーション、特にフロントサイドのJavaScriptのデバッギングってチョット前までは結構難しくて、functionの中にalertなんかを書いて変数のデバッグをしていた記憶があります。でも最近では、ブラウザの開発者ツールが充実していますので、コンソールに出力してって感じになって、いちいち画面に出力なんかはしないですよね。
業務でもブラウザの開発者ツールを使うのですが、同僚の使い方なんかを見ていると、開発者ツールをうまく使えていなかったり、そもそも存在すら知らなかったり等も見受けられたので、開発者ツールの使い方を紹介してみました。
各社ブラウザの開発者ツールですが、正直私も全部を使い切れていません。それくらい機能が豊富で、簡単なフロントサイドの開発はほとんどこれで賄えてしまうのでは無いでしょうか。
NodeJSの出現以降、JS界隈って大きく変わった印象ですね。
AJAXでJavaScriptが隆盛になって、NodeJSの出現でパッケージ管理等の仕組みが整ったことで、各フレームワークが乱立している感じです。
もう、ある意味JS界隈はカオスです(笑)
各社ブラウザがECMAScript6に完全対応してきたら、状況が落ち着いてくるのかな…なんて思ってはいますがどうでしょ。
各社ブラウザのES6対応状況
※ ちなみにECMAScriptはJavaScriptの標準のことで、狭義ではJavaScriptはMozilla系のスクリプト言語のコトです。ただし、JavaScriptという呼び名が一般化していますので、JavaScriptといえばECMAScriptを含んだ幅広い意味で使われる事が多いですね。
で、ここまで持ち上げたブラウザの開発者ツールですが、あくまでもブラウザ内部でのデバッグなのでブラウザ – サーバ間のデバッグには弱いです。
例えばFORMで入力した内容を書き換えたいやCookieを書き換えたいなどの欲求には対処出来ません。
まぁ、アドオンや機能拡張を使えばそれなりのことが出来たりしますが…
そこで必要なのがWebプロキシツールです。
今回の勉強会紹介したのは、Fiddler、OWASP ZAP、Burp Suiteの3つです。
これらはWebアプリケーションの脆弱性診断にも用いられるツールで、HTTPセッション情報が一覧で見れて、リクエストの詳細、レスポンスの詳細が見えて、一時的に通信を遮断できて、パラメータを書き換えられたりします。
中には、自動診断も出来るものもあります。
機能がありすぎて細かくは説明できませんでしたが、デモを通じて、色々と操作していっていただければ良いのかなと思う次第です。
ちなみに、FiddlerとBurp Suiteはメニュー等は英語表記でOWASP ZAPは日本語化対応されています。
続いては、過去のハッカーズマニュアルでも利用した自作脆弱性サイトへの攻撃デモを行いました。
今回はサイトをバージョンアップさせて、OSコマンドインジェクションやディレクトリトラバーサル等を追加してみました。
デモではFiddlerを使って、リクエストの書き換えなんかを行ってみながら、各種脆弱性を突いた攻撃を見てみましたが、ほーってくらいは思っていただけたのではないかと思っています。
デモ用サイトはGithubにあげていますので、実際に手を動かしてみて理解していただければ良いのかなと思います。
脆弱性サイト
脆弱性サイトは今回Dockerを使ってみたりしたため、Dockerのネットワーク周りでかなり悪戦苦闘しました。
直前に、脆弱性があるのがわかりきっているサイトのバグ修正とか意味のわからん作業をしたりもしましたが、勉強にはもってこいだと思いますので、皆さん是非ご利用してみてください。
何だか愚痴が多くなってしまった内容になってしまいましたが…
では、このへんで失礼致します。