連載「Technology Company Internals」では、テックカンパニーの内側で働くエンジニアに、技術に精通したエキスパートが対面で話を聞き、テックカンパニーとは何か?を探るだけでなく、テックカンパニーを目指す企業の指針となることを目指します。
セキュリティ診断チームの2人に話を聞く
白石: まずは自己紹介をお願いします。
瀧沢: 瀧沢 和也(たきざわ かずや)と申します。グリー社内で、セキュリティ診断を行うエンジニアとして働いています。
髙村: 髙村 充(たかむら みつる)です。セキュリティ診断チームのマネージャーを務めています。
白石: お二人は同じチームで働かれているのですよね。普段のお仕事はどのようなものですか?
髙村: 弊社(グリー)は、グローバルなものも含め数多くのゲームタイトルやサービスを手掛けています。私達の仕事は、そうしたプロダクトがリリースされる前に脆弱性診断を行うのが中心になります。
瀧沢: あと、発見した脆弱性をどうやって修正するか、を検討するのもぼくらの仕事です。コードの修正は基本的に開発側のエンジニアが行うのですが、「どう修正すればいいか」という相談を受けたり、修正後に回帰テストを行ったり、時にはライブラリにパッチを当てるような仕事もあります。
白石: ライブラリのバージョンアップは、(開発側の仕事じゃなくて)セキュリティ診断チームが行ったんですか?
瀧沢: (プロダクトが依存している)ライブラリのバージョンがすごく古い時がありまして。単純にバージョンを上げると影響範囲が大きすぎるので、必要なパッチだけを当ててビルドする必要があったんです。
白石: なるほど、それはプロダクト開発とは一味違った仕事ですね。専門的な知識も相当要求されそうです。
脆弱性診断=攻撃
白石: ぼく、セキュリティに関するお仕事の知識が全くと言っていいほどないんです。脆弱性診断というのが、具体的にどのようなお仕事なのか、教えていただけますか?
瀧沢: 簡単に言うと、攻撃です。
白石: 攻撃!ハッキングですか。
瀧沢: そうです。診断対象のサイトやアプリに対して攻撃を試みます。モバイルアプリが対象だったら、バイナリ解析なども行って、怪しそうなところを改変してみたりもしますね。
白石: 思ってた以上に攻撃そのものでした(笑)
瀧沢: おまけに、攻撃対象のソースコードも手元にありますから。ソースコードを見ながら怪しいところを探れるので、より徹底的に脆弱性を探れるだけでなく、その対処策も練れるというわけです。
白石: なるほど…自社プロダクトを攻撃して、脆弱性の在り処を探る仕事ってことですね。じゃあ例えば、脆弱性診断を効率よく行う工夫とかもあったりするんですか?
髙村: はい、様々なツールがあるし、スクリプトなどを書いて自動化も行います。あとは、攻撃者が狙いそうなところをピンポイントで探るのも重要です。
白石: 攻撃者が狙いそうなところとは?
髙村: 例えばゲームの課金に関する部分とかは、もしアタックに成功したらリターンが大きいですよね。お金と直接関わる部分ですから。他には、プレイヤーのステータスに関する部分やアイテム入手の部分も、攻撃者からすると狙い目です。
白石: なるほど、「攻撃者の気持ちになって」脆弱性を探るわけだ…面白い!
技術好きにはたまらない!セキュリティ診断のお仕事
白石: セキュリティ診断チームは、プロダクトチームから依頼を受けて仕事に取り掛かるわけですよね。実際にはどんな業務の流れなんでしょうか?
髙村: まずはプロダクトチームから診断依頼が来ます。プロダクトはだいたいリリース日が決まっていますので、そのリリース日から逆算して大体の計画を立てます。その後は、週に2回ある定例会議や、Slack等でラフにコミュニケーションを取りながら仕事を進めていきます。
白石: なるほど、チーム全員で仕事に取り組んでいらっしゃるんですね。
髙村: そうです。チーム全員がプロフェッショナルなので、マネジメントには苦労しないですね。個々人が、自身の強みを活かしながら、積みあがっている仕事を自発的にこなしていく感じです。
白石: メンバーそれぞれに「強み」とかもあるんですね。
髙村: はい、攻撃の手法とかによって、メンバーごとに得意分野がありますね。
瀧沢: 個々人の作業の流れとしては、まず機能を一通り触ります。
で、同時にソースコードを見ながら、怪しいところがないか探っていきます。リクエスト・レスポンスの内容だとか、バリデート(入力値チェック)甘そうだぞ、とか。
白石: ゲームとかって、ソースコードの量もすごそうですよね。最初の工程は、どれくらい時間がかかるもんでしょうか?
瀧沢: 規模にもよりますが、だいたいは2, 3日もあれば全体的に把握できますよ。
白石: たった2, 3日で!すごい。
瀧沢: 経験も積んでいますから、直感もかなり働くようになってきました。脆弱性がありそうかどうかは、ソースコードを見るとなんとなくわかってしまうことも多いですね。総じて言うと、脆弱性の少ないものはソースコードがきれいです(笑)
白石: そういうもんですか、やっぱり。どんなコードだと脆弱性が少ないですか?
瀧沢: まず、分岐が少ない(笑)
白石: ああ〜〜(笑)
瀧沢: 他には、1メソッド(内の行数)が短いのも良いコードです。メソッドのコードがだいたい50行以内くらいに収まっていると、安心できます。他には機能が重複してないとか、(値を)ベタ書きしてないとか。
白石: 面白いですねえ、そういう傾向がわかるのも、ソースコード見ながら脆弱性診断できる環境ならではですね。
セキュリティエンジニアという仕事の面白い点、つらい点
白石: お二人は、セキュリティエンジニアという仕事を実に楽しそうにお話されますね。どういうあたりが特に面白いと感じますか?
瀧沢: ソースコードを見ながら脆弱性診断を行うので、あらゆる言語やライブラリに触れられるというのは、すごく面白い点だと思いますね。
グリーは、言語やフレームワークを選ぶ際の自由度が高いんです。会社としてあんまり縛りがない。新しいものにどんどんチャレンジできる環境としては最高だと思います。そのぶん、ぼくらセキュリティ診断チームは、そうした言語やライブラリにどんどん触れていかなくてはならないので、大変でもありますけどね。
白石: 様々な言語の、あらゆる最新ライブラリに触れることになるということですか…?それはすごい。
髙村: そうなんです。だから、診断依頼を受けたらまずその言語やフレームワークについて勉強するところから始める…なんてことがしょっちゅうです(笑)
白石: 大変だ…でも、技術が好きな人にとってはたまらない環境ですね。
瀧沢: そうなんです。それに、最新の技術に触れられるだけじゃありません。ネットワークやOS、CPUなど、一般的なアプリ開発よりももっとローレベルな分野の知識も求められますので、コンピューターのあらゆる分野について詳しくなれる仕事です。
白石: 髙村さんが、セキュリティエンジニアという仕事の面白いと感じるところはどこでしょうか?
髙村: そうですね、やはりプロダクトを実際に攻撃できる、というところですね。普通は、実際に攻撃ってなかなかできないじゃないですか。それが、うちのチームだとやりたい放題です(笑)
白石: 確かに。しかも、ソースコード片手に(笑)
髙村: 脆弱性を見つけたときって、難問を解いたときと同じようにアドレナリンが出る感覚があります。攻略する楽しさと言いますか。
白石: アドレナリン(笑)。ただ、こうして磨いたスキル、悪用もできちゃうわけですよね…?
髙村: はい、その気になればできるでしょうね。ただ、自らのスキルを悪用しないというのは、セキュリティエンジニアとしての最も基本的な心構えです。セキュリティエンジニアの矜持やプライド、と言ってもいいでしょう。チームにジョインする人や、これからセキュリティエンジニアを目指す人には、そこは一番最初に説く部分ですね。
白石: 逆に、セキュリティエンジニアの大変な点はありますか?
髙村: うちはとにかく、プロダクトの数が多いのが大変ですね。リリース日が厳密に決まっているようなプロダクトもあるので、そこに間に合わせるのがときに大変です。とは言え、プロダクトの数が多いおかげで様々な技術やソースコードに触れるという楽しさもあるので、そこは痛し痒しと言ったところです。
瀧沢: 私が大変だなと思うのは、脆弱性についてプロダクトのメンバーに説明するところですね。重大さがうまく伝わらないときもありますし、重大すぎて(企業の)上のレイヤーまで話が行って、そういう人たちにプレゼンしなくてはならないときもあります。
白石: なるほど…脆弱性がビジネスに影響を及ぼすことも、もはや珍しくないですもんね。重要な仕事だ。
セキュリティエンジニアとは
白石: 最後に、セキュリティエンジニアという職種について、思うところをお聞かせください。セキュリティエンジニアに関心ある人もたくさんいると思うんです。
髙村: セキュリティの仕事を始めてから10年以上になりますが、最初の頃はこの仕事ってなくなるんじゃないかと思っていたんです。
白石: そうなんですか!どうして?
髙村: セキュリティの要素って、OSとか言語とかフレームワークとか、そういう下のレイヤーにどんどん組み込まれていくわけです。なので、上のレイヤーで開発しているぶんには、セキュリティのことを考えなくても良くなるかと思っていたんですよ。
白石: なるほど、確かに。
髙村: でも実際は、せっかく用意されているセキュリティ機構が使われていなかったり、新たな攻撃手法が次々に開発されたりして、セキュリティの仕事はなくなりませんでした。それどころか、webからモバイル、クラウド…というふうに、プラットフォームもどんどん広がっていく中で、セキュリティエンジニアに関する需要はどんどん盛り上がっていると感じます。
白石: セキュリティエンジニアって、業界的には不足気味なんですか?
髙村: はい、大きく不足していますね。セキュリティ診断を専門で行う企業も増えていますし、弊社のように、自前でセキュリティ診断チームを抱えるところも少なくありません。
白石: セキュリティ診断を外部の企業に依頼するのではなく、自前でチームを抱えるメリットはなんなんでしょうか?
髙村: 脆弱性に対する対処ですね。外の企業にお任せするとなると、どうしても対処と言っても一般的な提案になりがちです。「文字列を無害化しましょう」とか。
ただ、実際にはそういう対処をどのように行うか、が重要だったりします。
問題のあるコードの特定、修正方法の検討、修正による影響範囲の推定…など、様々なことを考えなくてはなりませんし、時にはプロダクトの仕様を変更する必要もある。こういうことを、リリースまでの限られた期間で行うには、やはり内部に脆弱性診断チームを抱えておく必要があります。
白石: 瀧沢さんは、セキュリティエンジニアという職種についてどうお考えですか?
瀧沢: プログラミング教育なども盛んですし、今後エンジニアとか開発の仕事っていうのはどんどん増えていくと思うんです。だからこそ、脆弱性も尽きることがない。そうした中で、セキュリティエンジニアの仕事も尽きることがないでしょうし、重要性はどんどん増していくだろうと思います。
白石: やはり、今後も重要性は変わらないと。
瀧沢: はい、それに、特定の企業や業界に依存したスキルじゃないので、「つぶしが利く」スキルだとも思います。セキュリティという概念自体も幅広いですし、区分けもそれほどされていないし、なんなら言語などの縛りもないですから。
白石: なるほど…魅力的なスキルだ。では、セキュリティエンジニアになりたいと思ったら、どうしたらいいのでしょう?
瀧沢: 最初の一歩としては、開発の経験があればいいと思います。どんな言語を学んできたかもあまり関係はありません。「セキュリティにすごく興味がある」というだけでも構わないと思うんです。私も髙村さんも、もともと開発から来ていますし。
言語やフレームワーク、OSやネットワークなど、あらゆる環境に脆弱性は潜んでいますが、それらはすべてコンピューターの上で動いています。だから、開発が好き、コンピューターが好きという人であれば、どなたにでも向いている職種だと思います。
白石: 技術力もつくし需要も高いし、おまけに面白い。魅力的なお仕事ですね。本日は非常に興味深いお話、ありがとうございました!