2020年度セキュリティキャンプ参加記

はじめまして

Enigamictです、今回は私が参加した2020年度セキュリティキャンプについての参加記を書いていこうと思います。

受講したゼミはZ4  「独自セキュリティ機構を追加可能なモジューラブルなソフトウェアルータの開発」です

www.ipa.go.jp

 

 

 

応募課題

 

eniyo0.hatenablog.com


これです。どれだけネットワークが好きか、何をしてきたかをただひたすらに書いて、手を動かしました。

そして無事合格、合格したときはほんとに嬉しくて「やった、やった」と連呼するやばい奴になっていました。

 

いざキャンプ準備編

私は目標にしていたものがC言語で独自のルーティングプロトコルの実装だったので、合格した当日にLinux環境にC言語の環境を作りました。

とりあえずキャンプまでに基本的な概念などを学んでいました。

 

いざキャンプ

まず開講式でした。特別講演だったりキャンプ紹介があったりなど、始まったなぁという感じでした。

夜にLT大会があったのですがこれがまた面白くて、自作OSからネットワークが流れていくのを生で見れたときはずっと「イイ…」みたいなことを言ってました

そんなこんなでグループワークがあって終了。すげー所にきちまった…ってなってました。

 

いつかの日

講師の方、チューターの方とまずヒアリングをしたのですがその時に本格的なテーマ決めをしました。自分の題材はちなみにとりあえず動くルーティングソフトウェア作ろうぜ!になりました。あと自分がscapyに憧れて自分でもそれっぽいやつを作ろうとしたんですよ〜みたいなこと言うと「わかるなぁ」と言われてすごい感激しました。

 

初日

まずはこのネットワークを作りな!話はそれからだ!という感じでLinuxのネームスペース機能を使ってネットワークを構築していきました。

出来なくて焦ってた記憶があります…

ここでのお話は基本的なルーティングのこと、ネットワークのことについて学びました。

Linuxのネットワークネームスペース機能の素晴らしさを感じ、networkのprefixの書き方、ネットワークはどのように経路制御されていくのか、ネットワークにおけるデバッグはどのように行ったらいいかを教えてもらいました。

図で書いてネクストホップはどのようになっているか、これがこうなっているのだけど…みたいな点があったらここは非対称ルーティングだよーみたいな感じで進めていきました。

ここから自分に素直になってめちゃめちゃ質問したり、これをこうしたんだけどどう思う!みたいなことを書きまくってました。(slackのスレッドごとのレス数が大変なことに…)でも理解はかなり深まったと感じています、本当に講師の方には頭が上がりません。

 

 

そうして進めていくうちに次の課題に突入しました。

次の課題ではRTNETRINKというLinuxにおけるIPv4のルーティングソケットを使って経路情報を保存してみよう!って感じです

ここから本格的な実装でした、わくわくでしたね。

ルーティングソケットなんて見たことがなくRTNETLINKのmanページを見て興奮してました。

これ追加出来ているのか…?みたいな感じだったり、これに入れたらいいだろ!ポイーみたいな感じでやってると、それテーブル指定するとこ…みたいなツッコミが入ったり、サブネットマスクどこに入れればいいの!みたいな感じで質問するとすぐ返ってきたり…講師の方はRTNETLINKを一年間ぐらいずっといじり続けて理解したと言っていたのでそうなりたいな…となっていました。

結果として色々と自分がガバガバ実装を繰り返していました(これがどんどん続く)。

ここでもLinuxの低レイヤあたりのことをかなり知ることが出来たのでとても楽しかったです。

 

 

 経路を追加したり、表示させたりするのを理解した所でいざ通信部分の実装。

次は設定ファイルを読み込んでみたり、makefileの書き方だったりを学びました。

まずはTCPでシンプルに通信するやつを作ってみたりしました。

makefileはなんじゃこれ…みたいな感じだったので一から教えていただきました。

中身の書き方もこれどうすればいいの…となるものが多かったので一つずつ教えてくれました。

ここらへんからエディタがVScodeからVimに変わっていたり、Wiresharkをあまり使わずtsharkを使うようになったりしていました。(おや…)

あとはmakeで起動させたものをパケットキャプチャしてみて、無事バックグラウンドで通信出来てるね!

といった感じで次に行きます

 

もうほぼゴールですね。ここではこれまでの総まとめで設定ファイルの中身を上手くパースしてメッセージ構造体にぶち込んで通信して経路広報するぜ…と言った感じで実装していきました。

ふふん、通信は自分の得意分野だやるぞ!と意気揚々と書くも、上手く入らなかったり、ガバ実装を繰り返しました。

ここでも講師の方とここやばいよ、違うぞ!みたいな感じで進めていきました。めっちゃ楽しかったです。

そんなこんなガチャガチャ…とやってついに…

 

github.com

 

speakerdeck.com

 

BGPライクなルーティングソフトウェア"ERP"が出来ました。

やっぱり受信されてきたパケットを構造体に入れて出力させる瞬間がたまらないですよね。経路広報が出来ているのを確認した時はとても嬉しかったです。

あとは通信してpingが通った時ですね、たまらないです。

実際に作ってみて、講師の方と本場のルーティングプロトコルはもっとこういったpath回しをしているよみたいな話をしたり、じゃあもっとネットワークを大きくしてみたらどうやって経路制御していけばいいかな?と言ったディスカッションをしていきました。

 

実はちょっと早めに完成したので、もっと大きなネットワークで動作するERP2を作っていたのですが、あとちょっとの所で断念…この子はいつか完成させたいと思っています。

 

まとめ

本当に参加して良かったと感じます。

参加する前の目標にしていた、ルーティングソフトウェアの作成の目標も達成し、ネットワークの知識も増え、それ以外にも本当に知見が増えたと感じています。

プロのエンジニアの方に自分の書いているコードだったり、環境、考え方を評価してもらうと言ったことがどれだけ貴重かを身に染みて感じました。

講師の方には本当に感謝しています。自分が図々しかったのにも関わらず丁寧に対応してくれて、「いいですねぇ」と無限に褒めてくれたり、「違うぞ!」と言ってくれたのはいい思い出です。

今slackを見ながらこの記事を書いているともうこんなに月日が経ったのか…と感じています、本当に早かった。

セキュキャンが終わったあとでも、やりたいことが増えたり、つながりが増えているので頑張っていこうと思います。

 

ありがとうございました。