Construindo Aplicações Web Habilitadas à Segurança

0
749
DOI: ESTE ARTIGO AINDA NÃO POSSUI DOI SOLICITAR AGORA!
PDF

PERES, Paulo Júnior de Jesus [1]

PINTO, Aurílio Guimarães [2]

FREITAS, Caio Guimarães [3]

LEITE, Francisco Canindé da Silva [4]

SILVA, Francisco Eronildo da [5]

OLIVEIRA, Geveson de Souza [6]

RIBEIRO, Dallas dos Santos [7]

ALMEIDA, Cristiany Caliri de [8]

MORAIS, Gilvanete Melo de [9]

PERES, Paulo Júnior de Jesus; et.al. Construindo Aplicações Web Habilitadas à Segurança. Revista Científica Multidisciplinar Núcleo do Conhecimento. Edição 07. Ano 02, Vol. 03. pp 44-51, Outubro de 2017. ISSN:2448-0959

Resumo

Com o crescimento da Internet, e a sua crescente utilização como meio de prestação de serviços e comunicações, torna-se necessário que os desenvolvedores de sistemas web tenham o máximo de atenção quanto as boas práticas de segurança no desenvolvimento de sistemas. É fato que Construir uma aplicação Web segura é uma tarefa bem difícil nos dias atuais, pois para um sistema ser considerado seguro não depende exclusivamente do código desenvolvido pelo programador, mas também do servidor de aplicação, do servidor de banco de dados, da rede de comunicação e de inúmeros outros aspectos que fogem do alcance do desenvolvedor do sistema. Neste prisma, o objetivo deste artigo é ser uma base de referência quanto aos principais níveis de ataques utilizados por Hackers a vulnerabilidades de códigos dos sistemas web e as possíveis formas de prevenção. Os conceitos utilizados neste artigo podem ser utilizados em qualquer linguagem de programação, pois as teorias são universais, porém para fins de exemplificação os códigos estão escritos na linguagem de programação PHP vez que na atualidade é uma das linguagens de programação mais difundidas entre a comunidade. Neste sentido, este artigo vem contribuir com a comunidade sendo uma base rápida de pesquisa sobre prevenções de ataques a sistemas.

1. Introdução

No contexto atual, é comum que empresas, órgãos públicos e instituições procurem agilidade na distribuição de informações aos clientes e funcionários agilizando assim o processo de tomada de decisão neste meio. No entanto para que essa estratégia funcione, é imprescindível que haja segurança na manipulação e exibição das informações referentes ao negócio da empresa.

Neste sentido, a Internet entra como o meio a facilitar e proporcionar tal atividade de distribuição de dados e informações. Dessa oportunidade, nasce o comércio virtual ou e-commerce. Segundo Teixeira:

No Brasil, atualmente, 45,6% de sua população tem acesso à internet (cerca de 90 milhões de pessoas). Se fizermos uma comparação entre os anos de 2000 e 2012, percebemos um aumento significativo, aproximadamente 1.500%, do número de usuários da internet no Brasil (TEIXEIRA, 2015, p.19).

O Comércio eletrônico ou e-commerce, de acordo com Salvador (2013) pode ser definido como operações comerciais feitas no ambiente virtual, com ajuda de meios eletrônicos, ou seja, é poder comprar determinado item a quilômetros de distância, sem sair de casa ou do escritório, utilizando smartphone, computador ou outro dispositivo. Onde a comodidade, facilidade de acesso e, principalmente, pelos preços os consumidores são atraídos ao e-commerce.

Contudo, é necessário que os desenvolvedores atentem para a segurança da informação ao desenvolver aplicativos para Internet, pois as informações estão disponíveis a todos os tipos de usuários. Segundo Araújo, segue o conceito de Segurança da Informação:

A Segurança da Informação se refere à proteção existente sobre as informações de uma determinada empresa ou pessoa, isto é, aplicam-se tanto as informações corporativas quanto as pessoas. Entende-se por informação todo e qualquer conteúdo ou dado que tenha valor para alguma organização ou pessoa. Ela pode estar guardada para o uso restrito ou exposta ao público para consulta ou aquisição. (ARAUJO, 2008).

Segundo Ferreira (2017), neste universo de oportunidades que a internet se tornou, usuários mal-intencionados tem a oportunidade de furtar informações sigilosas como: senhas bancárias, informações confidenciais, entre outras possibilidades de ataque.

O objetivo deste artigo mostrar algumas técnicas usadas para prevenir-se de roubo de informação ou invasão de sistemas e medidas para que desenvolvedores de sistemas que funcionem via internet (WEB DEVELOPEMENT) desenvolvam sistemas seguros, diminuindo a vulnerabilidade aos ataques dos mais variados níveis.

2. XSS (CROSS SITE SCRIPTING)

Segundo Flux (2017), o XSS ocorre quando uma aplicação Web aceitar dados maliciosos enviados pelo usuário. Em geral o intruso irá se aproveitar da falta de malícia da pessoa que desenvolveu a aplicação Web para injetar códigos maliciosos que venham a enganar a aplicação ou com objetivo de coletar informações restritas do sistema.

Um exemplo dessa vulnerabilidade está no método de transmissão de variáveis do tipo Get (variáveis passadas na URL do site) como: http://www.igreja.com.br/mostar.php?site=sexo.php.

Isto pode gerar um grande transtorno ao site pois o usuário malicioso poderia passar qualquer endereço ao site acima, o que poderia fazer por exemplo, que está página funcionaria como um site pornô.

Ainda segundo Flux (2017) para evitar que a aplicação fique vulnerável a este tipo de ataque, algumas medidas podem ser tomadas como:

  • O uso de variáveis do tipo Get para dados sigilosos é contraindicado, pois o mesmo compromete a segurança do sistema;
  • Utilizar filtros nos recursos de captura de dados do usuário para que bloqueie qualquer tipo de código ou URL maliciosa seja injetada por usuários externos. Esses filtros podem ser implementados pelo programador ou por recursos do servidor de aplicação.

3. SQL INJECTION

De acordo com Mueller (2013) o ataque via SQL Injection é a injeção de código SQL em variáveis passadas aos formulários webs e tem como objetivo executar código SQL arbitrário no banco de dados de uma aplicação Web.

Este é um ataque muito comum e extremamente perigoso, um exemplo é o seguinte script chamado “remover.php”, segue a transcrição do código:

<?php

$sql = “DELETE FROM cliente WHERE codigo=” . $_GET[‘codigo’];

mysql_query($sql) or die(mysql_error());

?>

Analisando o script acima, segue um exemplo de como o usuário malicioso pode realizar um ataque de SQL INJECTION via URL: http://seusite.com.br/remover.php?codigo=666+OR+1. Desta forma, utilizando essa instrução, o resultado seria a exclusão de todos os registros da Entidade clientes.

Segundo o manual on line do PHP, a forma mais segura é controlando o tipo de variáveis que estão sendo recebidas pelos campos dos formulários, por isso, como forma de prevenção, segue um exemplo de código:

<?php

settype($offset, ‘integer’);
$query = “SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $offset;”;

// por favor perceba o %d na string de formato, usando %s seria inútil
$query = sprintf(“SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET %d;”,
$offset);
?>

No código acima, a função “settype” tem a função de testar se a variável recebida realmente é do tipo inteiro, evitando que trechos de códigos maliciosos sejam incorporados na variável.

4. Regular Expression Denial of Service (ReDoS)

A autora Focke (2017) descreve Regular Expressions (REGEX) como uma técnica que utilização funções da linguagem de programação em uso para tratar informações vindas do usuário. Essas funções tratam de codificar o valor das variáveis de forma que elas não possam danificar ou burlar o sistema.

Segue em exemplo na linguagem de programação ASP:

<%

Dim variavel
Variável = Sever.htmlEncoder(request(“var”))

%>

Segue outro exemplo utilizando a linguagem de programação PHP:

<?php
if(! ereg(“^([0-9,a-z,A-Z]+)([.,_,-]([0-9,a-z,A-Z]+))*[@]([0-9,a-z,A-Z]+)([.,_,-]([0-9,a-z,A-Z]+))*[.]([a-z,A-Z]){2,3}([0-9,a-z,A-Z])?$”, $_POS(“variável”) ) {
echo “Caracteres Inválidos no campo de e-mail!!!”;
}
?>

Segundo Mattos (2013), para prevenir esse tipo de ataque, é necessário que o desenvolvedor crie filtros de captura que corrijam os erros dos algoritmos padrões de execução de códigos REGEX pelo processador da linguagem de programação utilizada.

5. APLICAÇÕES CGI

Segundo Foster (2017) Common Gateway Interface (CGI), é um tipo de matalinguagem ou middleware independente de plataforma provido pelo servidores Web que permitem executar programas/scripts a partir de uma URL. Estes scripts são geralmente escritos em Perl, Shell, Tcl, Java, Python ou C (maioria escritos em linguagens interpretadas) e localizados normalmente em um diretório /cgi-bin.

Aplicações CGI escritas sem cuidados com segurança podem causar sérios problemas a vulnerabilidades de servidores Web. Segundo Foster:

A programação CGI difere da programação tradicional, basicamente, devido ao seu ambiente e sua função de gateway entre o cliente e o servidor, o que acaba influenciando muito no aspecto segurança (deve-se lembrar que essas aplicações operam em um ambiente inseguro e que, teoricamente, podem ser executados por qualquer pessoa). (Foster, 2017)

Um CGI script sendo executado sob o mesmo UID do servidor Web não é necessariamente um fato ruim, mas se alguma aplicação CGI possui um furo de segurança que permite que um atacante execute programas sob UID do servidor Web, isso pode acarretar um problema bastante sério ao seu site. (Foster, 2017).

Segundo Pessoa (2017), uma maneira de contornar este problema é via “WRAPPERS“, isto é, programas que envolvem outros programas afins de alterar a maneira que estes operam. Assim, em ambientes onde usuários escrevem independentemente aplicações CGI, é uma boa estratégia isolá-los um dos outros, isto é, implementar mecanismos em seu servidor de maneira que acessos de scripts de um usuário não venham a interferir em dados de outros usuários. suEXEC (http://www2.idiscover.co.uk/apache/docs/suexec.html) resolve este problema (existem outras ferramentas que também tratam este problema) fazendo com que aplicações CGIs sejam executadas sob o UID do próprio usuário, isto é, o dono da aplicação CGI.

6. TIPO DE DADOS

Segundo o manual on line do PHP, um cuidado que sempre deve ser tomado é que algumas linguagens de programação utilizam de variáveis globais que atendem a qualquer tipo de dados. Este uso é indevido, pois causa uma vulnerabilidade de nível considerável ao sistema.

Pessoa (2017) descreve alguns exemplos de como tipar as variáveis na linguagem de programação PHP:

<?php

$cod  = $_GET[‘cod’] //tipo get

$cod  = $_POST[‘cod’] //tipo post

$cod  = $_SESSION[‘cod’] //tipo session

$cod  = $_COOKIE[‘cod’] //tipo cookie

?>

7. GRAVAR ARQUIVOS VIA UPLOAD

Sempre que for gravar um arquivo via UPLOAD o desenvolvedor deve ter certeza do tipo de arquivo que está sendo gravando no disco da aplicação. Por exemplo, um arquivo de imagem pode ser simplesmente tratado usando uma validação de tipos de arquivos. Isso por que usuários mal-intencionados podem mandar arquivos que prejudiquem de alguma forma o servidor ou a aplicação (Pessoa, 2017).

Segundo o manual on line do PHP, segue um exemplo de validação utilizando a linguagem de programação PHP:

<?php

function type_up()

{

    // verifica se o mime-type do arquivo de imagem

    if (!eregi(“^image\/(pjpeg|jpeg|png|gif|bmp)$”, $this->arquivo[“type”])) {

        return 0;

    } else {

        return 1;

    }

}

?>

8. FORMULÁRIOS SEGUROS COM SYNCHONIZER TOKEN

De acordo com Bragil (2017), ficha sincronizadora é uma técnica que utiliza uma variável criada no início da sessão, com um valor inicial estabelecido pelo desenvolvedor com o objetivo de garantir que o formulário realmente foi criado pelo servidor da aplicação.

Ainda segundo Brasil (2017), para um site com autenticação, você pode iniciar o valor da ficha no ato do LOGIN, depois de certificar que o usuário é válido:

Exemplo em PHP:

<?

session_start( );

// inicializa a ficha sincronizadora com um valor aleatório

$_SESSION[“synctoken”]= uniqid(time( ));

….

?>

Agora na ficha sincronizadora registrada na sessão, podemos exemplificar como criar um formulário protegido por ela:

<form name=”frmteste” method=”post” action=”cadastro.php”>

<!– coloca todos os campos do formulário –>

<!– a nossa ficha fica como um campo hidden –>

<input type=”hidden” name=”token” value=”<?=$_SESSION[“synctoken”]?>”>

</form>

Visualizando o código-fonte, notar-se que o atributo VALUE do campo TOKEN possui um valor randômico, tipo “45jfg58955699j96uy8gtj85”. A sincronização acontece ao processar o formulário. No nosso exemplo, o ACTION do formulário é o arquivo “cadastro.php” que ao receber os dados do formulário, testará se o valor do campo TOKEN do formulário é o mesmo que o da variável de sessão $_SESSION[“synctoken”]. Caso não seja, é sinal de que alguém está tentando fazer o que não deve, ou seja, provavelmente é alguém que salvou a página com o formulário no seu micro e está tentando fazer alguma “arte”. Neste caso, se pode tomar algumas medidas, como coletar o IP do cidadão, exibir uma frase intimidadora, entre outros. Se o valor for igual, sinal verde, pode continuar com o processamento (Bragil, 2017).

Os benefícios são inúmeros, pois esta é uma forma simples e eficiente de aumentar a segurança de um sistema Web.

Conclusão

A Web foi projetada sem muita preocupação, ou quase nenhuma, com segurança. O objetivo principal era disponibilizar informações de uma forma mais amigável que os recursos disponíveis na época. Com o rápido crescimento da Web e com a diversificação de sua utilização, a segurança se tornou um ponto de importância crucial, principalmente para quem tem a Web como um dos principais apelos comerciais. Neste caso o desenvolvimento sem segurança causa um impacto crucial nos lucros e no trabalho da empresa.

Poderíamos citar outros casos de invasão ou insegurança no processo de desenvolvimento de sistemas, porém tratamos apenas os pontos essenciais de um desenvolvimento seguro.

Por fim, esse trabalho é plenamente extensivo, e outros autores podem utilizar este artigo como referência ampliar a quantidade de ataques e formas de defesas a serem utilizadas por equipes de desenvolvimento de software.

Referências

Araujo, Nonata Silva. Segurança da Informação (TI). Disponível em:< http://www.administradores.com.br/informe-se/artigos/seguranca-da-informacao-ti/23933/> Acesso em 25 de outubro de 2017.

Bragil, Rogério. Formulários mais seguros com synchonizer token. Disponível em: < http://phpbrasil.com/artigo/Z61mREuoZQTH/formularios-mais-seguros-com-synchonizer-token-ficha-sincronizadora> Acessado em: 25 de outubro de 2017.

Ferreira, Rodrigo. “Segurança em aplicações web”. 1º Ed. São Paulo: Casa do Código. 2017. 156p.

Flux, Pedro. XSS. < http://phpbrasil.com/articles/article.php/id/506> Acessado em: 20 de out. de 17.

Focke, Erica. “UTILIZANDO REGEX PARA VERIFICAÇÃO DE CAMPOS DE FORMULÁRIO”. < http://phpbrasil.com/articles/article.php/id/520> Acessado em: 20 de out. de 17.

Foster, Antônio. “Segurança em Scripts CGI”. < https://memoria.rnp.br/newsgen/9803/scripts.html> . Acessado em: 25 de outubro de 2017.

Mueller, John Paul. “Segurança para desenvolvedores web”. 1º Ed. São Paulo: Nova Tec. 2013. 416p.

Salvador, Mauricio. “Gerente de E-commerce”1° Ed. São Paulo. Editora: Ecommerce School, 2013.

TEIXEIRA, Tarcisio. Comércio Eletrônico: Conforme o Marco Civil da Internet e  a regulamentação do e-commerce no BrasilSão Paulo: Saraiva, 2015.

Pessoa, Márcio. “Segurança em PHP”. 1 Ed. São Paulo: Nova Tec 2007. 152p.

“Cross-SITE Scripting (XSS)”. Disponível em: <http://br.ccm.net/contents/19-cross-site-scripting-xss> acesso em: 20 de out. de 17

“Manual on line do PHP”. Disponível em: <https://secure.php.net/manual/pt_BR/security.database.sql-injection.php>  Acessado em: 20 de out. de 17.

[1] Graduado na área de computação, atua como servidor público na SUFRAMA, no cargo de Analista Técnico Administrativo – TI. Especialista em Banco de dados pela ULBRA.

[2] Graduado na área de computação, atua como servidor público na SUFRAMA, no cargo de Analista Técnico Administrativo – TI.

[3] Graduado na área de computação, atua como servidor público na SUFRAMA, no cargo de Analista Técnico Administrativo – TI.

[4] Graduado na área de computação, atua como servidor público na SUFRAMA, no cargo de Analista Técnico Administrativo – TI.

[5] Graduado na área de computação, atua como servidor público na SUFRAMA, no cargo de Analista Técnico Administrativo – TI.

[6] Graduado na área de computação, atua como servidor SUFRAMA, no cargo de Analista Técnico Administrativo – TI.

[7] Graduado na área de computação, atua como servidor SUFRAMA, no cargo de Analista Técnico Administrativo – TI.

[8] Graduada em Administração, atua como servidora pública na SUFRAMA, no cargo Administradora.

[9] Graduada em Economia, atua como servidora pública na SUFRAMA, no cargo de Economista.

DEIXE UMA RESPOSTA

Please enter your comment!
Please enter your name here