インターンシップ体験記 〜セキュリティ運用の健全化を目指すMetemcyberの開発〜

はじめに

はじめまして。イノベーションセンターの西野と申します。セキュリティ運用改善サービス「Metemcyber」のプロジェクトリーダーを担当しています。

本記事は、NTTコミュニケーションズの職場体験型インターンシップに参加していただいた学生お二方からの寄稿になります。どうぞよろしくお願いいたします。

今村さん

はじめまして。今回Metemcyberプロジェクトに配属されたインターンシップ生の今村(GitHub:apeiria-zero)です。現在大学3年生で、大学ではBitcoinを用いたマイクロペイメント技術や、Hashed Time Lock Contract(HTLC)に関する研究をしております。

私はこれまで大規模な開発経験が無く、ほとんど個人での開発経験しかありませんでした。ですので、実際の開発がどのようなものか気になっていました。大規模開発に関われる機会を探していたとき、NTTコミュニケーションズの職場体験型インターンシップの存在を知り、よりリアルな開発経験を積むことができると思い応募しました。

木村さん

はじめまして。今回Metemcyberプロジェクトに配属されたインターン生の木村(GitHub:keigokimura)と申します。現在、大学院でブロックチェーンのセキュリティ、NFTの不正取引に関する研究を行なっています。

最近やたらとニュースになっているNFTについて、自分は研究で扱っているけれど、企業ではどのように捉えているのか?そもそも新しい技術に対し、どういう切り口で関わっていくのか?ということが気になっていました。

そんな中、NTTコミュニケーションズのインターンシップのコースの中に、NFT技術を用いた研究開発を行うコースを見つけました。これは企業の方の考えを知るチャンスであり、「自分の研究が企業でどう生きるのか」「企業での研究ってどういう視点で技術を捉えるのか」といった自分の疑問を明らかにする機会だと考え、チャレンジすることを決めました。

インターンシップの概要

今回私たちは、2週間のインターンシップに参加し、イノベーションセンターでセキュリティ運用改善サービス「Metemcyber」の研究開発を行いました。

Metemcyberとは

ここでは、Metemcyberのサービスの目的について説明します。

www.metemcyber.ntt.com

Metemcyberの目的は、組織におけるセキュリティ運用の健全化を目指すことです。一般的なセキュリティ運用改善サービスと異なる点は、「食生活改善のようなセキュリティ運用の改善」を行える点にあります。

食生活の改善には、日々の食事記録を管理し、栄養バランスなどを元に食生活における問題を見える化することが必要です。さらに、見える化された問題に対し、健康栄養士の方からのフィードバックをいただくことができれば、ユーザはそれを元に食生活を改善していくことができます。

食生活に関していえば、これを実現するサービスとして「あすけん」と呼ばれる有名なサービスがあります。しかし、セキュリティ運用において、このようなサービスは現状存在していません。

Metemcyberは、食生活改善のようなセキュリティ運用の健全化を提供することを目標とします。サイバー攻撃のインパクトが大きくなる中、実際のサイバー攻撃を踏まえた正しいセキュリティ対策を講じ、健全に運用できているかどうかは、組織の信頼に関わる大きな問題となります。しかし以下の理由から、組織のセキュリティ運用が健全に行われているかを把握することは難しいと考えられます。

  1. セキュリティ対策はその貢献度や大変さが成果として見えにくい
  2. 定期的な監査では日常的な運用が健全なのか分からない
  3. 脅威の発見や対策の根拠となる情報が十分だったのか把握できていない

そこでMetemcyberは、食事記録のようにサイバー脅威情報の利用を記録し、それに対するセキュリティアクションを管理することで、組織におけるセキュリティ運用の健全性を見える化します。また、見える化によってアクションの達成度が明らかになるため、アクションを行った組織あるいはエンジニア個人を評価できます。Metemcyberはアクションを実行した人にバッジを付与することで評価します。

実際にMetemcyberは図1の3つのコンポーネントから構成されています。

f:id:NTTCom:20220225145059p:plain

図1 Metemcyberを構成する3つのコンポーネント

セキュリティ運用の健全化を見える化するだけでなく、頑張った人を評価できることも、セキュリティ対策へのモチベーション向上に繋がりそうです。

開発環境や期間中のコミュニケーション

ここでは実際に今回のインターンで行った内容を説明します。インターンでは、主にFastAPIというWebフレームワークを利用したAPI開発を進めました。

  • 全日リモート形式での実施
  • インターン前日に参加のための備品が到着
    • NTTコミュニケーションズから社内連絡用のPC
    • インターン期間の昼食代が入金されたカード
  • Metemcyberの開発自体はGCP上に用意されたVM環境でVScodeからアクセス
  • チームの方々とはSlackでやり取りをし、ソースコード管理にはGitHubを利用

f:id:NTTCom:20220225145105p:plain

図2 GitHub上のやりとり

また、昨日の進捗と本日の予定を報告し合う「朝会」というミーティングに毎朝参加させて頂きました。 他にも様々なミーティングに参加させていただき、現場のリアルを知ることができました。

今村の成果:アクションの記録からメタデータ取得まで

Threat Connectome開発の背景

今村が担当したアクションログの生成の部分について説明します。アクションログの内容の前に、Threat Connectomeを改めて説明します。Threat Connectomeとは、「セキュリティアクションを頑張った人をほめたたえたい」をコンセプトに開発されたプラットフォームです。 セキュリティアクションをもとにバッジを発行し、セキュリティアクションを見える化することで貢献を評価します。

f:id:NTTCom:20220225145112p:plain

図3 Threat Connectomeの目的

アクションログの概要

アクションログというのは、セキュリティアクションの情報やそれを実行したユーザー情報等を含むログの名称です。今回今村が担当した業務は、「セキュリティアクションの記録」と「バッジ発行に必要な情報を生成」する機能の開発です。大まかな全体像は図のようになります。アクションログを生成するcreate_log、アクションログ一覧を取得するget_logs、メタデータを生成するget_metadataという3つの関数があります。まずはアクションログを生成するcreate_logを説明します。

f:id:NTTCom:20220225145118p:plain 図4 actionlogsの全体像

アクションログの生成(create_log)

create_logの目的はセキュリティアクションからアクションログを生成することです。入力として、アクションID、トピックID、ユーザーIDと実行時刻(入力は任意)があります。これらの情報をもとにアクションログを生成します。

f:id:NTTCom:20220225145125p:plain

図5 アクションログ生成の流れ

f:id:NTTCom:20220225145132p:plain

図6 アクションログの内容

アクションログ一覧の取得

get_logsの説明です。先ほどのcreate_logで作成したアクションログの一覧を取得します。(図7)

実行時刻(executed_at)と、レコード作成時刻(created_at)のタイムゾーンがUTCであることを末尾に情報をつけることで明確化しています。また、デフォルトのソートはlatest順、つまりレコード作成時刻(created_at)の新しいレコードが一番上へ来るようにしています。

f:id:NTTCom:20220225145138p:plain

図7 アクションログ一覧

バッジ発行に必要なメタデータの生成

最後にアクションログからバッジ発行に必要なメタデータを生成するget_metadataの説明です。アクションログのロギングIDをパラメータとし、バッジ画像やバッジ名が生成されています。imageにバッジ画像のURLがありますが、アクセスすると画像が表示されます。実際のレスポンスは図8のようになります。

f:id:NTTCom:20220225145144p:plain

図8 メタデータの内容

アクションログまとめ

以上が私の活動でした。まとめとして図9を載せます。セキュリティアクションからメタデータの生成ができたので、この情報をバッジ発行のAPIへ渡します。インターン前はセキュリティアクションとバッジ生成のAPIが分離していたので、そこを繋げる事が出来ました。以降の処理は木村さんの担当に移ります。

f:id:NTTCom:20220225145150p:plain

図9 アクションログからメタデータ取得まで

木村の成果:バッジの発行からNFT化まで

3. バッジの生成

セキュリティバッジの発行

次に木村が担当したバッジ生成の部分について説明します。Metemcyberではセキュリティアクションを実行した人にバッジを付与することでセキュリティ運用者を評価します。今回は前節で説明があった、セキュリティアクションのログ情報からそれに応じたバッジを発行します。

まず、Threat Connectome内で発行されるバッジをセキュリティバッジと呼び、メタデータからセキュリティバッジを発行できる機能を作成しました。APIとしては以下のようなものを用意し、発行したバッジには固有のIDが付与されます。機能としては図10の2つを用意しました。

f:id:NTTCom:20220225145157p:plain

図10 Threat Connectome セキュリティバッジ関連の機能

入力としてアクションに関するメタデータを渡してあげると、結果として図11の情報を持ったセキュリティバッジが発行されます。内容としてはそのアクションの実行時間や概要など、アクションに関する情報などが入っています。

f:id:NTTCom:20220225145204p:plain

図11 セキュリティバッジの内容

セキュリティバッジのNFT化

これでセキュリティアクションを実行した人をバッジによって評価が可能になりました。次に、バッジを受け取った人が自分の成果として示せるように、ブロックチェーン上にセキュリティバッジをNFTとして発行する機能を実現します。最近ではブロックチェーン上でアート作品やデジタルコンテンツがNFT化されて売買されており、NFTは注目を集めています。そんな注目されるNFTとしてセキュリティバッジを発行でき、注目の的になれば、エンジニアの勲章としてすごく良さそうです。

NFTに関する機能としては図12の2つを用意しました。

f:id:NTTCom:20220225145210p:plain

図12 Threat Connectome NFT関連の機能

入力としてセキュリティバッジのIDを渡してあげると、セキュリティバッジがNFTとして発行されます。図13には発行した結果を示しており、NFTの共通的な情報と、今回のユースケース固有の情報に分かれています。

f:id:NTTCom:20220225145217p:plain

図13 NFTの内容

また、今回はセキュリティバッジとNFT化されたバッジの紐付けも行っています。セキュリティバッジのフィールドの中にnft_idというものがあり、そのセキュリティバッジがNFT化されていれば、NFTの固有IDが入るようになっています。今回は上記で発行したセキュリティバッジをそのままNFT化しました。図14においてセキュリティバッジの一覧取得機能を用いて再度確認してみると、先ほどはnullだったnft_idに値が入っており、しっかり紐付けが行われていることがわかります。

f:id:NTTCom:20220225145224p:plain

図14 セキュリティバッジ内のNFT ID

NFTバッジを手元のMetaMaskにインポートしてみる

最後に自分が手に入れたセキュリティバッジをMetaMaskにインポートしてみます。NFTバッジの情報をもとに自分のMetamaskに登録していきます。図15のように表示できていることがわかります。これだけで達成感が湧いてきますね。

f:id:NTTCom:20220301150736p:plain

図15 NFTをMetaMaskに登録

4. インターン通しての成果

今回のインターンを通して、図16の流れでセキュリティアクションからバッジを発行する機能を実現しました。

f:id:NTTCom:20220225145238p:plain

図16 インターンを通しての成果

NTT コミュニケーションズのインターンを終えた感想

今村からの振り返り

今回私はこれまでやってきた個人レベルでの開発と、企業レベルでの大規模な開発がどのような点で違うのかを体験したいと思いインターンシップに参加させていただきました。約2週間NTTコミュニケーションズの現場で開発作業を行いましたが、最も重要だと感じた点はチームで決めた方針に沿いながらコードを書いていくことです。

あたりまえの事かもしれませんが、ずっと個人で開発してきた私はかなり苦労しました。個人の開発では個人のアウトプットに最適化すればいいのですが、チームの開発ではチームのアウトプットに最適化しなければなりません。きちんとチーム内でコンセンサスを取り、他の方が担当してる箇所に影響が出ないか。それを吟味しながらの開発は想像以上に重要であり、個人開発ではなかなか意識できない体験ができました。

今回のインターンシップを通して、現場で働くプロの方々の開発の進め方を少しでも自分の中に落とし込んで今後のエンジニア人生に活かしていきます!

木村からの振り返り

今回自分は大学院で行う研究と比べて、企業ではどのような視点で研究開発を行っているのか、自分の研究を将来企業でどのように役立てることができるのかを知りたいという思いでインターンシップに応募しました。そんな思いで2週間Metemcyberの開発に携わる中で、企業での研究開発は常にユーザを見据えて開発を進めることで、そのために必要であり最も有力であると考えられる技術を剪定するということを学びました。

インターン前は、企業の研究開発は新しい技術を使って何かできないかといった視線で開発していると思っていました。しかし、インターンシップの中で、ブロックチェーンやNFTは新しい技術だから研究開発しているのではなく、それが価値を生み出せるから使っていることを知りました。またそういう考えの上で、それぞれの技術が課題解決に対し本当に最適なのかはしっかり見極めなければならないと学びました。

そんな学びを得た上で、今はMetemcyberが今後広がっていき、MetemcyberのNFTバッジがエンジニアの評価の一基準になっている姿を想像するとワクワクしてきます。

今回のインターンシップを通して、そのプロダクトがどういったユーザを想定し、どういった価値を届けられるのかといった要件定義の部分については現場を見てしっかりと学ぶことができました。この経験を踏まえ、今後もエンジニアとして成長していきたいと思います!

トレーナーからのコメント

トレーナーの西野です。今村さん木村さん、お二人ともお疲れ様でした。

今村さんはエンジニアとしての初心を見つめ直す鋭い質問や、学生ならではの観点からチームの開発環境を見直す素晴らしい機会を提供してくれました。個人での開発とチームで行う業務の違いに戸惑った部分もあるかもしれませんが、見事克服して素晴らしい成果を残してくださったと思います。本インターンが、エンジニアとして羽ばたくためのお手伝いになったのであれば幸いです。

木村さんは優れた課題解決能力を活かし今回のインターンを牽引してくれた存在でした。研究開発業務においても、「プロダクトアウトやマーケットインを踏まえた実装がより社会貢献できるものにつながる」と肌で感じてもらえたことは、トレーナーとしても嬉しい限りです。その高い能力を発揮し、社会に貢献できる素晴らしいエンジニアとして邁進されることを祈念しております。

お二方の技術的な貢献を社会に役立つサービスとして世に出せるよう、Metemcyberプロジェクトでは引き続き研究開発を進めていこうと思います。ご参加いただきありがとうございます。

© NTT Communications Corporation All Rights Reserved.