[レポート/LINE DM #16] スマホゲームのセキュリティ・CTF・XSS脆弱性:セキュリティについてお話ししました
先日「LINE Developer Meetup in Fukuoka #16」を開催しました。
今回のテーマは、 “セキュリティ” 。
LINE株式会社でセキュリティに関わる業務に従事しているエンジニア3名が登壇しました。
その様子を、今回はLINE Fukuoka開発室の本郷がお届けします。
今回のテーマは、 “セキュリティ” 。
LINE株式会社でセキュリティに関わる業務に従事しているエンジニア3名が登壇しました。
その様子を、今回はLINE Fukuoka開発室の本郷がお届けします。
▼LINE Developer Meetup in Fukuoka #16 セッション一覧
2.DEFCON CTF Final 参戦記 / eggpod
3.実例に学ぶXSS脆弱性の発見と修正方法 / ma.la
1.スマホゲームのセキュリティやってみた / 愛甲健二
最初のセッションではスマートフォンゲームの解析や診断を行っている愛甲が登壇しました。
このセッションでは愛甲が作成したゲームを例にゲームのチートの種類を簡単に説明したあと、ゲーム開発のプラットフォームであるUnityやCocos2d-xで作られたゲームの解析方法について解説がありました。
UnityはAndroid/iOSに限らず、複数のプラットフォーム向けのバイナリを出力することをコンセプトとしたゲームエンジンですが、最近ではC#などで開発されたプログラムを中間コードにしたあとにC++のコードに変換しコンパイルしてARMのバイナリを作るオプション(IL2CPP)があるようです。ARMバイナリを解析するときにシンボル情報はないのですが、メタ情報を保存している別のファイルからシンボル情報を探してきて読み込むスクリプトのデモがあり、便利そうだなと思いました。
相手のサーバに侵入した後、パッチされたバイナリの差分を取り脆弱性を探したり、自分のサーバに受けた攻撃コードをそのまま他のチームへ送信したり、システムコールをフックして攻撃を弾くなどの話が印象に残りました。
また、新DEFCONのルールではDEPもASLRもなくメモリプロテクションの環境が10年くらい前のシステムと同等で現在の環境とはかけ離れているという話もありました。
≪発表資料≫
【 関連採用情報 】
このセッションでは愛甲が作成したゲームを例にゲームのチートの種類を簡単に説明したあと、ゲーム開発のプラットフォームであるUnityやCocos2d-xで作られたゲームの解析方法について解説がありました。
UnityはAndroid/iOSに限らず、複数のプラットフォーム向けのバイナリを出力することをコンセプトとしたゲームエンジンですが、最近ではC#などで開発されたプログラムを中間コードにしたあとにC++のコードに変換しコンパイルしてARMのバイナリを作るオプション(IL2CPP)があるようです。ARMバイナリを解析するときにシンボル情報はないのですが、メタ情報を保存している別のファイルからシンボル情報を探してきて読み込むスクリプトのデモがあり、便利そうだなと思いました。
私自身も解析の経験があるので、Unityのバイナリ生成までの流れや解析の方法など興味深かったです。
≪発表資料≫ CTFといえば、最近は日本でも SECCONなどが開催されていますが、 DEFCON CTF は歴史も古く、世界中で予選が開催されており、最も有名な大会です。それとは別に今年はDARPA(アメリカ国防高等研究計画局)主催の CGC(Cyber Grand Challenge)というコンピュータ同士のCTFが開催され、優勝したプログラムがDEFCON CTFにも参戦していました。そのため、例年とはDEFCON CTFのレギュレーションが異なったようです。
相手のサーバに侵入した後、パッチされたバイナリの差分を取り脆弱性を探したり、自分のサーバに受けた攻撃コードをそのまま他のチームへ送信したり、システムコールをフックして攻撃を弾くなどの話が印象に残りました。
また、新DEFCONのルールではDEPもASLRもなくメモリプロテクションの環境が10年くらい前のシステムと同等で現在の環境とはかけ離れているという話もありました。
前から興味があったCGCの話が聞けてよかったです。賞金2億円という規模はすごいですね。
*CTFとは: コンピュータセキュリティ技術の競技。
≪発表資料≫ *CTFとは: コンピュータセキュリティ技術の競技。
3.実例に学ぶXSS脆弱性の発見と修正方法 / ma.la
最後はma.laが、自らの経験をもとにXSS脆弱性について「発見→対策→傾向」という流れに沿って話しました。
「発見」ではコードレビューにおいて、どうやって脆弱性を探しているかを入力と評価箇所に注目しながらagとgrepを使って絞り込んでいく簡単なデモがありました。
「対策」では出力に注目し、HTMLの生成ではTemplate Engineを使う、JSは動的に作らないなどというプログラムを書く上で注意する点と、「発見」で紹介した方法を使って、チームメンバーがお互いに脆弱性を探してみるという方法も提案されました。最後に「傾向」では、SNSを使って友人に共有するソーシャルボタンなどプラスアルファの機能に脆弱性が多い傾向があり、そういった機能を作るときに危険を察知するセンスが必要ということで締めくくられました。
「発見」ではコードレビューにおいて、どうやって脆弱性を探しているかを入力と評価箇所に注目しながらagとgrepを使って絞り込んでいく簡単なデモがありました。
「対策」では出力に注目し、HTMLの生成ではTemplate Engineを使う、JSは動的に作らないなどというプログラムを書く上で注意する点と、「発見」で紹介した方法を使って、チームメンバーがお互いに脆弱性を探してみるという方法も提案されました。最後に「傾向」では、SNSを使って友人に共有するソーシャルボタンなどプラスアルファの機能に脆弱性が多い傾向があり、そういった機能を作るときに危険を察知するセンスが必要ということで締めくくられました。
このレビューのやり方は特に参考になり、よりセキュリティを意識したレビューのための気付きとなりました。
≪発表資料≫
▼懇親会の様子
今回も大変多くの方にお越しいただき、本当にありがとうございます。
セッション後恒例の懇親会にもほとんどの方がご参加、懇親会でもセキュリティの話題があがり、なかにはインターン先に自分のプロダクトをねじ込んできた方もいて、刺激をもらいました。
また、弊社オフィスを会場(一部)ご利用いただいた「 セキュリティ・キャンプ九州 in 福岡 2016」のうち、25歳以下の大学院生・学生・生徒さんが対象の“専門講座”がちょうど翌日からスタートということもあってか、今回「LINE Developer Meetup」は学生さんが多く参加されていました。
懇親会も、いつもより幅広い世代が集まりましたが、同じテーマで交流を深められた楽しい時間となりました。
【 関連採用情報 】
LINE Fukuokaでは、開発エンジニアの募集を行っております。
学生向け長期インターンの受け入れも随時行なっておりますので、こちらも併せてご覧ください。
学生向け長期インターンの受け入れも随時行なっておりますので、こちらも併せてご覧ください。
・LINE Fukuoka 公式企業サイト:採用ページ