Home

しゃおの雑記帳

携帯サイトセキュリティTODOリスト add this entry to hatena bookmarkhatena bookmark counter

前回のエントリ “携帯サイト開発者のためのセキュリティ再入門” が割と広範囲にお読みいただけているようです。ありがとうございます。ただあの記事は単に列挙しただけなので「何をまずやればいいのか」具体的なものが見えてこない気がしますのでメモとして再構成してみました。前回書いたように「契約者IDによるかんたんログイン機能を撤廃しよう」がすぐにできるのであればいいですが、なかなかできないのが現実でしょうから、「緊急度の高い対策」から順に扱っていこうと思います。

契約者ID(UID)で認証しているサイトはすぐにやろう

  • キャリアのIP帯、User Agent、UIDのペアを確実に検証するようにする
    • 例えばドコモのIP帯 + ドコモのUser Agent + X-DCMGUID でのみ認証できるようにします。
    • もし [携帯電話のIP帯 (各キャリアのリストをマージしたもの) + ドコモの User Agent + X-DCMGUID] で認証するととても大変なことになります。
      例えばイー・モバイルのWAPゲートウェイはUser Agentや追加ヘッダを自由にセットできるので、携帯電話のIP帯であるかをファイアウォールやhtaccessだけで確認し、以後はUser Agentで分岐するような処理を書いている場合は、イー・モバイルのソースIPでファイアウォールを突破し、プログラム中でドコモのUser Agentを検出してドコモの処理に遷移、勝手につけられたX-DCM-GUIDでセッションを獲得されてしまいます。
  • Hostヘッダのついていないリクエストには答えないように。
    • あなたのサイト http://www.example.com/ に http://aaa.bbb.ccc.ddd/ などのIPアドレス直打ちでアクセスできるようならばすぐに止めましょう。
    • iモードブラウザ2.0のDNS Rebinding脆弱性への対策。ezweb以外の他ブラウザもJavaScriptに対応しているので、報じられていませんが同様の脆弱性を持つものと思われます。
  • キャリアからの通信であってもUIDが信用できないケースではUIDを使わない
    • iモード: SSL時 (SSL時はX-DCMGUIDは付与されない) – 代わりにutnを用いるようにします。
    • Yahoo!ケータイ・EMnet: SSL時 (secure.softbank.ne.jp経由の通信ではUIDは信用できますが、End to End通信をしている場合は偽装可能。見分ける方法は現時点で不明)

点検と改善

  • ドメイン内に信頼できないコードがないか
    • 最近の携帯電話はJavaScriptやCookieを実行できますので、同一ドメイン内に信頼できないコードがある場合はJavaScriptやcookieによるアクセスが可能です。
    • ドメインを他のサービスと共有している場合、あるいは共有SSL (共有SSLドメインを使用し、ディレクトリ単位で個別のユーザが利用しているケース) は特に危険です!
  • XSS脆弱性対策
    • 適切なエスケープ処理を講じましょう。
    • auや古いドコモの携帯は大丈夫? → FlashではActionScriptが動きます。外部からの引数をもって起動するFlashをもっている場合はこれも脆弱性の対象です。 (Flashからの通信でもUIDを送出します)
  • CSRF対策
    • コミット系アクションにはPOSTを使いましょう。 (GETでは動作しないようにする)
    • 重要度の高いコミット系アクションではセッションIDやUIDから類推できないトークンを受渡し、アクション時にトークンを検証しましょう。

UIDからの卒業

  • まずUIDをそのままセッションIDとして使うのをやめます。UID送出によるかんたんログインで都度生成されるセッションIDによりセッションががスタートするようにしましょう
  • 続いてログイン後にcookieを付与するようにします。cookieがついている場合はUIDを無視してセッションを復元するようにします。
  • ドコモの場合はUIDに加えてutnの送出をするようにします。前回のutnと異なる場合はメールバックによる認証など、他の認証をあわせて実施するようにしましょう。
  • cookieによるセッション管理が正しく動作するようになったら、EZweb / Yahoo!ケータイ / EMnet でのUIDかんたんログイン機能を廃止します。
  • あとは旧iモードブラウザが滅びるのを待つだけです。。。

さらに高度なセキュリティ、スマートフォン時代への対応

  • キャリアシステム (課金、ダウンロードコンテンツなど) に依存するアクションと、そうでないものを分離。
    • キャリアシステムであることを強く確認したいときには必要な確認処理を行う。メールによる確認のほか、FirstPassSecurity Passなども無料で使えます。
    • 確認処理はできるかぎり単一のフィルタで実装し、キャリアによる仕様変更やセキュリティ上のトピックに対して単一の変更で適用が可能なようにしましょう。
  • 逆に言うと、上記以外ではIPアドレスによる確認やUIDの確認は一切不要。
    • キャリア依存を解消していくことで、今後のスマートフォン時代でも容易にサイトを対応させられるようになりますしね!

UIDを認証目的で使うために可能な限り安全な対策をとりつつ、段階的にUIDをつかわない形へともっていくモデルケースですが、あくまで一例ですので実際のプロジェクトへの適用は個々の事情にあわせて慎重に行ってください。

携帯サイト開発者のためのセキュリティ再入門 add this entry to hatena bookmarkhatena bookmark counter

通勤電車で周囲を見渡せば大抵数台のスマートフォンを見つけられるようなご時世ですが、現実は日本の伝統的な携帯電話が多数派です。今もそんなガラケー向けWebサイトの開発案件は衰えることありません。

そんなガラケーサイトの開発者の間で話題になっている「セキュリティ対策」について、ガラケー界の現状をふまえた上でまとめてみます。

携帯電話のIPからのアクセスであることを前提としたセキュリティ対策はすでに無駄

危険な「かんたんログイン」

  • かんたんログインで使う契約者IDはあなたのサイトにも他のサイトにも同じものが送出されてます
  • 悪意をもった人が他人の契約者IDをヘッダに乗せてかんたんログインのアクションを呼び出したらどうなりますか

iモードブラウザ1.0以外はPCと同じくcookieを使えばいい

  • iモードブラウザ2.0すべてのEZwebブラウザ、ほぼすべてのYahoo!ケータイブラウザはCookieが使えます。EMnetももちろん使えます。
    • Yahoo!ケータイだとSSLで https://secure.softbank.ne.jp/ がcookie食べるのでは?
      → リンクを <a href=”javascript:window.location:’https://example.com/’”> で作れば大丈夫 。https://secure.softbank.ne.jpに飛ばされません。
    • 幸いなことにP型とC型の旧Jスカイ端末は2010年3月末に停波したので滅びてます
  • 旧iモードブラウザ以外は「かんたんログイン」をやめてPCのようにログイン操作をcookieにより省略できる「ログイン状態を記憶」機能をつけてあげましょう。

iモードブラウザ1.0 でのかんたんログイン機能の実装

  • (まだ割とシェアの多い)旧iモードブラウザでどうしてもかんたんログイン機能が必要な場合は”iモードサーバーのIPアドレス帯”+”iモードID”で認証する。ドコモのiモードゲートウェイは他社にくらべだいぶ堅牢っぽいです。
  • 携帯IPアドレス帯+iモードIDの認証は厳禁。例えばYahoo!ケータイのゲートウェイに自作のX-DCM-GUIDヘッダがあっても特別な対応はせずにそのままリクエストされます。
  • 「取り返しのつかない行為」、例えば日記の投稿、商品の購入やポイントの消費、退会などでは他の認証手段を検討すべきですが、どうしても簡略化しないといけない場合は(例えばミニブログの投稿サービスなど)投稿初回のみutnを用いた認証をし、その後はセッションを引き回す方法もあります。
    • 現時点でドコモのプロクシからのアクセスでUser Agentを書き換えられたというケースがないこと、またutnの送信は明示的な操作が必要なので攻撃者が比較的取得しにくいことを基にしていますが、それでも危険なことは言うまでもありません。

携帯電話もJavaScriptが使えちゃいます!

  • iモードブラウザ2.0だけでなく、ここ3〜4年ぐらいのソフトバンク端末 (NetFront 3.3以降か)もJavaScriptが使えます。
    • ちなみにiモードブラウザ2.0、ここ1〜2年ぐらいのソフトバンク端末(NetFront 3.4以降) はAjaxが使えたり
    • iモードブラウザ2.0、大多数のソフトバンク端末、WIN以降のau端末はiframeが使えます
  • 従ってPCと同等のXSS/CSRF対策は必須。
    • XSS対策: 正しいエスケープを行う
    • CSRF対策: コミット操作を伴うアクションに[使い捨て/セッションIDとは別の]トークンの検証を加える
  • 怠るとフォームを自動的に操作される、cookieが盗まれる、XMLHttpObjectが作成されてしまうなどのことが起きてしまいます

IP制限はやめるべき

  • 冒頭で述べた通り、携帯のWAPプロクシにパソコンから入ることは容易です。そんなことで盗用やいたずらを防げると思ったら大間違いです
  • IPブロックでよくある話: 検索エンジンにひっかからなくなる→Google BOTのIPアドレスだけ開ける→Google翻訳プロクシから入られてしまう→やっぱり意味ない
  • IPアドレス帯の制限がセキュリティの砦のような設計は即刻見直すべきです
    • iモードブラウザ1.0+iモードIDでの認証をやりたいならしょうがないですが。
    • どうしてもIP制限をしたければ、取り返しのつかないアクション(掲示板への投稿や記事削除、ポイント消費など)でセッション検証とあわせてIPアドレスの正当性を検査すれば、一定レベルのいたずらアクセスからサイトを守ることは可能。
    • セキュリティの担保としてキャリアネットワークであることを検証したいならば FirstPassSecurityPassなどの携帯電話のSIMカードをつかった公開鍵認証という方法があります。利用料は無料です。

まとめ

携帯サイトだからって安全が増すということはまったくないので、PCサイトと同じく正攻法のセキュリティ対策を行いましょう。

追記

携帯サイトセキュリティTODOリスト を書きました。 (5/3)

iモード.netのメールを疑似プッシュさせたくてimotenをim.kayac.comに対応させた add this entry to hatena bookmarkhatena bookmark counter

世間はiPadだのiPhone HDだので騒がしいですが、小生はXperiaをついうっかり購入してしまいました。

メインのiモードメールアドレスを運用していた回線をXperiaにしてしまったので、imoniでメールをfetchしていたのですが電池持ちがあまりよろしくないので、自宅のサーバーにimotenを入れて、30秒おきにiモード.netの新着を確認し、新着があればmopera Uに転送するという方法をとっていました。(Xperiaはmopera UのメールをPUSHで受け取れるので)

しかし、せっかくimotenを回しつづけるならばメール転送よりも効率よく新着を知りたいですし、変なサイトを見ながらdebrandしたら完全にX10iになっちゃってmopera Uのpushがうけられなくなった iPhoneにもあわせてpushされたほうが幸せですよね、と思ったので im.kayac.com にpushする仕組みを整えてみる改造をすることにしました。

メールが来ると1分以内にim.kayac.comを通じてXperiaのGoogle Talkアカウントにプッシュされるだけでなく、PCからログインしていればデスクトップにも通知されるので携帯を鞄の底にしまっていても安心。とても素晴らしいです。

IMGP1900

圏外でも圏内復帰時にチャットに蓄積されます

IMGP1901

imotenの作者様とim.kayac.comのカヤック様に感謝でございます。

Amazonアソシエイト一発ブックマークレット add this entry to hatena bookmarkhatena bookmark counter

まぁ誰かやってそうですが、いちおうつくっておきます。大して検証していません。

ポイント

  • ソースの yourAfIDの部分を置き換えたいアソシエイトIDに変えてください。そのままで使うと、ぼくがDBLoggerでお世話になっているお友達に結びつきます
  • amazonで商品ページを出しているときに当該ブックマークレットを使ってみてください
  • あまりに突貫工事なのでSafari 4以外では動作を確認していません。
  • link rel=canonicalによるURL正規化って便利だよね、っていう話でもあります。

ブックマークレット

Amazon Associate

ソース

var yourAfID="mashiro00-22", links = document.getElementsByTagName('link'), z;
for (var i=0;i<links.length;i++) {
  if (links[i].getAttribute('rel')=="canonical") {
    z=links[i];
    break;
  }
}
var asin= /dp\/([0-9A-Z]+)$/.exec(z.getAttribute("href"))[1];
if (asin) {
  window.location=[
    "http://www.amazon.co.jp/exec/obidos/ASIN/",
    asin,
    "/",yourAfID,"/"
  ].join("")
}

iWPhoneからWPtouchへ乗り換え add this entry to hatena bookmarkhatena bookmark counter

iPhone向けスキンをWPtouchに変えました。

サイトの説明では「管理画面から検索かzipアップロードしてね」ということでしたが、途中でFTPの接続情報がきかれてしまったので断念。。。。 (今時FTPはねぇw)

というわけで設置先のシェルで作業しました。

wget http://downloads.wordpress.org/plugin/wptouch.1.9.7.7.zip
unzip wptouch.1.9.7.7.zip
mv wptouch path/to/wp-content/plugins/


あとは管理画面からプラグインを有効化するだけです。おしまい。

量販店ポイントの充当はiTunesカードにしよう add this entry to hatena bookmarkhatena bookmark counter

  • 2010-02-08 (月)
  • Life

ヨドバシやビックカメラなどでの買い物ではポイントがたまりますね。ゴールドポイントとかビックポイントサービスなど。

商品によって違うのですが、通常10〜20%相当のポイントが現金払いだとつきますので、その分だけ得な気がしますが、貯まったポイントを充当して(いわゆるポイント払い)買い物をしたときにはポイントがもらえません。なので最近は実質還元率なんていう言われかたをして、ポイントを使った買い物でポイントがつかないことを加味して「ポイントは1p=1円より少し残念だよね」という話になってます。

ところが、量販店では10%の還元が通常(ヨドバシ/ビックの場合)ですが、セールで23%も還元されたり、あるいはiPodやゲーム機本体などの利幅の低い商品では3%程度しか還元されなかったりします。還元率が低い商品でポイントを使えばその分「(ポイント払いにすることで)もらえなくなる損失」を最小限に抑えられます

「じゃあ還元率低い商品教えろよ」ということになると思いますね。探してみると「還元率0%」の商品もあります。以下、知っている限りで

  • 延長保証の料金
  • 配送・設置工事・回収などにかかる費用 (のうちレジで精算するもの)
  • iTunes カードなどのプリペイドカード

が該当します。延長保証や配送料などはレジで「延長保証代だけポイントで払うので会計を分けてください」と言えばやってくれますが、大型商品はそう買う機会がなかなかありません。

それに対して、iTunes CardはiPhoneを持っているならApp Storeでアプリを買うときに使えますし、iPodやiPhoneを持っている友達へのプレゼントにしても喜ばれます。値段も1500円から5000円まで必要に応じて買えますし、有効期限がないので安心です。

iTunesの決済をクレジットカードで行った場合にもらえるはずのクレジットポイントの損失や、たまにコンビニなどでiTunesカードの特売をやることを考えると100%お得とは言い切れません (機会があるなら工事費や配送料にするのがいちばんいい) が、頭の片隅にとどめてみるのはいかがでしょうか。

追記 (2/8 01:44)

その後、Twitterで

hyperbanana: @shao1555 私はいつもポイントはウェブマネーにしちゃってます

hyperbanana: @shao1555 あとはヤマダのポイントをツクモカードに貯めてツクモでお買い物とかですね。ツクモはポイント0%なものが非常に多いので使い易いですw

という反応をいただきました。いろいろテクニックがあってすごいです。ありがとうございます。

PocketWiFi買いました add this entry to hatena bookmarkhatena bookmark counter

今日発売!とかそういうわけではないですが、最近SoftBankのsmile.worldが遅いしb-mobile 3Gもやっぱり遅いし、そろそろiPadとか買いそうだしほしいなと思っていたところ、ヨドバシカメラ (新宿西口) にふらっとよってふらっと買ってしまったという話。

PocketWifi 買いました

既存回線からの買い増し、とくに既存回線が音声プラン (Touch Diamondとかemonsterとか) ならば断然EMチャージがおすすめPocketWiFi本体と1万円のチャージのセットで39580円で、このチャージ分で月4410円の30日契約を2回とあと少し使える感じです。

にねんMだと新規5980円ですが、違約金が33600円から毎月1400円ずつ減って2年で0になるという、まぁイーモバイルでよくみる売り方です。音声からの買い増しはできませんし、データからの買い増しで39580円払っても (残債をすべて処分すれば5980円で買えるけど、新規と同じ違約金という負債が発生します)  1万円分のチャージとかつきませんから、やはりEMチャージで買うのがいいでしょう。

いくつかポイント。

  • EMチャージのPocket WiFiはたぶん店頭で積極的に案内されてませんが、店員に「PocketWiFiをEMチャージで契約したい」と言えばでてきます。在庫はたぶんポストペイの通常契約と同じ
  • 特殊なケースを除き、オンラインストアで買っても量販店で買っても値段はたぶん同じ。手持ち金があるならば39580円を一括で払って量販店ポイントをもらいましょう。
    • ヨドバシでは10%還元でおよそ4000円分ポイントがつきます。iTunesカードあたりにポイントを充当しましょう
    • 手持ち金がない場合はアシスト840を同時に申し込むと、金利手数料なしで840円/月の24回払いができます (39580-840*24=)19420円でお持ち帰りできます。
  • 契約にはクレジットカードと審査が必要。審査基準が通常と異なるかはわかりませんが、受領までに30分から1時間かかるのはポストペイ契約といっしょ。 (クレカ以外の決済が可能かは確認してません)
  • EMチャージを使う場合は EMチャージサービスサイト で30日定額あたりを申し込みましょう。既存のSIMをそのまま使うならばこの操作はいりませんが、EMチャージについてくる1万円の特典は契約後90日たつと消滅するので注意。
    • EMチャージ契約後90日以内に30日定額を2回契約できるので、既存契約の料金請求の節目で30日定額を契約し、既存契約は寝かせておけばだいぶ得ですね。
  • APN(プロファイル設定) はデフォルトで emb.ne.jp
    • ポストペイ契約ならば音声/データどちらの回線でも同じなので、音声プランのSIMでもそのままいけます
    • プリペイド(EMチャージ)のSIMを使う場合は rtc.data にする必要があるので、192.168.1.1 に接続し、 ユーザ名: admin, パスワード: 添付シールのWEPキー (5桁) を入れてログイン、設定 → 3G設定 → プロファイル設定 で “rtc.data” を選択すればプリペイドSIMで接続できます
  • おすすめ設定
    • IPアドレスは192.168.1.1だと他のルーターなどとかぶりやすいので、適当なIPアドレス帯に買えるのがいいかもしれません。
      (なぜかIPの設定が 設定 > ファイアウォール設定 > DHCP設定 にあるのが気持ち悪いw)
    • UPnPはデフォルトでオフです。Skypeなどを使う予定の人は ファイアウォール設定の中にあるUPnP設定を有効にしたほうがいいです。
    • DHCP設定でDNSの設定もできます。Google Public DNS のほうが速い(気がする)ので、DNS設定をスタティックにして、8.8.8.8 と 8.8.4.4 を設定しておきます。
  • いろいろ
    • USBに接続するとMacではEthernetデバイスとして見えます (NDISではないみたい) – iPhoneのTetheringのように、つなぐだけでLAN接続されます。WAN側 (3G回線) をつなげばインターネットにもつながる、という感じ。
    • プライバシーセパレーター機能を無効にすれば、当該EthernetデバイスとPocketWiFi配下のデバイスを同一ネットワーク内で通信させることができます。インターネット接続共有で他のメディア(WiMAX, 有線など)をブリッジさせれば簡易ルーターとして遊べそうですが、DHCPの問題などがちょっとややこしいです。
    • モデムとしては見えません (他のHuawei機では出てくる /dev/tty.HUAWEIMobile-Modem がない) し、たぶんそういう仕様。

気になる速度ですが、新宿西口のルノアールで計測してみると(以下すべて3回計測した平均値)

なお、smile.world (iPhone SIM) でも試してみましたが

となりました。私見ですがemobileのほうがHSUPA対応が効いているのか全体的にpingが速くて快適さを実感できます。

さて、だいぶルノアールに長居してしまいましたし、帰りの電車で使い勝手を検証していきたいと思います。

ATOKダイレクトAPIでWikipedia特別検索をMacでも! add this entry to hatena bookmarkhatena bookmark counter

  • 2009-09-28 (月)
  • ATOK

さとろみ先生がATOKダイレクトAPIでWikipediaを推測候補として用いることができるプラグインを公開していたので使おうと思ったのですがWindows用でしたので手元のATOK 2009 for Macでは動きませんでした。

というわけでMac版をさっくり作ったというかパッケージしなおして公開。10.6 Snow Leopard環境で確認してます。

ダウンロード

wikipedia_mac.zip (708KB)

インストール

プラグインの実行にはhpricot(ともちろんATOK2009)が必要 (rubygemsは最初から入っているはず)です。

  1. まずhpricotをインストール
    $ sudo gem install hpricot

    もしSnow Leopardでうまくいかない場合は

    あたりでがんばってください。

  2. インストールして再起動(もしくはログアウト→ログイン、要にはWindowServerが終わればいい)したら、control+Tすることで検索できます。
  3. 他にはてなのダイレクトプラグインなどがある場合に”Wikipediaだけ使いたい”というときは control+shift+Tでどうぞ。

“水橋”でいれるとこんな感じに。セッちゃんかわいいですね!(関係ない)

VMware ESXi ServerにWindows Home Serverを入れる add this entry to hatena bookmarkhatena bookmark counter

TechNetでいつのまにか、Windows Home Server PP1がダウンロードできるようになっていたので、ESXi ServerにWindows Home Serverをゲストとして導入し、評価してみようと思う。基本的にはWindows Server 2003 Standard (32bit) で問題ないが、そのまま進めると「インストール可能なハードディスクがないよ」と言われてしまう。対処方法は、

  • SCSIのタイプ(VMのSettingsで変更できる)をLSI LogicからBusLogicにする
  • BusLogic用のドライバ(のFDイメージ)を入手し、Floppy Driveにマウントする
  • インストールを開始し、追加ドライバを読み込むか?と聞かれたら”はい”を選び、vmscsiファイルを指定する

でOKかと。インストールプロセスにより再起動がかかるが、その後

  •  VMwareのPOST画面でEscを連打し、Hard Disk から起動する (NTLDR is Missingと出てきてしまう場合はFloppyから起動していると思われる)
  • つづく、青いインストール画面ではF6を押し、Sでフロッピーからドライバを読みこみ、VMware SCSIドライバを追加読み込みする
  • これをやらないとSTOP 0×0000007Bエラーでブルースクリーンになる

 

b-mobile 3Gを買ってみた add this entry to hatena bookmarkhatena bookmark counter

150時間分の通信がパックされている、b-mobile 3G hours150を買ってきました。トラフィックの低そうな深夜に計測してみた結果はこんな感じです。 

計測は付属のZTE MF626をMacBook (Mac OS X 10.5.6)に差して行いました。1回しか測ってないので参考程度にどうぞ。

=== Radish Network Speed Testing Ver.3.2.2 - Test Report ===
使用回線:無線
------------------------------------------------------------
測定条件
 精度:低 データタイプ:標準
下り回線
 速度:964.3kbps (120.5kByte/sec) 測定品質:37.2
上り回線
 速度:365.8kbps (45.72kByte/sec) 測定品質:67.4
測定者ホスト:*****************.bmobile.ne.jp
測定サーバー:東京-WebARENA
測定時刻:2009/3/2(Mon) 3:06
------------------------------------------------------------
測定サイト http://netspeed.studio-radish.com/
============================================================


384kbpsを超えているのでHSDPAで確立していることは間違いないのですが、1Mbps程度といった数字。測定品質が低いのは網側の輻輳制御のせいでしょうか?

この同梱モデムは出荷時からSIM unlocked、つまりどのキャリアのSIMでも受け付けます。というわけでiPhoneのSIMを刺して微笑みの国につないで計測したらこんな感じに。

=== Radish Network Speed Testing Ver.3.2.2 - Test Report ===
使用回線:SoftBank 3Gハイスピード 3.6Mbps
------------------------------------------------------------
測定条件
 精度:低 データタイプ:標準
下り回線
 速度:2.833Mbps (354.1kByte/sec) 測定品質:95.0
上り回線
 速度:398.6kbps (49.83kByte/sec) 測定品質:5.0
測定者ホスト:**************.*.tik.panda-world.ne.jp
測定サーバー:東京-WebARENA
測定時刻:2009/3/2(Mon) 3:09
------------------------------------------------------------
測定サイト http://netspeed.studio-radish.com/
============================================================


今度は下りの測定品質が残念なことになりました。うーん。。

Home

Search
Feeds
Meta

Return to page top