Upload
bruno-tatsumi
View
44
Download
3
Embed Size (px)
DESCRIPTION
Monografia sobre Boas Práticas para o Desenvolvimento de Softwares com Segurança
Citation preview
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
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
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
DEDICATÓRIA
Dedico este trabalho a minha família, principalmente aos
meus pais Nobuo e Marisete, minha noiva Carolina e minha
filha Gabriela.
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.
“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
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.
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.
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
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
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
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.
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.
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).
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.
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.
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;
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.
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
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.
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;
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;
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.
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
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.
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.
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
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.
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.
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.
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?
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?