アシアルブログ

アシアルの中の人が技術と想いのたけをつづるブログです

Monacaアプリで重要なデータを保存する3つの方法

Monacaでアプリを開発していて、外部に漏洩できない重要なデータを保持したいと思うことがあるはずです。今回はその方法について幾つか紹介します。



まとめ



  1. Keychainプラグインを使う
  2. サーバサイドを使う
  3. セキュアストレージを使う


Keychainプラグインを使う



これはiOSに限定した利用法になります。KeychainPluginを使って行います。Keychainを使えばiOSが標準で提供するセキュアなデータの保存が実現します。



まずMonacaにてプラグインKeychainPluginをインストールします。そのためGoldプラン以上の方法になります。







インストールしたらiOSアプリ設定、ビルド設定を行います。任意のプラグインを使った場合、Monacaデバッガーではなくアプリとしてビルドとインストールをしなければなりません。ビルド設定時にはあらかじめ作成した開発者証明書などをアップロードしてください。







また、ビルドを実行する際にはプロビジョニングが求められますので、iOSアプリ設定で指定したIDでプロビジョニングを作成しておいてください。







デモアプリとしてビルドしてインストールした結果が下記になります。







Keychainアクセスを使ってデータを保存しました。







存在しないキーの場合、nullが返ってきます。







そしてキーを指定してデータの取得ができます。







Keychainプラグインによってデータを安全に保管できるようになります。ユーザのトークンやユーザIDなど個人に関わる機密データを扱う際に便利かと思います。



サーバサイドを使う



サーバサイドに保存したデータをアプリに返す方法です。この場合、一旦何らかの認証(OAuth2など)を行った上で設定やアプリを使う上で必要なデータを渡すようにします。サーバサイドにあるので何らかの問題が起きてもサーバ側の対応だけで済む(トークンをリフレッシュするなど)のが利点ですが、利用時に必ずインターネット接続が必要になるのが不便かも知れません。



セキュアストレージを使う







Monacaエンタープライズプランではセキュアストレージを提供しています。セキュアストレージはデータを暗号化して保存しますので安全な利用ができるようになります。内部ストレージ全体を暗号化しますので、万一機器を紛失したといった場合においてもデータ漏洩を未然に防止します。



Moancaエンタープライズ - 大企業向けHTML5ハイブリッドアプリ開発プラットフォーム






アプリにおいてデータのセキュリティを確保するというのは大変なことです。毎回ログインさせるなどといった仕組みは利便性と相反するものになるでしょう。データの重要性をランク付けて、必要なデータの種類に応じてセキュリティの方法を変えてみると良いのではないでしょうか。

Burp Suiteで脆弱性診断

こんにちは。坂本です。

今回は脆弱性診断ツールができるBurp Suiteというツールを紹介します。



このセキュリティ界隈では知らない人はいない有名なツールです。

Burp Suiteは脆弱性診断に必要な機能を揃えています。
・Webサイトへリクエストする情報を改ざんして脆弱性がないか確認する機能
・WebサイトをクローリングしてURLのリストを取得する機能
・取得したURLに対して脆弱性がないか診断をする機能
などなど

この機能を実現するためBurp Suiteはプロキシサーバとなります。
プロキシとなったBurp SuiteはWebサイトとブラウザの間に入りリクエストを傍受し脆弱性診断を行うことができます。



Burp Suiteの購入から起動


Burp Suiteで脆弱性診断をするにはライセンスを購入する必要があります。
まずは公式サイトでBurp Suiteのダウンロードを行います。

http://portswigger.net/burp/

2015年4月3日の価格では1年当たり1人299ドルが必要になります。
高いと思われると思いますがBurp Suite以外の信頼性のあるツールに比べると100倍安かったりします。

Burp Suiteの本体はjarファイルとなっておりMacであればダブルクリックで
Windowsであればbatファイルからの起動となります。

起動するとシンプルが画面が表示されます。



Burp Suiteの設定


購入したライセンスをBurp Suiteに適用させると脆弱性診断の機能を利用することができます。

Burpのプロキシ設定


診断を行う前にプロキシの設定を行う必要があります。
Proxyタブ中のOptionsタブを開きます。


AddボタンをクリックしてBind to portにポート番号を入力します。
ここでは8080を使用します。


プロキシ設定が上手くいけばリストに127.0.0.1:8080が追加されます。
これでBurp SuiteはIPが127.0.0.1で8080ポートを使ったプロキシが立ち上がります。


ブラウザのプロキシ設定


ブラウザの設定にプロキシの設定があるはずなので以下のようにHTTPプロキシと
SSL(HTTPS)プロキシに127.0.0.1と8080ポートを指定します。


これにより以降のブラウザのアクセスはすべてBurp Suiteプロキシを介したアクセスとなります。

脆弱性診断サイト設定


このままでは脆弱性診断ができないので診断するサイトを設定します。

ScannerタブのLive scanningタブを開いてください。


Include in scopeのAddをクリックして診断するサイトを追加します。
ここでは仮にwww.test.comとなっていますが実際には自分のサイトのドメインを入力してください。
間違っても関係のない有名なサイトのドメインを入力してはいけません。


入力がうまくいけばリストに追加されます。


診断開始


以上の設定が終わりましたらブラウザで自分のサイトにアクセスしてみてください。
URLに対して脆弱性診断が開始されます。
1つのURLに対して行われるリクエスト数はGET、POSTパラメータによって変わります。


脆弱性を含むサイトだった場合はScannerタブのResultsタブに結果が表示されます。
以下の例では致命的な脆弱性は出ていませんがXSSSQLインジェクションが検出されると赤字で結果が表示されます。


どのような脆弱性を検出するかはScannerタブのOptionsタブで設定することができます。


さいごに


いかがでしたでしょうか?
脆弱性診断は面倒と思われますがこんなに簡単に検出できます。
逆に言うと少しの知識があればあっという間に脆弱性を悪用されてしまうことを意味しています。

最近はセキュリティを考慮したフレームワークを利用することがスタンダードだと思いますが
思いがけない穴が見つかることもあります。

くれぐれも気をつけてサイトを構築していってください。

Canvas Fingerprintingというトラッキング技術

坂本です。

今回はユーザをトラッキングする技術の一つであるCanvas Fingerprintingについて取り上げたいと思います。

Canvas Fingerprintingとは



Canvas Fingerprintingはマシン固有の振る舞いをするHTML5 CanvasAPIを使ったトラッキングID生成技術です。
このAPIはマシンのGPUやグラフィックドライバによって振る舞いが変わります。
そのため、APIを使ってレンダリングされたグラフィックスをトラッキングIDとして利用することでユーザの追跡を行うことができるわけです。

特徴



この技術の特徴としてはユーザがCanvas Fingerprintingの追跡から逃れることが難しい点です。
これまでのアクセスログ解析ツールではCookieに記録してあるトラッキングIDでユーザの動向を追跡するのが主流となっていました。
そのため、追跡されたくなければCookieを削除してしまえば良かったのです。

ところがCanvas FingerprintingはアクセスごとにCanvas FingerprintingでトラッキングIDを生成してサーバへ送るため特別なことをしないかぎりは追跡が続いてしまうわけです。

今のところ防ぐ手段は
Javascriptを停止する。
・Tor BrowserなどのCanvas Fingerprinting対策されたブラウザを使用する。
しかありません。

Javascriptを停止してしまうと多くのWebサイトが正常に動作しなくなりますし
Chrome大好き人間からするとTor Browserを使用するには抵抗があります。

精度の問題



あまり弱点の無いトラッキング技術に思われそうです弱点もあります。
Canvas Fingerprintingで生成されたトラッキングIDはマシンによっては安定しないようなのです。
GPUやグラフィックドライバの実装によっては特定の端末では全て同じトラッキングIDが出力されたり
ブラウザの設定によっては同じマシンなのに違うトラッキングIDが出力されたりするようです。

実際に使用するためには



ちょっと難しそうな印象を受けると思いますが今では簡単にトラッキングIDを生成するコードがGithubで公開されています。
https://github.com/Valve/fingerprintjs



$ bower install fingerprint


でインストールしてJavascript



var fingerprint = new Fingerprint({canvas: true}).get();


これだけでトラッキングIDを取得できます。
※試しに利用して何かあっても責任は取れませんので注意してください。

本当に危ないのか?



今のところ追跡をされても問題はないと考えられていますが本当のところどうなのでしょう?
悪用されてしまうとしたらどのようなものになるか考えてみます。

ダミーアカウントの無意味化



アカウントを複数持って怪しいサイトではダミー情報を入力して試すなんてことがあると思います。
Canvas FingerprintingのトラッキングIDと個人情報をどこかから取得できれば個人は特定されてしまいます。
こんな事になればメールを入力していないのに怪しいサイトからスパムメールが飛んでくることになりかねません。

個人情報問い合わせサービスの出現



ラッキングIDをキーにして個人情報を取得できるWebサービスが出てきたらとんでもないことになりそうです。
名簿業者なんかが始めたら恐ろしいことになります。
この人はこっそりアダルトサイトを使ってるとか個人情報に付加されてしまったり。

というかすでに存在しているのかも・・・。

まとめ



Canvas Fingerprintingと英語で言われても今のところ危機感があまり無い気がします。
でも、よく考えるとFingerprintingとは日本語で指紋のことなんですね。
現実世界で例えるならレストランで食事をし終わった食器の指紋を店が記録してるくらいの気持ち悪さでしょうか。
取られたからってどうなるという訳ではないですが気持ちのいいものではありません。

この技術がどのように使用されていくのかは気にしていたほうがいいと思います。

DOM-based XSS

ようやくアシアルに馴染んできました坂本です。

今回はWebアプリケーションのセキュリティのお話です。
Webアプリケーションのセキュリティと聞くとサーバサイドスクリプト脆弱性と思われがちです。
年々攻撃手法は多様化しHTML5JavascriptだけのWebアプリケーションでも脆弱性は発生します。

例としてありがちなリダイレクトページとその問題です。
リダイレクトの方法はいくつかありますが簡易的なものの一つにリダイレクト先のURLをハッシュパラメータ(#マーク以降のパラメータ)で渡し、Javascriptを使ってリダイレクトさせる方法があります。

下記が脆弱性を含むリダイレクトするコードです。



<script type="text/javascript">
var redirectUrl = decodeURIComponent(window.location.hash.slice(window.location.hash.indexOf( "?url=" ) + 5));
if (redirectUrl) window.location = redirectUrl;
</script>


このコードをindex.htmlに仕込んで下記のようにハッシュパラメータを付けてアクセスしてください。

http://localhost/index.html#redirect?url=javascript%3aalert%28%22XSS%22%29%3b

するとビックリほど簡単にアラートが表示されます。
そうです、これがクライアントサイドで完結してしまうDOM-based XSSと呼ばれる脆弱性の1例です。

ハッシュパラメータに仕込まれた悪意のあるJavascriptコードがブックマークレットのようにwindow.locationを使ってアドレスを書き換えられることでXSSが発動します。
この攻撃手法を使えば好きなコードを走らせることができるのでCookieの値を外部のサーバに送ることが可能です。

この手法は意外と検出が難しいという問題もはらんでいます。
ブラウザの仕様上、ハッシュパラメータはサーバに送られる事がないためサーバサイドに高価な攻撃検出ツールがあったとしても検出することができません。

攻撃検出するツールが進化してこのような脆弱性を診断できるようになるまでは開発者は気をつけて実装しれなければいけません。

「PHP×symfony」 開発者向け、一歩先をいくためのテクニカルセミナー、第二弾の開催

アシアルでは、現在、全5回にわけて「開発者向け、一歩先を行くためのテクニカルセミナー」を開催しています。前回6月16日に開催した「PHP×セキュリティ」では当初予定の100名を超える、120名様のお申込をいただき、途中で定員枠を拡大することになりました。

セミナーで実施したアンケートでも、以下のようなコメントをいただいております。

------------------------------------------------------
・理解し易かった(サンプルコード、プログラマ基準で具体的なコード、脆弱性の解説とPHPの具体的な対策、例をあげながらの説明、セキュリティのポイントを網羅、ほどよい内容)
・見過していた問題や更に考慮すべき部分が明確になった
・参考URLがよかった
・具体的な内容で良かった(対策、攻撃手法)
PHPに特化した内容だった
・システムを構築するにあたり、考慮すべきことが明確になった(php初心者)
・セキュリティに対しての意識が向上
・短い時間で良くまとまっていた、全体像を把握できた、要点を学べた
・セキュリティに興味がわいた
PHPのセキュリティについて幅広く知ることができた
・改めて知識を深めることができた
・最新の情報を交えて話してもらえた、最新のトレンドを知ることができた
------------------------------------------------------

現在、第二回目「PHP×symfony:symfonyアジャイルWeb アプリケーション開発」について、申込を絶賛募集しております!!

お申し込みは、以下URLよりお願いします。
http://www.asial.co.jp/seminar/




【開催概要】

日程: 7月12日(月) 10:00 ~ 12:00(※ 開始30分前より入室可能)
会場: 山王健保会館2F 多目的ホール
交通: 地下鉄銀座線・南北線:溜池山王駅 7出口 徒歩3分
    地下鉄千代田線:赤坂駅 1出口 徒歩5分
    地下鉄銀座線・丸ノ内線:赤坂見附駅出口 下車徒歩7分
主催: アシアル株式会社
受講対象者: Webシステムにおいて1~3年の開発経験のある方
定員: 100名(※ 定員となり次第、受付を終了させていただきます 。)
参加費: 無料(事前登録制)


【第2回 PHP×symfony】symfony でアジャイルWeb アプリケーション開発

Web に限らず、アプリケーション開発において開発スピードは非常に重要な要素の1 つです。symfony※1は数あるPHP フレームワークの中でも特に機能が豊富で、アプリケーションのひな型の自動生成などアジャイル開発に必要な機能を多く備えています。

本セミナーではsymfony を活用したアプリケーション開発の流れを、その豊富な機能の紹介と合わせて、講演いたします。

※1 symfony はPHP 5.2.4 以降に対応したオープンソースのフレームワークで、世界規模で注目されているPHP フレームワークの1 つです。開発当初からアップデートが積極的に行われており、symfony のリード開発者であるFabien Potencier 氏が共同設立したフランスのSensio 社が、スポンサーとして継続的に開発をサポートすることを表明されており、安定的なフレームワークの一つと言えるでしょう。

講演者:アシアル株式会社 小川 雄大(オガワ カツヒロ)アシアル株式会社のアーキテクトで、symfonyのエバンジェリスト。symfonyを使ったアプリケーションの開発を行うだけでなく、symfonyの導入コンサルティングも行っている。
日本Symfony ユーザー会の設立者の一人でもあり、「もっと知りたいsymfony(More with symfony)」の日本語翻訳や日経ソフトウエアにsymfonyの記事を寄稿するなど、個人としても様々な活動を行っている。

「PHP×セキュリティ ~セキュアなPHPシステム開発テクニック~」の開催

アシアルではPHP開発者の皆様向けに「PHP開発者向け一歩先を先をいくためのテクニカルセミナー」と題して、6月より、押さえておくべき重要なテクニックや、最近話題のテクニックにテーマを絞って、全5回にわけてセミナーを開催していきます。

PHPが普及し始めた頃においては、PHPは手軽に短期間で開発できる言語として注目を集めました。しかし、数年を経てプログラミング言語としても成熟し、昨今では、大規模なシステム開発に取り入れられるようになり、より強固でセキュアなプログラミング・ノウハウや、メンテナンス性やチーム開発の観点からフレームワークを取り入れた開発が必要とされています。

今回のセミナーでは、「セキュリティ」「symfony」「Flex」「iPhone」の4つのキーワードをテーマにセミナーを開催したいと考えます。

○ 第1回 セミナー 「PHP×セキュリティ ~ セキュアなPHPシステム開発テクニック」 開催概要
 
  開催日時 :6月16日(水)10:00~12:00(※09:30受付開始)
       
  参加費  :無料 (事前登録制)
       
  会場   :山王健保会館2階 多目的ホール
        東京都港区赤坂2-5-6

  交通   :地下鉄銀座線・南北線溜池山王駅 7出口 徒歩3分
        地下鉄千代田線:赤坂駅 1出口 徒歩5分
        地下鉄銀座線・丸ノ内線赤坂見附駅出口 下車徒歩7分

  主催   :アシアル株式会社

  受講対象者 :PHPシステムでの開発経験が半年~3年程度ある開発者の方

  定員    :100名(※ 定員となり次第、受付を終了させていただきます)

  事前申込 : このセミナーは事前のお申込みが必要となります。
      お申込みは、こちらからお願いします:
     https://www.asial.co.jp/seminar/