AsaLog

サイバーセキュリティ系事務員の備忘録

【セキュリティ診断のための事前対象調査ハンズオン (1/15)】はじめに

ごあいさつ

こんにちは、Asaです。

ふだんは自社サービス・アプリケーションの脆弱性診断を行うチームで業務サポートとして主に事前の対象調査(クロール業務)を行っています。

開発未経験異業種からの転職で入社後、半年の研修を経て脆弱性診断員としてデビューし、約1年半脆弱性診断業務に従事していました。

その後2年ほど、開発側と診断側の間に立って脆弱性診断に関する諸々の調整を行う「調整チーム」にいて、5年ぐらい前にサポートチームとして現在の「支援チーム」を立ち上げて今に至ります。

このブログは、業務に関連して学んだことをメモする目的で作成したのですが、記事を書こうとしては「わたしごときが知っていることなどまとめて公開したところで誰の役に立つというのか……」とモチベーションが続かず、ほとんど更新してきませんでした。

ただ、最近、弊社の技術人事や別部署の友人たちと会話するなかで、いろいろと思うところがあって、連載という形で記事を書くことにしました。

まず、「うちの仕事って、外部の人に知ってもらうにはちょっと難しいな?」と気づいたのが最初です。

https://hrmos.co/pages/ca-adv-group/jobs/00000252_tech

こちらがわたしのチームの求人情報です。

これでもがんばって伝わる内容になるよう工夫したんですが、読んでもらった人たちからの声は

  • どんな仕事なのかイメージしづらい
  • 「セキュリティエンジニア」とか「脆弱性診断」とか難しそう
  • 必須スキルに「プログラミング学習経験(独学またはスクール卒業生)」が入ってるから自分は対象じゃないなと思ってスキップすると思う

……といったものでした。

特に最後の「プログラミング学習経験」のあたりは、プログラミング経験者ではなくてプログラミング学習の経験がある、という人を求めていて、「一度基本的なWebアプリケーションを開発してみて、どう作ってどう動いてるかがわかる」状態であればOKの認識なのですが、そう読み取るのって難しいですよね(でもグダグダ書くのも違うんかな、というジレンマ……!)

会社のセキュリティに関わる内容なので、普段やっていることを外向けに見せる、ということはできませんが、それでも実際に見てもらった方がイメージはしやすいよな……。

そう考え、わたしは閃きました。

「手元のPC環境で簡単なテストサイトを作って、それに対して『クロールってこんな風にやってるよ』をスクショつきで載せたブログがあれば、少しでも興味を持ってくれた人により詳しく見てもらうこともできるのでは?」

※「ブログのID取得しただけで中身が増えないな〜って悩みもこれで解決する!」とも思いました

それからChatGPT 4oに構成などを相談した結果、全15回の構成でブログを執筆し、わたしたちが日々行っている「事前調査(または、対象調査、クロール業務)」と呼ばれる作業について具体的に紹介する、と決めました。

この連載の目的は下記の3点です。

  • わたしたち「支援チーム」がどんな仕事をしているのか知ってもらう
  • サイバーセキュリティに興味がある人に、こんな仕事もあると知ってもらう
  • ハンズオンをした人は、うちのチームでの研修(簡易版)を体験した状態になる(といいな)

できれば一緒に働いてくれる人が増えると嬉しいなとも思いますが、知ってもらわなければ話にならないので、まず知っていただきたい!

長くなりましたが、そんな理由でこの連載を開始します。

全15回でおさまるか、ちゃんと毎週更新できるのかすでに不安ですが、よろしくどうぞお付き合いくださいませ。

脆弱性診断とは何か、事前調査(対象調査、クロール)とは何か

「ごあいさつ」で散々書いた言葉ですが、ITエンジニア以外の人が読んでくれる可能性も考え、まずは「脆弱性診断」という言葉について簡単に説明したいと思います。

まず「脆弱性」とは、Webアプリケーションやシステムに潜む「悪用できるバグ」を指します。

そして「脆弱性診断」では、対象となるWebアプリケーションやシステムを網羅的に確認して「悪用できるバグ」=セキュリティリスクを発見し、開発側に報告します。

Webアプリケーションやシステムを悪意ある攻撃から守るために行われる重要なプロセスで、これは開発・運営側だけでなく、それらサービスを利用するユーザーを守ることにも繋がります。

インターネットに接続するあらゆるシステムは、脆弱性が存在していると攻撃を受けた際に被害が拡大してしまう可能性があります。

リリース前、機能追加のタイミングや年に1〜2回など定期的に脆弱性診断を実施して発見し、先んじて対処することが大切です。

今回の連載では、この脆弱性診断の多くのステップの中の「事前調査(対象調査、クロール)」に焦点を当てて解説していきます。

支援チームの役割

脆弱性診断は多くのステップから成り立っていますが、その最初のステップとも言えるのが「事前の対象調査」です。

わたしたち「支援チーム」は、この対象調査を主に担当しています。

事前調査(対象調査、クロール)をざっくり説明すると、「脆弱性診断を行う前の準備」ということになります。

具体的に挙げると下記のような内容になります(小難しいこと書いてますが、全15回を終えたら「なるほど、あれね」とわかるようになっているはず……! なので、さらっと流してください)

  • 診断対象サービスの疎通確認
  • 対象規模(診断対象となるURL数)の把握
  • 診断対象のデータを後にツールで確認するために蓄積
  • 診断対象の機能の把握
  • 脆弱性診断を実施するのに必要な情報の収集、開発側への提供依頼
  • 対象となるURL、パラメータの一覧表(URL一覧)を作成

実施前に事前調査(対象調査、クロール)をしっかり行っておくと、脆弱性診断自体をスムーズに進行できることが多いです。

脆弱性診断そのものよりも専門性は低いですが、脆弱性診断を実施するセキュリティエンジニアを支える大切な業務です。

(そしてうちの診断チームのセキュリティエンジニアたちはみんな優しくて「いつもありがとうございます」「助かってます」と労ってくれてすごくやりがいを感じます、こちらこそいつもありがとう〜!)

今後の連載で学べること

この連載では、わたしたち「支援チーム」が日々行っている「事前の対象調査業務」を具体的に、一緒に手を動かしながら体験してもらえることを目標にしています。

そこで「実際に自分の手元のローカル環境でテストサイトを構築し、無料版のBurp Suiteを使って対象調査(クロール作業)をやってみる」という流れで連載を進める予定です。

連載をしていくと、もしかすると多少内容の変更や方向性の修正はあるかもしれませんが、現在のところ下記内容で進めていく予定です。

  • 第2回:開発環境のセットアップとツールの導入
  • 第3回:テストサイトの設計:全体の構造
  • 第4回:テストサイトの実装:HTMLとCSSの基礎
  • 第5回:テストサイトの実装:JavaScriptを使った機能追加
  • 第6回:テストサイトの実装:バックエンドの構築
  • 第7回:ユーザー認証機能の実装
  • 第8回:テストサイトでの対象調査準備
  • 第9回:対象調査の実施:Burp Suiteを使ったクロールの手順
  • 第10回:対象調査結果の確認と整理
  • 第11回:ツール診断の結果とテストサイトへの影響の解説
  • 第12回:実例紹介:クロール業務から発見される脆弱性
  • 第13回:対象調査完了後の脆弱性診断の流れ(ダイジェスト)
  • 第14回:「支援チーム」メンバーのキャリアパス
  • 第15回:さいごに

次回は、対象調査体験のための準備として、開発環境のセットアップから始めます。

わたしもテストサイト開発は久しぶりなので、がんばってセットアップしていこうと思います。

よろしくお願いします!

Recursionで勉強し直してみることにしました【1日目】

コンピューターサイエンス、何それかっこいい!

程度の知識しかなかったわたくしですが、さすがに現職も9年めを間近にすると「コンピューターサイエンスを基礎で学んでないと諸々不具合が……」という気持ちになります。プログラミングの学習をしようにも、詰まるところはプログラムそのものというよりも基礎の基礎で引っかかるからです。

ど文系ですが、そうも言ってられない。なぜなら、弊チームの採用基準を考えると自身もスキルアップしなければならないので……!

 

そんなわけで、Googleの検索窓に「コンピューターサイエンス オンライン 無料」と打ち込んでみたところ、Recursionというサイトをお勧めされました。

recursionist.io

上記リンクの説明文にもありますが、「一人で何も作れない」を解決することに特化したという一文がわたしの心をサクッと捉えました。斬り付けた部分もある。

無料枠と有料枠があって、無料でもそこそこやれそうだし、ひとまず無料分をやってみるか!

 

というわけで、メールアドレスで新規登録をして、さっそくチュートリアル

 

目標設定として開発ロードマップを選択するのですが、フロントエンドかバックエンドか悩んだ結果、バックエンドにしました。

一応、Webアプリケーションの脆弱性診断業務に関わる仕事をしているので、今のフワッとした理解をより盤石にするべきだろうと……(フワッとしてても質問したら逐一理解できるまで回答してくれるリーダーや周囲のエンジニアには感謝してもしきれませぬ)。

 

説明を読んで、ところどころ挟まるコーディング問題のリンクに遷移し、Progateみたいな画面で実際にコーディングをしてみて採点したり、一通りページ学習をしたら5問前後の選択式テストをして理解度を測る、みたいな流れ。

Progateは説明がスライド形式っぽくなっていて、スライドの先にコーディングページ、みたいな作りでしたが、Recursionはふつうにページをスクロールして読んでいって、コーディングページは別タブで開いて入力する形でした。

また、Progateだと言語単位で学習していきますが、コンピューターサイエンスとして全体を学習するからか、コーディングページで言語を変更することができます。

デフォルトはPythonのようですが、PHPJavaScriptJava、C+、TypeScript、Rubyと選択できました(問題によってはRubyがなかったりするのかな?)。

 

一区切りつくとX(旧Twitter)でポストする画面が表示されるので、ここまでやりました! を記録できるし、そこまでは頑張ろうとやり切れる、ような気がします。

 

わたしは今日、コンピューターサイエンスの基礎・初級の「データ」まで(コース1のレッスン20まで)を進めたのですが、初級はそれ以外に「プリミティブ型」、「変数」、「関数」が用意されているようです。

コンピューターサイエンスの基礎は初級・中級・上級とあって、その後もいろんなレッスンが用意されている模様。どこまでが無料の範囲なのかしら。

 

有料だと、月額61ドルらしく、ちょっと……だいぶ家計に打撃を食らうので、いったん無料の範囲をしっかりやってから考えたいと思います。。

 

 

 

なお、今回の勉強の最終目標は「ローカル環境でLaravelを使ったポートフォリオサイト作成をし、ドメインとサーバーも契約してデプロイするところまでひと通りやる」です。自分で書いてて、ちゃんと理解した上でこの目標立ててるのか不安になってきていますが(何が必要でどんなコストやリスクがあって、どんなメリットがあるのかの検証をやり切れていない気がしている)、その辺のことも含めて自分がどこまで理解できていて、どこの理解があやしくて、というのを切り分けていきたいと思います。

 

これからの弊社弊チームは、どんどんスキルを持った若い人を採用していかなくてはいけないフェーズに入っています。そこで曲がりなりにもサブリーダーを担っているわたしが、いつまでもスキルを持ったエンジニアにおんぶに抱っこでは申し訳ないので、どこまでやれるかの挑戦も兼ねてやっていこうと思います!

LCL-Tokyo 2024 Summerにオンライン参加しました

Leading Cyber Ladies in Tokyo 主催のハイブリッド開催イベントにオンライン参加しました。

https://lcl-tokyo-2024-summer.peatix.com/view

少し前にXでセキュ女プロフィールカードというのを拝見してからフォローしてたんですが、イベントをオンラインでも参加できるように開催してくれるなら参加するべさ、と思って勢いで参加!

オフラインイベントも随分長いこと参加していなかったのでどうなることかと思ったのですが、学生さんから社会人まで幅広く参加されていて、質疑応答も活発でとても学びが深かったです。

 

基調講演は蓮見祥子さんと、Reut Menasheさん。

LTは学生さん3人と篠田佳奈さんによるもので、いずれもとても興味深かったです。

内容って共有してもいいものだろうか。

とりあえず、今覚えているものをメモとして残しておきたいと思います。

 

蓮見さんの講演内容で最も私に響いたのは、やったことがないことを傷つきながらもとにかくやっていく、逃げ出さず取り組む強さ、出世欲より貢献欲、という部分でした。

私はたぶん、困難にぶちあたった時に逃げ出すタイプの人間なんですが、育児においてはやったことない・難しい・無理! ってなってもとにかく向き合わなきゃいけないでしょ、それをやってきてる人なら(特に主体的に担わざるを得ない女性の場合はいやでも)身についてる力でしょ、という感じで解釈して「それなら私にも逃げ出さずに取り組む強さが身についてるかもしれない」と思うことができました。

あまり親らしい親ではないですが、一応は親としての人生を13年間歩んできたので、きっと私にも親になったことで培われたレジリエンスがある、と思えたのは個人的にとても大きな自信になりました。

 

学生さんのLTもとても示唆に富むものでした。

MITに研究インターンへ行った方のお話は、まず普通に「かっこいいなぁ」の感想と、もしも自分の子どもが望んだときに経済的に後押しできる大人でいたいなと改めて思わされました。人種差別の問題だったり、性差別はまだまだ根深いよねという話も出てきたけれど、前向きに取り組む重要性などもお裾分けいただいたなと感じました。

サイバーセキュリティ×犯罪心理学の話は、私自身が大学で臨床心理学を専攻していたこともあって、とても興味深く拝聴しました。もともと犯罪心理学自体にも興味があったので、今後はサイバーセキュリティと犯罪心理学を絡めた論文などもウォッチしていきたいなと思いました。

機械学習で研究を進めていかれる学生さんの話は、名前だけは聞いたことがあったMosquitoの活用についてだったので、概略をつかみにいこうかなと興味をそそられました。私はコンピュータサイエンスをすっ飛ばして実務に入ってしまった人間なので難しいことが山ほどありそうですが、「これから先の人生を考えたら今がいちばん若いんだし」を合言葉にして、挫けずに取り組んでみたいと思います。

篠田さんが駆け足で共有してくださった内容は、とっても興味深くて、スライド共有してくれないかなぁというものでした。自分自身でも触ってみたいコンテンツもあったし、自分の子どもが興味を持ちそうな内容もあったので、イギリスの取り組みを改めて共有していただきたいなと思いました。しかしすごいなぁ、日本も頑張ろうぜホント。

 

Reutさんの基調講演は、英語だったこともあって半分くらい理解できていなかったかもしれません……。Zoomの翻訳字幕を追っていても難しくて、部分的には理解できた(と思う)箇所もあったのですが……。ただ、私の理解・解釈が間違っている可能性もあるのですが、蓮見さんの講演で触れてらした「人をつくること」「サイバーセキュリティ免疫をつけること」という主張と重なる内容だったように思います(違ってたらすみません)。可能なら、文字起こししたものを熟読して理解したいところです。

 

Zoom参加中に手元でメモしておけばよかったんですが、なぜか「メモをとる」というコマンドが頭の中から一時的に消え去っていたようで、すべて終わってから「あ! メモしておけばよかったのに!」と気づいた次第です。。

でも、とても刺激を受けたイベントでした。

現地参加できていれば、どなたかと知り合えたのかしら……。いいなぁ東京!

 

刺激を受けたついでに、これからは何かしら勉強になったことなどはなるべくブログに書くようにしようと決意しました。いつまで続くかわからないけどw 楽しんでいきたいです!