読者です 読者をやめる 読者になる 読者になる

ふるつき

記事と内容がないです

SECCON 九州大会に参加した

seccon

まとめ

insecureというチームでSECCON九州大会に参加し、見事に優勝をかっさらいました。よかったです。

f:id:Furutsuki:20160717164945j:plain

福岡に小旅行

うなーん(一日目終了まで。読み飛ばし推奨)

梅ヶ枝餅が食べたい というのと、どうやら SECCON九州大会 なるものがあるらしい、というので、福岡県博多市に一泊二日の小旅行に行ってきました。昨年八月末のセキュリティ・キャンプ以来でした。

今回は、「SECCONの予選が九州であるらしいぞ!」と、弊学の情報処理研究会 #seccon チャンネルで騒ぎたて、行く人を募集しました。今回はSECCON IoTと題して、ハードウェア周りのCTFになっていたので、私はやめておこうかな、と思いましたが、「費用を自己負担しなければならない」「結構遠い」というような要因もあり、情報処理研究会内部でも三名(師匠、thrustくん、mi_24vくん)しか参加表明が無く、また、 梅ケ枝餅も食べたかった ので、私も応募することにしました。ちなみに、師匠とthrustくんは、昨年のSECCON Intercollegeに一緒に出場した仲でした。ふたりともSECCON Tシャツを着ており、プロに目をつけられることを恐れてSECCON Tシャツを避けた私とは大違いでした。

それはさておき、7月頭になんか無事に参加できることが決まって、ツイッターに書き込んだりしていましたが、他の参加者の情報が無く(チーム名もなかった……)、悲しい日々を送っていました。

三連休の頭ということもあり、ホテルを取るのに苦労しながら、四人で分担して旅程を建て、昨日、福岡に新幹線で行きました。朝は遅く、ゆっくりとした出発になったのですが、これは失敗だったかもしれません。

というのも、到着した後、梅ケ枝餅を食べに行くにはちょっと遅い時間になってしまいました。また、その日はCTF for ビギナーズが、SECCONと同じ会場であったらしいのですが、それに参加できませんでした(そもそも応募してなかったのでこれは本当に後の祭り)。

新幹線のなかでTwitterをみながらそんなことを考えたり、あるいは、ファンタジスタドールの四話を見たり、お昼ごはんに菓子パンを食べたり、えーと寝たり、暇をしながら福岡は博多駅に向かっていました。

さて、福岡についてからですが、thrustくんに続いて、ゲームセンタに行きました(なにやら最近の音ゲーには「遠征」というシステムがあるらしいです。土地の人々に睨まれたら殺されそう)。私はゲーセンは肌に合わないのですが、私の学校では音ゲーマという種族が蔓延っていて、thrustくんもその一人だったのです。thrustくんは、beat maniaみたいな感じのゲームをやっていました。は為にはまったく面白そうに見えなかったのがとっても面白かったです。私がやっていることも、多分岡目には全く面白そうに見えないんだろうなあとおもいました。

競技プログラミング界隈では音ゲーがわりと流行っていて、コミュニケーションを円滑にすすめる手段として使えるというのはイメージとして持っていたのですが、CTF界隈ではあんまり音ゲーマいない気がしています。)

みみが無くなりそうだったので、私は早々にゲームセンタから退散し、本屋でPICアセンブリの本を立ち読みしたり、Lispの本だーっていって立ち読みしたり、3D CAD全然興味ないのに立ち読みしたりしていました。博多駅周辺には大きな本屋がいくつかあっていいですね(私の観測したものだけでも、紀伊國屋書店丸善があって、どちらも、奈良県のどの書店よりでかいのではないか……)。

それから、ホテル(あぱほてるというやつです。セミダブルの部屋を2つ取りました。三連休なので高いし、どこも埋まっていて、予約時点では大変つらい思いをしていました)にチェックインして一息つきました。mi_24vくんは遅い昼食をとりに博多駅に再度向かい、残った三人は、おもむろにラップトップを立ち上げていました。ところでこのホテルに文句を言いたいことがあって、なんでEthernetケーブル(UTPケーブルっていうんですか?)はことごとく爪をもたないんですか。なんで、ホストがLinuxだとつながらないんですか。なんで、無線LANなぞに不調なんですか……。

あ、思い出した。チェックインの時にお酒渡そうとするのやめてください……。「お酒じゃないですよね?」って訊いたのに「え、ああはい」と言ってお酒渡すのやめてください。こちとら未成年でございます。

さて、mi_24vくんはどこかでみつけたモスバーガで美味しい思いをして、私にドーナツを5つ買ってきてくれました(お使いをたのんでいた)。良い時間になったので、夕食へと繰り出します。

博多に来たのだから、とんこつラーメンを食べないわけには行きません( 梅ケ枝餅は食べそこねたけど )。というので、近くのラーメン屋さんを探して向かいました。雨が降っていて、傘をさしたけれど、少し濡れました。私はそのお店でとんこつラーメンを一杯いただき、他の人は、替え玉を頼んだり、煮玉子ラーメンを頼んだりしていました。

f:id:Furutsuki:20160716192157j:plain

さて、ラーメン食べて機嫌よく、雨も上がりました。ここで、わたしを除く三人は再びゲームセンタへ繰り出します。私はゲームセンタは懲り懲りだったので、先にホテルに戻ることにしました。

ホテルに戻った後、ふと飴が欲しくなったので、コンビニに行きました。しかし、コンビニの品揃えでは私を満足させることができず、もう少し遠くにあったスーパーまで足を伸ばしました。そこで、黒糖飴を買いました。

それから、シャワーを浴びて、何かをしていたら、人々がかえってきました。その後、師匠と交流しながら、師匠の作った電子回路の問題に挑戦したりしていました。これは1時まで粘りましたが、解けなかった……。まだ解けてませ旅行に来ると夜更かしをするので良くないですね。

たこ

次の日(今日のこと)、普通に起きて、ドーナツが5つあったうちの、3つを食べました。フレンチクルーラとオールドファッション抹茶とあと何かです。

だらだらしていたら出発が遅れて(これはだいぶthrustくんとmi_24vくんが悪い)、焦りを抱えつつ会場へ向かいました。会場へついたらもう受付終了ギリギリで「こないかと思った」なんて言われました(この括弧の中にあった文章は削除しました。想像力を働かせて、何があったのか推察してください)。

さてここからがSECCONの話になりますが、

会場に着き、我々のチーム「insecure」に充てがわれた机を見れば、小袋や中袋に入った電子機器(っぽいの)や配線キットが並んでいました。内訳は大体つぎのような感じです。

配線キットやテスタもありました。あとラジオペンチとニッパもありました。めっちゃいいやつを貸してもらったらしいのですが、私は触る機会が無くて残念。

さて、これはこれはとやばそうな感じがしてるし、私どこまで戦えるかなーという不安がいっぱいでしたが、いいところまで喰らいついていく自信はありました。チームメイトが強力だったので。

OPENING

今回のSECCON九州大会では、11チーム33名が参加するとのことでした。一人で参加のチームが2つもありやばかったです。あと、CTF for ビギナーズの方々がHIRUMADEとか言ってさらっと飛び入り参加してたのがやばやばでした。

チーム紹介では「みんなお金自分で払ってきました。学校の広報をして成果を上げて、お金を出してもらえるように頑張りたいです」と言ったらややウケでした。ほかのチームも似たような状況で、あとに続いてウケていました。みんなお金には苦労してるんですね。

さて、大会の形式ですが、Jeopardyというやつでした。全部で5問各100点で、それぞれの問題のFirst Blood には +10 pts されます。5問しか無いと点差がつきにくく、First Bloodを何個とれるか、というのも重要そうだなぁと思っていました。

ここから、WriteUpのようなものを書くつもりですが、詳しいことは、師匠のブログを見るといいかもしれません。しかし、師匠も思ったよりは詳しくかいて無いですね。

コンピュータ技術を学んでいくブログ: SECCON 2016 九州大会のWrite Upと感想

1 なんか水道局員になるやつ

関東は干上がっているので水道局員になりIoTで水の流れを制御するらしいです。問題自体は、「回路も機材もやるから、Raspberry Piでモータ動かせ」というようなものでした。師匠が経験と勘とでぼぎょぎょと組んだ回路とプログラムがいい感じに動いて、First Bloodをもらえた問題でした。詳しいことは師匠が書いてくれるはずです。

2 なんか特命を受けるやつ

酒場のような場所(ギルド?)でマイクロチップに入った特命を受けた私たちは……。

マイクロチップとは、ずばり 24LC256 のことです。これは、「EEPROM」という不揮発性のメモリらしいです。8本足の小さなムカデですが、32KBも容量あるらしいです。

ということで、これは、まず特命が何かを知って(ここで100pt)、その特命を果たす(これがまた100pt)という二段組の問題でした。

この問題のFirst Bloodは1時間しか参加しないと言っていたHIRUMADEで、開始40分とかでどこのチームよりも早くポイントを得ていました。

私達も随分あとになって続くことができました。最初は、師匠が中三の誕生日に得たというPicKit2をつかってデータを吸い出そうとしましたが、これがうまく行かず、いろいろ試行錯誤して、私が持ってきていた、JapaninoというArduino互換機を使いました。

Google先生に尋ねれば、Arduinoで24LC256のデータを吸うような接続の例はたくさんあったので、ちょろっとコードを書いて(これも、ArduinoのエディタもってるテンプレートにEEPROMからデータを吸うものがあり、それを少しいじるだけでした。しかし、実際には、ググったさきで出たコードを使いました)、データを吸いました。

#include <Wire.h>

#define disk1 0x50

void setup()
{
  Serial.begin(9600);
  Wire.begin();
  
   unsigned int address = 0;
  byte b = 0XFF;
  
  int flag = 0;
  while (address < 32 * 1024) {
    b = readEEPROM(disk1, address);
    if (b == 0xFF) {
      flag = 1;
    }
    if (flag != 0) {
      if (b == 0xFF) {
        flag += 1;
        if (flag > 4) {
          break;
        }
      }
      flag = 0;
    }
    Serial.println(b, HEX);
    address++;
  }
}

void loop() {}

byte readEEPROM(int deviceaddress, unsigned int readaddress)
{
  byte rdata = 0xFF;
  Wire.beginTransmission(deviceaddress);
  Wire.send((int)(readaddress >> 8));
  Wire.send((int)(readaddress & 0xFF));
  Wire.endTransmission();
  
  Wire.requestFrom(deviceaddress, 1);
  
  if (Wire.available()) {
    rdata = Wire.receive();
  }
  
  return rdata;
}

256Bytesほどすって file してみると、どうやら tar gz ということがわかり、伸張しようとしましたが、エラーを吐かれました。ちゃんと最後まで取れていなかったようです(というのは後でわかって、しばらくは「こわれた tar.gz からデータを修復する問題に違いない」と思って時間をかけていました)。とはいえ、 xxx.txt というファイルが得られ、最初のフラグ SECCON{assemble this circuit} が得られました。一緒に xxx.jpg というファイルが有るらしいということはわかったのですが、この時点ではデータは得られず、死んでいました。

ずっと後になって、forで256Byte吸っていたのを、while で無限に吸えば 32KB データが出てくることがわかり(このとき、256 Byte しか詰まってないと思っていた。なんか直感的にちっちゃいROMだしそうなのかな、と思っていた)、改めて tar.gz を伸張すると、下のような回路図が xxx.jpg であり、その回路を制御する Raspberry Pi 用のプログラム xxx.py が存在することがわかったのですが、これが終了10分前とかで、回路の作成、Flagの推測が間に合いませんでした。ちなみに、回路は乱数を生成するようなものらしいのですが、詳しくは多分師匠かthrustくんが書いてくれます。

完全に私の落ち度であり、100pt を失ってしまい、チームメイトには申し訳ないです。

3 Bad USB を拾うやつ

なんか秘密結社のうっかりさんが空港でひっかかって、あやしげなチップを押収したので解析せよとのことでした。これが Attiny13a です。これはどのチームも解いていたのですが、理由は簡単で、配布された資料の手順を愚直に実行すれば(Attiny13aをPCに接続しよう! プログラムを書き込もう! どんな動きをするかみてみよう!などが詳しく説明されていました)、FLAGが見える仕組みでした。

Attiny13a用のプログラムを解析する方法もあったようですが、これをやっているチームはいませんでした。もしかしたらこの方法をやってみるかもしれないですし、もう書かないかもしれないです。

とにかく、ちゃんと手順通りにやって 100pt 入れました(ずっと配線を間違えていて、死んでいたことは内緒)。PS/2 ←→ USB をしてくれる機器がBADで、運営のHELP(機器の交換)がなければ死んでいました(そこに原因があることになかなか辿りつけなかったと推測される)。

4 リモコンを妨害する奴

リモコンが効かなくなる現象を解消するという「あやかし退治」のような仕事を受けました。

実際にやることは、Raspberry Piの「赤外線受光モジュール」のようなものを用いて、リモコンを妨害している光を受け取り、それを解析することのようでした。

モジュールが死んでいてたり、回路が難しかったりしましたが、運営のHINTをたくさんうけ、光を解析することには成功していたようです。あとはDecodeだけのようでしたが、どの規格のものかわからず、Decodeできていなかったというのがつらいところです(これは師匠がきっと書いてくれる)。

おわり

というような問題を解いて5時間。スコアボードは以下のようになっていました。

f:id:Furutsuki:20160717210438p:plain

感想

1(First Blood), 2[a], 3番の問題を解き 310 pts だった我々 insecure は、堂々の優勝となりました。まさか優勝できるとは、まるで思っていなかったので、(もう少しで解ける問題があったと悔しい思いをしながらも)とても嬉しかったです。チームメイトのそれぞれが活躍しており、いいバランスだったと思います。あと5分あれば、もう100点取れていたし、さらに10分もあれば全完できていたな……と思いました。そこは今後の課題ですね。

優勝したので、1月末に開催される SECCON Intercollege に今年度も出場できます。今年は、出場が決まった一番最初のチームになりました。やったー。

さらに、副賞として、Raspberry Piでめっちゃ遊べる本(英語。著者のサイン入り)を頂きました。部活で活用できたらいいな……英語読めないな……。

今回の運営について

私は何か言えるほど、偉くないのですが、少しだけ。

CTFやセキュリティ周りでは、いろいろ「調べなくてはならないこと」が競技中に(競技以外の場面でも)たくさんあるはずなので、可能なら、インターネットに繋がる回線を運営側で用意して欲しいです……!

あと何か思っていたけど忘れました。

私自身について

多分、一番うるさい参加者をしていました。みなさんの集中を妨げたかもしれません。ごめんなさい。

偉そうで生意気な野郎だ、と思われた方は多いかと思います。ぜひSECCONの本選で叩き潰してください。

おわったあと

終わった後、チームメイトはすぐに帰りましたが、私はひとり残って、福岡で夕飯をいただきました。というのも昨年のセキュリティ・キャンプでお世話になったゆいきさんという受験生に誘われたのです。ということで、 モツ鍋 を一緒に食べました。あれはすごい美味しいですね。今回は梅ケ枝餅を食べられませんでしたが、モツ鍋を食べることができたので、満足です。

f:id:Furutsuki:20160717181136j:plain

ゆいきさんとはいろいろおしゃべりをしたのですが、基本的に「お受験」の話か「Androidアプリ開発」の話だったような気がします。受験生は大変だなぁ、ということを感じ、この18歳という年齢でSECCONなどに現を抜かしていられる(SECCONを馬鹿にしているわけではなく、受験と比べると否応なくSECCONの比重が下がってしまう受験生の目線に立った発言ですので悪しからず)、また、今回のチームメイトのような人間に出会うことができる、高専生という立場に感謝したり、あるいは、忙しいながらに、すごいツイッターアプリである Twiego を作り続けていたり、他にも意欲的に活動しているゆいきさんはすごいなぁ、などを思っていました。

モツ鍋は美味しかったしお話は楽しかったし最高でした。ゆいきさんありがとうございます。

でも、感じたこととして、私声ちっちゃい……だめだめじゃねぇか。

かえりみち

ブログを書きました(この記事)。なかなかお家にたどり着かず疲れました。

記事を書いて

思ったより自分も活躍できて(それでもチーム内貢献度は最低と自負してますが、例えば黒糖飴を配るなどして活躍しました)、とても良かったと思います。私はハードウェアがかかわるとまるでだめと言い続けていましたが、今回はそこそこやれて、かつとても楽しかったのでこれからは恐れずにハードウェアにももっと関わっていけたらと思います。

参加された皆様、運営の方々、大変お疲れ様でした。私は、とても良い経験をすることができ、大変満足しております。

P.S. 弊高専の方がもしこの記事を読まれたら

そんなことはないと思いますが、弊高専の運営に関わる方で、この記事を読まれた方、私は、弊高専の学生としてめっちゃ頑張ったし、高専側で旅費のいくらかを負担してくれてもいいと思いました。思っただけでした。

追記

↑なことを書いたのですが、私は別にどこかに「予算出してくれませんか?」と交渉をして断られてから書いたりしているわけではないです。だから、この記事の記述だけで、弊高専はクソ、とは言えません。しかし、去年は、頑張る学生を応援する「学生チャレンジプロジェクト」なるものがあったのに、今年はなくなっていて(「学生チャレンジプロジェクト」自体は存在していますが、内容は様変わりしていて、我々の活動は認められないようです)、文句の一つも言いたくなったことは確かです。