見出し画像

bWAPPで始めるセキュリティ学習

こんにちは、株式会社ビズパ プロダクト開発チームの山口です。

Webサービスを開発・運用するにあたってセキュリティは切っても切り離せないものです。
多くのフレームワークやベンダー製品ではあらかじめ考慮されているため0から対策を行わなくてもセキュアな開発を行うことができます。
しかし適切な対策が行われているか判断したり、万が一攻撃を受けた際迅速な対処を行ったりするためにもしっかりとした知識を持つことは肝要です。

セキュリティの領域はハードウェアやネットワーク、プログラミング etcと幅広い分野があります。
今回はWebアプリケーションに関するセキュリティについて紹介します。

bWAPPとは

セキュリティの学習では実際に攻撃手順を試すことで理解を深めることができます。
攻撃手法を試すためには俗にいうペネトレーションツールを利用します。このようなツールには様々なものがありますが今回はbWAPPを使っていきます。
bWAPPでは予め脆弱性をはらんだWebサービス環境が用意されており手軽に攻撃・対策手順を学ぶことができます。確認できる主な項目は以下の通りです。

・SQL, HTML, iFrame, SSI, OS Command, PHP, XML, XPath, LDAP, Host Header and SMTP injections
・Cross-Site Scripting (XSS), Cross-Site Tracing (XST) and Cross-Site Request Forgery (CSRF)
・AJAX and Web Services issues (jQuery/JSON/XML/SOAP/WSDL)
・Authentication, authorization and session issues, file upload flaws and backdoor files
・Arbitrary file access, directory traversals, local and remote file inclusions (LFI/RFI)
・Configuration issues: Man-in-the-Middle, cross-domain policy files, information disclosures,...
・HTTP parameter pollution, HTTP response splitting and HTTP verb tampering
・Insecure DistCC, FTP, NTP, Samba, SNMP, VNC and WebDAV configurations
・HTML5 ClickJacking, Cross-Origin Resource Sharing (CORS) and web storage issues
・XML External Entity attacks (XXE) and Server Side Request Forgery (SSRF)
・Heartbleed and Shellshock vulnerability (OpenSSL), Denial-of-Service (DoS) attacks
・Parameter tampering, cookie and password reset poisoning

http://www.itsecgames.com/bugs.htm

PHP Code Injection

Code InjectionとはPHPやPythonなどインタプリタ言語を用いたWebアプリケーションにおいて、インタプリタが実行可能なプログラムをインプットし実行を試みる攻撃手法です。
この攻撃は能動的攻撃のため情報資産を盗まれるだけでなくサーバーなどのハードウェア資産に対しダイレクトに攻撃を受ける可能性のあるハイリスクなものとなっています。

Check!

bWAPPのページを開き PHP Code Injection Security level low で開きます。

このページ自体は大変シンプルです。ページ内の「message」リンクをクリックしてみます。するとURLが「http://localhost/bWAPP/phpi.php?message=test」となりリンクの下に「test」と表示されます。
上記を踏まえて今度はパラメータの値にPHP構文を仕込んでみます。試しにパラメータに「phpinfo()」を設定してリクエストを投げてみます。
するとPHPの設定内容が表示されてしまいます。

PHP情報だけではそこまで大きなリスクはありません。今度はパラメータを「system('cat /proc/version')」に変更してみます。するとLinuxのカーネルバージョンが表示されます。このようにPHPを経由してコマンドを実行することもできてしまうため大変危険な攻撃だということがわかります。

SQL Injection(GET/Search)

SQL Injectionは他のInjection攻撃同様リクエストデータにSQLを仕込むことでRDBMSを外部操作する攻撃です。現在の殆どのサービスがDBでデータを保持しているため、この攻撃の対策を怠っていると重要な情報資産を盗まれてしまう可能性があります。また資産的な観点だけだなく情報によっては法的責任が伴うこともあるため、適切に対策をとることが肝要です。

Check!

bWAPPではいくつかSQL Injectionのパターンが用意されていますが今回はSQL Injection(GET/Search)を試してみます。
上記を選択すると単一のテキストフォームと検索ボタン、映画情報を表示する一覧テーブルが表示されます。

まず手始めに適当な条件として「' or 1=1 --」を入力して検索してみます。
するとMySQLのエラーが表示されます。この時点で少なくともInjection攻撃が可能なことがわかってしまいます。

今度は「' union select 1,2,3,4,5 #」を入力してみます。画面の一覧の列数分指定してみましたがカラム数が一致しない旨のエラーが出ます。そのためいくつか順に追加して試してみます。すると「' union select 1,2,3,4,5,6,7 #」でSQLが通り末尾に1行追加できてしまいます。

更に先ほどの表示用カラムを利用して次のSQL「' union select 1,TABLE_NAME,3,4,5,6,7 from information_schema.TABLES #」を仕込んでみます。
すると次のように全てのテーブルが判明します。こうなってしまってはDBで管理されている殆どの情報がのぞき放題となってしまいます。

XSS - Reflected (AJAX/JSON)

XSS(Cross Site Scripting)は悪意のある第三者が攻撃用のサイトへユーザーを誘導し、偽のサイト内に仕込んだ悪意のあるスクリプトを実行させることでユーザーの情報を盗んだりアカウントを乗っ取ったりする攻撃手法です。

Check!

今回は XSS - Reflected (AJAX/JSON) を選択してみます。表示されたページでは一つのテキストフォームのみがあり、特にボタンなどは表示されていません。試しに「bizpa」と入力してみます。すると下のメッセージ欄にリアルタイムに入力した内容が反映されることがわかります。

今度は「<sctipt>alert('bizpa')</script>」と入力してみます。このタイミングではscriptタグは表示されずalertは実行されません。

ここでさらにHTMLタグがどういう風に解釈されるか判断するため「<b>bizpa</b>」と入力してみましょう。するとbizpaの文字が太字になりタグとして認識されていることがわかります。

このことを踏まえて「<img src=x onerror=alert('bizpa')>」と入力します。するとalertが実行されXSS攻撃に成功しました。

最後に

今回はInjectionやXSSなど埋め込み系の攻撃について紹介しました。bWAPPでは他にも多くの脆弱性パターンが用意されています。Burp Suiteなどのツールを駆使することで一歩踏み込んだ攻撃手法も学ぶことができるので、また機会があれば紹介していきたいと思います。

ビズパはまだまだ発展途上。今後も改善や新サービス展開などを行っていきます。
これらに興味のある方は是非カジュアル面談にご応募ください!

▼採用HP

▼ご応募はこちらから!(カジュアル面談エントリーも)

▼Bizpaのことをもっと知りたい方はこちら!

この記事が気に入ったらサポートをしてみませんか?