2016年10月26日水曜日

CODE BLUE 2016



CODE BLUE Tokyo2016の学生スタッフをしてきました!!

CODE BLUEは「世界トップクラスのセキュリティ専門家による日本発の情報セキュリティ国際会議」です。

1日目はスタッフ懇親会 & 会場設営、
2日目はフリーなので国内外のトップセキュリティ専門家による講演を聴講することができました。
3日目は学生スタッフとして活動。自分の担当は受付(通訳アシスタント)になりました。

CODE BLUEの開催日は2日間あるのですが、学生スタッフには1日は参加者と同様に講演などを自由に聴講させて頂けるなどの配慮があり、大変楽しかったです!

事前の打ち合わせで僕は英会話ができるということで、受付・通訳アシスタントの担当になりました。仕事内容としては今年初開催のCODE BLUEのハッカソン、コンテスト会場の受付です。コーヒー入れやお菓子の補充などが主な仕事でした。他にも、ハッカソンのBGMの設定(soundcloud)などをしました。peatixの方たちと一緒に受付業務をしました。

また、午後の休憩時間には、自動車のハッキングコンテストに参加しました。初めての自動車ハッキングがすごく楽しかったです!!

最後にはNetworking Partyがあります。お寿司等も振る舞われ、とても豪華です!僕は自動車ハッキングでとても仲良くなったフランス人のETASの企業の人たちと会話を楽しみました。

国際交流に関しては、学生でも技術があって、同じ研究テーマだったり、コンテストで仲良くなれば国籍関係なく楽しめます!

それでは、講演の内容やコンテスト内容についてです。

PowerShellの難読化


PowerShellスクリプトの難読化方法と難読化ツールについての講演を聞きました。
PowerShellとは
PowerShellは主にWindowsで使用される、.NET上で動くコマンドライン/シェルスクリプトです。オブジェクト指向のシェルスクリプトプログラミングができます。
 (Windowsだとコマンドラインはcmd、シェルスクリプトはbatchfileが結構有名だと思います。)
PowerShellが優れているところは、.NETベースのため、「.NETでできることはほぼPowerShellでできる」ようになることです。
これによって、3rd partyパッケージ無しでPowerShellのコマンドでネットワーク通信、XMLのパーシング、HTTPサーバー起動などが出来ます。bashより高機能です。
PowerShellはWindows Vistaからデフォルトでインストールされていて、また.NETもデフォルトでイン
ストールされている場合が多いです。
高機能なシェルを環境構築なしで使用できることが、大きな利点だと思います。

PowerShellとセキュリティ
PowerShell(スクリプト)は悪用するとcmd/batchfileと同じようにマルウエアのようなものや悪意のある動作をすることが可能です。

悪意のある動作を防ぐためには(セキュリティ対策)、その悪意のある動作を発動させるPowerShellコマンドを検知して防げば実現可能です。
PowerShellはほとんどの実行されたコマンドをロギングすることが可能で、これを利用することでPowerShellの悪意のあるコマンド検知ができるのではないかと思われます。

ここで、PowerShellのスクリプトを難読化することができれば、悪意のあるPowerShellスクリプトがシグネチャとして検知されないので、PowerShellの悪意のあるスクリプトに対するセキュリティ対策を突破することが可能です。
PowerShellの難読化は比較的簡単で、*-String cmdletsを使用して文字列置換/連結したり、コマンド引数をランダムに省略/省略しないことによって実現することが可能だそうです。

PowerShell難読化自動化ツール: https://github.com/danielbohannon/Invoke-Obfuscation

また、PowerShell Logに実行した悪意のあるコマンドを残さないためのテクニックなども発表していました。PowerShell Logに情報を残さなければ、PowerShell Logを活用したPowerShellのセキュリティソフトウエアを突破できます。
PowerShellの元となる.NETのSystem.Management.Automation.dllを直接叩いたりcmdからpowershellを引数指定で子プロセスとして実行することでPowerShell Logを残さずPowerShell Scriptを実行することができるそうです。

自動車のハッキング

自動車のハッキングに挑戦しました!!!
何とか全問解くことができ、景品のマグカップとタンブラーをゲット!!!

最近の自動車の仕組み

自動車にはエンジンを制御するためのコンピューターであるECUというものが最近の自動車には100個以上付いています。
前右の車輪を制御するためのECU, 前左の車輪を制御するためのECU, ステアリングのためのECUなど、ECUは自動車の制御のために色々な役割を持ちます。
自動車の制御は、このECU同士で通信しながら情報を共有してエンジンなどを制御することによって成り立っています。
そのための、ECU同士を通信させるためのネットワークが車載ネットワークです。

自動車のハッキング

車載ネットワーク、これが自動車のハッキングに最もつながるキーワードです。
車載ネットワーク上に、悪意のある情報をECUなどに送信することができれば、車の操縦を乗っ取ることができます。

車載ネットワークにはいくつか規格がありますが、標準規格になっているのがCANで、今回はCAN上で自動車のハッキング問題に挑戦しました。

今回はCANのパケット解析ツールを使って、自動車のハッキングに挑戦しました。
CANの上位プロトコルであるUDS(アプリケーション層)とISO-TP(トランスポート層(フロー制御付))のパケットを手作りして送信したり、UDS/ISO-TPのパケットを解析して問題を解きました。

1. パケットの重複を消去して、ID順にソートしてASCIIのデータ文字列を読んでフラグを見つける
2. フラグで指定されている通信のパケットを作ると、access denied errorを示す通信が帰ってきた
3. フラグで指定されている通信を通すには、認証を通す必要がある
4. seedとanswerが対応している過去の通信ログから、暗号化関数を導き出し(xor)、seed要求リクエストを送ってseed valueを手にいれ、アクセス解放リクエストとして計算したanswerをパケットとして送信
5. 管理者権限を取得(この時点で自動車のハッキングとしては完了)
6. フラグで指定されている通信のリスポンスが通信ストリームとして帰ってきた
7. 通信ストリームをpythonスクリプトで解析すると、1つのバイナリデータが出てきた
8. バイナリデータはPNG画像であることが判明し、ファイルを開くとQRコードが出てきた
9. QRコードを読み込むと、新たなフラグが出てきた
10. フラグで指定されているCAN上でのファイルアップロード・ファイルダウンロードをするためのパケットを作って送信すると、何かのバイナリデータを含む通信ストリームがかえってきた
11. pythonスクリプトでパケットを解析し、1つのバイナリデータにしたところ、ファイルフォーマットがPDFと判明
12. PDFを開いて自動車ハッキングのコンテストクリア!!!

2016年10月5日水曜日

KITハッカソンはすごい!!② ~白山~




今回のハッカソンのテーマは「子供たちが豊かに成長する次世代の里山都市を創造せよ!」です。
アイデアソンには僕は参加しなかったのですが、白山市の社会問題を探すためにハッカソンの前にアイデアソンが開かれ、 そこでチームやプロダクトのアイデアが決まったそうです。
この上の写真のおしゃれないかにもイノベーションが生まれそうな場所がアントレプレナーズラボで、ここでアイデアが考えられました。
ハッカソン中に配られた白山の社会問題の資料には、人の手で山里が管理されなくなったことによって荒廃してきたことや、害獣が畑を荒らすなど、色々問題が書いてありました。
皆が未来の里山計画に想像を膨らませてわくわくしていました。

 
ですが、このアイデアソンでやったテーマとハッカソンの審査は全く別の観点で行われるのでは。。。?ということが、ハッカソン2日目に頭によぎりました。
ハッカソンの審査員が白山の近隣の一般住民だとわかったからです。
僕はそのことを聞いた瞬間に、「子供へのプログラミング教育」すら言っても全く理解されないのでは?ということに気づきました。
また、僕が白山の近隣の一般住民の立場になって考えたとき、白山の社会問題という意識の高い話、果たしてほのぼのと生活している個人にとって興味があるのかな、と気づきました。
「イノベーション」 「プログラミング」という言葉自体、白山で暮らしている人たちには興味がないと気づきました。

ここで、「小学生からのプログラミング教育」から、「ドローンを魔法で操る」、という楽しい表現に変えました!最新テクノロジー的な言葉は絶対ウケないと判断して全部変えました。


 プログラミング -> 魔法
 Scratchプログラミング -> 日本語のブロックを組み合わせるだけで魔法が使えるよ!
 Leap Motion -> 魔法
※ドローンは実際に飛ばし、魔法で操れるすごいラジコンとして認識されるようにしました

デモは、「これから魔法のデモをします」と言って学芸会ノリにしました。


一般人の投票で順位が決定しました。

そのため、優勝候補だと思われていたチームが撃沈!
建築のチームで、建築なら見てわかるし、プレゼンもすごく上手でした。
ですが、最先端テクノロジーとは無縁と思われる白山の一般近隣住民には

「ハッカソン自体をイノベーションしてクリエイトするスペースを作る」
「○○デザイン」

という言葉が新しすぎたようで、プレゼン中に終始難しそうな顔をしていたように見受けられました。
「ハッカソン」とは何なのかということもたぶんご存じない方々だったと思います。
ハッカソンはハックソン(白山)をもじったイベントのように思われていたかもしれません。

ユーモアのあるプレゼンでいつもすごくウケる、KITハッカソン常連のIT企業チームは、今回のプレゼンで阿部マリオの変装をした劇+PVで今回もすごく力が入っていて面白かったのですが、
白山の近隣住民は時事にあまり興味がないようで、「会場が静かですねえ」というギャグをプレゼンテーターが寂しげに飛ばしていました。

VRのチームは、
VRゴーグルをかけてリアクションをとっている人を、
「変なゴーグルかけて挙動不審な動きしている面白い人」という認識をして別の意味でウケていたように思います。

1位 ~ 3位のチームは、すべて宝探しなど位置情報のゲームを作ったチームでした。
特に1位は、白山の山里に実際に宝を置いたチームで、山での宝探しなどが白山の近隣住民の幼少期に遊んで楽しかったことを思い出させたようです。1位チームがハッカソン中、実際に山登りをしていてその写真をプレゼンに使ったことも、近隣住民にとって印象がよかったように思います。

2~3位(同率)チームは、PokemonGOのパクリ?アプリの白山GO!というアプリを作っていたチームが印象に残っていたのですが、白山GO!に登場させる地元の観光名所ゆるキャラのデザインが大うけしていました。アプリよりゆるキャラのデザインの方がウケていました。

他の同率2~3位チームの、IoT化した秘密基地のCapture the flag!風陣取りゲームは完全にやっていることが理解されていて興味をすごく持たれていたように思います。IoTで秘密基地に温度センサ、人検知センサなどをつけてスマホなどでリアルタイムモニタリングしてCapture the flag!風陣取りゲームをするのですが、リアルタイムモニタリングの画面がセンサの値のグラフにもかかわらず、白山の近隣住民に完全に理解されており、これで自分の陣地が相手に侵入されているかどうか判断するのか、面白そうという反応をしていた気がします。IoTは地域に関わらず通じるのかな、と思いました。

自分たちのチームは4位で、18票、2~3位(同率)と2票差でした。最先端テクノロジーでしたが、「魔法」という表現にしたので、わかりやすく、結構ウケたのだと思います。

次世代の都市とか田舎にシリコンバレーを作ろう!とか言っても平和に暮らしている年配住民はそんなもの求めていないし、未来より過去に興味があり、山登りとかの身近なことに興味があるということを痛感したハッカソンでした。
地域の人たちのおいしい料理や自然に触れることができた素晴らしいハッカソンでもありました!
楽しかったです!

2016年10月4日火曜日

KITハッカソンはすごい!!① ~モノづくりができるハッカソン~

KITハッカソンに参加してきました!!!
  
以前KITハッカソン参加に参加したときは、ウエアラブル傘Kasadasというプロダクトを作りました。
ウエアラブル傘を作るために電子部品が必要だと運営の中沢先生に相談したところ、部品を提供
してくれたおかげで作ることが出来ました!!!

今回はさらにパワーアップ!!
スポンサーのマルツー電波がフリーパーツショップを開いて頂けました!!!
Raspberry Pi、Arduino、TWE-Liteから各種センサーなどパーツが勢ぞろい!!
モノづくりをしたい人には夢のようなハッカソンです!! 

このハッカソンを開催してくれた中沢先生、福田さん、白山の関係者の方々、誘ってくれたチームメンバー、その他運営の皆様、大変ありがとうございました!!

②ではネタ話をしようと思います!次回の記事お楽しみに!

面倒見のいいハッカソン

このハッカソンは3日間あります。
1日目は金沢工業大学のアントレプレナーズラボという、おしゃれな場所で行われます。
この日は協賛企業のプロダクトのハンズオンがあるのが特徴です。
技術力が心配な人でも、成長でき、プロダクトの開発も1日目でできるようになります!

2,3日目から、本格的にプロダクト開発が始まります。
2日目からは、白山という自然がいっぱいの場所でハッカソン!!

ハッカソンというと、大体スマホアプリケーション開発や、WEBサービス製作、良くてもはんだごてをしてIoT等デバイス開発ですが、、、、、、、

白山なので、自分のチームはドローンを飛ばして空撮でプロダクトのPVを作ることができたり、他のチームは位置情報アプリケーションを作って実際にデモすることができたり、外で木材の加工までできました!

もちろん送迎バス付きです。金沢駅と金沢工業大学でバスのピックアップがあるので、県外の方でも参加できそうです!

食べ物

このハッカソンは、1000円先に支払うのですが、2日目からの白山会場での食べ物が豪華!!!(1日目は持参)
まず、ハッカソン中には3食支給され、手作りカレーが出ます!!とってもおいしく、ついお代わりをしてしまいました!!
もちろんお菓子+ドリンク付き!!

懇親会は、なんとジビエ肉が振る舞われた、炭火串焼、ジビエ肉汁、ジビエ肉オムレツ?が堪能できました!おいしかったです!
お酒も飲み放題だったそうです。僕はノンアルコールビールを飲みました。


チーム

チームメンバーは、KITの大学生のドローンプロジェクトの人2名とIT企業のエンジニア2名と僕です。KITドローンプロジェクトのリーダーがメンバーとして僕を誘ってくれました!
全員ドローン大好きメンバーだったので、すぐに打ち解けることができました!!!
メンバーと話していると、「もしかして@ken_demuさんですか?」と聞かれました。
twitterアカウントが認識されていたそうです。KITドローンプロジェクトで、自分がQiitaに投稿したドローンの記事が話題になっていたそうです。
http://qiita.com/kendemu/items/600210a2dd1954c9f2b8


審査員とプレゼンの方法決め

作るプロダクトは、ドローンをScratchでプログラミングできるアプリ、がすぐに決定しました。
ですが、今回気を付けなければいけない点があります。。。。。。

審査員が白山の近隣の一般住民30名(大人)です。
このことは、2日目に判明しました。そして、ハッカソンの開催場所は三方を緑山で囲まれています。主催者の中沢先生は、「審査員は技術者ではないです。白山の一般住民です。」 と、アドバイスがありました。


 

※1日目は、アントレプレナーズラボというおしゃれで先端的な場所でハッカソンが開催されていました








役割担当はこんな感じです。
1. 空撮PV製作 + デザイン素材製作 + プレゼン製作 : KITドローンプロジェクトのメンバー
2. アプリケーション製作 : 自分
3. UI部分製作 : 企業のエンジニア
4. Scratchのサンプルコード製作 + かっこいいデモ製作 : KITドローンプロジェクトのリーダー



ドローンを小学生から簡単にプログラミングできるためのアプリ

今回自分たちのチームが作ったのは、
ドローンを小学生から簡単にプログラミングできるためのアプリです!!
(Scratchというブロックプログラミング言語を用いるため)
 

 


アプリ最新版のデザイン(これに離着陸ボタン + 真ん中にドローンのカメラ映像が映る)
開発途中のアプリ画面


Electronというクロスプラットフォームアプリケーション開発プラットフォームを使うことによって、アプリケーションのUIとアプリケーションの機能の部分の並列開発を行うことができたため、短時間で(3日間)完成度の比較的高いアプリケーションを作ることができました。

デモ
Leap Motion

Leap Motionというデバイスを使うことによって、Scratchでプログラミングして、手の動きでドローンを操るという魔法のデモを行いました。

Leap Motionとは何か
Leap Motionは赤外線カメラを使うことにより、手専用でリアルタイムで使えるスキャナーとして働きます。
 
なんで赤外線だと手がスキャンできるかというと、赤外線距離センサというものがあり、これで赤外線によって物体との距離が計測できます。人が近づいたら○○する、という機能を持ったデバイスは結構このセンサが使われています。赤外線センサは簡単に市販で入手できるので、「人が近づいたら○○する」という機能を持ったデバイスはArduinoなど各種マイコン・マイコンボード + 赤外線センサなどを組み合わせれば比較的簡単に作ることができます。
(物理的な仕組みは以下を参照:https://ja.wikipedia.org/wiki/%E8%B5%A4%E5%A4%96%E7%B7%9A%E3%82%BB%E3%83%B3%E3%82%B5)

そして、赤外線センサを大量につなげば、赤外線カメラの出来上がりです。これによって、赤外線で取得できる距離情報から3次元的にものをスキャンすることができます。

ですが、ものを3次元的にスキャンできるからと言って、手をコンピュータが認識できるわけではありません。手を認識するには、機械学習を使います。
これは、大量の3Dデータを集め、その中から手の3Dデータを事前に大量に集め、手であるかどうか判定する関数や関節位置を予測する関数を大量のデータから生み出すことによって(正確には近似、詳しくは最小二乗法と最急降下法を参照) 、手を認識することが可能になります。
大量の手の3Dデータを集めて、関数を生みだせば(予測)、数学的に手が定義できるため、数学を理解できるコンピュータが3Dデータから手を認識することが可能になるというわけです。
機械学習はプログラムか回路で実現します。
 
開発工程
Electronを使っているため、コア部分にはNode.jsを用いるのでnpmモジュールによる拡張性とScratchとアプリケーションを連携させるためのHTTP API群の高速開発を実現し、UI部分にはHTML5を用いることでWEBデザインと同じ要領でデザインを詰めることができました。
Githubとgit flowブランチモデルを採用したため、機能拡張と過去のバージョンのアプリケーションの保持も簡単にできました!
連絡などは口頭 + slackで行いました。
slackはエンジニア向けチャットツールで、コードをシンタックスハイライト付きで貼り付けたり、githubのレポジトリの更新通知などを行うことができます。