kusshi’s blog

学生エンジニアの日記

コンピュータセキュリティシンポジウム2023で研究成果を発表してきました

横浜国立大学大学院 M1の櫛引淳之介です。 10/30から11/2にかけてアクロス福岡で開催されたコンピュータセキュリティシンポジウム2023に参加し、研究成果を発表してきました。

色々な方のお話を聞いて刺激を受けたり、学生論文賞という評価をいただいたり、美味しいものをたくさん食べたりと、研究の励みになる楽しい出張でした。

前日(10/29)

プログラムと開催場所の都合上、福岡へ前日入りしました。

久しぶりの飛行機でした。飛行機ってすごいですね、動きが速くて驚きました。(?)

昼食は、福岡空港でやりうどんを頂きました。ごぼう天の旨味が染みました。

博多やりうどん別邸さんのやりうどん

会場のある天神の街は地下街が広がっており、買い出しや夕食などの用事を済ませるのにとても便利でした。 夕食はラーメンを頂きました。念願のラーメン、とても美味しかったです。

ShinShinパルコ福岡店さんのラーメン

1日目(10/30)

初日は聴講参加でした。 オープニング、基調講演、マルウェア検知、UWS企画のチュートリアル&パネルディスカッションに参加しました。

オープニングでは、我らが吉岡研関係者から5人が受賞していることを知って驚きました。 レベルの高い環境で研究させていただいていることと、そのありがたみを実感しました。

昼食は研究室の先輩と機能と同じラーメン店へ行きました。ラーメンは前日に頂いたのでちゃんぽんにしました。

ShinShinパルコ福岡店さんのちゃんぽん

パネルディスカッションでは、トップ会議経験者の方々の経験について聴くことができました。 色々と面白いお話がありましたが、テクニカルライティングの訓練を受けた経験が威力を発揮した話が特に印象に残りました。 論文執筆やドキュメント作成では苦労することが多いので、急ぎ身につけなければと思いました。

夕食は、合流した研究室メンバー数名を加えて中洲でもつ鍋を頂きました。 同じ研究室に居ても、学年や研究テーマの離れたメンバーとじっくり話す機会はあまりなかったのでとても楽しかったです。

炉端あほう鳥さんのもつ鍋

2日目(10/31)

2日目、いよいよ発表です。

朝は個人で、昼休みには同セッションで発表する先輩と一緒に、練習やイメトレを行い、昼過ぎすぐのIoT機器セキュリティのセッションで発表しました。 研究室でのミーティングで発表自体には慣れているので大丈夫だとは思っていたのですが、いざセッションが開始するとかなり緊張しました。

発表タイトルは「IPv6環境におけるIoT機器へのインターネットからの攻撃可能性に関する予備的調査」です。 IPv6環境への移行に伴い、SPI (Stateful Packet Inspection) がルータで機能しないことによってIoT機器への攻撃が起こりうるのか?という疑問に答えるため、複数の視点で調査を行いました。

発表後に話しかけてくださった方から、今後が楽しみな研究とのコメントをいただきとても嬉しかったです。

会場を後にして、先輩や共著メンバーと遅めのお昼に餃子を食べに行きました。緊張から開放された直後のご飯は最高でした。

夜は研究室の関係者全員で懇親会、先生から水炊きをごちそうになりました。先生、ありがとうございました。美味しかったです。

とり酒場 華善 春吉店さんの水炊き

3日目(11/1)

3日目は発表待ちのプレッシャーもなく、ゆっくり聴講して回りつつ、研究室内外の方とお会いする1日でした。 テーマの近い方と研究の話をしたり、インターン先で知り合った人とお昼にもつ鍋を食べに行ったり、懇親会で就活の話をしたり。

元祖もつ鍋楽天地 天神本店さんのもつ鍋

3日目ともなると夜はクタクタで、ホテルに帰ってすぐ動けなくなりました。

4日目(11/2)

最終日です。

朝一番のセッションで、研究室メンバーの発表を聴きました。発表が分かりやすく勉強になりました。

次のセッションまで少し時間があったので、太宰府へ観光に行きました。 太宰府天満宮の御本殿は工事中でしたが、その前に建てられた仮殿もとても立派で壮観でした。

太宰府駅

太宰府天満宮の仮殿。屋根の上に木が生えている。どうやって作ったのだろう?

昼食は太宰府参道のお店で明太子茶漬けを頂きました。最終日にして福岡グルメチュートリアルクリア*1です。

ふくや 太宰府店さんの明太茶漬け膳

観光を終え、基調講演を聴きにアクロスへ戻ります。 静岡大・京大の酒井敏先生による「一流の研究は計画通りに進まない」という講演でした。 偶発的な要素に出会えるよう、もう少しゆとりをもって研究に取り組まなければ、と反省しました。

表彰式では、学生論文賞の枠で表彰していただきました。 それほど先行研究の多いテーマではなく、一年以上右往左往しながら進めた研究なので、評価していただけて嬉しかったです。

今回頂いた賞状

表彰式の後は福岡空港に移動し、ラーメンを食べて帰りました。 分厚いチャーシューとこってりスープが疲れた体に染みました。

まんかい 福岡空港店さんのラーメン

おわりに

「予備的調査」と論文タイトルにもあるように、今回学生論文賞を頂いた研究は、まだまだ発展途上のものと考えています。 今回の出張で得た多くの学びや刺激を胸に、引き続きよい研究になるよう精進していきたいと思います。

運営関係者の皆さん、参加者の皆さん、ありがとうございました。

*1:出張前に想定していたものは一通り食べることができたの意。他にも美味しいものがあれば教えてください。

株式会社MIXI CTO室SREグループのインターンシップに参加しました【DIVE INTO MIXI 2023-2024】

こんにちは、横浜国立大学大学院の櫛引淳之介(@kusshi94)です。2023年12月中旬から2ヶ月間、株式会社MIXIインターンシップ ”DIVE INTO MIXI 2023-2024” に参加してきました。取り組んだことと感想をまとめます。

参加までの経緯

直接のきっかけは、サポーターズの逆求人イベントでの接触です。 元々MIXIに対してはインフラ関係でチャレンジングなことをしている会社というイメージがあり*1、自分の興味とマッチしたSRE枠でインターン選考に進みました。

応募したのは「Dive into MIXI 2023 夏季」というサマーインターンの募集枠だったのですが、他社インターンなどの都合で12月に入社が延びてしまいました。柔軟に対応してくださった人事と現場の皆様に感謝です。*2

配属部署と取り組んだタスク

配属部署は開発本部 CTO室 SREグループでした。SREグループは全社横断型の部署で、社内の様々なニーズに応えるため機動的に活動しているチームです。プロダクトのインフラ関連技術支援、一部システムの保守運用、全社課題の技術的解決などを幅広く担当しています。

私の取り組んだタスクも、全社横断で技術面から課題解決に取り組むものでした。具体的には、下記2つをアサインされました。

  1. 社内サーバのクラウド移行
  2. メール送信システムのためのDMARCレポート監視システムの構築

とはいいつつも、この2つだけをやっていた訳ではなく、PRのレビューやタスクに関連するミーティング、全社での情報共有など、元々のスコープ外にも少しはみ出てお仕事させていただいていました。特に、後述するGmail迷惑メール対策ガイドラインの強化については、どのように対応していくか相談しながら考えていくような形で進めさせていただきました。実際の運用を考えられるようになっていきたい気持ちがあるので、何よりありがたいことでした。全般的に、会社の一員として迎え入れていただいたという感覚が強く、タスク外のところからの学びも多いインターンでした。

DMARCレポート監視システムの構築

今回のインターンで取り組んだメインのタスクは、事業部の使用するメール送信システムで使用する、DMARCレポート監視システムの構築でした。

Gmailは2024年2月1日(インターン期間中!)を境に、迷惑メール対策に関するガイドラインを強化しました。具体的には、1日あたり5,000件以上のメールをGmailのアドレス宛に送信する送信者に対して、送信メールの認証などの対策が義務化されました。

MIXIには、ユーザ宛のメール配信機能をもつシステムがいくつも存在します。MIXIで運用しているID基盤システムの中のメール送信システムはその一つで、SREグループが実運用を担当していました。このシステムも1日あたり5,000件以上のメールを送信するため、新しいガイドラインに準拠するようメール認証に関する設定を行う必要がありました。

support.google.com

メール認証による迷惑メール対策の手順は、大まかに以下の4フェーズに分かれます。

  1. SPFDKIMを設定
  2. DMARCレポートを受信できるよう、DNSにDMARCレコードを追加する
  3. DMARCレポートを定期的に受け取り、設定ミスなどによる誤判定がないか監視をする
  4. DMARC認証に失敗したメールを、受信拒否するようDMARCレコードを変更する

SREグループの運用するID基盤システムでは1番目が完了しており、インターン期間中にメンターさんと確認しながら2番目の設定を行いました。その後、3番目のDMARCレポートの定期的な受け取りのためのシステムの開発に取り組みました。このシステムは、ID基盤システムでのDMARCレポート監視用に動かし始め、他のメール配信システムでも利用することを想定するものです。

構築したシステムのインフラ構成図

処理の流れを簡単に説明します。Gmailなどのメールサービスなどから送られてきたDMARCレポートはAmazon SESで受信され、S3に保存されます。S3にメールが保存されるとLambdaが起動し、前処理としてオブジェクトキーにメールを受診した日付の情報を付与します。 これをEventBridge Schedulerによって定期的に実行するLambdaで解析し、Slackへの通知を行います。通知内容は、SPF/DKIM/DMARCの認証に失敗した件数です。 シンプルな構成ですが、セキュリティ上の理由で処理対象のメールサービスプロバイダを絞り込んでいることもあり、入力データの量が大きく変動することなどもないと考えこのような形にしました。

実際には、図の前処理用Lambdaの実装と、EventBridge Schedulerの構築まではできず、半手動での動作確認を行った状態でインターン終了の日が来てしまいました。 本番運用に乗るところまで見届けられなかったのは少し残念ですが、方針を考え変えていきながらの対応だったことも踏まえると、主処理をなんとか作り終えることができてよかったです。また、最終的に採用しなかったものも含めてこれまで経験のなかった他のAWSのサービスの利用を検討してみたりと、実際のユースケースを通じてよい質の高いインプットができました。

生活

参加期間自体は2ヶ月と長めでしたが、勤務日数はそれほど多くなく、数えたところ合計20営業日でした。背景には、学業との兼ね合いで週3勤務だったことに加え、年末年始を挟んだり、研究室の海外出張に参加していたりと、少し長めの休みが入ったことがあります。今思えばもう少し働きたかったところですが仕方ない。

オフィスが魅力的で、週1ペースで出社もしていました。渋谷駅直結の超好立地、安くて美味しい社食と社内カフェ、窓から見える景色、昇降デスクとアーロンチェアなど、快適に働ける環境が整っていました。特にビュッフェ形式の社食は気に入ってしまい、出社する度に食べすぎていました。

社食のカフェテリアでのランチ。

それから、社内のイベントには沢山参加させていただきました。イベントでお話させていただいた方は皆活躍されている方ばかりで、MIXIにはすごいエンジニアが大勢集まっていることを実感しました。

学んだこと

今回のインターン全体を通して、運用の難しさを学びました。特に、影響範囲の調査と、外的要因との向き合い方の難しさを垣間見ることができました。

例えば、インターネットの基盤となっているDNSやメールが、運用する側から見ると少々扱いづらい側面があることを設定しながら体感できました。特にDNS名前空間と権限が対応する形で設計されているため、一つのドメインを色々なところで使おうとすると一般的と思われるユースケースでも管理のコストが大きくなります。少しずつ継ぎ足しで拡張されてきた仕組みにはつらいものがありますね。その意味で、今回のタスクと直接の関係はありませんが、IPv4IPv6の互換性を切る判断をした先人たちの気持ちが分かってきました*3

また、運用を楽にするためのIaCやCI/CDも、長い時間軸で見るとメンテナンスコストがかかるということを実例を見て学びました。運用は変化させずシンプルにしておければそれに越したことはありませんが、一方で、予測しづらい外的要因による変化もあり、やはり一筋縄ではいきませんね。

今後の課題

インプットにもっと時間を使っていきたいです。他社のものを含めると約半年間連続でインターンに参加していましたが、期間中は研究との両立のためにいつも時間に追われており、業務の中でインプットしたいことが出てきても勉強する時間を満足に取れないでいました。

今回DMARCレポート監視システムを開発するにあたり、自分の設計、開発力の不足を思い知りました。今は反省を受けて積んでいたDDDの本を読んでいますが、先に読んでおけばもっといい設計ができた気がしています。やはり、基本的なところは誰かに整理されているものですね。というわけで、当分は、ソフトウェア設計・開発の基本的なところをインプット中心に抑えていこうと思います。

以下に、具体的な反省点と、勉強したいことを残しておきます。

DMARCレポートの解析用Lambdaの実装では、テストを書くことを後回しにしたせいで、全てのテストを書ききれておらず、また、実際にコードをLambdaに乗せて動作確認するまで初歩的なミスに気づかないという場面がありました。これはテスト駆動開発をしていれば避けられたはずです。現在はテストをどう書いていけばよいのかというところから怪しいので、基本から勉強していきたいと思います。

加えて、これは責務の整理と表裏一体ですが、インターフェースの命名もあまり分かりやすいものになっていないという課題もあります。また、コードレビュー、ドキュメントライティング、ログ実装などについても、必ずしも明確な意思に基づいて行えてはいませんでした。これらの点については完全に我流でやっており、「守破離」の「守」から始める必要があると考えています。

今回知った運用の難しさも、ある程度は単純な力量で十分に解決できる側面があると思っています。今認識している伸びしろを逃さず、力をつけていこうと思います。

おわりに

実践を通して楽しく働きながらも、仕事の難しさや自分の課題を知ることのできる充実したインターンでした。

最後になりますが、インターン期間中にお会いした皆様、日々業務を支えてくださったバックオフィスの皆様、そして人事と現場チームの皆様、ありがとうございました!

修了証とノベルティ

*1:23卒で就活をした友人からの評判や、MIXI Tech Conference 2023での発表の充実ぶりから。

*2:後で知ったことですが、MIXIでは冬季インターンも積極的に受け入れており、そちらの枠に入れていただいた形になります。同時期に参加中のインターン生が自分の他にも何人もいました。

*3:互換性を切ったIPv6はなかなか普及しきらないので、継ぎ足しが現実的なのでしょう。

2023年の振り返り

@kusshi94 です。大晦日なので、2023年に何をしていたか簡単に振り返っておきます。

各時期の振り返り

卒論執筆・学部卒業(1月〜3月)

卒論を書いて学部を卒業しました。

私の所属していた学科では、卒論の実質的な締め切りが2月半ばだったので、年明け〜2月半ばがそのまま卒論執筆期間になりました。 研究室に行くことも、指導教官にミーティングを頼むこともあまりなく、引きこもっての執筆でした。 早め(当研究室比)に着手したこともあって、集中して早めに終わらせるつもりだったのですが、結果的にダラダラ書くことになってしまい反省しています。

論文提出後は、研究室で任された仕事やサマーインターン探しなどで忙しくしていたら、いつの間にか卒業していました。

進学・インターン選考・ハッカソン(4月〜6月)

新学期が始まり、大学院に進学しました。 とはいえ、研究室・テーマ共に学部と変わらず、進学というより進級のようなものでした。

この時期はとにかく忙しく、研究をした記憶が薄いです。 B4の頃とは違って授業を受けなければならず、ハッカソンやサマーインターンの選考にも参加し、さらには家のことでもごたごたがあり、それどころではありませんでした。 去年から続けていた長期インターンも、流石にやめることにしました。

幸いにして、研究でもハッカソンでも心強いチームメンバーがいたため、手を動かさなければならない部分はなるべく協力してもらうことで、考えたり決めたりすることに集中できました。 これまでワンマンで進めることの多い人生だったので、これはこれでいい経験になったと思っています。

kusshi.hatenablog.jp

kusshi.hatenablog.jp

国内学会とインターンに参加(7月〜)

7月に入って、国内学会で発表することに決め、論文の執筆や追加の実験を行いました。 卒論執筆時の反省点を踏まえ、早めに着手しつつこまめにミーティングを行うことで、余裕を持って完成させることができました。

とはいえ、提出締め切りの1週間以上前にインターンが始まってしまったので、最後の微修正は通勤中の電車内で進めることになりました。 スマホでOverleafを開くのはこれで最後にしたいです。

インターンには5社参加しました。 期間はバラバラですが、論文執筆で夏休みがほとんどなかったため、研究の合間に行ける就業型のものがほとんどです。 最後の1社は12月入社で、現在も継続中です。もうしばらく頑張ります。

buildersbox.corp-sansan.com

kusshi.hatenablog.jp

kusshi.hatenablog.jp

blog.recruit.co.jp

インターンの合間の10月末には、8月に提出した論文の内容について国内学会で発表しました。 とにかく食べ物が美味しかったです。

kusshi.hatenablog.jp

全体を通しての振り返り

対外的な活動を増やした

インターン、学会発表、就活、ハッカソンなど、対外的な活動に参加することの多い1年間でした。 私は基本的に引きこもり気質なので、今年はチャンスがあれば飛び込むということをかなり強く意識しました。 背景として、学部生活が家にこもってインプットしているうちに終わってしまったような感覚があり、アウトプット駆動で活動してみたくなったことがあります。

結果として、これまでにできなかった経験を色々でき、各所でそれなりに評価していただくこともできました。 速く量をこなすつもりでいましたが、質もきちんとついてきてくれたと思います。

増やしすぎた

ただ、残念なことにキャパオーバーになってしまったことも否めません。

大学院に入ってからは、じっくりインプットしたり、地道な調査に時間を割いたりする余裕があまり取れていません。 これについては、6月の記事で既に壁にぶつかっていますね。

そんなわけで、今回のイベントを通して、とにかく高頻度で作って人前に出すことと、じっくり時間をかけること、両方の重要性を同時に感じました。 Explore-Exploit Tradeoff っぽいところがありますね。 これだけだと「要はバランス」で終わってしまうので、今後の方針を宣言しておきます。 基本的にははスピード(デプロイ頻度みたいなもの)あっての品質だとは思います。 ただ、追加開発を行っている間は流石に忙しく、「武器を磨く」時間がないことへの悩みが強かったです。 また、キャリアの視点でも、ものづくりに全振りしようとは考えていないため、高頻度で作ることは最優先課題ではないと認識しています。 さしあたり、技術や知識を時間をかけて掘り下げる方に寄せようと思います。

技育CAMPアドバンスで【企業賞】を受賞しました - kusshi’s blog

こんなことを書いていますが、大変恥ずかしながら技術や知識を時間をかけて掘り下げる方に寄せられていないです。

また、活動時間の確保のために睡眠時間や運動の時間が削られており、この生活は持続可能でないことも感じています。 というか今、普通に風邪を引いています。年末で病院もやっていないので、市販薬を飲んで寝るしかありません。自己管理ができていればこうはならなかったかもしれない。

来年の課題

上に書いた通り、現在も就業型インターンに参加中です。来月は研究関係で海外出張もあります。 余裕はありませんが、今だけですし、やると決めたことなので、引き続き頑張ります。 その後についても既にいくつか計画がありますが、全部やっていたら今年と変わらないので、絞り込む方向でやるべきことを決めていきます。

本当に必要なことを選べるようになることを来年の抱負として、今年の振り返りを終わりたいと思います。

DMM.comのインターンシップでネットワークの技術を学びました

2023年9月上旬から10月上旬にかけての約1ヵ月間、合同会社DMM.comの就業型インターンシップに参加してきました。 配属部署はインフラ部ネットワークグループで、DMMのデータセンターを支えるネットワーク技術を学びました。

参加までの経緯

3月に参加したサポーターズの逆求人イベント「エンジニア1on1面談イベント」経由でお声がけいただき、参加に至りました。 イベントではどちらかといえばセキュリティ系のインターンを探していたのですが、面談の中でDMMさんの働き方やネットワークへの強さに興味を持ち、セキュリティ枠の募集がなかったものの選考に進むことにしました。

4月中に面接を終え選考結果もいただいていたのですが、学業との兼ね合いもあり、実際に参加したのは9月に入ってからでした。

インターンシップの内容

9月に始まり、週3日、リモートワークでの参加になりました。

ネットワーク演習課題

インターンの前半では、演習課題を通じてDMMのデータセンターで使われるネットワーク技術を学びました。 ネットワークエミュレータのEVE-NGを使って仮想環境上でJUNOSの設定を行い、簡易的なDMMのネットワークの模擬環境を構築しました。

課題自体は期間内にこなせたものの、実力不足で深掘りしきれなかったのが少し心残りです。 事前知識は大学での研究(インターネット関連のセキュリティがテーマ)の副産物として得られたものが中心で、ルータOSの操作もYamahaのルータで実験環境を構築してきた程度でした。 クラウドインフラの構築とは段違いの緻密さに面白さを感じながら、「ネットワーク完全に理解した」状態から「なんもわからん」状態に進歩(!)しました。

開発:Flow Collectorによるインシデント対応支援ツール

インターンの後半では、ネットワークグループの業務の一環として、インシデント対応を支援するためのツール開発に取り組みました。

セキュリティインシデントへの対応においては、被害範囲の早期特定が収束までのスピードを大きく左右します。 オンプレミス環境でのインシデント発生時には、ネットワークグループも被害範囲の特定に協力することがあります。 具体的には、インシデント対応を専門とする仮想組織のDMM.CSIRTに対し、攻撃に関連する通信のログ情報を提供しています。 このとき提供するデータの収集・取得には、DC内のネットワークにおけるフローを収集・分析するFlow Collectorと呼ばれる装置が使用されています。

DMMで使用しているFlow Collectorでは、Web UIとAPIからフローに関する様々な情報が取得できます。 これまでの業務では、Web UIからトラフィックの一部をPDFなどの形式でダウンロードし、提供していました。 しかしながら、この方法には、以下のような問題点がありました。

  1. ダウンロードできるデータ数に10,000件という上限がある
  2. データの一部がFlow Collectorの内部表現となっている

これらの制約は被害範囲の特定スピードを大きく落とすものとなっており、全社的なセキュリティ向上のための課題の一つとして挙げられていました。 今回のインターンでは、この問題を解決するため、フローデータを適切な形でダウンロードするためのツールの開発に取り組みました。 開発したツールの全体像を図に示します。

開発したツールの全体図

今回開発したツールは、これまで使用されてこなかったFlow CollectorのAPIを活用するものとなっています。 攻撃者や被害者のIPアドレス、フローを取得したい期間を指定することで、SQLiteのデータベース形式でフローデータをダウンロードできます。

実装にあたっては、ダウンロード用APIにページネーション機能がないこと、ダウンロードされてくるレコードが時系列順に並んでいないことへの対応に手間取りました。 一度のリクエストでダウンロードしきれなかったレコードは、データ取得対象期間をずらすことで無理やりダウンロードする半ば力技の実装で対処しました。

データが時系列順に並んでいないため、この方法では一部レコードが欠損しますが、一度に取得するレコード数を増やして影響が軽微なものとなるよう工夫しました。 Flow Collectorでは元々トラフィックの一部をサンプリングしているため、多少の欠損は許容できると判断しました。

データセンター見学、懇親会

インターンシップは基本的にフルリモートでしたが、途中にデータセンターの見学や、懇親会への参加の機会をいただき、チームの方と直接会ってお話しました。 データセンターでは、普段見られない機器群はもちろんのこと、実際の業務の様子も見学させていただきました。 リモートでは見えづらかったチームでの働き方と雰囲気を知ることのできるよい機会になりました。

学んだこと

勉強になることの多い濃密な一か月間でした。その中で、一番の学びは自分の実力不足がよく分かったことです。

就活期以前のものも含めるとインターンに参加するのは6社目でしたが、正直なところ、今回のインターンが一番難しく苦労しました。 DMMには優秀なエンジニア学生が大勢集まってくるため、期待値も比較的高かったのではないかと思います。

このことは、井の中の蛙だったことに気が付くことができたという意味でいい進歩だったと捉えています。 とてもレベルの高い環境でしたが、背伸びして飛び込んでみてよかったです。

おわりに

サマーインターン参加前は、有名企業のエンジニアインターン体験ブログを読んではレベルの高さに戦々恐々としていました。 DMMでのインターンが始まってからも、我ながらよく受かったなと何度も思いました。 もしこれを読んでいる方の中にこれから参加するインターンが不安な方がいるなら、あまり気にせずチャレンジしてもよいのだと思っていただければ嬉しいです。

最後になりますが、インターンを通して、人事や現場の皆さんから様々なサポートをいただきました。 DMMの皆さん、1か月間ありがとうございました!

最後に頂いた修了証。1か月間ありがとうございました!

サイボウズのインターンシップでPSIRTの仕事について学びました

2023年8月に開催されたサイボウズ株式会社のサマーインターンシップに参加し、 手厚いサポートの元、脆弱性検証や評価の基本的な考え方、セキュリティ業務におけるコミュニケーションの重要さを学びました。 また、サイボウズの理念や、Cy-PSIRTの攻めの取り組みについて知ることができました。 学んだことについてまとめます。

参加までの経緯

3月頃、人事の方と関連イベントで知り合ったのがファーストコンタクトでした。 イベント内の企業プレゼンと座談会で、サイボウズのセキュリティへのこだわりや、モブプロ文化について耳にし、興味を持ちました。

イベント終了後には、セキュリティエンジニアの方(後のメンターさん)との面談の機会を頂きました。 面談でお話させていただく中で、自社製品のセキュリティにコミットする働き方に興味を持ち、インターン選考への参加を決めました。

参加決定後にはインターン生と現場社員の方の顔合わせ会がありましたが、私は参加できませんでした。残念です…

インターンシップの内容

今回参加したインターンシップは、Cybozu Internship 2023 Engineer & Designer のプロダクトセキュリティコース第1タームです。 2023年8月28日から8月31日までの4日間、オンラインで開催されました。

インターンの内容は、サイボウズのプロダクトセキュリティを担当するCy-PSIRTの業務を座学講義と演習で学ぶものです。 講義では、各業務に詳しい社員の方から直接取り組みから考え方までを知ることができました。 演習では、実際に脆弱性のあった過去のバージョンのサイボウズ製品を動かしながら脆弱性の検証や評価を行いました。

プログラムについてはメンターの方が書いた記事に詳しく掲載されています。 記事は2022年のものですが、基本的には同じ内容です。

blog.cybozu.io

その他にも、社員の方との会食、社長の青野さんとの「ザツダン」など、会社の雰囲気を知ることのできるコンテンツがありました。

学んだこと

検証や評価の基本的な考え方

プロがどのようなことを考えながら脆弱性の検証、評価に取り組んでいるのか知りました。

基本的なWebアプリケーションの脆弱性は、ユーザからの入力が別のどこかで出力されることで発生します。 演習を通して、脆弱性を作り込まないための戦略として、不正な値を入力させないことと、入力値を出力する際に発火させないことの両方の対策があると考えました。 この点についてどう考えているのか伺ったところ、前者での対策をより重視しているとの回答を頂きました。

また、脆弱性の評価については正直あまり知らなかったので、漠然と知っていただけのCVSSがどのようなものなのか分かるようになりました。 プログラム全体を通して、「CVSSは4.3に収束しがち」というちょっとした肌感覚や、評価そのものの難しさ、CVSSでの評価が脆弱性の深刻さや対応の優先順位を決める上で完全でないことなどを知りました。

さらに、CVSSが完全でないのであれば、何のために評価を行うのかと疑問に思い、振り返り会や懇親会の場で詳しくお話を伺いました。 様々なご意見を頂きましたが、脆弱性の公表を重視しているため、必然的にCVSSを使うことになるのが一番の理由だと認識しました。 また、自分で評価を行ってみた結果として、抜け漏れなく評価を行うためのフレームワークとしては十分有用だと感じました。 実際、プロダクトチームに評価した脆弱性の修正を依頼する際には、評価値よりも評価の根拠を詳しく伝えるとのことでした。 演習で得た実感としては、根拠をもってCVSS評価をしようとすれば、トリアージに必要な情報を提供することができるように感じました。

総じて、疑問や考察に対してメンターの方から手厚いフィードバックを頂き、多くの考え方を吸収できました。

セキュリティ業務におけるコミュニケーションの大切さ

脆弱性検証では、モブプログラミングの知見を活かした「モブ検証」形式で演習を進めました。 他のインターン生と二人一組になりつつ、社員の方にアドバイスを頂きながら共同作業で検証しました。

blog.cybozu.io

脆弱性関連の業務は絶対的な方法がなく、コミュニケーションを取りながら進めることが効果的であることを感じました。 検証の方法は経験則によるところがあるそうで、実際、演習でもモブ形式により見落としを減らすことができました。 評価においても、前節の通りCVSSなどの指標は完全なものではないため、判断の根拠などを伝え合うことが何より重要です。 また、社外のバグハンターの方から報告された脆弱性の再現手順を実際に試す中で、報告された手順の形式にばらつきがあり、意思疎通に難しさがあることを体感しました。

サイボウズとCy-PSIRTについて感じたこと

理念と文化に嘘がない

青野さんとの「ザツダン」では、事前に募集された質問に沿って、直接会話させていただきました。 青野さんはインターン生ともとても気さくに話してくださり、風通しのよさが本物なのを感じました。 理念に行きつくまでのエピソードや、なぜそれを大切にしているのかについても詳しく伺うことができ、本気でチームワークあふれる社会を創ろうとしているのだとわかりました。

対外的な取り組みへのこだわり

Cy-PSIRTの業務では、対外的な取り組みに力が入っている点が印象的でした。

サイボウズは日本におけるバグバウンティプログラム実施企業の先駆けとしても知られていますが、 報奨金制度を運営するにとどまらず、バグハンターの方を招待して実施する「バグハン合宿」なるイベントなどにも取り組んでおり、外部通報への本気度を感じさせられます。

blog.cybozu.io

上で述べた通り、報告された脆弱性の再現手順は必ずしも理解しやすいものばかりでないことを実感したため、 ハンターの方と近い距離で関係を作るこのような取り組みへの想いを理解できました。

セキュリティは基本的に守りの分野ですが、Cy-PSIRTの対外的な取り組みからは攻めの姿勢を感じられました。

サイボウズインターンのおすすめポイント

来年以降、サイボウズインターンへの参加を検討している方向けへおすすめしたいポイントを書いておきます。

サポートがとても手厚い

インターンの4日間は、メンターの方にいつでもなんでも聞ける体制となっていました。 個々人での演習中もマイクカメラオフでZoomが繋がっており、不安なく進められました。

金銭面でも、社員の方とのランチや最終日の懇親会では補助が出ました。社員の方のお話を聞きながら食べるお寿司は格別でした。 そしてお給料やノベルティまでもいただけます。ありがたいことこの上ないです。

優秀な他のインターン生との交流

他のインターン生とは、モブ検証やランチなどで色々お話させていただきました。 他の皆さんが本当に優秀なことはもちろんですが、やってきたことや志向性、課題への取り組み方にも少しずつ違いがあり、とてもいい刺激になりました。

まとめ

サイボウズとプロダクトセキュリティの仕事について濃密に学べたインターンでした。 社員の皆さん、他のインターン生の皆さん、4日間ありがとうございました。

技育CAMPアドバンスで【企業賞】を受賞しました

2023年6月24日に開催されたハッカソンイベント「技育CAMPアドバンス」に参加し、チームで開発したアプリについてプレゼンを行いました。 審査の結果、ウイングアーク1st様から企業賞を頂きました。

表彰状。私と、リュックに入らなかったメンバーと、酔って手に持ったままトイレに行こうとしたメンバーの分。

参加背景

技育CAMPアドバンスは、技育CAMPのハッカソンイベントで入賞を果たしたチームのみが招待されるクローズドイベントです。 ハッカソンで開発したプロダクトを継続開発して持ち寄り、プレゼンと審査、参加者同士の交流が行われます。

私は2023年4月に参加した技育CAMPハッカソンvol.2にて開発したSlackアプリ「GenieSlack」で努力賞を頂いており、追加の開発を行って参加しました。

kusshi.hatenablog.jp

プロダクトと発表内容について

GenieSlack

今回開発したGenieSlackは、「情報のストックを、もっと手軽に」するSlackアプリです。 リアクションひとつでSlackのメッセージを要約し、ドキュメント共有サービスesaにストックします。

技育CAMPハッカソン終了時点では、開発用に作ったワークスペース専用のアプリでした。 今回の技育CAMPアドバンスでは、アプリを一般公開するために機能の開発を行いました。

現在はこちらのページで公開しています。

www.genieslack.kusshi.dev

発表

speakerdeck.com

発表時間3分にぴったり間に合わせられるよう調整と練習もしてきたのですが、少し時間をオーバーしてしまいました。 開始時にいただいた拍手の時間が発表時間にカウントされていたこと、埋め込んだ動画が読み込まれるのに時間がかかったことで計算が狂いました。リアルイベントは何があるか分かりませんね。 目の前には審査員の方が一列に並んでおり、更にその後ろには大勢の参加者がいたこともあって、内心焦りに焦りました…

それでもコンセプトは無事伝わったようで、自分では及第点と思っています。 綺麗なスライドを作るスキルがない分、なるべくシンプルにメッセージを繰り返すようにしたのが上手くいったなら嬉しいですね。

フィードバックと学んだこと

審査員の企業の方や他の参加学生の方からフィードバックと交流の機会を頂き、多くの学びを得ることができました。

プロダクトの内容について

プロダクトのコンセプトについては多くの方に納得していただくことができ、「使いたい」と言っていただけました。特に、操作がリアクションひとつで済む点は好評でした。 実は追加開発中にリアクションではなくShortcuts機能で要約を実行する案も出ていたのですが、リアクションを使うのがシンプルとの判断で没になっていました。 今思えばよい判断だったと思います。

ただ、実際に使ってもらうにはハードルを感じました。 今回ストック先に使用したドキュメント共有サービスがesaだったため、GenieSlackの対象ユーザがesaユーザに限られてしまう点がネックとなってしまいました。 Notion等、他の人気サービスとの接続もできるようにしてくればよかったと1日のうちに何度も思いました。 研究室で使えるようにesaで作りましたが、使ってもらうには需要を見ることが大事ですね。

最低限作り上げるか、こだわって時間をかけるか

他の参加学生は、ハッカソン経験者がとても多いことが印象的でした。 私たちのチームは全員が初めてのハッカソン参加からの追加開発でしたが、話してみるとハッカソン経験が豊富な方ばかりでした。

私も普段の研究活動や開発においてフィードバックの強力さは実感しており、不完全でもまず人に見せることをかなり意識的に行っています。 それでも、息をするようにハッカソンに参加し「走りながら学ぶ」ことを体現している方々を目の当たりにすると、自分の中の完璧主義はまだまだ強いと思わされました。

その一方で、利用規約とプライバシーポリシーを書いたり、CI/CDを整備したりと、直接プロダクトを形成しない部分についてもこだわったことは学びになり、評価もされました。 企業審査員の方には、サービスを実際に運用するには、持続的な品質や法律などにも配慮して時間をかける必要があるとのコメントを頂きました。 個人的には、運用寄りのことにもしっかり学びたく、ハッカソンに何度も出るより腰を据えてサービスを作り込みたい気持ちもあります。

そんなわけで、今回のイベントを通して、とにかく高頻度で作って人前に出すことと、じっくり時間をかけること、両方の重要性を同時に感じました。 Explore-Exploit Tradeoff っぽいところがありますね。

これだけだと「要はバランス」で終わってしまうので、今後の方針を宣言しておきます。

基本的にははスピード(デプロイ頻度みたいなもの)あっての品質だとは思います。 ただ、追加開発を行っている間は流石に忙しく、「武器を磨く」時間がないことへの悩みが強かったです。 また、キャリアの視点でも、ものづくりに全振りしようとは考えていないため、高頻度で作ることは最優先課題ではないと認識しています。 さしあたり、技術や知識を時間をかけて掘り下げる方に寄せようと思います。

結果:ウイングアーク1st株式会社賞

企業賞(ウイングアーク1st株式会社賞)を頂きました。 プロダクトの内容と、ハッカソンでは手を出しにくいがサービスとしては重要な部分に取り組んだことを評価していただきました。

副賞として、食事会に招待していただけることになりました。ありがとうございます!

おわりに

技育CAMPハッカソンのスタートから数えて約3か月間、意義深い経験をさせていただきました。 サポーターズ運営チームの皆さん、スポンサー企業の皆さん、チームメンバーと他の参加学生の皆さん、ありがとうございました!

学業と就活のためすぐには難しそうですが、ハッカソンには再チャレンジしたいです。

twitter.com

技育CAMPハッカソンvol.2で努力賞を受賞しました

情報系の大学院でセキュリティの研究をしている修士1年のkusshiです。 2023年4月15-16日に技育CAMPハッカソンvol.2に参加し、努力賞を受賞しました。

技育CAMPハッカソンとは

技育CAMPとは エンジニアを志す学生の皆さんに ハッカソンと勉強会を通して 継続的なインプットとアウトプットの場を提供する スキルアップ支援プラットフォームです。

技育CAMP | サポーターズ

技育CAMPハッカソンは、株式会社サポーターズが開催する初心者向けハッカソンです。 今回のテーマは「はじめてのハッカソン」で、自主制作のきっかけに最適な機会でした。

チーム構成

技育CAMPハッカソンは、複数人のチームで参加する以外にも、個人(1人)や即席チームでの参加も可能です。今回は、研究室の同期5人チーム【チーム勝成】で参加しました。全員ハッカソン初参加で、開発経験はまちまちでした。

↓参加メンバー

twitter.com

twitter.com

github.com

github.com

開発したもの

Slack上のメッセージをChatGPTでMarkdown化、カテゴライズし、esa.ioで記事化するアプリGenieSlackを開発しました。

GenieSlackの概要

Slackからesaに変換

github.com

流れてしまいやすいSlack上のフロー情報を、リアクションひとつでesaにストックできます。

発表スライド・デモ動画

speakerdeck.com

www.youtube.com

工夫点

モブプログラミング

メンバーが共通して持っているスキルがPythonくらいだったので、互いに知っている技術や開発手法を教え合いながら開発を進めました。

そのための工夫として、モブプログラミングの方法を取り入れました。基本的に全員が一緒に一つの作業をする形式で進め、詳しい人ばかりが手を動かすことのないよう進めました。体調不良で1人はリモートでしたが、他4人は研究室に集まり、通話も繋げてわいわい開発しました。

モブプロはリソース効率が低下しますが、事前開発と徹夜でなんとかカバーしました。

生成AIの活用

アプリ自体にChatGPTを組み込んでいる点以外にも生成AIを使っています。

GenieSlackというアプリ名は、作りたい内容をもとにChatGPTが生成したものから選びました。また、アプリのアイコンはDALL-Eで生成したものです。

GenieSlackのアイコン。プロンプトは「Slackの会話をChatGPTで解析し、Esaで情報を生成する魔法のランプのようなアプリケーションのアイコンのイメージ。シンプルで親しみやすい雰囲気。」メンバーの一人がサクッと作ってくれた。

命名センスも画力もないチームでしたがそれっぽくできるのはすごい時代ですね。 この点は運営目線でもインパクトがあったそうで、noteに記事が上がっています。

note.supporterz.jp

結果

努力賞を頂きました。

全員ハッカソン初参加、全然余裕のない状態での受賞でまず何よりも驚いてしまいました。拍子抜けしている間に講評が始まってしまい若干記憶が曖昧なのですが(すみません…)各種APIの活用、モブプロを評価していただいたようです。特にモブプロについては、きっと面白いと思って挑戦したので嬉しかったですね。

また、受賞チームが招待される6月の「技育CAMPアドバンス」に参加させていただく予定です。今回開発したアプリの継続開発を行い、その内容をプレゼンすることになります。改善点は色々あるので主にこのGWを使って頑張ります。

twitter.com