mixi engineer blog

*** 引っ越しました。最新の情報はこちら → https://medium.com/mixi-developers *** ミクシィ・グループで、実際に開発に携わっているエンジニア達が執筆している公式ブログです。様々なサービスの開発や運用を行っていく際に得た技術情報から採用情報まで、有益な情報を幅広く取り扱っています。

新卒研修受講レポート~セキュリティ編~

こんにちは。2017年新卒エンジニアの追田と服部です。

本記事では、4月におこなわれた新卒エンジニア向けのセキュリティ研修の大まかな概要や感想を受講者の立場からお伝えしたいと思います。

講師はXFLAG事業本部 たんぽぽGの亀山さんです。

 

内容

研修は以下の3部構成で実施されました。 

  1. セキュリティの必要性や脆弱性とその対策についての説明
  2. WebGoat(研修用やられサイト)を用いた実習
  3. スマートフォンゲームのチート事情についての解説


1. セキュリティの必要性や脆弱性とその対策についての説明
まず、企業が情報セキュリティ上の過失によって個人情報漏洩などの事故を起こしてしまった場合、どのような影響が考えられるでしょうか。
その企業の信頼の低下やイメージダウンを招いてしまうことはもちろん、それに伴う業績悪化や対応費用によって数百億円規模の損失を計上してしまう場合もあります。

本研修では過去に発生した実際のセキュリティ事故の事例を知るとともに、具体的な脆弱性の対策手法について学びました。

脆弱性の攻撃手法で最も有名なものと言えばSQLインジェクションが思い浮かぶかと思いますが、ウェブアプリケーションエンジニアが気を付けるべき脆弱性はこれ以外にも数多くあります。
IPA(情報処理推進機構)が公開している「安全なウェブサイトの作り方」によると、攻撃手法は以下の11種類に分類され、それぞれについて適切な対策をとる必要があります。

1. SQLインジェクション
2. OSコマンド・インジェクション
3. パス名パラメータの未チェック/ディレクトリ・トラバーサル
4. セッション管理の不備
5. クロスサイト・スクリプティング
6. CSRF(クロスサイト・リクエスト・フォージェリ)
7. HTTPヘッダ・インジェクション
8. メールヘッダ・インジェクション
9. クリックジャッキング
10. バッファオーバーフロー
11. アクセス制御や認可制御の欠落

次のセクションでは、研修用に用意された実際のWebサイトを攻撃することを通してこれら脆弱性を対策することの重要性を学んでいきました。

2. WebGoat(研修用やられサイト)を用いた実習
ここでは、WebGoatと呼ばれる練習用Webサイトを攻撃することで前述の様々な種類の脆弱性について手を動かしながら学びました。

f:id:mixi_engineers:20170510162020j:plain

攻撃手法についてですが、例えばBurp Suiteという脆弱性診断ツールを用いるとHTTP通信のキャプチャやリクエスト内容の書き換えを簡単に行うことができます。※悪用は厳禁です!

3. スマートフォンゲームのチート事情についての解説
ここからは、講師の亀山さんの専門分野でもあるスマートフォンゲームにおけるチートに関するお話を聞きました。
日本最大級のユーザー数を誇る、スマホアプリである「モンスターストライク」のチート対策について、実際にセキュリティエンジニアからお話を聞くことができるのはミクシィの研修ならではのことです。

資料の一部はXFLAGサイトのブログでも公開されていますので、興味のある方はぜひご覧ください。
スマートフォンゲームのチート事情(@ITセキュリティセミナー)|XFLAG ケタハズレな冒険を。
 

当日の様子(感想) 

当日印象的だったハプニングがあります。この研修ではWebGoatを使って脆弱性のあるWebサイトを攻撃してその防御手段を学ぶのですが、研修用のサーバがトラブルによってうまく動かなくなってしまったのです。

 

そんな時に同期がDockerのWebGoatイメージがあることを発見して、それぞれのPCにそのイメージを用いたDockerコンテナを立てることを立案しました。新卒同士助け合いながらそれぞれのマシンにWebGoatのDockerコンテナを立てて無事にトラブルを乗り切りました。その時は同期のチームワークを強く感じ、トラブルを通じて研修の士気が高まりました!

f:id:mixi_engineers:20170510162053j:plain

1.セキュリティの必要性や、脆弱性とその対策についての説明

 

Webサイトを作る上で脆弱性を意識して開発することの重要性はわかっていたつもりでした。しかし、これまでに起きたセキュリティ事故の事例やその被害規模を紹介されると、認識が甘かったなと感じると同時にどのようにすればセキュリティ事故を防ぐことができるのか俄然関心が高まりました!

中でもセキュリティ事故と株価の関係が紹介された時が一番盛り上がっていましたね(笑)。

 

2.WebGoat(研修用やられサイト)を用いた実習

 

Webサイトを攻撃するというのは本当なら犯罪ですが、今回はWebGoatという攻撃用のWebサイトなので安心して攻撃することができました(笑)。

このWebGoat、攻撃手法ごとに問題を解いていくようにできており、その問題量も膨大で研修時間で全て解くことは不可能なので、私は、

 

1.SQLインジェクション

2.XSS(クロスサイトスクリプティング)

 

の2つに絞って問題を解き進めました。

 

どちらも有名な攻撃手法ですが、実際に攻撃者側に立ってみて攻撃してみると、意外と簡単に情報の入手や改ざんができてしまうものだと感じました。

 

攻撃手法に詳しくなくてもネット上の情報があれば、意味を理解していなくても簡単にWebサイトを攻撃できてしまいます。攻撃が簡単にできてしまうからこそ、常に防御のことを考えてアプリケーション開発をしなくてはいけないのだなと改めて感じました。

 

3.スマートフォンゲームのチート事情についての解説

 

Webサイトに対する攻撃は多少なりとも知っていましたが、昨今のスマホゲームのチート事情がどうなっているのかは恥ずかしながら知りませんでした。

 

しかし、チートに利用できるツールが出回っており、メモリの値を書き換えたり通信内容を改変することによって簡単にできてしまうことがわかりました。ツールさえあれば中学生でも簡単にチートすることは可能です。だからこそ、しっかりと対策を練らなければいけないのだなと痛感しました。

 

ゲームの不正行為で狙われやすい箇所はおおまかに、

1.メモリデータ

2.ストレージデータ

3.ロジック

4.通信

5.操作

と分類され、データ改変や操作の自動化などが行われる可能性があります。

 

例えば、メモリデータの改変はチートでもメジャーな手法なのですが、今回弊社のモンスターストライク(以下、モンスト)を題材に考えてみます。

 

モンストでは、ガチャを引く際「オーブ」というアイテムを使用します。現在10個のオーブを所持しているとします。

不正ユーザはこのメモリ上の10という数値をプロセスメモリエディタというツールを使って数値を999に改変し、オーブを不正に増やそうとするかもしれません。

 

では、この場合どのような対策が考えられるでしょうか?

 

-メモリ上の値を暗号化する

-計算に利用する数量をクライアント側に持たない

 

など、考えられる対策はいくつかあります。

 

この時大切なのは、選んだ対策はそもそもの目的との折り合いがつく対策であるのか、などを考えしっかりと吟味することです。

 

また、サーバの処理はほぼ手出しができないので、近い将来クラウドゲーミングのように処理の大半をサーバ上で行うようになれば昨今のチート手法はほぼ無意味となるかもしれません。

 

しかし、現状はスマホ側でゲーム処理を行うケースも少なくないため、これらのポイントを押さえた対策が必要となります(操作の自動化は厳密にはチートではないが不正行為を目的に行われる事もある)。

 

また開発時は面白さや快適さを重視するので、Webアプリほどセキュリティに意識が向かないことが課題として挙がっていたことに納得すると同時に、難しさも感じました。

ゲーム開発者としてユーザに対してワクワク感を提供することを第一に考えたいけれども、そうするとセキュリティがおろそかになってしまうというジレンマは辛いものです。

 

まとめ

今回の研修では座学のみならず、実際に攻撃してみることでWebアプリを開発する上でのセキュリティの重要性を実感することができました。

 

また、昨今巷を賑わせているスマホゲームのチート対策も学ぶことができます。

アプリからゲームまで様々なセキュリティを取り扱う研修はなかなか珍しいのではないでしょうか。