Security に関する投稿を表示しています

『SECCON 2014 オンライン予選(日本語)』に参加してました

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

どうも、ごみばこです。
いろいろあって更新してなかったり、いろんなダメージを追ったりしていますが
わたしはげんきです\('ω')/


というわけで久々のCTFでした。
今回はぼっちーむではなく********で参加です。

2000点で10位だそうです。
http://score.quals.seccon.jp/ranking/

おうち参加ではなくSFCまで行ってエナドリ飲みながらやってました。
複数人でわいわいやると楽しい!サイコー!

ぼっちのときと異なり、よくわからんところは任せよー、人数で押せるなーいいやーとなってしまい、あまり成果でなかったなーと思いました。ひとりのほうが、バイナリもやろうかな、とか、フォレンジックやるか、と、あれこれしようと思えるので、鍛えるならそっちのほうがいいかもしれないですねーって。

writeupはとくにないのでかかないです。
Web300は頑張った(意味深)ので、取れましたけど、周りの人をみるとスッキリ解いてるので、クソ。
http://nash.hatenablog.com/entry/2014/07/19/213114

他はさっぱりでした。
発想力が完全にどこかへ飛び立っていました。

次回もがんばりましょう。

Mini #seccamp in Yokohama で喋ってたことへの補足とか

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

○全体的

・高橋メソッド
もどきですが。。
文字でっかく1枚に少なく、にしたらすごいサクサクつくれたので、今後も試してみたい。
高橋メソッドについて

・ネタ画像
知ってるネタはググって入れたけど、どこから探すんだろう。
Tumblerをめぐりとかで出てきそう。

・フォント
メインでつかってたフォントは「ゆたぽん(コーディング)
ゆるふわ感がありつつも、見やすさが程よくお気に入り。

一部コード関係のフォントは「Migu 1M
手元のエディタなんかは大体このフォントにしているくらいのお気に入り。


○1回目

・自己紹介
夏キャンプのときは「ごみばこの人」「ごみばこいん」とかで参加者に知られてました。
卒論の影響もあって、JSばかりですが、お仕事はサーバ側(PHP/Java)もやります(やってます)
CTFとか書いてありますが、ガチじゃないです。
ksnctf とか akictf とか Flaggers とか

この前のCSAW CTFに参加したものの、まったく旗取れず知識・技術不足、カンの弱さを実感。
SECCONは名古屋追加募集があるとかでいけるのかしら...(枠じゃなくて、僕の都合が大丈夫かーとか)

・DOM Based XSS
IPAのレポートをみるとよいかも。
IPAテクニカルウォッチ 『DOM Based XSS』に関するレポート

急増してるとあるものの、脆弱性の報告や問題視は昔からある。
jQueryマシマシや、スマホなど、jsの活躍場所や表現力、ライブラリなどががグワッと伸びた結果、
こうなってるとおもう。

HTMLエスケープを施す、が対策になるが、DOMから拾うのが安心安全。
Twitter / bulkneets: そもそも出力時に自動エスケープすべきだしその前提にたったとき ...
Twitter / ockeghem: プログラムとコードの分離という観点、およびCSPの対応という ...

じゃあどうやるの?

function escape(str){
    var e = document.createElement('div');
    e.appendChild(document.createTextNode(str));
    return e.innerHTML;  
}

つぶやくボタンを例にだしたのは、例示でよく見かけたため。
ちょっと前にも、わりと大手サイトのつぶやくエリアが無法地帯だったとの話も聞きます。

・コミットログが2つしかない件
少なくとも、自分でだいたいいいかな、まで書いたところ、コードの見やすさが最高にクソかったので、
書き直しとか設計見なおしも含めてaltJSに移行しているリポジトリです。
元のリポジトリは50くらいでした。


○2回目

にゃんぱすー( '△')/

・経緯
1日目終わった後にまっちゃさんが「見てなかったのでもう一回ね」ということで。

・ネタ
面白さ的に以前参加した残パン会でやったやつがいけるな、と。
Befunge - Wikipedia
残パン会に参加してきました。
残パン会#3にいきました
https://github.com/sters/zanpan

・Befungeについて要約
二次元的にコードを書く
プログラムカウンタ?ポインタ?が縦横に動くことができる
自己改変機能がある
Befunge-93は広さの制限がありチューリング完全ではない
Befunge-98は任意次元の拡張とかよくわからない定義がある(理解してないし資料を読んでもいない)

・デモについて
jsで書いたBefungeインタプリタ。
ブレークポイントが貼れてステップ実行できたりしてどうのこうの。
後日、丸々書き直しをしている。

チャットは残パン会でつくったもの。あの時はちゃんと動いてたはずなんだが....

サーバ側はPHP/MySQLで飛んできたデータをしまうか、Befungeで扱いやすいフォーマットで返すだけ。
認証機構なんてなんにもない。

クライアント側をフルBefungeで作ったという話。
ただし、通信周りを一から書くのは謎いので、命令を追加している。
入室、発言、取得。

・しゃべりたかったこと
いろんな時代を経て進化してきたプログラミング言語もいいですが、esolangという世界もあります。
いろいろ楽しい、面白いので覗いてみましょう

はろーわーるどかいたよー^^って言って縦横に記号並んでたら面白いでしょ?

複雑なesolangだとそもそも実装が少なかったりするので、そういったことにチャレンジするのも、ね。


というあたりで。

Mini #seccamp in Yokohama

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

Mini #seccamp in Yokohama

○前置き

「セキュリティ・キャンプについて」
http://www.security-camp.org/outline/#index07

日曜日・月曜日と行われたセキュリティミニキャンプへと参加してきました。
今年の夏にキャンプに参加してたので、参加者側ではなくチュータとして参加しました。

本来チュータ枠はありませんでしたが、川合先生が円滑に進めたいとのことで、
コミュニティで募集をしてました。

内容は公式のpdfを見てもらえればわかると思いますが、
実習がOSとか組み込みな、低いレイヤなので、
普段はWebに住んでるぼくからすると、世界が違うのでちゃんとチュータできるかどうか...

という点も含めて、アセンブラもちらほらやってみたかったのでチュータに名乗りあげました。

/* 逆に誰も手を挙げなかったのは一体...? */

○講義内容

『プログラミング言語の歴史』 西尾講師(60分)
『セキュリティ・キャンプとCTF』 園田講師、竹迫講師(60分)
『事例に学ぶ危険なシステム設計』 園田講師(60分)
『Arduinoでの組込みOS自作体験』 坂井講師(60分)
----------Day1↑----------↓Day2-----------
『超簡易PC用OS自作体験』 川合講師(160分)
『新しい暗号技術』 光成講師(110分)

ということで、
キャンプ勢のなかでもこのあたりをピンポイントに興味ある人、
横浜開催に来れる人、
になるとまったくいなかったてオチでしょうか。

結果として、タイトルのまんまで、超専門的でまったくついていけねぇなんてことはなく、
ぼくでも大丈夫だったので、逆にそれがメインの人からすれば真新しいことはないのかなあと。
むしろちょっと興味あるけど機会がなあ、みたいな人推奨みたいな感じです。

講義の話はタイトル通りなので、実習の部分を主に。

>> プログラミング言語~はパンチカードとか、かつてコンピュータができたころの話とかとか。
>> キャンプはそのままキャンプの話
>> 事例に学ぶ~はWinnyの話でした。Winnyにはびこるウィルスを殺すには、みたいな。
>> 暗号技術はすごい簡単に説明していたと思うのですが、やっぱり??となる部分が...数学むずかしい...
>>>> スライドが公開されています => http://www.slideshare.net/herumi/ss-27882746
>>>> 数学ガール読んでたので、ある程度はついていけました。数学ガール読みましょう((

○『Arduinoでの組込みOS自作体験』

Arudinoとありますが、実際はシミュレータを使ってそれっぽいことをやる感じでした。

C言語でかかれたやつをいじくりまわして。
make でコンパイルして。
avr-elf-gdb でシミュレータを走らせて。
別のスクリーンから cuコマンドを使用して、そのデバイスに対してシリアル通信をして。
というような感じだったとおもいます!

若干プログラム周りのやることが追加されてますが、ほぼこのページ通りな気がします。
http://kozos.jp/vmimage/cui.html

・チュータポイント
うまくうごかないーとか、そもそもVM動かないんですけどというあたりから見て、
一緒に悩みながら再起動したり試したりでなんとか。。

あとで聞いた話、シミュレータも完璧ではないので、
タイミングによってはうまく引っかからなくて結果がでないこともあるそうです。

・反省点
"事前にインストールしておくこと.txt"のようなものを受け取っていたので、
そこから自分で発掘して下調べをしておくべきだった。
もしくは坂井先生に個別連絡をとって、下準備を聞いておくべきだった。

screenコマンドを全くしらないのはまずい感あるので、多少なりとも勉強したい。
tmuxとかでも。

歩きまわって各自の様子を見るべきだった。
>> なかなか聞きづらい、手を挙げづらい、という思いがやっぱりあると思う。
>> なので、様子を見て、詰まってるっぽいならこっちから聞いてみる。

・良かった点
NOP

○『超簡易PC用OS自作体験』

はじめはアセンブラを書いて、動いたやったー。
途中からセクタを読み込めるようにして、
あとはC言語でそれっぽい画面をつくる、キー入力をする、という具合です。

「30日でできる! OS自作入門」をさらに説明するのに難しそうな箇所をバンバン削って
「2時間でできる!超簡易PC用OS自作体験」とのことでした。

INT 0x10 とか INT 0x13 とか、なんやねん、て質問があったんですけど、他のレジスタとの兼ね合いで
やる内容が決まってるんですって返ししかできなかったので、こちらをみてください。
http://en.wikipedia.org/wiki/INT_10H http://en.wikipedia.org/wiki/INT_13H

・チュータポイント

資料をまるまるもらっていたので、事前に全部通してやりました。
>> ひたすら紙->目->手->PCの作業

資料にはコードだけじゃなくて、それが何を意味しているかの解説込だったので、
理解の助けになっていたとおもいます。

実施中に何人かにもいったのですけど、
フォント増やすのはかなり地道な作業になるから、
そのあたりを構造体とかポインタとかカッチョいい感じに使って、
リファクタリングとかやってみたらいいんじゃないかなー、なんて話を。
実際にしている人はいなかったっぽいですけども..w

あとは、forまわして動きをつけたりしてる人もいましたね。
他にも、sin関数移してきてゲームっぽいものを作ろうとしてたり、
Brainf*ck専用OS(?)を作ろうとしている人なんかも。
後者についてはこわすぎるので、しかるべき場所にいくべきです((

・反省点
ぼくの事前学習がちょっと不足してた。
エラー対応のパターンとか。

Terapadの行表示をさせるのを忘れていた。

・良かった点
初日からの改善で、演習始まったら見て回ってた。
抜群の目grep力(皆無)でエラーっぽいのを見つけて声をかけるようにした。

エラーが出る方がC言語側に集中していたので、対応しやすかった。
>> コンパイルエラー出たら紙とにらめっこするよりも、エラー文を読んだほうが色々よさそうです。

○その他

最後の人生相談の場にいなくてごめんなさい。
いつでもリプライでもDMでも顔本でもなんでも聞いてくれれば反応します。
もちろん参加者じゃなくても、ちょっとキャンプ興味あるんだよな、
参加した人の話聞きてーなー俺もいけるんかなーくらいの軽いノリでも大歓迎です。

こんなぼくの話でよければいくらでもします。

ぼくのかいた応募用紙についてもちらっと見ると参考になりそーなことが書いてあるかもしれないです。
セキュリティキャンプ2013(web)に参加します+応募用紙のあれ

キャンプ中に言うのを忘れてたことがひとつ。
いろんな知識とか技術とかを受け取ったと思うんですけど、
なにかしらの形でそれらを出力していけるといいですよね。

voidじゃなくて、せめてもbool。うんともすんとも言わねえ...というのはいささか勿体無い気も。

ぼくもここは夏キャンプ分の出力できてないので、まだまだこれからですねって話ですが..w

それともう一つ。チャンスは掴んでいけ、というところです。
最初にも書いたのですが、コミュニティのほうで募集をかけており、
1週間たっても誰も名乗り出ていなかったのでやってみるかーという思いで手を上げました。
結果、チュータのお仕事がちゃんとこなせていたかなんてわかりません
(=講師陣・参加者から見てどうだったか...)
が、面白い話がたくさん聞けましたし、もっとがんばらなくちゃなーって気になりました。

各地のミニキャンプはキャンプ予選みたな形だと思うのですが、
ここにチュータ参加できたのは、ある種のチュータ予選みたいな話でもあってよかったとおもいます。
いきなりLTやって!というのもいい経験ですし、LTとはいえスライドづくりや説明の甘さも思い知りました。

>> 個人的には「にゃんぱすー [反応をみる] はい、ということで2回めのLTをー...」はよかった(やりきった感

LTで喋ったことの補足記事もかきます。
とくに二回目の方はあたふたしすぎてまったくなにがなんだかわからなかったので本当に申し訳なかったです。

○さいごに

@参加者のみなさんへ
ミニキャンプはどうでしたか。
チュータ力不足につきサポートしきれない点もありましたが、
みなさんなんとかやりきったのかなーと勝手に思っています。

できる人できない人が混在していたので、1か0かでさくっと分類してぼくからのメッセージを書きますね。
脳内のメモリは限られてますし、読むだけ読んで、そのまま/dev/nullへでも送ってください。

・簡単だと思った人
もっと勉強して、もっとプログラムを書いて、もっとパケットを読んで、来夏のキャンプに備えましょう。

若干の上下幅はあるものの、同年代のすごい人達がたくさん来ます。
普段できない話や、あたらしい視点、ひらめき、人脈、etc...

キャンプで得られるものは講師陣からの卓越した技術や知識だけではないとおもいます。
過去のキャンプ生...できれば最近なほうがいいですねw、を見るとその様子が見て取れるのではないでしょうか。

そんなセキュリティキャンプ、どうですか。

・難しいと思った人

やったことはすべて与えられています。ゆっくりと復習してみましょう。
そのときに、なにがわからないか、1つずつ調べていきましょう。
必要であればお手伝いします。

そして、やっぱりキャンプなんかむりだろー、という前にまずは手を動かしてみませんか?

とはいえ新しい何かを作るのはアイデアないしなあ、というのであれば、とても素晴らしいアイテムをもっていますよね。

坂井先生のArduinoシミュレータ、川合先生の自作OS。
このプログラムをいじくり倒して、あれこれしてみてはどうでしょうか?

@講師陣、運営なみなさんへ

いろいろと至らぬ点があったかと思いますが、いずれも言い訳をして捨てることはしません。
粛々と受け止め、改善策を考え、あれこれ試して、次の機会に備えます。

ぼくの知らない世界がたくさん見えて、チュータとはいえ参加者側の気分でした。
アセンブラやOSなど、興味がでてきたので、時間をみてちょっとずつ手を出してみようとおもいます。

キャンプ以外にも、いろいろなところで今後もお世話になるかと思います。
そのときはまた、よろしくお願いします。


おまけ。

短歌を読んでみたんですが、思った以上に難しくて白目。
味わい深さどころか、57577の形になっただけの要修行なレベル。ここからがんばります。
DOSです。

C:\DOCUME~1\user\デスク~1>fib.com
-d
2CE5:0100  B3 00 BF 01 00 B4 4C B2-31 B1 06 50 80 EC 4A CD   ......L.1..P..J.
2CE5:0110  21 00 DA 57 89 DF 5B 90-01 FB E2 F3 58 EB F0 00   !..W..[.....X...
2CE5:0120  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
2CE5:0130  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
2CE5:0140  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
2CE5:0150  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
2CE5:0160  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
2CE5:0170  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
-g
112358プログラムは正常に終了しました.
-q

C:\DOCUME~1\user\デスク~1>
B3 00 BF 01 00
B4 4C B2 31 B1 06 50
80 EC 4A CD 21
00 DA 57 89 DF 5B 90
01 FB E2 F3 58 EB F0
あ、あと、ぼくのスライド欲しい人いればリプライとかで直接いってください。
公開するのはあまり乗り気ではない模様...

#seccamp

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

以前の記事 で通知したように、セキュリティキャンプに参加していました。

Webクラスでした。
とてもすばらしい。

CTFはネットワークの方がめっちゃがんばってくれたおかげで3位でした。
ぼくはWebで200/300/100/100くらいと、他のとこで100/100/100くらいとったような気がしました。
400と500ぜんぜんわからんくてしぬ。SQL周りがさっぱりすぎてしぬ。

いただいたものとか、Javascript本たくさんでめっちゃよろこんでます。
アイエエエエ!?ニンジャ!?ナンデニンジャ!?!?っていいながらジャバスクリプトニンジャをいただきました。
あとミクさんのポスターいいっすね^~
それとボウズマンウォーターですね。アパ水には勝てないですけど、なかなか。

と、いうところで「これから」ですね。
いろいろ作ったり考えたりしてアウトプットしていきたいです。

まずは、めっちゃ直近(むしろなう)の私立プログラミングキャンプでちょっと作ってみたいものがあるので、
そこがんばりまーす。

某社を退職していました

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

(7月中旬くらいに退職してました。)
夏休みインターンからそのままアルバイトとして、11ヶ月ほどお世話になっていました。

アプリの検証作業を行ったり
Ruby on Railsでほげほげしたり
CentOSセットアップしたり
Gitlab立てたり
データセンターへ行ってサーバーの片付けをお手伝いしたり
Ruby on Railsでほげほげしたり
といったことをしていました。
他にもPythonやC#をちょこっと、Flashもすこしやりました。
いづれにしても、やったことのないことばかり、しらないことばかりで、とてもおもしろかったです。
そこに居るだけでも勉強になることが多かったと思います。

Ruby on Railsばかりでしたが、そこから学んだことはあまりアウトプットできていないですね。
Rails要素はありませんが、RubyはARCやちょっとしたスクリプトなどで使っています。
Rails要素もこれからやっていけるとよいですね。

心残りといえば、最後に関わったモノがどうなるのか、というところです。
同じくアルバイトの方に半ば押し付けるような形になってしまい、申し訳ないと思います。
勝手な事をいっていることは承知の上ですが、試みは面白いのでぜひとも形にしていただきたいと思います。

ということで、関わったみなさま、ありがとうございました。


さて、次のお仕事は決まっています。
都心部にある某社に内定を頂いているので、そこでお世話になります。
よろしくお願いします。

大学での卒研・論文が疎かにならない程度にがんばります。
なお卒研の方では、Webセキュリティについてほげほげしています。
完成度はまだまだですが、がんばって上げていきます。


(追)
お引越しを考えているので、仕事場所からあまり遠くなく、良さそうな場所あったら教えて下さい。

1SPREAD情報セキュリティ勉強会に参加してきました

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

7/13の話で、すごい今更感。
Togetter: http://togetter.com/li/533192

「パスワードの定期変更という不自然なルール 2013」
講師は@ntsujiさんでした。

4月以降、Webサービスへの不正ログインが相次いでいる
大手サイトも!

攻撃
* ブルートフォース攻撃
* ディクショナリ攻撃
* リバースブルートフォース攻撃
* リスト型攻撃
といった攻撃種類があり、誰でも簡単にできるツールがある。

対策
* 強固なパスワードの設定

* 定期的な変更・・・はどうなのか?
=> 突破の可能性を低減
  => ??????
  => そもそも、アカウントロックやパスワードに桁数や文字種の強制をするなどしたほうがいいのでは

=> 突破後の被害拡大の防止
  => 被害を最小限に抑えるには「早期発見」「復旧」の仕組み
  => 長期的な視点だと保護したと言えるのかもしれない

=> 定期変更での効果が薄いように見えるが、ここに労力を割いていいのか。
  => パスワードの質がおちる
  => すべての人に強制するのは無理
  => 似たようなパスワードの使い回し

使い回し
* 複数のサービスで芋づる式に突破されてしまう
* サービスごとに個別に設定する
* 覚えきれない...
  => パスワード管理ソフト
    => 1Password
    => RoboForm
    => KeyPass
    => LastPass

  => 手帳などにメモ
    => 他人に見られなければよい

被害がでたら
* 被害者意識ではなく当事者意識を。
* 車とドライバーの関係
=> メーカは頑張ってエアバックだったり自動ブレーキがついてるけど、事故は起きる。

まとめ
* 定期変更は効果が薄い
* 定期変更は弊害を生む
* 使いまわしは本当に危ない
* サービス提供側だけの問題ではない

* セキュリティはみんなのもの、みんなで作っていきましょう


普段パスワードについてしっかり考えることもなかったので、とてもいい機会でした。
講師のスライドだけでなく、参加者同士のディスカッションタイムがあり、他の参加者がどんなパスワードを使っているのか、どのように運用をしているのか聞いたり、じゃあ実際どのように運用していくのが良いのか、いいパスワードとは何か、といったことをお話しました。

パスワード管理ソフトによっては、メモだったり、パスワードだけでなくそういう類のものを保存したりできるそうです。いいですね、導入しましょう。
(くろーむのパスワード保存に全部つっこんでいた)

セキュリティキャンプ2013(web)に参加します応募用紙のあれ

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

セキュリティキャンプ2013 Webセキュリティクラスに参加することになりました。
講師、チューター、参加者の皆様よろしくお願いします!
 
残念ながら落ちてしまった方々、これを機に勉強したり何か作ったりしてみてはどうでしょう。
ぼくは昨年、「気付いたら応募締め切りが終わっていた組(?)」の参加者で、来年絶対いくわ!といった感じで勉強したりコード書いたり遊んだりしてました。あとは「そこで学んで、その知識をどうするの?」というところだと思います

もしこれを見ている人がチャレンジしたいのであれば、こういった講師のメッセージも参考になるかとおもいます。

・ネットワークセキュリティクラスの審査後講評

・Webセキュリティクラス、ソフトウェアセキュリティクラスの審査後講評

・セキュアなシステムを作ろうクラスの審査後講評

・審査後、全体としての講評

これらをざっくりとまとめると。
・ アツい
・ そのクラスを選んだ理由、そこで学んだことをどうしたいか
・ 最低限、講義や演習についていける技術力がある
・ 問題についてあれこれ調べて、自分なりの答えを出している
・ 実際に試してみる

といった辺りが、大きな基準になっているのだと思います。

あと、セキュリティキャンプに参加することが目標となってしまうのはまちがいだと思います。
そこで身を持って体験できる貴重なもの、セキュリティだけでなく他の参加者からの情報や意識、そういったものをどうアウトプットしていくか、何を成すのか、そこが目標であり、そのためにセキュリティキャンプに参加するんだ、という思いが必要だと思います。

これに対して、意識たけぇw、と煽って終了なのであれば、まあ、そういうことなんでしょう。

 
来年もきっと開催されると思うので、そこに向けて、その先へ向けて、なにか出来ることをやっておくといいと思います。
 
そして、ぼくの応募用紙をここに貼っつけてみます(いいのかな...だめならごめんなさい...
みなさんの参考になれば、もしくはツッコミなどが飛んでくれるといいですね。
 

《~》と囲ったものは実際の応募用紙には記述していない部分です。
諸事情でさっくりとしか公開できないようなものとかですね。
 


 
「セキュリティ・キャンプ中央大会2013」
Web・セキュリティ・クラス 応募用紙
 
☆ 記述式質問
1. このクラスを希望した自分なりの理由を教えてください。
また、この講義で学んだことを何に役立てたいかを教えてください。(選考上もっとも重視します)

 
《めっちゃ要約で、》
《「この貴重な機会に本場の人からたくさん学んで研究や後輩への指導へ生かします」》
《という400文字くらいの内容》

《出身高校に情報の学科があるので、そこで講義とか何かちょっと、やってみたいかなーなどと》
 
 
2. Webに関連したプログラミング歴を教えて下さい。また、今までに作ったWebに
関連したプログラムがあればどのようなものを作ったのかを、あるいは将来どんな
システムを作ろうと思っているのか、差し障りのない範囲で具体的に教えてください。

・Webに関連したプログラミング歴
クライアントサイド(HTML/CSS/JS, etc) : 4~5年
サーバサイド(PHP/Ruby/Node.js, MySQL): 3年

《美大生的なうぇぶさいとつくった》

・UnityとWebSocket(socket.io)の実験
Unityのネットワーク機能ではなく、ブラウザを経由してsocket.ioを使い同期を取ってみるもの。
《闇鍋#2 旧ブログ参照-> http://stersblog.blog15.fc2.com/blog-entry-427.html》

《インターンとかバイトでつくった》

・作りたいもの
《すごそうなあれ》
《卒研で試行錯誤中のあれ》
《いま一番つくってみたいあれ》
 
 
3. クロスサイトスクリプティングあるいはSame Origin Policyについて自分の
言葉で語ってみてください(これらがどのような脆弱性・技術かの解説は不要です)。

説明は不要とのことなので思うことについて。

まずクロスサイトスクリプティングについて思うところは、確認したことのある紹介・解説しているWebサイトの説明文では、それがどれほど危ないのか、という実感がわかないところにあります。よくあるものは「このようなプログラムを書くと、ほら、alertが実行できますね」程度のもので、それによる状況の深刻さというものがまったくわかりません。その結果として、放置してしまったり、なあなあのままWebサイトを運用していたり、といったことがあるのかもしれません。

Same Origin Policyについては、開発している際には厄介になることも稀にあったりしますが、これがあるおかげでWebにおけるそこそこの安全性を担保してるものだと思います。

どちらにも言えることとして、日本語に訳された時に訳しすぎ、もしくは曲解された翻訳になり、いったいどういうことなんだろうか、となった経験があります。その時は頑張って大本の文章を読んだり、いろいろなページを見て結論を出しました。

《それが何なのか、というものは省き、素直に思っていること》
《SameOriginPolicyが短いのはそんなに思っていることがなかったとおもう》
 
 
4.あなたが読み書きできるプログラミング言語の使用歴、おおまかな習熟度と
好きなところ嫌いなところをお書き下さい。(いくつでも可)
例:C言語(中学○年生のころから。調べながら書けるレベル。○○が好き、○○が嫌い)

共通: ドキュメント/リファレンスがほぼ必須レベル。

《構文とか書き方、一部のメソッドやクラスなど覚えてることもありますが、》
《実際に書く時は大体調べながら書いているので "ドキュメント/リファレンスがほぼ必須レベル"》

《いろいろやってきましたが、》
《いまはRubyとJavaScript(TypeScript)が超超超イイ感じ》
 
 
5. もしもタイムマシンに乗って昔のブラウザの仕様を変えられるとしたら、あなたは何を変えたいですか?
例:HTTPは、そのWebアプリケーションを使用している間ブラウザを閉じるまでコネクションが切れないようにしたい。

"ブラウザ仕様"に限って挙げます。

まず真っ先思いつくものはこれです。
https://twitter.com/NStyles/status/94259222748999680

他に変えたいものとしては、細かい部分ですが、ブラウザ毎に異なるデフォルトのスタイル定義や、JavaScript実装などの統一化が欲しいところです。単にリセットCSSやクロスブラウザに対応できるライブラリを使えばいい話ですが、それが仕様として定められ、標準化されていればまた変わった世界になったかと思います。
他にはプラグインをもう少し作りやすい環境が欲しいです。

《ブラウザ仕様かー、うーん・・・で特に思いつかなかった》
 
 
6. 以下のJavaScriptのコード断片は、とあるWebサイトで利用されていた
ものです。これを見て気付いた点について、自由に書いてください。

 1    try{
 2        var url = location.search.substring(1);
 3        // Check target
 4        if( !url.match( /^[\w\/]+$/ ) ){
 5            return;
 6        }
 7        var xhr = new XMLHttpRequest();
 8        xhr.open( "GET", url, true );
 9        xhr.onreadystatechange = function(){
10            if( xhr.readyState == 4 && xhr.status == 200 ){
11                // complete to load. insert news feed to div elm.
12                var div = document.getElementById( "news" );
13                div.innerHTML = xhr.responseText;
14            }
15        }
16        xhr.send( null );
17    }
18    catch( e ){
19        var div = document.getElementById( "news" );
20        div.innerHTML = "<s>cannot load news from server.</s>";
21    }

なんだか見覚え感のあるコード...
2行目、location.searchはURL末尾の?を含めた文字列を返すので、?を取り除く。
4行目、[A-Za-z0-9_\/] で構成されているか確認。
8行目、以上の処理によって得られた文字列に対してGETリクエストを投げる。
9-16行目、Ajaxのテンプレ。
12-13行目、取得したデータをそのまま div#news 内にHTMLとして入れる

つまるところ、DOM Based XSSの脆弱性が存在しています。プロトコルが省略できること、IPアドレスをDWORDで指定してもアクセスできること。これを利用して攻撃ができます。攻撃用データはHTMLとして用意、header("Access-Control-Allow-Origin:*")を付与した適当な公開場に設置することで使うことができます。

accessURL    : http://example.com/news.html?//2130706433/evilcode
//2130706433/: http://127.0.0.1/
evilcode     : <img src=x onerror="alert(document.cookie)">

対策として、4行目の正規表現を /^\w[\w\/]+$/ とすると良いと思います。
先頭にスラッシュを含めないようにすれば、上記の攻撃はできなくなります。

他の脆弱性が存在している可能性も考えると、div.innerHTML = ~~ ではなく、別のものを使用したほうがいいとも思います。

《ドットなしIPアドレスについて https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet#Dword_encoding 》
《HTTP Header に "Access-Control-Allow-Origin:*" を付けないとクロスドメインでアクセスができない》
《ローカルとVPSを使って実際にalertがでることを確認しました》

《"別のもの": div.appendChild( document.createTextNode(xhr.responseText) ); 》

《もちろんのことながら、それでも対策ができていない別の脆弱性もあると思います》
 
 
7. そのほかアピールしたいこと、書き足りないことがあれば自由に書いてください。

mixi主催 Scrap Challenge for security 2012 #2 でトップのチームでした。
《xssのセキュリティホールがあるmixiに対して攻撃を仕掛けるCTFチックなイベント》
《就職の選考もうっすらと兼ねているようでした?》

/* 
 * 6JC944Gh44Gf5pa544CF77yL5pyJ5b+X44Gn
 * 44K744Kt44Ol44Kt44Oj44Oz44G/44Gf44GE44Gq5L2V44GL44KS44Gn44GN44Gf44KJ44GE44GE44Gn44GZ44Gt44CC
 *
 * 56eB56uL44OX44Ot44Kw44Op44Of44Oz44Kw44Kt44Oj44Oz44OX44Gv
 * 44OX44Ot44Kw44Op44Of44Oz44Kw6KaB57Sg5YWo6ZaL44Gq5rCX44GM44GZ44KL44Gu44Gn44CB44K744Kt44Ol44Oq44OG44Kj6KaB57Sg44KS44O744O744O7
 *
 */

《上記のコメントは実際に送ったものにも含まれます。深い意味はありません。》
《上記コメントを改めて解読()すると、若干文章が異なるような気がしましたが、まあ、意図はあってるのでいいです》
《マジレスすると暗号化したり難読化したりすると読む人が大変なので真似しないでください、辞めましょう。それで選考結果が変わることはないと思います。》

《行くぜセキュリティキャンプ!》

Unite Japan 2013 Day1の

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

と!いうわけで、Unite Japan 2013 Day1へと行って来ました。
だって学生の早割が3kというので、これは行かなきゃと…

(Uniteってなんぞやという方 -> http://japan.unity3d.com/unite/ )

そこで聞いてきた、メモしてきた話を思い出しつつ補完しつつ書きました。
英語での講演もあったので若干解釈がことなる部分があるかもしれませんが、
そこは後日公開される資料であったり、他の方のブログ記事やメディア記事などを参照していただければと思います。

"書いちゃまずい系のもの"はとくに無かったかと思います。
もしあったのであれば申し訳ありません。すぐに消します。

◆ 基調講演
GDCに出てきているゲームの層にインディーズ系が増えてきていること。
5年前は難しかった無名少人数チームで壮大なゲームを作るのが今では可能なこと。
Unityはそれを実現するツールとして優秀なこと。

REPUBLIQUEおもしろそう!楽しみにしています!!

République

 

◆ "Unity for Wii-U"とWii-Uでのゲーム開発

今普及しているUnityとは別物にとして、"Unity for Wii-U"として別途用意されるようです(auのSkypeみたいなアレ)
SDKの都合からか、OSはWindows専用だそうです。
また、リリーススケジュールとしては、通常のUnityと同期して行い、例外的に追加機能が先に入ったり、ということもあるようです。

Wii-U向けのビルドは至って簡単で、ビルドセッティングのウィンドウからWii-Uを選択するだけ。
Windows/iOS/Androidとか書いてあるあの枠にWii-Uの項目が追加されます。

ビルドが完了すると、転送用のバッチファイルとROMデータが生成されるようです。
そのバッチファイルを起動すれば、何かしらの方法で接続している開発用の実機に転送され、実機テストができるとのこと。

Wii-Uといえば、ディスプレイのついたゲームパッドですが、そちらへの対応も簡単にできるようです。
その方法は、カメラを追加して、追加された項目である出力ターゲットをゲームパッドにするだけ。
実際にデモとしてAngryBots(Unityについてくるサンプルプロジェクト)にカメラを1つ追加して、ゲームパッドに3人称視点を出す、ということをやっていました。

Wii-Uの機能として用意されている、フレンド/アカウント/ストアなどへのアクセスは、C/C++のネイティブプラグインを導入することにより可能になるとのこと。

そして、開発者登録をすればUnityのProライセンスが無くとも、無償で全ての機能が利用できるということでした。

ただし!
残念なことに、日本からは個人での開発者登録はできないとのこと。。

 

◆ Nintendo Web Framework のご紹介

Webkitベースに作られた、Wii-U向けアプリケーションを最近流行りのHTML5で作れるフレームワークだそうです。
イメージ的には、PhoneGapとかTitaniumとか、それのWii-U版といったところでしょうか。

フレームワークの方でJavaScriptが拡張されており、Wii-U向けの各種命令郡が使用できるようです。
例えば、ゲームパッドとTVと違う画面を出力したり、ゲームパッドの傾きや振動を取得したり、フレンドやアカウント機能を使用したり....

デモでは、既存のWebページ(動画リストがあって、選択すると再生する)をWii-U向けにビルドしていました。
その時の特徴として、既存コードには一切の手を加えていないというところです。
既存コードにはjQueryやvideoタグなどが含まれていますが、その辺りをうまいことやってくれるようです。
(裏はWebkitが動いているようなので当たり前っちゃあ当たり前っぽい気も)

もう一つのデモとして、同じようにWebページとして作られたゲームがありました。
こちらは、Wii-Uでできることの総集編のようになっており、前述の拡張されたJavaScriptがフルに活かされているようです。
またこのデモはフレームワーク付属のサンプルのようになっており、ソースコードの至るところにコメントがしっかりと付いているとのことです。

最後のデモにベンチマークが出てましたが、これはどうにも比較対象がないのでなんとも。
700くらいのスプライトがでてるけど60fps維持できてますねー、というものでした。

そしてこれまた残念なことに、日本からは個人での開発者登録はできないとのこと。

 

◆ シリアライズ徹底解説

まずなぜシリアライズを行うか。
これはプレイデータの保存やエディタの状態を保存するために行う必要があります。
ここでは、エディタ内に絞った形で講演していました。

・プロジェクトの読み込み
・スクリプトのコンパイル
・ゲームのスタート、ストップ
といったタイミングでシリアライズが行われます。

適当なエディタウィンドウを作って適当にいじって、ゲームのスタート・ストップと行うと、
そのウィンドウ内のデータがシリアライズされてないと吹っ飛びます。

 

intとかfloatとかビルトインの場合は、publicにしたり、privateでもSerializeFieldアトリビュートをつけることで解決します。
自作クラスの場合は、クラス自体にSerializableアトリビュートを付ける必要があります。
この2点を守ればデータのシリアライズが行われます。

また、structsはシリアライズがされないので、シリアライズしたい構造体があるのであれば、クラス化しましょう。

 

ここでシリアライズの問題点として、クラスを参照する場合がでてきます。
同じインスタンスを参照する変数を2つ用意してシリアライズしようとすると、片方しか反映されないとのことです。
なぜならば、それらは別にシリアライズされてしまうからです。

この問題の解決には、ScriptbleObjectを継承したクラスにする必要があります。
その際に、nullチェックやhideFragを使うことで~~

Listなどのリストの場合、簡単なクラス(親クラス型のリストに子クラスのインスタンスを入れるとか"しない")の場合はうまくいきます。

逆に、それらが含まれる場合、そのままでは上手く出来ないので、ファイルを分けて~・・・・

 

シリアライズしたデータ(ScriptableObject?)から、アセットファイルの生成も可能になります。
AssetDatabase.CreateAssetを叩くといいようです。

-----
という具合で、正直よくわからんかったので勉強してきます。。
(英語だったのでよくわからんという点を差し引いても分らなかったとこがありました...)

 

◆ Editorスクリプティング入門

なぜUnityのエディタを拡張するか?という点について、
・他人が触るときに触ってほしくない箇所を隠す
・制約がめんどうなとき("ここはこう設定!"などと定められているなど)
・見やすくする
・編集しやすく、使いやすくする
といった点があり、ここは変えたほうがイイネ、という部分はいじっていきましょう。

では、エディタを拡張が具体的に何ができるか。

 

1つに表示項目の改善があります。
これは例えば2Dゲーム開発でのTransformのZ軸を隠したり、テクスチャの設定欄に小さい窓をつけたり。
メニュー項目を追加したり、シーンビューに追加のハンドルを表示したり、などなど可能性は色々あると思います。
現に、アセットストアに出てる凄い系のものに付属しているエディタちっくなものは、そういった拡張がアツいと思います。

 

もう1つはビルド前後に処理ができるようになります。
具体例こそ示されていませんでしたが、現場の方々であれば色々と必要そうなアレコレをできるのではないかと思います。
最後に、アセット管理における移動や削除の制御ができます。
これらのファイルはこのフォルダ!など、パスに対してマッチングさせて制御するコードを書いていきます。

今回の講演では、主に1つ目。表示項目の改善などについてでした。

(なんだかメモ書きがすごい適当でまったくわからない現象が...)
まとめると、Editorクラスをちゃんと理解しましょう。理解していじらないと最悪Unity毎オチます。
理解した後に、EditorWindowだとか、CustomEditorだとか、シーン/ゲーム/プロジェクト/ヒエラルキーなどへと広げていくといいようです。

余談ですが以前、タワーディフェンス的なサムシングをやろうかと、UnitySteerを使いパス...というか座標を辿るものを使いました。
その時、座標のリストを作るときに、シーンビュー上に"座標の箇所にハンドルを設置してマウスで操作できるように"したらめっちゃ楽でした。

 

◆ Androidでコンテンツを守る方法 -Unity,Androidでのプログラムとデータの暗号化、およびハッキング対策-

セキュリティを最近勉強しはじめている私にとっては今日一番わくわくしていたものです。

まず、Unity on Androidは
Linux | Android | Unity | Mono | Script
という形で、Unityを堺にJavaVMとMonoVMが動いているような。
Unityが何をしているかというと、C#で書かれたスクリプトをJavaへとマッピングを行なっています。

 

よくある?ハックとして課金コンテンツがあります。
これは、AndroidであればGooglePlayLicenseを経由して行われます。

その仕組みは
App -> {random number} -> Google
App <- {message, signature} <- Google
という流れで行われます。
オンライン環境であれば、定期的に確認すればいいのですが、オフライン時にはユーザのデータを信用するしかありません。

また、そのメッセージ・シグネチャを保持するために、アプリのバックエンドにサーバを用意して、
同じような形式でやりとりするのが好ましいようです。

Unity上でこれを実現するには、"GooglePlayLicenseVerification"というライブラリがGithubで公開されているので、
それを使いましょう、とのことです。

 

次にアプリケーションの改竄を検出する方法です。
これは、ゲームコードの変更やチートなどの不正行為を防止するために必要です。

チェックする項目は
・アプリがデベロッパーのプライベートキーで署名がされているか
・Javaコードが正しいか(class.dex)
・Unity/Monoが正しいか(Unityランタイム郡)
・C#コードが正しいか
というものがあります。

詳しくはわからないのですが、こういったことはAndroid開発者の方々には当たり前なのでしょうか。
C#などUnity側からでもJavaのコードを実行できるのでそれで確認しましょう、という具合でした。
(AndroidJavaObjectというクラスが用意されており、それで実行できます)

 

次は暗号化です。

・ゲーム進捗
Unityでは簡単にゲーム進捗を記録できるPlayerPrefsというクラスが用意されています。
そのままではやはり簡単に編集され、メダルXXXXX枚などとされてしまう可能性があります。

これは、key/valueのペアとして記録することに加えて一工夫することで改善できます。
例えばkeyは本来のkeyのハッシュ値、valueには保存するべき値に対してTripleDESなどを掛けるなどを施します。

・スクリプト
スクリプトは暗号化、よりも難読化がメインになります。
ただし、Unityで書けるプログラムは何の変哲も無い普通のC#なので逆コンパイルなどが容易であり、難読化されていても解読は可能です。
Unityのビルドではここに対してなんの暗号化/難読化も掛けられません。
ゲームの根本に関わるような大切なソースコードであれば、自分で暗号化/難読化が必要です。

1つの案としてOpenSSLを使うものがあります。
~.dllとして外部でコンパイルし、それを暗号化して~.binに。これをアセットまたはwebに配置からの通信などを行い、ゲーム内で復号化して実行する。
読み込み部分はAssembry.Loadとリフレクションを使うことで可能になります。

やっぱりこちらもシグネチャの確認は定期的に行ったほうがよいようです。

・アセット
テクスチャやポリゴン、音声やBGMといったメディアだけでなく、上記のような暗号化されたスクリプトやデータベース、プラグインなど、すべてがアセットになります。
これはスクリプトと同様に、~.unity3dを暗号化するのが1つの方法としてあります。
具体的な読み込み方法に関しては特に触れてなかったかと思います。

 

まとめとして、
・APK自体のチェックを怠らない
・重要なコードは自分で保護する(暗号化/難読化)
・様々なアプローチを試行する
・ただしアプリケーションの保護に時間をかけ過ぎない。

この最後の点に関しては、そもそもGooglePlayにアップデートを定期的に早めにリリースするのが良いとされているようなので、
時間をしっかりかけて守るよりも、ぼちぼちな感じでアップデートの方に力をいれたほうがいいよねーみたいな具合でした。

 

◆ モバイル向けShuriken活用法

(これまたメモが凄いメモの役割を果たしていなかったのでさっくりと....)

1.本当にパーティクルが必要か
それはアニメーションテクスチャで出来ないのか。
もっとよい表現方法はないか。

2.そのパーティクルはどう構成されているか
例えば爆発なら火と煙と破片と根本と、4つ?いやいや2つでいけるのでは?
1つのパーティクルに内包されるパーティクルはすべて同じ力を加えなくてはいけない。=> コピペで色やテクスチャのみを変える

3.どのようにパーティクルは流れていくのか
EmitSharpは使わない!Speedも使わない!
-> 表現力が乏しい

ForceとVelocityのカーブを調整して表現する。
このとき、キーフレを追加して、曲線を自由自在に操ることができる。
基本的にはVelocityを使い、力が必要な場合(ex.爆発)でForceを使う

4.パーティクルと一緒にマテリアルを作る
炎のパーティクルを作るなら、火・煙のマテリアルを作りながら、適用しながら。

// 残りはパーティクル作成デモのような形でちょいちょい部分部分の説明があったかと思います。

 


長くなってしまいましたが、Unite Japan 2013 Day1で参加した講演はこのような具合でした。

Wii-UのAngryBotsが企業ブースに置いてありましたが、
まったく触れてなかったので、Day2で触ってみたいと思います。