こんにちは。Product Security チームの @gloriaです。
この記事は、Mercari Advent Calendar 2021 の10日目の記事です。
————
こんにちは、Product Security チームの @gloriaです。前回は、昨年のAdvent CalendarイベントでDevSecOpsについて記事を書きました。
最近、TwitterやLinkedInで「QAからセキュリティ・テスターへのキャリアチェンジ」という話題がよく取り上げられていることに気づきました。QAとセキュリティはIT業界の中で全く関係ない2つの分野に見えるので、多くの人にとって、キャリアチェンジなんて考えられないかもしれません。以前に似たようなキャリアチェンジを経験した私は、この話題にとても興味があって、感想とセキュリティ・テストの分野に踏み出したい人へのアドバイスを共有したくて、この記事のテーマにしました。
なぜQAからセキュリティ・テスターへのキャリアパスがあるのでしょうか?
近年、DevOpsと自動テストの普及と共に、QAの将来は益々議論されるようになりました。将来、QAの役割が完全に消えるわけがないと思いますが、自動化テストの広がりとエンジニアが積極的にテスティングに参加することで、QA役割の数が減っていくのは事実です。QA分野を離れてキャリアチェンジをしたい人には、2つのキャリアパスがあるとよく言われます。
コーディングや技術を触ったりすることに興味がないQAは、人を管理する役割(エンジニアリング・マネージャー、プロジェクト・マネージャー)かプロダクトを管理する役割(ビジネス・アナリスト、プロダクト・オーナーなど)に移る傾向があります。コミュニケーション能力や人間力、気配り、細部へのこだわり、様々な視野から物事を考える力などのソフトスキルは、QAにとって欠かせないものなので、人やプロダクトを管理する役割に移るのはとても自然で、ソフトスキルを活かせて充実できるようなキャリアパスと言えるでしょう。
逆に、技術志向があるQAは、開発エンジニアや自動テストエンジニアなどの専門的な技術職に移る傾向があります。セキュリティ・テスターもこのカテゴリーに含まれています。
一見すると、QAとセキュリティ・テスターの間のギャップが大きすぎて、キャリアチェンジは難しいだろうと思ってしまうかもしれませんが、実はQAの既に持っているスキルや知識はセキュリティ・テスターにも必要なのです。次に、セキュリティ・テスターとQA役割の共通点と違いを分析しましょう。
セキュリティ・テストと一般的なソフトウェア・テストの比較
テストケースの種類
キャリアチェンジで気づいたのは、セキュリティ・テストは、一般的なソフトウェア・テストとそれほど変わらないことです。以前の記事で述べたように、QAとセキュリティ・テストは自然に重なる部分があります。この2つのテストは違う視点から行われます。QAが一般のユーザーまたは少し特殊なユーザーとしてテストを行いますが、セキュリティ・テスターは悪意のあるユーザーの視点からテストを行います。そのため、インプット・バリデーション、エラーケース、ビジネス・ロジックなどのテストケースはQAとセキュリティの両方でも行われます。
具体的な例として、ログイン画面のQAテストとセキュリティ・テストをそれぞれ見てみましょう。QAは左側のテストを行い、ユーザーがログイン画面でメールアドレスの入力を間違えた場合を検証します。しかし、セキュリティ・テスターは右側のテストをして、ログイン画面で発見されると最も危険な問題、SQL injectionという脆弱性、があるかどうかを確認します。どちらのケースも同じくログイン画面のインプット・バリデーションとエラー処理を確認しますが、意図はそれぞれ異なります。QAテストは正常なユーザ動作を確認する一方、セキュリティ・テストは悪意のある動作を確認するので、「use case」と「misuse/abuse case」という言葉で指すこともあります。
QA(左)とセキュリティ・テスター(右)が行うテスト
ハードスキル(ツール・技術)
Charles Proxy、Postman、JMeterなど、QAテストとセキュリティ・テスト両方で使えるツールが確かにありますが、この2つの役割の最も大きい違いは必要なハードスキルだと思います。
セキュリティ・テストの方が深い技術的な知識が不可欠です。なぜかというと、テストケースを考えるために、そのソフトウェア機能の裏側にある技術を十分に理解する必要があるからです。例えば、前項で挙げたログイン画面の例に戻るのですが、misuse caseを考えるために、セキュリティ・テスターは2つのことを知らなければなりません。1つは、ユーザーアカウントの情報がSQLのデータベースに保存されていることで、もう一つは、SQLのデータベースはSQL injectionという脆弱性があること。つまり、セキュリティ・テスターはテストケースを作成する前に、ソフトウェアの使用している技術と、その技術にある特定な脆弱性などを知る必要があります。
逆に、QAは基本的にユーザの視点からテストを行うので、データベースの種類や使用しているプログラミング言語、ソフトウェアやネットワークのアーキテクチャーなど、ソフトウェアの内部構造を知る必要はありません。要するに、QAがブラックボックスの視点でテストを行い、セキュリティ・テスターがグレーボックスまたはホワイトボックスの視点で(システムの内部構造の一部か全部知りながら)行うため、セキュリティ・テスターにはより深い専門的な知識などのハードスキルが必要となります。
ソフトスキル
セキュリティ分野で働く人には、暗い部屋に隠れている一匹狼のハッカーというイメージがありますが、成功するセキュリティ・テスターになるために、実はソフトスキルがとても大事なのです。QAと同様に、セキュリティ・テスターの仕事はプロダクトにある脆弱性やセキュリティに影響を与えるバグを発見し、開発チームに問題提起することです。人間関係を上手くするために、コミュニケーション能力、プレゼンテーション・スキル、気配り、謙虚さなどのソフトスキルは大切です。また、脆弱性を発見するために、細部への注意力、問題解決能力、論理的思考力、クリエイティビティなども不可欠です。全てQAと共通する物なので、この2つの役割で成功するために、どちらもソフトスキルが必要であることは非常に似ています。
セキュリティ・テストを学ぶには?
セキュリティ・テストを学ぶには、「ツールやテスト技法」と「ハッカーのマインドセット」の2つのスキルを身につける必要があります。
今では、新しいツールを学ぶことはとても簡単になりました。Youtubeのチュートリアル、ブログ記事、トレーニングコースなど、オンラインで利用できる学習リソースは山ほどあります。また、PortSwiggerのWeb Security Academyなど、実践的な練習ができるサイトもあります。もちろん、実際のウェブサイトやアプリケーションで実習を行う場合は、必ず事前に許可をもらってから行ってください。
個人的には、ツールや技術より、ハッカーのマインドセットを学ぶ方が難しいと思います。なぜなら、今までの考え方を極端に変えなければいけないからです。一般のソフトウェア・テストでは、ユーザーがどのように不意にソフトウェアを壊してしまうのかという考え方でテストを行いますが、セキュリティ・テストでは、何かを得るために意図的にバグを発見して、悪用するという視野で考える必要があります。その得られる何かとは、お金であったり、不正アクセス(使えないはずの有料機能、ユーザーの個人情報やクレデンシャル、アクセス制限の回避など)であったり、またはウェブサイトの改ざんやサービス全体を妨害することよる満足感でもあります。これらは全てハッカーにはよくある動機なので、ハッカーの攻撃から守るならハッカーの視点で考えるに越したことはないでしょう。
ハッカのマインドセットを育てるために、テスト中に「最悪の場合に何が起こるのか?」という質問を繰り返せばいいでしょう。この行為は脅威モデリングと呼ばれ、攻撃される可能性を全て洗い出す活動で、悪用される可能性を見極める力を鍛える一つのいい方法です。つまり、「ユーザーがどのように不意に機能を壊せるのか?」の代わりに、「何が得られるのか?その何かを得るために何をすればいいのか?」と聞いてみれば良いです。テストを「何かを得るために」という思考で行うと、ハッカーの考え方により近くなるので、彼らが脆弱性を発見する前に先手を打って問題を洗い出すことができるでしょう。最初は、中々アイデアが思い浮かばないかもしれませんが、練習をすればするほどそのマインドセットが鋭くなるので、鍛え続けばきっと成果がでるでしょう。
最後に
セキュリティ・テスターはQAの可能なキャリアパスの一つだとよく言われます。テストケースの種類、使用するツール、成功するために不可欠なソフトスキルには自然に重なる部分があります。セキュリティ・テスターは確かにより深いシステムや技術的な専門知識などのハードスキルが必要ですが、諦めないで学習をし続けば誰でもマスターができ、素晴らしいセキュリティ・テスターになれると思います。
————
メルカリの Product Security チームは、一緒に働いてくれる仲間を募集しています。ご興味のある方は、是非求人情報をご覧ください。
明日の記事は@garyさんです。引き続きお楽しみください。