セキュリティ初心者用の学習ツールとか【備忘録】

たまにこの記事ストックされたりしているので、現状でいいと思っているもの書かなきゃ･･･！という使命感で加筆修正しました（↓この記事はポエムっぽいやつ）

https://zenn.dev/yukirisayu/articles/bf1bedd2796293

しかもセキュリティなんてまるで分からない。どうしよう･･･。と思っていましたが、
最初はみんな怖いと思っているだろうな～と思い直し、私がどうやって勉強したのかを記すことで、誰かの役に立てればいいなと思って書いている備忘録です。

私は営業職からセキュリティの世界に飛び込み、ITに関連する知識ゼロから勉強をスタートしたので、すでにIT関連で働いているよ～とか、情報処理系のことを学んでいるよ～という人には向いていない記事だと思います。

Flattさんのオススメのセキュリティ関係書籍のまとめもあるのでこちらもぜひチェック↓

https://blog.flatt.tech/entry/contents_recommendation_for_developers

# 覚えておいて欲しいなと思うこと
セキュリティの勉強をするにあたって、覚えておいて欲しいなと思うことがあります。

それはどんな案件でも、どんな種類の診断でも必ず、『お客様が想定していない事象で迷惑をかけてはいけないということ』です。
診断では実際に稼働しているシステムに疑似攻撃をするので、診断している側では正常な動作であるけれど、サーバ側では影響があり、サービスが停止してしまったり、正常に動かなくなってしまうことはあります。これは業務上仕方のないことです。

しかし、例えば
- 自分の勉強や実績のために、全く関係ない攻撃してはいけないサイトに攻撃をした
- SNS, 知人などに特定のサイトの脆弱性などを許可なく公表した
- 診断のせいでサーバが動かなくなってしまったけど、上司やお客様へ連絡しなかったのでサービスの利用者に大きな影響を出してしまった
- お客様からの注意事項を読まずに業務に取り掛かったら、診断の特殊な条件に気づかず、お客様に迷惑をかけた

という事象は、倫理観の欠如、自己の不注意や報連相、コミュニケーション不足で起こるものです。
セキュリティを学ぶ・仕事にする以前に、『どの仕事においても基本的と言われるような部分が一番大事』ということを覚えておいて欲しいなと思います。
（お客様のため、サイトのためと思う疑似攻撃も、許可が無ければ悪意ある攻撃になり得るのよね！！どれだけ直してほしくてもやっちゃいけないことはやると自分にもお客様にも悲しい思いをさせちゃうかもしれないって覚えておいて欲しいなっ）

# 定番！徳丸本

体系的に学ぶ 安全なWebアプリケーションの作り方 第2版［固定版］　脆弱性が生まれる原理と対策の実践

https://www.amazon.co.jp/dp/B07DVY4H3M/ref=cm_sw_r_tw_dp_T17FYBWCDQQ3SB76EWFP

めっちゃくちゃ詳しく（そして正しく）書いてあります。
脆弱性の用語や意味合いについてを詳しく書いてありますので、基礎を学ぶなら最初に見るべきかなと思いました。これについてはセキュリティに行かない人も一度は読んで、理解を深めた方がいいのではないかな～と思っています。

ちなみに私は就職する前に読んだけど、さっぱり理解できなかった。今では基礎中の基礎、初心者はとりあえず買って読んでという意味が分かるけど、当時は「こんな難しいの分かるかー！」と思ってた。
なので読んで難しすぎて分からなかったら次に書いてあるWeb Security Academyで実際に攻撃して何となくわかった気になってから徳丸本に戻って読んでとか、ローカル環境で本に書いてある通りにやってみて何となくこうかなと勉強したりとか、文字から離れて実際の動きを見てから繰り返し繰り返し読むのがいいと思います。

（ちなみに2章の実習環境のセットアップは実務でめちゃくちゃ使う部分もあるし、働いている人にとっては当たり前すぎて、手順説明なしでやっておいてね～くらいに言われるから「徳丸本に書いてくれて本当に感謝！！」という気持ち）

# Web Security Academy

https://portswigger.net/web-security/learning-path

portswigger社が出している実際に攻撃して脆弱性を確認できるサイト。かなり実践的で、実際の案件でも「この脆弱性、Academyでやったところだ！」という進研ゼミ的実感を味わうこともできます。
全部英語、でも大丈夫！私たちにはgoogle翻訳もDeepL翻訳もついてる！
burp suite communityをひとまずインストールしてやってみると良いかなって思います。

また、portswiggerが良く出しているブログが分かりやすいので、私はよく読んでます

# Hack The Box

https://www.hackthebox.com/

最近やり始めた（やってなかったんかいとか言われそう、まじですみません）
これはまじで楽しい。知識の土台がどんどん出来ていくような感じがする。

ただ、私みたいな「ITのことは何も分かりません！」という所からの状態だと、kali linuxとかを仮想環境に作って、VPNで接続してというのはかなりハードルが高くて、セキュリティのことに取り掛かる前に挫折してしまうような気がします。挫折してしまうようであれば徳丸本やWeb Security Academyなどのほぼ環境が整っているところから始めるのがいいかなと思います。

（Web Security AcademyもHack The Boxも無料で出来るのは本当にいい意味でおかしいと思う。そのくらい充実してる）

# 脆弱性診断スタートガイド

診断はどうやってやるのかということを重点的に記載してくれている本で、他にはない感じの本でした。
技術本とかである程度攻撃についてとか覚えてから買う(かセットで買う)と、いいかな～って思いました。
私としては付属のエクセルがめちゃくちゃ有難かったです。

https://www.amazon.co.jp/dp/4798159166/ref=cm_sw_r_tw_dp_SB5W4H1C16KZ6PMEB8TH?_encoding=UTF8&psc=1


# やられアプリ

### DVWA, bWAPP

XAMPPがあれば簡単に試せるやられアプリ。脆弱性ごとに分かれているので、最初にいいかも

https://github.com/digininja/DVWA

https://note.com/kenpapa/n/nc2dd1fa6f6e2

https://sourceforge.net/projects/bwapp/

確かこれを参考にしたはず

https://www.youtube.com/watch?v=v8v457txaU0

https://www.youtube.com/watch?v=LAtoePj80EM

### Bad Store
Burp Suiteの拡張として使える定番やられアプリ。

https://github.com/ankokuty/HakoniwaBadStore

### OWASP Juice Shop
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1110799/0d00c2e3-0e33-9aec-bdbb-51874cad69c3.png" width="70%">

Json形式、JWT、captcha、googleサインインなど、比較的モダンな技術が組み込まれているやられサイト。
Dockerで簡単に立ち上げることが出来るので、環境構築で悩むこともなくてとっかかりやすいと思います。

https://github.com/bkimminich/juice-shop#setup

# 脆弱性報告のHow To

IPAさんの勉強会資料に脆弱性の発見の仕方から、報告までどうすればいいかめちゃくちゃ詳しく書いてありました・・・すごい・・・！

https://www.ipa.go.jp/files/000070533.pdf

こちらはサイバー攻撃の被害事例

https://www.ipa.go.jp/files/000005475.pdf

# 余談

学習ツールとは関係ないですが、仕事してみて整理する能力と言語化する能力が非常に大事だなと思ってます。

特に脆弱性診断は脆弱性の報告の漏れがあってはいけないので、「どんなペイロードを投げて、どんな反応をして、どうだったか」を整理して次のペイロードを決め、状況の切り分けをし、時間の無い中で確実に報告をしていくのは、勉強している時にはあまり使わない能力だと思います。
時間を決めて集中してやることは大事、だと思います。

言語化する能力は、私がポンコツなだけかもしれませんが、何個も先輩に質問するので、言語化に時間がかかると仕事が進まないんですよねぇ・・・（悲
だから、仕事で質問がすぐ出来るように、今何を勉強しているのか言語化する訓練をすると、先輩に質問するときに楽かもしれません

また、脆弱性診断では『正しく脆弱性を理解する』ことがすっごく重要ですが、私は先輩方がいなかったら独学で正しく脆弱性を理解することは出来なかっただろうなと思います。ポンコツな私を研修した先輩、OJTした先輩がすごすぎるとしか言いようがない。これも「これを読めば正しく脆弱性を理解できる！！」みたいのが見つかったら追記しようと思います（多分無い）

あと、セキュリティってセキュリティの知識だけで絶対終わらない。から、回り道したとしても全然無駄じゃないと思います。
脆弱性の検証にコードを書くことも多々あるし、PoCも作らなきゃいけないし、脆弱性の切り分けのためにミドルウェアのことも考えたり、ネットワークのことも考えないといけない。お客様から脆弱性についての質問が来たら回答するので日本語も大事、英語記事を読むのが常になるので英語も大事。もう･･･私は伸びしろしかありません、そして私がどこまで伸びても先輩方にたどり着けません。

多分この記事を読んでいる皆さんは私よりもどんどん成長してもっと良い記事を書いてくれると思うので、それを期待して私はぬくぬく頑張ろうと思います。

皆さんの記事待ってます～(/・ω・)/