Vous êtes sur la page 1sur 12

Segurança no Desenvolvimento de Aplicações Web

Security in Web Applications Development

Jonas Alves de Oliveira1

Leonardo Luiz Teodoro Campos2

Cristiano Antônio Rocha Silveira Diniz3

Resumo: Este artigo trata da Segurança no Desenvolvimento de Aplicações Web. Este tema
representa um grande desafio, devido ao crescimento da internet e com isso a necessidade cada vez
maior da adoção de aplicações web para compartilhamento de informações pelas organizações, se
fazendo necessária a adoção de mecanismos para manter tais informações seguras. Realizou-se uma
pesquisa do tipo bibliográfica para esclarecer este tema. O estudo permitiu mostrar as principais
vulnerabilidades encontradas em aplicações web, como também técnicas para mitigar essas
vulnerabilidades.
Palavras Chaves: Aplicações Web, Código Seguro, Segurança, Software.

Abstract: This article speaks about Security in the Web Applications Development . This theme
represents a great challenge, due to growth of the internet and therewith necessity increasing the
adoption of web applications for sharing of information by organizations, making it necessary to adopt
mechanisms to keep such information secure. Was formed a research type of Bibliographic to explain
this theme. The study permitted show major vulnerabilities found in the web applications, as well as
technics to mitigate these vulnerabilities.
Keywords: Web applications, Security Code, Security and Software.

1 INTRODUÇÃO

O presente estudo tem como tema mostrar a necessidade da elaboração de


código seguro em desenvolvimento de aplicações Web.
Com crescimento da Internet nos últimos anos o desenvolvimento de
aplicações Web vem sendo cada vez maior, devido a fatores como: escalabilidade,
flexibilidade, comodidade entre outros. Porém esse modelo de aplicação gera uma
preocupação quanto à segurança desses sistemas.
Como afirma Cabral. Terto (2011), durante os últimos anos o número de
vulnerabilidades descobertas em aplicações web superou o número encontrado em

1
Graduando do curso de Bacharelado em Sistemas de Informação pela Faculdade Infórium de Tecnologia.
Jona.aoliveira@outlook.com
2
Graduando do curso de Bacharelado em Sistemas de Informação pela Faculdade Infórium de Tecnologia.
Leonardo_campos@outlook.com
3
Pós-graduado em Gestão de Segurança da Informação. Professor da Faculdade Infórium de Tecnologia.
cristianodiniz@gmail.com
Revista Pensar Tecnologia, v.4, n.2, jul. 2015
sistemas operacionais.
Assim o objetivo geral do trabalho é demonstrar a necessidade de boas
práticas de programação no desenvolvimento de sistemas web.
São objetivos específicos: reunir informações que possam orientar por meio
de normas, desenvolvedores de software para um desenvolvimento seguro de
aplicações Web; bem como fornecer uma base aos profissionais e organizações
sobre a importância de uma codificação segura nessa modalidade de sistema.
A pergunta norteadora do estudo é no sentido de investigar a real
necessidade da adoção de boas práticas de programação em aplicações Web.
Justifica-se esta pesquisa tendo-se em vista que a informação é essencial
para os negócios de uma organização e consequentemente necessita ser
adequadamente protegida, sendo especialmente importante no ambiente dos
negócios cada vez mais interconectados. Como resultado deste incrível aumento da
interconectividade, a informação está exposta a uma grande variedade de ameaças
e vulnerabilidades.
De acordo com a Associação Brasileira de Normas Técnicas (ABNT),
segurança da informação é obtida a partir das implementações de um conjunto de
controles adequados, incluindo políticas, processos, estruturas organizacionais,
hardware e funções de software. Dentre os exemplos citados, busca-se dar destaque
no desenvolvimento de softwares.

Quanto à metodologia do estudo, trata-se de uma pesquisa do tipo


bibliográfica para qual se buscou reunir uma base conceitual e teórica para explicitar
o tema proposto.
Para a compreensão deste tema, este artigo foi dividido em cinco seções. A
seção 1, esta introdução é indicativa do estudo, a seção 2 apresenta a abordagem
teórica sobre a questão da segurança no desenvolvimento de aplicações Web, a
seção 3 aborda as vulnerabilidades exploradas nas aplicações, a seção 4 aborda
boas práticas para elaboração de uma aplicação Web mais segura, a seção 5 tece
as conclusões obtidas.

Revista Pensar Tecnologia, v.4, n.2, jul. 2015


2 ABORDAGEM TEÓRICA SOBRE SEGURANÇA NO DESENVOLVIMENTO DE
APLICAÇÕES WEB

De acordo com a McAfee for Businesss4(2014), uma das maiores ameaças


que as organizações enfrentam nos dias atuais são os softwares desprotegidos, uma
vez que os usuários mal intencionados voltam sua atenção para os aplicativos e
softwares que formam a infra-estrutura de TI das organizações, assim a melhor
forma de proteção é criar um software seguro desde o início.
Seguindo a mesma linha de raciocínio Cabral. Terto (2011), afirma que
processo de software é um conjunto de fatores e resultados associados
desenvolvidos de forma cíclica em uma organização que produz softwares e buscam
desenvolver aplicações com qualidade. Todas essas organizações adotam um
processo de desenvolvimento mesmo que ele seja ineficaz.
Alguns modelos de processos de software como, por exemplo: o processo
unificado aberto (UP)5, entre outros, foram concebidos em um momento histórico,
onde a segurança de informação não era o foco principal até mesmo devido aos
softwares não serem expostos de forma abrangente.

[...] De fato, pode--se dizer que, de forma complementar aos incidentes de


segurança decorrentes de falhas ou ataques do componente humano no trato
da informação, a grande maioria dos demais incidentes de segurança da
informação tem sua origem nas vulnerabilidades presentes no software. Um
dos principais fatores causadores dessas vulnerabilidades é a codificação
ingênua do software por um programador, quando o mesmo considera
basicamente os cenários positivos de execução de um código, sem se
preocupar com o caso de usuários maliciosos. (CABRAL; TERTO, 2011,
p.10).
Ainda segundo Cabral. Terto (2011), atualmente o processo de
desenvolvimento de software não tem como requisito fundamental a segurança, que
são influenciadas pela pressão do mercado. O desenvolvimento de um software
seguro que não necessita de atualizações constantes ainda é um desafio para a
indústria de desenvolvimento de software, que encontram problemas para
desenvolver um produto que possibilite um gerenciamento seguro. Durante os
últimos anos o número de vulnerabilidades descobertas em aplicações web superou
o número encontrado em sistemas operacionais e com isso mais tentativas de

4
MacAfee é uma empresa focada em soluções de segurança de TI.
5
Processo Unificado Aberto (UP) é uma metodologia para desenvolvimento de software
Revista Pensar Tecnologia, v.4, n.2, jul. 2015
ataques nessas aplicações. Com emprego de desenhos e codificação de software
ingênua, que não consideram as más intenções dos usuários na outra ponta da
aplicação, ou até mesmo o uso de bibliotecas de códigos de origem não confiável,
torna o problema mais evidente, fazendo o uso de aplicações web arriscado.

A forma mais comum de garantir que será produzido código seguro é por meio de
aderência ao uso de padrões de codificação que reduzem a ocorrência de
vulnerabilidades de código, chamados padrões de codificação segura, e da
verificação de que os programadores a estão adotando. Tais padrões tendem a evitar
a injeção de código e outros ataques. (CABRAL; TERTO, 2011, p.11).

De acordo com dados levantados por Uto. Pereira (2009), as vulnerabilidades


exploráveis listadas no ano de 2009, aproximadamente 80% estavam diretamente
ligadas à má codificação de programas e outros 19% estavam ligados a problemas
de projeto dos programas. Além disso, 40% das vulnerabilidades exploráveis do
período estavam relacionados com problemas de estouro de buffers6. Dessa forma
pode-se afirmar que código não seguro representa uma grande fatia dos problemas
de falha de segurança, já um é código seguro resulta em um software seguro que
por sua vez consiste em uma composição de confidencialidade aplicáveis ao
software.
[...] Para minimizar vulnerabilidades de codificação, os desenvolvedores devem
ser treinados em técnicas gerais de programação segura e nas especialidades
das linguagens com as quais trabalham (UTO; PEREIRA, 2009, p.240).

De acordo com o The Open Aplication Security Projet (OWASP, 2013) 7 , a


medida que a infraestrutura digital se torna cada vez mais complexa e interligada,
torna-se mais difícil obter segurança em aplicações. Não sendo toleráveis problemas
de segurança relativamente simples.
Destaca-se das ideias expostas nesta seção que uma das maiores causas de
vulnerabilidades em aplicações WEB está no código, onde na maioria das vezes a
elaboração do software é realizada de forma descuidada, não levando em conta
aspectos de segurança na elaboração dos códigos.

3 ABORDAGEM DAS VULNERABILIDADES EXPLORADAS EM UMA


APLICAÇÃO WEB

6
Estouro de buffers consiste em uma falha de segurança explorada para fins de invasão de softwares
7
A OWASP é um dos mais importantes guias sobre segurança focada em aplicações Web
Revista Pensar Tecnologia, v.4, n.2, jul. 2015
A OWASP (2010) retrata que o grande problema em relação às aplicações
web é que mesmo a rede de comunicações sendo seguras, com firewall8, controle de
acesso entre outros mecanismos de segurança, ainda é possível que um usuário mal
intencionado possa, através de entrada de dados em um formulário web, executar
vários tipos de ataques que escapam completamente ao controle da equipe de
segurança em redes.
Diante do exposto, apresenta-se de acordo com pesquisa realizada pela
OWASP (2013), algumas das técnicas utilizadas para explorar falhas nas aplicações
Web.
a) Injeção: as falhas de injeção, em especial SQL Injection, são comuns em
aplicações Web. A injeção ocorre quando os dados fornecidos pelo usuário
são enviados a um interpretador com parte do comando ou consulta. A
informação fornecida pelo atacante engana o interpretador que irá
executar comandos mal intencionados ou manipular informações.
b) Autenticação Falha e Gerenciamento de Sessão: as credenciais de acesso
e o token de sessão não são protegidos apropriadamente com bastante
frequência. Atacantes comprometem senhas, chaves ou tokens de
autenticação de forma a assumir a identidade de outros usuários.

c) Cross-Site Scripting (XSS): os furos XSS ocorrem sempre que aplicações


obtêm as informações fornecidas pelo usuário e as envia de volta ao
navegador sem realizar validação ou codificação daquele conteúdo. O
XSS permite aos atacantes roubar sessões de usuários e modificar sites
Web.
d) Referência Insegura Direta a Objetos: uma referência direta a 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 essas referências

8
Firewall é uma solução de segurança adotada em redes de computadores, podendo ser hardware ou
software.

Revista Pensar Tecnologia, v.4, n.2, jul. 2015


para acessar outros objetos sem autorização.
e) Exposição de Dados Sensíveis: a maioria das aplicações web não
protegem devidamente seus dados mais sensíveis, tais como cartões de
crédito, Ids fiscais e credenciais de autenticação. Essas informações
podem ser roubadas por atacantes com o propósito de realizar diversas
fraudes. Dados sensíveis merecem proteção como criptografia no
armazenamento ou no transporte.
f) 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 dessa fragilidade para acessar e realizar
operações não autorizadas por meio do acesso direto às URLs.
g) Cross Site Request Forgery (CSRF): um ataque CSRF força o navegador
da vítima que esteja autenticado em uma aplicação a enviar uma
requisição pré-autenticada a um servidor Web vulnerável, que por sua vez
força o navegador da vítima a executar uma ação maliciosa para o
atacante. O CSRF pode ser tão poderoso quanto à aplicação Web que ele
ataca.
h) Erros de Configuração de Segurança: atacantes acessam falhas de
atualização em pacotes de correção ou atualização do sistema, com
objetivo de ter acesso não autorizado para conhecimento do sistema. Erro
na configuração de segurança pode acontecer em qualquer nível de uma
pilha de aplicação, incluindo a plataforma, servidor web, servidor de
aplicação, framework código customizado. Desenvolvedores e
administradores de rede necessitam trabalhar juntos para garantir que a
pilha de entrada seja configurada apropriadamente.
i) Proteção insuficiente em nível de transporte: as aplicações frequentemente
falham em criptografar tráfego de rede quando se faz necessário proteger
comunicações críticas e confidenciais.
j) Redirecionamento e Encaminhamentos não validados: frequentemente,
aplicações web redirecionam e encaminham usuários para outras páginas
Revista Pensar Tecnologia, v.4, n.2, jul. 2015
e sites web, e usa dados não confiáveis, sem uma validação apropriada
para definir o destino. O atacante pode usar esse problema para
redirecionar vítimas a sites maliciosos ou usar os encaminhamentos para
acessar páginas não autorizadas.

A OWASP (2013) destaca que os ataques de SQL e Cross-Site Scripting


(XSS) estão no topo da lista de vulnerabilidades exploradas em aplicações web,
desta forma descreve-se a seguir com maior detalhe a respeito dessas técnicas.

- Injeção de SQL

Um ataque de injeção de SQL é um tipo específico de ataque de injeção,


baseado na exploração de características da linguagem SQL. O ataque é realizado a
partir de um texto simples que explora a sintaxe do interpretador, frequentemente
encontrado em consultas SQL, um ataque deste tipo pode resultar em perda ou
roubo de dados, negação de acesso. Considerando o valor dos dados afetados o
prejuízo pode ser muito grande.

- Cross-Site Scripting (XSS)

De acordo com a OWASP o ataque de Cross-Site Scripting é um dos ataques


mais predominantes e perigosos em aplicações Web, pois esses ataques decorrem
de uma combinação das características do protocolo Hipertext Transfer Protocol
(HTTP), da mistura de dados, do uso de diversos esquemas de codificação e dos
navegadores web com interface rica. O ataque acontece quando uma aplicação web
que fica do lado servidor inclui nos dados de uma página web enviada para um
usuário legitimo um conjunto de dados que foram previamente recebidos de um
usuário malicioso. Estes dados contém um script malicioso, que quando executado
no computador do usuário legitimo poderá ser usado para enviar dados para o
atacante, englobando roubo de cookies, identificadores de sessão, senhas, dados de
formulários entre outros.

A OWASP (2013) exemplifica alguns cenários propensos a estes ataques,


conforme os apêndices A e B deste estudo.

Revista Pensar Tecnologia, v.4, n.2, jul. 2015


4 BOAS PRÁTICAS PARA UMA APLICAÇÃO WEB MAIS SEGURA.
Conforme conceito descrito pela OWASP (2013), a segurança de softwares
tem como objetivo manter a confidencialidade, integridade e disponibilidade dos
recursos de informação e esse objetivo é possível por meio de implementação de
controles de segurança.

Assim descrevem-se algumas técnicas e metodologias descritas pela Microsoft


(2005), juntamente com boas práticas descritas pela OWASP (2013).

a) Security Development Lifecycle(SDL)


O Security Development Lifecycle é um processo adotado pela MicroSoft,
e consiste em uma série de atividades com o objetivo de conceber um software
seguro. Essas atividades possuem aspectos como desenvolvimento de modelos de
ameaça durante o design do software, o uso de ferramentas de verificação de código
de análise estática durante a implementação, como também revisões de código e
testes de segurança.

b) Treinamento de segurança
O treinamento de segurança consiste na aplicação de um treinamento desde o
básico ao avançando para todos os membros da equipe de desenvolvimento, onde
serão abordados princípios e tendências em segurança e privacidade. De acordo
com a Microsoft (2005), os conceitos para serem abordados em um treinamento são;
desenho seguro de software, redução de superfície de ataque, teste de segurança
que envolva equilíbrio entre testes funcionais com testes de segurança.

c) Requisitos
Na fase de requisitos de segurança os detalhes relacionados à segurança são
analisados com mais detalhes, juntamente com uma análise de custos, onde o
objetivo é determinar se os recursos necessários para melhorar a segurança da
aplicação estão de acordo com os objetivos do negócio do projeto de software. Um
dos pontos mais fortes desta fase é o estabelecimento de um sistema para
rastreamento das possíveis falhas de segurança.
Revista Pensar Tecnologia, v.4, n.2, jul. 2015
d) Comprehensive, Lightweight Application Security Process (CLASP)
O CLASP foi inicialmente desenvolvido pela empresa Secure Software e hoje
está sobre a responsabilidade da OWASP. Ele articula práticas para a construção de
software seguro, fazendo assim com que o ciclo de vida de desenvolvimento,
Software Delevopment Life Cicle (SDLC), seja de maneira estruturada com repetição
e mensuração. A OWASP (2008) descreve o CLASP como um conjunto de pedaços
de processo que pode ser utilizado em qualquer processo de desenvolvimento de
software. Ele foi projetado para ser de fácil utilização, onde é documentado as
atividades que as organizações devem realizar, desta forma é proporcionado uma
ampla riqueza de recursos de segurança que traz mais facilidade à implementação
das atividades.

O CLASP é organizado conforme a seguinte estrutura:

a) Visões CLASP
O processo de desenvolvimento seguro CLASP, pode ser visto por meio de
perspectivas de alto nível, que são chamadas de Visões CLASP e essa é dividida em
visão de conceito, visão baseada em regras, visão de avaliação de atividades, visão
de implementação de atividades e visão de vulnerabilidade.
A visão conceitual apresenta de modo geral o funcionamento do processo
CLASP e também a interação de seus componentes, são introduzidas as melhores
práticas, a interação entre o CLASP e as políticas de segurança e alguns conceitos
de segurança e a relação entre elas.
A visão baseada em regras estabelece as reponsabilidades básicas de cada
membro do projeto (gerente, arquiteto, especificador de requisitos, projetista,
implementador, analista de testes e auditor de segurança), relacionando cada um
com sua atividade proposta, como também especifica quais os requerimentos
básicos para cada função.
A visão de avaliação de atividades descreve o objetivo de cada atividade, os
custos para implementação, a aplicabilidade, o impacto de cada atividade e os
riscos, caso alguma atividade não seja feita.

Revista Pensar Tecnologia, v.4, n.2, jul. 2015


A visão de implementação descreve o conteúdo das 24 atividades de
segurança definidas pelo CLASP e identifica os responsáveis pela implementação de
cada atividade.
A visão de vulnerabilidade engloba um catálogo que descreve 104 tipos de
vulnerabilidades no desenvolvimento de software, divididas em cinco categorias:
Erros de tipo e limites de tamanho; Problemas do ambiente; Erros de sincronização e
temporização; Erros de protocolo e erros lógicos em geral. Nessa fase também são
aplicadas técnicas de mitigação e avaliação de riscos.

b) Caso de uso de Vulnerabilidades


Os casos de uso de vulnerabilidades descrevem as condições as quais os
serviços de segurança podem tornar aplicações de software vulnerável. Por meio de
exemplos de fácil entendimento os casos de uso fornecem aos usuários CLASP o
relacionamento de causa e efeito sobre a codificação do programa e seu design,
ainda mostra os possíveis resultados da exploração de vulnerabilidades em serviços
de segurança básicos, como por exemplo: Autorização, autenticação,
confidencialidade, disponibilidade, responsabilização e não repúdio.

5 CONSIDERAÇÕES FINAIS

O presente trabalho apresentou alguns aspectos sobre codificação segura no


desenvolvimento de aplicações Web, onde buscou-se apresentar por meio de
fundamentação teórica as principais vulnerabilidades exploradas nessas aplicações,
como também descrever boas práticas para fins de mitigar as vulnerabilidades
exploradas em códigos das aplicações.
Por tanto com base na pesquisa realizada pode-se concluir que para a
concepção de uma aplicação web segura é preciso que além da implementação de
mecanismos de segurança de rede e politicas de segurança, seja adotado pelas
organizações boas práticas de codificação, onde será possível a utilização de
técnicas de codificação segura, ferramentas para testes e detecção de
vulnerabilidades no código.

Revista Pensar Tecnologia, v.4, n.2, jul. 2015


REFERÊNCIAS

ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. NBR ISSO/IEC 27002:2005.


Tecnologia da Informação – Técnicas de Segurança –Código de Prática para Gestão
da Segurança da Informação.

CABRAL, Maristela e TERTO, Holanda. Segurança no Desenvolvimento de


Aplicações. CEGSIC 2009-2011. Desenvolvido em atendimento ao plano de trabalho
do Programa de Formação de Especialistas para a Elaboração da Metodologia
Brasileira de Gestão de Segurança da Informação e Comunicações.

HOWARD, Michael e LIPNER, Steve. O clico de vida do desenvolvimento de


segurança de computação confiável (2005). Disponível em:
<http://msdn.microsoft.com/pt-br/library/ms995349.aspx>. Acesso em: 22 nov. 2014

MCAFFE FOR BUSINESS. Criando Software seguro. Disponível em:


<http://www.mcafee.com/br/services/strategic-security-education/classroom-
training/building-secure-software.aspx>. Acesso em: 27 nov. 2014

OWASP. Melhores Práticas de Codificação Segura – Guia de Referência Rápida.


2008. Disponível em:<https://www.owasp.org/images/b/b3/OWASP_SCP _v1.3_pt-
BR.pdf >. Acesso em: 17 nov.2014

OWASP. Project CLASP. Disponível em: <https://www.owasp.org/images/b/b3/


OWASP_SCP_v1.3_pt-BR.pdf> . Acesso em: 17 nov. 2014

OWASP. Os dez riscos de segurança mais críticos em aplicações web. Disponível


em: <https://www.owasp.org/images/9/9c/OWASP_Top_10_2013_PT-BR.pdf>.
Acesso em: 17 nov. 2014

UTO Nelson e PEREIRA, Sandro M. Vulnerabilidades em Aplicações Web e


Mecanismos de Proteção. Disponível em:
<http://www.lbd.dcc.ufmg.br/colecoes/sbseg/2009/044.pdf>. Acesso em: 17 nov.
2014.

Revista Pensar Tecnologia, v.4, n.2, jul. 2015


Apêndice A – Cenários de ataques de injeção de SQL
- Neste exemplo é utilizado dados não confiáveis na construção da
chamada SQL.

String query = "SELECT * FROM accounts WHERE custID='" +


request.getParameter("id") + "'";

- A utilização de frameworks como linguagem de consulta Hiebernate (HQL)


de forma incorreta pode resultar em consultas vulneráveis.
Query HQLQuery = session.createQuery(“FROM accounts WHERE
custID='“ + request.getParameter("id") + "'");

Nos dois casos descritos, o atacante modifica o valor do parâmentro ‘id’ em


seu navegador e envia ‘or’1’=’1. Como exemplo:
http://example.com/app/accountView?id=' or '1'='1.
Esse procedimento muda o significado das duas consultas para que sejam
retornados todos os registros de tabelas de contas.

Apêndices B – Cenários de ataques de Cross-Site Scripting (XSS)


- Utilização de dados não confiáveis na elaboração do trecho HTML sem
validação ou filtro.
(String) page += "<input name='creditcard' type='TEXT‘ value='" +
request.getParameter("CC") + "'>";

- O atacante modifica o parâmetro ‘CC’ sem eu navegador da seguinte


forma:
<script>document.location='http://www.attacker.com/cgibin/cookie.cgi?
foo='+document.cookie</script>'.:
Esse procedimento faz com que o ID de sessão da vítima seja enviado ao

site do atacante, permitindo a captura da sessão atual do usuário.

Revista Pensar Tecnologia, v.4, n.2, jul. 2015