エンジニアブログです。セキュリティ※本ブログに取り組んだ本人は既に卒業済みのため、メンターである@ken5scal(鈴木研吾)が本人からいただいたドラフトを一部編集した上で公開しています。※ドラフト自体は7月にいただいていたのですが、手違いにより公開が遅れてしまいました。コーポレートシステム部にインターンとして参加させていただいた海原(@hrt_k2002)です。3ヶ月弱のインターンシップを通して、ソフトウェアが抱えるリスクについての知見を深め、DevSecOpsの手法を取り入れた脆弱性管理システムの開発に取り組みました。きっかけ大学で数理工学を学び、大学院からは情報セキュリティの研究をすることになっていた私は、「金融」や「セキュリティ」というワードには強く関心を寄せていました。@y_matsuwitter)と面談する機会をいただき、そこでLayerXの「Fintech事業部」(MDM)について紹介いただきました。)には感謝しかないです。MDMのコーポレートシステム部が抱えていた課題MDMのコーポレートシステム部の業務の中に自社プロダクトの脆弱性管理というものがあります。脆弱性など存在しないのがベストではあるのですが、実際には意図せず脆弱性が混入したり、まだ誰にも知られていなかった脆弱性が後から発覚したりする、といったことは往々にしてあります。そのように日々現れる脆弱性に対して優先度をつけて対処していくために、脆弱性を管理しておくことが必要です。この脆弱性の管理は大部分が人の手で行われており、手数がかかってしまう、チェック漏れが発生しやすくなるといった問題がありました。このような状況を受けて、脆弱性を自動検出してそれらを管理し、対応が必要なものは通知してくれるといったシステムの開発に取り組むことになりました。ソフトウェアが抱えるリスクシステムを開発するにあたって、ソフトウェアがどのような攻撃にさらされるリスクがあるか、そしてそれらのリスクにどのように対処できるのかを調査しました。結果、ソースコードそのものに含まれる脆弱性に対してはSAST(静的解析)ツール、サードパーティ製のパッケージを経由して入り込む脆弱性に対してはSCA(ソフトウェア構成分析)ツールが使えることがわかりました。クラウドの設定ミスによって生じる脆弱性も視野に入れ、クラウドスキャンツールによる解析結果もシステムに取り入れることにしました。一般的ですが、そこにさらにセキュリティのプロセスを同時に行うことでより手軽に安全性を高めようという考え方です。今回の開発において目指した主な機能は次の通りです。脆弱性の自動検出AWSのサービスを用いて脆弱性を自動検出&システムに取り込みプロセス全体を自動化し、DevSecOpsを実現する発見された脆弱性の通知ソースコードに脆弱性が発見されたときにGitHubのissueやSlackで通知する対応が必要だが未着手の脆弱性についてリマインドシステム全体の構成は↓のようになりました。他のサービスとの接続性の良さを考えて、スキャンツールは全てAWSのサービスで完結させました。脆弱性を含んだソースコードをGitHub上でマージすると、CodePipeline上でスキャンが走り、数分後にissueが立てられるようになりました。インターンシップを通して学んだことセキュリティの知識についてこれまでの開発経験はバックエンドやフロントエンド開発がメインで、セキュリティについてもそれに付随する知識しか持ち合わせていませんでした。今回のインターンの中でセキュリティの専門的な知識をインプットする時間を十分にとっていただき、メンターのken5さんにもサーベイの方向性を示していただいたので、専門的な知見を効率的にインプットできたという実感があります。開発についてAWSのサービスをここまでフルに使ったインフラの構築は初めてで、ポリシーの設定など戸惑うことも多かったです。それでも、メンターの助言やAIの力を借りて、脆弱性の検出→通知の機能まで作り上げられたことは私の中で非常に自信になりました。気にはなっていたけれど使えていなかったSQSというサービスを組み込めたことが個人的には嬉しかったです。Goを使った開発も3年ぶりということで改めて学ぶことが多かったと感じます。以前Goを書いていたときにはほぼデファクトスタンダードだったGORMというORマッパーが、「GORMは使わない方がいいですね」と言われるまでになっていたことは驚きでした。他にも、技術選定の際にいろいろアドバイスいただいたエンジニアの皆さんには感謝です。出社について最後に、インターンシップを通して感じたこととして、オフィスで作業しているときとリモートで作業しているときでは過ごす時間の濃さが違うなと思いました。感じ方は人によって異なると思いますが、家で作業しているときと比べて、オフィスでは社員の皆さんに見られているという良い緊張感を保てますし、何よりオフィスで働く方と話す機会が圧倒的に多いので会社の理解が進むと思いました。インターンシップにおいては、業務で価値を出すことと同じくらいその会社を理解して今後のキャリアイメージに活かすことが大切だと思っているので、限られた期間のインターンシップという機会を最大限活用するには、なるべく多く出社するべきだと感じました。おわりに最後になりましたが、MDMの皆さんはとてもフレンドリーで面白い方が多く、楽しくインターンシップの期間を過ごすことができました。Notionの自己紹介は読んでいて飽きないですし、Slackの会話でも何度も笑わせてもらいました。技術に関してもken5さんをはじめ多くの方にお世話になりました。