セキュリティ・キャンプ2017の参加記

 能書き

基本的に講義の感想は短いです。今日だけで一気に書くとつかれるのであとでちょいちょい書き足していきます。大学の集中講義期間を挟んでいるため記憶は曖昧になりつつあり、信憑性は限りなく0に近いとしてください。先人たちの参加記と内容食い違ってたら大抵は間違ってるのは私の方、くらいの心意気でガンガン書いてます。

 

セキュリティ・キャンプの応募課題、通称黒歴史を晒してはや1ヶ月ちょいが経ちました。

 

参加前のぼく

 

で、行ってきましたクロスウェーブ府中。

パノプティコンみたい」といういかにもアカデミックなやりとりからなんとなく想像していましたが、思った以上に大きくてきれいな施設でした。

 

天井はこんな感じ。

 

「クロスウェーブ府中、上から見るか?」

Google map, 埋め込みがうまくいかないので航空写真でみてください...)

 

「下から見るか?」

 

はい。

 

あと過去のブログを参照すれば、僕の東芝に対する感情はお分かりいただけるかと思います。

会場すぐそばにあった東芝タワー

 

なんとすぐそばの地名が...

 

東芝さん、Ethernetコネクタの罪は重いですよ...

 

北府中駅~クロスウェーブ府中の移動経路

最寄り駅である北府中駅からクロスウェーブ府中への行き方は2通りあります

  • 改札口を出て左側にあるエレベータを利用する場合(距離:長い、負担:軽め)
  1. エレベータで降ります、直進します
  2. 信号が見えるとその手前に歩道橋らしき階段が見えます
  3. 登りましょう。荷物が重くても引きずりましょう。階段だけではなく自転車を押して階段を昇り降りできる、途中に凸があるスロープもあるので安心してください。
  4. 直進しましょう。坂を下ればクロスウェーブ府中は横断歩道を渡って左折、暫く歩くとすぐ付きます。
  5. お疲れ様でした(俺たちの戦いはこれからだ!)
  • 改札口を出て右側に見える階段を利用(距離:短い、負担:荷物重いとツラい)
  1. 階段を登りましょう。荷物が重かったら諦めてエレベータを利用する経路を辿りましょう。
  2. 降りましょう。
  3. 道のりに進めば↑の4.の道と合流します。
  4. お疲れ様でした(移動トラック完了)

 1日目

まずは受付。名刺交換。わかめの布教。すごく偉い人のお話を拝聴。講師紹介やチューター紹介を経て、しばらくしてセキュリティ基礎、特別講演1、2を受けた。多分他の人が細かく書いていると思うので内容は今のところ割愛を決めている。ご飯。ちなみのこのときに今年の税金水は「いろはす」ではなく「volvic」であることを確認した。置き方がとっても凝ってた。

 

大抵のホテルにはあるモーニングコールは、受話器を取り上げて「70+24時間表記でコールしてほしい時刻」を押すという設定方式。

テレビをいじくり倒したところSONY製、指定時間に起動するよう設定できることを発見。

 

2日目

起床トラック成功。どうやらベッドが変わると僕の起床時刻は非常に早いらしい。

唐揚げを食べすぎてやや胃もたれを起こす。けものフレンズ効果は偉大。「たーのしー!」な気分で講義へ。

 

 E1~E3:BareMetalで遊び尽くそうRaspberry Pi (丸一日, 11時間)

BareMetal : OSは使わないよ!

事前課題:ARMのアセンブラに慣れよう、リンカスクリプトを書こう、Makefileを書こうの3つ。多分この講義を取ってなかったらリンカスクリプト, Makefileは一生書こうともしなかったし読み解く方法を覚えようともしなかったと思う。これは成長その1。

 

ちょっとややこしかったのが ldr命令, str命令がそっくりなこと。

ldr は, (レジスタとかの値の代入先), (読み込むアドレス), (読み込む幅, uint_32なら4byte)

str は, (書き込む値を含むレジスタなど), (書き込み先のアドレス), (書き込む幅) 

 

頭が硬いので事前課題をやってもなおなかなか理解できなかった。反省&成長その2。コレすら間違ってたらたぶん誰かからマサカリが飛んできて安心して死ねる。

実験に次ぐ実験と試験勉強のために、C言語を書くのが久しぶりすぎて酷いことになった。またビット演算もあまり詳しくなかっ「た」ので結構手詰まりになる場面が多かった。講師の方にはもちろんチューターさんにも頭が上がりません。データシートを読み解きつつなんとか「GPIOのLチカまで」は上手くいった。ちなみにGPIOのLチカは昨年度の講義の到達目標だったとのこと。

データシートの読み方、ビット演算について習得。成長その3。

 

はじめにやったのはGPIOのビットの設定。以下のリンク先のデータシートを読んで、ビット操作と空のfor文を回してLEDの点滅をさせようという内容。

www.raspberrypi.org

Peripheral  specification と書かれたリンク先にあるpdfを参照すると、だいたいp.90あたりにGPIOの設定に関する記述がある。

曰く、  

GPFSELは0~5の5つのレジスタを備えており、これらはGPIOの機能を管理する。機能にはoutput, input, alt1~5といったモードがある。

GPSETは正直英文が「何言ってんだこいつ」と思えるほど雑な説明なのだが、Outputを1 (つまりhigh, high voltage)にするレジスタらしい。  

GPCLRはGPFSELやGPSETで設定した、各GPIOに関するレジスタの値をクリアする(初期値に戻す?)ための機能のようだ。つまりGPSETでhighに設定したGPIOはlow(low voltage)に戻るらしい。  

ラズベリーパイ上の基板に乗っかっているLEDを点滅させているのはGPIOによるものなので、LEDに対応するGPIOを、GPSET, GPCLRを用いて操作できれば同LEDの点滅を操作することができそうだ。  

 で、緑色のLEDに対応するGPIOはGPIO47です。

つまるところLEDの点滅でやるべきことは次のとおりだ。

 

1. GPIO 47 のモードをoutputに設定する。  

2. GPSETレジスタのうちGPIO47に関するビットだけを1に設定し、LEDを点灯させる  

3. for文で一定時間待たせる。またないと時間を置かずに2から4へ移ってしまい、点滅を目で確認することができない。  

4. GPCLRレジスタの家GPIO47に関するビットだけを1に設定し、2.で設定した1をクリアする。  

5. 3. と同じ

6. 2に戻る

 

 

 

 

 

 2日目

Embedded Systemic Reverse Engineering 101

101:手習い、手始め的な意味。

はじめにBus Piratesなる治具を利用して、チップのI2C通信などの様々な通信を覗き見ることをした。結構便利なので購入決定。

続けてルータの基板からROMを探し出す。大抵のチップは型番が印刷されているのでそこからググってデータシートを検索、ROMを特定。ROMにはプログラムが書き込まれているので、ここからいろいろなデータを手に入れることができる。ハンダゴテやハンダ、ハンダ吸い取り線、ピンセットを利用して基板からROMを引き剥がす。最後にはんだごてに触れたのは9ヶ月前だったのもありすごく不器用、ROMと基板の接点にある金属ごと引き剥がしてしまいもはや基に戻らなくなってしまった。これはけっこうコツがいるらしい。

ROMに先程のBus Piratesを接続、このときちゃんとデータシートを参照して接続を間違えてROMのデータを壊すことがないように注意した。接続がうまく言っていないとたいていは/xFFみたいな値ばかり帰ってくるが、うまく接続されるとなにか情報が書き込まれているようだぞ、ていどにはROMの内容が覗き見れるようになった。

ここで時間切れ。リバースエンジニアリングに101とついているのは、あくまできっかけにすぎないため。いろいろ分解して経験を積みたいです。

 

暗号運用技術

原子や電子・論理回路の世界から一気にネットワークの世界にやってきました。セキュリティ・キャンプの醍醐味の一つは、僕のような専門外の人にとっては普段知る機会がないレイヤについても自由に選択できること。説明や演習はとてもわかりやすかった。だがしかし、ミニCTFは手も足も出ないほど難しかった。なぜ解けるの!?という感じ。パンくず広いだと思ってたら最初のパンくずすら見つけることができなかったでござるよ。

でも確かによく見るとフラグが書かれているので、慣れの問題と認識。楽しかったので勉強決定。

 

 ハードウェアセキュリティ最前線

小学生にDiffile-Hellman 交換カギを説明し、RSA暗号について説明し...というものすごい講義。僕自身も暗号技術入門を大学2年の夏休みに読んだだけなので正直前提知識はあまり頭に入っていなかった。しかし驚いたのは、暗号運用技術ではopensslとか過去のSSL規格の技術的欠陥を利用してCTF競技を行っていたのに対し、この講義ではデジタルオシロスコープを利用して暗号化回路の出力を観測、RSA暗号化に際して行われる計算操作の違いから、10回の電圧波形のうち1回は必ず異なる電圧波形が得られるはずということからオシロスコープで測定。このそくていが結構難しく自分の学科のプライドがちょっと折れた。トリガーってなんだっけ...掃引だっけ?暫く使ってないから忘れちゃったよ、と。

暗号化回路については本当にその通りの動作をしており、しかもその動作から統計的な解析ができるよね、といった内容。

何回か試したが上手く解析はできなかった。うーん、難しい。

ただ理論そのものは面白かったので暗号については要勉強だ。

ガロア理論群論は、数学ガールで教わった とドヤ顔してた時期がありました。ものの見事に忘れてます。要復習。入試でやらかしまくった数弱伝説はまだまだ続く。

組み込みリアルタイムOSとIoTシステム演習

GR-PEACH講義。事前課題は結構簡単に終わったが、本来無関係な東芝へのちょっとした私怨が強化される講義であった。(Ethernetコネクタが使えないといろいろ困る)

その内容は、TOPPERSという組み込みリアルタイムOSをGR-PEACHで利用してロボットを動かす。このロボットを一定時間内で可能な限りセキュアにして防御を固め、ロボコンのような競技を行う。このとき相手のロボットに攻撃を仕掛けたりネットワーク全体を重くしたり、はたまた相手のロボットを乗っ取ったりしてもよいというもはや何でもありでは?という感じだった。僕はネットワークについて何も知らなかったが、担当講師のルータ攻撃もいいですねみたいな言葉からとりあえずルータ使えなくすれば競技不成立で、自チームの勝利確定した時点でルータ落とせば勝ち逃げできんじゃねというクズ思考をし、いそいでそのためのツールのインストールを試みるも、Windows上ではまともに動かなかった。(Cygwinが必要だったが生憎先日アンインストールした)焦ってKali Linuxをインストールしようとするも間に合わず。何もできず残念。

その間僕が属していたグループの人達(通称:プロたち)は操作性を改善させたり脆弱性を突いて他のロボット操作を実現したりと、掛け値なしに「え、すごくない?僕は一体...」という感情を抱いた。

競技そのものは非常に面白い結果になった。ある人はARP攻撃を仕掛けたりしてた。防御方法も様々。これ、競技化できないかな。用意された同一規格の道具や部品から制限時間内にロボットを組み立て、可能な限りの防御を施し、他チームのロボットを攻撃。妨害ありのCTFロボコン

 

ネットワークの知識が強力無比な威力を発揮していた講義で、ネットワークの勉強を強く決心した。

 

おめでとう、コレで君は原子や半導体材料からネットワークまでを勉強しようとしている、何をしたいのかわからないエンジニアに成ることが決定だ!

 

楽しけりゃいいんだよ楽しけりゃ!

どの講義も得られた経験は非常に貴重だった。

もっと学びたい、という意欲が掻き立てられる講義だった。

 

とりあえずここまで書いて公開。