! This post is also available in the following languages. 英語, 韓国語

Spark、Mesos、Zeppelin、HDFSを活用した大容量セキュリティデータの解析

LINE Plusでゲームセキュリティ開発を担当しているWJ、KHです。

莫大なユーザーがモバイルからアクセスするLINEゲームにおいて、データの迅速な解析と対応はそう容易なものではありません。LINEゲームへのアクセスと海外ユーザーの大幅な増加に伴い、様々なアビューズ(不正とされる操作を通じて不当な利益を得る行為)行為が次々と観察されています。アビューズ行為は、正常にゲームを利用する善意のユーザーに迷惑を掛けることはもとより、ゲームサービスそのものにも直接的な影響を及ぼします。ゲームの安定性を守り善意のユーザーを保護するためには、アビューズ行為に迅速に対処することがとても大事です。

アビューズ行為が探知されたら、異なった形式のログを関連付けて解析しその問題の原因を洗い出して修正する必要がありますが、このとき一番の障壁は、大容量のログデータの速やかな処理でした。LINEで扱う各種データ量の増加により、従来の伝統的なビッグデータ処理方式では現象が発生してから事象を確認するまで数十分、数時間が掛かってしまいます。また、データ形式(RDB、NoSQL、File、API)や大容量サービスのためのData Shardingのような技術導入などの理由から、すべてのデータを連携することも容易ではありませんでした。何よりも、人気ゲームの場合は流入されるデータ自体が非常に多いのです。いろんな観点から迅速なデータの処理を可能にする多彩なオープンソースを組合せ、その可能性をチェックしてみました。結果として、作業の分配とリソースの活用にはApache MesosとApache Sparkを活用し、データのビジュアライズ(可視化)にはApache Zeppelinを採用することが希望のデータ処理要件に最も近いことが分かり、適切な構成を試みることになりました。

全体の構成としては、SparkとMesos、Zeppelin、HDFSのオープンソースになります。こうやっていろんな形式のデータを繋げ、15TBほどのデータを10分以内に処理しその結果を確認できる安定的な解析環境を作り上げることができました。また、様々なアビューザをデータ(ゲーム、アクセス、ビリング)に関連付けて解析し抽出します。なお、リスクの高いユーザーを素早く照会し確認するという要件を満たす仕組みにしました。この仕組みのことをAirborneと名付けました。

Airborne構成の目標

Airborne構成の際には、下記の内容を考慮しました。

  • データの並列分散処理
  • 分散環境の作業分配と実行の最適化のためのシステムリソース管理
  • 柔軟なサーバー拡張技術
  • 効率良いビジュアライズツール
  • ストリーミングデータ処理
  • 障害に対する克服

Airborneアーキテクチャ

Airborneのアーキテクチャは、下記図のとおりです。

Airborneシステム

Airborneシステムは、下記図のように構成しました。 airborne system

RDB、SNS、LOGなど様々な形式のデータは、Python、Perl、C言語を使って収集しています。MySQLに限り、リアルタイム時系列データを収集するためにmysql binlogユーティリティを使います。また、クエリを通じてデータ取得する代わりに、リモートで複製ログを収集しパースする方法も利用します。

上記の構成でSparkはstandaloneモードで使用し、Mesosでリソースを管理します。ローカリティのためにHDFSとSpark executorは、極力近いところに配置することにしました。また、I/O速度を確保するためにdiskにはSSDを使用しました。初期実行時にMesosを通じてHDFSに保存されているSpark executor packageの管理位置に圧縮ファイルを解凍すると実行環境が自動的に構成されます。また、Zeppelinを使って必要なデータを定義のうえ構成しSpark SQLを使ってデータを効果的に素早くビジュアライズすることができます。

分散データのリポジトリにはCassandra on Mesosを活用して大容量処理で得たサマリー情報を保存する用途で使います。Cassandra nodeは、Marathonを通じて柔軟な拡張ができるように構成しました。Marathonを通じてフォールトトレランスを実行します。必要な場合は、nodeのfactorを必要なだけ追加してクラスターを自動的に拡張することができます。

セキュリティデータの解析

数々の試行錯誤を経た末にAirborneを活用していろんなセキュリティ業務を実行できるようになりました。大容量データを、一般的なクエリを使って素早く検討し、これをビジュアライズすることによって効果的に問題箇所を確認することができるようになりました。様々なタイプのデータを一行につなげ、一般的な方法では解析が難しかったたデータも、より柔軟に確認することができます。一部のデータに対しては、リアルタイムレベルのビジュアライズも可能です。

次に探知、解析中のいくつかのアビューズケースについて紹介したいと思います。

ケース1 – ビリングデータ解析でのコインアビューズの探知

case1 周期的にビリングデータの解析を行い、既定のフィルター条件を使ってアビューズ要素を探知します。一部アビューズ要素のポリシーによる対処を施してアビューズ要素が減少することを確認できます。

実際に対処を実施すると、上記グラフの矢印のようにアビューズが減少していることが確認できます。アビューズのタイプは、ハッキングツールを利用してメモリを改変したり、コードを変更したりして実際のロジックとは別の行動をするなど様々な方法がありますが、このようなアビューズをデータの観点で探知して対処した事例です。

ケース2 – LINE Rangersゲームデータ解析でのアビューズの探知

case2 Airborneでは、様々な手法でのハッカーの試みを探知することができます。また、ゲームデータを解析して必要な箇所に適切なセキュリティ対処を施し、その効果をすぐに確認することができます。探知されたアビューズ要素は、日毎・時間毎に定期的に自動解析を行い持続的にモニタリングしています。

上記は、特定の国でソーシャルを通じて広がっている不正行為を探知し不正行為を対処した例です。矢印のように、対処によってアビューズが解消されたことが確認できます。実際にゲームを実行せずに経験値を稼いだり、ランキングを操作する場合も不正行為と見なし対処した事例です。

ケース3 – LINE Bubbleアビューズの探知

case3 Airborneでは、データを素早く簡単に扱えるため新展開のサービスにも常時モニタリングが可能です。

新展開サービスの場合、初めの頃はアビューズ要素が発生しません。しかし、サービスが成長するともにアビューズ要素はサービスのリスクとなるため、他のサービスで観察された同類のアビューズの発生有無を必須的にモニタリングしています。

黄色と赤色の楕円表示の箇所は正常なデータです。タイプを分け多角度から確認していることを示しています。

まとめ

Airborneを活用することで、これまで扱うことができなかった案件も上記例のように開発部門と運営部門が直接問題を確認し対処することが可能になりました。まだ初期の段階なので、これから色々な状況や問題に直面するだろうと思いますが、これまで迅速に処理できなかったデータに対し、素早く対処できるようなったことに意味があると思います。

ビッグデータ処理環境はどんどん発展しています。しかしながら、目的に応じた環境を構築し目標を成すことは依然として難しいところです。 ゲームセキュリティ開発では、ゲームの安定性と不正ユーザーの速やかな探知のためにこのような体系を構築しておくことでユーザーが安全にゲームを楽しめるように励んでいます。ゲームセキュリティだけでなく、迅速なデータ処理が必要な場面にこのシステムがお役立ちできればと思っています。