47
CENTRO PAULA SOUZA FATEC OURINHOS ANÁLISE DE SISTEMAS E TECNOLOGIA DA INFORMAÇÃO Bruno Yokio Tatsumi BOAS PRÁTICAS PARA O DESENVOLVIMENTO DE SOFTWARES COM SEGURANÇA

Desenvolvimento de Software com Segurança

Embed Size (px)

DESCRIPTION

Monografia sobre Boas Práticas para o Desenvolvimento de Softwares com Segurança

Citation preview

Page 1: Desenvolvimento de Software com Segurança

CENTRO PAULA SOUZA

FATEC OURINHOS

ANÁLISE DE SISTEMAS E TECNOLOGIA DA INFORMAÇÃO

Bruno Yokio Tatsumi

BOAS PRÁTICAS PARA O DESENVOLVIMENTO DE SOFTWARES

COM SEGURANÇA

OURINHOS (SP)

2012

Page 2: Desenvolvimento de Software com Segurança

BRUNO YOKIO TATSUMI

BOAS PRÁTICAS PARA O DESENVOLVIMENTO DE SOFTWARES

COM SEGURANÇA

Trabalho de Graduação apresentado a Faculdade de Tecnologia

de Ourinhos para a conclusão do Curso de Análise de Sistemas

e Tecnologia da Informação.

Orientador: Prof. Me. Fábio Eder Cardoso.

OURINHOS (SP)

2012

Page 3: Desenvolvimento de Software com Segurança

Bruno Yokio Tatsumi

BOAS PRÁTICAS PARA O DESENVOLVIMENTO DE SOFTWARES COM

SEGURANÇA

Trabalho de Graduação - TG apresentado a Faculdade de Tecnologia de Ourinhos como

requisito para a conclusão do Curso de Análise de Sistemas e Tecnologia da Informação.

Data da aprovação: 15/12/2012

____________________ (assinatura) - ___________(nota)

Orientador: Prof. Me. Fábio Eder Cardoso – Fatec – Ourinhos

____________________ (assinatura) - ___________(nota)

Prof. Jean D. H. M. Andreazza – Fatec – Ourinhos

____________________ (assinatura) - ___________(nota)

Prof. Robson Leite – Fatec – Ourinhos

Page 4: Desenvolvimento de Software com Segurança

DEDICATÓRIA

Dedico este trabalho a minha família, principalmente aos

meus pais Nobuo e Marisete, minha noiva Carolina e minha

filha Gabriela.

Page 5: Desenvolvimento de Software com Segurança

AGRADECIMENTO

Agradeço a minha família, pelo apoio e incentivo durante

essa conquista.

Ao professor Fábio Eder pela orientação.

A professora Maria Cristina por toda ajuda durante o

desenvolvimento deste trabalho.

Aos amigos pelo apoio durante o decorrer do curso.

Page 6: Desenvolvimento de Software com Segurança

“Que os vossos esforços desafiem as impossibilidades,

lembrai-vos de que as grandes coisas do homem foram

conquistadas do que parecia impossível.”

Charles Chaplin

Page 7: Desenvolvimento de Software com Segurança

RESUMO

O presente trabalho objetiva evidenciar a importância de se adotar práticas de segurança durante o desenvolvimento de softwares, de modo que a aplicação desenvolvida possa se tornar mais eficiente, ou seja, atender os requisitos e funcionalidades da melhor maneira possível, impedindo que as informações que direcionam as tomadas de decisões dentro de uma organização sejam inconsistentes e atrapalhem os processos empresariais, ajudando a garantir a continuidade do negócio. Posteriormente, serão apresentadas as maiores vulnerabilidades contidas nas aplicações, que são divulgadas por uma comunidade conhecida mundialmente, chamada OWASP Foundation, e com base nestas vulnerabilidades serão abordadas boas práticas de desenvolvimento de software, por meio de um manual elaborado a partir dos conceitos de segurança aplicados ao desenvolvimento de software, pregados por autores pertinentes à área de segurança da informação e também pela própria comunidade que divulga essas vulnerabilidades. A lista de checagem elaborada por meio deste trabalho tem o intuito de avaliar o nível de segurança de uma aplicação no momento de sua criação, podendo indicar ao desenvolvedor os pontos vulneráveis do sistema.

Palavras-chave: Segurança, desenvolvimento, software, check-list.

Page 8: Desenvolvimento de Software com Segurança

ABSTRACT

This work aims to evidence how important is to adopting safe practices during software development so that the application can be more efficient, in other words, attend the requirements and features as well as possible, preventing the information that guide decision making within an organization become inconsistent and hinder business processes, helping to ensure business continuity. Subsequently, will be present the greatest vulnerabilities contained in the applications, which are disclosed by a community known worldwide, called OWASP Foundation, and based on these vulnerabilities will be addressed best practices in software development through a manual drawn from concepts of security applied to software development, preached by authors relevant to the area of information security. The check-list developed by this work has the purpose of evaluate the level of security in an application at the time of its writing, which could indicate to the developer the system vulnerabilities.

Keywords: Security, development, software, check-list.

Page 9: Desenvolvimento de Software com Segurança

LISTAS DE ABREVIATURAS E SIGLAS

API: Application Programming Interface

CSRF: Cross Site Request Forgery

HTTP: Hyper Text Transfer Protocol

ISO: International Organization for Standardization

OWASP: The Open Web Application Security Project

PDCA: Plan Do Check Act

QAS: Quality Assurance System

SQL: Structured Query Language

URL: Uniform Resource Locator

XSS: Cross Site Scripting

Page 10: Desenvolvimento de Software com Segurança

SUMÁRIO

1 INTRODUÇÃO – TEMA E PROBLEMATIZAÇÃO.............................................10

Objetivos.......................................................................................................................12

Geral..............................................................................................................................12

Específicos....................................................................................................................12

Justificativa....................................................................................................................12

2 REVISÃO BIBLIOGRÁFICA....................................................................................13

2.1 Informação como ativo..................................................................................................13

2.2 Sistemas de informação empresarial.............................................................................14

2.3 Aplicação três camadas.................................................................................................16

2.4 Conceitos de segurança da informação.........................................................................16

2.5 Segurança da informação no desenvolvimento de softwares empresariais...................18

2.6 Principais vulnerabilidades existentes nas aplicações web e suas correções................20

3 METODOLOGIA........................................................................................................25

4 RESULTADOS E DISCUSSÕES...............................................................................26

5 CONSIDERAÇÕES FINAIS......................................................................................27

6 REFERÊNCIAS BIBLIOGRÁFICAS.......................................................................28

7 APÊNDICES.................................................................................................................30

7.1 Check-list elaborado para desenvolvimento seguro......................................................30

Page 11: Desenvolvimento de Software com Segurança

10

1 INTRODUÇÃO – TEMA E PROBLEMATIZAÇÃO

Com a globalização, o cotidiano das empresas não é mais o mesmo de antes, o fato

de estarem no mercado hoje, não significa que também estarão em um futuro próximo,

Longenecker et al (2011), colaborando com essas ideias, afirma que de uma gama de opções

para crescer, deve-se considerar as medidas que poderão levar aos melhores resultados,

completa ainda que a vantagem competitiva deve ser fruto do aumento da participação de

mercado e melhoria da satisfação do cliente, resultando no aumento da lucratividade.

O aumento da participação no mercado, a redução de custos de produção, o

desenvolvimento de novos produtos e/ou orçamento da produtividade do

empregado depende mais e mais dos tipos e qualidade dos sistemas de

informação na empresa (ABREU; REZENDE, 2009, p. 81).

De acordo com estas informações, pode-se dizer que as empresas precisam de um

bom gerenciamento para que se mantenham no mercado, e a modernidade tem mostrado que

uma excelente forma de se obter esta estabilidade, é por meio da utilização de softwares de

tomadas de decisões, pois através deles os gestores têm o exato conhecimento do que está

acontecendo em suas empresas, podendo assim, tomar decisões corretas e direcionadas.

Roberto Valabrega (2012), corroborando com as ideias acima, informa que o cenário

empresarial encontra-se em certa dependência dos softwares, tendo em vista que estas

aplicações geram informações úteis para as tomadas de decisões que são de grande

importância para a saúde da organização, portanto, a segurança dessas ferramentas é

imprescindível, já que se os dados nelas contidos estiverem incorretos, estes poderão

ocasionar em erros nas tomadas de decisões, e consequentemente em prejuízos para a

empresa.

Partindo desses pressupostos, nota-se que usuários mau intencionados estão se

aproveitando dessa importância e da constante presença dos softwares dentro das

Page 12: Desenvolvimento de Software com Segurança

11

organizações, para procurar oportunidades de se aproveitarem das informações sigilosas,

Thibodeau (2012) descreve que muitos dos incidentes de segurança da informação provêm de

pessoas internas à empresa, e também que causam muitos danos, principalmente com a

imagem da organização, ou seja, os próprios funcionários tentam apropriar-se de informações

secretas para se beneficiarem ou até mesmo para simplesmente prejudicar a empresa em que

trabalham.

Portanto, é de suma importância que diretores, gestores ou responsáveis pela

administração das organizações tomem medidas contra esses ataques. É preciso certificar-se

que as aplicações estarão preparadas contra possíveis ameaças. Investir em segurança durante

a fase de desenvolvimento do software é um item indispensável na luta pela continuidade do

negócio.

O principal fator para o sucesso na implantação de um novo produto ou serviço

reside no fato de como ele é implantado na organização. A inexistência de processos bem

definidos acaba por provocar problemas como a alta dependência da experiência das pessoas

envolvidas. Este cenário resulta na realização de projetos cujos resultados são imprevisíveis,

onde cada um realiza as suas atividades da forma que lhe convém, e dificulta a reutilização de

boas práticas e de lições aprendidas. Portanto, deve-se questionar quais critérios devem ser

utilizados para melhorias a serem realizadas no processo de desenvolvimento de softwares,

para que possam minimizar os riscos e produzir ações que diminuam as ameaças.

Possivelmente, a resposta a esse questionamento será a realização de um diagnóstico

das ameaças, e a sua relevância em relação ao cumprimento dos objetivos da organização,

uma vez que com essas medidas as organizações terão subsídios para a melhoria da qualidade

dos softwares, bem como para a sua elaboração.

Finalmente pode-se salientar que o ponto principal desta pesquisa consiste em

identificar pontos fracos no processo de desenvolvimento de software que poderão acarretar

em incidentes de segurança contra os dados de uma empresa com a finalidade de estabelecer

um check-list que possa servir de apoio no momento da criação de um software, podendo

assim aumentar a qualidade da ferramenta desenvolvida.

Page 13: Desenvolvimento de Software com Segurança

12

Objetivos

Geral

Elaborar um manual em forma de check-list baseado nos pontos fracos do processo de

desenvolvimento de software, que ao ser utilizado possa prover uma camada de segurança à

aplicação web desenvolvida.

Específicos

Pesquisar os principais pontos fracos no processo de desenvolvimento de software;

Estudar as indicações existentes para qualidade de softwares;

Elaborar um check-list que servirá de apoio ao desenvolvedor;

Disponibilizar os resultados obtidos para serem utilizados/implementados

futuramente.

Justificativa

Para que uma empresa tenha competitividade no mercado ela precisa ter uma boa

administração, e os softwares para tomadas de decisões são ótimas ferramentas para auxiliar

nesta atividade, mas para que resulte em efeitos reais, é preciso que as informações obtidas

sejam verdadeiras, e um dos meios para se garantir a veracidade dos dados é certificar que o

software foi construído da melhor forma possível, tentando minimizar a probabilidade de ser

burlado. Desta forma, essa pesquisa visa sanar esse problema através do desenvolvimento de

passos que ao serem seguidos, criarão uma camada de segurança na aplicação.

Page 14: Desenvolvimento de Software com Segurança

13

2 REVISÃO BIBLIOGRÁFICA

Neste capítulo será abordado a definição de informação e sistemas de informação,

juntamente com a importância que estes têm no âmbito organizacional, posteriormente será

explicado o conceito de aplicação web, que é o tipo de sistema que será utilizado no decorrer

deste trabalho, após isso, serão descritos alguns conceitos de segurança da informação e então

segurança no desenvolvimento de softwares, por fim, serão informadas as maiores

vulnerabilidades de acordo com a divulgação de OWASP Foundation1 em conjunto com suas

correções.

1.1 Informação como ativo

Para a definição de informação, é preciso primeiramente o conceito de dados, um

dado pode ser representado como o estado de algo, a informação é constituída por um

conjunto de dados, que por sua vez, representam um ponto de vista, o qual evidência o

significado que antes era desconhecido sobre eventos ou objetos, significado este que será

essencial para a extração e criação do conhecimento. Campos (2007), conclui estas

afirmações informando que o conhecimento só poderá ser formado a partir da exposição do

indivíduo à informação, dessa maneira, é possível afirmar logicamente que poderá existir

informação sem conhecimento, mas nunca conhecimento sem informação, ou seja, a

informação tem um valor muito grande, tendo em vista que ela é a base para o conhecimento.

1 OWASP é uma comunidade aberta dedicada a preparar as organizações para desenvolver, adquirir e manter

aplicações com segurança e em cada edição publica as maiores vulnerabilidades do momento (última publicação

em 2010).

Page 15: Desenvolvimento de Software com Segurança

14

Figura 1: Processo de transformação dos dados em conhecimento.

Fonte: elaborado pelo autor.

Um ativo para uma empresa é tudo aquilo que pode lhe ser atribuído um preço, ou

seja, tudo que agrega valor à organização, atualmente a informação é o ativo mais valioso no

meio empresarial. Os dados, depois de extraídos e tratados ou analisados, se transformam em

informação, que por sua vez será utilizada para a obtenção do conhecimento, ou seja, os

registros contidos nos bancos de dados irão se transformar em conhecimento, que por sua vez

será utilizado para tomar decisões importantes para a saúde da organização.

Sendo assim, pode-se dizer que os dados das empresas devem ser manipulados com

segurança, para que não ocorram erros nas tomadas de decisões. Segundo ISO (2005), a

informação é um ativo essencial para os negócios de uma organização e necessita ser

adequadamente protegida.

1.2 Sistemas de informação empresarial

Segundo Abreu e Rezende (2009), um sistema de informação pode ser definido como

um processo que transforma dados em informações, que por sua vez serão utilizadas para as

tomadas de decisões da empresa e consequentemente proporcionarão a sustentação

administrativa da mesma, visando garantir os resultados esperados. Dessa forma pode-se dizer

que as aplicações empresariais, mais do que tratar dados (transformá-los em informações),

apoia o processo de negócio da empresa, contribuindo para a continuidade dos negócios.

Page 16: Desenvolvimento de Software com Segurança

15

Figura 2: Relação dos sistemas de informação com os negócios da empresa e seus ativos.

Fonte: elaborado pelo autor.

Abreu e Rezende (2009) elencam alguns dos benefícios que as empresas procuram

obter por meio dos sistemas de informação:

suporte à tomada de decisão;

valor agregado ao produto (bens e serviços);

melhor serviço e vantagens competitivas;

produtos de melhor qualidade;

oportunidade de negócios de aumento da rentabilidade;

mais segurança nas informações, menos erros, mais precisão;

aperfeiçoamento nos sistemas, eficiência, eficácia, efetividade, produtividade;

carga de trabalho reduzida;

redução de custos e desperdícios;

controle das operações.

Page 17: Desenvolvimento de Software com Segurança

16

1.3 Aplicação web

Há muitos modelos de sistemas de informação, um deles, o qual será utilizado neste

trabalho, é o modelo três camadas, ele adota a prática de segregação das camadas de uma

aplicação em três partes, camada de apresentação, de negócio e de persistência (banco de

dados), este modelo é bastante utilizado por ser mais fácil de manter, pois a aplicação fica

somente em uma máquina (servidor de aplicação, onde é implementada a camada de negócio),

estes sistemas são comumente chamados de aplicações web, e serão abordadas no decorrer

deste trabalho, práticas de segurança baseadas neste modelo de aplicação.

Fig. 3: Representação de um modelo de sistema em três camadas.

Fonte: França (2010, online)

1.4 Conceitos de segurança da informação

Segurança da informação, segundo ISO (2005), é de uma maneira geral, uma forma

de proteger os ativos garantindo a integridade, confidencialidade e disponibilidade dos dados.

Partindo do princípio de que os ativos serão as informações contidas em um banco de dados

de uma empresa, o método de se obter segurança é ter certeza de que essas informações

estarão condizendo com a verdade, somente acessível a quem necessita e disponível quando

for preciso.

A segurança da informação possui muitos aspectos importantes, entre eles, Lyra

(2008) destaca alguns:

confidencialidade: A capacidade que um sistema tem de diferenciar o acesso aos

recursos para diferentes tipos/grupos de usuários;

Page 18: Desenvolvimento de Software com Segurança

17

integridade: A informação manipulada pelo sistema deve ser verdadeira, ou seja, não

pode estar corrompida;

disponibilidade: As funcionalidades do sistema devem estar disponíveis sempre que

necessário;

autenticação: Garantia do sistema que um usuário é de fato quem alega ser;

não repúdio: Capacidade do sistema de provar que determinado usuário executou

alguma ação.

legalidade: Garantia que o sistema esteja em conformidade à legalidade pertinente;

privacidade: Capacidade de um sistema de manter anônimo algum usuário (em alguns

casos), impossibilitando o relacionamento entre o usuário e suas ações (por exemplo, o

sistema de voto eletrônico);

auditoria: A capacidade que um sistema tem de auditar tudo o que foi realizado pelos

usuários, detectando fraudes ou tentativas de ataques.

Esses aspectos formam os pilares da segurança da informação, que quando

preservados, representam certo nível de garantia ao ativo, e à continuidade dos negócios. Para

ISO (2005), a segurança da informação é obtida através da implementação de vários controles

adequados, entre eles, funções de software, o qual será abordado no decorrer deste trabalho,

acrescenta ainda que estes controles devem ser estabelecidos, implementados, monitorados,

analisados e criticamente melhorados de maneira contínua, ou seja, deve ser formado um ciclo

PDCA2 como processo de melhoria nos conceitos de segurança utilizados pela organização,

para que dessa maneira os negócios da empresa possam ser assegurados.

A segurança da informação nas empresas deve ser considerada como um processo

que tem como finalidade proteger os recursos de informação, permitindo que o negócio da

organização seja realizado da maneira correta, e que o mesmo tenha continuidade ao longo do

tempo (FONTES, 2008).

2 Ciclo utilizado para melhoria contínua, formado por quatro passos: planejamento, implementação, monitoração

e ação corretiva.

Page 19: Desenvolvimento de Software com Segurança

18

1.5 Segurança da informação no desenvolvimento de softwares empresariais

Conforme foi explanado anteriormente neste trabalho, os softwares são

indispensáveis nas empresas, pois ajudam na continuidade dos negócios, em paralelo a essa

ideia, foi informado também que as empresas estão cada vez mais dependentes destes

softwares, portanto, é imprescindível que os dados manipulados por estas aplicações sejam

consistentes, para que não ocasionem em decisões erradas por parte dos administradores.

Já que as aplicações empresariais são tão importantes para as organizações, pois

manipulam as informações, que é o ativo mais valioso nos dias de hoje, deve-se levar em

consideração o uso de técnicas para diminuir o risco que este sistema está submetido, o de se

tornar alvo de um incidente de segurança, em outras palavras, é necessário o uso dos

conceitos de segurança no processo de desenvolvimento de software, para o bem da saúde da

organização.

Um código projetado e construído com a segurança como recurso principal é mais robusto do que um código escrito com a segurança sendo pensada posteriormente. Produtos seguros também estão mais imunes à critica da mídia, mais atraentes aos usuários e menos caros de corrigir e suportar. (HOWARD; MICHAEL, 2005, p. 34).

Howard e Michael (2005) informam ainda alguns motivos para se investir em

segurança no software, entre eles estão a imagem da organização, pois nada pior para uma

empresa do que uma publicação de um incidente de segurança em seus produtos, e também o

custo para corrigir vulnerabilidades nos sistemas, conforme indicado esse valor costuma ser

alto, ou seja, é mais viável pensar em segurança na fase do desenvolvimento do que na

manutenção do mesmo.

Fontes (2008) informa alguns requisitos de segurança que devem ser levados em

consideração durante o desenvolvimento de softwares, são eles:

Modularidade: Um sistema deve estar segregado em partes, de forma que estas executem

uma ou apenas algumas funcionalidades, pois elementos muito grandes se tornam mais

complexos de serem mantidos, dando margem ao erro em futuras manutenções.

Documentação adequada: Todas as funcionalidades existentes no sistema e também as

regras de negócio envolvidas, devem estar documentadas, de forma que outro profissional

Page 20: Desenvolvimento de Software com Segurança

19

do mesmo nível técnico da pessoa que realizou o desenvolvimento possa entender o

algoritmo.

Controle de versão: A equipe de programação deve utilizar meios que tornam possível a

recuperação de versões anteriores do código fonte, e também de identificar quem realizou

determinado desenvolvimento.

Ambientes de desenvolvimento: O ideal é que a organização possua três ambientes:

homologação, produção e testes, para que dessa maneira diminua o risco de ocorrer erros

na produção e parar todo o processo de negócio, por um erro que poderia ter sido

encontrado durante os testes.

Controle dos códigos fontes: Cada programador deve ter acessos apenas aos códigos

fontes que lhe forem pertinentes para evitar sabotagens.

Registros para auditoria: Todos os acessos realizados nos dados dos sistemas devem ser

registrados para possíveis auditorias ou investigações, uma leitura constante dos dados

realizada fora do horário de trabalho, pode significar fraude.

Avaliação da qualidade do desenvolvimento: É interessante que as empresas que

desenvolvem sistemas, tenham uma área de QAS3, que valida o que foi desenvolvido com

o que está especificado e acertado em termos de nível de serviço.

Estes requisitos acima estão em nível de gerência, posteriormente neste trabalho

serão abordados requisitos ao nível técnico, tendo em vista que o ponto principal do mesmo é

a implementação de segurança no código de uma aplicação.

3 Garantia da Qualidade do Sistema, área responsável pelo processo de garantia da qualidade do software, através

de testes funcionais.

Page 21: Desenvolvimento de Software com Segurança

20

1.6 Principais vulnerabilidades existentes nas aplicações web e suas correções

OWASP (2010) divulga os principais tipos de ataques dos quais uma aplicação está

submetida ao risco, essas ameaças serão descritas juntamente com o modo de como devem ser

corrigidas, utilizando pseudocódigos quando necessário.

Injeções SQL

Ataques de injeções SQL4 ocorrem quando dados maliciosos são enviados para o

interpretador como parte de um parâmetro, ou seja, é injetado um comando no lugar de um

parâmetro, e essas informações hostis tentam enganar o interpretador de forma a executar

comandos diferentes dos que seriam executados ou até mesmo obter dados sem que o usuário

tenha autorização. Esta ameaça consiste em alterar o funcionamento correto do comando SQL

para enganar o interpretador, por exemplo, um comando que poderia ser utilizado para validar

o usuário e senha, o atacante poderia ser validado sem digitar uma credencial válida.

Segundo Howard e LeBlanc (2005), para o desenvolvedor proteger a aplicação deste

tipo de ameaça, ele não pode utilizar diretamente o que foi digitado nos campos de

formulários no comando SQL, deverá ser passado por validações de acordo com o tipo de

campo, por exemplo, um campo de senha deve ser delimitado o tamanho dos caracteres, além

disso, este comando não deve possuir a concatenação direta dos dados recebidos, é necessário

o uso de marcadores de posições, por exemplo o caractere “?”, que será substituído pelos

dados recebidos (caso forem válidos) através de uma função.

Exemplo de pseudocódigo inseguro:

4 Padrão muito utilizado em sistemas empresariais de linguagem de programação para bancos de dados.

[LOGIN] = Login informado pelo usuário;

[SENHA] = Senha informada pelo usuário;

COMANDO SQL = “SELECIONAR USUARIO COM LOGIN = [LOGIN] E SENHA = [SENHA]”;

EXECUTAR COMANDO SQL;

Page 22: Desenvolvimento de Software com Segurança

21

Exemplo de pseudocódigo seguro:

Scripts executáveis entre diferentes páginas (XSS)

O ataque de XSS ocorre sempre que um aplicativo aceita uma entrada de dados

maliciosa, posteriormente a envia como saída para um navegador sem a devida validação ou

tratamento, daí então que o XSS permite que os atacantes executem scripts no navegador dos

usuários, que poderão ter seus dados sequestrados por meio desta entrada maliciosa. Um

exemplo clássico deste tipo de ataque é quando um usuário mau intencionado insere, no lugar

de alguma descrição, um script, e quando outro usuário consultar esta descrição, este script é

executado, podendo fazer com que os dados do usuário sejam expostos.

Para que a aplicação seja assegurada contra este tipo de ameaça, de acordo com

Howard e LeBlanc (2005), o que pode ser feito é, assim como no ataque de SQL Injection,

realizar a validação dos dados de entrada de acordo com o que se espera receber, por

exemplo, um nome de pessoa não pode haver “$”. Além disso, faz-se necessário o uso destas

validações na saída, para que em casos que a entrada maliciosa passe pela validação inicial.

Quebra de autenticação e gerenciamento de sessão

Muitas vezes, em partes responsáveis por autenticar usuários e gerenciar as sessões

de um sistema, não são implementadas corretamente aspectos de segurança, permitindo que

atacantes comprometam dados como senhas de sessão explorando essas falhas e assumam a

identidade de outros usuários. Um exemplo deste ataque é quando um sistema não determina

um tempo para expirar sessão, então um usuário já autenticado simplesmente fecha o

navegador e sai de sua estação de trabalho sem bloquear a máquina, então o usuário mau

intencionado abre novamente o navegador e consegue utilizar o sistema com as credenciais de

outrem.

[LOGIN] = Login informado pelo usuário;

[SENHA] = Senha informada pelo usuário;

EXECUTAR VALIDAÇÕES DO LOGIN E SENHA;

COMANDO SQL = “SELECIONAR USUARIO COM LOGIN = ? E SENHA = ?”;

EXECUTAR FUNÇÃO PARA SUBSTITUIR OS MARCADORES DE LOCAIS “?” PELOS DADOS VALIDADOS;

EXECUTAR COMANDO SQL;

Page 23: Desenvolvimento de Software com Segurança

22

Para a correção desta vulnerabilidade, OWASP (2010) informa que os

desenvolvedores devem considerar o uso de controles de sessão, tais como tempo para expirar

sessão e corte de sessão toda vez que o usuário fechar o navegador, além de usar autenticação

eficiente dos usuários (utilização de senhas fortes). Para um melhor gerenciamento de sessão,

o programador pode procurar alguma API5, que possa auxiliar nesta tarefa, de acordo com a

plataforma/framework utilizado(a).

Insegurança ao referenciar objetos diretamente

Esta vulnerabilidade ocorre quando um desenvolvedor expõe uma referência interna

de algum objeto como um arquivo, diretório, ou configuração de banco de dados, sem um

controle de acesso ou outro tipo de proteção, então os atacantes podem manipular estas

referências para obter acessos sem autorização. Por exemplo, em uma caixa de seleção na

qual o usuário deve indicar qual base de dados irá acessar, para não expor informações sobre

essa base, segundo Howard e LeBlanc (2005), o programador deve utilizar um objeto indireto,

como um número que será utilizado para recuperar a base de dados que deverá ser utilizada.

Falsificação de requisições entre páginas (CSRF)

Um atacante induz algum usuário que esteja com sessão aberta (já autenticado no

sistema) a acessar uma página fora de contexto, com isso, é forjada uma requisição HTTP no

navegador da vítima, sendo que esta requisição é feita para a aplicação na qual o usuário está

utilizando, pois este já está autenticado. Para corrigir esta ameaça, OWASP (2010) indica que

é necessário criar um campo invisível a mais em cada formulário, para guardar um número

randômico gerado em cada sessão, e em cada requisição a aplicação deve verificar se retornou

o mesmo número gerado.

Configurações de segurança erradas

Ferramentas como frameworks, servidores de aplicação e de banco de dados,

possuem configurações de extrema importância para a segurança da aplicação, atacantes

vivem em constante procura por vulnerabilidades nessas ferramentas, então quando essas

configurações não são implementadas e revisadas regularmente, o sistema está vulnerável à

ataques devido a essas falhas de configurações. Um exemplo clássico para este ataque é

5 Conjunto de funções rotineiras acessíveis por programação que permitem o desenvolvimento com menor

esforço de determinadas funcionalidades.

Page 24: Desenvolvimento de Software com Segurança

23

quando o desenvolvedor se esquece de alterar a página do administrador, como alterar de

“www.exemplo.com/admin” para outro nome não comum, mas existem vários outros tipos de

configurações que existe vulnerabilidade, isto irá variar de acordo com cada tipo de

tecnologia empregada, portanto para a aplicação estar segura em relação a esta ameaça,

OWASP (2010) descreve que os programadores devem tomar atitudes proativas quanto a isto,

por exemplo, a cada nova versão verificar se existem patches de correções para alguma

eventual vulnerabilidade, e manter as tecnologias sempre atualizadas, também é importante

que seja criado um padrão de implantação, para que as configurações sejam as mesmas em

qualquer ambiente.

Falha de restrição de acesso à URL

Normalmente as aplicações web verificam os direitos de acesso a uma determinada

URL antes de a mesma ser renderizada, porém, dentro desta página existem partes do

software, tais como botões que executam determinadas funções, essa vulnerabilidade consiste

em acessar estas partes separadas sem passar pela página intermediaria, ou seja, executar

alguma funcionalidade do sistema sem possuir credencial para isto. Para que esta

vulnerabilidade seja corrigida, pode ser criado um filtro, onde serão criadas as regras de

acesso, então todas as requisições serão intermediadas por este filtro, que irá funcionar como

uma espécie de firewall. Muitos frameworks já possuem este tipo de controle implementado

justamente para evitar este tipo de ataque.

Redirecionamentos sem validações

Frequentemente nas aplicações são utilizados redirecionamentos para outras páginas,

em alguns casos esse redirecionamento é uma função que utiliza a URL de destino como

parâmetro. Usuários mau intencionados poderão alterar esta requisição, inserindo uma página

que não poderia acessar como parâmetro, uma tela de configurações administrativas por

exemplo. A solução para este problema, segundo Howard e LeBlanc (2005), é a mesma

empregada na vulnerabilidade anterior (Falha de restrição de acesso à URL), dessa maneira,

mesmo que o sistema redirecione o usuário para uma página que ele não tem acesso, a

requisição passará por um filtro, que bloqueará o acesso.

Armazenamento inseguro de criptografia

Page 25: Desenvolvimento de Software com Segurança

24

Algumas aplicações não protegem dados sensíveis da maneira apropriada, atacantes

aproveitam dessa vulnerabilidade para roubar dados importantes que não foram

criptografados. Howard e LeBlanc (2005) informam que o programador deve considerar a

possibilidade de armazenar alguns dados que necessitam de uma camada extra de segurança,

como senhas, com criptografia.

Falha de proteção da camada de transporte insuficiente

Essa falha acontece quando os desenvolvedores não utilizam criptografia (ou se é

utilizado algoritmos fracos) no tráfego de dados com extrema sensibilidade, tais como dados

de cartão de crédito. Em determinados tipos de transações, OWASP (2010) informa que é

importante que seja trafegado dados criptografados, para que algum usuário que intercepte

estas informações, não consiga enxergá-las.

Page 26: Desenvolvimento de Software com Segurança

25

3 METODOLOGIA

Para o desenvolvimento deste trabalho foi utilizada a pesquisa bibliográfica como

referencial teórico, onde são utilizados autores pertinentes à área do estudo, tendo em vista

que Severino (2002) esclarece ser este tipo de pesquisa essencial para o início de um processo

investigatório.

Em um segundo momento, foram identificadas as principais vulnerabilidades

existentes nas aplicações web com base na divulgação da OWASP Foundation, e para cada

ameaça foi pesquisada a sua correção. Posteriormente, com base nestas informações foi

elaborado o check-list encontrado neste trabalho como apêndice.

O check-list criado ficará a disposição para ser utilizado em futuros trabalhos ou até

mesmo implementado no momento de criação de alguma aplicação, tendo em vista que isto

irá complementar os resultados obtidos através deste trabalho.

Page 27: Desenvolvimento de Software com Segurança

26

4 RESULTADOS E DISCUSSÕES

Após o levantamento das principais vulnerabilidades a partir da divulgação da

OWASP Foundation, foram pesquisadas suas correções e então expostas, com base nisto

foram levantados pontos em que o desenvolvedor deve tomar cuidado para que o software

desenvolvido tenha certa segurança contra estas ameaças, em seguida foi elaborado um check-

list para desenvolvimento seguro, que se encontra como apêndice neste trabalho.

Posteriormente, em tentativa de consolidação desta pesquisa, o check-list foi

disponibilizado para o setor de desenvolvimento em uma empresa no interior de São Paulo,

porém em entrevista com esta empresa, os responsáveis não concordaram em aplicar tal

ferramenta, tendo em vista que isto iria expor as vulnerabilidades existentes no seu produto.

Este check-list obtido através deste trabalho ficará à disposição para que seja

utilizado em trabalhos futuros ou também para ajudar na implementação de segurança em

novas aplicações no momento de sua criação.

2

Page 28: Desenvolvimento de Software com Segurança

27

5 CONSIDERAÇÕES FINAIS

No decorrer deste trabalho foram descritos os motivos que levam uma empresa a

investir em segurança no desenvolvimento de softwares, posteriormente, foi pesquisado na

divulgação da OWASP Foundation as principais vulnerabilidades contidas nas aplicações

web, junto a isso, foram descritas as correções para tais ameaças. A partir dessas ideias foi

elaborado um check-list de desenvolvimento seguro que se encontra no capítulo de apêndices,

o intuito desta ferramenta é contribuir para a segurança nas aplicações web, tornando o

processo de desenvolvimento de sistemas mais eficaz.

Com base na credibilidade dos autores utilizados neste trabalho, conclui-se que o

manual criado irá prover uma camada de segurança na aplicação desenvolvida, mas é

importante salientar que este modelo aqui descrito não foi de fato implementado em uma

aplicação real, pois a empresa na qual foi realizada a tentativa de aplicação do check-list não

concordou em concretizar tal experimento, pois isto iria expor as vulnerabilidades deste

sistema, então este trabalho ficará a disposição para que seja utilizado futuramente, no

momento de criação da arquitetura de uma aplicação web.

Page 29: Desenvolvimento de Software com Segurança

28

6 REFERÊNCIAS BIBLIOGRÁFICAS

Associação Brasileira de Normas Técnicas. ISO/IEC 27002. Rio de Janeiro: 2005.

Associação Brasileira de Normas Técnicas. NBR ISO/IEC 12207 - Tecnologia de informação - Processos de ciclo de vida de software. Rio de Janeiro: 2009.

CAMPOS, A. SISTEMA DE SEGURANÇA DA INFORMAÇÃO: Controlando os Riscos. 2 ed. Florianópolis: Visual Books, 2007.

FONTES, E. L. G. Praticando a Segurança da Informação. Rio de Janeiro: Brasport, 2008.

FRANÇA, F. A. Tutorial – Entendendo Java para WEB. Disponível em: http://flavioaf.wordpress.com/2010/02/25/tutorial-entendendo-java-para-web-parte-1/. Acesso em 26 nov 2012.

HOWARD. M; LEBLANC, D. Escrevendo Código Seguro. 2 ed. Tradução Edson Furmankiewicz. Porto Alegre: Bookman, 2005.

LYRA, Maurício Rocha. Segurança e Auditoria em Sistemas de Informação. Rio de Janeiro: Editora Ciência Moderna, 2008.

LONGENECKER,J. G. et al. Administração de pequenas empresas. 13 ed. Tradução Oxbridge Centro de Idiomas. São Paulo: Cengage Learning, 2011.

REZENDE, D. A; ABREU, A. F. TECNOLOGIA DA INFORMAÇÃO Aplicada a Sistemas de Informação Empresariais. 6 ed. São Paulo: Atlas, 2009.

RODRIGUES, R. Desenvolvimento de software seguro para as organizações. Disponível em: http://www.isaca.org.br/novoportal/modules/wfsection/article.php?articleid=11. Acesso em 20 mar 2012.

SEVERINO, A. J. Métodologia Científica. 22° edição. São Paulo: Cortez, 2002.

Page 30: Desenvolvimento de Software com Segurança

29

THE OPEN WEB APPLICATION SECURITY PROJECT. OWASP Top 10 – 2012: The Ten Most Critical Web Application Security Risks. Disponível em: https://www.owasp.org/images/0/0f/OWASP_T10_-_2010_rc1.pdf. Acesso em 06 nov 2012.

THIBODEAU, P. Há sempre alguém para culpar por um problema de TI. CIO. Disponível em: http://cio.uol.com.br/gestao/2012/03/01/ha-sempre-alguem-para-culpar-por-um-problema-de-ti. Acesso em 02 jun 2012.

VALABREGA, R. Por que usar um software de Gerenciamento de Projetos? Disponível em: http://www.artigonal.com/ger-de-projetos-artigos/porque-usar-um-software-de-gerenciamento-de-projetos-5712784.html. Acesso em 01 set 2012.

Page 31: Desenvolvimento de Software com Segurança

30

7 APÊNDICES

7.1 Check-list elaborado para desenvolvimento seguro

N° ITEM

1Entradas de dados são validadas antes de serem submetidas em comandos SQL (se

possível, feito através de uma API)?

2Foram utilizados marcadores de posições ao invés de concatenações diretas no

comando SQL?

3

Os dados de entrada são validados de acordo com o que se esperava receber, por

exemplo, números, datas, etc. tanto na camada de apresentação quanto na de

aplicação?

4Foi realizado um controle de sessão, como tempo para expirar, fechar sessão

sempre que o usuário fechar o navegador (se possível por meio de uma API)?

5Rotinas que necessitam de autenticação tiveram alguma validação para obrigar o

usuário a inserir senhas fortes (difíceis de serem quebradas)?

6Foram utilizados somente objetos indiretos ao invés de referenciar diretamente

objetos internos (diretórios arquivos de configurações, etc.)?

7Objetos, mesmo que referenciados indiretamente, possuem controle de acesso

implementado?

8Está sendo utilizado um número randômico gerado na sessão (token), e verificado

em cada requisição?

9O número randômico utilizado para segurança das requisições está sendo guardado

em um campo invisível, ao invés de ser utilizado como parâmetro na URL?

Page 32: Desenvolvimento de Software com Segurança

31

10

Após a finalização da versão foi verificado se foi disponibilizado algum patche de

correção de eventuais vulnerabilidades em alguma tecnologia utilizada, que possa

comprometer o sistema (em caso positivo, também deverá ser corrigida)?

11

Caso tenha sido alterada alguma configuração em qualquer das tecnologias

utilizadas (servidor, framework, etc.), esta configuração foi adicionada ao padrão,

para ser utilizado em futuras implantações ou atualizações?

12Foi utilizado um filtro para que todas as requisições passem por ele verificando as

permissões do usuário (se possível utilizar uma API para isso)?

13 Dados sensíveis, como senhas, estão sendo armazenados criptografados?

14No tráfego de dados importantes, como dados de cartões de crédito, está sendo

utilizada a criptografia?