お腹.ヘッタ。

関数型とかセキュリティとか勉強したい。進捗つらぽよ

セキュリティ・キャンプ全国大会2016の応募用紙を晒す(前編)

今年が本当に最初で最後かもしれないけど誰かのためになったらいいなと思って晒します。そしてブログ一年記念(?)をブログを始めた動機に関わるものでやれてよかったです。
以下本文〜〜><

【共通問題】

共通問題.1

(1)あなたが今まで作ってきたものにはどのようなものがありますか? いくつでもいいので、ありったけ自慢してください。

コンテストや大会に応募したもの。
・高校生プログラミングコンテストでの競技クライアント。
・仙台弁翻訳&辞書ソフト。
・アーチェリーのリアルタイム対戦システムのiosのクライアント。
倒立振子の機構を用いた杖。
その他の作品
・冷蔵庫の中をメモして賞味期限を通知してくれるアプリ(iosapp)
・パケット可視化ツール(pythonとQtとOpenGLで記述)
以上のものなどを作成しました。

(2)それをどのように作りましたか?ソフトウェアの場合にはどんな言語で作ったのか、どんなライブラリを使ったのかなども教えてください。

高校生プログラミングコンテストでの競技クライアント
 C++で記述した。幅優先探索などのアルゴリズムを使い最短距離を求めて移動する動作を組み込んだりその際効率化を求めて、巡回セールスマン問題と呼ばれるn以上の点における合計の最短路問題をを解いたりしました。

仙台弁翻訳&辞書ソフト
 C#で記述した、Linqなどのライブラリを使い文字列のマッチングなどをしました。

アーチェリーのリアルタイム対戦システムのiosのクライアント
 Swiftで記述した。socket.ioやcoreprotなどのライブラリを使いました。

倒立振子の機構を用いた杖(球の上に倒立するロボット)
 ハードウェアはarduinoやesp-wroom、加速度、ジャイロセンサー等を用いて作成しました。コードはC++で記述しました。倒立振子の制御はPD制御と呼ばれる古典制御で行い、角度を求めるためにはカルマンフィルタを使用しました。また杖には温湿度センサと大気圧センサを組み込み、体感温度や天気予報の機能を作成しました。
 その杖を制御するに当たっては、iOSアプリと連携した。通信はesp-wroomと呼ばれるwifiモジュールで行い、プロトコルはwebsocketで接続をしました。また杖を音声コマンドで動作をするためにOpenEarを用いて音声で動作させました。

冷蔵庫の中をメモして賞味期限を通知してくれるアプリ
 swiftとsqlite3を使って作りました。

パケット可視化ツール
 pythonでpypcapを動かしながらそこから拾いました。OpenGLレンダリングして表示しました。
 

(3)開発記のブログなどあれば、それも教えてください。コンテストなどに出品したことがあれば、それも教えてください。

ブログ:http://takeio.hatenablog.com/
出場大会および結果
高校生プログラミングコンテストでの競技クライアント→高校生プログラミングコンテスト:優勝
仙台弁翻訳&辞書ソフト→宮城県産業振興教育ソフトウェアコンテスト:最優秀賞
アーチェリーのリアルタイム対戦システム→U22プロコン(賞は頂けなかったが、高体連アーチェリー部から感謝状をいただき、インターハイでの活用が検討されている。)
倒立振子の機構を用いた杖→ナノマイクロアプリケーションコンテスト:奨励賞
サイバー甲子園→3位
SECCON intercollege 決勝大会(18チーム中17位)

共通問題.2

(1)あなたが経験した中で印象に残っている技術的な壁はなんでしょうか?(例えば、C言語プログラムを複数ファイルに分割する方法)

1:esp-wroomにiOSappでwebsocket通信をした際にsocket.ioを使って通信ができなかった。
2:iOSの画面レイアウトを作る際にオートレイアウトがとっつきにくくわかりにくかった。
3:iOSのナビゲーションコントローラのでの画面の順番を変えたかった。
4:倒立振子の機構を用いた杖を作る際にその倒立振子の機構は球乗りの機構を採用したかった。
5:高校生プログラミングコンテストで最短経路を求めるプログラムを実装するとき苦労した。
6:XSSとSQLiがよくわからなかった。(ブラインドSQLインジェクションとか表連結で叩くとか蓄積型XSSなど)
7:Q学習を学習する際用語や意味が理解できなかった。(マルコフ性など)

合計7つ挙げた

(2)また、その壁を乗り越えるために取った解決法を具体的に教えてください。(例えば、知人に勧められた「○○」という書籍を読んだ)

上に対応するやつ
1:リファレンス読んでもわからず自力で治そうとパケットキャプチャをしました。通信パケットを読むとただGETをしているだけだったので純粋にwebsocketだけのライブラリに変えました。また仕様書を読み、”Sec-Websocket-Version:13”ではなく古い”Sec-Websocket-Version:8”だったのでそこを変えて通信を行いました。

2:オートレイアウトは”SwiftではじめるUI設計&プログラミング「操作性」と「デザイン性」を兼ね備えたアプリの開発手法”という本を読み、ある程度オブジェクト間の間隔を作るときはViewを噛ませるなどをして対応しました。

3:質問サイトで質問してその答えをもとにナビゲーションコントローラの仕様書を読みこれのスタック構造を理解したのでそれを入れ替えるなどをして対応しました。

4:自分のやりたい球乗りのことをしている大学の先生の論文を読み、その際数学がわからなかったので線形代数解析学ラグランジュ方程式を学びながら論文を読み進めました。しかしそれでもわからなかったところがあり、例えばPD制御をなぜ採用したかなどその数式やゲインの同定試験がわかりませんでした。なので大学の先生にアポイントメントを取り、実際に実機を触らせてもらい同定試験のコツをお聞きしました。

5:手法として幅優先探索を実装して行いました。

6:XSSはXSSchallengeで理解しました。SQLiはハリネズミ本と呼ばれるCTFチャレンジブックスで理解し、深いところを知ったのはSQLmapというオープンソースのSQLinjectionの脆弱性診断のソースを読んで理解しました。また他の手法ということでwriteupを見ながら学んだ(SECCONの箱庭XSSや0CTFのwriteupなど)

7:機械学習の本を読み他にスライド等を読みセミマルコフ決定過程を理解し、ε-greedy手法とQ学習を用いエージェントを学習させました。

(3)その壁を今経験しているであろう初心者にアドバイスをするとしたら、あなたはどんなアドバイスをしますか?

1:やはり通信周りがあるのものは基本的にWiresharkなどでパケットを読むのは基本と考えます。また困ったときは仕様書を読むのも良いかと思っています。
 2:オートレイアウトは今のiOSアプリ作成には鬼門なので本を買い読むのが良いと考えます。また実際にQiitaがオートレイアウトの記事が多いので記事を読むのが良いと思います。
 3:質問サイトで聞くのも煮詰まった場合は有効だと思います。ただし自分でやりこみ今どんな過程を踏んで今どういう状態と言えるぐらいまでにやり込んでから聞く方が自分のためにもなり、自分の質問したいことが明確になると考えています。
 4:やはり自分でやり込んでこれでもかというほど煮詰まるまでやるべきだと思う。また論文等があればその先生にお願いをしてメールを出し、それでも理解できないのであれば研究室まで行かせてもらうのも手だと思います。自分の熱意があればお願いは伝わると思っています。私は嬉しいことにそれが伝わり、何度か研究室の見学をさせていただけました。実際に技術としては古典制御をしっかり学ぶべきだと思います。PIDこれらの要素はどんな動きをするのかを理解するべき、また制御の指令をトルクではなく加速度制御にするとかなりロバストな動きになりました。
 5:実際に紙に書くとわかりやすくできました。煮詰まった際や理解できないときは紙に書くが良いと思います。
 6:writeupを読んでみて実際に頭にイメージを作って問題を解いてみることや、またSQLiであればSQLmapのソースコードを読んでみるのが一番良いと思います。
 7:”強化学習”(http://www.amazon.co.jp/exec/obidos/ASIN/4627826613/kivantium-22/)という本がおすすめで、大変詳しく載っているのでしっかり読み込むのがおすすめです。またある程度理解できたと感じたら一度書いてみると良いと思います。また何度か試行を増やしたり割合を変えることで動作が変わるので作ったら何度も起動をしてε-greedyと呼ばれる確率手法の値を何度も確認するとどんなものなのか掴めると思います。

共通問題.3

(1)あなたが今年のセキュリティ・キャンプで受講したいと思っている講義は何ですか?(複数可)

そこで、どのようなことを学びたいですか?なぜそれを学びたいのですか?
私がセキュリティを学びたいと思った動機は、自分の普段使ってるウイルス対策ソフトの期限がが切れて仕方がなくフリーのものに変える際、親から勧められた”comodo”というものを使い始めました。しかしフリーのものということでその対策ソフトは大丈夫なのかと調べたところホワイトリスト制でのチェックを行っているという記述をネットで読みました、では他のウイルス対策ソフトはどんなことをしているのだろうという疑問から私はセキュリティについて興味を持ち学び始めました。そこから私は去年の夏頃の終わりごろからCTFを通じてセキュリティについて学んできた。
 勉強を進めていく中で”サイバー甲子園”というものに出場した際にもっと高度なこと、セキュアコーディング、ファジングなどをしたいとチューターの方に相談をしたところセキュリティキャンプを勧められたので今回応募しました。
 今回私がセキュキャンで受けたいと思っている講義はDAY2:TLS徹底演習、DAY3:Webアプリケーションの脆弱性の評価と発見、オンラインゲームアタック&ディフェンスチャレンジ、みんなでクールなROPガジェットを探そうぜ、DAY4:リバースエンジニアリングを自動化せよ、組込みリアルタイムOSとIoTシステム演習の講義を受けたいと思っています。
DAY2:TLS徹底演習:あまりSSL/TLSの通常証明書周りは触れることが少なく、あまり知識がないです。私は普段使っているものを是非知見を深めたいと思っています。また今回の暗号方式はChaChaというGoogleが推奨してるもので現在時点でTLS1.3のドラフトに出てるものを使うので最新の知識を揃えたいという意味でも是非実装してみたいです。
DAY3:Webアプリケーションの脆弱性の評価と発見:Webアプリケーションは基本的にXSSやSQLi、セッションの書き換えぐらいしか触ったことしかないので実際の脆弱性を探す時の着眼点や具体的な方法、考え方を生でプロの力に触れて力を是非養いたいと考えています。
 オンラインゲームアタック&ディフェンスチャレンジ:ここでは運営として体験してみたいと思っています。理由は例えば通信の際に間に何か噛ませてそこで通信した攻撃力データを変えるとかバイナリエディタでセーブデータ弄って00をFFなどにするなど攻撃側はあまり何も考えずとも案は出るが、運営側というのは方法が思いつかず、それらを知れると考えるとワクワクするので是非体験してみたいと考えています。
 みんなでクールなROPガジェットを探そうぜ:私はあまり命令を使った周りのことはGOTで使う簡単な知識ぐらいしかわからなく、アセンブラも各種の命令もあまり得意ではないです。だからこそみんなでクールなROPガジェットを探そうぜを受けてこの講義を受けて知見を深めたいと考えています。
DAY4:リバースエンジニアリングを自動化せよ:あまりデコンパイルは苦手でいまだによく分からない分野です。ですがそれを自動化というのは大変心惹かれるものだと感じています。今時のマルウェアは複雑であったりRing0上で動いたりとかなり多岐にに分かれるので知見を得たいです。

組込みリアルタイムOSとIoTシステム演習:私は非常にIoTには興味があってかつリアルタイムOSにも興味がありますこれは受けるしかありません笑。実際にesp-wroomというwifiのモジュールを扱って触ったりなどをしたこともあります。ですがこれはハード中心でこれの説明にはソフトウェア中心と書いてあるので是非参加して違う角度から知見を得たいと思っています。

(2)あなたがセキュリティ・キャンプでやりたいことは何ですか?身につけたいものは何ですか?(複数可)

自由に答えてください。
私は共通問題3の(1)で行いたい講義を述べましたがそれらはすべてここでなければ私には身につかないであろうものだと思っています。私はこのセキュリティ・キャンプで多くの人と繋がり、多くのこと最新の知識、知らなかったを学びたいです。例えばインフラであれば今のクラウドが最新のトレンドで、様々なところで事業展開が行なわれています。今さくらインターネットでは売り上げの一位がさくらのクラウドというサービスだが以前はクラウドではありませんでした。むしろクラウド事業を展開する際は他の売り上げが減るだけでコストがかさむのではないかなど反対の声があったそうです。しかし社長が展開すると決めて5年で売り上げ一番の部分がクラウド事業だそうです。このように情報分野は成長が早く考え方が刻々と変化し、そのときによってベストが変わります。しかしトレンドの流れをつかんでいる今だから実践を持って学べることがベストだと思っています。
 私はセキュリティ・キャンプは飽くまで情報科学に携わる若年者の後押ししてくれる場所であり、本質的にはキャンプへ参加し、何をつかみたいかということを見ているのだと思っています。キャンプに参加しただけで、飛躍的に技術力は上がるわけではなく、自分で行動しなければ何も得られないと私は感じています。それ故にセキュリティキャンプで一人では身につかない生きた知識を身に付け、吸収したことを昇華して私自身の血肉としたいと考えています。また私は工業高校生で、大半が就職の進路を考える学校でもあるので、家庭の事情もあるが進路は就職になる可能性もあると考えています。そうなれば来年からは学生ではなくなってしまうので最後のチャンスになんとしてでも参加したいと思っています。


(改変しました。本当に落ちそうなので。。。やけくそです)
後編へ続く