セキュリティ・キャンプ全国大会2019 DAY5 & まとめ

やったこと

寝坊しました。
いつもは6:30に起きてたんですが、昨夜寝落ちたので起きたら8:00でした(集合は8:30).
そこから5分間で着替えて荷物をまとめ、そのままチェックアウトしてギリギリご飯チャレンジ。
クロワッサンはタイムパフォーマンスが悪いので、フレンチトースト多めにして急いで朝食を構成し、ダッシュで食べて講義室に向かいました。
間に合いましたが、最終日まで6:30起床で寝坊はしないと誓っていたので悲しかったです。

今日の最初はグループワーク【最終回】でした。
昨夜までにまとめた物事をスライド一枚にまとめます。
僕らは、低レイヤー系のゆるーい集まり”OS-CPU”(まんまやん)を構成しました。
ついでに、この時の勢いでos-cpu.orgドメインをとりました.(今は大したもの置いてないです)。

ドメインまで取ったチームは他にいなかったんじゃないかな()

なんだかんだ各チームでやりながら、スライドを提出して終了です。
スライドの提出、うちが一番最後でした。お待たせして申し訳ないです。

そのあと、集合写真をとりました。
撮っただけなのであんまり面白いことは起きてないです。
これのために今日はみんなSecCampTシャツを着ました。

で、このあと講義の成果報告を各トラックごとの代表が出て行いました。
各トラック面白そうで、まじでSecCamp全トラック踏破したくなりました(もう受講者にはなれないのでできませんが)

前半は選択コースで、昼食挟んで後半が集中開発コースだったはずです。(逆だったっけ?)

これが終わってからの休み時間に、OS自作ゼミの講義で使った「12ステップで作る組込みOS自作入門-」の著者である坂井弘亮さんにサインをいただきました!! 嬉しい⤴︎︎︎︎⤴︎︎︎︎⤴︎︎︎︎⤴︎︎︎︎

そしてついに閉会式の段になり、名残惜しいながらも「セキュリティ・キャンプ全国大会 修了生」となれたことを誇りに感じていました。

全員に修了証を渡し終わり、何人かのお話があって、閉会式もいよいよ終了、セキュリティキャンプこれにて終了という時に出たスライドが…

終了
いや…え? あっけないな. 最後に草を生やして終わってくれましたが、本当に楽しかったです。

このあと、品川から新幹線に乗って帰りました。

品川にも草が生えていました。

全体のまとめ

セキュリティ・キャンプ全国大会、本当に楽しかったです。
こんなに高密度に技術を学べた日々は初めてでした。
この経験は、自分の開発力の限界を超える体験でした。効率よく集中してやればこのくらい効率よくいけるんやなと。家でやってたら3倍は時間がかかっていたと思います。
これもひとえにtnさんはじめ講師陣と、協議会の方、チューターの皆さんのおかげです。語彙が足りなくて楽しかったしか言えませんが、本当に最高の五日間でした。

ところで、もし私がこのセキュリティキャンプを他の人に勧めるなら、その相手は今の僕と同い年かそれ以下の人です。
なぜなら、私は今の年齢で参加できたことで、自分とおよそ同じ方向の進路を志して高校以降の進路決定をした人たちに、進路について色々と伺うことができたからです。
学校で、どこの誰だかわからない学部生の講演的なものを聞くことはありますが、私と同じ情報技術の道を志す大学生ご本人と一対一で話して自分の不安などについてお伺いできたのはよかったです。だから、中高生の皆さんは積極的にSecCampに参加してほしいと思います。もちろん、集中開発コースでね。選択コースも楽しそうでしたが、やるなら絶対集中開発コースがおすすめです。楽しいので。

さて、もうすぐ京都です。
関係各位に心より感謝しております。ありがとうSecCamp!!

<補足>
実は、ゼミで使った機材一式を、年末まではお借りできるそうで、借りて帰ってきてしまいました。というわけで、OSの開発をしばらく継続します。
SecCamp『後半戦』頑張ります👍👍👍

セキュリティ・キャンプ全国大会2019 DAY4

やったこと

今日は開発の最終日。
さらに、16:00-はトラック内発表会の予定だったので、実質作業できた時間はかなり少なかったです。

昨日でシリアル割り込みが実装できたので、この日からスレッドの実装です。

ここからは(と言ってももうキャンプの期間も終盤なのですが)12ステップで作る、組み込みOS自作入門を参考に学習を進めました。

時間との勝負。トラック内発表の16:00に合わせて、15:40までに資料提出でした。
ということは、作業できるのは実質15:00まで。それまでにスレッドが実装できるかというところでした。

が、結論から言うとできませんでした。

まずこれまでに作ったハンドラやシリアルのライブラリをkozosのinterfaceに合わせて改変し、その上でスレッドのプログラムをコピってきてエラーを潰しながらというアプローチでやりました。
ここでは開発の詳細はあまり詳しく書かないことにしますが(明日の出発に備えて荷物を片付けないといけないので時間がない)、後から西永さんに聞いたところだと、TCB(Task Control Block)の初期化がうまく行っていないのでは?とのことでした。
キャンプ後直したいと思います。

と言う感じで、スレッドが大変だった今日の開発です。

さて、開発タイムが終わり、トラック内発表会。
YトラックはOSゼミと一緒にCコンパイラゼミもあるので、そちらの発表も含めて聞きました。
詳細は割愛しますが、各々に興味深いものづくりをされていて、集中開発コースならではだなと思いました。
楽しかったです。

選択コースを受講していないので何とも言えませんが、集中開発コースがいいんじゃないかしら?

夜には、ラストナイトイベント がありました。

このイベント、要は講師やスポンサーからのプレゼント分配会で、書籍やステッカー、バックパックなどがありました。
BlackHutのバックパック、僕はゲットできませんでしたがめっちゃかっこよかったです。

このプレゼントの取り順ですが、昨年は年齢が小さい方からだったそうです。 が、 今年は違いました。

今年は、「グループワークのチーム名のhash値が若い方から」というなんともSecCampな手段。

うちのチームのハッシュ値は……なんと ff始まり……..オワタ( ・∇・)

と言う訳であまりhash値運はよくなかったのですが、

をいただきました。

このあと、企業紹介を聴きました。
GMOペパボ株式会社から、話してくださったのは、@mad_oshoさん。
主に企業環境みたいな話が中心でした。

これはペパボさんに限った話ではないですが、各社「企業のお仕事紹介」のコーナーなのに普通にミニ企業説明会をやっていたのがじわりました。

グループワークでは、今回は割とたくさん話を聞けました。
それと、これまでの話し合いの内容をまとめて、明日のスライド作り&&提出に備えました。

さて、それでは荷物を片付けます。明日は最終日。頑張ろう。 講義よりも外の暑さが心配です()

セキュリティ・キャンプ全国大会2019 DAY3

やったこと

今日は開発の中日でしたが、企業紹介やグループワークなどがあったので、夜は作業ができませんでした。

まず、昨日のリンカスクリプトで潰れた日を取り戻すべく、シリアルの実装を進めました。

Hello,Worldに続いて、入力の読み込み,echoなどを、ポーリングベースで実装しました。

その後、これまでで散らかしたシリアル周りのコードをざっとリファクタして、割り込みを実装し始めました。
まずは同期(Sync)割り込み(内部割り込み)からはじめました。

aarch64のアセンブリ的には svc を発行することで発火する割り込みです。

svcがけられたらprintするのを実装しました。

同期から始めたのは、講師のtnさんがそうするよう勧めてくれたからです。
シリアル割り込みなどから着手すると、ベクタテーブルの設定がおかしいのかペリフェラルの設定がおかしいのか特定するのが大変なので、ベクタテーブルの設定と DAIFClr を正常に実行できればとりあえず動くsyncから始め流ようにとのことでした。ふむふむ。

同期割り込みは割とサクッと実装できました。割り込みベクタ周りは、実装よりも概念が面白かったです。すごくメモリを感じる概念で、楽しいですね。

そのあと、シリアル割り込みを実装しました。
これも、ビット演算のところで &を誤って&&にしてしまったせいで割り込み原因がまともに特定できず、割り込みハンドラを駆動できないないなどのしょーもない穴にはハマりました。

また、これは講義が終わって夜になってから気づいたんですが、RXのデータの取りこぼしがあって、何だろうと思っていたら、RXのデータは全て一回のハンドラで読み切らないと、一度かかった割り込みをクリアしたらデータがFIFOに残っててももう割り込みがかからないのが理由でした。

普段書いてるようなシリアルのコードは連続で送り続けるものばかりなので、あまり気にしていなかったので、気づきにくかったです。きちんとループを回して、割り込みのうちに見つかるデータは抜き切っておかないといけないようです。

そんなこんなで、割り込みの実装を終えて今日の開発は終わりました。

さて、時間は前後しますが、昼間の開発が終わった後、夜には企業紹介がありました。

僕は、インテリジェント・ウェイブさんと、ソフトバンクさんを聞きました。

前者は担当者が営業側の方で、開発サイドではないので僕にとっては今ひとつな印象ではあったのですが、イスラエルがなぜサイバーセキュリティの分野で強いのかというのが面白かったです。

1.「サイバー軍」に兵役する人がいるので、攻撃手法をよく知っている。
2.輸出する資源がない

1はそんな気がしていましたが、後者はそーいやそうだったという感じでした。

SoftBankは開発のかたで、その中でも特にユーモア豊かな方だったので面白かったです。 : にゃん☆たくさん

グループワークは、主にグループ内の方針決定のためのディスカッションに充てました。本当はもっとインタビューができた方が良かったと思うので、明日取り戻せるよう頑張ります。

セキュリティ・キャンプ全国大会2019 DAY2

やったこと

今日から3日間特別講義です。
今日はその1日目で、僕はOS開発ゼミに参加しました。
ベアメタル開発のテーマで、はじめに事前学習の進捗を確認し、その後各々開発を開始しました。

僕はベアメタルのRaspberry piでLチカできるところまで行っていたので、この日はUARTの実装からはじめました。

8:30から開発を開始しましたが、10:00までに,一文字’H’の出力ができるようになりました。

低レイヤー開発をあまりやったことはなかったですが、キャンプまでのLチカでマニュアルの読み方などを講師のtnさん作の資料で追体験しながら学んでいたので、マニュアルを読んで、適切なアドレスのメモリに入れて、、という作業を実装するだけで、あまりここまでには苦労しませんでした。

ここからが長かった。
'H' は出せるのですが、"Hello,World\n"を出そうとforループを仕組むと、

1
2
3
4
5
6
7
HeeeeellllloWrrlddHelloo
e heellooo word

HHHHHHHellooo
.
.
.

のように、確かに出そうとしている文字ではあるが明らかに正しく書けていない文字が出力されるようになりました。

はじめに疑ったのはFIFOの空き待ちの不具合でした。
FIFOがNot Fullであることを1 Byte毎に確認して送っていたはずでしたが、それのアドレスやビットシフトの数が違うことが考えられるなと思いました。 
しかし、それらは何度確認しても正しかったのです。
ただのfor loopをまさか間違えるはずもないですし、(実際Macで動かして確認しましたし)何だろうと思っていました。

午後になって、JTAGデバッガを接続しました。
が、ここで出力したkernel.elfに、gdbからdebug symbolが見つからないと怒られてしまいました。
-gはつけているはずで、何も検討がつきません。

その後、tnさんがうまくビルドできたソースをもらって手元でビルドしてみると、そこからはきちんとシンボルが出ています。

そこで、それらのファイルとdiffして確認していくことにしました。

僕はCMakeを使い慣れていないので、CMakeLists.txt のミスだと思っていましたが、tnさんのファイル群のそれを私のものに差し替えてもまともにビルドはできるまま。

これのせいではなさそうでした。
そんなこんなで講義終了の22:00を迎えました。

ここまで、4時間ほど、デバッガをつなぐためのデバッグに時間を食っていました。 最悪です。

部屋に戻って、続きをしました。
明日以降の講義の時間はもっと創造的なことに使いたかったので、何としてでもこれを夜のうちに潰したかったんです。

それでもなかなかうまくいかず、最後にダメ元で、リンカスクリプトを差し替えました。

「Symbol、出てるやん…」

意味わかんないです。
すぐにそれをdiffして、差異のあるところを一つづつ順番に直しながら、どこでsymbolが出るようになるか検証しました。
結果、以下のdiffのせいでした。

1
2
3
4
5
6
7
8
9
10
11
<    .stack : {
< __stack_end = .;
< /* 64MiB space */
< __stack_start = __stack_end + (1024*1024) * 64;
< }> RAM
---
> .stack : {
> __stack_end = .;
> /* 64MiB space */
> __stack_start = __stack_end + (1024 * 1024) * 64;
> }> RAM

いや、スペース二個ですやん!? こいつのせいで4時間とはまじでありえない。
明日からはこういうしょーもないのにかからないことを祈ります。

その後、無事にデバッガを接続でき、「え? ちゃんとFIFO待ってるやん?」となって、試しにUSB-Serial変換アダプタを再び繋いでみたら、ちゃんとHello,Worldになってましたとさ。

あのバグもメモリレイアウトがおかしかったことに起因してたのかもしれません。
とほほ、、

学んだこと、みたこと

私はこんなしょうもないバグに積んでいたわけですが、私の右側では、同テーマの方が、rustでの実装にチャレンジされていました。僕はむさ苦しいCコードで書いていたわけですが、同じものをあんなにも美しく実装されるとRustやりたさが出てきました。
僕もキャンプ後Rustをやろうと思いました。

それでは もう遅いので寝ます。 おやすみなさい。

セキュリティ・キャンプ全国大会2019 DAY1

やったこと

12:00集合で、11:30くらいに到着しました。早すぎましたね笑

来年以降参加する方へ向けてなんですが、会場付近本当に何もないので、水とか買うなら北府中駅よりも前に買っておきましょう。

チェックインを済ませて、交通費分の領収書を提出すると、そこでパーカーとTシャツを受け取ります。

これがパーカーです。

で、これがシャツ。

ちなみにどちらも後ろはこうなってます。

その後、昼食を食べました。ラーメン。撮り忘れましたが美味しかったです。

その後講義会場に入るのですが、そこでSecCampなバッグと、それいっぱいの企業ノベルティをいただきました。

いや最高っしょ。
うまい棒とこのはの関係とかなぜサイボウズさんがラノベを入れてるのかは別にして。

そんなびっくりの中、はじめに受けたのは特別講義「転ばぬ先の法律入門」。

日本には約2000の法律があるが、全てを知らなくても倫理を身につけ学んでいれば一線を超えずに済む。 という話が印象に残りました。初めて、倫理の重要性を筋道立てて示してくれる人に出会いました。面白かったです。

そのあとの「セキュリティ基礎」では、講義タイトル的にもう少し開発者目線かなと思っていたらほとんどユーザー目線で、講師の方が前でパスワードの運用ついての思案を進めるような講義でした。

夕食前最後の講義、「ITの話ができる仲間を作ろう 〜IT業界とコミュニティ活動〜」では日本UNIXユーザー会の幹事のかたが、日本に置けるコミュニティ活動の大まかな歴史と、今後参加するにあたって気をつけるべきことについて講演してくださいました。

『アート・オブ・コミュニティ――「貢献したい気持ち」を繋げて成果を導くには』を参考書籍に挙げられていて、興味を持ったので一度読んでみようと思います。

その後 グループワーク を実施しました。
今年は、キャンプ後に繋げるための仲間づくりみたいなやつで、今日は自分がキャンプ後にしたいことをポストイットに書いて、名札に貼って、歩き回って近いことを書いている人を探してチームを作るっていうのをやりました。
僕らはアーキテクチャ,CPU,OSあたりを自前で作りたいみたいな、低レイヤ系の集まりを作ろうかみたいな話になっています。

明日から講義が始まります。楽しみです。
もう遅いので寝ます。明日からはいっぱいコード書くぞー!!!

セキュリティ・キャンプ2019全国大会に参加します

わたくし、明日から、セキュリティ・キャンプ全国大会に参加させていただきます。期間中、毎日更新できればと思っていますのでよろしくお願いします。

セキュリティ・キャンプ全国大会 is なに

セキュリティ・キャンプ全国大会は、IPAが主催する、情報セキュリティ技術を5日間の合宿形式で学ぶプログラムです。セキュリティ・キャンプ事業の中心として開催されていて、各コース/トラック/ゼミに分かれています。
毎年参加者の選考があり、選考課題はコース/トラック/ゼミによりまちまちです。

私は、集中開発コースのY【システムプログラミングトラック】のうち、Y-Ⅰ OS開発ゼミに応募しました。

これまでの活動頑張ったよってことと、簡単なCコードを書いて提出しました。というものの、応募締め切りがJapanOpen Wakayamaの直前(2019/4/27)でデスマの真っ最中だったので、あの辺りあまり記憶がありません。

※来年以降応募したいと思っている方で、私のクソなのでも見たいという方がいらしたらTwitterあたりにDM飛ばしてください。一応選考通った回答なので1ミリくらい参考になるかもです。 publicに晒しませんが個人対応は喜んでお受けします。

それでお前は何をするのか

先述のとおり、Y-Ⅰ OS開発ゼミに応募して通していただいたので、OSを作ります。

が、その中でも4つの「テーマ」に分かれています。

  • フルスクラッチOSを書こう!
  • 最先端OS談義
  • Linux開発者を目指そう!
  • Raspberry Piで動く組み込みOSを作ってみよう!

この中で、私は、”Raspberry Piで動く組み込みOSを作ってみよう!”テーマに応募しました。

個人的にESP32を扱っていた時期で組み込みOSが自分的にアツかったのと、最近は組み込みコードをよく書いているくせに少しレイヤが低くなるだけで何も知らないなんてクソだなと思ったので、少しましになれればという思いもありました。

というわけで、私はRasPiで動く組み込みOSを作ってきます。

これまでにやったこと

参加者専用に、Kintoneのグループ(っていうのが正しい呼び方なのか知りませんが)があります。

そこで、事前課題的なものが出されていて、書籍を読んでくることと、OS作成の基礎となる簡単な部分を理解するためのプログラムを組んでおくことがでました。

具体的には、「12ステップで作る組込みOS自作入門-」の後半を読んで、OSに必要なMI(Machine Independent,ハードウェア関係なく必要になる機能実装)部を学び、講師の西永さん作の資料でMD(Machine dependent)部を学ぶという構成で、最終的に今の段階でBareMetal(=OSなしの状態) でLチカするところまでできました。

お気持ち表明

全力で楽しんで来たいと思います。
普段は低レイヤに苦手意識がありますが、マジのエキスパートの方やつよつよ受講者(そういえばU-22で知り合ったこーでぃも通っていたようです。またコンパイラ。好きすぎかよ。最高です。)に囲まれることになるので、その人たちからスキルと同時にその道の「楽しみ方」みたいなものも感じられると、後につながる経験になるかと思います。

明日からもレポート予定ですのでよろしくお願いします。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×