Androidのパペット

Androidプラットフォヌム甚の悪意のあるアプリケヌションに関するニュヌスは、Googleがすべおのデバむスから䞍芁な゜フトりェアを䞀床にリモヌトで削陀するメカニズムに蚀及しおいたす。 このシステムはどのように機胜し、malvariの最倧の流通チャネルにならないのでしょうか

画像



統蚈から始めたす。 最初のAndroidベヌスのデバむスであるHTC Dream / G1は、2008幎10月に米囜ず英囜で発売されたした。 プラットフォヌムの急速な普及の始たりは、2009幎11月のMotorola Droidスマヌトフォンの出珟に関連しおいたす。 それ以来、毎日アクティブ化されるデバむスの数は驚異的に増加しおいたす。 前回のGoogle I / Oカンファレンスでは、毎日40䞇回のアクティベヌションずいうすばらしい数字が発衚されたした。 考えおみおください。これはキプロスの人口の半分、䟋えばブルネむ党䜓です。 珟圚、合蚈で1億台以䞊のAndroidデバむスがアクティブ化されおいたす。 悪くない。 ここで、それぞれがGoogleで少なくずも少しはできるが、管理できるず想像しおください。 おそらく私は少し誇匵しおいお、ここでは「管理」ずいう蚀葉は最も適切ではありたせん。 GoogleがGTalkServiceメカニズムを介しお任意のアプリケヌションをむンストヌルおよび削陀できるこずは確実に知られおいたす。 これを新しいデバむスのアクティベヌションに関する印象的な統蚈ず組み合わせるこずで、数十䞇人のナヌザヌが自発的にログむンする䞖界最倧のボットネットを思いっきり考えたす。 アむデアは空想科孊小説のように芋えたすが、GTalkServiceメカニズムの内郚を理解するこずに興味がありたした。 どのように配眮されおいたすか サヌバヌからのメッセヌゞはどのような圢でデバむスに届きたすか 䌝送チャネルはどのくらい安党ですか 他の誰かが私のデバむスに制埡コマンドを含むメッセヌゞを送信できる危険はありたすか

画像
Googleによっお削陀されたアプリ




GTalkServiceがすべおです



すべおのAndroidデバむスは、GTalkサヌバヌずの䞀定のTCP / SSL / XMPP接続をサポヌトしおいたす。 圌は垞にネットワヌクにアクセスできたす。 接続は、特別なGTalkSeriveサヌビスによっお制埡されたす。 接続がアクティブかどうかを確認するために、垞にpingいわゆる「ハヌトビヌトメッセヌゞ」をGoogleのサヌバヌに送信し、接続が倱われた堎合、自動的に再接続したす。 この通信チャネルにより、Googleはデバむスをリモヌトで制埡できたす。 GTalkServiceを介しお送信されたメッセヌゞは、確実にすべおのスマヌトフォンに届きたす。 このメカニズムにより、C2DMサヌビスデバむスメッセヌゞングフレヌムワヌクぞのクラりドの䞀郚が機胜し、開発者はナヌザヌのスマヌトフォンにむンストヌルされたアプリケヌションに特別なコマンドを送信できたす曎新のダりンロヌドなど。 ただし、C2DMは特別なリク゚ストを残した䞀郚の開発者のみが利甚できたす。 Androidは少なくずも2぀のコマンドをサポヌトするこずが知られおいたすREMOVE_ASSETおよびINSTALL_ASSET。これにより、Googleは任意のアプリケヌションを削陀およびむンストヌルできたす。 したがっお、Androidマヌケットでマルりェアを発芋するず、同瀟の゚ンゞニアはGTalkServiceを介しおREMOVE_ASSETメッセヌゞを送信でき、悪意のあるプログラムはむンタヌネットに接続されおいるすべおのデバむスからすぐに削陀されたす。 これは、ニュヌスからわかるように、䌚瀟はそれを耇数回䜿甚しおいたす。 そしお逆の状況。 GoogleがINSTALL_ASSETコマンドを発行するずすぐに、メッセヌゞを受信した各AndroidスマヌトフォンがプログラムずずもにAPK配垃キットをダりンロヌドし、むンストヌルしたす。 この可胜性は良い䞀方で、Googleはすべおの新興マルりェアを迅速に削陀できたす。 しかし、䞀方で、それは怖いです。 しかし、誰かが特定の電話のGTalkServiceぞのSSL接続にMITM攻撃を実装し、INSTALL_ASSETメッセヌゞを停装しお電話のある皮の感染を埋めるこずができたらどうでしょうか システムは安党ですか



デヌタチャネルの信頌性



Googleむンフラストラクチャをキャプチャするオプションに぀いおは考慮したせん。理論的には、任意のアプリケヌションをすべおのAndroidデバむスにすぐにダりンロヌドできたす。 この段階では、これをファンタゞヌず芋なしたす。 しかし、より珟実的に思われるのは、特定のデバむスに停のコマンドを送信するこずです。 はい、䞊で述べたように、GTalkService接続は安党です。すべおのデヌタはSSLを介しお送信されたす。 したがっお、メッセヌゞの基本的なセキュリティず敎合性はプロトコル自䜓によっお保蚌されたす。 ただし、これらの保蚌の䟡栌は知っおいたす 「Uncover SSL 」の資料をお読みください。 必芁に応じお、デバむスずGoogleサヌバヌ間で送信されるパケットのSSL接続が危険にさらされたり、傍受されたり、逆にされたりする可胜性がありたす。 それらの構造を理解し、INSTALL_ASSETメッセヌゞを正しく停造した堎合、デバむスに任意のアプリケヌションを匷制的にむンストヌルできたす。 理論的に。 問題は、たずえばデゞタル眲名など、他の保護レベルはありたすか Googleからのメッセヌゞを調査するには、受信する必芁がありたす。 スニファヌをオンにし、䌚瀟の゚ンゞニアがGTalkServiceを介しおINSTALL_ASSETコマンドを再床送信するのを埅぀必芁があるず思うかもしれたせん。 しかし、い぀になるのでしょうか 実際、すべおがよりシンプルです。 今埌、ナヌザヌがAndroidマヌケットからメッセヌゞをむンストヌルするたびに、この同じサヌビスが䜿甚されるず蚀いたす。 [むンストヌル]ボタンを抌すず、GTalkServiceを介しおINSTALL_ASSETが送信され、プログラムの目的のAPKパッケヌゞをダりンロヌドしおデバむスにむンストヌルするプロセスが開始されたす。 これに぀いおは詳しく説明したすが、重芁なこずは、調査のためにINSTALL_ASSETメッセヌゞを受信するこずは問題ではないずいうこずです。 䞀般に、トラフィックを衚瀺するにはSSL接続を介しお送信されるずいう事実にもかかわらず、ほずんど必芁ありたせん。
  1. Android゚ミュレヌタヌのむメヌゞを取埗したす。これには、Androidマヌケットず連携する機胜が含たれおいたす。
  2. keytoolたたはportecleを䜿甚しお、CA蚌明曞を/system/etc/security/cacerts.bkリポゞトリに远加したす。
  3. CA蚌明曞でsslsnifを䜿甚しおMITM攻撃を実装したす。
GTalkServiceが接続を確立したいので、デバむスが䜜成したCA蚌明曞を信頌するため、トラフィックを傍受できたす。 ゚ミュレヌタにAndroidマヌケットからアプリケヌションをむンストヌルしようずするず、それに応じおINSTALL_ASSETメッセヌゞがアンむンストヌルされたす。 次のようになりたす。



tickle_id: 1277687266074

assetid: -155863831473120556

asset_name: Replica Island

asset_type: GAME

asset_package: com.replica.replicaisland

asset_blob_url: android.clients.google.com/market/download/Download?assetId=-155863831473120556&userId=986032118775&deviceId=1094117203906638597

asset_signature: Ayn2bWDqckQkKsBY4JurvCFpYN0

asset_size: 5144485








ほずんどのパラメヌタヌは、ナヌザヌがAndroidマヌケットに芁求したアプリケヌションを蚘述しおいたす。 興味深いのはasset_signature属性です。 これはINSTALL_ASSETメッセヌゞの暗号眲名であり、その敎合性がさらに保蚌されおいるず想定できたす。 悲しいかな、これはそうではありたせん。 これは、ナヌザヌがAndroidマヌケットからリク゚ストしたAPKファむル぀たり、プログラム配垃キットのbase64゚ンコヌドハッシュにすぎないこずは、愛奜家によっお長い間確立されおきたした。 今回は、APKパッケヌゞをダりンロヌドし、チェックサムを䜿甚しお適切な倉換を実行するこずによっおのみ確認できたす。 INSTALL_ASSETメッセヌゞおよびその他のメッセヌゞに察する远加の保護がないこずが明らかになりたす。 攻撃者がGTalkService間のSSL接続を傍受できる堎合、理論的には、アプリケヌションのむンストヌルを含む、任意のメッセヌゞを電話に送信できたす。 もちろん、倚くの「しかし」があり、そのような攻撃を想像するのはかなり困難です。 これを行うには、少なくずも、MITM攻撃を実装できるようにするために、被害者ず同じネットワヌク䞊にいる必芁がありたす。 ナヌザヌの倧量感染に぀いおは疑いようがありたせん。 これは、通信チャネルのセキュリティの欠劂を損なうものではありたせんが、ここでの欠陥を悪甚する芋蟌みは、率盎に蚀っお匱いです。 したがっお、これに぀いおはもう説明したせんが、AndroidプラットフォヌムずGTalkServiceメカニズムには他にどんな驚きがあるのか​​芋おみたしょう。

画像
GTalk Service Monitorむンタヌフェむス




Androidマヌケットずの盞互䜜甚



GTalkServiceは、Androidマヌケットからアプリケヌションをむンストヌルするプロセスに関䞎しおいるず䞊蚘で述べたした。 これは䞀般的に興味深い話です。 ここには興味深いニュアンスもありたす。 たず、ナヌザヌが垂堎からプログラムをむンストヌルする手順を怜蚎したす。
  1. Androidマヌケットを起動したす。
  2. むンストヌルする目的のアプリケヌションを怜玢したす。
  3. 「むンストヌル」ボタンをクリックしたす。
  4. アプリケヌションに必芁な特暩の確認。
  5. アプリケヌションをダりンロヌドしおむンストヌルしたす。
その埌、通知パネルのナヌザヌは、アプリケヌションのダりンロヌドずむンストヌルに関するメッセヌゞを衚瀺したす。 すべおがシンプルで透明ですが、...プロセスを内偎から芋るず、すべおが少し耇雑になりたす。 最初の4぀のステップがAndroidマヌケットアプリケヌションによっお実行される堎合、5番目の最も重芁なステヌゞでは、システムの完党に異なるコンポヌネント、぀たり、すでにおなじみのGTalkServiceが責任を負いたす。 䜜業のスキヌム理解を深めるために図を参照は次のずおりです。
  1. ナヌザヌは、Androidマヌケットのアプリむンストヌルボタンをクリックしたす。
  2. アプリケヌションはAndroidマヌケットサヌバヌにPOSTリク゚ストを送信したす。
  3. Androidマヌケットサヌバヌは、アプリケヌションをC2DMシステムにむンストヌルするリク゚ストに関する情報を送信したす。
  4. C2DMサヌバヌは、GTalkService接続を介しおINSTALL_ASSETメッセヌゞをナヌザヌのスマヌトフォンに送信したす。
  5. GTalkServiceコンポヌネントはINSTALL_ASSETメッセヌゞを受信し、Vendingコンポヌネントをアクティブ化したす。
  6. Vendingコンポヌネントは、アプリケヌションのAPKパッケヌゞをダりンロヌドし、最終的にアプリケヌションをむンストヌルしたす。
関心を匕く最初のものは、もちろん、サヌバヌに送信されるPOST芁求です。 Androidマヌケットが送信できるので、おそらく特別なアプリケヌションを䜿甚しお送信できたすか それを理解しおみたしょう。

むンタヌセプトされたリク゚ストは次のずおりです。



POST /market/api/ApiRequest HTTP/1.1

Content-Length: 524

Content-Type: application/x-www-form-urlencoded

Host: android.clients.google.com

Connection: Keep-Alive

User-Agent: Android-Market/2 (dream DRC83); gzip

version=2&request=CuACCvYBRFFBQUFLOEFBQUJvZWVEVGo4eGV4OVRJaW9 . . .








興味深いのは明らかで隠れおいるリク゚ストパラメヌタを陀いお、すべおはささいなものです。 Googleを知っおいれば、これはpropobuf独自の構造にパッケヌゞ化され、その埌base64で゚ンコヌドされたデヌタであるず簡単に掚枬できたす。 そうです。 ハッシュをデコヌドし、構造をアンパックするず、リク゚ストデヌタが取埗されたす。



1 {

1: "DQAAAK8AAABoeeDTj8xex9TIio . . ."

2: 0

[... ...]

13: "-606db3000d480d63"

}

2 {

10 {

1: "353999319718585473"

}

}






画像
protobufからデコヌドした埌のリク゚スト構造


すでに䜕かですが、問題がありたす。このパラメヌタヌたたはそのパラメヌタヌが䜕を担圓しおいるかはわかりたせん。 ほずんどの堎合、これらはデバむスの識別子、プラットフォヌムに関する情報、承認のための情報、そしおもちろん、マヌケットから芁求されたアプリケヌションの識別子です。 ここでは、Androidマヌケットでの䜜業に参加する倚くのプロトブフ構造に぀いお、逆転の結果ずしおマニアが䜜成した説明が利甚可胜であるず蚀わなければなりたせん。 たた、サむトcode.google.com/p/android-market-apiには、垂堎からさたざたなデヌタ説明、プログラムアむコンなどを芁求できるようにたずめお蚘述されたAPIが掲茉されおいたす。 確かに、アプリケヌションのむンストヌル芁求の構造に関するデヌタはありたせん。 しかし、逆転は有名なAndroidプラットフォヌムの研究者であるJohn Oberheidによっお行われたした。JohnOberheidは、興味深い攻撃を実装したした。 したがっお、短瞮圢のリク゚ストの構造は次のようになりたす。



[.. ..]

message InstallRequest {

optional string appId = 1;

}

message RequestContext {

required string authToken = 1;

[.. ..]

required string androidId = 4;

optional string deviceAndSdkVersion = 5;

[.. ..]








芁求からのフィヌルドのほずんどは、デバむス自䜓から抜出できたすたずえば、むンタヌフェヌス蚀語、システムバヌゞョンなど。 ただし、appIdパラメヌタヌずauthTokenパラメヌタヌではありたせん。 authTokenがシヌクレットのたたである堎合、リク゚ストはスプヌルされたせん。 しかし、あなたは、デバむスがそれを持っおいるので、それがただシステムのある堎所に栌玍されおいるこずを意味するこずに気付くこずができたす。 たさに このストレヌゞはアカりントマネヌゞャヌず呌ばれ、認蚌デヌタを提䟛するAndroidプラットフォヌムの重芁なコンポヌネントです。 たずえば、䞀郚のアプリケヌションがメッセヌゞをTwitterに投皿する堎合、Twitterアカりントのナヌザヌ名ずパスワヌドを知る必芁はありたせん。AcountManagerからトヌクンを芁求しお、ツむヌトを送信できたす。 そのため、authTokenも同じ堎所に栌玍され、Android Marketサヌバヌずのやり取りに䜿甚されたす。 しかし、このストヌリヌ党䜓で最も面癜いのは、わずか数行のコヌドで抜出できるこずです。



AccountManager accountManager = AccountManager.get(getApplicationContext());

Account acct = getAccount(accountManager);

accountManager.getAuthToken(acct, "android", false, new GetAuthTokenCallback(), null);








これはどういう意味ですか 䞊で匕甚したprotobuf構造をコンパむルし、Androidマヌケットサヌバヌに送信するためのPOSTリク゚ストを䜜成するためのすべおのデヌタがあるこずがわかりたした。 リク゚ストが正しい堎合それが正しいこずを確認したす、メッセヌゞINSTALL_ASSETがGTalkServiceを介しおデバむスに送信され、指定したアプリケヌションのむンストヌルに぀ながりたす たた、システムはナヌザヌがリク゚ストを送信する前にむンストヌルを蚱可するように蚭蚈されおいるため再び図を参照、誰も圌に䜕も尋ねたせん。 そしお、アプリケヌションは必芁なすべおの暩限でシステムにむンストヌルされたす



アプリを介した攻撃



Androidマヌケットのアプリケヌションむンストヌルメカニズムの埮劙な点を理解したので、John Oberheidがなんずか成功させた゚レガントな攻撃に぀いお話をするこずができたす。 アむデアはこれです。 むンストヌル芁求を自分で䜜成できる堎合、これを自動的に行うアプリケヌションを䜜成するこずを劚げるものは䜕もありたせん。 このような機胜を完党に無害なプログラムに远加し、Androidマヌケットこれは簡単に制埡できたせんを通じお配垃を開始するず、それをむンストヌルするすべおのナヌザヌに奜きなものをダりンロヌドできたす すぐに蚀っおやった。 JohnはPoCアプリケヌションを䜜成し、Angry Birds Bonus Levelsずいう名前を付けたした。これは、Androidマヌケットナヌザヌの泚目を集めるこずになっおいたす。 最も簡単な゜ヌシャル゚ンゞニアリングが機胜したした。ナヌザヌはプログラムのむンストヌルを開始したした。 最も気が぀いたのはおそらく、曎新゚リアにさらに3぀のプログラムのむンストヌルに関するメッセヌゞがあるこずに気付いたずいうこずです。堎所を远跡し、有料番号に電話をかけ、連絡先リストを盗むこずです。 それらのすべおに実際に悪意のある機胜がありたしたが、決しお䜿甚されたせんでした。 私は、PoCをテストした盎埌に研究者がGoogleで問題を報告し、同瀟がすでにバグを修正しおいるず蚀わなければなりたせん。 ずころで、解決策は非垞に簡単であるこずが刀明したした。 システムは、Androidマヌケットを介しお行われたアプリケヌションのむンストヌル芁求をすべお蚘録し、着信INSTALL_ASSETメッセヌゞに察しお察応する芁求が以前に行われたこずを確認したす。 Vendingコンポヌネントが予期しないアプリケヌションのINSTALL_ASSETメッセヌゞを受信した堎合、コマンドは単に無芖されたす。 これ以䞊の問題はないず思われたす。 しかし メッセヌゞの本文には、チェックを切り取るこずができる特別なフラグが含たれおいる堎合がありたすアプリケヌションのリモヌト削陀の機胜を維持するこずを含むが、これは少し異なる話です。



この蚘事は、研究者John Oberheidによる資料に基づいお䜜成されたした 。



画像

ハッカヌマガゞン、 7月07150



ハッカヌを賌読する




All Articles