Introdução

Atualmente o governo brasileiro através de uma rede de televisão, ficou sabendo que a NSA (Serviço de Segurança dos Estados Unidos) espiona pessoas usando a rede de Internet, e-mail e telefonia. De acordo com a reportagem mostrada na rede de televisão brasileira, basta colocar o nome da pessoa que deseja obter informações em um programa,e automaticamente aparecem as conexões, contatos, ligações e e-mails. Essa reportagem apareceu através de um ex-funcionário prestador de serviços da NSA.

Continuando o que foi falado na reportagem, nem o HTTPS está fora nas espionagens ou coleta de informações. Isso porque a chave do SSL é gerado fora do Brasil e tudo que trafega usando HTTPS está criptografado, só que eles possuem a senha para decriptografar dados. Muitas dessas informações coletadas de forma escondida podem ser para benefício próprio, de acordo com a reportagem. Além de informações pessoais, benefícios financeiros, de pesquisas e descobertas podem ser obtidos sem que o dono da informação saiba. Saber a próxima carta do jogo de poke, pode fazer com que você ganhe o jogo.

Parando pra pensar, onde são gravados os dados de um sistema? Com certeza em uma fonte de dados; banco de dados, arquivo xml, arquivo txt, banco de dados móvel e muito mais. Toda informação está na fonte de dados e pode ser criptografada ou protegida. É melhor proteger a fonte de dados do que sofrer depois com pessoas pegando informações sigilosas. 

Você sabia que suas informações estão por ai e qualquer pessoa pode pegar, pesquisar e visualizar de forma fácil? Com a Internet, fica muito mais fácil investigar, ver notícias sobre determinado assunto e inclusive sobre você, incluindo redes sociais. Você já pesquisou o seu nome no buscador da Internet? Bing, Yahoo e Google? Tenho certeza que terá resultados surpreendentes.

Daqui pra frente eu vou falar um pouco mais de forma técnica. 

Se você trabalha em uma empresa com informações confidenciais, o aconselhável é colocar os dados criptografados em um banco de dados do que de forma aberta. Só o HTTPs não vai adiantar, como falado anteriormente, os dados são pegos da mesma forma. 

Gostaria de alertar a você desenvolvedor de software, sobre a segurança da informação necessária. Segue um desenho abaixo que mostra e explica como deixar seu sistema de forma segura e com dados seguros. Vamos imaginar que o sistema funciona na Internet ou Intranet, ou seja, não precisa ser instalado na máquina e basta usa o browser para acessá-lo.




O primeiro passo começa do seu computador para a Internet. A maioria dos sistemas se conectam a Internet usando um servidor de hospedagem. O mais indicado é usar o protocolo HTTPs e não HTTP. O seu site está hospedado em um servidor confiável que automaticamente chama o seu site pelo endereço www. Note que a imagem mostra o layout e linguagens C#, VB, J# e outras, isso mesmo, você pode criar utilizando qualquer uma dessas linguagens. O banco de dados está do outro lado, dentro do servidor de hospedagem e entre o sistema e o banco existe uma camada chamada de criptografia. Essa camada criptografa os dados que vão para o banco de dados e decriptografa quando  voltam para a camada de layout.

As informações dentro do banco de dados estão criptografadas e a chave para decriptografar só o sistema de software sabe. Você pode utilizar chaves privadas, chaves públicas e chaves dinâmicas; ou seja; aquelas criadas de acordo com informações do próprio banco de dados. A camada de criptografia é essencial e responsável por toda informação dentro do sistema, na prática seria uma classes ou API específica. Toda informação enviada ou solicitada passaria pela classe para criptografar e decriptografar informações do sistema, de um site, de um comércio eletrônico e de dispositivos móveis.

Todo o banco de dados seria criptografado e isso inibe o problema existente hoje em dia. O problema de invasão de dados diretamente no banco. O hacker pode invadir o SGBD (sistema de gerenciamento de banco de dados), acessar tabelas e ver os dados de cada usuário por exemplo. No caso de criptografia, mesmo que o hacker consiga entrar no banco de dados, as informações estarão criptografadas e inelegíveis a olho humano. Para conseguir ler a informação do banco, o hacker precisará usar o sistema que decriptografa informações com a mesma chave usada.

Mesmo que a espionagem for um snifer na rede ou através de um roteador, fica bem mais difícil saber o que está trafegando, bem diferente da  informação aberta. Você saber fazer esse tipo de classe dentro o seu sistema ou site? Sim, sem dúvidas. Lembrando que existem alguns problemas criptografar todo o banco de dados usando uma API, seria bom criptografar informações escritas apenas. Deixe de lado os números e datas. Seguem dois artigos mostrando como utilizar classes de criptografia, você pode usar essas classes sem qualquer problema.

Links:

Método SHA 1

http://ecode10.com/artigo/957/Metodo-SHA1

Método SHA 256

http://ecode10.com/artigo/959/Metodo-SHA-256

Método SHA 384

http://ecode10.com/artigo/962/Metodo-SHA384

Método SHA 512

http://ecode10.com/artigo/967/Metodo-SHA512

Método MD5 

http://ecode10.com/artigo/954/Metodo-MD5

Criptografia de dados

http://ecode10.com/artigo/322/Criptografia-de-dados

Não posso deixar de falar sobre as pequenas empresas que NÃO se preocupam com segurança. Ligar o computador da empresa direto no roteador e dele ligar a Internet, pode ser um problema. Isso porque os computadores podem ser facilmente contaminados. É necessário ter pelo menos um firewall antes de acessar a Internet, ter um cabeamento especial no caso de comunicação entre outras redes como o MPLS e certificado SSL onde existe criptografa os dados. Tem ainda um canal que pode ser criado chamado VPN, esse canal é criptografado e direto entre você e a rede da empresa, ou entre empresas. Não deixe que seus dados ou da sua empresa fiquem disponíveis na Internet.

Você pode pensar que usar alguma linguagem de programação específica, pode inibir o problema de segurança. Pode influenciar 10% apenas, quando falamos de linguagem compilada e linguagem não compilada. A parte ruim de criptografar tudo no banco de dados é a possibilidade de perder os índices no momento da busca, mas isso pode ser contornado facilmente usando int, date and Guid.


Segurança em sistemas

Falando um pouco sobre a segurança em sistemas, você não pode esquecer que além da rede ser segura com firewalls, redes privadas como MPLS e VPN, é necessário ter  segurança no sistema de software. Procure não colocar códigos fixos no sistema ou em arquivo de configuração aberto, procure evitar passagem de parâmetro via browser no caso de sistema web, procure evitar sessões contendo informações confidenciais, isso porque fica na memória e pode ser pego facilmente através de programas leitores de memória; e para finalizar evite cookies com informações abertas, se for usar, criptografe os dados dentro do cookie. Isso porque é um arquivo .txt armazenado no computador do usuário localizado em determinada pasta do browser.





Inject SQL

Inject SQL é uma técnica que os “hackers" usam para invadir sistemas ou sites. No Brasil, mais ou menos no começo do ano, houveram invasões em sites do governo, expondo dados e informações confidenciais. A maioria delas aconteceram pelo Inject SQL. Para fazer o uso de Inject SQL, basta fazer um jogo de aspas simples e duplas nos campos da tela. Bom, aqui não é um artigo mostrando como invadir usando técnicas, gosto apenas de alertar você sobre o assunto. Escrevi um artigo mostrando e informando para não usar aspas simples e duplas, e sim usar parameter no C# e ASP.NET.


Link:

Usando parameter ao invés de aspas

http://ecode10.com/artigo/1833/Usando-parameter-ao-inves-de-aspas


Analisando a maioria dos sites do governo invadidos, percebi que alguns são aqueles prontos que vendem na Internet, você compra o plugin e adiciona ao site até montar todo ele. A maioria utiliza aspas quando vai fazer um select no banco de dados. Se você usa esse tipo de sistema em seu site, procure instalar e manter atualizado todos os plugins de segurança do próprio fabricante.

Percebi também que a maioria dos sites estão na linguagem PHP. Não tenho nada contra essa linguagem e o que gosto de prevenir é a invasão. Com essa linguagem de programação, se alguma pessoa conseguir invadir o servidor onde está hospedado o site, basta clicar com o botão direito em cima do arquivo e visualizar o que tem dentro. Tudo que estiver lá o invasor pode usar e entender como funciona. Esse é um problema das linguagens não compiladas. Já o C#, VB.NET e Java que são linguagens compiladas não têm esse problema. Isso porque todo o código escrito na linguagem vira uma dll ou um arquivo banalizado e fechado; o que fica exposto são os objetos utilizados como HTML, gridview, textBox, listbox e tudo mais. Nem mesmo o valor retornado do banco ou informação confidencial fica na página. Por isso eu sou contra aqueles desenvolvedores que fazem tudo na camada de layout, lá fica a string de conexão, as vezes o select no banco de dados e mais. Não é uma boa prática, talvez seja mais simples de fazer, “usando apenas cliques”, só que a exposição dos dados e informações na camada de layout fica comprometida. A minha dica é, procure entender melhor o modelo MVC para separar as camadas, as vezes você não precisa fazer tudo como indica, você tem toda liberdade de fazer da maneira que quiser, contando que separe as camadas de layout, negócio e acesso a dados.



Usuário e senha

O primeiro passo para um sistema ou site ficar seguro é ter usuário e senha para entrar na área administrativa. Geralmente a área administrativa serve para cadastrar uma notícia, mudar um banner, enviar e-mail e mais. As páginas privadas precisam ficar protegidas e inacessíveis até que o usuário seja autenticado e seu perfil verificado para aquele tipo de acesso. Se o usuário for um usuário normal, o acesso será negado para entrar na área administrativa, se for um usuário com perfil de administrador de conteúdo, terá acesso a área de conteúdo e se for um administrador geral, terá acesso a tudo do site.

É assim que faço hoje em dia com meus sites e sistemas. Mesmo que o usuário tente entrar na parte que ele não tem permissão, não conseguirá devido a verificação do sistema. Todos os dados ficam protegidos e guardados de forma criptografada, dentro do banco de dados e fora do banco, usando cookie ou session de forma criptografada.

Outro ponto importante que pode ser programado em seu sistema ou site é o log, isso mesmo. O que é o log? É um registro de tudo que o usuário está fazendo, por exemplo: o clique no botão que faz alguma ação, o primeiro passo é gravar as informações no banco de dados para saber o que foi feito depois por aquele usuário. A maioria dos sistemas que faço tem isso para identificar as possíveis ações do usuário. Gravar tudo no log, dentro de uma tabela do banco de dados pode ser complicado no primeiro momento, mas depois fica fácil se fizer uma API ou componente que registra. Esse tipo de preocupação mostra que você se importa com o sistema e com o usuário.





Web Service ou Rest (Web API)

O web service ou o rest são tecnologias utilizadas hoje em dia para compartilhar informações entre sistemas de diferentes formas através de plataformas e mais. Se você quer aprender mais um pouco sobre esse assunto, veja o livro criado por mim dando exemplos reais e ensinando passo a passo. Veja o link abaixo:

Link:

ASP.NET MVC e Web API

http://mauriciojunior.org/livro/9/ASP.NET-MVC-e-WebAPI

Se você está pegando informações do seu banco de dados e compartilhando na Internet, é melhor que essa informação seja pública ou então utilize muita segurança para autenticar o usuário ou sistema que irá consumir os dados. O compartilhamento é importante, só que é necessário ter segurança para que ninguém use indevidamente o serviço. 

Na prática, a melhor maneira de compartilhar informações usando web service ou rest é colocando autenticação e acrescentado com um token dinâmico.  O token dinâmico é gerado a cada acesso e depois descartado. Não deixe de solicitar um usuário e senha para autenticar no banco de dados através do select e gravar log.

O web service e rest é capaz de utilizar criptografia normalmente e sem qualquer problema. Nesse caso, as informações têm que voltar ao sistema destino sem criptografia, pois o método fica dentro do sistema principal e não no sistema consumidor de dados. Gostaria de informar mais dados e informações sobre segurança pra você, mas esse foi o primeiro passo para abrir seus olhos para a segurança da informação e sistêmica.

Espero que tenha entendido que a segurança da informação é muito importante nos aplicativos, sistemas e sites que construímos. Procure sempre tratar esse assunto com seriedade. Qualquer dúvida pode entrar em contato através do site www.mauriciojunior.org