とある診断員の備忘録スマートフォン用の表示で見るとある診断員の備忘録この広告は、90日以上更新していないブログに表示しています。connpassこちらの勉強会は、「WordPress本体とプラグインの脆弱性をデバッガで追跡することにより、脆弱性の中身について詳しく追跡し、理解を深める」という内容のものであり、なんとあの徳丸浩さんが講師をされています!私個人としては、仕事というか半分趣味でゆるゆる脆弱性の検証をしており、今回の勉強会はまさに自分の興味分野にドンピシャな内容だったので、非常に楽しんで参加させていただきましたw私はこちらの勉強会にブログ枠として参加いたしましたので、勉強会の内容について本ブログにてレポートいたします。分析対象の脆弱性について今回分析する題材となった脆弱性は以下の二つです。二つの脆弱性とも徳丸さんが詳細な解説記事をブログにて公開されております。勉強会の冒頭にて徳丸さんより以下のような脆弱性分析のhow-toに関するお話しがありました。脆弱性情報はどこにあるのか?WordPressやCMSの脆弱性であれば米セキュリティ会社Sucuri社のブログがおススメ!https://blog.sucuri.net/正し、Sucuri社のブログは、書いてある内容はすごいけど、説明がちょっと不親切である(意図的にぼかしている?)。そのため、読んだだけでの完全理解は難しいので、自分で検証する必要があるとのことです。脆弱性を分析する方法には以下の3種類がある(複数組み合わせてやっても勿論OK!)。Concept)を試して動作を分析する(動的解析)2番の手法については、差分に脆弱性だけではなくて他の修正内容も含まれていることもあり、複雑なアプリケーションの場合などでは差分のコードを読んでもよく分からない場合が多いとのこと。3番の方法は比較的楽な方法である。今回の勉強会では、上記3番の方法をデバッガを利用して分析してみるという感じです。勉強会の冒頭にて、徳丸さんが脆弱性の内容を調べるモチベーションやブログとして公開する楽しさについてもお話しされていましたが、自分も非常に共感する部分がありました。脆弱性を検証するのって楽しいですよねw脆弱性分析をするための環境についてWordPressやプラグインはPHPを利用して作成されているので、動作を分析するために、PHPアプリをリモートデバッグできる環境を用意します。Xdebugを使用していました。NetBeansNetBeansはPHPに対応しているオープンソースのIDE。デバッグ用エクステンション。PHPなお、今回の勉強会の参加者には分析対象のVMデータを配布いただきました。今回の僕の記事もいただいた環境を利用して書かせていただいております。いただいた環境はUbuntuで構築されており、脆弱なWordPressと脆弱なプラグインデータなどがセットアップされていました。Xdebugもインストールされており、こちらの環境を利用すれば、すぐにリモートデバッグして検証ができるようになっているので非常にありがたかったです。余談ですが、実は勉強会に参加する前の予習として自分でもリモートデバッグできる環境をCENTOSで作成してみたのですが、ちょっと面倒くさかったです。Ubuntu等で作成するとapt-get一発でインスコできるみたいなので、後ほど自分でももう一回環境を作ってみようと思います。等)に設定情報を記載する必要があり、NetBeansを起動してリモートデバッグを行うホスト側の情報に合わせる必要があります。リモートデバッグをする準備NetBeansの初期設定まずはNetBeansを起動して、VMサーバ側にSSH経由にて、リモートデバッグをできるように設定する必要があります。1.NetBeansを起動して、メニューから[ファイル][新規プロジェクト]を選択2.プロジェクトを選択において「リモートサーバーからのPHPアプリケーション」を選択して「次>」を押す3.「プロジェクト名」・「ソースフォルダのパス」・「PHPのバージョン」を適当に設定して「次>」を押す4.リモート接続が定義されていないので、「管理」のボタンを押す5.新規接続を作成します。接続名は適当に入力して、接続型は「SFTP」に設定して「OK」を押す6.リモート接続の部分については接続したい先のホストに合わせた情報を入力して「OK」を押す※画像ではいただいたVMデータの情報を設定しています。事前にNetBeansを動作させているホスト側のhostsファイルを編集していたりもしています。7.プロジェクトURL・アップロードディレクトリを適切に設定して「次>」を押す※プロジェクトURLはブラウザでアクセス可能なURLを入力、アップロードディレクトリは、検証するコンテンツが配置してある公開ディレクトリのパスとなるように指定する。8.ディレクトリ・ファイルを選んで終了を押すとダウンロードが始まります。※ここではWordPressのコンテンツを丸ごと選択しています。9.ダウンロードが完了すれば、リモートデバッグできる状態となります。リモートデバッグのやり方NetBeansの上部の「プロジェクトをデバッグ」のボタンを押すと、デバッグ・セッションが実行され、以下のようなボタンが表示されます。後はお好みの場所にブレークポイント(実行中のプログラムを意図的に一時停止させる箇所)を設定して、こちらのボタンを操作すれば、デバッグをすることができます。NetBeansでは、エディタにて設定したい行の左マージンをクリックすれば、簡単にブレークポイントを設定できます。NetBeansでのデバッグについて、ちょっと調べてみたら以下などに細かく解説がありました。IDEのエディタでのPHPソース・コードのデバッグ脆弱性の分析について脆弱性の分析については以下の手順で行います。ブログなどの一次情報などを元に、脆弱性に関係がありそうな関数などにブレークポイントを設定するデバッガを動かしている状態で、WebアプリケーションにPoCを打ちこんでみるブレークポイントを設定した箇所やその周辺にて、関連するような変数の値が内部でどのように処理されているのかをひたすら追って挙動をみていく。ものすごいザックリとした説明ですが、上記の手順で追跡をしていくわけです。正常に機能を利用した場合の処理内容と、PoCを打ち込んだ場合の処理結果に、どのような差分があるのかなどを比較したりするのも有効なのかなと思いました。APIの脆弱性の検証こちらは分析初級編というお話しでした。本脆弱性については非常に話題になったので、ご記憶にある方も多いのではないでしょうか。IPAやJPCERTなどからも注意喚起されていましたね。リンクを張りますが、脆弱性に関する要因の詳細につきましては、まずこちらの徳丸さんの記事を良く読み込むのが一番良いと思います。上記のブログにて脆弱性の要因について以下二点をご指摘されています。整数にキャストしていたデバッガを利用してPoCを実行してやれば、上記のブログにて解説されている流れをそのまま体験できます。update_item_permissions_checkメソッドとupdate_itemメソッドにブレークポイントを設定してステップ・オーバーなどで進めていけば、どのように値が処理されているのか良く分かります。存在しないidなのに、返り値がtrueとなる整数にキャストされているためid=1xだったのがid=1として処理されている自分で試してみた感想としてですが、PoCのリクエストをid=1としてブン投げると正常処理の流れとなるので、そちらと比べるとより分かりやすいかもなと思いました。GalleryのSQLインジェクション脆弱性の検証こちらは分析上級編という位置づけでした。本脆弱性はWordPressのフォトギャラリープラグインにSQLインジェクションの脆弱性が存在するというものです。WordPressがフレームワークとして提供するwpdbクラスのprepareメソッドが、プレースホルダに用いている「%s」という値を外部由来文字列から内部のSQL文に受け渡してやるとそのままプレースホルダとして解釈されることを利用して、細工した値を送りこんでSQLインジェクションを発生させるという脆弱性だと認識しています。こちらの脆弱性は上級編だけあってかなりトリッキーなものですね。こちらについても、脆弱性に関する要因の詳細につきましても、まず徳丸さんの記事を良く読み込むのが一番良いと思います。1=1#」という細工された値を受け渡した際に、内部にてどのように処理されるか確認することができます。まとめ自分は、今までWebアプリケーションの脆弱性を検証する際に、デバッガを利用したことがなかったので今回非常に勉強になりました。脆弱性検証でもいくつかのフェーズがあり、脆弱性の再現確認は環境作るのがちょっと面倒くさいというのを除けば割と誰でもできるかなと思いますが、脆弱性が起こる原理解析などの部分がやっぱりなかなか難しいよなあと個人的に思います。デバッガを用いた動的解析を利用すれば、原理解析の部分などが色々捗りそうだなという印象をもちました。今回の環境を利用すれば、WordPressだけじゃなくて、Joomla!やDrupalなどの検証もできそうなので次回の検証からは早速使ってみようかなと思っています。後は、他の言語でのこういったリモートデバッグのやり方なども調べてみたいですね。関して検証してみたどうも、Drupalを一回も運用したことがないのに、インストール...2018-12-03ハニーポットについての小ネタ久々にブログを投稿します。Connect始まりました。久々にブログを投稿しますー。Shopを触ってみた!月別アーカイブはてなブログをはじめよう!tigerszkさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。