2016年8月17日水曜日

IPAセキュリティキャンプ2016全国大会4章 〜〜〜交流・文化〜〜〜

セキュリティキャンプは泊まる部屋は個室、3食食事付きです!!
部屋は個室でも、食事で参加者、チューター、講師が交流できるため、これがセキュリティキャンプの楽しみの一つであります!!
食事は牛タン焼、マグロのお刺身、鍋、牛肉たっぷりハヤシライスなど、結構良いものが無料で食べれます!!!



食事等でこのような方々と楽しくお話しました!
固形醤油コンテンツ提供&攻殻機動隊 The Realize Projectコンテストでお世話になったチューターのらまっこさん、
プロトコルスタック実装とlibpgenのチューターのすらんくさん、 
一緒にドローンのアプリを開発したことがある、今年未踏の+taiyo slimeさん、
石川勢参加者のはっぴーのーとさん、
未踏に採択されているkvalgrindのチューターのるくすさん、
攻殻機動隊の素子のようなペンテスターを目指しているYuka Takahashiさん、
チームNOPの@hikaliumさんやちひろさん、
高校生ながらfirefoxにバグ報告していたりOSSの監訳をしている参加者、
@taniho, @miya_aitさん等のロボットの開発をしている参加者、
やっと会えた友利奈緒さん達2人、
CTF最多得点王のみどりんごさん、
同じKotlin勢のむしぱんさん、
新機能ゼミのあやもりさんと@sksat_T_3_yearsさん、
西永先生、木藤先生と坂井先生、
にしむねあ先生、廣田先生とはるぷ先生、
その他にも色々な方とテクノロジーやエンジニアリングの話をして盛り上がりました!!!!!!!
これからも皆様、よろしくお願いします!!!

セキュキャンは最高です!!!
他では経験できない最先端テクノロジーの学習と実装と問題解決、
技術力の高いエンジニアとの交流、
今年は前泊のチューターはシン・ゴジラ、
そしてNEW GAME!!!などの文化体験(笑)をしました!!!










たった5日間で、数年分の貴重な濃い体験ができるのがセキュリティキャンプです!!!
興味を持った方はセキュリティキャンプに来年、もしくはミニキャンプに参加することをおすすめします!!!! 




IPAセキュリティキャンプ2016全国大会3章 ~~~学習内容~~~

チューターも一緒に学ぶことができるのがセキュリティキャンプです!!!
セキュリティキャンプの講義は毎年内容が新しくなります!!!最先端のセキュリティを学べる場所です!!

〜〜〜学習内容〜〜〜
1. 廣田先生のHTTPプロキシ入門


この講義ではBurp SuiteというHTTPプロキシツールを使って、
さらにJavaプラグイン開発によって機能を拡張することによって、
HTTPの上の独自プロトコルを解析し、パケット偽装をしてモバイルアプリケーションのペネトレーションテストをするというハンズオンでした。

一番楽しかったのがJavaプラグイン開発で、
「スクリプトキディではなく、自分のコードでペネトレーションテスト」というロマンを感じました!!!(^O^)
Java自体はそこまで好きではないですが(笑)(JVM言語ならKotlin推し)、
Javaだと「コード書いた!!!」感があるので「自分のコードでペネトレーションテストしている!!!」という達成感が味わえます!!!!

2. はるぷ先生のスマホゲームセキュリティ
この講義ではスマホゲームの多角的なセキュリティ問題を分析しつつ、
Burp Suiteによるパケット解析&パケット偽装やHTTPリクエストなどでモバイルゲームのペネトレーションテストをするというハンズオンでした。
バリデーションチェックの重要性を手を動かしながら、ブラウザゲームなどのゲームバランスを崩壊させて、身を持って体験しました。
一番楽しかったのが講義でちょろっと触れた、ゲームのメモリの挙動を見て値を改ざんしたり、
Unity Androidアプリケーションのapkを展開し、dll(MSIL)をバイナリ解析してTelerik JustDecompileでリバースエンジニアリングを行うことで秘密鍵を手に入れたり、
IDA Proでcocos-2dxで生成されたARMの.soを解析することでした。
Unityでゲーム開発をしたことがあるので、Unityが簡単にリバースエンジニアリングできるということを手を動かして知ったことが新鮮でした!
また、Unityの最新ベータ機能であるILCPPという最新機能についても講義で触れていました。
ILCPPはMSILコードをC++に変換し、 C++ -> バイナリに変換するコンパイラなのですが、
これを使用することによってMSILバイナリ -> x86/armバイナリになるので、バイナリ解析の敷居が上がり難読化と同じ効果が見込めるということをはるぷ先生が話していました。
自分はAndroid用ARMバイナリを解析しようとして挫折したことがあったのでこれはすごく共感しました。
~~~Android用ARMバイナリ(共有ライブラリ)を静的解析しようして挫折した話~~~
自分は以前Apache 2.0ライセンスのGoogle Cardboard Android SDK(Google社製)を使うときにAPIを拡張したかったのですが、JavaDocと.jarファイルしか提供されてないことがありました。
Google CardboardはAndroidをVRデバイスにするためのプラットフォームで、車輪の再発明をするとパフォーマンスが落ちそうだったので(VRはUX上高フレームレートの確保が必須)、
APIの拡張をするのが一番効率的だと思いました。
.jarファイルを展開してJava bytecodeをdecompileすると、所々の関数にnativeという修飾子を発見しました。
これが意味することは、肝心な実装のロジックはC++でJNIで書かれていているよ、ということです。
そこで参照している.soファイルをobjdumpでarmモードでディスアセンブルしたのですが、JNIのコルーチンをアセンブラレベルで読むのは大変で、またところどころにNEON命令やFPU命令があり、10000行以上あり解析が大変すぎて途中で読むのをやめました。
フリーのobjdumpで静的解析は大変で、IDA Proを買うお金はない。。。。。。

3. 河合先生&坂井先生の「システムに新機能を追加してみよう」
この集中講義は河合先生の実装した、khpcという永続変数ライブラリを使って「何かソフトウェアを開発しよう」、というものです。
永続変数とは、データが永続化された変数で、
khpcはファイルI/O(libcの関数を使用)を抽象化したAPIをユーザーに提供しています。
河合先生はGUI開発のためにblikeという自作したライブラリもこの講義で提供してくれたのですが、このblikeライブラリは2Dグラフィックス専用です。
自分はkhpcの機能を3D空間、そしてVR空間に持って行きたかったので、Unity用のkhpcプラグインを開発しました。
行ったことは、
1. khpcをC -> C++にする
2. khpcにDLLImportの構文を追加する
3. g++でコンパイル & dll生成
4. C#でkhpcのdllを呼び出すラッパー関数を作る
 です。
4で, C#上でポインタ操作を行う必要がありました。
残念ながら、デモ時にVRゲームが2秒でクラッシュしてしまいました。
後ほど原因を解析したところ、C#のvoid*型はC/C++のvoid型ではなく、
C++/CLRのSystem.Void型であることが判明し、そこの型の異なりによって実行時にエラーを起こしてしまったのだと思います。
つまりkhpcの関数の返り値をvoid*型ではなくSystem.Void*型にしなければなりませんでした。
C#/.NETの良い勉強になりました。

4. 竹岡先生の「ハードウエアの基礎」
この講義では、ロボットを作る上で重要なデジタル回路のハンズオンでした。
自分が、中学生のときロボカップジュニアのロボットを一日中作っていたときの懐かしい雰囲気の、いい雰囲気の講義でした。 (^^)

5. 長谷川先生&にしむねあ先生の「次世代プラットフォームのセキュリティ」

この講義ではelectronやWebViewなどのハイブリッドアプリケーションをペネトレーションテストするという講義でした。 Webには色々な脆弱性があるのだな、と知りました。
また、あの有名なWEBサイトを踏み台にexploitしたり、JSの匿名関数/関数オブジェクトの機能を使って任意のJSの関数を実行させるexploit技法が新鮮でした。


6. 三村先生の「.NETプログラムの解析」
人生初のランサムウェア解析を体験しました!!!

この講義では、最近徐々に増加傾向であるMSILマルウエアを解析する技法を学習する講義でした。
 .NET仮想マシンの挙動、仕組みを学習しました。.NET仮想マシンは1つのスタックしか存在しないスタックマシンなので、「x86/ARMより簡単!」と思いました。
MSILバイナリはC#コードにデコンパイルできるので、すいすいと読めます。
MSDNでオペコードのリストも公開されており、 スタックが一つだけなのでMSILコード生でも比較的簡単に読めます。

また、最近オープンソース化された.NET Coreのソースを読む(ilasmのC++ memory allocationコード)という熱い体験をしました!!!
 
スマホゲームセキュリティではるぷ先生がちょろっと触れていた、Packerという難読化技法がされたMSILバイナリに対して静的解析を行いました!

Packerというアプリケーションバイナリ難読化方法があるよ(はるぷ先生) ->
Packerはこんな仕組みだよ/コードはこれ(LoadAssembly)(三村先生) ->
Packerで難読化されたバイナリ読むよ(三村先生)

このような、別トラック間でフルスタックにセキュリティ問題の解決が学べる体験ができて感動しました!!!

最後の演習は、MSILランサムウェアを解析して、 それを元に暗号化されたファイルを復号するソフトウェアをつくろう、というハンズオンでした。 SmartAssemblyという有償のobfuscatorで難読化されているため、静的解析が非常に大変でした。。。。。。(^_^;)

また、IDA Proを買うとできるロマン体験談と、IDA Proやセキュリティソフトウェアの脆弱性を突くマルウエアなどのホットな話を聞きました!!

~~~今後の課題~~
1.今までTCP/UDP上に実装された独自プロトコルは実装/移植/解析したことがあったのですが、HTTPの仕様があまりわからずHTTP上で実装された独自プロトコルの通信の仕組みがあまりわかりませんでした!^^; 
HTTPに関しては、今まではXML-RPCの解析、RESTとOAuth2 APIをただJSでただ叩くだけでしたが、これを期にHTTPプロトコルを理解してレイヤを上げていこう!!!
2. 今まではC#をコーディングするだけでしたが、今回C#/.NETの詳しい仕組みが少しだけわかったので、この調子でCoreCLRの実装などを詳しく読んでいったり、Windows APIの理解をして行こう!!!
3. 今まではJavaScriptのコーディングだけでしたが, V8 EngineやSpiderMonkeyなどのJavaScript EngineのソースやFirefoxのソースを読み、ブラウザやJavaScriptが実行される仕組みを理解していこう!!!
4. 暗号の知識が皆無と感じたので、暗号を学習して行こう!!!
5. 難読化のロジックを理解し、難読化されたバイナリへの対処技術を身につけよう!!!難読化解除ツールやobfuscatorなどが自作できるようになろう!!!

~~~思ったこと~~~
・時代はC#/.NET!!!  

・中間言語楽しい!!!

2016年8月16日火曜日

IPAセキュリティキャンプ2016全国大会2章 〜〜〜他の活動〜〜〜

講義サポート以外の他の活動も行いました!

1. チューター成果発表
2. グループワークの裏番組でドローンを飛ばす



チューター発表についてはROSのセキュア実装を作って発表する予定でしたが、留学奨学金詐欺被害にあったためその対応で研究開発の時間が取れなくなり、ロボカップ世界大会の発表にしました。 
「面白かった」という声を某参加企業の社長からもいただき、大変うれしかったです!!!

グループワークの裏番組ではドローンの事情やドローンのセキュリティについて話しました。ドローンのデモやwebVRのデモを行いました。楽しんでもらえて何よりです!!ドローンをわざわざ持ってきた甲斐がありました!!(^^) (^^) (^^)

webVRのデモ


ですが、スーツケースは大破してしまい、0日目の準備日にして手遅れた人になってしまいましたwww

自分は名刺を作るのを現在やめています。
代わりにHappy Mini & DSpaceステッカーを作って配りました!!!
Happy MiniステッカーをPCに貼ってくれた方、ありがとうございます!!!!

 

IPAセキュリティキャンプ2016全国大会1章 〜〜〜サポート内容〜〜〜

~~~サポート内容~~~
前日は,
1. nginx for Windows設定
2. electronの環境設定(npm -g)
3. Raspberry Piの環境設定(NOOBS)
 を行っていました。

当日は,
1. HTML構文のチェック
2. Javaコードのチェック
3. Javaライブラリのインポートの仕方
4. AndroidのAPI関数の説明
5. C# .NET 4.5系関数の簡単な説明
6. Windowsのシェル環境のコマンドチェック
などを行いました!

新機能ゼミでは、個人的な趣味でWindowsのシェルにPowerShellを勧めてしまい,
リダイレクト時に文字コードがUniCode-BOMになってgccでコンパイルが通らなくなってしまった時のことはすみません!! m(_ _)m
自分もg++のリンカオプション指定時にコンマがPowerShellでパースされて動かなくなっていたときもありましたので今回のキャンプではPowerShellは悪になってしまいました笑
 ですが、オブジェクト指向型の手軽なシェルはPowerShell一強だと僕は思っています!!!
 NuGetとchocolateyパッケージマネージャーもあるよ!!

IPAセキュリティキャンプ2016全国大会0章 〜〜〜チューターとして申し込んでみた〜〜〜

久しぶりです! これからブログを定期的に更新しようと思います。

IPAセキュリティキャンプ2016全国大会に今回はチューターとして参加してきました!!

セキュリティキャンプは、学校の「お勉強」とは全く違います!!!コミケ, Maker Faire,や野外キャンプと同じような、楽しいイメージです!!全国の尖った若者が趣味で集まり、濃厚で楽しい学びの5日間が毎夏繰り広げられています!



セキュリティキャンプの楽しい体験を、同年代の仲間たちに伝えたい!!!!
そして、自分もまたセキュリティキャンプを体験したい!!!!  

しかし、セキュリティキャンプ全国大会は参加者としては一回しか出場できません。
そのため、今年はチューターとして自分がセキュリティキャンプをサポートできるか考えてみました。

1.小中高生から大学生・社会人にICT/ロボティクス/プログラミングを教えてきた経験がある。
・ロボカップなどでチームメンバーの大学生にROS, 機械学習, 制御, イベント駆動, OOP, C++/Pythonを教えている
・中学2年生のときからD.K.T. Robot Schoolで地域の小中高生にロボティクス/プログラミングを教えてきた
・高校のロボット部で部員にロボティクス/プログラミング/CAD設計を教えた
・シリコンバレーでエンジニアをしていたとき、一緒にスマブラもプレイしつつ、文系インターン生を2週間でAndroid Java開発ができるようにトレーニングした。

2. 自分の開発経験
・WEBフロントエンドとNode.js
・AndroidでOpenGL ESを使ったARアプリケーション
・ロボット/ドローンのlinuxアプリケーション
・機械学習/人工知能/画像処理/自然言語処理アプリケーション
・投資傾向可視化ソフトウェア
・WindowsでC#/Unityを用いたVRアプリケーション
・arduinoを用いた小型サッカーロボット開発
・ロボット/ドローンなどの独自プロトコル実装/解析/移植

セキュリティにはあまり経験がありませんが、自分はこの2つの経験で、セキュリティキャンプをサポートできるのではと思い、チューター申し込みました。そして嬉しいことに採用されました !!!