安全なWebアプリケーションの作り方(徳丸本)の環境構築 - 土日の勉強ノート

土日の勉強ノート

AI、機械学習、最適化、Pythonなどについて、技術調査、技術書の理解した内容、ソフトウェア/ツール作成について書いていきます

安全なWebアプリケーションの作り方(徳丸本)の環境構築

これまでは、「ハッキング・ラボのつくりかた 完全版 仮想環境におけるハッカー体験学習」を参考にさせてもらって、理解を進めてきました。今回からは、並行して「体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践」(通称:徳丸本)を参考に、勉強を進めていきたいと思います。

この徳丸本とは、脆弱性のある仮想マシンを準備してくれていて(VirtualBox と Docker が準備されている)、その仮想マシンに対して、実際に攻撃を体験することで、脆弱性の理解を深めることができるというものです。

今回は、徳丸本の実習環境の構築を進めていきます。

それでは、やっていきます。

参考文献

はじめに

「セキュリティ」の記事一覧です。良かったら参考にしてください。

セキュリティの記事一覧

それでは、やっていきます。

徳丸本の実習環境の構築の全体像

徳丸本の実習環境についてですが、以下の青紫の背景色の2つのマシンを想定しています。wasbook が脆弱性のある仮想マシンで、実際に攻撃を行うのは Windows を想定しています。

図の DHCP-server は、VirtualBox が用意してくれたもので、192.168.56.x/24 のアドレスを配布しています。ParrotOS は、これまで使ってきた VirtualBox の仮想マシンです。

徳丸本の実習環境
徳丸本の実習環境

攻撃するマシンを Windows10 としているため、いろいろインストールすることになりますが、ちょっと気が進まないので、可能な限り、ParrotOS を攻撃マシンとしたいと思います。以下のようになります。

徳丸本の実習環境から攻撃マシンをParrotOSに変更
徳丸本の実習環境から攻撃マシンをParrotOSに変更

PlantUML は、今まで何回か使っていましたが、ネットワーク図は初めて作りました。なかなかいい感じに作図してくれました。ソースも貼っておきます。

@startuml

title 徳丸本の実習環境

nwdiag {
    network home {
        address = "192.168.11.x/24";
        
        win10 [ address = 192.168.11.13 ];
    }
    network VirtualBox {
        address = "192.168.56.x/24";
        
        win10 [ address = 192.168.56.1 ];
        DHCP-server [ address = 192.168.56.100 ];
        group {
            color = "#aaaaFF";
            wasbook [ address = 192.168.56.101 ];
            ParrotOS [ address = 192.168.56.105 ];
        }
    }
}

@enduml

徳丸本の実習環境の構築は、大きく分けて、脆弱性仮想マシン(wasbook)のセットアップと、攻撃側の ParrotOS の設定になります。

脆弱性仮想マシン(wasbook)のセットアップ

環境構築にあたり、必要なソフトなどは、以下の徳丸本のサポートサイトからダウンロードします。

wasbook.org

脆弱性仮想マシン(wasbook)のインストール

サポートサイトのダウンロードページから、「実習用仮想マシン(VirtualBox用 Ver 1.0.4)」をダウンロードします。

ダウンロードしたファイルは OVAファイルなので、ダブルクリックすると、VirtualBox にインポートできます。

CPU が 1つ、RAM は 512MB、GUI 無し、ということで、軽い仮想マシンのようです。

wasbook仮想マシンのインポート
wasbook仮想マシンのインポート

インポートが完了したら、ネットワークをクリックして、デフォルトの NAT に加えて、ホストオンリーアダプタを追加しておきます。

wasbook仮想マシンの設定
wasbook仮想マシンの設定

では、起動します。

CUI のログイン画面になるので、ユーザ名:wasbook、パスワード:wasbook でログインします。

SSHサーバがデフォルトで起動していたので、TeraTerm で接続できます。

情報収集と、ParrotOS に接続できることを確認します。

$ cat /etc/issue
Debian GNU/Linux 9 \n \l

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 08:00:27:92:63:9e brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global enp0s3
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:5b:4c:dc brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.101/24 brd 192.168.56.255 scope global enp0s8
       valid_lft forever preferred_lft forever

$ ping 192.168.56.105
PING 192.168.56.105 (192.168.56.105) 56(84) bytes of data.
64 bytes from 192.168.56.105: icmp_seq=1 ttl=64 time=2.07 ms
64 bytes from 192.168.56.105: icmp_seq=2 ttl=64 time=1.13 ms
^C
--- 192.168.56.105 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 1.130/1.601/2.073/0.473 ms

この時点で、ParrotOS から wasbook の Webサーバにアクセスできます。hosts の設定がまだなので、IPアドレスで、http://192.168.56.101 で、wasbook のトップページが表示されます。ここまでで、脆弱性仮想マシン(wasbook)のインストールは完了です。

脆弱性仮想マシン(wasbook)の設定

ここからは、必須ではないですが、wasbook を使いやすくする設定を行います。

visudo

sudo を付けるたびに、毎回パスワードを聞かれるのは面倒なので、visudo でパスワードを入力しないでいいように設定しました。

$ sudo visudo
wasbook ALL=(ALL:ALL) NOPASSWD: ALL
sambaサーバ

ソースコードを編集したりするのに便利なので、sambaサーバをインストールします。

$ sudo apt install samba
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 samba : Depends: python-dnspython but it is not installable
         Depends: python-samba but it is not going to be installed
         Depends: samba-common-bin (= 2:4.5.12+dfsg-2+deb9u2) but it is not going to be installed
         Depends: tdb-tools but it is not installable
         Depends: update-inetd but it is not installable
         Depends: libldb1 (>= 0.9.21) but it is not installable
         Depends: libpython2.7 (>= 2.7) but it is not installable
         Depends: libtalloc2 (>= 2.0.4~git20101213) but it is not installable
         Depends: libtdb1 (>= 1.2.7+git20101214) but it is not installable
         Depends: libtevent0 (>= 0.9.16) but it is not installable
         Depends: samba-libs (= 2:4.5.12+dfsg-2+deb9u2) but it is not going to be installed
         Recommends: attr but it is not installable
         Recommends: samba-dsdb-modules but it is not going to be installed
         Recommends: samba-vfs-modules but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Debian 9 は古いので、うまく入らないです。Docker への移行を考えた方がいいかもしれません。

ParrotOSの設定

ここからは、攻撃側の ParrotOS の設定になります。

ParrotOSのhostsファイルの設定

名前でアクセスできるように、ParrotOS の hosts ファイルに wasbook の IPアドレスと名前を登録します。以下のように、/etc/hosts ファイルに 1行追加します。

ping で確認すると、ちゃんとアクセスできています。

$ sudo nano /etc/hosts
192.168.56.101 example.jp api.example.net trap.example.com

$ sudo ping example.jp
PING example.jp (192.168.56.101) 56(84) bytes of data.
64 bytes from example.jp (192.168.56.101): icmp_seq=1 ttl=64 time=1.04 ms
64 bytes from example.jp (192.168.56.101): icmp_seq=2 ttl=64 time=1.12 ms
^C
--- example.jp ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1004ms
rtt min/avg/max/mdev = 1.044/1.079/1.115/0.035 ms

OWASP ZAPのセットアップ

youtube で、海外のサイトで、OWASP ZAP の解説をしているのを聞いたところ、普通に、オワスプザップと呼んでいたような気がします。

ハッキング・ラボのつくりかた 完全版 仮想環境におけるハッカー体験学習」では、HTTP通信のアナライザ?として、Burp Suite を使っていますが、徳丸本では、同種のツールである OWASP ZAP を使うようです。

ParrotOS には、最初から OWASP ZAP がインストールされています。では、起動してみます。

OWASP ZAPの起動
OWASP ZAPの起動

起動完了すると、以下のような画面になります。一番上のタイムスタンプベースを選んで、Start をクリックします。

OWASP ZAPの起動完了
OWASP ZAPの起動完了

その後、アップデートできる画面になりますが、また必要になったらアップデートすることにして、Close をクリックします。OWASP ZAP が起動しました。

続いて、プロキシの設定を行います。OWASP ZAP や、Burp Suite は HTTP のローカルプロキシとして動きます。WebブラウザからWebサーバにアクセスする際、その通信を仲介し、Webブラウザの要求を確認したり、内容を変更したりできます。

Tool → Options... をクリックします。

プロキシの設定を起動
プロキシの設定を起動

たくさん設定項目がありますが、左側の項目から、Network → LocalServers/Proxies を選びます。ポート番号が 8080番になっていますが、他と競合しやすいということで、58888 に変更します。

ローカルプロキシのポート番号を変更
ローカルプロキシのポート番号を変更

OK を押して閉じずに、左側の項目から Breakpoints を選びます。Break Buttons Mode を Separate Request and Response Buttons に変更します。

ブレークポイントの設定を変更
ブレークポイントの設定を変更

※2024/8/11:追記しました

日本語に対応しているので、日本語化します。

同じく、Tool → Options... の Language をクリックして、右上のところから、「日本語」を選択します。日本語化されるには、OWASP ZAP の再起動が必要でした。

日本語化の設定
日本語化の設定

Firefox で、https://example.jp/ にアクセスすると、「警告:潜在的なセキュリティリスクあり」と表示されて、危険を承知で進むと、一応表示されるのですが、目次ページや、そのほかのページも、以下のような感じで、左右に警告が出たままになることがあります。

警告が表示される場合がある
警告が表示される場合がある

これは、OWASP ZAP がアップデートされて、機能追加されたことが原因ということです。以下のように、Tool → Options... の HUD で、Enable when using the ZAP Desktop の項目のチェックを外すと解決します。

HUDの設定
HUDの設定

Firefoxに拡張機能のFoxyProxy-Standardをインストールする

Firefox を起動します。

次の URL にアクセスします。https://addons.mozilla.org/ja/firefox/addon/foxyproxy-standard/

FoxyProxy-Standardの拡張機能をインストール
FoxyProxy-Standardの拡張機能をインストール

いくつか確認画面が出ますが、OK(Okey)をクリックします。

FoxyProxy-Standard の設定を行います。

サポートサイトに、最新?の「Foxyproxyの設定ファイル」があるのでダウンロードします。ファイル名は「foxyproxy7.json」です。おそらく、FoxyProxy-Standard のバージョン 7 用の設定ファイルなんだと思いますが、今回インストールした FoxyProxy は、バージョン 8.9 でした。

Firefox の拡張機能のアイコンをクリックして、FoxyProxy をクリックします。すると、Options があるのでクリックします。Import タブを開き、Import from older versions をクリックします。Import ボタンがあるので、クリックすると、ファイルを開くダイアログが出るので、先ほどダウンロードした「foxyproxy7.json」を開きます。これで設定が読み込まれました。

Proxies タブを開きます。ZAP を開き、下の方に Pattern というのがありますが、ここがうまく動かなかったので修正しました。下図のように設定することで動きました。

  • *example.jp*
  • *api.example.net*
  • *trap.example.com*

FoxyProxyの設定
FoxyProxyの設定

ちょっと分かりにくかったのですが、FoxyProxy を有効にするには、下図のところをクリックして設定しておく必要がありました。

FoxyProxyの設定
FoxyProxyの設定

動作確認してみます。

https://example.jp/ にアクセスしたときは、OWASP ZAP が認識しますが、普通の Webサイト(Googleとか)にアクセスしても OWASP ZAP が認識しなければ正しく設定できているんだと思います。

FoxyProxyの動作確認
FoxyProxyの動作確認

当面の環境構築はこれで完了です。脆弱性仮想マシンは、wasbook の他にも用意されているようなのですが、書籍の後半に出てくるようなので、今回はここまでにしたいと思います。

おわりに

今回は、「体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践」(通称:徳丸本)の環境構築を行いました。

次回からは、徳丸本に沿って、進めていきたいと思います。

最後になりましたが、エンジニアグループのランキングに参加中です。

気楽にポチッとよろしくお願いいたします🙇

今回は以上です!

最後までお読みいただき、ありがとうございました。