Segurança

10 tipos de vulnerabilidades de segurança

10 tipos de vulnerabilidades de segurança
Uma falha não intencional ou acidental no código do software ou em qualquer sistema que o torne potencialmente explorável em termos de acesso a usuários ilegítimos, comportamentos maliciosos como vírus, trojans, worms ou qualquer outro malware é chamada de vulnerabilidade de segurança. O uso de software que já foi explorado ou o uso de senhas fracas e padrão também tornam o sistema vulnerável ao mundo exterior. Esses tipos de vulnerabilidades de segurança requerem patch para evitar que hackers usem exploits usados ​​anteriormente para obter acesso não autorizado ao sistema. Uma vulnerabilidade de segurança também chamada de brecha de segurança ou fraqueza é uma falha, um bug ou uma falha na implementação de código, design e arquitetura de um aplicativo da web e servidores, que quando deixada sem solução pode resultar no comprometimento do sistema e torna o toda a rede vulnerável ao ataque. As pessoas que serão infectadas incluem o proprietário do aplicativo, os usuários do aplicativo e qualquer outra pessoa que dependa desse aplicativo. Vejamos os riscos de segurança mais perigosos e comuns para aplicativos da web.

Índice

  1. Injeção de banco de dados
  2. Autenticação Quebrada
  3. Exposição de dados sensíveis
  4. Entidades externas XML (XEE)
  5. Controle de acesso quebrado
  6. Configuração incorreta de segurança
  7. Cross-site Scripting (XSS)
  8. Desserialização Insegura
  9. Usando componentes com vulnerabilidades conhecidas
  10. Registro e monitoramento insuficientes

Injeção de banco de dados:

Em caso de envio de dados não confiáveis ​​para o intérprete como parte do comando por meio de qualquer área que receba a entrada do usuário i.Na entrada do formulário ou em qualquer outra área de envio de dados, ocorrem falhas de injeção. As consultas maliciosas do invasor podem induzir o intérprete a executar comandos que podem mostrar dados confidenciais que o usuário não tem autorização para examinar. Por exemplo, em um ataque de injeção de SQL, quando a entrada do formulário não é devidamente higienizada, o invasor pode entrar no banco de dados SQL e acessar seu conteúdo sem autorização, apenas inserindo o código malicioso do banco de dados SQL em um formulário que espera um texto simples. Qualquer tipo de campo que leva a entrada do usuário é injetável i.e parâmetros, variáveis ​​de ambiente, todos os serviços da web, etc.

O aplicativo é vulnerável ao ataque de injeção quando os dados fornecidos pelo usuário não são higienizados e validados, pelo uso de consultas dinâmicas sem escape ciente do contexto e o uso de dados hostis diretamente. Falhas de injeção podem ser facilmente descobertas por meio do exame de código e pelo uso de ferramentas automatizadas como scanners e fuzzers. Para evitar ataques de injeção, há algumas medidas que podem ser tomadas, como separar os dados de comandos e consultas, uso de uma API segura que fornece uma interface parametrizada, uso de validação de entrada do lado do servidor de "lista branca" por meio de ferramentas como Snort, escape de caracteres especiais usando sintaxe de escape específica, etc.

Um ataque de injeção pode levar a uma perda massiva de dados, divulgação de informações confidenciais, negação de acesso e pode até levar a uma aquisição completa do aplicativo. Alguns controles SQL como LIMIT podem ser usados ​​para controlar grandes quantidades de perda de dados em caso de um ataque. Alguns tipos de ataques de injeção são SQL, OS, NoSQL, ataques de injeção de LDAP.

Autenticação quebrada:

Os invasores podem acessar contas de usuário e podem até comprometer todo o sistema host por meio de contas de administrador, usando as vulnerabilidades nos sistemas de autenticação. As falhas de autenticação permitem que o invasor comprometa senhas, tokens de sessão, chaves de autenticação e pode ser encadeado com outros ataques que podem levar ao acesso não autorizado de qualquer outra conta de usuário ou sessão temporariamente e, em alguns casos, permanentemente. Digamos que um usuário tenha uma lista de palavras ou um dicionário de milhões de nomes de usuário e senhas válidos obtidos durante uma violação. Ele pode usá-los um por um em muito menos tempo, usando ferramentas automatizadas e scripts no sistema de login para ver se alguém funciona. A má implementação de gerenciamento de identidade e controles de acesso leva a vulnerabilidades como autenticação interrompida.

O aplicativo é vulnerável a ataques de autenticação quando permite a tentativa de diferentes nomes de usuário e senhas, permite ataques de dicionário ou ataques de força bruta sem qualquer estratégia de defesa, uso fácil, senhas padrão ou senhas que vazam em qualquer violação, expõe ids de sessão em URL, usa esquema de recuperação de senha ruim, usa um padrão de cookies. A autenticação quebrada pode ser explorada facilmente usando ferramentas simples para ataques de força bruta e de dicionário com um bom dicionário. Esses tipos de ataques podem ser evitados usando sistemas de autenticação multifator, implementando verificações de senha fraca executando uma senha através de um banco de dados de senhas incorretas, não usando credenciais padrão, alinhando a política de complexidade de senha, pelo uso de bom servidor gerenciador de sessão que gera um novo id de sessão aleatório após o login, etc.

A vulnerabilidade de autenticação quebrada pode resultar no comprometimento de algumas contas de usuário e uma conta de administrador, que é tudo o que um invasor precisa para comprometer um sistema. Esses tipos de ataques levam ao roubo de identidade, fraude da previdência social, lavagem de dinheiro e divulgação de informações altamente confidenciais. Os ataques incluem ataques de dicionário, força bruta, sequestro de sessão e ataques de gerenciamento de sessão.

Exposição de dados sensíveis:

Às vezes, os aplicativos da web não protegem dados e informações confidenciais, como senhas, credenciais de banco de dados, etc. Um invasor pode facilmente roubar ou modificar essas credenciais fracamente protegidas e usá-las para fins ilegítimos. Os dados confidenciais devem ser criptografados em repouso ou em trânsito e ter uma camada extra de segurança, caso contrário, os invasores podem roubá-los. Os invasores podem colocar as mãos em dados confidenciais expostos e roubar usuários com hash ou texto claro e credenciais de banco de dados do servidor ou navegador da web. Por exemplo, se um banco de dados de senhas usa hashes simples ou sem sal para armazenar senhas, uma falha de upload de arquivo pode permitir que um invasor recupere o banco de dados de senhas, o que levará à exposição de todas as senhas com uma tabela de arco-íris de hashes pré-calculados.

A principal falha não é apenas que os dados não são criptografados, mesmo que sejam criptografados, mas a geração de chave fraca, algoritmos de hash fracos, uso de cifra fraco também podem resultar nesses tipos de um dos ataques mais comuns. Para evitar esses tipos de ataques, primeiro classifique quais tipos de dados podem ser considerados confidenciais de acordo com as leis de privacidade e aplique os controles de acordo com a classificação. Tente não armazenar nenhum dado classificado de que você não precisa, lave-o assim que usá-lo. Para os dados em trânsito, criptografe-os com protocolos seguros i.e TLS com cifras PFS, etc.

Esses tipos de vulnerabilidades podem resultar na exposição de informações altamente confidenciais, como credenciais de cartão de crédito, registros de saúde, senhas e quaisquer outros dados pessoais que podem levar ao roubo de identidade e fraude bancária, etc.

Entidades externas XML (XEE):

Processadores XML mal configurados processam referências de entidades externas em documentos XML. Essas entidades externas podem ser usadas para recuperar dados de arquivos internos, como / etc / passwd arquivo ou para realizar outras tarefas maliciosas.  Processadores XML vulneráveis ​​podem ser facilmente explorados se um invasor puder fazer upload de um documento XML ou incluir XML etc. Essas entidades XML vulneráveis ​​podem ser descobertas usando ferramentas SAST e DAST ou manualmente inspecionando dependências e configurações.

Um aplicativo da web é vulnerável ao ataque XEE devido a muitos motivos, como se o aplicativo aceita entrada XML direta de fontes não confiáveis, Definições de Tipo de Documento (DTDs) no aplicativo estão habilitadas, o aplicativo usa SAML para processamento de identidade como SAML usa XML para identidade inserções, etc. Os ataques XEE podem ser atenuados evitando a serialização de dados confidenciais, usando formatos de dados menos complicados i.e JSON, patching dos processadores XML que a aplicação está usando atualmente e até mesmo das bibliotecas, desabilitando DTDs em todos os analisadores XML, validação da funcionalidade de upload de arquivos XML usando verificação XSD, etc.

O aplicativo vulnerável a esses tipos de ataques pode levar ao ataque DOS, ataque Billion Laughs, varredura de sistemas internos, varredura de porta interna, execução de um comando remoto que resulta em afetar todos os dados do aplicativo.

Controle de acesso quebrado:

O controle de acesso está dando aos usuários privilégios para realizar tarefas específicas. A vulnerabilidade de controle de acesso quebrado ocorre quando os usuários não são adequadamente restringidos nas tarefas que podem executar. Os invasores podem explorar esta vulnerabilidade que pode acabar acessando funcionalidades ou informações não autorizadas. Digamos que um aplicativo da web permita que o usuário altere a conta da qual está conectado apenas alterando o URL para a conta de outro usuário, sem verificação adicional.  Explorar a vulnerabilidade de controle de acesso é um ataque de qualquer invasor, esta vulnerabilidade pode ser encontrada manualmente, bem como usando as ferramentas SAFT e DAFT. Essas vulnerabilidades existem devido à falta de testes e detecção automatizada de aplicativos da web, embora a melhor maneira de encontrá-los seja fazê-lo manualmente.

Vulnerabilidades contêm escalonamento de privilégios i.e agindo como um usuário que você não é ou agindo como um administrador enquanto você é um usuário, ignorando as verificações de controle de acesso apenas modificando a URL ou alterando o estado do aplicativo, manipulação de metadados, permitindo que a chave primária seja alterada como a chave primária de outro usuário, etc. Para evitar esses tipos de ataques, os mecanismos de controle de acesso devem ser implementados no código do lado do servidor, onde os invasores não podem modificar os controles de acesso. A aplicação de limites de negócios de aplicativos exclusivos por modelos de domínio, desativação de diretórios de servidores de listagem, alerta ao administrador sobre tentativas repetidas de login com falha, invalidação de tokens JWT após o logout deve ser garantida para mitigar esses tipos de ataques.

Os invasores podem atuar como outro usuário ou administrador usando esta vulnerabilidade para executar tarefas maliciosas, como criar, excluir e modificar registros, etc. Pode ocorrer perda massiva de dados se os dados não estiverem protegidos, mesmo após uma violação.

Configuração incorreta de segurança:

A vulnerabilidade mais comum é a configuração incorreta de segurança. O principal motivo da vulnerabilidade é o uso de configuração padrão, configuração incompleta, configurações Adhoc, cabeçalhos HTTP mal configurados e mensagens de erro detalhadas contendo mais informações do que o usuário realmente deveria saber. Em qualquer nível de um aplicativo da web, podem ocorrer configurações incorretas de segurança i.banco de dados e, servidor web, servidor de aplicativos, serviços de rede, etc. Os invasores podem explorar sistemas não corrigidos ou acessar arquivos e diretórios desprotegidos para manter o sistema não autorizado. Por exemplo, mensagens de erro excessivamente verbosas de um aplicativo que ajudam o invasor a saber vulnerabilidades no sistema do aplicativo e como ele funciona. Ferramentas automatizadas e scanners podem ser usados ​​para detectar esses tipos de falhas de segurança.

Um aplicativo da web contém esse tipo de vulnerabilidade se não tiver as medidas de proteção de segurança em qualquer parte do aplicativo, portas desnecessárias forem abertas ou habilitar recursos desnecessários, senhas padrão forem usadas, tratamento de erros revelar erros informativos para o invasor, ele está usando software de segurança sem patch ou desatualizado, etc. Isso pode ser evitado removendo recursos desnecessários do código, i.e uma plataforma mínima sem recursos desnecessários, documentação, etc, permitindo uma tarefa para atualizar e corrigir as falhas de segurança como parte dos processos de gerenciamento de patch, o uso de um processo para verificar a eficácia das medidas de segurança tomadas, o uso de processo de proteção repetível para fazer é fácil implantar outro ambiente devidamente bloqueado.

Esses tipos de vulnerabilidades ou falhas permitem que o invasor obtenha acesso não autorizado aos dados do sistema, o que leva ao comprometimento total do sistema.

Cross-Site Scripting (XSS):

As vulnerabilidades de XSS acontecem no momento em que um aplicativo da web incorpora dados não confiáveis ​​em uma nova página do site sem aprovação legítima ou escape, ou atualiza uma página do site atual com dados fornecidos pelo cliente, utilizando uma API do navegador que pode fazer HTML ou JavaScript.  As falhas de XSS ocorrem no caso de o site permitir que um usuário adicione um código personalizado em um caminho de URL que pode ser visto por outros usuários. Essas falhas são usadas para executar código JavaScript malicioso no navegador do alvo. Digamos que um invasor pode enviar um link para a vítima contendo um link para o site de qualquer empresa. Esta conexão pode conter algum código JavaScript malicioso incorporado. Caso a página do banco não esteja devidamente protegida contra ataques XSS, ao clicar no link, o código malicioso será executado no navegador da vítima.

Cross-Site Scripting é uma vulnerabilidade de segurança que está presente em quase ⅔ dos aplicativos da web. Um aplicativo é vulnerável a XSS se o aplicativo armazena uma entrada de usuário não higienizada que pode ser vista por outro usuário, pelo uso de estruturas JavaScript, aplicativos de página única e APIs que incorporam informações controláveis ​​do invasor a uma página são impotentes contra DOM XSS. Os ataques XSS podem ser mitigados pelo uso de frameworks que escapam e higienizam a entrada XSS por natureza, como React JS etc, aprendendo as limitações dos frameworks e cobrindo-os usando seus próprios casos, escapando de dados HTML desnecessários e não confiáveis ​​em todos os lugares i.e em atributos HTML, URI, Javascript, etc, uso de codificação sensível ao contexto em caso de modificação de documento no lado do cliente, etc.

Ataques baseados em XSS são de três tipos i.e XSS refletido, DOM XSS e XSS armazenado. Todos os tipos desses ataques têm um impacto significativo, mas no caso do XSS armazenado, o impacto é ainda maior i.e roubo de credenciais, envio de malware para a vítima, etc.

Desserialização insegura:

A serialização de dados significa pegar objetos e convertê-los em qualquer formato para que esses dados possam ser usados ​​para outros fins posteriormente, enquanto a desserialização de dados significa o oposto disso. A desserialização é descompactar esses dados serializados para o uso de aplicativos. A desserialização insegura significa moderar os dados que foram serializados um pouco antes de serem descompactados ou desserializados.  A desserialização insegura leva à execução remota de código e é usada para realizar outras tarefas para fins maliciosos, como escalonamento de privilégios, ataques de injeção, ataques de repetição, etc. Existem algumas ferramentas disponíveis para descobrir esses tipos de falhas, mas a assistência humana é freqüentemente necessária para validar o problema. Explorar a desserialização é um pouco difícil, pois os exploits não funcionarão sem algumas mudanças manuais.

Quando o aplicativo desserializa objetos maliciosos fornecidos pela entidade atacante. Isso pode levar a dois tipos de ataques i.Os ataques relacionados à estrutura de dados e objetos nos quais o invasor modifica a lógica do aplicativo ou executa código remoto e ataques típicos de adulteração de dados nos quais as estruturas de dados existentes são usadas com conteúdo modificado, por exemplo, ataques relacionados ao controle de acesso.  A serialização pode ser usada em comunicação de processo remoto (RPC) ou comunicação entre processos (IPC), armazenamento em cache de dados, serviços da web, servidor de cache de banco de dados, sistemas de arquivos, tokens de autenticação de API, cookies HTML, parâmetros de formulário HTML, etc. Ataques de desserialização podem ser mitigados não usando objetos serializados de fontes não confiáveis, implementando verificações de integridade, isolando o código em execução em um ambiente de baixo privilégio, monitorando conexões de rede de entrada e saída de servidores que desserializam com frequência.

Usando componentes com vulnerabilidades conhecidas:

Diferentes componentes como bibliotecas, estruturas e módulos de software são usados ​​pela maioria dos desenvolvedores no aplicativo da web. Essas bibliotecas ajudam o desenvolvedor a evitar trabalho desnecessário e fornecem a funcionalidade necessária. Os atacantes procuram por falhas e vulnerabilidades nesses componentes para coordenar um ataque. No caso de encontrar uma brecha de segurança em um componente pode tornar todos os sites que usam o mesmo componente vulneráveis. Explorações dessas vulnerabilidades já estão disponíveis, enquanto escrever uma exploração personalizada do zero exige muito esforço. Este é um problema muito comum e difundido, o uso de grandes quantidades de componentes no desenvolvimento de um aplicativo da web pode levar a nem mesmo saber e compreender todos os componentes usados, corrigir e atualizar todos os componentes é um longo caminho.

Um aplicativo é vulnerável se o desenvolvedor não sabe a versão de um componente usado, o software está desatualizado i.e o sistema operacional, SGBD, software em execução, ambientes de tempo de execução e as bibliotecas, a verificação de vulnerabilidade não é feita regularmente, a compatibilidade do software corrigido não é testada pelos desenvolvedores. Isso pode ser evitado removendo dependências, arquivos, documentação e bibliotecas não utilizadas, verificando a versão dos componentes do lado do cliente e do servidor regularmente, obtendo componentes e bibliotecas de fontes seguras oficiais e confiáveis, monitorando as bibliotecas e componentes sem patch, garantindo um plano para atualizar e corrigir componentes vulneráveis ​​regularmente.

Essas vulnerabilidades levam a impactos menores, mas também podem levar ao comprometimento do servidor e do sistema. Muitas violações de grande porte dependiam de vulnerabilidades conhecidas de componentes. O uso de componentes vulneráveis ​​prejudica as defesas do aplicativo e pode ser um ponto de partida para um grande ataque.

Registro e monitoramento insuficientes:

A maioria dos sistemas não toma medidas e etapas suficientes para detectar violações de dados. O tempo médio de resposta de um incidente é de 200 dias após sua ocorrência, é muito tempo para fazer todas as coisas desagradáveis ​​para uma entidade atacante. O registro e o monitoramento insuficientes permitem que o invasor ataque ainda mais o sistema, mantenha o controle do sistema, adultere, retenha e extraia dados conforme a necessidade. Os invasores usam a falta de monitoramento e resposta a seu favor para atacar o aplicativo da web.
Registro e monitoramento insuficientes ocorrem a qualquer momento i.Os logs de aplicativos que não estão sendo monitorados quanto a atividades incomuns, eventos auditáveis ​​como tentativas de login malsucedidas e altos valores de transação não são registrados corretamente, avisos e erros geram mensagens de erro pouco claras, nenhum alerta de gatilho em caso de pentesting usando ferramentas DAST automatizadas, sendo incapaz de detectar ou alertar ataques ativos rapidamente, etc. Isso pode ser atenuado garantindo que todo o login, falhas de controle de acesso e validação de entrada do lado do servidor possam ser registrados para identificar a conta do usuário malicioso e retidos por um período de tempo suficiente para investigação forense atrasada, garantindo que os logs gerados estão em um formato compatível com soluções de gerenciamento de log centralizado, garantindo verificações de integridade em transações de alto valor, estabelecendo um sistema para alertas em tempo hábil de atividades suspeitas, etc.

A maioria dos ataques bem-sucedidos começa com a verificação e sondagem de vulnerabilidades em um sistema, permitindo que essas sondagens de vulnerabilidade possam resultar no comprometimento de todo o sistema.

Conclusão:

As vulnerabilidades de segurança em um aplicativo da web afetam todas as entidades relacionadas a esse aplicativo. Essas vulnerabilidades devem ser cuidadas para fornecer um ambiente seguro e protegido para os usuários. Os invasores podem usar essas vulnerabilidades para comprometer um sistema, obtê-lo e escalar privilégios. O impacto de um aplicativo da web comprometido pode ser visualizado desde credenciais de cartão de crédito roubadas e roubo de identidade até o vazamento de informações altamente confidenciais, etc. dependendo das necessidades e vetores de ataque de entidades maliciosas.

Jogos HD Remasterizados para Linux que nunca tiveram uma versão Linux anterior
Muitos desenvolvedores e editores de jogos estão apresentando remasterização em HD de jogos antigos para estender a vida da franquia, por favor, os fã...
Como usar o AutoKey para automatizar jogos Linux
AutoKey é um utilitário de automação de desktop para Linux e X11, programado em Python 3, GTK e Qt. Usando sua funcionalidade de script e MACRO, você ...
Como mostrar o contador de FPS em jogos Linux
Os jogos Linux tiveram um grande impulso quando a Valve anunciou o suporte Linux para o cliente Steam e seus jogos em 2012. Desde então, muitos jogos ...