
iOSのアプリ内課金における課金回避ハック、Mac向けアプリでも同種の穴が見つかる 54
ストーリー by hylom
日本ではあまり話題にならなかったが 部門より
日本ではあまり話題にならなかったが 部門より
あるAnonymous Coward 曰く、
先週、ロシアの開発者がiOS 3.0以降においてアプリ内課金を回避してコンテンツを入手する手法を公開した(本家/.記事、Exciteニュース)。この問題はすでに修正され、またiOS 6では完全に修正されることが告知されているが、同様の問題がMacのApp Storeでも発生することが明らかになった本家/.、ZDNet記事)。
iOS 6では"完全"に修正? (スコア:0)
つまり、それ以前のバージョンには、まだ穴があるってこと?
Re:iOS 6では"完全"に修正? (スコア:5, 参考になる)
よくわからない流れになってるみたいですけど、iOSとは縁がないものの
興味があったのでちょこっと調べた感じだと
攻撃の方法はDNSのレコードを変更してAppStoreのサーバーに対する
リクエストを偽装サーバーにリダイレクトし、偽装サーバーがAppStoreのサーバーの
エミュレーションを行うことで支払ったかのように見せることができる、というものの
ようですね。
その後の報道によると、Appleはこの攻撃を防ぐことはできなかった、ようで
現時点では
http://developer.apple.com/library/ios/#releasenotes/StoreKit/IAP_Rece... [apple.com]
の
My app performs validation by connecting to the App Store server directly. How am I affected?
に書かれているような方法で対処しなさい、ということみたいですね。
つまりiOS6より前では攻撃の穴は塞がれていないが、対処方法はある、ということでしょう。
で、iOS6ではDNSの偽装に対応する、つまり完全に穴を塞ぐとしているようです。
本件のたれこみは
>この問題はすでに修正され
とありますが、それはざっと調べた限り見当たらず、ZDnetの記事などを見ると攻撃を防ぐことは
できなかった、とあります。うーん。探し方が足らないのかな?
いずれにしてもアプリケーション側で対処する必要があるということなんで、書き換えが必要なアプリ
があるみたいですけどね~。
Re:iOS 6では"完全"に修正? (スコア:2)
AppとAppStoreがどんなプロトコルで通信しているのか知りませんが
httpsのようにリクエスト先が正しいか確認する仕組みは無いのでしょうか。
Re:iOS 6では"完全"に修正? (スコア:1)
一応HTTP系っぽいです。
HTTPS使ってたけどライブラリ/APIではロクに検証してなかったか、この件を受けてHTTPからHTTPSに切り替えたのかは知りませんが、今回はそのチェックをアプリ側でやってくれれば対策になるって話のようです。
(#2199150) [srad.jp]が紹介している公式の対策を見ると
If your app connects to the App Store server directly from the device, your app may be affected by this vulnerability. You can address this vulnerability as follows:
・Check that the SSL certificate used to connect to the App Store server is an EV certificate.
・Check that the information returned from validation matches the information in the SKPayment object.
・Check that the receipt has a valid signature.
・Check that new transactions have a unique transaction ID.
・SSLのEV証明書でつながってることを検証しろ。(後述されているが非公開APIをこの用途限定で使えとの突貫対応)
・得られた購買情報が要求と矛盾していないか確認しろ。(SDKでは確認していない?)
・署名が有効か確認しろ。(SDKでは確認していない?)
・トランザクションIDがユニークか確認しろ。(複数回検証しろということか?)
ということで、これらの対策を行った課金チェックAPIのラッパーが提供されています。
この対策と攻撃の大雑把な解説記事を読む限り
・HTTPで購入情報の取得をしてしまうケースがあったか、ライブラリ/APIではHTTPSの証明書を検証していなかった(または回避可能だった)。
・多くのアプリ開発者の実装では、購買情報のBool値しか読んでおらず、ライブラリ/APIもそれを検証していなかった(または回避可能だった)。
・購買情報自体にも署名がついているらしいが、ライブラリ/APIはそれも検証していなかった(または回避可能だった)。
・今回の攻撃では何らかの理由でトランザクションIDが固定だった。
という状況のようです。
検証項目から察するに、今回の攻撃では「素のHTTP」または「異常なHTTPS」で検証接続を行わせて、「購買情報の署名が間違っている偽造購入情報」または「別のアプリ・利用者の購買情報」を食わせることで、それらの検証をおこなっていないアプリの課金情報を突破していた、ということになりそうです。
これらのチェックをライブラリ/APIではやっていなかったのか、それを突破可能なバグがあったのか…
検証していなかった、の方だとするとお粗末すぎますね。
Re: (スコア:0)
それをごまかすために証明書をインストールするんです。認証局証明書としてインストールされてしまったら(何らかのハードコードをしない限り)もう正規のものと区別は不可能です。
Re: (スコア:0)
> いずれにしてもアプリケーション側で対処する必要があるということなんで、書き換えが必要なアプリがあるみたいですけどね~。
しかし、なんだ、書き換えたら公開するまで Apple の審査工程があるわけだが、審査が通るまでの数週間。
その間はアプリ開発者から見たら取られ損って事?
# Apple の課金サーバを経由していないと言うことは購買履歴が分からないって事かな。
# あ、App Store からダウンロードされたと言う事実を追いかければ良いのか。
取られ損だった場合、公開を停止するって手もあるけど、その他大勢のお客さんを逃すことになるから、痛し痒しか。
Apple はどのような補償をしてくれるのかが問題。
Re: (スコア:0)
公開停止したってアプリ内課金は止められないのでは。
Re: (スコア:0)
> 攻撃の方法はDNSのレコードを変更してAppStoreのサーバーに対する
> リクエストを偽装サーバーにリダイレクトし、偽装サーバーがAppStoreのサーバーの
> エミュレーションを行うことで
なんだか、数年前のMO/MMOの後付けプロテクション機構の
ハックを見ているかのようだ。
そのときプロテクション機構側がとった対策はFQDN以外に
IPアドレスも埋め込んで、DNS問い合わせせずアクセスする
手段を用意したという。
それもnext hop書き換えてインターネットへ出て行かないように
してしまえば無意味という間抜けな結果になっていたと思うが、
さてAppleはどう対応してくるのやら。
DNSSECに対応していないDNSサーバはiOS6で使えません、とか
斜め上に行ってくれたら面白いのだけど。
Re: (スコア:0)
そもそも「修正」にはアプリ側の対応も必要みたいなんだけどそれを書かないってどうなの? >タレ
Re: (スコア:0)
俺は塩が好きだな。
Re: (スコア:0)
おっさん乙
Re: (スコア:0)
>そもそも「修正」にはアプリ側の対応も必要みたいなんだけどそれを書かないってどうなの? >タレ
課金・決済機能はOSやミドルウェアの話であって、アプリはそれに乗ってるだけです。
あまつさえAppleはApple自身の課金プラットフォームを使うよう独裁を振るっていますしね。
なので、
「決済・課金の問題が、OSやミドルウェアの課金プラットフォームの範疇を越えて
アプリも修正しないと回避できないところまで広がっている」のは論外どころの話ではなく、
Appleの責任でバッサリ切って捨てていい以外の何者でもありません。
たとえば有料の動画配信サイトに動画コンテンツを提供している会社
Re:iOS 6では"完全"に修正? (スコア:1)
プログラム云々とか言うのとは別に
何か毒を吐いていることは分かるが、
誰に対して毒を吐いているのかがよく分からんので
読んでいて気味悪さが先行する。
もうちょっとデトックスして話して欲しい。
Re: (スコア:0)
* 上記が理解できないならプログラムを1年勉強して出直してきてください。
ごめん日本語が長くてよくわからなかった。
結局、アプリに修正は必要なのか不要なのかどっち?
アプリを修正するためには、iOS6 SDKが必要ってこと?
特に
>Appleの責任でバッサリ切って捨てていい以外の何者でもありません。
の意味がわからなかったデス。
Re:iOS 6では"完全"に修正? (スコア:2, おもしろおかしい)
大丈夫、書いてる人も分かってないから。
重要なのは、タレか塩かって事。
Re:iOS 6では"完全"に修正? (スコア:1)
ソースは?
Re: (スコア:0)
Re: (スコア:0)
ゆずこしょうで
Re: (スコア:0)
玄人は何もつけないんだぜ
Re:iOS 6では"完全"に修正? (スコア:1)
1年ぐらい勉強すると「プログラム」の他に「ライブラリ」と呼ばれるようなものがあることが分かるよ、みたいな意味ではないかと。
で、動的にリンクされるライブラリもあったりするのを学ぶには1年では足りなかった、と。
Re:iOS 6では"完全"に修正? (スコア:1)
> 結局、アプリに修正は必要なのか不要なのかどっち?
アプリの課金処理の実装次第です。
https://developer.apple.com/library/ios/#releasenotes/StoreKit/IAP_Rec... [apple.com] を参照してください。
> アプリを修正するためには、iOS6 SDKが必要ってこと?
必要ありません。
> 意味がわからなかったデス。
何ら問題ありません。
Re: (スコア:0)
プログラムより上位のロジカルな部分の話だと思うからプログラム勉強しても理解できないと思うけどね・・・
俺も課金コンテンツ扱ってる人だけど、何言ってるか何が言いたいのか半分くらいわかんない。
言ってること自体は正しいと思うけどね。
Re: (スコア:0)
課金フレームワーク側の例外処理が腐ってて
カネ払ってなくてもアプリ側に正常に見える結果返すってだけ。
アプリはその結果にしたがってコンテンツ代金支払い済みとして
アプリ内機能をアンロックするなり追加コンテンツをダウンロードするなりする。
フレームワーク自体の修正はiOS6を待て、とかになってるけど
それまではどうすんだ、どんくらい被害が出てんだ、とか
アプリが軒並みiOS6専用に移行しちゃってiOS6にいけない初代iPadは死亡ですかそうですか、
とかどうすんだコレ。
ちなみに、例外処理はしっかりやれってのは新入社員の研修レベル。
Re: (スコア:0)
例外処理?
Re: (スコア:0)
もう知ったかしてるのは確定的に明らかなんだからそれくらいにしといてやれよ
Re: (スコア:0)
半分くらいわかんないACだけど完全に分からなくなったw 分かってないのはこのACか。
補償とかどこのだれがタレにしたの?塩なの?
流石に釣りだと信じたい。
Re: (スコア:0)
「確定的に明らか」って日本語?
# こうやって場の毒を薄める涙ぐましい努力
Re: (スコア:0)
お前、用語の使い方が新入社員の研修レベル以下だぞ。
Re: (スコア:0)
>お前、用語の使い方が新入社員の研修レベル以下だぞ。
Apple工作員は具体的な内容も書かず(書けず)頭ごなしに他人を否定するだけだからすぐに見分けがつきますね。
Re: (スコア:0)
私にはわかりやすく説明する能力がありません、まで読んだ。
Re: (スコア:0)
まあ、言いたい事は理解できるが、言い方にかなりの悪意を感じて、なんか気持ち悪いね。
そんなに「ダメ」な配信側で公開するかしないかはコンテンツ側が選ぶ事だし。
> * 上記が理解できないならプログラムを1年勉強して出直してきてください。
では、あなたは「1年勉強したら、穴のないシステムを構築できる」とでも?
Re:iOS 6では"完全"に修正? (スコア:1)
>では、あなたは「1年勉強したら、穴のないシステムを構築できる」とでも?
「穴がない(=ゼロ)」の保証は無理だけど
ミドルウェアでの例外処理でしくってアプリに想定外の結果返して課金トラブル、
なんてのは論外としか言いようがない、
というか「言うしかない」。
これは精神論でもなんでもなく、やったらダメ。
銀行がバグで他人の口座の残高をメチャクチャにしちゃったら非難されるべきなのと同じ。
「お前なにやっとんねん」であって擁護のしようがないし、
開き直る姿勢なんて見せたらそれこそ総スカン。
それがキモのシステムなんだから守れなかったらそういう批判を受けて当然。
Re: (スコア:0)
電気を供給するのが仕事で家庭向けの独占まで認められている会社が電気を供給できなくなったことは信じられないくらい擁護されてるけどね。
Re: (スコア:0)
そのうち停電とかもっと増えるんだろうな
Re: (スコア:0)
>電気を供給するのが仕事で家庭向けの独占まで認められている会社が電気を供給できなくなったことは
>信じられないくらい擁護されてるけどね。
つまりAppleを擁護しているのはApple社員とApple信者である、と。
まぁ有り余るカネと有り余る信仰心があるからね、AppleとApple信者には。
Re: (スコア:0)
そもそもの原因が100年に一度の大地震だからでしょう。
東電に不手際がなかったとはいいませんが、今回のAppleの不手際とは状況が異なります。
批判が公平でないと思います。
Re: (スコア:0)
> ミドルウェアでの例外処理でしくってアプリに想定外の結果返して課金トラブル、
そもそも何が起きてるかもわかってないのに「1年勉強して出直せ」とか偉そうな顔してるのはよくわかった。
Re: (スコア:0)
「”お前は何も分かってない”と何も分かってない人が言う」ですね。
頭ごなしに他人を攻撃すればいい、具体的な反論内容も書けないし書かなくていいから短文でいい、
とても楽なお仕事に従事のようでうらやましい限りです。
Re: (スコア:0)
ミドルウェアをプラットフォームか何かと勘違いしていないか?
Re: (スコア:0)
>ミドルウェアをプラットフォームか何かと勘違いしていないか?
別々だと主張するでも同じだと主張するでもどっちでもいいと思いますよ。
今回の場合、
「OSや課金プラットフォーム開発主体」であるAppleと
「アプリ開発主体であるサードパーティアプリベンダ」の責任分界点を示せればどっちでも変わりませんし、
どっちでも示せるので用語を分ける必要もありません。
ただ、そこで「とにかくミドルウェアとプラットフォームは違うの!!お前が間違ってるの!!」とかだと
痛い視線でしか見られないでしょうから気をつけたほうがいいでしょう。
Re: (スコア:0)
> Appleの責任でバッサリ切って捨てていい以外の何者でもありません。
切り捨てるのは勝手だけどコンテンツはタダで垂れ流され続けるよ。
> 今回の件はそのくらい異常な話です。
しかし現にAppleはそう言ってるわけで。
Re: (スコア:0)
あなたはAppleのことが何もわかっていませんね。
そんな生やさしいレベルじゃなくて「お前らが自前で認証サーバ立ててAppleの課金サーバーとの通信を中継しろ」と言ってます(本当)。
あなたの言う「まともな」課金システムだけ相手していたいなら一生ガラパゴスに閉じこもっててください割とマジで。
Re: (スコア:0)
何でそこまでしてAppleとかいうクソガラパゴスにわざわざ囚われなきゃいけないんでしょうね。
心の底から分からない。
Re: (スコア:0)
Appleに限った話じゃねえよ。アホ。
Re: (スコア:0)
>Appleに限った話じゃねえよ。アホ。
Apple、Google、MSなどのレベルの話で言えば、
アプリ内のコンテンツ支払いも含めてアプリ内課金システムをとにかくウチに独占させろ、
他の利用は許さない、
を強要するのはAppleだけじゃないでしょうか。
※ この辺はAppleとGoogleしかしらないのでMSやMS以外の同レベルの何かがあれば指摘ください。
今回の場合そこまで言っといてそれが腐ってた上、
回避したけりゃアプリ開発者側がコストを負え、とか
ジャイアンの「俺のものは俺のもの、お前のものは俺のもの」すら超えたロジックが
盛大な笑いと涙と怒りを呼んでるわけです。
カードデュープふたたび (スコア:0)
これ使うとソーシャルゲーム系で荒稼ぎできるんじゃないの?
ガチャやり放題で、レアカードを転売すれば…。
Re: (スコア:0)
よしここでなら言える。
「1年勉強して出直せ」
Re: (スコア:0)
プログラムを1年勉強して出直してきてください。
Re: (スコア:0)
君たち仲良すぎるだろw
Re: (スコア:0)
嫌いの反対は好きじゃなくて無関心と言いますから。