2018/3/17無事に大学を卒業した。
良い機会なので4年間を振り返る。


1年目

プログラミングとかセキュリティに入学当時から興味を持ってはいたものの、ARとかMRとか、もっと実世界に直接影響をあたえるようなことがしたいなーみたいなのを思って情報学部に入った。すぐ興味は失せたが…

5,6月ぐらいにTwitterでセキュリティ・キャンプというものがあるという情報を得たので応募するために色々やっていた。
ポートスキャンという単語を知って、ファイアウォールがある環境下ではどのようなパケットを投げれば良いかを考え、パケットを作ったり読んだりしていた。
組み込み機器のネットワークセキュリティ的なものが気になって、PS3とかその変に転がってるネットワークに繋げれるものに色々パケットを投げつけてはフムフム言っていた覚えがある。
ちなみにセキュリティ・キャンプには落ちた。落ちたので福岡のセキュリティ・ミニキャンプに参加した覚えがある。

セキュリティ・キャンプに落ちた後は悔しくてネットワークに限らず、おもしろそうなものには手を出すみたいなことをやっていた。
CTFにもハマっていて、ひょんなことからSECCONの決勝に出れるようになったので、出場した。

大学はというと、特にサークルに入っていたわけでもなく、暇だったので研究室に転がり込んだ。
当然、正式配属ではないので当時は自分のデスクもなかったけど、気づいたらデスクや余ってるマシンを4台ぐらい与えられていた。
せっかくマシンがあるならということで、プライベートクラウドを作ってみたり、ルーティングの勉強をしたりしていた気がする。このあたりからRTX1000とか手が出せる範囲の業務用ルータをポチって自宅NWを作ることに興味を持った気がする。

2年目

セキュリティ・キャンプ全国大会に参加できた。
これまでは周りに技術の話をできる人間がいなかっただけでに、かなり充実した時間を過ごせた覚えがる。朝から晩まで講義があるのに、講義が終わっても参加者で集まってCTFやったりとかしていた。

その後は、マルウェアとかその辺に興味を持って、アンチマルウェア技術を追ったり、ハニーポットに手を出していた。
ハニーポット運用ではインターネットでどのような攻撃が起きているのかまとめてフムフムとか言っていた。
この内容についてはセキュリティ・キャンプアワードで発表して最優秀賞を頂いた。あまり大したことやってないが……

イエラエセキュリティでWebアプリケーションの脆弱性診断アルバイトを始めたのもこの時期。

3年目

SECCONビギナーズ(旧 CTF for ビギナーズ)のNW / Forensics講師をやることになった。
競技中に落ちるネットワークとかクソ問を作ってしまったりして迷惑しかかけていない気がする。

ビギナーズのメンバーで「セキュリティコンテストのためのCTF問題集」という書籍を出した。
https://www.amazon.co.jp/dp/4839962138
自分はPart3の「Re:Build」という問題を担当した。

大学ではプログラミング教育をいい感じにしたいみたいな研究のために、Amadeusというオンラインコンパイラを作った。
https://speakerdeck.com/mrtc0/osc-2016-hiroshima-lt-onrainkonpairaamadeusfalsekai-fa

学生はブラウザのみあれば良くて、Webページ上で全て完結するので、環境構築不要。CやJavaなど大学で学ぶ言語だけでなく、PythonやRuby、Haskellなどの言語にも対応。
オンラインジャッジ機能もあって、学生の学習状況を可視化。全てのコンパイル履歴だけでなく、エディタに入力したキーも全て取得。
コンパイルや問題へ挑戦している様子をリアルタイムで教師側画面に表示。
などなどの機能があって、それなりに便利なものを作ったと思っている。
この内容で初めて国際学会にも出た。
学内向けとはいえ、初めて"ユーザーに使ってもらうWebサービス"を作ったのはいい経験だった。
全て一人で作っていて、フロントからバックエンドまで全部面倒を見ていた。VueJS、Django、Redis、MySQL、LXDあたりを使っていて、 cgroupsなどのわりと低めのレイヤーからWebという上のレイヤーまでやる羽目になったので大変だったというのが正直なところ。
苦労したのはデザインで、自分は圧倒的にデザインセンスがなかったり、ユーザーにとって使いやすいUIを作るというのが致命的に下手だった。デザイナーなんてCSSとHTML書くだけじゃんと思ってた時期がありました、お詫び申し上げます。

サービスの運用を始めると「エラー収集どうすんの」とか追加機能つけるときに「この設計だと…」とか「テストが…」とかを体験して、開発より運用や継続的な開発の方が大変だったりした。

ユーザーから意見を得るというのは良くて、自分では気づかないところに気づいてくれる。
「良い」「使いやすい」とか意見を貰えることも多くて、嬉しい限り。

継続的な開発はそれなりに大変だと感じたが、より便利な機能を作ったり、テストを元に安全にリファクタリングをしたりするのは楽しいし、アーキテクチャや開発手法、APIなどの設計の考え方がインターネットで議論されているのを見て面白いなと感じた。それがきっかけでWeb業界に行こうと思った。
Webアプリケーションの脆弱性診断をしているのもあって、それなりにWebセキュリティについてそれなりに知っているつもりで、強みになると考えた。
なので、セキュアなWebアプリケーションを書ける、啓蒙できるエンジニアを目指していこうみたいな目標を掲げている。

しかし、最近は過去に使ったコンポーネントを組み合わせるだけの作業に飽きてきていて、Webアプリケーション自体に飽きつつある…

話が逸れた。
オンラインコンパイラを大学で導入すると面白くて、色々なことが分かる。
一般にどの大学でもプログラミングが不得手という学生はいるのは有名な話だ。
自分の大学では、代入や繰り返し処理が理解できない学生、 if (a=b) のように比較演算子を算数の等号のまま覚えていて、メンタルモデルが再構築されない学生などなどがいた。
ここまではありがちなわけだけど、ではその人達はそのような間違いを何時しなくなのか、つまり、メンタルモデルが構築されるきっかけがオンラインコンパイラでは分かる。

という内容で研究を進めていたが、IPA未踏人材育成事業に採択されたので中断した。

4年目

未踏事業に採択されたので、基本的には無限に未踏関係の作業とsplatoon2とゼノブレイド2をやっていた。
未踏ではCureVulnというWebアプリケーションのセキュアな書き方を体系的に学べるWebサービスを作った。

https://curevuln.com/

https://www.youtube.com/watch?v=yQ17v5MkE20

「こんなの誰でも作れるじゃん…」と言われるのは重々承知しているが、脆弱なWebアプリケーションが世の中に蔓延している社会的問題を解決したくて作った。
これについては改めて記事を書くつもり。

秋にセキュリティ・ミニキャンプ広島2017で講師をした。
このことについては以下にまとめている。
https://blog.ssrf.in/post/2017-10-29-lecture-at-security-mini-camp-hiroshima-2017/

シェルスクリプトマガジンに香川大学のコラムみたいなのがあって、寄稿した。
OSC広島2017で実行委員長をして、その関係で「広島のコミュニティについて書いてください」という流れだったと思う。
https://www.amazon.co.jp/dp/4904807499

就活は特にやってなくて、スーツを着たり、説明会などに行くみたいなイベントは発生していない。
Twitterで会社見学どうですか→面接→内定というTHE・インターネットという感じ。
大学院も誘われたが、内定先にも研究所があったので、どうせなら金も貰えてレベルの高い人たちがいるところでやったほうが良いと思ったので、大学院には行かなかった。


ここで書いたこと以外にも色々やった覚えがあるけど、書くのに疲れたし、こう自分語りを無限に書いていると変な気持ちになってきたのでここでやめる。

ちなみに、4月からは渋谷でWebやセキュリティをやってる予定です。
気軽に飲みにとか誘ってください。

dairy