ゲームセキュリティ診断エンジニアによく寄せられる質問とその回答を公開します!
【Q1】「セキュリティ」ってそもそも領域が広すぎて、フルスタックエンジニアじゃないと務まらないと思うのですが、実際どうなんでしょうか?
ゴールとしてフルスタックエンジニアを目指すのもありだと思いますが、「プロダクトのセキュリティを高品質で提供する」という目的の元、まずはセキュリティ診断業務に従事していただいてます。もちろん診断をする上で技術向上やさまざまな手法で攻略するための幅をどんどん広げていただきたいですが、フルスタックでないと務まらないことはないです。
【Q2】セキュリティ未経験でも開発経験があればOKとのことですが、実際にどのレイヤーの開発経験があるのが望ましいでしょうか?
もちろんアプリ(クライアント)とサーバサイドの両方の経験があると望ましいのですが、どちらか一方でも自分の得意分野や経験から、知らない分野を徐々に学んでいけば良いと思います。コーディング、デバッグ、コンパイルなど一連の開発フローの経験を、ある程度持っている方であれば問題ないと考えます。
重要なことは学習を継続していくことと、知らない分野に挑戦していくことだと思います。
【Q3】診断をやってない時間の使い方を教えてください
個々のやりたいことと業務のバランスを見ながら、各々で目標を決めています。
例をあげると
- 新しいミドルウェア(「Unreal Engine」など最近使用が増えたもの)や新しい脆弱性などの学習
- 開発チームが修正した脆弱性の対応確認や、対応方法の相談
- 便利な診断ツールの作成や、使用済みの攻撃スクリプトの整理、診断方法のマニュアル化
- ソースコード解析を円滑にするための独自ツールの開発
- 開発側にフィードバックできるセキュリティ機構の開発と提供
- トレーニングへの参加
などがあります。
【Q4】セキュリティを「対処療法」と「標準化、教育」に分けた場合、それぞれの領域で行われている取り組みがあれば教えてください
弊社はミドルウェア、フレームワーク、開発言語などは、すべて開発者の責任で好きなものを使えるため、あまり標準化されたものがありません。ただし、攻撃手法や特定の環境に依存しない対策方法などは資料化されており、攻略手法などはメンバー間で共有する場を設けています。
また、対処療法に関しては、内容に対して相談者と条件や動作環境を確認しつつ、仕様やソースコードベースなど様々なレイヤーで解決策を練っていきます。
【Q5】いわゆる「レッドチーム」になりますか?
レッドチームとは言い切れません。
- レッドチーム:自社を守るために、攻撃者視点で実際に組織内で動作しているシステムに対して攻撃をすることでリスクの把握と対策・強化を行います。
- 診断チーム:弊社で提供している製品・サービスを使ってくれているお客様や、ステークホルダーの利益を守るために、攻撃者視点で攻撃することでリスクの把握と対策・強化を行います。
レッドチームは攻撃対象のアプリや環境が限定されませんが、診断チームは、プロダクトの提供するアプリを主にチェックし、対策に関してもプロダクトと相談しながら方針を決めていくため、色合いが少し異なります。
【Q6】業務のミッションは脆弱性を見つけることですか?
診断専門の会社ではなく、製品やサービスを開発・運用している会社ですので、セキュリティリスクを見つけることだけがミッションではなく、どれだけ製品を開発しているチームや会社に貢献できたかが重要です。
リスクの発見だけでなく対策方法を考えたり、協力会社と開発チームの間に立って支援したりと、さまざまな方法で会社やチームに貢献することが求められます。
【Q7】どこで自分のスキルが貢献できていると実感できますか?
脆弱性を発見できた時や、開発チームから修正方法を相談されて解決に導けた時に感じます。
【Q8】ツールと手作業の割合はどれくらいですか?
アプリケーションの種類にもよりますが、
Webアプリの場合:一般的な脆弱性は自動でもある程度検出できます。ただし、ゲームごとにサーバーと送受信するパラメータが異なることがありますし、ビジネスロジックなどの脆弱性に関しては自動化が困難なため、自動で検出されるものは3〜4割程度です。
ネイティブゲームの場合:ほぼ手動で、自動化できる部分がほとんどないのが実情です。Webアプリと違いHTMLなどの統一されたものがないので、自動化の前に個々にチューニングする場合が多いです。
弊社ではフレームワークやライブラリ、開発言語などは開発者の責任で自由に選択できますが、自由と引き換えに一般的なセキュリティの対策知識を開発者も持っている場合が多く、ツールによる自動診断で出てくる程度の脆弱性は見つかるケースは少ないです。
【Q9】現在、診断をやっている者です。ゲームならではの診断というのはどういうところですか?
ゲームにも色々あるので一概には言えませんが、
- インタラクティブ性が強いものなので状態の遷移が多く、開発者の想定していないフロー・タイミングによる脆弱性が出る。
- ネイティブアプリの場合、Webアプリと異なりクライアントの自由度が高いため、それが原因で脆弱性が出る。
といったことがあげられます。