SecHack365での1年間をワードクラウドで振り返る!(後編)
引き続き2019年度のSecHack365後半戦を振り返っていきます!
↓↓↓前回の記事↓↓↓ souring.hatenablog.com
10月 宮城回
松島や ああ松島や デモ展示や
公式レポート目線
宮城回のメインは展示であり、成果物のプロトタイプやそこにたどり着くための制作過程を展示しました。
セキュリティイニシアティブの小笠社長からは、「コミュニティに参加しよう・発表しよう」というお話をいただきました。
その他トレーナーを囲む会、続・倫理講義、アイデア早指しなどがありました。
トレーニー目線
ナ イ ト チ ャ レ ン ジ
川合先生が人類を超越
パケットを可視化するLANケーブルがバズってる!?の回
🎃Happy Halloween!🎃
12月 愛媛回
坊ちゃんもびっくりの温泉とお食事と発表が待っています。
公式レポート目線
今回は、ポスター・デモ・プレゼン全てで発表しました。
北条弁護士からのサイバーセキュリティ研究の注意点、マツダの山﨑さんからクルマを取り巻くセキュリティ、桂三幸さんの現役落語などがありました。
トレーニー目線
松山空港着!道後温泉駅集合!
変な荷物が多いので手荷物検査が宿敵。
紅葉もキレイだったし、温泉もよかった。キャパ少ないサウナに人押し寄せすぎ。
JUST DO IT! (次回の沖縄まで頑張れ的な意味で)
1月 沖縄回
めんそーれ! 長いようで短い1年もついにファイナル。
公式レポート目線
沖縄回は最終成果発表会でした。
「やりたいこと」を「できる」に変える
さくらインターネットの田中社長の講演がありました。
習慣化もファイナルで、今までの思い出とかもあったりして、なんだかちょっと感動的でした。
トレーニー目線
飛行機で那覇!進捗どうですか!!!
yt?l「朝食が食べれなくて超ショック!」
最終成果発表は1組20分で2日という長丁場でしたが、最後まで集中して意見を交わし合いました。
そのあとの突発的なLT大会、みんなLT経験豊富すぎだろと感じた。芸人でいうテレビのネタ出しかってくらい仕上がっている印象だった。
最終日はレクもあって、沖縄の聖地へ。暑い!アイス!サトウキビジュース! 沖縄回も最高に楽しかったな!
作品まとめ
2019年の作品一覧 を使ってトレーニーの成果物をまとめてみました!
2019年度のSecHack365を修了したみんなからすると、「これこれ!」となる画像だと思います。
とにかく幅広く、専門的で、独創的な作品たちです。そしてセキュアですね!
成果発表会のお知らせ
そんな我々の成果物の発表会があります!ポスターやデモの展示、優秀作品のプレゼンテーションなどをご覧いただけます。
開催は延期となってしまいましたが、みんなと再開して発表できる日を楽しみにしています。 それまでごきげんよう!
SecHack365での1年間をワードクラウドで振り返る!(前編)
はいどうも! 「#SecHack365」というハッシュタグを二度バズらせたsouringです。*1
国立研究開発法人情報通信研究機構(NICT)が主催する若手セキュリティイノベーター育成プログラム「SecHack365」に2019年度の学習駆動コースのトレーニーとして参加していました。25歳以下の学生・社会人が、1年間かけてサイバーセキュリティに関するものづくりをするハッカソンです。
今回は、ワードクラウドを使って、SecHack365での1年間を振り返ってみようと思います。
5月 神奈川回
公式レポート目線
以下のように、文章中の単語の頻度が高いものほど文字サイズを大きくまとまっています。 文章は、SecHack365公式の開催レポートを使いました。*2
神奈川回は、1年間のモノづくりをする上で大事なことが盛りだくさんでした。
主催しているNICTや習慣化の紹介、大人たちトレーナーを囲む会や、アイデアソン、コースごとのワークがありました。
トレーニー目線
そしてそして!神奈川回のTogetterまとめ*3の文章で生成したものがこちらです! 主にトレーニー(参加者)のツイート文章で作られているため、参加者目線のまとめと言えるでしょう。
「新幹線」という単語があるあたり、まさにトレーニー目線ですね!最初の集合イベントであり、移動だけでもドキドキワクワク。
まだBacklogの使い方もわからず、Typetalkでトレーナーかトレーニーか区別がつかなかったあの頃。
自己紹介などを通して、つよつよですごい人たちが集まっていることを認識しました。
6月 北海道回
コースごとに与えられた課題などをこなして、北の大地で集合です。
公式レポート目線
北海道石狩市にあるさくらインターネットのデータセンターに訪問しました。サーバの冷却のための外気を取り込む仕組みなど、実物を見ながら説明を受けました。
縁日という名の、トレーナーによる実践形式の講座祭りがありました。ハンダ付け1000本ノックや、電子工作未経験で出来るBadUSB組み立て入門などバラエティ豊かでした。
その他、現役検事さんからの倫理講義やコースワーク、習慣化、修了生LTなどがありました。
トレーニー目線
やったーーー!北海道だ!!!ほぼみんなが飛行機での移動です。
さくらインターネットってすごい! 見学したからこそわかる。
縁日は、どれも魅力的でトレーニーたちは選ぶのに苦労しました。 思索駆動コースは大風呂敷(壮大な構想作り)をやっていたそうです。
Tシャツが配布されました。わーい!
個人的には、増田検事の倫理講義がかなり印象に残っています。これまで法律など一切興味が無かったのですが、増田検事の課題をやると法律が読み解けるようになったのです。法律に興味を持たせてくれてありがとうございます!
8月 福岡回
中間発表の準備を済ませてしながら、いざ博多へ。
公式レポート目線
福岡回では、nulabさんの見学、NICTサイバーセキュリティ研究所井上室長のお話、修了生LT、自然発想法などがありました。
中間発表が一大イベントであり、自分の活動内容をみんなに知ってもらうという有意義な時間となりました。
トレーニー目線
福岡といえばヌーラボと言っても過言ではないですよね。空港から向かった先が株式会社ヌーラボなんですから。
集合時間までの時間潰しで近くの喫茶店に行くと、緑のTシャツ着た集団がいたのは良い思い出。
みんなヌーラボさんの話を聞きながらいっぱいツイートしような💪 Backlogを支えるのがGo言語というのがグッときた。
全員が中間発表したあと、自然発想法で海に!!! 海水Flood型DoS攻撃したり、サンドボックスにうずめたりして遊びました。
まとめ
これにて「SecHack365での1年間をワードクラウドで振り返る!(前編)」おしまいです。
2020年度のSecHack365参加者募集も始まったので、参加資格のある方はぜひ応募してみてください! sechack365.nict.go.jp
次回、展示〜最終発表。お楽しみに!
↓↓↓後編を投稿しました!↓↓↓
パケットが光るLANケーブルを作っています!(セキュリティ博物館プロジェクト)
[New!] Webサイトが完成しました↓↓↓ souring001.github.io
セキュリティ博物館を作りたい...。
その展示品の1つとして考えてみたのが
このパケットが光るLANケーブル(ILLUMI PACKET)です!
Twitterではものすごい反響がありました!
LANケーブルに流れているパケットのプロトコルを可視化#SecHack365 の展示 pic.twitter.com/gpcpZInxqa
— NAKAI (@Leader_General) October 5, 2019
動画も作ったのでこちらもご覧ください!
パケットが光るLANケーブルは、通過するパケットの種類と向きに合わせて光ります。
例えば、
DNS(ドメイン名からIPアドレスを調べる時などに使われる)は緑色
異常検知されたパケットは赤色
に光ります。
パソコンを操作しながらパケットを観察できるので、「どういう操作」をした時に「どういうパケット」が発生するのかを体感することができるんです。
内科医評価システムJ-OSLERの症例登録の入力文字数を表示するツールを作った
J-OSLERの扱いに苦労している全国の内科研修医の方向けの記事です。
J-OSLERあるある
- 症例登録フォームで今何文字入力してるかわからない
- それなのに送信後に怒られる
- Wordとかで文字数カウントしてから送信しないといけない
研修医の姉から、入力中に文字数がわからないかと相談されたので、表示するツールを作ってみました。
今後140回ほどこのフォームを入力しなければならないそうです...。
作ったもの
ボタンを1回押すだけで、フォームで入力しながら、その文字数を確認することができるようになります。
準備
ブックマークレットという機能を使います。
どのブラウザにもある機能なので、医療業界にありがちなInternet Explorerでも使うことができます。
ブックマークバーを表示する
利便性のため、ブラウザのブックマークを表示します。
表示方法は各ブラウザのサポートページをご覧ください。
ブックマークを作成
新しく以下のようなブックマークを登録します。
名前: J-OSLER 文字数カウンタ
URL: 以下の文字列(javascript:
〜 1E3)})();
)
javascript:(function(){setInterval(function(){var a=document.querySelector("#shoreiHyokaIraiForm\\:shoreiNoGairyaku > div:nth-child(1) > iframe:nth-child(3)").contentDocument.documentElement.textContent.length;document.querySelector("table.work_table4:nth-child(10) > tbody:nth-child(2) > tr:nth-child(5) > td:nth-child(2) > span:nth-child(2)").innerHTML="[500\u6587\u5b57\u4ee5\u5185(\u6539\u884c\u542b\u3080)]<b> \u73fe\u5728: "+a+"\u6587\u5b57</b>";a=document.querySelector("#shoreiHyokaIraiForm\\:shoreiOKeikenShiteNoJikoSeisatsu > div:nth-child(1) > iframe:nth-child(3)").contentDocument.documentElement.textContent.length;document.querySelector("table.work_table4:nth-child(10) > tbody:nth-child(2) > tr:nth-child(6) > td:nth-child(2) > span:nth-child(2)").innerHTML="[300\u6587\u5b57\u4ee5\u5185(\u6539\u884c\u542b\u3080)]<b> \u73fe\u5728: "+a+"\u6587\u5b57</b>"},1E3)})();
これで準備完了です!
使い方
J-OSLERの症例登録ページで先ほど作成したブックマークを押すと、文字数が表示されるようになります。
注意
とりあえず「症例の概略」と「症例を経験しての自己省察」の2項目のみ対応しています。
改行が文字数に含まれていません。
最後に
全国の内科研修医の方々のお役に立てれば嬉しいです。
何か他にも困っていることがあったらコメントください。
これがセキュリティ・ネクストキャンプ2019【参加記】
2019年の8月13日(火)から8月17日(土)にわたって開催されたセキュリティ・ネクストキャンプに参加してきました。 その様子を時系列に沿って書いていきます。
目次
ネクストキャンプとは
セキュリティ・キャンプ全国大会の次の教育機会を提供
遠慮も容赦もない超ハイレベルな講義の5日間!
セキュリティ・キャンプ全国大会の次のステップとして今年から始まったプログラムです。 年齢制限が25歳以下であり、全国大会行きたいけど行けない!という人でも、参加できます。
ネクストキャンプ2019参加者は6名、うち全国大会修了生は2人でした。
自分は2年前に全国大会2017に修了した身としての参加となります。参加者Tシャツ2枚所持は、なかなかのレアです。
当時の様子:セキュリティ・キャンプ全国大会2017に行ってきました - ビーコンの創出
ネクストは、本当に容赦ない濃いぃ〜5日間でした...。
応募課題
応募課題は、以下の4項目について記述しました。
- 今までどのようなことをやってきたか
- 課題解決に関する問い
- 興味のある講義について
- アピールしたい点
2の課題解決に関する問いについてですが、「自身で何らかの疑問・課題・問題を設定し、それについて取り組み、その過程を示すことで、自身の技術力や課題に取り組むやりかたを説明してください。」 とのことでした。
設定する課題は何でも構わないとのことだったので、直近で一番頑張った出来事である「一週間後にみんなが集まれる場所(都内)であまりお金をかけずに本物の竹で流しそうめんを実施する」企画について、竹の伐採や下見・試作など全12工程について詳細に記述しました。
この課題、今振り返るととってもネクストキャンプらしさを感じます。詳細な手順など知らん、自分で定めて、自分で調べて、自分で解決しろ!というあたりが。
1日目
ネクストのみんなとのご対面。
キャンプ中はこの話題で持ちきりです。
会場のWi-Fiのパスワードの雰囲気で「あ、再びセキュリティ・キャンプに帰ってこれたんだ」と実感しました。
全国大会の皆さんがグループワークをしている初日、いきなり講義がスタート。
講義1 俺のTPM/TEEスキルで転生後も無敵です
セキュリティ・ネクストキャンプは、全国大会の次のステップとして用意された特別なプログラムです。最初の講義としては、忠鉢さん、木村さんによる「俺のTPM/TEEスキルで転生後も無敵です」と、レアな講義が行われています。 #seccamp pic.twitter.com/ahLP9gi3wO
— セキュリティ・キャンプ (@security_camp) August 13, 2019
耐タンパー性などの、厳密なアクセス制御のもとに鍵を保存する機能を持ったものをセキュアエレメントと言います。 身近なところだと、VISAのICチップやSuicaなどの決済系のデバイスにはセキュアエレメントが付いています。
TPM/TEEとはこのセキュアエレメントを実装するための仕様のことです。
この講義では、その実装のミスや脆弱性により引き起こる危険性について学びました。
宿題
ホームルーム・宿題時間という枠が毎日1~2時間ほど設けられていて、てっきり事前学習ができる時間だと思っていました。
ネクストキャンプでは1日目のホームルームが行われています。疲れの見え始める時間ですが、講師の今岡さんの説明を真剣に聞いています。#seccamp pic.twitter.com/H3uYFXhIj7
— セキュリティ・キャンプ (@security_camp) August 13, 2019
ホームルームの時間には講師の方がやってきて、宿題というものが出されます。
- 講義1「講義で出題した宿題を翌朝までに提出して」
- 講義2「貸与PCでPythonの環境構築しておいて」
- 講義3「VMから本番の環境にsshで接続できるか確認しておいて」
- 講義4「明日の講義までに講義資料読んでおいて」
- 講義6「本番で使うLANケーブル配布したよ、レギュレーション考えて、そのプロトコルも作って」
ボク「▂▅▇█▓▒ (’ω’) ▒▓█▇▅▂うわああああああ 」
VirtualBoxでホストOSからゲストOSにssh接続するところから詰まっていました。助けてくれたネクストのみんな、ありがとう。
2日目
講義2-1 攻撃検知エンジンの開発
セキュリティ・ネクストキャンプ 2019の2日目も始まりました。最初の講義は高江洲 勲さん、伊東 道明さんによる「攻撃検知エンジンの開発」です。攻撃検知エンジンを開発し、攻撃ベクター生成エンジンと対決をして改良していくハイレベルで実践的な講義です。 #seccamp pic.twitter.com/h6vZRKAUh8
— セキュリティ・キャンプ (@security_camp) August 14, 2019
XSS文字列と正常文字列を分類する機械学習モデルを作成するという講義です。
事前学習では、以下のようなレベル1のデータに対して、XSSか正常かを分類するモデルを作ってくるとのことでした。
レベル2以降は講義が始まってから順次解禁されていきます。
レベル | 特徴 | 例 |
---|---|---|
1 | 比較的単純な文字列 | ></iframe><script>alert(1);</script> (XSS) |
2 | 複雑なXSS文字列 | "><script>eval("al"+"ert(1)");</script> (XSS) |
3 | 教師なしデータ | <strong><em>Doubleclick</em></strong> (ラベルなし) |
4 | XSSのような正常文字列 | This alert is for the malicious script. (正常) |
このような文字列を分類するには以下のような流れで行います。
入力文字列→前処理→ベクトル化→最後にモデルで学習して出力する
前半の講義では、レベル1で作ったモデルと結果・考察を発表し、講師の方からフィードバックをもらい、改善点を踏まえて次のレベル2のモデルを作成し発表をしました。
TF-IDFでのベクトル化は精度が高く、Word2Vecでのベクトル化はうまくいかないなど、6人全員がそれぞれ違ったアプローチを共有できたため、効率良く勉強になりました。
レベル3については、6人で1つクラスタリングで分類せよという宿題が出ました。
講義3-1 エミュレータによるCPU特殊命令の追加の実験
午後のネクストキャンプ最初の講義は、坂井 弘亮さんによる「エミュレータによるCPU特殊命令の追加の実験」です。 この講義では、CPUに独自追加された特殊命令について、推測し再実装します。 #seccamp pic.twitter.com/cuS1EYat4H
— セキュリティ・キャンプ (@security_camp) August 14, 2019
この講義では、SECCON CTF 2018 国際大会に出題された問題を、作問された坂井先生直々に解き方を学ぶことができます。
各アーキテクチャの実行ファイルは、独自の特殊命令を利用しているため、普通に実行するとprogram stopped with signal 4 (Illegal instruction).
のようになり実行できません。
これらの実行ファイルに対して、特殊命令が実装されていない手元のデバッガで静的解析したり、特殊命令が実装されたエミュレータ上で動的解析しながら、特殊命令を推測します。
アーキテクチャは全部で10種類あり、割り振られたアーキテクチャで特殊命令を推測して再実装するという宿題が出ました。
講義4-1/4-2 だまされないGPS
ネクストキャンプでは、午後と夜を使って坂井 丈泰さんより「だまされないGPS」の講義を行っています。GPSによる位置計算プログラムの改良を通して偽装(スプーフィング)対策を考えます。 #seccamp pic.twitter.com/PYstbgCaq2
— セキュリティ・キャンプ (@security_camp) August 14, 2019
この講義では、GPSの仕組みを理解しながら、GPSをだませば何ができるか、だまされないためにどうすれば良いかを考えました。
改ざんされたGPSデータに対して手を動かしながら、異常な航法メッセージを特定したり、偽装された位置情報の推定をしていきます。 実際にスプーフィングを行うデモもありました。
GPSのセキュリティ脅威として以下が挙げられます。
- ジャミング
- ミーコニング
- スプーフィング
- 位置情報の偽装
これらの対策として、航法メッセージなどが正常かをチェックしたり、指向性アンテナを使用してGPS衛星が存在する方向から来る電波だけを受信するなどがあることを学びました。
宿題
「セキュリティ・キャンプ全国大会 2019」「セキュリティ・ネクストキャンプ 2019」2日目の講義が終了しました!講義後は、教室が開放されます。ネクストキャンプでは、1日目と2日目に出された宿題に取り組みます。 #seccamp pic.twitter.com/UASSAfkzrh
— セキュリティ・キャンプ (@security_camp) August 14, 2019
今日出た新たな宿題です。
- 講義2「クラスタリングして」
- 講義3「特殊命令を推測して実装して」
ロバストプロトコル未実装ボク「▂▅▇█▓▒ (’ω’) ▒▓█▇▅▂うわああああああ 」
3日目
講義2-2 攻撃検知エンジンの開発
ネクストキャンプ2日目は前日に引き続き、高江洲 勲さん、伊東 道明さんによる「攻撃検知エンジンの開発」です。データセットを元に分類器の作成を行い、講師からのフィードバックを受けています。 #seccamp pic.twitter.com/YOnwF8uDKj
— セキュリティ・キャンプ (@security_camp) August 15, 2019
昨日の食事の休み時間等を使って、我々が完成させた方法は、TF-IDFでベクトル化し、K-meansでクラスタリングするというものでした。
ラベルが分かっているレベル1, 2のデータで、ベクトル化、クラスタリングも様々な手法を試した結果この2つを採用したのですが、講師の方からダメ出しをされます。
講師「パラメータは調整しましたか?」
我々「い、いいえ」
講師「Grid Searchしないとダメでしょ」
どのクラスタリング手法を使うかは、まずベクトル化した特徴量をプロットして、大まかに判断できます。
その後それぞれのアルゴリズムでパラメータをGrid Searchをするものです。
クラスタ数がわからないときは、シルエット分析を使ってまだ分割できそうかを判断できます。
今までのフィードバックを踏まえてレベル4を作成して、発表しました。
また、講義として機械学習の脆弱性について、Adversarial Examples、Model Extraction、Decision boundary manipulation、Neural trojanの4つ教わりました。中でもNeural trojanは、モデルにバックドアを仕込むという手法で、他人の作ったモデルが信頼できなくなるなあという印象を受けました。
講義5-1 暗号アルゴリズムのFPGA実装
ネクストキャンプの午後の講義は、今岡 通博さんによる「暗号アルゴリズムのFPGA実装」でした。C言語からHDLに書き替えるスキルの習得を目標とし、まずは暗号アルゴリズムのAESの仕様書およびVerilog-HDL実装を読む事前学習をベースとしてゴールを検討しました。 #seccamp pic.twitter.com/UHlKsJrRcw
— セキュリティ・キャンプ (@security_camp) August 15, 2019
この講義では、AESの仕様書を読んで、FPGAで実装します。
事前学習でのAESのアルゴリズム、c言語での実装、Verilogコードについて復習し、まだどこか高速化できないかを探しました。
Model Simでシミュレーションして、正しく動作しているかを確認します。
明日の講義ではこれを実機のFPGAで動作させます。
夕食をわずか30分で食べ終えたみんな「やった、1時間も宿題できんじゃん」
宿題
ネクストキャンプのホームルームでは、課題が出ていました。どうやらネクストキャンプの中で学んだことについて、スライドを作って発表するようです。どのような発表になるのでしょうか? #seccamp pic.twitter.com/eUTxI3vutz
— セキュリティ・キャンプ (@security_camp) August 15, 2019
最終日に10分間成果発表をするということで、1人ずつ印象に残った講義について話すことにしました。
しかし、最終日の午前中まで講義がぎっしり詰まって、その課題に追われています。
一体いつ準備すればいいんだー!?
4日目
講義6-1 ロバストなプロトコルを考案せよ
ネクストキャンプ4日目の最初の講義は、今岡 通博さんによる「ロバストなプロトコルを考案せよ」です。RJ45の端子間で起こるさまざまな障害に対応するプロトコルをソフトウェアの作成などを通して考案します。 #seccamp pic.twitter.com/fPGGjHjFjG
— セキュリティ・キャンプ (@security_camp) August 16, 2019
LANケーブルに物理的にノイズを入れた状態でも、ファイルをたくさん送信できるようなプロトコルを作りなさいという講義です。
最も多くファイルを転送できた人が優勝というコンペ形式でした。
この大会のレギュレーションもタイムスケジュールも全て自分たちで決めさせていただけるという、我々の自主性を発揮できる素晴らしい授業でした。
ノイズを注入するLANケーブルを作るところから事前学習で始まっていました。できたとは言っていない。
被膜を剥がすのですが、ダイソーのLANケーブルは極細なヨリ線のためちぎれやすくて無理でした。
最終日の大会に向けてレギュレーションとタイムスケジュールを話し合って決めました。
講義3-2 エミュレータによるCPU特殊命令の追加の実験
ネクストキャンプ4日目、次の講義は「エミュレータによるCPU特殊命令の追加の実験」2日目です。宿題時間に調べたアーキテクチャについて発表をして、坂井さんのフィードバックを受けています。アーキテクチャは違っても本質は変わらないということを学びます。 #seccamp pic.twitter.com/Y6upYvaBwA
— セキュリティ・キャンプ (@security_camp) August 16, 2019
各自が担当したアーキテクチャについて宿題でどこまでわかったか、実演を交えながら発表しました。
自分はMN10300というアーキテクチャを担当しました。Panasonicの32ビットマイコンです。
乱数生成アルゴリズムがXorshiftというところまでわかったのですが、アルゴリズムの理解が甘くて、どのタイプのXorshiftなのかまで特定できませんでした。
その先のエミュレータへの特殊命令の実装まで行きたかったですね。その後の課題となります。
ARMのアーキテクチャを担当した方は、エミュレータへの実装で詰まっていましたが、坂井先生が解決してFlagが表示されるという素晴らしい展開に。お見事でした!
まとめ
以下、講師の坂井先生によるまとめです。心に響きました。
いろんなアーキテクチャを触るのはいいことで、共通点、相違点が見つかる。
共通点がCPUの本質であり、相違点が実装の違い。 どのアーキにもレジスタがある(本質)けれど、引数や返り値をどう扱うかはそれぞれ違う。
これはCPUに限らずOSなど他のことでも言えること。 いろんな実装を見ることで見つかるものがある。
また、エミュレータとは実機の代替ではなく、実装技術を示すことができるもの。
アイデアがありますだけだと予算は出ないので、話を通すためにサンプルを実装できるというのがエミュレータの使い方でもある。
講義5-2 暗号アルゴリズムのFPGA実装
ネクストキャンプ午後の講義は、今岡 通博さんによる「暗号アルゴリズムのFPGA実装」2日目です。実際に作成したコードをFPGA上で実行していきます。 #seccamp pic.twitter.com/rMZk6gXGeB
— セキュリティ・キャンプ (@security_camp) August 16, 2019
2回目の講義では、QuartusでVerilogをコンパイルし、実機Cycolone IVで動作させました。
ノンブロッキング代入でスワップできることを使って、Shift Rowsを並列処理で実装することに成功しました。やったー!
最後の晩餐にて
「熱っ!!!」
3人が鍋に手を当てて火傷していました。
宿題
残された宿題はあと1つ。
今朝決まったレギュレーションに対応したプロトコルを完成させるだけだ。
5日目
みなさんはどれくらい睡眠できたのでしょうか。
明け方5時半にもSlackの通知がありました。
講義7 モブプログラミング
ネクストキャンプでは5日目も講義が実施されます。最初の講義は、内田 公太さんによる「モブプログラミング」です。今回はモブプログラミングでテスト駆動開発を実践します。コードを書くドライバーを5分で交代しながら、周りのナビゲーターがどのように書くかについてドライバーに伝えます。 #seccamp pic.twitter.com/D17LWTIkeL
— セキュリティ・キャンプ (@security_camp) August 17, 2019
モブプログラミングとは、 1 台のパソコンを複数人で使うプログラミング手法です。1人がコードを打ち込む人(ドライバー)、残りが指示を出す人(ナビゲーター)となって、わいわいがやがやとプログラミングを行います。 ペアプログラミングの複数人バージョンとも言えるでしょう。
講義では、cyber-dojoを使ってテスト駆動開発をしました。言語はみんなが書けるPythonです。
この講義、自分が一番楽しかったと思う講義です。その理由は、
- みんなプログラミングがめちゃくちゃできる
- みんなのスマートな記述が非常に参考になる
- 書き方がわからなくても、誰かがコードを口で言うのでそれをそのまま書けばいい
- カンマの後にスペースを入れないと野次が飛ぶ
- インデントがスペース2つだと野次が飛ぶ
- swapを自分の名前っぽくタイポすると野次が飛ぶ
出会って5日目ということで、口出ししやすい環境だったというのが大きいです。
みんなプログラミング強すぎて、「100 doors」という問題がたったの15分で終わり、2問目「Reversi」に突入しました。
あとちょっとで完成でした...。
この講義だけ1時間30分しか無くて、あっという間に終わってしまいました。 もっとやりたかったな。
講義6-2 ロバストなプロトコルを考案せよ
ネクストキャンプも最後の講義です。今岡 通博さんによる「ロバストなプロトコルを考案せよ」では、昨日の朝の講義から引き続き課題に取り組み、発表を行いました。ノイズのあるネットワークで自分で考えたプロトコルがどこまでファイル転送できるかを試しました。 #seccamp pic.twitter.com/1OFqYwEElM
— セキュリティ・キャンプ (@security_camp) August 17, 2019
ラスボスです。
各自作成したプロトコルで、1分間にいくつのファイルを転送できるかの勝負です。 送信側、受信側のそれぞれにノイズを注入して2回計測します。
結果はなんと2位でした!!!
自分が作ったプロトコル
自分は損失を気にしないプロトコルを作成しました。 github.com
UDPで送れる最大データサイズは約64Kbytesなので、100Kbytesのファイルは2つのUDPパケットで送ることができます。 この最大データサイズレベルのUDPでも、レギュレーションの最小ノイズ間隔(100ms)でも1~2個送れることが昨夜の実験により明らかになったのです。
じゃあ、余計な再送処理とかせずに、誤ってもいいから、片っ端からファイル送りまくろうぜという結論になりました。
しかも、このプロトコルはレスポンスが一切ありません(受信側の線を使わない)。 ノイズは片方にしか注入されないため、受信側にノイズがある時は、実質ノイズ無し状態で送信することが可能です。
誤りなく送信できたファイル数で競うというレギュレーションとノイズの間隔が地味に広いことを踏まえて出来上がりました。
果たしてプロトコルと言えるのか疑問が残るところですが、1回目(163/347)、2回目(792/799)という驚異的な記録となりました。幸い、2回目は競技時間外での計測となり、参考記録となったため、1位は免れました。こんなんじゃ1位受けとれないよ。
なお、1位のかわしんくんがこの講義についての詳細をブログにしています。損失率0%は素晴らしい!ぜひご覧ください。
ネクストキャンプ全ての講義を終えてのランチは清々しいものでした。
部屋のスイッチを切るとコンセントが切れるという現象に対して、PC、iPhoneの充電音(フォ〜ン♪)で気づいたなどの部屋あるあるで盛り上がってました。
ボク「風呂沸くの速いよね」
「え?湯船つかってないが」
「「シャワーだが」」
「風呂入ってる余裕ある?」
ボク「!?!?」
宿題
おおっと、まだ宿題がありました。
成果報告会のスライド作成と発表が残っています。
ネクストキャンプのホームルームもこれで最後です。この後すぐに始まる成果報告会に向けて、受講生同士で発表の細かいところを確認し合っていました。#seccamp pic.twitter.com/6ieo4FQw5L
— セキュリティ・キャンプ (@security_camp) August 17, 2019
直前にスライドを完成させて...
ネクストキャンプの成果報告会です。ネクストキャンプで開講された講義で実装したものや学んだことを、1人ずつ紹介しました。#seccamp pic.twitter.com/1RHoAk9z5P
— セキュリティ・キャンプ (@security_camp) August 17, 2019
無事発表できました。
感想
ネクストキャンプ全体の感想として、非常に疲れました。
講義中だけでなく、大会期間中は常に焦っていていました。ほとんどの講義は日をまたいで2回行われ、次の回までに宿題を課せられていたからです。
食事もネクストのみんなは30分で済ませ、残りの1時間くらい宿題や事前学習に費やしていました。 食事中の会話も、どうやって実装すればいいかについて話し合っていました。
部屋に戻ったら1時過ぎまで宿題、翌朝6時から宿題をしていました。ここまで追い詰められるのは初めてで、何度も心が折れそうになりました。
しかし、ネクストのみんなはとっても勉強熱心で、「自分もみんなみたいになりたい」という一心で必死にしがみついて行きました。
そんなネクストキャンプを乗り越えた今の自分は、本当に成長したと胸を張って言うことができます。
現段階で得たことは大きく3つあります。
1つ目は、あらゆる分野にも抵抗なく取り組めるようになったことです。
自分はコンピュータビジョンを専攻しており、今回の講義の内容は専門外の領域でした。 未知の領域の課題を自分で解決することが求められていました。
全国大会とは違い、手取り足取りやり方を教えてはくれません。 それが大変な反面、一番の勉強になっています。
今後自分が取り組んでいくであろう課題は、未知の分野でしょう。 それに対応していく力が身についたことが得られたこととして大きいです。
2つ目は、ネクストのみんなと共に課題に取り組み、その取り組み方を学べたことです。
講義6「ロバストなプロトコルを考案せよ」では、具体的にこうやって作るなどの指示はありません。 プロトコルなど作ったことないし、どう作ったらいいかわからない状態でした。
ネクストのみんなはこの課題に対し、TCP/IPの本を読んだり、QUICの論文を読むなどしていました。 そうやって取り組むべきだったのかと反省しました。
また、僕が仮想環境にsshするやり方を聞いた時に、その多くの手順を一瞬で教えてくれました。 事前課題でやったことをノートアプリ等できちんとまとめていて、同じことがあったらすぐに解決できるようにしてあるそうです。
こうした取り組み方を知ることが非常に参考になりました。
3つ目は、ネクストのみんなに出会えたことです。
ネクストのみんなは非常に優秀であり、話を聞けばものの本質まできちんと理解しているんだなあと感じます。 同じ課題を与えられ、同じ問題を乗り越えていく、その過程をみんなと共有できたのが非常に楽しく刺激的でした。 仲間たちと過ごした5日間はあっという間で、本当に貴重な時間です。 そんな仲間と出会えたことが一番の大きなことだと感じています。
今後もネクストのみんなと共に大会に参加するなどして、仲良くしていきたいです。
みんなのブログ
すでに他のネクストキャンプ参加者の人たちがブログを投稿しています。
かわしんくんは講義6「ロバストなプロトコルを考案せよ」で栄冠を手にしました。この講義および彼が作成したRobustpについて詳しく書かれています。 kawasin73.hatenablog.com
さわだくんはモブプログラミングでswapをsawapとタイポしていました。各講義について深くまでまとまっています。 takuzoo3868.hatenablog.com
頂戴したもの
セキュリティ・ネクストキャンプは、講師・運営の皆様、お国の税金、協賛企業などの数多のご支援によって成り立っています。 貴重な経験をさせてくださった皆様にこの場で感謝を申し上げます。
最後に
この記事をご覧になって参加資格がある人はぜひセキュリティ・ネクストキャンプに参加して欲しいです。 本当に貴重な経験になることを保証します。
「セキュリティ・キャンプ 全国大会 2019」「セキュリティ・ネクストキャンプ 2019」の全ての日程が無事に終了しました。また来年もよろしくお願いいたします! #seccamp pic.twitter.com/q4ymhy8D6Y
— セキュリティ・キャンプ (@security_camp) August 17, 2019
30日でできる!OS自作入門でサクサクOS自作その1(0〜7日目)
30日でできる!OS自作入門(0〜7日目)
川合秀実さんの著書『30日でできる!OS自作入門』を今さらですが始めてみました。
今さらと言うのは、セキュリティ・キャンプの参加が決定した頃に「この本の著者いるよ!サイン貰えるよ!」と友達に勧められて記念に購入したのがこの本との出会いでした。
そうしたら本当にサインを貰えて、記念写真まで撮ってくださいました!
あれからもうすぐ2年になります。 自分の良くない癖でですね、本を買っただけで満足してしまうところが多々あります。
そのまま本棚に眠らせていては駄目でしょ!ということで、春休みを機に今さらですが始めることにしました。
現状
7日目まで作り終えた今、現状はこのようになっています。
環境はMacでやっています。 本書はWindows向けなのですが、偉大なる先人達がMacやLinuxでも開発できるように環境を整えてくださっています。
僕はhikaliumさんのz_tools_osxを使わせてもらっています。ありがたい。Makefileを毎回書き直すだけで済んでいます。
参考: Mac OSX におけるはりぼてOSの開発環境を(再)整備した話
できたこと
0〜7日目の出来事を振り返るとこんな感じです
- バイナリエディタで地道にイメージディスクを作成
- アセンブリ言語でイメージディスクを作成
- C言語でイメージディスクを作成
- 白い画面表示
- 四角形を描画
- マウスカーソルを描画(動かない)←!?!?
- 割り込みハンドラ作成
- キーコードの取得
困ったりしたこと
- フロッピーディスクとそれが使えるPCが無いので「フロッピーディスクからのhelloOSの起動」ができなかった
- SDカードでできたりしないかなあ...
- 公式のサポートページでMacのサポートはこちら!のページのリンクが切れてるため、路頭に迷った
- naskではなくNASMでアセンブルしていたけれど、hikaliumさんのサイトに救われる
- なんでこのMakefileだめなんだ!?!?
\
が¥
ならいけるぞ何故だ!?ってなった原因はShift-JIS- 本書のコード、Shift-JISで書かれています
得たこと
感想
勉強になる
この本すごく勉強になります。 なぜかというと、大学の情報工学科で学べなかった内容ばかりだからです。
例えば、ソースファイル分割やMakefileの作成はしたことがありませんでした。 すでに分割後のソースコードに書き加えたり、Makefileが用意されていたりすることはあったのですが、 自分で作り出すことは無かったのです。
コードが複雑になったら分割、Makefileで同じものを何度も書くのが面倒になったら一般規則を使うなど、 おお、こうやって作っていくものなのか!と手に取るようにわかります。
復習にもなる
また、大学で学んだけれど頭に入っていなかったことの復習になりました。
アセンブリ言語の授業を受けていた頃はレジスタなどというものの気持ちなどわからず、 どうしてAXで番地指定できないんだよ!とキレてました。
本書では、番地の指定に使えるレジスタは限られている(BX,BP,SI,DI)ことや、C言語と連携する場合はEAX, ECX, EDXのみ自由に使ってよくて他は大事な値があって変更しちゃいけない などの説明を、作りながら問題に直面した時に教えてくれるのですごく納得がいきます。
楽しい
そして何より、楽しく学べると思います。
作ってる最中に色々と改造したくなります。 こういうの作ろうかなというアイデアが浮かんできます。
初期のMacintosh OSを再現したいなーと思ったり。 CPUを自作したくなるという衝動に駆られました。
早く完成させたい!
次回予告
マウスがついに動き出す......