Malware Nodersok/Divergent afeta milhares de PCs

Novos malwares identificados pela Microsoft e Cisco Talos afetaram milhares de PCs nos Estados Unidos e na Europa e transformam sistemas em proxies para a realização de atividades maliciosas, disseram as empresas.

O que é o Nodersok?

A ameaça sem arquivo (fileless) – chamada Nodersok pela Microsoft e Divergent pela Cisco Talos – possui muitos de seus próprios componentes, mas também aproveita as ferramentas existentes para realizar seu trabalho sujo. O malware utiliza o Node.js que é usado por muitos aplicativos Web e o WinDivert, um utilitário de captura e manipulação de pacotes de rede, para transformar os sistemas em proxies involuntários.

Pesquisadores da Microsoft afirmam que, uma vez que a Nodersok transforma máquinas em proxies, as utiliza como

…um retransmissor para acessar outras entidades da rede (sites, servidores C&C, máquinas comprometidas etc.), o que lhes permite realizar atividades maliciosas furtivas…

disse a empresa. em uma postagem do blog.

Os pesquisadores do Cisco Talos, por outro lado, disseram que os proxies criados pelo Divergent são usados ​​para realizar fraudes por clique. Além disso, o malware tem características semelhantes às observadas em outros malware de fraude de clique, como o Kovter, informou a empresa em um post no blog.

Como o ataque funciona?

A infecção por Nodersok é mais ou menos um ataque de dois estágios que baixa vários componentes no PC de um usuário. Os sistemas são afetados inicialmente quando um usuário executa um arquivo HTA como um download do navegador, clicando nele ou navegando em um anúncio malicioso, de acordo com a Microsoft.

O código JavaScript no arquivo HTA baixa um componente do segundo estágio na forma de outro arquivo JavaScript ou um arquivo XSL que contém o código JavaScript. Esse componente inicia um comando do PowerShell oculto dentro de uma variável de ambiente e inicia instâncias adicionais do PowerShell, de acordo com a Microsoft.

Os comandos do PowerShell baixam e executam componentes criptografados que, entre outras coisas, tentam desativar o Windows Defender Antivirus e o Windows Update e iniciam um código de shell binário que tenta elevar privilégios na máquina infectada. A carga final do malware é um módulo JavaScript escrito na estrutura do Node.js. que pode transformar a máquina em um proxy, disse a Microsoft.

Como evitar

Para evitar a infecção, a Microsoft está aconselhando as pessoas a não executarem arquivos HTA encontrados em seus sistemas, especialmente aqueles que não se lembram de baixar ou cuja origem não conseguem identificar, informou a empresa.

Outra opção é utilizar programas de antivírus que estejam preparados para reconhecer e remover este tipo de ameaça. Segundo o pessoal da Microsoft o próprio Windows defender está apto a fazer isso, então podemos ficar seguro que a maioria dos antivírus também esta 😊!

Fonte: threatpost.com

Exercício Fácil: Soma de itens do vetor

Neste exercício, você terá que somar os valores de um vetor até a metade de seu tamanho e colocar a soma em um índice de um novo vetor.

Faça a soma também dos valores dos itens do vetor após a metade de seu tamanho. Coloque a soma em um índice do novo vetor.

Exemplo:

let vetor = [10, 20, 30, 40, 50, 60, 70, 80, 90];

Neste exemplo, temos um vetor de tamanho 9. Sabemos que a metade de 9 é 4.5, logo, devemos pegar todos os valores contidos em cada elemento que seja menor que a metade do tamanho do vetor. Neste caso, teremos a soma dos valores 10 + 20 + 30 + 40, que resulta em: 100.

O valor obtido, 100, deverá ser inserido na primeira posição de um novo vetor, que deverá ser criado.

let novoVetor = [];

Partindo para a próxima etapa do nosso exercício, devemos realizar a soma dos valores nos elementos restantes. Para isso, você deve realizar a soma dos elementos e inserir o resultado no índice do novo vetor. A soma dos elementos deve ser 50 + 60 + 70 + 80 + 90, que resulta em: 35.

O valor obtido, 350, deverá ser inserido na segunda posição do nosso novo vetor, que foi criado anteriormente.

O seu resultado deverá ser algo parecido como:

novoVetor = [100, 350];

Utilize o console.log() para mostrar o seus resultados.

DICA:

Para chegar no resultado correto, utilize o vetor.length -1 na sua condicional.

Você pode realizar este exercício da maneira que lhe convém, mas aconselhamos a utilizar uma estrutura condicional dentro de seu loop de repetição. Mas nada impede de você utilizar suas próprias maneiras para resolução deste exercício.

Você pode realizar a nossa resolução do exercício abaixo:

let vetor = [10, 20, 30, 40, 50, 60, 70, 80, 90];

let novo = [0, 0];

for (let indice = 0; indice < vetor.length; indice++) {
           
    if (indice < ((vetor.length-1) / 2)){
        novo[0] += vetor[indice];
           
    } else {
        novo[1] += vetor[indice];
    }
            
}
console.log(novo);

Gostou deste exercício? Comente o seu resultado e tire suas dúvidas!

 

Array Methods: Conheça os métodos de vetores.

Neste artigo, irei mostrar alguns dos métodos para manipulação de vetores mais utilizados no JavaScript. Existem outros métodos que serão abordados em próximos artigos.

concat():

Une dois ou mais vetores e retorna uma cópia dos vetores unidos.

Sintaxe:
0045vetor1.concat(vetor2, vetor3, ..., vetorX);
Exemplo:
let meninas = ["Cecilia", "Luana"];
let meninos = ["Emilio", "Tobias", "Leonardo"];
let adulto = ["Roberta"];
let pessoas = meninas.concat(meninos, adulto); 
console.log(pessoas);

copyWithin():

Copia elementos do vetor dentro do vetor, para e de posições especificadas. Este método nunca adicionará mais itens ao vetor. Importante: este método sobrescreve o vetor original.

Sintaxe:
vetor.copyWithin(alvo, inicio, fim);
Exemplo:
let fruits = ["Banana", "Orange", "Apple", "Mango", "Kiwi", "Papaya"];
fruits.copyWithin(2,0,2);
// ["Banana", "Orange", "Banana", "Orange", "Kiwi", "Papaya"]

entries():

Retorna um objeto Array Iterator com pares de chave/valor. Para cada item no vetor original, o novo objeto de iteração conterá um vetor com o índice como chave e o valor do item como valor.

Sintaxe:
vetor.entries();
Exemplo:
let fruits = ["Banana", "Orange", "Apple", "Mango"];
let f = fruits.entries();
for (x of f) {
    console.log(x);
}
// [0, "Banana"]
// [1, "Orange"]
// [2, "Apple"]
// [3, "Mango"]

filter():

Cria um novo vetor com todos os elementos de um vetor que passam no teste.

Sintaxe:
vetor.filter( function(valorAtual, index, vet), thisValue);
Onde:
  • function(valorAtual, index, vet): é uma função que irá ser executada para cada elemento no vetor. Possui os argumentos: valorAtual, index e vet.
  • thisValue: um parâmetro opcional. É Um valor a ser passado para a função a ser usado como seu valor “this”. Se este parâmetro estiver vazio, o valor “undefined” será passado como seu valor “this”.
Exemplo:
let idades = [32, 33, 16, 40];
function verificaAdulto(idade) {
  return idade >= 18;
}
console.log(idades.filter(verificaAdulto));
// [32, 33, 40]

map():

O método map() cria um novo vetor com os resultados da chamada de uma função para cada elemento do vetor. Ele chama a função fornecida uma vezpara cada elemento em um vetor, em ordem.

Sintaxe:
vetor.map(function(function(valorAtual, index, vet), thisValue);
Onde:
  • function(valorAtual, index, vet): Uma função a ser executada para cada elemento na matriz. Argumentos de função: valorAtual, index, vet.
  • thisValue: um parâmetro opcional. É Um valor a ser passado para a função a ser usado como seu valor “this”. Se este parâmetro estiver vazio, o valor “undefined” será passado como seu valor “this”.
Exemplo:
let numbers = [4, 9, 16, 25];
console.log(numbers.map(Math.sqrt));
// [2, 3, 4, 5]

sort():

O método sort() classifica os itens de um vetor. A ordem de classificação pode ser alfabética, numérica e crescente ou decrescente. Por padrão, o sort() classifica os valores por ordem alfabética e crescente. Isso funciona bem para sequencias de caracteres. No entanto, se os números forem classificados como sequencias de caracteres, “25” será maior que “100”, porque “2” será maior que “1”. Por esse motivo, o método sort() produzirá um resultado incorreto ao classificar números.

Sintaxe:
vetor.sort(funcaoComparacao);
Onde:
  • funcaoComparacao: Opcional, é uma função que define uma ordem de classificação alternativa. Esta função deverá retornar um valor negativo, zero, ou positivo, dependendo dos argumentos, como:

function (a, b) {return a-b}.

Quando comparamos 40 e 100, o método sort() chama a função de comparação function(40, 100). A função irá calcular 40 – 100 e retornará -60 (um valor negativo). A função sort lerá que 40 é um valor menor que 100.

Exemplo:
let fruits = ["Banana", "Orange", "Apple", "Mango"];
console.log(fruits.sort());
// ["Apple", "Banana", "Mango", "Orange"]

reduce():

O método reduce() reduz o vetor para um único valor; Ele executa uma função fornecida para cada valor do vetor (da esquerda para a direita). O valor de retorno da função é armazenado em um acumulador (resultado / total).

Sintaxe:
vetor.reduce(function(total, valorAtual, indiceAtual, vet), valorInicial);
Onde:
  • function(total, valorAtual, indiceAtual, vet): É uma função a ser executada para cada elemento no vetor.
  • valorInicial: Opcional, um valor a ser passado para a função como o valor inicial.
Exemplo:
let numbers = [175, 50, 25];
function myFunc(total, num) {
  return total - num;
}
console.log(numbers.reduce(myFunc));
// 100

join():

O método join() retorna o vetor como uma sequência. Os elementos serão separados por um separador especificado. O separador padrão é a vírgula (,). Este método não altera o vetor original.

Sintaxe:
vetor.join(separador);

O separador pode ser omitido, e será usado por padrão a vírgula (,).

Exemplo:
let fruits = ["Banana", "Orange", "Apple", "Mango"];
console.log(fruits.join(" and "));
// Banana and Orange and Apple and Mango

slice()

O método slice() retorna os elementos selecionados em um vetor, como um novo objeto de vetor. Seleciona os elementos que começam no argumento inicial especificado e terminam no, mas não incluem, o argumento final especificado.

Sintaxe:
vetor.slice(inicio, fim);
let fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
let citrus = fruits.slice(1, 3);
console.log(citrus);
// ["Orange", "Lemon"]

Gostou deste artigo? Comente abaixo outros métodos de vetores JavaScript!

JavaScript Básico: Break e Continue

 

Você já conhece o break e continue e suas utilidades? Conheça neste artigo:

BREAK:

O comando “break” serve para encerrar a leitura. O break é um comando que podemos utilizar quando queremos parar/encerrar o laço de repetição na hora. A instrução break interrompe o laço e continua executando o código após o loop (se houver).

Exemplo:

let carros = ["BMW", "Volvo", "Saab", "Ford"];

list: {
    console.log(carros[0]);
    console.log(carros[1]);
    break list;
    console.log(carros[2]);
    console.log(carros[3]);
}

CONTINUE:

Com este comando, é possível iniciar a próxima repetição do loop. A instrução continue interrompe uma iteração (no laço de repetição), se uma condição específica ocorrer, e continua com a próxima iteração no laço de repetição.

for (let i = 1; i < 10; i++) {
    if (i === 3) {
        continue;
    }
    console.log("O número atual é: " + i);
}

Com a instrução continue, você poderá utilizá-la para apenas ignorar  uma iteração de loop.

A instrução break pode ser utilizada para pular de um loop ou de um switch. Ela pode ser usada para pular qualquer bloco de código.

Exercício 1:

Crie um laço de repetição FOR. Este laço deverá começar a iterar no número 1. Enquanto o índice for menor que 10, o laço deverá continuar iterando.

Com o laço criado, cria um estrutura condicional que, utilizando o comando break, pare a iteração quando ela alcançar o valor 5. Caso esta condição seja atendida, mostre os números utilizando o console.log.

Exercício 2:

Crie um vetor que contenha os seguintes nomes: “André”, “Ana Paula”, “Júlio”, “Marcela”, “Rubem”. Utilize o laço de repetição FOR para percorrer esta lista. Quando a leitura for igual a “Júlio”, utilize o comando continue. Ele irá exibir todos os outros nomes deste vetor. Utilize o console.log para logar os dados no console.

Gostou deste artigo? Comente abaixo!

Uma breve introdução ao Flux

O Flux é uma arquitetura de Software que o Facebook utiliza para construir o front-end de suas aplicações. Flux é mais um conjunto de padrões do que um framework e você pode iniciar o uso de Flux imediatamente em seus projetos, sem ter que escrever ou reescrever muito código.

A criação do Flux ocorreu pois precisava-se de um padrão que resolvesse alguns problemas muito comuns do desenvolvimento front-end, tais como:

  • Padronização do fluxo da arquitetura para reduzir o tempo que leva aos desenvolvedores para entenderem o código de seus colegas.
  • Reduzir a replicação de código e regras de negócio.
  • Facilitar a manutenção do sistema.
  • Tornar mais simples de implementar novas funcionalidades que impactam diversas partes do sistema.
  • Automatizar a atualização do estado de um dado que é lido em diversos lugares.

O Flux possui 4 elementos:

  1. Action: São coleções de métodos que são chamadas pelas nossas Views, que enviam ações para o Dispatcher contendo payloads, que serão entregues aos Stores.
  2. Dispatcher: É o componente que gerencia basicamente todo o processo da nossa aplicação. O ponto central são os métodos Register e Dispatch, que são triggers de eventos entre a ação que disparou o evento e as stores registradas. Ele simplesmente recebe a Action e propaga para as stores que irá identificá-la e disparar um evento caso registrado.
  3. Stores: São os locais onde ficam armazenados a lógica e estado da aplicação, que tem call-backs registrados para o Dispatcher.
  4. (Controller) Views: Responsáveis por permitir que o usuário interaja com a aplicação e por mostrar a ele o estado atual dela.

O Dispatcher é único para toda a aplicação, dessa forma só existe um único elemento responsável por receber as Actions realizadas nas Views e dispará-las para as Stores da aplicação. Toda mudança no estado da aplicação somente pode ser realizada através de uma Action.

A principal característica do Flux é o fluxo unidirecional de dados. Sem alterações em cascata, a cada Action um novo estado é gerado. Dessa forma, o estado da aplicação é previsível, sendo mais simples de testar. Com a lógica de negócio concentrada em um local (nas Stores), fica mais fácil encontrar e corrigir bugs.

Conheça a CryptoCoinJS, uma biblioteca JavaScript para Criptomoedas.

CryptoCoinJS é um projeto JavaScript que ajuda você a interagir com diversas criptomoedas existentes na atualidade, como o famoso Bitcoin, Litecoin, Dogecoin, entre muitas outras. A maioria dos módulos é totalmente compatível com o seu navegador e com o Node.js. Naturalmente, os módulos que fazem interface diretamente com os nós de pares não serão executados no navegador.

Princípios da biblioteca:

Acreditando na filosofia Node.js e UNIX – a idéia de criar pequenos componentes que fazem uma coisa e fazem bem. Escrever software dessa maneira permite que os indivíduos usem e contribuam com muito mais eficácia do que escrevendo uma biblioteca monolítica. O CryptoCoinJS acredita que as pessoas são mais importantes que o código e, portanto, é fundamental escrever um código que seja fácil de ler, fácil de documentar cada módulo com a API e exemplos, e esse código é o inimigo 1 2.

Escrever testes é uma das melhores maneiras de comunicar expectativas entre desenvolvedores. Se a documentação é uma maneira de se comunicar para o consumidor do seu módulo, os testes são uma maneira de se comunicar entre os desenvolvedores.

Plataformas:

O CryptoCoinJS está focado no Node.js e no navegador usando o Browserify. Não há suporte a navegadores herdados, ou seja, se o seu navegador não suporta ECMAScript 5 (2009 – 2010) e não suporta window.crypto.getRandomValues​​(), alguns dos módulos podem não funcionar.

Começando:

O CryptoCoinJS é escrito em JavaScript puro e pode ser usado no servidor (Node.js) e no cliente (navegador moderno> 2010).

A primeira e provavelmente a mais óbvia é que você precisará de um editor de texto. Sublime Text , Github Atom ou Vim farão uma boa escolha.

O Node.js é executado no Windows, Mac OS X ou Linux. É muito fácil de instalar, basta acessar nodejs.org/download e executar o instalador para sua plataforma de escolha. O Node.js agrupa o npm que, estranhamente, não representa o Node.j Package Manager, apesar de ser seu único objetivo.

Continue lendo “Conheça a CryptoCoinJS, uma biblioteca JavaScript para Criptomoedas.”

JavaScript Básico: While

 

É um loop que funciona de forma bem simples. Chamado de “enquanto” (while) a condição for verdadeira (true), o código será executado. Fazendo isso, você cria um laço de repetição que irá executar para cada vez que a condição for verdadeira.

A Sintaxe do While:

while (condição){
    rotina;
}
Onde:
  • condição: é uma expressão que vai ser avaliada antes de cada vez que o laço for executado. Se a condição for verdadeira, a rotina será executada. Quando a condição for avaliada como falsa, a execução continuará na declaração que vem depois do laço while.
  • rotina: é uma declaração que será executada quando/enquanto a condição for avaliada como verdadeira.

Por exemplo:

// Variavel numero que recebe o valor numérico 10
let número = 10;

// Enquanto o número for menor que 100
while (numero < 100){
    // Irá mostrar o valor acrescentando 1 até que se alcance o total
    console.log("valor:" + numero);
     numero++;
}

Você precisará fornecer uma forma para que o loop termine, caso contrário terá um loop infinito.

let número = 10;

// Enquanto o número for menor que 100
while (numero < 100){
    let valor = 0;
    console.log("valor:" + valor);
    valor = valor + 2;
}

Exercício 1:

Crie um laço while que irá iterar enquanto n for menor ou igual a 5. Mostre no console os valores obtidos.

Dica:

Para realizar este exercício, crie uma variável n que receberá o valor zero. Crie o laço de repetição while que irá ter a condição n menor ou igual a 5. Coloque a rotina a ser seguida dentro do laço de repetição.

 

Exercício 2:

Crie um vetor chamado carros. Este vetor irá conter os valores “Gol”, “Uno”, “S10”, “Kadett”. Você também precisa criar uma variável que será o índice para percorrer este laço de repetição. No seu laço de repetição while, utilize o console.log para mostrar todos os nomes dos carros que estão contidos no seu vetor.

 

Gostou deste artigo? Comente abaixo os seus resultados e tire as suas dúvidas!

Black Hat 2019 elimina vulnerabilidades no WhatsApp, iOS, Azure

A criptografia de ponta a ponta do seu messenger favorito pode não ser tão segura quanto você pensa. Na conferência de segurança cibernética da Black Hat 2019 (de 7 a 8 de agosto), em Las Vegas, pesquisadores de segurança do código-fonte do WhatsApp da CheckPoint realizaram engenharia reversa para interceptar e manipular mensagens privadas com êxito. O WhatsApp não é a única plataforma importante que está sendo examinada na conferência.

Natalie Silvanovich, da equipe do Project Zero do Google, investigou a superfície de ataque remoto sem interação do iPhone e encontrou 10 bugs no SMS, MMS, Visual Voicemail, iMessage e Mail, todos corrigidos pela Apple. As vulnerabilidades remotas podem ser exploradas para invadir e controlar remotamente um iPhone sem o conhecimento do usuário.

Em uma postagem oficial do blog do Project Zero, Silvanovich escreve: “Diferentemente do Android, as mensagens SMS são processadas em código nativo pelo iPhone, o que aumenta a probabilidade de vulnerabilidades de corrupção de memória. A maioria das vulnerabilidades ocorreu no iMessage devido à sua superfície de ataque ampla e difícil de enumerar. ”

Para torná-los mais seguros, a Apple está dando iPhones a hackers e ethical hackers para que eles possam invadir e sinalizar vulnerabilidades que encontrarem. Na conferência Black Hat, a Apple abriu seu programa de recompensas por bug para iOS e MacOS a todos os pesquisadores e também aumentou o prêmio de recompensa por bug de US $ 100.000 para US $ 1 milhão.

Ao elaborar as vulnerabilidades do WhatsApp, os pesquisadores da Check Point apontaram que haviam criado uma ferramenta para descriptografar as comunicações no WhatsApp. Quando eles reverteram seu algoritmo para descriptografar os dados, descobriram que a plataforma de mensagens estava usando o protocolo protobuf2 para criptografia.

Quando converteram os dados do protobuf2 em JSON (JavaScript Object Notation) – um formato de intercâmbio de dados – eles viram os parâmetros secretos das mensagens que eles foram capazes de manipular.

Continue lendo “Black Hat 2019 elimina vulnerabilidades no WhatsApp, iOS, Azure”

Hackers comprometem mais 80 sites de comércio eletrônico

Pesquisadores de segurança cibernética descobriram mais de 80 sites de comércio eletrônico comprometidos de Magecart que estavam enviando ativamente informações de cartão de crédito de compradores on-line aos servidores controlados por invasores.

Operando seus negócios nos Estados Unidos, Canadá, Europa, América Latina e Ásia, muitos desses sites comprometidos são marcas respeitáveis ​​na indústria de motorsports e high fashion, revelaram hoje pesquisadores do Aite Group e da Arxan Technologies em um relatório compartilhado com o The Hacker News.

Em um mundo cada vez mais digital, os ataques Magecart surgiram como uma ameaça importante de segurança cibernética para sites de comércio eletrônico.

Magecart é um termo genérico dado a diferentes grupos de criminosos cibernéticos especializados em implantar secretamente skimmers on-line de cartões de crédito em sites de comércio eletrônico comprometidos com a intenção de roubar detalhes de cartões de pagamento de seus clientes.

Esses skimmers virtuais de cartão de crédito, também conhecidos como ataque de formjacking, são basicamente códigos JavaScript que os hackers inserem secretamente em um site comprometido, geralmente na página do carrinho de compras, projetados para capturar informações de pagamento dos clientes em tempo real e enviá-las a um servidor invasor-remoto  controlado.

Ultimamente, Magecart é notícia por conduzir vários assaltos de alto nível contra grandes empresas, incluindo British Airways, Ticketmaster, Newegg e outras.

A campanha recém-divulgada não pertence a um único grupo de hackers Magecart; em vez disso, os pesquisadores usaram um mecanismo de busca de código-fonte para procurar por JavaScript ofuscado na Internet com padrões maliciosos que eram vistos anteriormente nos skimmers virtuais de cartões de crédito do Magecart.

De acordo com os pesquisadores, a técnica permitiu que eles descobrissem rapidamente mais de 80 sites de comércio eletrônico comprometidos por grupos Magecart, a maioria encontrados em versões desatualizadas do Magento CMS, vulneráveis ​​a um carregamento não autenticado e a vulnerabilidades de execução remota de código.

 

“A ausência de proteção no aplicativo, como ofuscação de código e detecção de violação, torna os aplicativos da Web vulneráveis ​​a um tipo de ataque cibernético chamado formjacking”, disseram os pesquisadores.

 

“Muitos dos sites comprometidos estão executando as versões 1.5, 1.7 ou 1.9. As vulnerabilidades arbitrárias de upload de arquivos, execução remota de código e falsificação de solicitação entre sites afetam o Magento versão 2.1.6 e inferior. Embora não possa ser declarado com autoridade que foi isso que levou à violação desses sites, são versões vulneráveis ​​do Magento que permitem que os adversários injetem o código de formjacking no site “.

Continue lendo “Hackers comprometem mais 80 sites de comércio eletrônico”