Thursday, December 14, 2017

Key stretching - explicação

Você pode fazer uma chave fraca se tornar mais forte ao executar múltiplos processos para a mesma chave. Por exemplo, você pode ter uma senha e, em seguida, você pode ter o hash dessa senha e, em seguida, hash o hash do hash dessa senha e assim por diante. Isso é chamado de alongamento de chave ou fortalecimento de chave, e a única maneira que você poderia então forçar essa chave em particular é reverter cada um desses hashes para voltar à chave original.

Isso significa que se você quisesse forçar a chave original, você precisaria reverter esse hashing a cada momento para tentar voltar para a chave original. Isso certamente limita o quanto um hacker. 

Se você é um desenvolvedor de aplicativos, você pode querer usar esse fortalecimento essencial ou algoritmos de alongamento de chave, e não há motivos para reconstruí-lo do zero. Existem muitas bibliotecas por aí que você poderia usar.

Perfeito para se proteger contra brute-force attack.

Certificate Pinning - explicação

Os canais seguros são uma pedra angular para usuários e funcionários que trabalham de forma remota e em movimento. Usuários e desenvolvedores esperam uma segurança de ponta a ponta ao enviar e receber dados - especialmente dados confidenciais em canais protegidos por VPN, SSL ou TLS. Embora as organizações que controlam o DNS e a CA provavelmente reduziram o risco na maioria dos modelos de ameaça, usuários e desenvolvedores subjugados ao DNS de outros e uma hierarquia pública da CA estão expostos a quantidades de risco não triviais. Na verdade, a história mostrou que aqueles que dependem de serviços externos sofreram brechas crônicas em seus canais seguros.

O abuso na confiança resultou em usuários, desenvolvedores e aplicativos que tomaram decisões relacionadas à segurança na entrada não confiável. A situação é um pouco paradoxal: entidades como DNS e CAs são confiáveis ​​e supostamente fornecer entrada confiável, mas a sua entrada não pode ser confiável. 

Pinning efetivamente remove a "conferência de confiança". Um aplicativo que define um certificado ou uma chave pública não precisa mais depender de outros - como DNS ou CAs - ao tomar decisões de segurança relacionadas à identidade de um parceiro. Para aqueles familiarizados com o SSH, você deve perceber que o bloqueio da chave pública é quase idêntico à opção StrictHostKeyChecking do SSH. O SSH teve certo o tempo todo, e o resto do mundo está começando a perceber as virtudes de identificar diretamente um host ou serviço por sua chave pública.

]

Wednesday, December 13, 2017

Carrey - Depressão

Com base em sua própria experiência, Carrey então conecta essa verdade com a condição de depressão:

"As pessoas falam sobre depressão o tempo todo. A diferença entre depressão e tristeza é que a tristeza é apenas por casualidade - seja lá o que aconteceu ou não aconteceu para você.

Depressão é o seu corpo dizendo foda se você, eu não quero mais ser esse personagem, não quero mais ser este avatar. É muito para mim.

Você deve pensar na palavra "deprimido" como "descanso profundo". Seu corpo precisa estar deprimido. Precisa de um profundo descanso do personagem que você está tentando jogar ".

Essa pode ser a melhor avaliação da depressão que já ouvi.

Vamos dar a nós mesmos (o que é "auto", de qualquer maneira?) Um intervalo e soltar qualquer identidade que tenhamos trabalhado tão difícil de criar. Vamos ao invés de viver com um coração aberto e um senso de humor sobre nós mesmos e nosso mundo - já que, nas palavras de Jim Carrey, nada disso importa de qualquer maneira.

multiusuários

Os sistemas operacionais multiusuários devem incluir vários recursos:

Um mecanismo de autenticação para verificar a identidade do usuário

Um mecanismo de proteção contra programas de usuário que podem bloquear outros aplicativos que funcionam no sistema

Um mecanismo de proteção contra programas de usuários mal-intencionados que podem interferir ou espionar a atividade de outros usuários

Um mecanismo de contabilidade que limita o número de unidades de recursos atribuídas a cada usuário

Monday, December 11, 2017

DHCP relay agents instead of multiple routers

What do you think is the benefit of using DHCP relay agents instead of multiple routers acting as DHCP servers?


Each router works harder to manage its DHCP addressing, in addition to the primary function of routing traffic. One DHCP server (router or computer) that is dedicated to the job is easier to manage and more centralized.

Sunday, December 10, 2017

Ferramenta rápida de enumeração de subdomínios

Sublist3r é uma ferramenta de python projetada para enumerar subdomínios de sites usando OSINT. Isso ajuda os testadores de penetração e os caçadores de bugs a coletar subdomínios para o domínio que eles estão direcionando. Sublist3r enumera subdomínios usando muitos mecanismos de pesquisa como Google, Yahoo, Bing, Baidu e Ask. Sublist3r também enumera subdomínios usando Netcraft, Virustotal, ThreatCrowd, DNSdumpster e ReverseDNS.
subbruta foi integrada com Sublist3r para aumentar a possibilidade de encontrar mais subdomínios usando bruteforce com uma lista de palavras melhorada. 

Instalação
git clone https://github.com/aboul3la/Sublist3r.git

Versão recomendada do Python:
Sublist3r atualmente suporta Python 2 e Python 3.
A versão recomendada para o Python 2 é 2.7.x
A versão recomendada para o Python 3 é 3.4.x

Dependências:
Sublist3r depende dos módulos de pedidos, dnspython e argparse python.
Essas dependências podem ser instaladas usando o arquivo de requisitos:
Instalação no Windows:
c: \ python27 \ python.exe -m pip install -r requirements.txt
Instalação no Linux
sudo pip install -r requirements.txt
Alternativamente, cada módulo pode ser instalado de forma independente, conforme mostrado abaixo.

Módulo de Solicitações (http://docs.python-requests.org/en/latest/)
Instalar para Windows:
c: \ python27 \ python.exe -m solicitações de instalação de pip
Instalar para Ubuntu / Debian:
sudo apt-get install python-requests
Instale para Centos / Redhat:
sudo yum instale python-requests
Instale usando pip no Linux:
pedidos de instalação de sudo pip

Módulo dnspython (http://www.dnspython.org/)
Instalar para Windows:
c: \ python27 \ python.exe -m pip install dnspython
Instalar para Ubuntu / Debian:
sudo apt-get install python-dnspython
Instale usando pip:
sudo pip instala dnspython

Módulo Argparse
Instalar para Ubuntu / Debian:
sudo apt-get install python-argparse
Instale para Centos / Redhat:
sudo yum install python-argparse
Instale usando pip:
sudo pip install argparse
Para colorir no Windows, instale as seguintes bibliotecas
c: \ python27 \ python.exe -m pip instalar win_unicode_console colorama

Uso
Descrição do formulário longo 
-d --domínio Nome de domínio para enumerar subdomínios de
-b --bruteforce Habilite o módulo sub-brute da força bruta
-p --ports Digitalize os subdomínios encontrados contra portas específicas do tcp
-v --verbose Habilite o modo detalhado e exiba os resultados em tempo real
-t - threads Número de tópicos a serem usados para a força bruta sub-bruta
-e --engines Especifica uma lista de motores de busca separada por vírgulas
-o --output Salva os resultados no arquivo de texto
-h - help mostre a mensagem de ajuda e saia

Exemplos
Para listar todas as opções e switches básicos use -h switch:
python sublist3r.py -h
Para enumerar subdomínios de domínio específico:
python sublist3r.py -d website.com
Para enumerar subdomínios de domínio específico e mostrar apenas subdomínios que possuem portas abertas 80 e 443:
python sublist3r.py -d website.com -p 80.443
Para enumerar subdomínios de domínio específico e mostrar os resultados em tempo real:
python sublist3r.py -v -d example.com
Para enumerar subdomínios e ativar o módulo bruteforce:
python sublist3r.py -b -d example.com
Para enumerar subdomínios e usar mecanismos específicos, tais motores Google, Yahoo e Virustotal
python sublist3r.py -e google, yahoo, virustotal -d example.com

Usando Sublist3r como um módulo em seus scripts python
Exemplo
importar sublist3r
subdomains = sublist3r.main (domain, no_threads, savefile, ports, silent, verbose, enable_bruteforce, engines)
A função principal retornará um conjunto de subdomínios exclusivos encontrados pelo Sublist3r
Uso de Função:
domínio: o domínio que você deseja enumerar subdomínios de.
savefile: salve a saída no arquivo de texto.
portas: especifique uma lista com permuta de vírgulas das portas tcp para digitalizar.
silencioso: configure o sublist3r para funcionar em modo silencioso durante a execução (útil quando você não precisa de muito barulho).
detalhado: exiba os subdomínios encontrados em tempo real.
enable_bruteforce: habilite o módulo bruteforce.
motores: (opcional) para escolher motores específicos.
Exemplo para enumerar subdomínios do Yahoo.com:
importar sublist3r
subdomains = sublist3r.main ('yahoo.com', 40, 'yahoo_subdomains.txt', ports = None, silent = False, verbose = False, enable_bruteforce = False, engines = None)

Qual é a diferença entre Tabela MAC and Tabela ARP?

Tabela MAC (camada 2)

A tabela MAC é usada para mapear endereços MAC para uma interface específica no switch. Estes geralmente expiram a cada 5 minutos ou mais, e são atualizados lendo o endereço de origem do quadro que entra na interface. Seu switch deve ter uma tabela MAC / CAM como um dispositivo de camada 2.

Tabela ARP (camada 3)

A tabela ARP é usada para mapear endereços MAC para endereços IP. Se não existe uma entrada ARP, uma transmissão ARP é enviada e a tabela é atualizada com a resposta. Estes geralmente expiram após 2-4 horas. Cada host conectado à rede deve manter sua própria tabela ARP.

Saturday, December 9, 2017

recuperar seus atributos de arquivo - DOS


Uma maneira segura de recuperar seus atributos de arquivos

PASSO 1:
Conecte sua pen drive à porta USB do seu computador. Verifique se ele é detectado.
PASSO 2:
Inicie o prompt de comando clicando em Iniciar >> Executar e digite cmd e, em seguida, pressione enter.
ETAPA 3:
Encontre a letra da unidade para a unidade USB conectada. Por exemplo, F:
prompt de comando, digite F:
Em seguida, digite
attrib -s -h /s /d *.*
Certifique-se de colocar espaço entre cada elemento no código.


Pressione Enter, espere um momento e isso deve exibir todos os seus arquivos em seu pen drive. Confira abaixo


Rastreadores da Web - ROBOTS.TXT


Os motores de busca coletam informações sobre o conteúdo da Web automaticamente. Eles usam softwares especiais que sistematicamente "rastreiam" a Web, seguindo os links que encontra em páginas da Web. Estes softwares geralmente são chamados de rastreadores da Web, ou uma aranha, ou mesmo um robô. Os sites individuais podem controlar o modo como os mecanismos de pesquisa controlam o site instalando um arquivo especial chamado "ROBOTS.TXT". Se o arquivo estiver presente, um rastreador examina seu conteúdo para obter instruções antes de rastrear o site.





Sunday, December 3, 2017

Os 3 erros mais comuns que os desenvolvedores de JavaScript fazem

POR RYAN J. PETERSON - SOFTWARE ENGINEER

Hoje, o JavaScript está no cerne de praticamente todas as aplicações web modernas. Nos últimos anos, em particular, testemunhamos a proliferação de uma ampla gama de poderosas bibliotecas e estruturas baseadas em JavaScript para o desenvolvimento de aplicativos de página única (SPA), gráficos e animações e até mesmo plataformas de JavaScript do lado do servidor. O JavaScript realmente se tornou onipresente no mundo do desenvolvimento de aplicativos web e, portanto, é uma habilidade cada vez mais importante para dominar.

Em primeiro lugar, o JavaScript pode parecer bastante simples. E de fato, criar funcionalidade básica de JavaScript em uma página da web é uma tarefa bastante intensa para qualquer desenvolvedor de software experiente. No entanto, o idioma é significativamente mais matizado, poderoso e complexo do que inicialmente seria levado a acreditar. Na verdade, muitas das sutilezas do JavaScript levam a uma série de problemas comuns que impedem que funcione.

Erro comum nº 1: referências incorretas --- this

Como as técnicas de codificação de JavaScript e os padrões de design tornaram-se cada vez mais sofisticados ao longo dos anos, houve um aumento correspondente na proliferação de escopos de auto referência dentro de call-backs[i] e fechamentos, que são uma fonte bastante comum de "this/that confusion".

Considere este exemplo de trecho de código:

Game.prototype.restart = function () {
  this.clearLocalStorage ();
  this.timer = setTimeout (function () {
    this.clearBoard (); // o que é isso (this)"?
  }, 0);
};
Executar o código acima resulta no seguinte erro:

Uncaught TypeError: indefinido não é uma função
Por quê?

É tudo sobre o contexto. A razão pela qual você obtém o erro acima é porque, quando invoca setTimeout (), você está realmente invocando window.setTimeout (). Como resultado, a função anônima passada para setTimeout () está sendo definida no contexto do objeto de window, que não possui nenhum método clearBoard ().

Uma solução tradicional, compatível com o navegador antigo, é simplesmente salvar sua referência this em uma variável que pode ser herdada pelo fechamento; por exemplo.:

Game.prototype.restart = function () {
  this.clearLocalStorage ();
  var self = this; // salve a referência a 'this', enquanto ainda é isso!
  this.timer = setTimeout (function () {
    self.clearBoard (); // oh OK, eu sei quem é o "eu"!
  }, 0);
};
Alternativamente, em navegadores mais novos, você pode usar o método bind () para passar na referência apropriada:

Game.prototype.restart = function () {
  this.clearLocalStorage ();
  this.timer = setTimeout (this.reset.bind (this), 0); // bind to 'this'
};

Game.prototype.reset = function () {
    this.clearBoard (); // ahhh, de volta ao contexto do direito 'this'!
};


Erro comum # 2: pensando que existe um escopo de nível de bloco

Uma fonte comum de confusão entre desenvolvedores de JavaScript (e, portanto, uma fonte comum de bugs) é assumir que o JavaScript cria um novo escopo para cada bloco de código. Embora isso seja verdade em muitos outros idiomas, não é verdade em JavaScript. Considere, por exemplo, o seguinte código:

for (var i = 0; i <10; i ++) {
  / * ... * /
}
console.log (i); // qual será esse resultado?
Se você adivinhar que a chamada console.log () emitiria indefinido ou lançaria um erro, você adivinhou incorretamente. Acredite ou não, ele emitirá 10. Por quê?

Na maioria dos outros idiomas, o código acima levaria a um erro porque a "vida" (ou seja, o escopo) da variável i seria restrita ao bloco for. Em JavaScript, porém, esse não é o caso e a variável i permanece no escopo mesmo após o loop for concluído, mantendo seu último valor depois de sair do loop. (Esse comportamento é conhecido, aliás, como elevação de variável).

Vale ressaltar, no entanto, que o suporte para escopos de nível de bloco está fazendo o seu caminho para o JavaScript através da nova palavra-chave Let. A palavra-chave Let está disponível no JavaScript 1.7 e está programada para se tornar uma palavra-chave JavaScript oficialmente aceita a partir do ECMAScript 6.

Erro comum # 3: Criando vazamentos de memória

Os vazamentos de memória são problemas de JavaScript quase inevitáveis se você não estiver codificando conscientemente para evitá-los. Existem inúmeras maneiras de ocorrerem, então vamos destacar algumas das suas ocorrências mais comuns.

Vazamento de memória Exemplo 1: referências de manobra para objetos desaparecidos

Considere o seguinte código:

var theThing = null;
var replaceThing = function () {
  var priorThing = theThing; // aguarde a coisa anterior
  var unused = function () {
    // 'não utilizado' é o único lugar onde 'priorThing' é referenciado,
    //, mas "não utilizado" nunca é invocado
    se (priorThing) {
      console.log ("oi");
    }
  };
  theThing = {
    longStr: nova Array (1000000) .join ('*'), // cria um objeto de 1MB
    someMethod: function () {
      console.log (someMessage);
    }
  };
};
setInterval (replaceThing, 1000); // invoca `replaceThing 'uma vez a cada segundo
Se você executar o código acima e monitorar a utilização da memória, você achará que você obteve um enorme vazamento de memória, vazando um megabyte por segundo! E mesmo um GC manual não ajuda. Então, parece que estamos vazando longStr sempre que o replaceThing é chamado. Mas por que?

Vamos examinar as coisas com mais detalhes:

Cada objeto TheThing contém seu próprio objeto LongStr de 1 MB. A cada segundo, quando chamamos o replaceThing, ele mantém uma referência ao objeto anterior do theThing no PriorThing. Mas ainda não pensamos que isso seria um problema, já que cada vez, o PriorThing anteriormente referenciado seria referenciado (quando o PriorThing é reiniciado via priorThing = theThing;). E, além disso, é apenas referenciado no corpo principal de replaceThing e na função não utilizada que, de fato, nunca foi usada.

Então, novamente ficamos nos perguntando por que há um vazamento de memória aqui!?

Para entender o que está acontecendo, precisamos entender melhor como as coisas funcionam em JavaScript sob o capô. A maneira típica em que os encerramentos são implementados é que cada objeto de função tem um link para um objeto de estilo de dicionário que representa seu escopo lexical. Se ambas as funções definidas dentro do replaceThing realmente usado anteriormente, seria importante que ambos obtivessem o mesmo objeto, mesmo que PriorThing seja atribuído uma e outra vez, de modo que ambas as funções compartilhem o mesmo ambiente lexical. Mas assim que uma variável é usada por qualquer fechamento, ela termina no ambiente lexical compartilhado por todos os encerramentos nesse escopo. E essa pequena nuance é o que leva a esse vazamento de memória gnarly. (Mais detalhes sobre isso estão disponíveis aqui.)

Folha de memória Exemplo 2: Referências circulares

Considere este fragmento de código:

função addClickHandler (elemento) {
    element.click = function onClick (e) {
        alerta ("clicou o" + element.nodeName)
    }
}
Aqui, onClick tem um fechamento que mantém uma referência ao elemento (via element.nodeName). Ao também atribuir onClique para element.click, a referência circular é criada; isto é .: elemento -> onClick -> elemento -> onClick -> elemento ...

Curiosamente, mesmo que o elemento seja removido do DOM, a auto-referência circular acima evitaria elementos e onClick de serem coletados e, portanto, um vazamento de memória.

Evitando vazamentos de memória: o que você precisa saber

O gerenciamento de memória de JavaScript (e, em pacotes, coleta de lixo) é amplamente baseado na noção de acessibilidade do objeto.

Os seguintes objetos são assumidos como acessíveis e são conhecidos como "raízes":

Objetos referenciados de qualquer lugar na pilha de chamadas atual (isto é, todas as variáveis e parâmetros locais nas funções atualmente invocadas e todas as variáveis no escopo)
Todas as variáveis globais
Os objetos são mantidos na memória pelo menos desde que sejam acessíveis a partir de qualquer uma das raízes através de uma referência, ou uma cadeia de referências.

Existe um colector de lixo (GC) no navegador que limpa a memória ocupada por objetos inacessíveis; ou seja, os objetos serão removidos da memória se e somente se o GC acreditar que eles são inacessíveis. Infelizmente, é bastante fácil acabar com objetos "zumbis" extintos que de fato não estão em uso, mas que o GC ainda pensa ser "acessível".



[i] A chamada de retorno é qualquer código executável que seja passado como um argumento para outro código, o que é esperado para chamar (executar) o argumento em um determinado momento.

Saturday, December 2, 2017

Firewall aplica as regras em ordem

Quando um pacote chega, o firewall aplica as regras em ordem. Se o pacote, ou sua conexão, corresponder a uma das regras, o firewall aplica a regra. Se a regra permitir o tráfego, o firewall entrega o pacote. Se a regra nega o tráfego, o firewall descarta o pacote.

Este firewall implementa "Negar por padrão" e, em seguida, aplica as regras na tabela. Se o firewall não implementar Negar por Padrão e a regra da compania requer Negar por Padrão, o firewall deve negar as conexões restantes.

Key stretching - explicação

Você pode fazer uma chave fraca se tornar mais forte ao executar múltiplos processos para a mesma chave. Por exemplo, você pode ter uma se...