Conheça nosso Grupo De Estudos!



Segurança na web - Servidores e Impacto no usuário final

Introdução

Tem como objetivo citar e descrever tópicos importantes que devem ser expostos no debate em ordem, também tem o objetivo de equilibrar os conhecimentos para podermos manter o debate em alto nível. O assunto segurança é muito extenso para ser garantido em apenas uma palestra. Nosso objetivo não é esse, nosso objetivo é pregar nos presentes os maiores riscos, as melhores práticas para manter a segurança e como prezar pelo usuário.

Servidores

Um servidor é um computador que é montado para servir, servir muitas requisições ao mesmo tempo. Como tal, ele precisa ser bem criado, quanto melhor combinado, melhores componentes, melhor será o servidor. Um servidor pode armazenar diversos sites, diversos serviços diferentes e ainda mais e mais, o que você pode fazer com um servidor é limitado apenas a capacidade física dele. Sabendo disso, já deve estar supondo que se alguém conseguir acesso a esse servidor por meio de uma falha, este alguém terá acesso a todos os bancos de dados, a todas as senhas, a todos os sites e a tudo que aquilo possuir. Na maioria das vezes que um cracker consegue acesso a um servidor ele produz uma mudança da index (página principal de um site) de todos os sites no servidor, essa prática é conhecida como Mass Defacement - Desconfiguração em massa, no geral as falhas exploradas para alcançar um mass defacement é explorar o administrador, após conseguir a conta do administrador ele acessa o servidor como o administrador e causa o mass defacement. Outras técnicas não muito eficazes como brute force - força bruta funcionam também, quando encontrado uma porta que possibilita entrada no servidor ele poderá tentar um brute force no login daquela porta e talvez consiga o acesso se a senha for fraca. Existem também falhas específicas que pertencem ao sistema operacional usado ou à versão usada de um determinado programa que pode ser explorado e causar um acesso indevido.Dicas para esse tópico: Use sempre a última versão estável pois ela é a versão mais atualizada e portanto, mais segura e mais eficiente. Não use senhas padronizadas, previsíveis, entendíveis. Não use senhas que possa ser ligado a você de alguma maneira, use senhas geradas automaticamente pois essas serão fora do padrão e prezarão pela segurança e guarde essa senha num lugar que possua criptografia e desconectado de qualquer rede, qualquer rede.

Aplicações Web

As aplicações web são o que irão processar as requisições no lado do servidor e responder a elas e essa resposta será renderizada pelo navegador e exibida ao usuário, uma aplicação vulnerável poderá responder ao usuário com o login e senha de seu administrador por isso é importante que ela seja muito bem criada para que tenha segurança , performance e leveza para garantir que o usuário aprove e que você esteja seguro. Sabendo disso temos que saber qual linguagem é a melhor para nossa segurança, praticidade e performance. Algumas linguagens de programação possui suporte para ser uma linguagem para a web vindo até com um próprio executável para executar a aplicação web, cada linguagem tem uma comunidade específica, tem uma origem, uma performance, tem um foco e suportes que diferem entre elas. Quando for escolher sua linguagem, pergunte-se: ela é rápida ? Ela é prática ? Ele possui bom suporte, da comunidade e de seus desenvolvedores ? Ela é segura? As mais populares linguagens já foram muito testadas e evoluídas até chegar onde chegaram, você na prática vai lidar com a performance da linguagem e sua praticidade. Vamos listar as melhores linguagens e seus melhores frameworks - Frameworks é uma camada criada que seu código roda em cima, frameworks possuem muitas vantagens mas desvantagens também.

Firewall

Firewall é um quesito de segurança com cada vez mais importância no mundo da computação. À medida que o uso de informações e sistemas é cada vez maior, a proteção destes requer a aplicação de ferramentas e conceitos de segurança eficientes. O firewall é uma opção praticamente imprescindível. Firewall é o nome dado ao mecanismo de uma rede de computadores que tem por objetivo aplicar uma política de segurança a um determinado ponto de controle da rede. Seu objetivo é permitir somente a transmissão e a recepção de dados autorizados. Este mecanismo atua como uma defesa de um computador ou de uma rede, controlando o acesso ao sistema por meio de regras e a filtragem de dados. A vantagem do uso de firewalls em redes, é que somente um computador pode atuar como firewall, não sendo necessário instalá-lo em cada máquina conectada.

OWASP Top 10 Riscos de T10 Segurança em Aplicações – 2013

A Open Web Application Security Project (OWASP) é uma entidade sem fins lucrativos e de reconhecimento internacional, que contribui para a melhoria da segurança de softwares aplicativos.

Ruby On Rails

Ruby on rails é um framework full stack para aplicações web, por ser fulk stack ele já faz quase tudo pra você, proporcionando conexão com o banco de dados seguro e diversas outras facilidades. Ele já vem com muitas coisas prontas mas as vezes você não irá usar todas essas coisas e pessoas que não gostam de fullstack criticam isso. Rails é feito para Ruby, isto é, você programa sua aplicação na linguagem Ruby que é por natureza muito prática e com bastante suporte e bastante veloz.

Node.Js

Node.Js é uma linguagem para servidor em JavaScript, JS (JavaScript) é comumente usado no navegador do lado do cliente para gerar animações e outras coisas legais porém antes do node não era usado para servidores, para execução no lado do servidor. Com o Node você pode usar o Express para ser seu framework para sua aplicação web ou não, você pode apenas com o Node criar uma aplicação do zero. Comumente não se usa junto com essa linguagem frameworks fullstack sendo ela bem minimalista e portanto leve, a comunidade do node é muito grande e possui segurança já padrão para execuções de consulta SQL por exemplo.

Flex e Django

Flex é um framework minimalista criado para Python, você cria sua aplicação web com a linguagem Python assim como Django, sendo esse último um framework fullstack para aplicações web em Python.Python é uma linguagem maravilhosa e veloz, com um suporte muito bom e sempre evoluindo , ira encontrar muita facilidade e praticidade com Python assim como segurança, consultas SQL são preparadas antes da execução prevenindo ataques.

Falhas mais comuns em aplicações web:

SQLi

SQLi significa SQL (- Linguagem usada para consultas em banco de dados) Injection, isso acontece quando uma consulta SQL é feita com uma variável que veio do usuário no qual não foi preparada. Linguagens mais atuais fazem essa preparação internamente porém linguagens como PHP por muito tempo não fez, sendo essa linguagem a mais vulnerável a essa falha. A alguns anos era comum usar a função mysql_query do PHP para fazer uma consulta SQL ao banco de dados MySQL e isso muitas vezes envolvia variável do usuário como usuário e senha para uma autenticação porém a função mysql_query não faz preparação da consulta, possibilitando então uma invasão através da falha de SQLi. Uma invasão através do SQLi possibilitará ao invasor pegar todos os bancos de dados, qualquer coisa que tenha em seu banco de dados ele tera acesso através dessa falha e será bem fácil. O PHP só evoluiu depois que passou a usar o PDO que é uma classe para consulta com o banco de dados no qual faz preparação antes de consultar, porém a maioria das aplicações ainda estão vulneráveis. Dicas para esse caso: nunca acredite em entrada do usuário, verifique sempre, use a última versão , nunca use métodos ou objetos anotados como deprecated e de preferência aos métodos nativos para preparação da consulta.

XSS

XSS significa cross site scripting , que significa que um atacante poderá injetar um código javascript que será executado pelo cliente que acessar aquele link e isso colocará os seus clientes totalmente vulneráveis pois o atacante pode obter a senha do usuário ou mesmo praticar um redirecionamento que pedirá acesso a banco ou a conta de Facebook e o seu cliente confiará achando que é você quando é um atacante. Uma falha de XSS acontece quando um script JavaScript ou mesmo código HTML é inserido na página sem verificação por parte do servidor. Toda entrada do usuário deve obrigatoriamente ser verificada. Se um código HTML ou JavaScript for colocado na sua seção de comentários que não é verificado e portando falho, toda vez que um usuário entrar naquela página que contém o comentário malicioso estará em perigo. Dicas para esse caso: procure por códigos HTML no input do usuário e de novo, não acredite em nada que o usuário disser, verifique tudo, paranóicamente.

Redirect Unverified

Quando você usa redirecionamento no seu site, seja para fazer rotas de controle ou apenas comodidade, você tem que verificar para onde você está redirecionando. Se não fizer isso, um atacante poderá pedir para você redirecionar para um site malicioso e você fará isso causando seus clientes a ficar em perigo. Dicas para aqui: verifique tudo.

CSRF

CSRF é abreviação para Cross Site Request Forgery. Um site que possui requisição pode estar vulnerável a CSRF caso não coloque um valor randômico e o verifique antes de processar. CSRF acontece quando uma requisição vinda de outro site é processada sem verificação, é simples. Um site malicioso usa um formulário com apenas um botão que quando o usuário clica ele vai para o site alvo site.alvo.com/password/change?new=n... , se o usuário tiver já logado no site.alvo.com , o navegador enviará os cookies do usuário para esse site o que fará o site achar que o usuário de fato pediu para mudar a senha quando não foi ele que pediu. Assim sendo, o usuário pode perder uma conta ou mesmo fazer uma transação bancária sem nunca perceber como foi feito. A dica nesse caso: Em todos os formulários use um valor randômico para ser verificado após no server side antes de processado. Caso seja uma senha, use um campo para o usuário inserir a senha antiga antes de muda-la.

Sensitive information

Informações sensíveis podem aparecer publicamente quando um web server não é configurado corretamente assim como pode aparecer no estabelecimento público da empresa. Tais informações são de estrema importância pois podem ser facilmente usadas em um ataque e quanto mais informações maior a chance do atacante ter sucesso. Diretórios na aplicação web devem ser selecionados e monitorados e também protegidos, acesso direto a diretório sem proteção ocasiona descobrimento de informações sensíveis. Dica: Use apenas o mínimo no local público, observe o que é acessado por todos em sua infra estrutura.

Execução maliciosa de arquivos

Os códigos vulneráveis à inclusão remota de arquivos (RFI) permite ao atacante incluir código e dados maliciosos, resultando em ataques devastadores, como o comprometimento total do servidor. Os ataques de execução de arquivos maliciosos afeta PHP, XML e todos os frameworks que aceitem nomes de arquivo ou arquivos dos usuários.

Referência Insegura Direta à Objetos

Uma referência direta à objeto ocorre quando um desenvolvedor expõe a referência a um objeto implementado internamente, como é o caso de arquivos, diretórios, registros da base de dados ou chaves, na forma de uma URL ou parâmetro de formulário. Os atacantes podem manipular estas referências para acessar outros objetos sem autorização.

Vazamento de Informações e Tratamento de Erros Inapropriado

As aplicações podem divulgar informações sobre suas configurações, processos internos ou violar a privacidade por meio de uma série de problemas na aplicação, sem haver qualquer intenção. Os atacantes podem usar esta fragilidade para roubar informações consideradas sensíveis ou conduzir ataques mais estruturados.

Falha de Restrição de Acesso à URL

Frequentemente, uma aplicação protege suas funcionalidades críticas somente pela supressão de informações como links ou URLs para usuários não autorizados. Os atacantes podem fazer uso desta fragilidade para acessar e realizar operações não autorizadas por meio do acesso direto às URLs.