【インターンシップ体験記】1ヶ月のインターンシップでリクルート全体のセキュリティを向上させるためのツールの実装に取り組みました!

 こんにちは、早稲田大学M1の戸田です。2024年11月初旬からの1ヶ月間、リクルートのプロダクトセキュリティアシュアランスグループ(PSAG)配下のレッドチームにてインターンシップに参加しました!

 

バックグラウンド

 私は以前からセキュリティに興味があり、学部1年のときに参加したセキュリティキャンプ全国大会オンライン2020をきっかけにソフトウェアのセキュリティを本格的に学ぶようになりました。4年になるとセキュリティを専門とする研究室に配属され、研究と並行して各地のセキュリティミニキャンプやGCC 2024 in Thailand、他にはCODE BLUEやSECCON Beginnersなどに参加してきました。しかし、自分はセキュリティ分野の中でこれといった専門性を持っておらず、インターンシップが楽しみな反面これだけ専門家の多い組織で自分に何らかの貢献ができるのか不安な気持ちもありました。

 

現場配属までのスケジュール

 私の場合は、選考を経て夏前ごろに合格の連絡をいただき、その後の面談で人事メンターの方と今回のインターンシップでやりたいことを考えました。私が「ユーザ企業における脆弱性対策の実情を見てみたい」とお伝えしたところ、人事メンターの方がそれを踏まえて配属先を丁寧に調整してくださり、インターンシップ開始前に人事メンターの方と現場メンターの方と一緒に取り組む案件を決定するミーティングを行いました。そこで面接ぶりにお会いしたマネージャの方に面接のフィードバックをいただき、案件までに読んでおくと役に立ちそうな書籍なども教えていただきました。そこから現場配属までは技術書購入支援で購入した本を読みながら準備していました。

 

配属された組織と業務

 私が配属されたレッドチームは、潜在的な攻撃者に先回りしてリクルート内に存在する脆弱性とその影響を分析・対策することで実際の被害を未然に防ぐことをミッションとしています。主な業務には脆弱性診断・早期警戒・上流支援・ペネトレーションテストの4つがあり、今回私は早期警戒業務の改善に取り組みました。

 

テキスト, 手紙
自動的に生成された説明

 

 早期警戒業務について少し踏み込んで説明していきます。この業務では、レッドチームのメンバーが脆弱性情報公開サイトで毎日発表される数百件の脆弱性情報を確認し、それがリクルートのどのサービスに影響しうるのか・潜在的な影響の大きさはどの程度かを評価しています。そして、もしリスクが大きいと予想される場合は関係する開発者組織に連絡し、連携しながら解決に取り組むことになります。

 

 

この業務にはレッドチーム内製の脆弱性管理システムを使用しており、システム内では最新の脆弱性情報とリクルート内に存在するインフラやサービスの情報をあわせてさまざまな分析を行うことができるようになっています。以下はシステム内で各脆弱性について確認できる情報の一部です:

 

  • 脆弱性のIDや簡単な説明

  • 当該脆弱性が発見されたソフトウェアの名前とバージョン

  • リクルート内で当該ソフトウェアを使っているサービスの一覧(=脆弱性の影響を受けるかもしれないサービスの一覧)

 

図に示したように、上で言う「脆弱性が発見されたソフトウェア」というのはOSやDBMSに加えて各種プログラミング言語のライブラリ(npm installなどで入れるもの)も含みます。また、上に太字で書いた通り、ユーザ企業であるリクルートにとっては各脆弱性がリクルートに影響するのかどうかについて最も知りたいわけですので、その脆弱性を持つソフトウェアがリクルート内で使われている箇所を正確に特定する必要があります。もしここに見落としがあり、あるサービスに対するパッチ適用などの対応が漏れてしまうと、最悪の場合には攻撃者に当該脆弱性を悪用されユーザの個人情報が流出するなどのインシデントを招くこととなります。しかし、現行の脆弱性管理システムは次の章で述べる大きな問題を抱えていました...

 

脆弱性管理システムが抱えていた問題

 前章の通り、あるソフトウェア内に発見された脆弱性の発生する可能性や影響の大きさを調べるにあたって、リクルートの各サービスが使用中のソフトウェアを脆弱性管理システムが正確に把握していることが大変重要です。大部分のソフトウェア(例. OSのパッケージマネージャによってインストールされるソフトウェアなど)に関しては、既に脆弱性管理システムに自動で登録できる仕組みがあり、正確な把握が達成できています。しかし、その一方で、「プログラミング言語のライブラリ」についてはこれが達成できていないという問題がありました。というのも、現状では各サービスを開発するエンジニアが何らかのライブラリをインストール・アップデートするたびにそのライブラリの名前とバージョンを脆弱性管理システムに手動で登録しなければならなかったのです。実際に登録率は100%ではなく、そのためレッドチームが要調査と判断した脆弱性のあるソフトウェアが脆弱性管理システムに登録されていないとしても、念のため時間をかけてさまざまな手段で調べ上げる必要がありました。

 

 

問題をどのように解決したか

 この問題を解決するためには、各サービスが使用中のライブラリを手動ではなく自動で登録できるようにする必要があります。そのために、今回私は各サービスが使用中のライブラリの一覧情報(以降はサービスの「依存ライブラリ情報」と呼びます)を全社GitHubから自動収集するツールをGolangで作成しました。

本ツールのおおまかな動作の流れは以下のようになっています。

 

 

プロジェクト開始から1週間ほどで依存ライブラリ情報のスキャンができるようになり、以降は対応するプログラミング言語を増やしたり網羅率を上げることで実用性に磨きをかけました。最終的に6つのプログラミング言語の総計14種のパッケージマネージャのLockファイルを解析し、上の図のようなJSONフォーマットに出力できるようになりました。

 これにより、サービス開発エンジニアの方に追加の負担をかけずにレッドチームの側から依存ライブラリ情報を収集することができるようになりました。実際に自分の端末で動かしてみたところ、数十分で数十万件の依存ライブラリを検出・整理することができました(私の持つ権限の関係上リクルートの一部しかスキャンできていませんが)。本ツールはこれからPSAG全体の施策として展開され、複数の承認プロセスの後に本格使用される予定です。

 

工夫したことと大変だったこと

 実装上で工夫できた点として、対応するプログラミング言語やLockファイルを簡単に増やすことができるように設計したことがあります。これができたのは技術書購入支援でいただいた「初めてのGo言語」を読んだときにGoらしい考え方に触れていたためでした。実際、レッドチームのミーティングで別の言語にも対応できると良いかもという提案を受けた際には即座に実装することができました。

 一方で、実際の早期警戒業務の全貌を把握するのは大変でした。そもそも早期警戒業務は他の業務とどう関連しているか、毎日届く脆弱性情報のうちプログラミング言語のライブラリ関連の脆弱性は何割程度なのか、社内で使われているプログラミング言語やパッケージマネージャの統計はどうか、といった基本情報を業務に同席しながら確認し、本当に必要なものを実装するように心がけました。その過程で、決して大規模な組織ではないながらもリクルート全社を守るレッドチームの専門性と重要性を改めて感じました。

 

おわりに

 このインターンシップでは、実際のサービスを守っているセキュリティエンジニアの仕事を間近で見ることができ、学生という立場である自分にとって貴重な体験の数々を通して自分が将来どんな仕事をしていきたいのかよく考えるきっかけになりました。最後に、毎日よもやまで面倒を見てくださった現場メンターの方、インターンが最大限有意義になるよう手伝ってくださった人事メンターの方、そしてレッドチームメンバーのみなさん、短い間でしたが本当にありがとうございました!

 

番外編

リクルートの「よもやま」文化とそこで学んだこと

 リクルートには「よもやま」という文化があります。これは簡単に言えば1on1のことなのですが、何か業務上の用事があって行うというよりは話したい人と話したいときに文字通り好きな内容でミーティングするという感じです。私はレッドチームのメンバー全員とお話しさせていただきましたが、いろいろな方とお話しする中でレッドチームのメンバーはほぼ全員が異なる経歴を持っていることに気づきました。もともとリクルートの事業領域でサービス開発を行っていた方もいれば、CTFで有名な方もいました。中でもセキュリティ診断系のベンダから転職された方のお話が印象的で、セキュリティベンダのセキュリティエンジニアとユーザ企業のセキュリティエンジニアの違いについて詳しく教えていただきました。その一例を挙げると、セキュリティベンダにとって一番大事なのは案件の範囲内で見つけなければならない脆弱性をきちんと確実に見つけることで、ユーザ企業にとって一番大事なのはユーザの安全を確保することなので、ユーザ企業では脆弱性の早期警戒やトリアージに加えて脆弱性対応のために他箇所と協力したり再発防止体制を整えたりすることもありソフトスキルも重要とのことでした。このような視点は学生の自分には思い至らないもので、インターン中にさまざまなバックグラウンドの方と話せて本当に良かったと思っています。

 

レッドチームメンバーの方との脆弱性談義

 最終週にあるチームメンバーの方にお時間を取っていただき、レッドチームが今まで社内サービスの検査中に見つけた脆弱性のうち特に興味深いものを紹介いただきました。ここにはその内容は書けませんが、リスクが大きいと評価された脆弱性でもその原因の大半は基礎的な事項で驚きました(基礎的な検査がそれだけ重要だということですね)。一方で、攻撃ペイロード送信時もUIは正常なままだったがよく調べたらシステム内部では異常が起こっていることに気づいたという例もあり、それを発見した経緯を聞いて、ただたださすがだなあと思いました。

 

余談: レストラン事情

 勤務地がリクルート本社ビルだったためこのインターンシップ期間で初めて東京駅の地下街を散策したのですが、文字通り無数のレストランがあってランチの選択肢は豊富でした。ちなみにオフィスからエスカレーターでB1まで降りると地下通路があり、向かう方向によってGRANSTA, ヤエチカ, 東京駅一番街という施設に繋がっていますがどこへ行ってもレストラン街なのでどこが何なのかよく分かりません。一人で行くと簡単に迷うので(自分は八重北食堂まで一人で行った時にオフィスに戻る道がわからず大変でした)社員の方に連れて行っていただくのがおすすめです。社員の方と一緒だと老舗のお店に行けたりといいことがありますし、何よりランチ中は業務に関係ない話ができるので職場に早く馴染むことができます。これからインターンに参加する方もぜひ社員の方をお誘いしてたくさんランチに行ってくださいね!

 

↑京橋エドグランの中の親子丼の店

 

↑黒塀横丁の中の米沢牛の店