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

ただいまつくばです。帰宅しました。

8/12 - 8/16 間でセキュリティ・キャンプに行って参りました。
クラスはWebセキュリティクラスで、チームは「セキュアぴょんぴょん」でした。
ここに参加記を示します。なお事前課題や応募用紙については面倒なのでカット。
もし消してほしいなどの要望があれば、リプライなど飛ばしてください。

※オフレコかどうかごっちゃになったので概要しか触れませんご了承ください。

【Day1】

12時集合割とぎりぎり。残り3人って感じで会場ゴールしました。


会場ついてからは名刺交換フェイズ。
既視感のある人たちに名刺配った後、突っ立って交換してくれる人待ちしていました。
Yes 人見知り. Not コミュ障.
ちなみに名刺は緑色のかっちょいい名刺だったのでした。TwitterIDとか記載してなかったので一致シなかった人はここで認知しちゃってください(?)

最初は全体で「セキュリティとはなんぞや」というハナシ。
正直あまり記憶に残っていませんが、"技術の悪用ダメ。絶対" は心得ています。

続いて特別講義で、筑波大の大先輩かつソフトイーサ社会長である登 大遊さんによる色々なハッキングの話。
改めて聞いてほんとぶっ飛んでるなと思いましたw
(講義後から大学名名乗ると相手の反応が変わったのは秘密です)

特別講義もう一つ。警察大学校 サイバーセキュリティ研究・研修センターの萬谷 暢崇さんによる講義でした。
この講義はたしか結構お外に出しちゃいけない話が多かったの省略。
ただ、めずらしいお話が聞けて良かったです(小並感)。

夕食後、最後に専門講義。概要の説明くらいでしたが、ここで今回講義で大活躍(したようなしなかったような)Flameを貸していただきました。
作ってきたアプリ突っ込んだら完全にお通夜状態だったのはここだけの秘密です。

講義終わって、最高に疲れた状態で睡眠に至る。

【Day2】

夕食後までは延々と専門講義です。これが楽しい。

午前中はHTML5で増加した脅威、SOP、CORS、スマホ通信の監視、クライアント側のセキュリティについて重点的にやると説明を受けたあと、超特急で基本的な講義が行われました(事前学習頑張って良かった・・・)。
個人的には国分さんと上野さんの講義に結構興味&関心持てました。スマホ監視( 'ω' )! 体系的なセキュリティに対するお話( 'ω' )!
スマホ監視については、以前挑戦したことがあって挫けたので、またやりたいですね。

午後はMozilla Japanの浅井さんにFirefox関係のお話をいただきました。
asm.js早いなーって思ったんですがあのい記事2013年のものなんですね。現状も調べてみたいです。
浅井さんのお話を聞いているともう全部Webでいいんじゃないかとか思ったりしました。
まぁ、Webだけじゃできないこともまだまだあるのでそうはいかないんでしょうけれど・・・。
その後は西村さんによるFirefoxOSに関する総計14時間の講義。
資料まで用意してくださっていてメモなどの際は助かりました。

夕食後はBoFとかチューターの方による成果発表。
海外のセキュリティ事情とか聞けたほか、Bitcoinについても少し触れました。

【Day3】

午前中に企業訪問に行きました。
場所はNTTさんです。
主にセキュリティに対する技術とか、具体的な対策案やアルゴリズムについてのお話でした。
あとはNTT-CERTとかCSIRTについてのお話も。全部メモったので、興味ある分野についてはあとで調べてみたいと思います( 'ω' )!


午後は専門講義!この日は就寝時間までミッチリです。
何個か講義と説明を受けた後、はせがわさんと西村さんの作成した脆弱性たっぷりのFirefoxOS用お手製SNSに対して脆弱性を見つける演習が始まりました。

始まってすぐは

('ω’)。○(???????????????????????)

って感じで、何から手をつければ良いかわからなかったんですが、グループの方に「こんなことできる」など聞いた後はゴリゴリ脆弱性攻められたと思います。なおFlameはほとんど使ってn(ここでにしむねあさんによる制裁)

手を動かすってこういうこと何だなぁと実感です。

【Day4】

専門最後の日。寂しかったですね。もっとやらせろと。
各班で脆弱性について発表して、最後にKinugawaさんの脆弱性報告についてのお話や、講師の方々によるセッションなど。午前中のみでしたが、かなり充実していたのを覚えています。

発表準備でこんなことがあったけどどうにかなりました・・・。


午後はいよいよCTF。「セキュアぴょんぴょん」は得点2403点で4位。同班のネットワーク・セキュリティクラスの方が個人で2位を受賞していました。すごい。
個人的にはWeb問題を何問か解いて、Flame持って会場走り回ってただけなのでそんなに貢献できなかったです・・・。

終わった後はめっちゃ疲れて寝落ちしてました。めっちゃ寝れた。

【Day5】

寝坊からの朝食ぶっち。コンビニで買いだめしておいたパンがあったので一命を取り留める。

グループワークの発表がありました。テーマは結構適当に決まってしまった「家具インジェクション」で、やべぇよやべぇよ言いながら詰めました。ファービーに感謝。

残りは各クラスによる発表やら閉会式やら授賞式。
「あーもー終わりかー」と、ちょっと切ない感じがあったような無いような。

最後に協賛企業や講師の方から本などを頂きました。後の写真に載ってます。

上野さんからサイン貰えたのはかなり嬉しかったです。ほくほく。

【Gallery】

会場に突如現れたXSS忍者に集まる人だかり
f:id:everysick:20140816235737j:plain

zoi&進捗人間
f:id:everysick:20140816235833j:plain

協賛企業や講師やキャンプ運営の方々にいただいた粗品の数々
ありがとうございました。おかげで部屋の床が埋められました。
f:id:everysick:20140816210604j:plain

【総括・感想】

"挫折した"とか"自信になった"とか色々聞きますが、自分にとっては良いスタートの準備ができたのではないかと考えています。というのも最後の挨拶でも言いましたが、守る側ではなく攻める側の視点にたってクライアントサイドのセキュリティについて対策をすることは、今までまったくと言っていいほど考えていませんでした。そのため変な脆弱性を埋め込んだり、エスケープをまったく行っていなかったりしていたので、今考えると鳥肌がたちますね。ジョワジョワ。話が逸れましたね、ようはそういう違った観点から見るセキュリティ機構に関して基本的な知識と応用した対策などを"知る"いい機会になったわけです。"知る"ですから、"会得"したわけではありませんし時間が経てば忘れてしまいます。そういう意味では閉会式で国分さんがおっしゃていたまだ消化(昇華)し切れてないというのはもっともだと思います。テンションの高いうちに、"会得"できるよう、一所懸命手を動かしたいと思います。

セキュリティ・キャンプ関係者や講師陣の皆さん、5日間本当にありがとうございました。

目指せチューター!目指せ講師!お疲れ様でした!!

ICPC2014 Domestic 参加記

5月某日

とか嘆いていたら

やったね!


というわけで7/11 16:30-19:30に開催されたICPC国内予選に参加してきました。

チームメンバーは
@negi_magnet さん(高専編入, B3)
@shimauma_zzz さん(高専編入, B3)
と私。

まとめ

Aを自分が通す。
このとき"各商品について消費税を計算する"ってのを見逃してて答えがズレたときは焦った

Bを@negi_magnetさんが通す。
途中バグあったので、Dの実装と平行してやる。

Cを@shimauma_zzzさんが「バグがああ」と叫んでました。

Dを自分が通す。
全列挙だったので、時間どれくらいかかるか不安でしたが案外すぐでてきた。

Cの解法を見直し、@negi_magnetさんのアイデアでにぶたんによる実装へ変更することに。
@shimauma_zzzさんが実装している間、残った二人でE,Fの解法模索。

Eの解法を思いついた。
Cのバグが取れなかったので、Eの実装と平行して行うことに。

Eもバグる(迫真)
終わってから気づいたんですが、Eはそもそも解法合ってたのかわからないです。要検証

残り30分くらいになって、 CとEを入れ替えながらデバッグ

しかし、結局デバッグは終わらず予選終了。

結果は3完50位
○○-○---

反省

AとDもうすこし早解きできればなと思いました。
問題の誤読とか、実装の曖昧さとかがあったので結構時間がかかってしまいました。

Cについては初見で「ウッ幾何だ」ってなってしまったの良くなかった。
解法をあんまり理解できてなかったので、デバッグに協力し切れなかった。

Eは、アレでよかったのかなぁ・・・。

来年への課題(実装力と思考力)が大量にできたので、頑張ろう。

University Tsukuba

今年度うちから出たチーム(5チーム)は全て50位以上に入っていました(祝)
最下位はうちのチームでしたが、TOPは3位に入り、もう1チームが国内突破していました!
おめでた。

来年へ向けて

やっぱり年齢差があるとつらいですね・・・。
固定した面々でチームを組んで、毎年ICPCに挑みたいと思っていましたが、どうも辛そうです。
今年チームを一緒させてもらった先輩方はB3で、短くてあと2年で卒業ですからね。

今からチーム固定は厳しいので、来年くらいまではサークルの先輩方にお世話になるかもしれません。
いつかメンバーを決めたいなぁ・・・。

駆け出しでも良いので、チーム組みたい!って人いたら声かけてください:;(∩´﹏`∩);:

あとは精進をします。来年までの目標は

・今まで解いた問題にプラスしてあと1000問以上解く

Topcoderの色を黄色く安定させる(現状Div2)

頑張るぞー!!!!

SRM 626 div2

250

class SumOfPower {
public:

	int findSum( vector <int> array ) {
		vi v(array);

		int sum = 0;
		for(int i=1;i<=v.size();i++){
			for(int k=0;k<v.size();k++){
				if(k+i > v.size())continue;
				for(int j=k;j<k+i;j++){
					sum += v[j];
				}
			}
		}

		DUMP(sum);
		return sum;
	}
};

500

class FixedDiceGameDiv2 {
public:
	double getExpectation( int a, int b ) {
		int sums = 0;
		for(int i=1;i<=a;i++){
			for(int j=1;j<=b;j++){
				if(i>j)sums++;
				else break;
			}
		}

		double ret = 0;
		for(int i=1;i<=a;i++){
			int cnt = 0;
			for(int j=1;j<=b;j++){
				if(i>j)cnt++;
				else break;
			}
			ret += (double)i * ((double)cnt/(double)sums);
		}
		return ret;
	}
};

1000

long long dp[1002][50];
int d[51][51];
class NegativeGraphDiv2 {
public:
  long long findMin( int N, vector <int> s, vector <int> t, vector <int> weight, int charges ) {

    for(int i=0;i<1000;i++){
      for(int j=0;j<50;j++){
	dp[i][j] = INF;
      }
    }
    for(int i=0;i<50;i++){
      d[i][i] = 0;
      for(int j=0;j<50;j++){
	if(i!=j)d[i][j] = INF;
      }
    }
    for(int i=0;i<s.size();i++){
      s[i]--;t[i]--;
      if(s[i]!=t[i])d[s[i]][t[i]] = weight[i];
    }
    for(int k=0;k<50;k++){
      for(int i=0;i<50;i++){
	for(int j=0;j<50;j++){
	  d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
	}
      }
    }
    for(int i=0;i<N;i++)dp[0][i] = d[0][i];
    for(int k=1;k<=charges;k++){
      for(int i=0;i<s.size();i++){
	dp[k][t[i]] = min(dp[k][t[i]], dp[k-1][s[i]] - weight[i]);
      }
    }
    long long ans = INF;
    for(int i=0;i<=charges;i++)ans = min(ans, dp[i][N-1]);
    return ans;
  }
};

Competition

easy若干読めなかった。
midは期待値求めるの時間かかった。
結果:○○-

Practice

hardを解いた。

解法

  • easy

特に必要無いよね

  • mid

これも・・・必要ないよね。

  • hard

Warshall-Floydでchargesが0の場合を求めてから
chargesを使った場合に関してDP。
Warshall-Floydを使わない場合はDPにNのループが付随するらしい。
まぁでも、これのほうが早いと思います。

hard、div1だと行列累乗じゃないと解けないって聞いたけど、まださっぱりわからん。