2021-05-25に投稿

OWASP ZAPで脆弱性診断を行う際の、予備知識的なもの─ローカルプロキシの設定編

はじめに

OWASP ZAPを使って脆弱性診断を行う際、色んなサイトを参考にしながら進めていますが
よくわからない箇所もとりあえず「そういうものなんだなー」と深く考えず、書いてあるとおりに行っていました。

今回はそこを「それってなんズラなんズラ?」とツッコみつつ、
なんとなく、ざっくり、ゆる~く 見ていこうかなと思います。

なお、手順はこちらに沿って進めていきますが、
触れるのは冒頭の「ローカルプロキシの設定」のみとなっています。

プロキシ

手順によるとまず最初に、

OWASP ZAPをプロキシとして使用することで診断対象サイトへリクエストを送信し、そのレスポンスから脆弱性を診断します。

とありますね。
私はまだ赤ちゃんなのでそもそもプロキシってなんやねんレベルです。プロ棋士??ひふみん????

プロキシはブラウザとサーバの仲介人的ポジション

まずはわわわIT用語辞典さんを読んでみます。
マジいつもお世話になってます。

簡単説明をそのまま引用すると、

ホームページを見るときに使うソフト(Webブラウザ)の身代わりになってホームページにアクセスしてくれるコンピュータ(サーバ)のこと

らしい。ほほーう。

以下、書いてあったことほぼそのままですが、

プロ棋士プロキシが居ないとき

image

ってなるところが、

プロキシが居るとき

image

こんな感じに間に挟まってくれる。

プロキシの何が良いの?

アクセス元を隠せる、レスポンスが早い、などありますが、今回の脆弱性診断に関係ありそうなのは
サーバに送ったリクエスト内容を見たり変更したりすることが出来る ということですかね。
(厳密には使わなくても出来るけど、より簡単に出来るってことかも)

なるほど。で、つまりは?

「OWASP ZAPをプロキシとして使用して、ブラウザさんとサーバくんの間に入ってもらおう。
そして、プロキシちゃんを使ってリクエスト内容を変更してPOSTしまくることで、脆弱性を見つけていこうZE!」

…めっちゃざっくりいうと、こういうことなんだろうなと、ひとまず理解。

次いってみよーーう

よおし!プロキシちゃんのことが少しわかったことだし、設定に進むぞ!
手順によると…

Address欄には「localhost」、ポート欄には任意のポート番号(他と競合しない番号)を入力

localhost(127.0.0.1)

脆弱性診断とか関係なくよく見ますね。XAMPPでローカルサーバ立ち上げたときとか。
けど説明しろって言われたら何なのかはわからないので調べてみます。

ズバリ、localhost=自分のPCのこと です!

ってよく色んなところに書いてあるけどいまいちピンとこない。
まずはIPアドレスについて理解していく必要がある!
頭が痛くなってきたぞぅ。

IPアドレス

「インターネット世界での住所」みたいによく説明されてますね。
前提として、すべてのwebサイトにはIPアドレスを持っています。
住所不定のホームレスwebサイトなんてものは存在しないわけですね。

じゃあURLってなんなのさ

脆弱性診断をやろうとしてる人なら既にわかってるとは思いますけども、
webサイトってIPアドレスで開くこともできちゃいますよね。
まさに開発環境なんかは、192.168.0.15みたいにIPアドレスを入力して開いていたりするわけで。

つっても普段はIPアドレスじゃなくてhttps://www.google.comっていうURLでwebページを開きますよね。
google.comの部分が所謂ドメインなのですが、このドメインはIPアドレスと一対一の関係にあります。

  • IPアドレス→コンピュータさん向けのもの
  • ドメイン →人間様向けのもの

と言った感じです。

ちなみにwwwの部分はホスト名というらしい。

グローバルIPとプライベートIP

IPアドレスには、さらにグローバルIPとプライベートIPの2つが存在するらしい。
更に頭が痛くなってきた!

グローバルIP

全世界のネットワーク上における住所みたいなもので、重複しないIPアドレスのことです。
自分の家の住所とすぐお隣の人の住所が全く同じ、みたいなわけのわからんことになったら困りますよね。
UberもAmazonも届かなそう。そんなイメージ。

世の中に公開されているwebページのIPアドレスは、全部このグローバルIPです。
そりゃそうですよね、Googleと同じIPが複数あったらカオスなことになります。

プライベートIP

組織内のネットワーク(ローカルネットワーク?)内で使用できる、自分で勝手に決めてOKなIPアドレスのこと。
同じネットワークの中にいる人達だけに意味が伝わる、仲間内のみに通用する住所的な感じだと思います。

マンションAに住んでいる人に、「これ1階のエントランスホールの管理人に渡しといて~」というのは通じますが、
そのへんにいたオッさんに同じことを言っても「は?」って言われますよね。1階のエントランスホールって、どこの1階やねんと。

そもそも、「1階のエントランスホール」っていうのはマンションAだけにあるものではないですよね。
マンションBにもCにもあるかもしれません。

でもマンションA内に「1階のエントランスホール」が複数あったらちょっと変ですよね。
(エントランスが2つある構造とか、そういう話じゃないよ)
マンションAの中に「202号室の佐藤さん」が複数あったらおかしい、の方がわかりやすいか。

そんな感じの理屈で、プライベートIPは
同じネットワーク内で重複して使うことは出来ないけど、世界規模で見たら重複はOKです。

じゃあlocalhost(127.0.0.1)はどっち?

もうおわかりかと思いますが、プライベートIPです。
プライベートIPなので、皆同じ127.0.0.1っていうIPアドレスで自分のPCにアクセスすることが出来るというわけです。

localhostにアクセスしてみる

試しに、何もしないままでブラウザからlocalhostにアクセスしてみます。(URL部分にlocalhostって入れる)
image
当然こうなります。

localhostというのは自分のPCを指している、ただそれだけであって、
何もしていないのであればwebサーバでもDBサーバでもなんでも無いんですよね。

ここで、Apacheを起動した状態でlocalhostにアクセスしてみます。

image

XAMPPを入れてるので、お馴染みのこの初期画面が出てきました。
(なので厳密には、「localhost/dashboard/」になるんですけど)

Apacheを起動したことで、PCさんはwebサーバとして機能し始めました。
もちろん、DBサーバとして機能させることも可能なわけです。

なるほど。で、つまりは?

ってことは、localhost(=自分のPC)を、プロキシサーバとして機能させることも出来るよね!!
ということで、手順の

Address欄には「localhost」

は、「自分のPCをプロキシサーバちゃんとして間に挟んであげようね!」
みたいな意味かな~?と。

ふぅ~ここまで長かったぜ。

ポート番号

お次は

ポート欄には任意のポート番号(他と競合しない番号)を入力

この部分です。
こう考えると、自分何も知らねーんだな!
仕方ない、赤ちゃんだもの。
頑張って見ていきます。

まずポートとは

ネットワークからコンピュータ(サーバ)にデータを送受信するときのドアみたいなものです。

インターネットさんは80番のドア、FTPは20番のドアですよー みたいに
データによって既にどのドアを決まっているものもあれば、
ここからここまでは自由に使っていいですよ~~ なドアもあります。

80番、とか20番、っていう番号がポート番号です。

ウェルノウンポート

ポート番号が0~1023までのポートのことで、基本誰が通るのか決められています。

登録済みポート

ポート番号が1024~49512までのポートのことで、
ウェルノウン程ではないけど、よく使うアプリなどに割り振られます。

ダイナミック/プライベートポート

ポート番号が49513~65535までのポートのことで、基本的にこの間のポートが自由に使えるポートです。

なので、

ポート欄には任意のポート番号(他と競合しない番号)を入力

ここには49513~65535のうち好きな番号を指定してあげればOKです。

一旦終わり

モロ一番最初のところだけでも、だいぶ体力使いました…。
正直、ここの範囲は知らなくても脆弱性診断はできちゃいますけど、知ってて損する知識なんか無いよねってことでまとめてみました。
まだ深く理解は出来てないので、ざっくりゆるーく、ですけど。
診断に関係なく、この業界にいる以上基礎中の基礎知識だったと思うので、これを期に勉強出来てよかったなと思います。

余力があれば、次は脆弱性診断で実際に行われている攻撃なども調べられたらいいな!

参考

ツイッターでシェア
みんなに共有、忘れないようにメモ

みみみみみ

2歳と2ヶ月くらいの赤ちゃんです。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント