JSSEC セキュアコーディングデイ #1 |事例で学ぶセキュアコーディング
3月25日に秋葉原にある富士ソフト株式会社のセミナールームにて一般社団法人日本スマートフォンセキュリティ協会(JSSEC)技術部主催のイベント「セキュアコーディングデイ」が開催されました。セキュアコーディングデイでは弊社熊谷が登壇し「事例で学ぶセキュアコーディング」と題して、脆弱性診断の現場から見た脆弱性の現状を紹介しました。その講演内容を3回に分けて公開します。
事例で学ぶセキュアコーディング
講演内容は次のとおりです。
- 脆弱性診断とは
- 診断環境について
- 事例紹介
脆弱性診断とは何かということから、脆弱性診断において使用しているツールの紹介、今まで行った脆弱性診断の中からいくつか事例をピックアップし、どういった脆弱性が発見されたのか可能な範囲で問題のコードと共に紹介しました。
脆弱性診断とは
脆弱性診断とは何でしょうか。IPAが公開している「脆弱性検査と脆弱性対策に関するレポート」によると、脆弱性診断とは
ソフトウエアやシステムに対して脆弱性がないかどうか診断するものである
と記載されており、脆弱性診断をおこなう目的は
ソフトウエアやシステムにある脆弱性を低減することにある
となっています。また、情報セキュリティ早期警戒パートナーシップガイドラインによると脆弱性とは
ソフトウエア製品やウェブアプリケーション等において、コンピュータ不正アクセスやコンピュータウイルス等の攻撃により、その機能や性能を損なう原因となり得るセキュリティ上の問題箇所である
と定義されています。すなわち、脆弱性診断とは
対象となるソフトウエアやシステムにセキュリティ上の問題箇所があるかどうかを調べること
ということになります。企業および個人に対するスマートフォンの普及は目覚ましい物があります。いまや一人一台ではなく数台所有しているということは珍しいものではなくなっています。またスマートフォンの形態上多くの個人情報が含まれており、スマートフォンそのものやその上で動作するアプリに脆弱性があると、攻撃者にとっては都合の良い穴となり攻撃の標的になりえます。
よって、Webアプリの脆弱性診断だけではなくAndroidアプリを含むスマートフォンアプリの脆弱性診断というものは年々重要になってきています。
脆弱性診断
では、スマートフォンアプリに対する脆弱性診断はどのようなものになるのでしょうか。弊社では、Webアプリ診断やIoT機器セキュリティ診断等もおこなっていますが、
- Androidアプリ脆弱性診断
- ゲームチート対策診断
ここではAndroidアプリおよびゲームチート診断について、紹介します。
Androidアプリ診断では主にWebView周りやSSL/TLS周り、ログ、SDカード、データ共有機能、端末データ、ファイルパーミッション、アプリ連携等を静的・動的解析により確認していきます。また、これ以外にもセンシティブなデータがハードコーディングされていないかといった点についても確認したりします。
Androidアプリの中でもここ最近需要が多いと見られているのがゲームです。Google PlayやAppStoreのランキングを見てみるとゲームアプリがランキングの上位を占めています。
ネットワークを使用せず端末内で閉じているゲームであれば、脆弱性による脅威・影響という点では一般的なAndroidアプリとほぼ変わらないのではないでしょうか。しかし、近年のゲームはネットワークを通してデータをやり取りしたり、他ユーザと交流しながら進行するというものが一般的になりつつあります。チートされることにより、例えば、課金を回避し運営会社に金銭的な影響を与えたり、レアアイテムを容易に取得したり、ステータス・スコア等を改ざんしゲームバランスを崩して他ユーザに影響を与えたりといったこと考えられるため、ゲームチート対策診断も重要なものになっています。
診断環境
実際にスマートフォンアプリを診断する上で使用しているツールはどのようなものでしょうか。ここではその一例を紹介します。
- プロキシ
- デコンパイラ
- デコード・エンコード
- デバッガ
主にこれら機能を持ったツールを使用して、脆弱性の有無を診断しています。
プロキシ / Burp Suite
まず、プロキシですが、これはWebアプリの脆弱性診断でも使用されているBurp Suiteを使用しています。
ネットワークを通してデータのやり取りをしているアプリが対象の場合は、端末とサーバ間の通信内容を確認するため、これが必須です。root化した端末にてiptablesを使用することで、端末の通信をburpに飛ばすようにしています。
デコンパイラ / JEB
Androidアプリのデコンパイラの一つ、PNF Softwareが開発販売しているJEBを使用して静的解析をおこなっています。smaliとJavaのコードを並べながら確認したり、難読化されているクラス名やメソッド名を適宜変更したり、コメントを入れながらコードを確認できるため、静的解析が楽におこなえます。また、JEB自体のAPIが公開されているということも一つの特徴でありJavaやPythonで機能を拡張するためのextensionを作成することが可能です。
デコンパイラ / ILSpy
.NETアセンブリのデコンパイラです。最近のゲームアプリではUnityが多く使用されています。Unityのアプリは.NETアセンブリになっているため、それを解析するためにILSpyを使用しています。
デコード・エンコード / Apktool
apkファイルをデコードしリソースファイルを取り出したり、一部コードを書き換えて再エンコードしたりするときに使用しています。
デバッガ / IDA
動的解析やネイティブコードの静的解析をおこなう場合に使用します。IDAにはandroid_serverツールが付属しており、adbコマンドを使用してこのツールを端末にpushし実行しておきます。あとは、IDAから端末にpushしたandroid_serverに接続できるようにポートフォワードしIDAでアタッチします。これによりステップ実行等しながら、アプリの挙動を確認することが可能になります。
次回
今回は講演内容の中から脆弱性診断と診断環境について紹介しました。次回は脆弱性の事例を紹介します。