Modelo de Monografia do CEGSIC 2009/2011

Transcrição

Modelo de Monografia do CEGSIC 2009/2011
Instituto de Ciências Exatas
Departamento de Ciência da Computação
Curso de Especialização em Gestão da Segurança da Informação e
Comunicações
MARCOS PONTES DA SILVA
Java EE e a Segurança Cibernética atuando nos aplicativos web
Segurança em aplicações web
Brasília
2011
Marcos Pontes da Silva
Java EE e a Segurança Cibernética atuando nos aplicativos web
Segurança em aplicações web
Brasília
2011
Marcos Pontes da Silva
Java EE e a Segurança Cibernética atuando nos aplicativos web
Segurança em aplicações web
Monografia apresentada ao Departamento
de
Ciência
da
Computação
da
Universidade de Brasília como requisito
parcial para a obtenção do título de
Especialista em Ciência da Computação:
Gestão da Segurança da Informação e
Comunicações.
Orientadora: Prof.ª Dr.ª Genaína Nunes Rodrigues
Universidade de Brasília
Instituto de Ciências Exatas
Departamento de Ciência da Computação
Brasília
Novembro de 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 da Segurança da Informação e Comunicações - CEGSIC
2009/2011.
© 2011 Marcos Pontes da Silva. Qualquer parte desta publicação pode
ser reproduzida, desde que citada a fonte.
Silva, Marcos Pontes da
Java EE e a Segurança Cibernética atuando nos aplicativos web:
Segurança em aplicações web / Marcos Pontes da Silva. – Brasília: O
autor, 2011. 87 p.; Ilustrado; 25 cm.
Monografia (especialização) – Universidade de Brasília. Instituto de
Ciências Exatas. Departamento de Ciência da Computação, 2011.
Inclui Bibliografia.
1. Controle de acesso. 2. Código seguro 3. Vulnerabilidades.
I. Título.
CDU 004.056
Errata
Dedicatória
Dedico esta monografia ao Deus único e verdadeiro, criador do céu, da terra e
do mar, e de tudo que existe no universo; o qual é a fonte de toda ciência e
sabedoria.
Dedico também a minha esposa Magali e minhas filhas Mônica e Maiara.
Agradecimentos
Agradeço ao Deus único e verdadeiro, a minha esposa Magali e minhas filhas
Mônica e Maiara, a toda coordenação do CEGSIC-2009/2011, a minha orientadora
Prof.ª Dr.ª Genaína Nunes Rodrigues, ao Prof. Dr. Jorge Henrique Cabral
Fernandes, e a todos os funcionários da reitoria da universidade “Z” que cooperaram
de algum modo comigo.
Quem semeia entre lágrimas,
colherá com alegria.
Salmo 126, verso 5, Bíblia Sagrada.
Se alguém precisar de sabedoria, peça a Deus,
ele dá a todos liberalmente.
Epístola de S. Tiago 1, verso 5, Bíblia Sagrada.
O temor do Senhor é o princípio da sabedoria,
e a ciência do Santo a prudência.
Provérbios 9, verso 10, Bíblia Sagrada
Crê no Senhor Jesus Cristo,
e serás salvo, tu e a tua casa.
Atos dos Apóstolos 16, verso 31, Bíblia Sagrada
Lista de Figuras
Figura 1: API da plataforma Java EE 5 nos contêineres (ORACLE, 2011) ............... 27
Figura 2: Relações entre os contêineres Java EE 6 (ORACLE, 2011) ..................... 27
Figura 3: Arquitetura modelo 2 - MVC (KURNIAWAN, 2004) ................................... 29
Figura 4: Código escondido não protege (GUERRA, 2008) ..................................... 31
Figura 5: Código do EJB sem proteção (GUERRA, 2008) ....................................... 32
Figura 6: Código com proteção só na fachada (GUERRA, 2008) ............................. 33
Figura 7: Códigos que fazem muita coisa sem proteção (GUERRA, 2008) .............. 33
Figura 8: Código servlet AJAX sem proteção (GUERRA, 2008) ............................... 34
Figura 9: Código de autenticação com servidor de aplicações (GUERRA, 2008)..... 35
Figura 10: Código com dados sem proteção (GUERRA, 2008) ................................ 36
Figura 11: Vulnerabilidades. Fonte: (OSVDB, 2010) ................................................ 38
Figura 12: Ataque ao sítio da UFRJ (ALMEIDA, 2011) ............................................. 69
Figura 13: Código do parâmetro visível na URL - 1 (SILVA, 2011)........................... 71
Figura 14: Código do parâmetro visível na URL - 2 (SILVA, 2011)........................... 71
Figura 15: Visões do CLASP. Adaptado de OWASP(2010). ................................... 83
Figura 16: Mapa conceitual do software com código seguro (SILVA, 2011) ............. 84
Lista de Tabelas
Tabela 1 – Plano de Coleta de Dados. ..................................................................... 47
Tabela 2 – Pesquisa Sobre Segurança no Desenvolvimento de Software ............... 48
Tabela 3 – Sumário das Entrevistas Realizadas ...................................................... 49
Tabela 4 – Relação: Coleta de Dados X Apêndices ................................................. 50
Tabela 5 – Variáveis X Nível de Segurança ............................................................. 54
Sumário
Errata ......................................................................................................................... 3
Dedicatória ................................................................................................................. 5
Agradecimentos ......................................................................................................... 6
Lista de Figuras ......................................................................................................... 8
Lista de Tabelas ......................................................................................................... 9
Sumário ................................................................................................................... 10
Resumo ................................................................................................................... 14
Abstract.................................................................................................................... 15
1 Delimitação do Problema ...................................................................................... 16
1.1 Introdução ...................................................................................................... 16
1.1.1 Norma ...................................................................................................... 17
1.1.2 Institutos de Segurança............................................................................ 17
1.1.3 Metodologia de Desenvolvimento Seguro ................................................ 18
1.1.4 Plataforma do Java Edição Empresarial ................................................... 18
1.2 Citações ......................................................................................................... 18
1.3 Formulação da Situação Problema ................................................................. 19
1.4 Objetivos e Escopo ......................................................................................... 19
1.4.1 Objetivo Geral .......................................................................................... 21
1.4.2 Objetivos Específicos ............................................................................... 21
1.4.3 Escopo ..................................................................................................... 21
1.5 Justificativa ..................................................................................................... 21
1.6 Hipótese ......................................................................................................... 22
1.7 Organização do Trabalho ............................................................................... 22
2 Revisão de Literatura e Fundamentos................................................................... 23
2.1 Referencial Teórico......................................................................................... 25
2.1.1 Contêineres ou API .................................................................................. 26
2.1.2 Algumas Possibilidades de Risco no Controle de Acesso ........................ 30
2.2 Referenciais Conceituais das Disciplinas do CEGSIC .................................... 37
2.3 Referenciais Produzidos Pelos Próprios Cursistas ......................................... 38
2.3.1 Autenticação e Autorização em Aplicativos Web ...................................... 38
2.4 Argumentos do Pesquisador ........................................................................... 40
3 Metodologia .......................................................................................................... 42
3.1 Tipo de Pesquisa ............................................................................................ 42
3.2 Plano da Pesquisa .......................................................................................... 43
3.2.1 Pesquisa Bibliográfica .............................................................................. 43
3.2.2 Preparo do Questionário .......................................................................... 44
3.2.3 Coleta de Dados ...................................................................................... 44
3.2.4 Documentação e Estruturação dos Resultados ........................................ 45
3.2.5 Validação e Análise dos Resultados ........................................................ 45
4 Resultados ............................................................................................................ 46
4.1 Setor de Desenvolvimento de Aplicações ....................................................... 46
4.2 A Pesquisa ..................................................................................................... 47
5 Discussão ............................................................................................................. 51
5.1 Sugestão de Melhorias ................................................................................... 52
5.2 Validade da Construção ................................................................................. 53
5.3 Validade Interna ............................................................................................. 55
5.4 Validade Externa ............................................................................................ 56
6 Conclusões e Trabalhos Futuros ........................................................................... 57
6.1 Conclusões ..................................................................................................... 57
6.2 Trabalhos Futuros .......................................................................................... 58
Referências e Fontes Consultadas .......................................................................... 60
Glossário .................................................................................................................. 64
A ........................................................................................................................... 64
B ........................................................................................................................... 64
C .......................................................................................................................... 64
D .......................................................................................................................... 64
H .......................................................................................................................... 64
I ............................................................................................................................ 64
J ........................................................................................................................... 64
M .......................................................................................................................... 65
N .......................................................................................................................... 65
O .......................................................................................................................... 65
R .......................................................................................................................... 65
S ........................................................................................................................... 65
T ........................................................................................................................... 65
U .......................................................................................................................... 65
W .......................................................................................................................... 65
X ........................................................................................................................... 65
Apêndice A – Ataque de Hackers............................................................................. 66
A.1 Hackers vazam informações de funcionários do Exército Brasileiro ............... 66
A.2 Polícia Federal investiga ataques de hackers na internet ............................... 67
A.3 Hackers atacaram as páginas de 105 sítios da web na UFRJ ........................ 69
Apêndice B – Exemplo de URL com Código Visível ................................................. 71
Apêndice C – Controle de Acesso em Aplicações Java EE...................................... 72
Apêndice D – Demonstração de Alguns Tipos de Ataques em Código Java EE ...... 78
Apêndice E – Processo de Desenvolvimento Seguro CLASP .................................. 82
Apêndice F – Mapa Conceitual: Desenvolvimento do Software com Código Seguro84
Apêndice G – Código-fonte de Uma Aplicação Web Sem Código Seguro ............... 85
Resumo
Com o desenvolvimento de novas tecnologias, ocorre também o crescimento
constante de vulnerabilidades e ameaças aos sistemas de informação e
comunicação. Temos então o desafio no desenvolvimento de aplicações de software
seguro para a internet, também, conhecido como web. Tal desafio pode ser ilustrado
pelo fato dos institutos existentes na internet, tais como OWASP Top 10 (OWASP,
2011) e SANS (2009), que divulgam constantemente sobre ataques contra
vulnerabilidades em aplicações web. Segundo o SANS (2009), os ataques
ultrapassam mais de 60% do total de tentativas observadas na internet. A
informação é um ativo importante e valioso para os negócios da organização.
Portanto, há a necessidade de proteger esse ativo de forma a garantir sua
confidencialidade, integridade e disponibilidade. Neste sentido, a primeira ação que
deve ser tomada em segurança da informação é estabelecer políticas e
procedimentos sobre como proteger a informação. Os fatos acima mencionados
motivaram essa pesquisa por meio de um estudo de caso no âmbito da APF,
abordando vulnerabilidades em aplicações Java EE.
Abstract
With the development of new technologies, there is also the growing number
of vulnerabilities and threats to information systems and communications. As a result,
we have the challenge in developing secure software applications, particularly for the
Internet, also known as the web. Such a challenge can be illustrated by the fact that
the existing institutions on the Internet, such as the OWASP Top 10 (OWASP, 2011)
and SANS (2009), show constant attacks on vulnerabilities in web applications.
According to the SANS (2009), the attacks exceeded more than 60% of all observed
attempts on the Internet. Information is an important and valuable asset to the
organization's business. Therefore, there is the need to protect this asset in order to
ensure its confidentiality, integrity and availability. In this sense, the first action to be
taken into information security is to establish policies and procedures to protect
information. The above facts motivated this research through a case study in the
Federal Public Administration (FPA), addressing vulnerabilities in Java Enterprise
Edition applications.
16
1 Delimitação do Problema
1.1 Introdução
O tema principal deste trabalho é “Java EE e a Segurança Cibernética
atuando nos aplicativos web”. A importância deste tema está no fato de haver
ocorrido um aumento de ataques aos sistemas aplicativos web das organizações
públicas e privadas. A problemática são os ataques aos aplicativos web, onde a
maior ocorrência são os ataques de “Injeção de SQL” e “XSS – Cross-Site Scripting”.
Logo, como se desenvolve aplicativos web seguros na plataforma Java EE?
A segurança da informação atua por meio de ações relacionadas à proteção
das informações manipuladas por sistemas de informação. Segundo Dias (2000), os
objetivos da Segurança da Informação envolvem, sobretudo, a manutenção da
confidencialidade, da disponibilidade e da integridade das informações, variando de
acordo com a natureza do sistema e com o nível de impacto que uma falha de
segurança possa apresentar.
Muitos especialistas ainda pensam que ao aplicar criptografia para proteger a
integridade dos dados em um software, o mesmo torna-se seguro. Na verdade, esse
software ao aplicar apenas uma das características de segurança, não pode, de fato,
ser considerado seguro. A segurança de software não pode ser confundida com
software seguro, isto é, apresentar características de segurança no software não
garante que o mesmo seja seguro (MCGRAW, 2004).
É mais barato construir software seguro do que corrigir problemas de
segurança após a entrega do software como produto final, e sem mencionar os
custos consequentes da falha de segurança (OWASP, 2010).
Neste trabalho de monografia, com base em quatro recursos com aspectos
diferentes, que estão relacionados com a Segurança da Informação e Comunicação,
acredita-se que operando os mesmos em conjunto, promoverá a mitigação de riscos
e vulnerabilidades nos aplicativos web. São eles: NORMA ABNT NBR ISO/IEC
17
27002:2005, institutos de segurança, metodologia de desenvolvimento seguro, e a
plataforma Java EE.
1.1.1 Norma
A Seção 12 da NORMA ABNT NBR ISO/IEC 27002:2005, referente à
segurança na aquisição, desenvolvimento e manutenção de Sistemas de
Informação, enfatiza as características e desafios gerais que se aplicam ao
desenvolvimento de aplicações de software para o ambiente internet/web. Segundo
tal norma, todos os requisitos de segurança devem ser identificados na fase de
levantamento de requisitos do projeto. Deve-se garantir que os requisitos de
segurança sejam identificados e acordados antes da aplicação no projeto.
1.1.2 Institutos de Segurança
Estes são alguns dos institutos de segurança de renome internacional, que
contribuem grandemente para a mitigação de vulnerabilidades: SANS e OWASP.
Segundo o SANS (SysAdmin, Audit, NetWork, Security) Institute (SANS,
2009) em seu documento The Top Cyber Security Risks: “Ataques contra
[vulnerabilidades de] aplicações web constituem mais de 60% do total das tentativas
observadas na Internet. Essas vulnerabilidades estão sendo amplamente exploradas
para converter web sites confiáveis em web sites maliciosos, que fornecem conteúdo
explorável no lado do cliente e vulnerabilidades em aplicações web...”.
Na lista da OWASP Top 10 – 2010 (OWASP, 2011), contém a relação dos
“dez maiores riscos críticos em segurança de aplicações web”, onde estão
relacionados riscos tais como:
1. Injection (injeção de código SQL);
2. XSS - Cross-Site Scripting (execução de código script no navegador da
vítima);
3. Broken Authentication and Session Management (Falha na Autenticação e
no Gerenciamento de Sessão);
4. Insecure Direct Object References (Referência insegura direta a objetos);
5. CSRF - Cross-Site Request Forgery (Força o envio de uma requisição préautenticada a um servidor web vulnerável);
6. Security Misconfiguration (configuração incorreta de segurança);
7. Insecure Cryptographic Storage (Armazenamento criptográfico inseguro);
8. Failure to Restrict URL Access (Falha na Restrição de Acesso à URL);
18
9. Insuficient Transport Layer Protection (Proteção da camada de transporte
insuficiente);
10. Unvalidated
Redirects
and
Forwards
(Redirecionamentos
e
encaminhamentos não validados).
1.1.3 Metodologia de Desenvolvimento Seguro
A utilização de um modelo de processo para desenvolvimento de aplicativos
de software seguro é um pré-requisito, a fim de minimizar riscos e vulnerabilidades.
Um modelo de processo de desenvolvimento de software seguro bastante
conhecido é o CLASP (Comprehensive, Lightweight Application Security Process)
(OWASP, 2011), que é um conjunto de componentes de processo dirigido por
atividade e baseado em regras, as quais articulam práticas para construção de
software seguro, permitindo o ciclo de vida de desenvolvimento do software de
maneira estruturada, com repetição e mensuração, especificado pela OWASP (Open
web Application Security Project), um instituto mundial sem fins lucrativos (OWASP,
2011). Temos uma demonstração resumida do processo CLASP no apêndice “E”.
1.1.4 Plataforma do Java Edição Empresarial
A plataforma do Java EE, “Java Platform Enterprise Edition” (ORACLE, 2011)
hoje se encontra na versão 6, é um padrão para o desenvolvimento de aplicações
web. É uma tecnologia que torna possível projetar, desenvolver, empacotar e
implantar aplicações empresariais baseadas em componentes. A plataforma oferece
um modelo multicamada distribuída, com a possibilidade de reutilização de
componentes, transferência de dados feita em XML, um modelo de segurança
unificado e um flexível controle transacional.
O fato de ser uma especificação aberta possibilita que aplicações sejam
desenvolvidas sem vínculo com nenhum fornecedor específico. Portanto, pode-se
criar um único arquivo para toda uma aplicação. Ao implantá-lo em um application
server (servidor de aplicações), este se encarrega de desempacotá-lo e instanciar
um aplicativo web e as entidades de sua aplicação.
1.2 Citações
Uma definição de software seguro:
19
“Um software seguro é um software livre de vulnerabilidades,
que funciona da maneira pretendida e que essa maneira
pretendida não compromete a segurança de outras
propriedades requeridas do software, seu ambiente e as
informações manipuladas por ele (DHS, 2006).”
1.3 Formulação da Situação Problema
Neste contexto, temos como situação problema o controle de acesso, o qual é
um fator extremamente importante para a segurança de aplicações corporativas,
pois caso não seja desenvolvido corretamente, a confidencialidade e a integridade
das informações podem ser comprometidas.
Essas são algumas das perguntas que fazem parte da situação problema:
1. Como o Java EE e a Segurança Cibernética podem atuar nos aplicativos
web para mitigar vulnerabilidades?
2. Como codificar com segurança o controle de acesso?
3. Como os institutos de segurança poderão contribuir com o controle de
acesso?
4. Como prevenir para que os dados não sejam acessados indevidamente?
Hoje, segundo Guerra (2008), várias aplicações ainda possuem problemas no
emprego do controle de acesso, deixando a aplicação vulnerável a ataques. Para
explorar e entender esse problema na prática fez-se um levantamento da situação
atual na Gestão de Segurança da Informação e Comunicação na universidade
pública Z, com foco no nível de segurança no desenvolvimento de aplicações, o
objetivo é obter um mapeamento correto na reitoria da Universidade Z, mais
especificamente no setor de desenvolvimento de software da administração central
(InfoTIC).
O Governo Federal têm determinado que todos os órgãos públicos utilizem o
software livre. Por ser uma plataforma livre e gratuita, de notoriedade mundial, a
InfoTIC adotou o Java EE como uma das ferramentas para a produção de software
web e corporativo.
1.4 Objetivos e Escopo
Temos o objetivo de estudar algumas das diversas causas da falta de
segurança nas aplicações web, e procurar alertar a todos os funcionários
desenvolvedores de aplicações, sejam aplicações desktop ou para a web, da
20
existência de informações e técnicas para mitigar vulnerabilidades no software,
fornecidas pelos institutos de segurança, os quais devem ser inseridos na
codificação do software aplicativo.
A verificação continuada dos institutos de segurança na web tais como
OSVDB (Open Source Vulnerability Database), OWASP Top 10 - 2010 (OWASP,
2010), etc., divulgam constantemente uma lista de vulnerabilidades que ocorrem
com
maior
frequência,
auxiliando
dessa
forma,
a
prevenção
contra
as
vulnerabilidades dos softwares.
Ao desenvolver sistemas para atender o mais rápido possível às
necessidades dos usuários, as funcionalidades de segurança geralmente não são
priorizadas. Os usuários do sistema corporativo não têm uma percepção real da
segurança do sistema e, normalmente, só descobrirão a existência de uma falha
quando for tarde demais (GUERRA, 2008).
Esse problema começa cedo no ciclo de desenvolvimento, pela má
especificação dos requisitos de segurança. Porém, existem também os casos de
mau uso, em que se especifica como o sistema deve responder na tentativa de usos
não legítimos com intenções maliciosas (GUERRA, 2008).
A segurança é ignorada na fase de testes, devido ao fato dos profissionais
não estarem informados sobre as vulnerabilidades existentes, a fim de que
verifiquem se os requisitos de segurança foram desenvolvidos corretamente
(GUERRA, 2008).
Devido à frequência de ataques contra as aplicações terem se tornado
comum (veja anexo A), tais como, indisponibilidade, perda de integridade, perda de
confidencialidade, etc., resolveu-se estudar a utilização em conjunto de quatro
recursos para produção de um software seguro, como segue:
a. A plataforma de programação “Java EE”;
b. Um modelo de processo para desenvolvimento seguro de aplicativos
de software;
c. Aplicar as informações e técnicas para mitigar vulnerabilidades, que
estão disponíveis nos institutos de segurança;
d. NORMA ABNT NBR ISO/IEC 27002:2005, Seção 12.
Avalia-se a possibilidade de que a união de tais recursos, conforme o
apêndice “F” (vide Figura 16), proporcionarem um desenvolvimento de aplicativo
web seguro com codificação segura.
21
1.4.1 Objetivo Geral
Realizar um estudo de caso para avaliar requisitos de segurança em sistemas
web no setor de desenvolvimento da reitoria (InfoTIC) na universidade Z1.
1.4.2 Objetivos Específicos
São objetivos específicos deste estudo de caso (YIN, 2005):
1. Mostrar os principais erros cometidos no emprego do controle de acesso
em plataformas Java EE, que podem comprometer a confidencialidade e a
integridade das informações acessadas pela aplicação.
2. Abordar algumas formas de se criar uma solução para o controle de
acesso.
3. Mostrar como inserir código seguro em aplicação web, mas também
discutir a aplicabilidade e limitações dos modelos de controle de acesso
em aplicações Java EE.
1.4.3 Escopo
O estudo de caso está limitado ao setor de desenvolvimento e manutenção de
softwares aplicativos da reitoria da Universidade Z, composta por algumas equipes
de analistas de tecnologia da informação, os quais tem a missão de desenvolver
novos aplicativos web, para substituir alguns dos aplicativos legados. Tal
substituição decorre do fato de que esses aplicativos tornaram-se obsoletos, e
conforme os casos terão suas bases de dados migradas para uma base mais atual.
1.5 Justificativa
A escolha do tema da pesquisa se deve aos incidentes de segurança da
informação que vêm aumentando consideravelmente ao longo dos últimos anos, e
assumem as formas mais variadas, como por exemplo acesso não autorizado,
infecção por vírus, ataques “denial of service” contra redes e sistemas, furto de
informação proprietária, invasão de sistemas, fraudes internas e externas, uso não
autorizado de redes sem fio, entre outras (veja anexo A). A Plataforma Java EE é
utilizada para o desenvolvimento de aplicações web, e está sendo adotada pela
InfoTIC como ferramenta de desenvolvimento.
1
"O nome da instituição onde foi realizada a pesquisa foi trocado por questões de segurança da
informação".
22
A viabilidade da execução da pesquisa se deve ao fato de ser um dos
membros da equipe de desenvolvimento (InfoTIC).
A importância do desenvolvimento da pesquisa será a obtenção do resultado,
o
qual
permitirá
aos
desenvolvedores
de
aplicações
web
em
Java,
o
desenvolvimento seguro com codificação segura.
Com base no que foi mencionado no subitem 1.3, será mostrado neste
trabalho, procedimentos concisos e relevantes, para que a codificação segura possa
ser feita mediante o estabelecimento de critérios e métodos para elaboração de
sistemas aplicativos com segurança da informação, na reitoria da universidade Z.
1.6 Hipótese
Falta conhecimento das equipes de desenvolvimento da InfoTIC sobre a
maneira de usar questões de segurança da plataforma Java EE, no contexto
corporativo da reitoria da Universidade Z.
1.7 Organização do Trabalho
 Capítulo 2 apresenta uma revisão de literatura e de fundamentos, onde são
tratados os principais conceitos relacionados à codificação segura dos
softwares, vulnerabilidades existentes, a escolha da plataforma Java EE
como padrão para desenvolvimento de novos aplicativos, normas existentes e
padrões disponíveis nos institutos de segurança na internet.
 Capítulo 3 apresenta a metodologia, o estudo de caso, onde obteremos as
informações com capacidade de adicionar valor a processos, produtos e
serviços, que serão avaliados.
 Capítulo 4 apresenta os resultados da pesquisa realizada por meio do estudo
de caso.
 Capítulo 5 apresenta uma discussão em torno da segurança da Informação e
dos resultados obtidos no estudo de caso.
 Capítulo 6 apresenta as conclusões, contribuição e trabalhos futuros, onde
são mencionados os resultados da análise, as limitações e o público alvo da
pesquisa. Também são sugeridos os trabalhos futuros.
23
2 Revisão de Literatura e Fundamentos
O nome web vem do termo world wide web (www) que representa um sistema
de informações mundial distribuído, no qual as informações são "ligadas" umas às
outras por links de hipertexto. Desenvolvimentos mais recentes desta tecnologia têm
permitido distribuir, junto com as informações, objetos e programas que realizam
atividades junto ao cliente consumidor da informação. Os servidores estão ganhando
novas capacidades que os tem permitido também executar programas, acessar
bancos de dados corporativos e se comunicar com outros objetos da rede. O
desenvolvimento de aplicações seguras no ambiente web, é o que está sendo
tratado neste trabalho.
Para construir software seguro é necessário o conhecimento básico dos
princípios de segurança. Em virtude das limitações cronológicas, e dado o grande
volume de informações sobre o assunto, os conceitos de segurança serão
abordados de forma superficial, porém abrangente neste trabalho.
O objetivo da segurança em aplicações é manter a confidencialidade,
integridade e disponibilidade dos recursos de informação, a fim de permitir que as
operações de negócios sejam bem sucedidas. Esse objetivo é alcançado por meio
do emprego de controles de segurança.
São propriedades de um software seguro (Braz, 2008; DHS, 2006):
• Disponibilidade: o software deve estar sempre operacional e acessível para
os usuários autorizados sempre que necessário.
• Integridade: o software deve estar sempre protegido contra modificações
não autorizadas.
• Confidencialidade: no contexto da segurança do software, confidencialidade
se aplica para o próprio software e para os dados que ele manipula.
24
Duas propriedades adicionais associada aos usuários humanos podem ser
requeridas para as entidades de software que agem como usuário, como agentes
proxies e web services (DHS 2006):
• Responsabilização: toda ação relevante de segurança de um “softwarecomo-usuário”
deve
ser
registrada
e
acompanhada,
com
atribuição
de
responsabilidade. Este acompanhamento deve ser possível durante e depois dos
registros das ações que ocorrem.
• Não repúdio: a habilidade de prevenir o software-como-usuário de negar
responsabilidade sobre ações desempenhadas.
Existe uma diferença fundamental entre a abordagem adotada por uma
equipe de desenvolvimento e a abordagem que é adotada por alguém que está
interessado em atacar uma aplicação (OWASP, 2010). Uma equipe de
desenvolvimento, normalmente, desenvolve uma aplicação com base naquilo que
ela pretende fazer. Isso significa criar uma aplicação para executar tarefas
específicas baseadas em requisitos funcionais e casos de uso documentados.
Por outro lado, um hacker está mais interessado no que a aplicação pode ser
levada a fazer, e partem do princípio de que "qualquer ação não expressamente
proibida, é permitida". Para resolver isso, alguns elementos adicionais precisam ser
integrados nas fases iniciais do ciclo de vida do software. Estes novos elementos
são requisitos de segurança e casos de abuso (OWASP, 2010).
É importante que as equipes de desenvolvimento de aplicações web
entendam que os controles do lado cliente, como validação de entrada de dados no
cliente, campos ocultos e controles de interface (combo box, radio buttons),
fornecem pouco ou nenhum benefício de segurança (OWASP, 2010).
Um atacante pode usar ferramentas como proxies do lado do cliente, como o
OWASP WebScarab (OWASP, 2011), Burp ou ferramentas de captura de pacotes
de rede, como o Wireshark, para analisar o tráfego de aplicativo e enviar requisições
manipuladas, burlando todas as interfaces. Além disso, o Flash, os Applets Java e
demais objetos que trabalham no lado cliente podem ser compilados e analisados
em busca de falhas (OWASP, 2010).
As falhas de segurança de software podem ser introduzidas em qualquer fase
do ciclo de desenvolvimento de software, inclusive:

Não identificar as necessidades de segurança no início;

Criação de arquiteturas conceituais que possuem erros de lógica;
25

Usando práticas ruins de codificação que introduzem vulnerabilidades
técnicas;

Implantação do software de modo inapropriado;

Inserção de falhas durante a manutenção ou atualização.
Além disso, é importante entender que as vulnerabilidades de software podem
ter um escopo muito além do próprio software. Dependendo da natureza do
software, da vulnerabilidade e da infraestrutura de apoio, os impactos de uma
exploração bem sucedida podem comprometer qualquer ou todos os seguintes
aspectos:

O software e sua informação associada;

O sistema operacional dos servidores associados;

O banco de dados de backend;

Outras aplicações em um ambiente compartilhado;

O sistema do usuário;

Outros softwares que o usuário interage.
2.1 Referencial Teórico
Java EE (Java Edição Empresarial) é uma plataforma de programação para
servidores na linguagem de programação Java (ORACLE, 2011). Difere-se da
plataforma Java Standard Edition (Java SE) pela adição de bibliotecas que fornecem
funcionalidade para desenvolver software Java distribuído, tolerante a falhas e
multicamada, baseada amplamente em componentes modulares executando em um
servidor de aplicações.
A plataforma Java EE é considerada um padrão de desenvolvimento já que o
fornecedor de software (plugins, drivers, etc.) nesta plataforma deve seguir
determinadas regras se quiser declarar os seus produtos como compatíveis com
Java EE.
Ela contém bibliotecas desenvolvidas para o acesso a base de dados, RPC
(Remote Procedure Calls), CORBA, etc.
Conforme Wagner e Machado (2010, p. 6), o Java possui um alto nível de
segurança devido às aplicações funcionarem de forma “stand Box”, nenhuma
aplicação burla os requisitos de segurança especificados na linguagem Java, pois
elas não tem acesso diretamente ao Sistema Operacional, desta forma elas são
obrigadas a pedir que a Maquina Virtual Java aloque recursos do Sistema
26
Operacional para a aplicação, assim essas requisições da aplicação passam pelas
políticas de segurança especificadas na linguagem. No entanto, às vezes é
necessária a utilização de linguagem de baixo nível para obter acesso direto ao nível
de hardware.
Padrões de códigos, guias de segurança, normas de codificação e
orientações de segurança devem ser seguidas no intuito de evitar erros de códigofonte. Os padrões de desenvolvimento tais como:
i.
Facade que atua como uma camada mediadora entre a regra de
negócio da aplicação e a interface gráfica, permitindo que caso
regras de negócios mudem em algum determinado momento, isso
não impacte na reestruturação de toda a aplicação novamente;
ii.
Data Access Object (DAO) que permite a separação de código
destinado à manipulação de dados do banco de dados para a
aplicação, assim diminuindo a interferência da estrutura do banco
diretamente na aplicação desenvolvida.
Testes de unidade devem ser realizados com preocupações com a segurança
em mente, podendo ser utilizado o firebug para tais testes. Erros de segurança
relatados em software similares serão usados como uma referência, inclusive os
mencionados pelos institutos de segurança.
Devido a essas características a plataforma é utilizada principalmente para o
desenvolvimento de aplicações corporativas.
2.1.1 Contêineres ou API
Os contêineres ficam localizados entre os componentes e os clientes,
provendo serviços transparentes para ambos, incluindo serviços transacionais e
pooling de recursos (veja Figuras 1 e 2).
27
Figura 1: API da plataforma Java EE 5 nos contêineres (ORACLE, 2011)
Figura 2: Relações entre os contêineres Java EE 6 (ORACLE, 2011)
A plataforma Java EE contém uma série de especificações e containers, cada
uma com funcionalidades distintas:
a. JDBC (Java Database Connectivity), utilizado no acesso a bancos de
dados. A API permite chamar comandos SQL a partir de métodos na
linguagem de programação Java. A API JDBC pode ser usada em um
enterprise bean quando se tem um bean de sessão de acesso a banco de
dados. Também pode ser usada a partir de um servlet ou uma página
JSP para acessar o banco de dados diretamente, sem passar por um
28
enterprise bean. A API JDBC tem duas partes: uma interface em nível de
aplicativo utilizado pelos componentes de aplicativo para acessar um
banco de dados, e uma interface de provedor de serviços para anexar um
driver JDBC para a plataforma Java EE.
b. Servlets são utilizados para o desenvolvimento de aplicações · web com
conteúdo dinâmico. Ele contém uma API que abstrai e disponibiliza os
recursos do servidor · web de maneira simplificada para o programador. A
classe servlet estende as capacidades dos servidores que hospedam
aplicativos que são acessados por meio de um modelo de programação
de solicitação-resposta.
c. JSP (JavaServer Pages), uma especialização do servlet que permite que
conteúdo dinâmico seja facilmente desenvolvido. Uma página JSP é um
documento baseado em texto que contém dois tipos de texto: dados
estáticos (que podem ser expressos em qualquer formato baseado em
texto, como HTML, WML e XML) e elementos JSP, que determinam como
a página constrói o conteúdo dinâmico.
d. JTA (Java Transaction API) é uma API que padroniza o tratamento de
transações dentro de uma aplicação Java.
e. EJB
(Enterprise
JavaBeans),
utilizado
no
desenvolvimento
de
componentes de software. Eles permitem que o programador se
concentre nas necessidades do negócio do cliente, enquanto questões de
infraestrutura,
segurança,
disponibilidade
e
escalabilidade
são
responsabilidades do servidor de aplicações.
f. JPA (Java Persistence API) é uma API que padroniza o acesso a banco
de dados através de mapeamento Objeto/Relacional dos Enterprise
JavaBeans. Se o cliente termina, ou se o servidor é desligado, o
gerenciador de persistência garante que os dados da entidade sejam
salvos.
g. JSF (JavaServer Faces) é um framework do Java EE, que contém um
conjunto de componentes pré-fabricados de interface de usuário (IU) para
web, possuindo um modelo de programação orientado a eventos.
h. JMA (JavaMail API) envia notificações de e-mail. A API JavaMail tem
duas partes: uma interface em nível de aplicativo utilizado pelos
componentes de aplicativo para enviar e-mail, e uma interface de
29
provedor de serviços. A plataforma Java EE inclui JavaMail com um
prestador de serviço que permite que os componentes do aplicativo
enviem e-mail para a internet.
i. JNDI
(Java
Naming
and
Directory
Interface)
fornece
nomes
e
funcionalidade de diretório, permitindo que os aplicativos acessem vários
nomes e serviços de diretório, incluindo nomes existentes e serviços de
diretório como o LDAP, NDS, DNS e NIS. Ele fornece aplicativos com
métodos para executar operações de diretório padrão, como associar
atributos de objetos e busca de objetos usando seus atributos. Usando
JNDI, uma aplicação Java EE pode armazenar e recuperar qualquer tipo
de objeto Java, permitindo as aplicações Java EE coexistirem com muitas
aplicações legadas e sistemas.
Um aplicativo Java web pode ser projetado no modelo 1 ou modelo 2. O
modelo 1 é para aplicativos muito pequenos, que não irão crescer em complexidade
e consistem apenas em páginas JSP. Cada página JSP referencia outra página JSP,
tornando a manutenção muito difícil à medida que o aplicativo cresce.
A arquitetura no modelo 2 é o modelo de projeto recomendado para
aplicativos de tamanhos médios e grandes, e é baseado no padrão controlador de
visualização do modelo (Model View Controller, MVC). Uma arquitetura do modelo 2
(veja Figura 3) é indicada pela presença de um servlet controlador entre o browser
do cliente e as páginas JSP (ou servlets que apresentam o conteúdo).
Figura 3: Arquitetura modelo 2 - MVC (KURNIAWAN, 2004)
30
Aplicativos modelo 2 são mais flexíveis e fáceis de manter e de estender,
porque
as
visualizações
não
referenciam
umas
às
outras
diretamente
(KURNIAWAN, 2004). O servlet controlador modelo 2 fornece um ponto único de
controle para segurança e registro (logging) e, frequentemente, encapsulam dados
que chega a um formulário usável pelo back-end modelo MVC.
Conforme Stair e Reynolds (2006), um software pode ser classificado em dois
tipos principais: software de sistema, que controlam as operações básicas de um
computador (sistema operacional, dentre outros); e software de aplicação para fins
específicos, como, por exemplo, o que realiza o controle financeiro de uma empresa
específica. O software de aplicação pode ser chamado simplesmente de aplicação
ou aplicativo e é o foco deste trabalho.
Conforme destaca Fernandes (2010), um software de aplicação, em geral, é
parte de um sistema automatizado, e serve para automatizar um processo
organizacional. Um software de sistema, por outro lado, automatiza um processo
computacional que usualmente não teria viabilidade de ser executado por um ser
humano, por exemplo, o processamento de pacotes do IP (Internet Protocol) em um
dispositivo de redes de computadores.
2.1.2 Algumas Possibilidades de Risco no Controle de Acesso
a. Risco 1 – Código Escondido Não Garante a Proteção
Alguns desenvolvedores acreditam que se numa aplicação web, ocultarem
alguns elementos da interface, tais como botões, campos de texto, links, etc., de
forma tal que somente o administrador do aplicativo terá acesso a esses
componentes, isso trás segurança ao mesmo (GUERRA, 2008). Apesar do botão
não ser exibido para outro usuário, nada impede que o mesmo acesse a URL e
execute uma ação sem permissão, tal como a alteração de um parâmetro que
identifica o usuário numa consulta do aplicativo (veja Figura 4).
31
Figura 4: Código escondido não protege (GUERRA, 2008)
Temos um exemplo no apêndice “B” (veja Figuras 13 e 14), nas quais o
usuário acessa a URL deixada por outro usuário que fez compra anteriormente num
sítio de comércio eletrônico, a qual fica cacheada no navegador, e modifica o código
uma ou mais vezes, para saber quais informações constam dos outros clientes.
Portanto, isso não basta para garantir a segurança de acesso, é necessário
também uma verificação junto ao servidor de sistemas web, se o usuário tem
autorização para acessar essas informações.
b. Risco 2 – Código do EJB Sem Proteção
Nas aplicações, o controle de acesso é tratado como uma característica
funcional, de forma em que as funcionalidades que não são permitidas não estejam
disponíveis no menu, e as tentativas inválidas de acesso sejam broqueadas, seria o
suficiente (GUERRA, 2008).
Porém, a segurança é uma característica não funcional e precisa ser
considerada durante toda a arquitetura do sistema aplicativo a ser desenvolvido.
Qualquer ponto de entrada possível deve ser considerado (veja Figura 5).
32
Figura 5: Código do EJB sem proteção (GUERRA, 2008)
Não se deve deixar toda a segurança na camada web, pois os EJB são
disponibilizados remotamente e podem ser acessados. Os EJB devem disponibilizar
somente interfaces locais, para não serem acessados remotamente. Se o acesso
remoto for necessário, as regras de controle de acesso devem ser movidas ou
replicadas para a camada EJB. Todo software aplicativo deve ter sua camada de
proteção, independentemente de haver outra na rede. A junção da camada de
proteção da rede e dos aplicativos ajuda a diminuir as vulnerabilidades (GUERRA,
2008).
c. Risco 3 – Código Com Proteção Só na Fachada
Essa vulnerabilidade é semelhante com a anterior (GUERRA, 2008), porém
ao invés de colocar o controle de acesso na camada web, o mesmo foi colocado na
fachada. Porém, algumas aplicações deixam o EJB protegido pela fachada sem
configurações de segurança e abertos para acesso remoto. Dessa forma, alguém
não autorizado pode acessar EJB contendo regras de negócio sem ter as
credenciais para isso (veja Figura 6).
33
Figura 6: Código com proteção só na fachada (GUERRA, 2008)
Tanto o acesso a EJB com interface remota, serviços web e mensagens JMS,
devem ter na porta de entrada da aplicação, mesmo quando não seja utilizada, a
obrigação do usuário ser autenticado e verificado se possui autorização para o
acesso.
d. Risco 4 – Códigos Que Fazem Muita Coisa Sem Proteção
Isso ocorre (GUERRA, 2008), quando numa aplicação web existe um servlet
que pode realizar várias ações, sendo que as ações são determinadas por um
parâmetro. Nas aplicações EJB, juntamente com o uso do padrão de projeto
Command, onde o EJB recebe um comando como parâmetro para ser executado
(veja Figura 7).
Figura 7: Códigos que fazem muita coisa sem proteção (GUERRA, 2008)
34
Esse risco acontece quando o controle de acesso controla apenas a
execução do servlet ou método, independentemente do que será executado nele. No
EJB, se o usuário executar algum comando utilizando o método, então ele pode
executar qualquer comando. Isso acontece por que a permissão é dada para
execução do método, independente de qual comando é enviado (GUERRA, 2008).
Se numa aplicação web, um mesmo servlet realiza todas as operações CRUD
(Create, Read, Update, Delete) de uma determinada entidade, baseada em um
parâmetro enviado chamado “action”. Se o usuário deve possuir acesso apenas à
leitura enviando “action=read”, ele pode enviar “action=delete” para a exclusão de
um registro, pois o controle de acesso é feito apenas ao servlet e não considera o
parâmetro “action” recebido. Assim, quem acessa um, tem acesso a todos
(GUERRA, 2008).
e. Risco 5 – Código Servlet AJAX Sem Proteção
O AJAX deixa as aplicações mais interativas (GUERRA, 2008), mas deixa
brecha na segurança. Esse risco acontece quando o controle de acesso é aplicado
apenas para os servlets da aplicação e as funcionalidades do AJAX ficam de fora.
Geralmente, os servlets AJAX nem verificam se o usuário está ou não autenticado.
Como não é acessado diretamente pelos usuários, um teste funcional não detecta
um problema como esse. Os servlets AJAX podem revelar dados relevantes para um
próximo ataque, tais como identificadores de banco de dados.
Figura 8: Código servlet AJAX sem proteção (GUERRA, 2008)
35
A solução está em criar um mecanismo que abranja os dois tipos de acesso
na camada web ou no posicionamento do mecanismo de controle na camada de
negócios (veja Figura 8).
f. Risco 6 – Código de Autenticação Com Servidor de Aplicações
Isso acontece em aplicações desktop (GUERRA, 2008), os quais acessam
servidores de aplicação, onde o controle de acesso é feito totalmente utilizando a
lógica da interface. Ao proteger-se o acesso aos EJB e não deixar aberto a qualquer
pessoa é criado um perfil relativo àquela aplicação que possui o acesso a tudo que
qualquer usuário pode precisar. Portanto, a autenticação com o servidor de
aplicações é realizada utilizando credenciais da aplicação (a aplicação se autentica)
e não de seus usuários (veja Figura 9).
Figura 9: Código de autenticação com servidor de aplicações (GUERRA, 2008)
Tendo posse da biblioteca cliente dos EJB, um atacante pode criar uma
aplicação que usa qualquer funcionalidade da forma que quiser. A senha de
autenticação da aplicação estará, provavelmente, embutida em algum componente
da aplicação ou em algum arquivo de configuração. Se o inimigo possui a aplicação,
ele acessa qualquer coisa.
A solução é implementar o controle de acesso no servidor e basear-se nas
credenciais dos usuários, tendo-se o cuidado de onde são armazenadas.
36
g. Risco 7 – Código Com Dados Sem Proteção
Um grande erro cometido no controle de acesso, é controlar as permissões
das funcionalidades e ignorar os dados que são acessados e manipulados. Isso
ocorre quando o desenvolvedor fica preso aos mecanismos de controle de acesso
fornecidos pela plataforma Java EE, cujas granularidades são métodos em EJB e
URL em aplicações web. Como exemplo, temos a seguinte regra: um vendedor só
pode acessar as vendas realizadas por ele. Fica complicado imaginar perfis de
acesso para controlá-las (GUERRA, 2008); (veja Figura 10).
Figura 10: Código com dados sem proteção (GUERRA, 2008)
Concluí-se que o controle de acesso padrão do Java EE (RBAC) não é
suficiente neste caso. Portanto, é necessário utilizar o RBAC com contextos em
situações simples e o ABAC em situações mais complexas.
É extremamente importante quando se for definir o controle de acesso em
uma aplicativo:
1. levantar os requisitos de controle de acesso e escolher o modelo mais
adequado para o caso;
2. escolha um local na arquitetura onde o componente de controle de acesso
cubra todas as entradas possíveis da aplicação.
37
2.2 Referenciais Conceituais das Disciplinas do CEGSIC
O software, conforme Holanda e Fernandes (2011, p. 10), são partes
inerentes à automação dos processos de sistemas de informação e de processos da
infraestrutura computacional. Se esses processos de sistemas de informação e de
infraestrutura computacional falham, sejam por causas acidentais, como erro de um
operador humano ou erros na programação do software, seja por causas
intencionais, como ataques por um hacker, vários são os problemas que podem ser
gerados. 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.
O grande problema em relação às aplicações web, conforme Holanda e
Fernandes (2011, p. 16), é que a rede de comunicações pode estar segura apenas
com firewall, e controle de acesso, mas, mesmo assim, um usuário mal intencionado
pode, através de entrada de dados em um formulário web, executarem vários tipos
de ataques que escapam completamente ao controle da equipe de segurança em
redes. O problema da segurança das aplicações web, e a dificuldade que as
abordagens de segurança em redes de computadores têm para alcançar essa
segurança são descritos em mais detalhes em trabalhos como Paiva e Medeiros
(2008).
Os institutos de segurança na web atualizam continuamente suas listas com
os tipos mais frequentes de riscos, ataques e vulnerabilidades em aplicações web.
Como pode ser observado no gráfico da Figura 11, disponibilizado pelo OSVDB2, os
ataques de XSS (Cross-Site Scripting) e Injeção de SQL, CSRF (Cross-site request
forgery), Inclusão de arquivo, DoS e overflow vem acontecendo com freqüência ao
longo dos anos.
O objetivo do projeto OSVDB é fornecer informações exatas, detalhadas,
atuais e de maneira imparcial sobre informações técnicas de vulnerabilidades e
segurança. É um projeto open source e independente com uma base de dados
2 OSVDB – Open Source Vulnerability Database
38
criada para auxiliar a comunidade nos assuntos relacionados à Segurança. O projeto
visa promover a colaboração entre as empresas e indivíduos de maneira maior e
mais aberta, eliminando redundâncias nas obras, e reduzindo as despesas inerentes
com o desenvolvimento e a manutenção de vulnerabilidades internas de Bases de
Dados.
Figura 11: Vulnerabilidades. Fonte: (OSVDB, 2010)
2.3 Referenciais Produzidos Pelos Próprios Cursistas
2.3.1 Autenticação e Autorização em Aplicativos Web
Aplicativos web são formados por diversos recursos, como páginas
dinâmicas, estáticas, imagens, downloads, uploads, processos, relatórios etc. E na
maioria delas existe a necessidade de controlar o acesso dos usuários a estes
recursos, restringindo-o somente para aqueles previamente identificados e
autenticados.
Autenticação representa a forma como o usuário prova quem realmente ele
é, e a Autorização é utilizada para verificar se o determinado usuário previamente
autenticado possui permissão para usar, manipular ou executar o recurso em
questão.
Segundo Franzini (2011), temos algumas possibilidades mostradas abaixo
(das mais simples às mais sofisticadas), seus comentários e algumas referências
apresentando
possibilidades,
documentações
e
tutoriais
de
possíveis
implementações, ficando a cargo dos projetistas responsáveis pela aplicação julgar
e selecionar aquela que satisfaz um determinado escopo/projeto em específico:
39
a. Servlet Filter
A forma mais básica e rápida de implementar controle de usuários seria através
da construção e configuração manual de servlet filters. Existentes desde a versão
2.3 da especificação, os filters possibilitam a interceptação, manipulação e
redirecionamento do pedido HTTP antes que ele chegue ao seu destino real.
Com base em sua funcionalidade, seria muito simples construir um filtro
específico para o determinado contexto da aplicação fazendo o controle de
acesso aos recursos da aplicação. E para aqueles que prezam a simplicidade,
mas com flexibilidade, também podem usar o filter para implementar mecanismos
mais elaborados e flexíveis, combinando os filters com arquivos XML. São várias
as opções de implementações: Filtros para servlets (OLMOS, 2011), Utilizando
Servlet Filter com JavaServer Faces (SACRAMENTO, 2011), Autenticação e
Autorização sem JAAS utilizando hierarquia de Perfis de Acesso – Parte I
(FERNANDES, 2011).
b. Phase Listener
Para as aplicações escritas em JavaServer Faces, além da opção de usar
servlets filters, estas podem utilizar um recurso especifico do JSF chamado de
phase listener que é responsável por interceptar e oferecer mecanismos de
manipulações referentes às mudanças de eventos ocorridas no ciclo de vida da
especificação. Relacionado ao contexto de autenticação e autorização, ela está
bem adequada a implementações de controle de usuários, oferecendo ao
projetista da aplicação mais uma opção arquitetural. São várias as opções de
implementações: Filtrando requisições com PhaseListener (LAZOTI, 2011),
Controlando o acesso em aplicações JSF - PhaseListener (MACEDO, 2011),
Login - autenticação e autorização usando JavaServer Faces (MOREIRA, 2011).
c. JAAS
Define um modelo padrão Java EE de regras de como a aplicação web pode
definir e gerenciar controle de acesso. Baseado em especificação e
implementado por todos os containers compatíveis, o JAAS é a solução 100%
portável indicada pela especificação para ser usada. Nele existem diferentes
níveis em opções de autenticação que são baseados na definição ROLES (*),
40
que são resumidamente grupos de usuários. A base de dados dos usuários
credenciados pode estar em arquivos XML, bancos de dados relacionais, LDAP,
etc. São várias as opções de implementações: Tutorial de JASS (VIANA, 2011),
Security - Como Usar JAAS Com Tomcat 6 (PASSOS, 2011), Autenticação e
Autorização: JAAS com JDBC Realm (JEVEAUX, 2011), Realm Configuration
HOW-TO (ASF, 2011).
d. jGuard
Framework proprietário construído em cima do JAAS oferecendo alguns
automatismos, facilidades e integrações interessantes com alguns componentes
JEE sendo um boa opção a ser considerada.
e. Spring Security
Um dos maiores frameworks da atualidade que oferece um leque muito amplo
em recursos para se implementar autenticação e autorização. É uma solução
profissional, mais difícil e complexa sendo que o framework oferece uma
variedade incrível de opções arquiteturais.
2.4 Argumentos do Pesquisador
O setor de desenvolvimento de aplicações corporativas (InfoTIC) da reitoria
da universidade Z, nos permitiu observar e acompanhar as dificuldades durante a
implementação de aplicativos web.
A plataforma Java EE faz o casamento do código Java com o HTML, por meio
das páginas em JSP, para o desenvolvimento de aplicações web. Neste contexto, é
possível realizar operações dinâmicas, tais como fazer uma consulta no banco de
dados sobre o curso e disciplinas nas quais o aluno esteja matriculado, e em poucos
segundos, obter-se o resultado na janela do navegador web (browser).
A utilização de uma metodologia de desenvolvimento de software seguro, é
um pré-requisito para o desenvolvimento de aplicações.
Porém, como os institutos de segurança alertam sobre as diversas
vulnerabilidades e suas consequências, isso motivou o estudo de caso, no ambiente
de trabalho, a fim de que possamos mitigar essas vulnerabilidades nos aplicativos
que são desenvolvidos na plataforma Java EE.
41
O instituto OWASP, oferta gratuitamente um código Java que, anexado ao
aplicativo web (OWASP Enterprise Security API - ESAPI), ajuda prevenir contra
diversas vulnerabilidades (OWASP, 2011).
No apêndice “F”, temos uma mapa conceitual, onde se mostra como
desenvolver um software com código seguro (veja Figura 16).
42
3 Metodologia
3.1 Tipo de Pesquisa
Esta pesquisa utiliza o método de estudo de caso com tipo de dados
qualitativo, pois é descritiva. Segundo Yin (2005), o estudo de caso pode abordar
aspectos qualitativos e também quantitativos. Também, segundo Yin (2005), além
do seu uso para fins exploratórios, o estudo de caso pode ser aplicado para fins
descritivos e para fins explanatórios, conforme a estrutura de pesquisa adotada.
Conforme Yin (2005) é importante que o estudo de caso empregue mais de
uma fonte de evidência para a constatação do que ocorre em determinado fato. As
fontes de evidência existentes são documentos, registros em arquivos, entrevistas,
observação direta, observação participante e artefatos físicos.
Os sistemas aplicativos web da universidade são cliente-servidor. Quando os
setores e unidades necessitam que seja desenvolvido algum sistema de aplicação,
os diretores responsáveis pelas unidades enviam um memorando via e-mail para o
diretor da InfoTIC, solicitando este tipo de serviço. O diretor da InfoTIC verifica quais
analistas estão disponíveis para desenvolver o serviço, formando a equipe que ficará
responsável pelo desenvolvimento da nova aplicação.
Há também na universidade Z, sistemas isolados, que atendem interesses
específicos das unidades, que foram desenvolvidos e são mantidos por funcionários
terceirizados, contratados conforme interesse do diretor da unidade. Estes sistemas
estão fora da responsabilidade da TIC.
Será analisado o sistema corporativo SGA. O SGA (Sistema de Gestão
Acadêmica) abrange somente uma unidade da universidade, ou seja, o Instituto de
Economia. O sistema de aplicação será acessado e operado pela web (veja
43
apêndice “G”). Neste apêndice está uma cópia do código-fonte, onde mostramos
uma codificação sem segurança.
Através deste trabalho tem-se o objetivo de estudar a forma de como
desenvolver e codificar com segurança um aplicativo web, na linguagem de
programação Java, utilizando os recursos seguintes:
 A plataforma Java EE;
 Uma metodologia de desenvolvimento seguro;
 As informações sobre vulnerabilidades que podem ser mitigadas;
 NORMA ABNT NBR ISO/IEC 27002:2005, referente à Seção 12.
A partir desta pesquisa serão selecionados os procedimentos considerados
pertinentes para elaboração de um tutorial 3, onde serão incluídos processos,
procedimentos e técnicas para ajudar na análise e desenvolvimento de aplicativos
com segurança da informação, utilizando-se o Java EE.
Foi realizado o estudo de caso, a fim de aprofundar os conceitos sobre o
tema, com a coleta de dados em campo, cujos dados coletados tiveram como fonte
de evidências as entrevistas, questionários, observação direta, observação
participante, e análise de documentos.
A documentação neste estudo de caso são artigos em revista, na mídia de
massa, e informativos de comunidade.
Como ferramentas foram realizadas as anotações das evidências em um
arquivo com a utilização de um editor de texto. Os questionários que foram
distribuídos numa ocasião foram devolvidos em outro dia posterior.
A pesquisa foi realizada no setor de análise e desenvolvimento de sistemas
aplicativos corporativos (InfoTIC), da reitoria da universidade Z, junto aos analistas e
programadores, os quais compõem as equipes ali existentes.
3.2 Plano da Pesquisa
3.2.1 Pesquisa Bibliográfica
Escolheu-se para a realização deste estudo de caso uma pesquisa
bibliográfica, como sendo uma das fontes de evidência, que permitiu um
aprofundamento sobre os conceitos envolvidos no tema, a descrição de casos e
3
Apêndices “C” , “D” e “E”.
44
suas respectivas análises e a apresentação de medidas para mitigar as
vulnerabilidades nas aplicações web (veja Capítulo 2 e apêndices “C” e “D”).
A pesquisa está fundamentada em trabalhos científicos, em documentos
técnicos e internet, além de outros trabalhos apresentados em congressos ou
revistas especializadas, o que denota a relevância atribuída ao estudo do tema.
Para tanto, procedeu-se a uma coleta de artigos e trabalhos nas áreas tanto
da segurança da informação quanto da formulação e implementação de políticas de
caráter público e organizacional, tais como os institutos de segurança.
Restringiu-se esta pesquisa ao universo conceitual baseado no referencial
teórico e na análise de casos ocorridos dentro da Administração Pública Federal,
onde os dados são tratados dentro de uma premissa de realidade e atualidade (veja
apêndice “A”).
3.2.2 Preparo do Questionário
Devido a pouca disponibilidade de tempo, optou-se por fazer um questionário
contendo dez questões ao todo, as quais trarão como resultado, o nível de
conhecimento sobre segurança de software dos funcionários que fazem o
desenvolvimento de aplicações web. Havia o propósito de entrevistar dez
funcionários do setor de desenvolvimento.
3.2.3 Coleta de Dados
1) Qual a metodologia utilizada para o desenvolvimento do software web?
2) Quais são os critérios de segurança adotados no desenvolvimento de
software web em Java EE?
3) Qual o nível de abrangência dos sistemas aplicativos web em Java EE na
universidade?
4) Como são utilizados os sistemas aplicativos web em Java EE na
universidade?
5) As aplicações web em Java EE podem sofrer algum tipo de ameaça?
6) Quais são os principais riscos e vulnerabilidades de uma aplicação web em
Java EE?
7) Como evitar a ocorrência de um ataque de Injeção de SQL numa aplicação
web em Java EE?
8) Como se faz para evitar o ataque de Cross-site scripting (XSS) numa
aplicação web em Java EE?
45
9) O que é um desenvolvimento de software com código seguro?
10) As informações dos Institutos de segurança sobre vulnerabilidades são
utilizadas nas aplicações que desenvolve?
3.2.4 Documentação e Estruturação dos Resultados
As fontes de dados foram: analistas e programadores pertencentes ao
InfoTIC, revisões bibliográficas, entrevista, consulta de sitio na internet.
Os dados foram armazenados em dois arquivos de planilha, sendo que uma
(veja Tabela 2) contém as perguntas, o nome do funcionário entrevistado, a
linguagem de programação na qual desenvolve o sistema de aplicação, e as
respostas. Uma nota é atribuída a cada funcionário, conforme a resposta dada, de
modo que se a resposta estiver de acordo com cada questão, se ganha 1 ponto,
caso contrário 0. Na outra planilha (veja Tabela3) fica a nota total de cada
funcionário entrevistado. A partir deste total de notas é realizada uma média, que
corresponde ao nível de conhecimento de segurança em aplicações web.
3.2.5 Validação e Análise dos Resultados
Os dados foram coletados utilizando o seguinte plano:
i) Técnica: Entrevista, observação (participante), e documentos.
ii) Local: InfoTIC, situado na reitoria da universidade Z.
iii) Fonte: Analistas e Programadores de TI, questionário, entrevista.
iv) Data: Período de 15/08/2011 até 31/10/2011.
v) Hora: Entre 09:00 h até as 16:00 horas.
A validação e análise dos resultados é consequência natural da coleta de
dados, pois a partir das evidências documentais, resposta dos questionários e
entrevistas, obteremos um resultado. O resultado irá demonstrar se a hipótese é
verdadeira ou não.
46
4 Resultados
Com o intuito de comprovar a hipótese, foi realizado um estudo de caso com
a participação de quatro analistas e três programadores, os quais são funcionários
do setor de desenvolvimento, sendo que somente os analistas foram capacitados no
final de 2010 na plataforma Java EE 5, onde aprenderam a utilizar as ferramentas
seguintes: o JDK 6, o servidor de aplicações JBoss 5, o framework JBoss-Seam 2.0,
a IDE4 Eclipse 3.4, um sistema gerenciador de banco de dados MySQL 5.
O percentual de funcionários entrevistados é de 13,5% do total de
funcionários da TIC. As entrevistas ocorreram em dias e horas diferentes, e
demoraram aproximadamente uma hora cada uma.
4.1 Setor de Desenvolvimento de Aplicações
A TIC é composta por um total de 30 analistas e 22 técnicos, sendo que
somente 9 técnicos trabalham com programação e os outros 13 trabalham com
infraestrutura. A administração da TIC definiu que a InfoTIC utilize o método de
desenvolvimento conhecido como Processo Unificado (RUP 5).
A TIC foi criada em meados de 2009, com funcionários já pertencentes à
universidade, que agora corresponde a 11,5% dos funcionários da TIC, os quais
foram admitidos através de concurso público, e tomaram posse antes de 2009. Os
demais 88,5% foram admitidos através de concurso público, e tomaram posse entre
fevereiro a novembro de 2010. A TIC está vinculada a uma pró-reitoria.
Somente
8
analistas
e
mais
2
programadores
trabalham
com
desenvolvimento em Java, outros 11 analistas e mais 4 programadores
4
5
IDE – Integrated Development Enviroment (ambiente integrado para desenvolvimento de software).
RUP – Rational Unified Process.
47
desenvolvem em PHP, outros 7 analistas e mais 2 programadores desenvolvem em
ASP, e os 5 analistas restantes desenvolvem em outras linguagens.
O percentual de funcionários que desenvolvem em Java corresponde a
exatamente 19,2% dos funcionários que fazem desenvolvimento.
O percentual de funcionários que desenvolvem em outras linguagens é de
80,8%. Sendo que 28,8% desenvolvem em PHP, 17,3% desenvolvem em ASP e
34,6% desenvolvem em outras linguagens tais como “C”, “C++”,
“JavaScript”,
“HTML”, “DELPHI”, “Visual Basic 6”, etc.
Temos um sistema SGA, cujo nome do projeto é “SisGestaoAcademica”, o
qual foi desenvolvido para web, com JavaServer Pages (JSP), ide NetBeans 6.5, jdk
6, servidor web Apache Tomcat 6 na porta 80 (veja apêndice “G”). Neste apêndice
está uma cópia do código-fonte, onde mostramos uma codificação sem segurança.
A InfoTIC tem um total de dez equipes, sendo três equipes com
desenvolvimento em Java, quatro equipes com desenvolvimento em PHP, duas
equipes com desenvolvimento em ASP, e uma equipe para suporte nas outras
linguagens de programação (Delphi 7, Visual Basic 6, Access, etc.).
As equipes formadas em Java são: EQP01 composta de dois analistas e dois
programadores; EQP02 composta de dois analistas; EQP03 composta de quatro
analistas. As sete equipes restantes trabalham nas outras linguagens de
programação.
Por enquanto, o PHP é utilizado como linguagem principal para o
desenvolvimento de aplicações web, pois as equipes nomeadas de EQP04 até
EQP10, ainda não foram capacitadas na plataforma Java EE.
4.2 A Pesquisa
Para realizar a pesquisa, foi feito um plano de coleta de dados, conforme
pode ser visto na Tabela 1.
Técnica
Tabela 1 – Plano de Coleta de Dados.
Local
Fonte
Data
Hora
Entrevista,
InfoTIC (reitoria da
Analista,
De
Entre as
Observação
universidade Z)
Programador,
15/08/2011 9h até às
participante,
Questionário,
até
Documentação.
Entrevista.
31/10/2011
16h
48
Foram distribuídos questionários e também foram realizadas entrevistas,
cujas respostas foram armazenadas num arquivo gerado por um editor de texto. Na
Tabela 2 podemos ver as perguntas e respostas obtidas dos funcionários que foram
entrevistados. As respostas das 10 questões estão nas colunas por funcionário.
Tabela 2 – Pesquisa Sobre Segurança no Desenvolvimento de Software 6
Pesquisa sobre a utilização de segurança no desenvolvimento do software na universidade Z.
COLETA DE DADOS
1)
2)
3)
4)
5)
6)
7)
8)
9)
10)
Qual a metodologia utilizada para o desenvolvimento do software web ?
Quais são os critérios de segurança adotados no desenvolvimento de software web em Java EE?
Qual o nível de abrangência dos sistemas aplicativos web em Java EE na universidade?
Como são utilizados os sistemas aplicativos web em Java EE na universidade?
As aplicações web em Java EE podem sofrer algum tipo de ameaça?
Quais são os principais riscos e vulnerabilidades de uma aplicação web em Java EE?
Como evitar a ocorrência de um ataque de Injeção de SQL numa aplicação web em Java EE?
Como se faz para evitar o ataque de Cross-site scripting (XSS) numa aplicação web em Java EE?
O que é um desenvolvimento de software com código seguro?
As informações dos Institutos de segurança sobre vulnerabilidades são utilizadas nas aplicações que desenvolve?
RESPOSTAS
FUNC1 / ANALISTA
FUNC2 / ANALISTA
JAVA
1
NOTA 1
2
NOTA 2
3
NOTA 3
4
NOTA 4
5
NOTA 5
6
NOTA 6
7
NOTA 7
8
1
1
DIVERSOS, ALGUNS
LOCALIZADOS NA
UNIDADE, OUTROS
ABRANGEM TODA A
UNIVERSIDADE
1
1
MVC
1
1
PARA TODA A
UNIVERSIDADE
INJEÇÃO DE SQL,
CROSS-SITE
SCRIPTING (XSS)
1
ATAQUES DOS
HACKERS
1
1
1
9
1
AINDA NÃO, MAS
PRETENDEMOS
UTILIZAR
0
9
0
DESENVOLVIMENTO
BASEADO NUMA
METODOLOGIA
SEGURA COMO O
OWASP
1
APENAS ALGUNS
1
9
MVC
LOGIN E SENHA
COM PERFIL DE
ACESSO
1
TODA A
UNIVERSIDADE
REITORIA
INTRANET OU
INTERNET
1
1
VALIDAR O
CONTEÚDO DOS
CAMPOS "INPUT"
1
1
UTILIZA O CONTENT
SEGURITY POLICY
DO GOOGLE
NÃO SABE
0
0
MINIMIZAR TODAS AS
NÃO SABE
VULNERABILIDADES
1
0
8
Os nomes dos funcionários nas Tabelas
informação.
NÃO SABE
0
0
NÃO
0
6
TRIAGEM DOS
REQUISISTOS
0
CRIPTOGRAFIA,
GERENCIA DE
PERMISSÕES, LOGIN
1
TODA A
UNIVERSIDADE E
PÚBLICO EXERNO
1
ACESSO A ÚLTIMAS
NOTÍCIAS, ACESSO
OUTROS SISTEMAS
NÃO SABE
FUNC7 /
PROGRAMADOR
PHP
1
TODA A
UNIVERSIDADE E
PÚBLICO EXERNO
0
1
ACESSO A ÚLTIMAS
NOTÍCIAS, ACESSO
OUTROS SISTEMAS
0
SIM,
CONSTANTEMENTE
SIM
1
TRIAGEM DOS
REQUISISTOS
0
1
1
SIM
FUNC6 /
PROGRAMADOR
PHP
SEGUIR PADRÕES,
TRATAR STRINGS DE
CONSULTA DE
CRIPTOGRAFIA,
BANCO DE DADOS,
GERENCIA DE
CUIDADO COM A
PERMISSÕES, LOGIN
SAÍDA DOS DADOS
PARA EVITAR O XSS
1
ACESSO AS
TABELAS DO BANCO INVASÃO AO
DE DADOS, ACESSO SERVIDOR DE
DE UMA PÁGINA VIA APLICAÇÃO
GET
AINDA NÃO
0
1
VALIDAR TODOS OS
UTILIZAR PREPARED
UTILIZAR
DADOS RECEBIDOS
STATEMENT OU
INTERROGAÇÃO NO
PELO APLICATIVO VIA
NAMED PARAMETERS
SQL
GET OU POST
O MESMO ANTERIOR NÃO OUVIU FALAR
COM A ATIVAÇÃO DO NESSE TIPO DE
ESCAPE
ATAQUE
FUNC5 /
PROGRAMADOR
PHP
0
1
1
DESDE
CONFORME A
DEPARTAMENTOS
FINALIDADE DE CADA
SIGA , SAM
ATÉ TODA A
UM
UNIVERSIDADE
1
1
1
SIM, CASO NÃO SEJA
SIM, INDEPENDENTE UTILIZADA ALGUMA
SIM
DA LINGUAGEM
TÉCNICA DE
SEGURANÇA
1
1
1
1
NOTA 10
NOTA TOTAL
JAVA
RUP
LOGIN E SENHA COM LOGIN, REGISTRO DE
LOGIN E SENHA
CRIPTOGRAFIA MD5 LOG
DESENVOLVIMENTO
PADRÃO MAIS
CUIDADOS
INFORMADOS PELOS
INSTITUTOS DE
SEGURANÇA
10
JAVA
RUP
NOTA 8
NOTA 9
6
RUP
FUNC4 /
ANALISTA
JAVA
FUNC3 / ANALISTA
1
0
SIM,
CONSTANTEMENTE
1
DoS, SNIFFING,
XSS, SQL INJECTION, FALHAS NÃO
BRUTE FORCE, DDOS REVISADAS PELOO
DESENVOLVEDOR
1
1
DoS, SNIFFING,
FALHAS NÃO
REVISADAS PELOO
DESENVOLVEDOR,
XSS
1
USO DE
COMPONENETES
ESPECÍFICOS QUE
GERENCIAM A
FUNÇÕES NATIVAS
CONEXAO COM O
DO BANCO DE DADOS
BANCO DE DADOS,
EVITAR
CONCATENAÇÃO DE
STRINGS
0
0
1
USO DE
COMPONENETES
ESPECÍFICOS QUE
GERENCIAM A
CONEXAO COM O
BANCO DE DADOS,
EVITAR
CONCATENAÇÃO DE
STRINGS
0
USA A FUNÇÃO
HTMLENTITIES DO
PHP
NÃO SABE
NÃO SABE
0
SEGUIR PADRÕES E
RECOMENDAÇÕES
DE SEGURANÇA E
CONHECER BEM OS
RECURSOS DA
LINGUAGEM DE
PROGRAMÇÃO QUE
UTILIZA
1
0
0
DESENVOLVIMENTO
OBJETIVO, EVITAR
CONEXÕES ABERTAS,
SERVIDOR COM BOA
INFRAESTRUTURA DE
SEGURANÇA
DESENVOLVIMENTO
OBJETIVO, EVITAR
CONEXÕES ABERTAS,
SERVIDOR COM BOA
INFRAESTRUTURA DE
SEGURANÇA
1
1
MANTER AS
BIBLIOTECAS
UTILIZADAS SEMPRE
ATUALIZADAS
NÃO SABE
1
5
NÃO SABE
0
5
0
5
2 e 3 foram trocados por motivo de segurança da
49
A Tabela 3 reflete os dados coletados na pesquisa feita na Tabela 2, onde as
respostas dos funcionários entrevistados, com nomes fictícios, revelam o
conhecimento de algumas vulnerabilidades e riscos que podem afetar uma aplicação
web. Porém, a maioria das vulnerabilidades existentes ainda são desconhecidas
pelos funcionários que foram entrevistados. As notas levaram em consideração tudo
o que está relacionado com o desenvolvimento de uma aplicação segura.
Na Tabela 3 é exibida a média das notas, cujo valor ficou em 6,7 (escala de
0,0 a 10), sendo esse o valor correspondente para o nível de conhecimento de
segurança em aplicações web.
Tabela 3 – Sumário das Entrevistas Realizadas7
Nível de conhecimento
Entrevistado
Linguagem de
de segurança em
Programação
aplicações web
Nota (0,0 a 10)
Func1 - Analista
Java EE
9
Func2 - Analista
Java EE
9
Func3 - Analista
Java EE
8
Func4 - Analista
Java EE
6
Func5 - Programador
PHP / JOOMLA
5
Func6 - Programador
PHP / JOOMLA
5
Func7 - Programador
PHP / JOOMLA
5
MÉDIA DAS NOTAS =>
6,7
Na Tabela 4, podemos verificar a relação que existe entre os itens da coleta
de dados da pesquisa e conteúdo exemplificado nos apêndices desta monografia.
Somente os itens 3, 4 e 10 não tiveram nenhum tipo de relação com o conteúdo
disponibilizado nos apêndices.
7
Os nomes dos funcionários nas Tabelas 2 e 3 foram trocados por motivo de segurança da
informação.
50
Tabela 4 – Relação: Coleta de Dados X Apêndices
DADOS COLETADOS
1. Qual a metodologia utilizada para o desenvolvimento do
software web?
2. Quais são os critérios de segurança adotados no
desenvolvimento de software web em Java EE?
3. Qual o nível de abrangência dos sistemas aplicativos web em
Java EE na universidade?
4. Como são utilizados os sistemas aplicativos web em Java EE
na universidade?
5. As aplicações web em Java EE podem sofrer algum tipo de
ameaça?
6. Quais são os principais riscos e vulnerabilidades de uma
aplicação web em Java EE?
7. Como evitar a ocorrência de um ataque de Injeção de SQL
numa aplicação web em Java EE?
8. Como se faz para evitar o ataque de Cross-site scripting
(XSS) numa aplicação web em Java EE?
9. O que é um desenvolvimento de software com código
seguro?
RELAÇÃO
Apêndice E
Apêndice C
Nenhuma
Nenhuma
Apêndice D
Apêndices B, C
eD
Apêndice D
Apêndice D
Apêndice F
10. As informações dos Institutos de segurança sobre
vulnerabilidades são utilizadas nas aplicações que
desenvolve?
Nenhuma
51
5 Discussão
A Gestão de Segurança da Informação e Comunicação abrange um grande
número de opções, onde a plataforma Java EE e os institutos de segurança tais
como OWASP e SANS, podem contribuir grandemente.
A reitoria da universidade Z, em atenção dada às recomendações da
Instrução Normativa 04/2010 (IN4) e outras orientações no âmbito da contratação e
execução dos serviços de TI, com o objetivo de melhorar o processo de governança
em tecnologia da informação (TI) na administração pública, gerou um movimento no
sentido de criar condições que busquem desenvolver, atualizar e revisar
constantemente o processo de gestão dos recursos de TI nas instituições públicas.
A pesquisa serviu para avaliarmos o nível de conhecimento que os
desenvolvedores de aplicações da InfoTIC possuem para produzir um software
seguro e com codificação segura.
A média das notas exibida na Tabela 3, obtidas pelas respostas ao
questionário na Tabela 2, mostram que o conhecimento sobre codificação segura na
InfoTIC, está em um nível médio.
Verificou-se que as informações e técnicas para evitar vulnerabilidades
disponíveis nos institutos de segurança, tais como OWASP e SANS, não foram
utilizados pelos funcionários do desenvolvimento de software, por não saberem
sobre a existência dos tais institutos.
Devido ao fato da maioria dos funcionários serem pessoas recémconcursadas, é normal haver certa falta de habilidade dos mesmos, pois muitos
terminaram a faculdade há pouco tempo, e não tiveram tempo de adquirir a
experiência necessária nessas novas tecnologias, incluindo o Java EE, que têm
52
evoluído gradativamente, com inúmeros recursos novos, exigindo assim uma
atualização constante a cada dia que passa.
O resultado da pesquisa não invalida a hipótese, pois o nível médio de
conhecimento sobre codificação segura demonstra que falta algum conhecimento
de como usar questões de segurança na plataforma Java EE.
Na verdade, a segurança de 100% é utópica, mas a prática de Gestão da
Segurança da Informação e Comunicação no desenvolvimento do software
aplicativo com codificação segura, proporcionará uma redução bastante significativa
das vulnerabilidades e riscos que poderiam ocorrer em uma aplicação web.
Apesar da citação feita pelo órgão internacional DHS(2010), que foi
mencionado na seção 1.2 do capítulo 1 desta monografia, referente ao que
chamamos de software seguro, se conclui que a segurança do software é um
objetivo constante a ser alcançado, pois a cada dia que passa surgem novas
vulnerabilidades.
Da mesma forma que acontece com as empresas de software que criam
antivírus para combater os vírus de computador que já existem, a cada dia são
criados novos vírus que ainda não possuem o antivírus. Ou seja, uma luta constante
que nunca termina.
Em setembro de 2011, foi detectado num sistema desenvolvido em ASP a
vulnerabilidade conhecida como “Injeção de SQL”, porém, esta falha já foi mitigada.
5.1 Sugestão de Melhorias
Para melhorar o nível de segurança no desenvolvimento das aplicações web,
a reitoria da universidade “Z” precisa continuar investindo na qualificação
dos
demais analistas e programadores para o aprendizado e também reciclagem do
seguinte:
 Programação em Java EE, incluindo segurança e código seguro para
aplicações web;
 Aplicação das informações e técnicas de mitigação de vulnerabilidades
recomendadas pelo instituto de segurança OWASP;
 Observação da NORMA ABNT ISO/IEC 27002:2005 – Seção 12;
 Metodologia para desenvolvimento seguro do software CLASP.
53
A utilização desses recursos em conjunto contribui grandemente para reduzir
as brechas existentes, mitigando assim, a maioria das vulnerabilidades e riscos nas
aplicações web desenvolvidas na plataforma Java EE.
Em relação à implementação da segurança, pode-se considerar que todos os
requisitos de segurança e o design especificado sejam implementados de maneira
correta, através da utilização de linguagem de programação segura e da utilização
de padrões, guias e normas de codificação (WAGNER & MACHADO, 2010).
A Reitoria da Universidade Z, deve criar uma política para desenvolvimento
de aplicações com código seguro em conformidade com o que é demonstrado no
mapa conceitual do software com código seguro no apêndice “F” (veja Figura 16), a
fim de que a InfoTIC melhore o nível de desenvolvimento de aplicações web com
segurança.
No processo de desenvolvimento seguro, logo de início, durante a concepção,
deve-se levantar todas as possibilidades de riscos que poderiam atacar um software
de aplicação, seja web ou desktop, de modo que sejam levantados todos os
requisitos de segurança que forem necessários. Deve-se definir qual banco de
dados será utilizado, qual servidor de aplicações será utilizado, qual sistema
operacional será utilizado no servidor web, qual a plataforma de desenvolvimento,
também se deve solicitar ao setor de infraestrutura todos os recursos necessários
para proteger as aplicações que ficarão no servidor, tais como firewall, antivírus,
monitoramento da rede, back-up, etc.
5.2 Validade da Construção
O constructo é verdadeiro (veja Tabela 5), as variáveis evidenciadas,
mostram o nível de segurança existente no setor de desenvolvimento da reitoria da
universidade Z, após a conformidade com o mapa conceitual de desenvolvimento de
software com codificação segura (veja Figura 16).
Com relação ao Objetivo Geral, foi realizado um estudo de caso que avaliou
alguns dos requisitos de segurança (veja Tabela 2).
Os Objetivos Específicos também foram avaliados. Mostrou-se no apêndice
“D”, e também no item 2.1.2, os principais erros na implementação e riscos do
controle de acesso. Abordamos também algumas formas de se criar uma solução
para o controle de acesso. Mostramos no apêndice “C” como inserir código seguro
em aplicações web.
54
Temos como fonte de evidência documental, o apêndice “A”, que relata os
ataques realizados pelos hackers; onde o item A.3 (veja Figura 12) exibe uma
alteração na interface da página de um dos sítios da UFRJ; e também temos outras
fontes de evidências documentais relacionados aos sítios do governo, tais como o
item A.1 referente ao Exército Brasileiro e o item A.2 referente aos sítios da
Presidência da República, Senado e Receita Federal.
Temos como fonte de evidência a entrevista, as respostas dadas a cada
pergunta do questionário (veja Tabelas 2 e 3 – Capítulo 4), onde o funcionário
entrevistado “Func6” relata resumidamente como procede para conseguir que uma
aplicação fique segura durante a sua operação. As perguntas foram pertinentes, de
modo que foi possível saber qual o nível de segurança que os desenvolvedores da
InfoTIC possuem até esse momento para o desenvolvimento de aplicações seguras.
Temos como fonte de evidência a observação participativa, onde o fato de
participar de uma das equipes de desenvolvimento em Java EE, constatou-se as
dificuldades na implementação de segurança no software aplicativo, pois os cursos
de capacitação não ensinam como desenvolver aplicativos com segurança, mas
apenas explicam quais os recursos disponíveis na plataforma Java EE. Também, se
pôde observar a dificuldade para configurar um servidor de aplicações, tais como o
Apache Tomcat 6 ou JBoss 6. Caso sejam mal configurados, podem gerar alguma
vulnerabilidade.
Tabela 5 – Variáveis X Nível de Segurança
VARIÁVEIS
Equipe de
desenvolvimento
Sistema aplicativo
Plataforma
DESCRIÇÃO
NÍVEL DE SEGURANÇA
EQP02 (Func1)
6,7
SGA
7
Java EE
10
NORMA NBR ISSO/IEC
Norma
27002:2005
Instituto de segurança
Metodologia de
desenvolvimento
10
OWASP
10
CLASP
10
Média do nível de segurança =>
8,9
55
Essas são as conclusões relativas às variáveis da Tabela 5:

Na variável plataforma, segundo Wagner e Machado (2010, p. 6), o Java
possui um alto nível de segurança devido às aplicações funcionarem de
forma “stand Box’. Por isso ganhou nota 10 no nível de segurança.

Na variável norma, conforme consta na Seção 12 da NORMA ABNT NBR
ISO/IEC 27002:2005, enfatiza que todos os requisitos de segurança
devem ser identificados na fase de levantamento de requisitos do projeto.
Por isso ganhou nota 10 no nível de segurança.

Na variável
instituto de segurança, temos as Melhores Práticas de
Codificação Segura OWASP e a lista da OWASP Top 10 – 2010, que
contém a relação dos “dez maiores riscos críticos em segurança de
aplicações web” (OWASP, 2011). Por isso ganhou nota 10 no nível de
segurança.

Na variável metodologia de desenvolvimento, temos o CLASP, que é um
modelo de processo de desenvolvimento de software seguro, permitindo o
ciclo de vida de maneira estruturada, com repetição e mensuração,
especificado pela OWASP (OWASP, 2011). Por isso ganhou nota 10 no
nível de segurança.

Na variável equipe de desenvolvimento, temos que levar em conta o fator
humano, o qual devidamente treinado para reconhecer e mitigar
vulnerabilidades, poderá mitigar a maioria das vulnerabilidades numa
determinada aplicação. Por isso ganhou nota 6,7 no nível de segurança.

Na variável sistema aplicativo, temos o software em desenvolvimento, o
qual depende de todas as demais variáveis para ser desenvolvido com
segurança e código seguro. Por isso ganhou nota 7 no nível de segurança.
5.3 Validade Interna
A validade interna deste estudo de caso demonstra que os dados
pesquisados refletem o nível do padrão de segurança na InfoTIC, no que diz
respeito à implementação de aplicações com segurança embutida no código-fonte
do sistema desenvolvido.
A equipe de desenvolvimento após tomar conhecimento das regras
enumeradas na NORMA NBR ISSO/IEC 27002:2005, e também tomarem
56
conhecimento das informações e técnicas para mitigar vulnerabilidades fornecidos
pelo instituto OWASP, e também adotarem uma metodologia para desenvolvimento
de software seguro, e tomarem conhecimento das técnicas de segurança do Java
EE, verificou-se a melhoria no desenvolvimento de aplicações web seguras com
código seguro. Ou seja, o nível de codificação segura melhorou, conforme consta na
Tabela 5.
Os dados coletados (veja Tabela 3) têm relação direta com a hipótese
analisada, pois foi constatado por meio das entrevistas e questionários, que os
desenvolvedores em Java não possuíam o conhecimento de uma codificação
segura, tanto em Java como nas vulnerabilidades que são passadas como
parâmetros nas páginas dos aplicativos web.
Os resultados mostraram que a hipótese têm validade, porém existe a
necessidade de que todos os funcionários do desenvolvimento sejam treinados para
utilizar todos os recursos citados acima.
5.4 Validade Externa
A validade externa não ocorre, apesar dos resultados da pesquisa provarem
que a hipótese é verdadeira, pois estatisticamente não podemos generalizar que da
mesma forma como acontece com a InfoTIC na reitoria da universidade Z, o mesmo
possa estar acontecendo nos setores de desenvolvimento de aplicações de outros
órgãos públicos da Administração Pública Federal.
57
6 Conclusões e Trabalhos Futuros
6.1 Conclusões
Neste trabalho fizemos um estudo de caso sobre o Java EE e Segurança
Cibernética atuando em aplicações web, o qual consistiu em verificar a ocorrência
da falta de conhecimento das equipes de desenvolvimento da InfoTIC sobre a
maneira de usar questões de segurança da plataforma Java EE, dentro do contexto
corporativo da reitoria da Universidade Z.
Conduzimos entrevistas com funcionários da InfoTIC para verificar o nível de
conhecimento de segurança e utilização da codificação segura nas aplicações
desenvolvidas com Java EE, no contexto de uma universidade federal.
Apresentamos os resultados alcançados por meio de um estudo de caso, com
tipo de dados qualitativo, pois é descritivo.
Apesar do resultado da pesquisa validar a hipótese, constatou-se, que se os
desenvolvedores aplicarem todo o conhecimento adquirido neste trabalho para
desenvolvimento de software, será produzido um software seguro com codificação
segura. Os conhecimentos são:

Codificação segura por meio das técnicas de mitigação ofertadas pelo
Instituto OWASP;

Metodologia de desenvolvimento seguro como o CLASP;

NORMA ABNT NBR ISO/IEC 27002:2005 - Seção 12;

Plataforma Java EE com programação segura no código.
58
Esses conhecimentos, quando aplicados em conjunto, permite a redução das
brechas existentes, mitigando assim, a maioria das vulnerabilidades e riscos nas
aplicações web desenvolvidas na plataforma Java EE. Desse modo, os aplicativos
que forem desenvolvidos após o conhecimento deste trabalho de monografia, terão
um nível de segurança bem maior do que o resultado da pesquisa.
A contribuição desse trabalho é alertar as equipes de desenvolvimento quanto
à ocorrência de diversos tipos de vulnerabilidades e risco aos quais as aplicações
web estão sujeitas a sofrer. Os dados coletados permitiram analisar o que ocorre
durante o desenvolvimento de uma aplicação web.
Verificou-se que a Reitoria da Universidade Z, através da equipe de
desenvolvimento, precisa adotar uma política para desenvolvimento de aplicações
com código seguro. Pois apesar das equipes de desenvolvimento utilizar alguma
metodologia de desenvolvimento de software, ela sozinha por si não será suficiente
para garantir e minimizar as brechas na Segurança da Informação dos aplicativos
web.
No capítulo 2 e nos apêndices “C” e “D”, a partir da análise de documentos
advindos do estudo de caso, são demonstradas várias possibilidades de
desenvolvimento de aplicações com código seguro e código inseguro. Esse material
serve como exemplo para outros funcionários da Administração Pública Federal, que
trabalham na Área de Tecnologia da Informação e Comunicação ou até na Gestão
de Segurança da Informação e Comunicação.
As limitações desse estudo de caso é o fato de que a InfoTIC é um setor novo
dentro da universidade Z 8, que ainda se encontra em fase de estruturação. Outra
limitação foi o tempo para desenvolver esta monografia.
6.2 Trabalhos Futuros
O estudo de caso realizado neste trabalho não esgotou o tema. A
necessidade de desenvolvimento de aplicativos para web com código seguro possui
muitas facetas.
O Java EE certamente é a plataforma mais indicada para produzir software
aplicativo seguro, pois não se limita apenas ao código Java, mas também abrange
8
O nome da instituição onde foi realizada a pesquisa foi trocado por questões de segurança da
informação.
59
tudo que se relacionam com HTML, XHTML, XML, JSF, JSP, JavaScript, CSS,
Criptografia, WebServices, etc.
Foi lançado em meados de 2011, o Java 7, trazendo assim novos desafios de
implementação de sistemas aplicativos seguros e com codificação segura.
A utilização do MDA e UML por meio de transformações, que permita gerar
aplicações seguras na plataforma Java EE é outro desafio, principalmente com a
aplicação de código seguro.
60
Referências e Fontes Consultadas
ABNT - ASSOCIAÇÃO BRASILEIRA DE NORMAS TÉCNICAS. Tecnologia da
informação - Técnicas de segurança - Código de prática para a gestão da
segurança da informação: ABNT NBR ISO/IEC 27002:2005. 2a. ed. Rio de
Janeiro, 2005.
ALMEIDA, Marcelo. Ataque deixa 105 sites da UFRJ desfigurados. Disponível em:
<http://www.zone-h.com.br/news/id/447> Acessado em: setembro de 2011.
ASF - APACHE SOFTWARE FOUNDATION. Realm Configuration HOW-TO.
Disponível em: <http://tomcat.apache.org/tomcat-6.0-doc/realm-howto.html>.
Acessado em: julho de 2011.
BRAZ, Fabrício. Segurança de Aplicações. Especialização em Ciência da
Computação: Gestão da Segurança da Informação e Comunicações.
Universidade de Brasília, 2008.
DHS - Department of Homeland Security. Security in the Software Lifecycle. 2006.
Disponível
em:
https://buildsecurityin.us-cert.gov.
Acessado
em:
novembro/2010.
DIAS, Cláudia. Segurança de Auditoria da Tecnologia da Informação. Rio de
Janeiro: Axcel Books do Brasil, 2000.
FERNANDES, Dave. Autenticação e Autorização sem JAAS utilizando hierarquia de
Perfis
de
Acesso
–
Parte
I.
Disponível
em:
<http://www.devmedia.com.br/articles/viewcomp.asp?comp=6161&hl=>.
Acessado em: julho de 2011.
FERNANDES, Jorge Henrique Cabral. Sistemas, Informação e Comunicação:
GSIC050 (Notas de Aula). Curso de Especialização em Gestão da Segurança
da Informação e Comunicações: 2009/2011. Departamento de Ciências da
Computação da Universidade de Brasília. 2010. 51 p.
61
FRANZINI, Fernando. Autenticação e autorização em aplicativos web. Disponível
em:
http://imasters.com.br/artigo/14152/javaweb/autenticacao_e_autorizacao_em_a
plicativos_web>. Acessado em: julho de 2011.
GABINETE DE SEGURANÇA INSTITUCIONAL DA PRESIDÊNCIA DA
REPÚBLICA. Instrução Normativa GSI No. 1, de 13 de junho de 2008 :
Disciplina a gestão de segurança da informação e comunicações na
administração pública federal, direta e indireta, e dá outras providências.
Brasília, junho 2008. Publicada no DOU No. 115, de 18 Jun 2008 – Seção 1.
Disponível em: <http://dsic.planalto.gov.br/legislacaodsic>. Acesso em: Agosto
de 2009.
GUERRA, Eduardo. Os sete pecados do controle de acesso para aplicações Java
EE. Mundo Java. Curitiba, n. 28, p.26-33, 2008.
HOLANDA, Maristela Terto; FERNANDES, Jorge Henrique Cabral. Segurança no
Desenvolvimento de Aplicações: GSIC701 (Notas de Aula). Curso de
Especialização em Gestão da Segurança da Informação e Comunicações:
2009/2011. Departamento de Ciências da Computação da Universidade de
Brasília. 2011. 43 p.
JEVEAUX, Paulo C. M. Autenticação e Autorização: JAAS com JDBC Realm.
Disponível em: < http://jeveaux.com/2009/autenticacao-e-autorizacao-jaas-comjdbc-realm/>. Acessado em: julho de 2011.
KURNIAWAN, Budi. Programando em JavaServer Faces. Rio de Janeiro: Editora
Ciência Moderna Ltda. 2004.
LAZOTI, Rodrigo.
Filtrando requisições com PhaseListener. Disponível em:
<http://rodrigolazoti.com.br/2008/09/01/filtrando-usuarios-logados-em-jsf-comphaselistener/>. Acessado em: julho de 2011.
MACEDO, Ciro. Controlando o acesso em aplicações JSF - PhaseListener.
Disponível em: < http://ciromacedo.blogspot.com/2008/06/controle-de-acessono-jsf.html>. Acessado em: junho de 2011.
MCGRAW, G. Software security. In IEEE Security and Privacy, March/April 2004,
pages 32-35.
MOREIRA, Leandro. Login - autenticação e autorização usando JavaServer Faces
(jsf). Disponível em: < http://archsofty.blogspot.com/2008/11/login-autenticao-eautorizao-usando.html>. Acessado em: junho de 2011.
OLMOS,
Cesar.
Filtros
para
servlets.
Disponível
<http://www.guj.com.br/articles/11>. Acessado em: agosto de 2011.
em:
ORACLE.
Java
EE
at
a
Glance.
Disponível
em:
<http://www.oracle.com/technetwork/java/javaee/overview/index.html>. Acesso
em: março de 2011.
62
ORACLE.
Java
EE
6
Technologies.
Disponível
em:
<http://www.oracle.com/technetwork/java/javaee/tech/index-jsp-142185.html>.
Acesso em: agosto de 2011.
ORACLE.
The
Java
EE
5
Tutorial.
Disponível
em:
<http://download.oracle.com/javaee/5/tutorial/doc/ >. Acesso em: agosto de
2011. http://download.oracle.com/javaee/6/tutorial/doc/bnacj.html#bnack
ORACLE.
The
Java
EE
6
Tutorial.
Disponível
em:
<http://download.oracle.com/javaee/6/tutorial/doc/ >. Acesso em: agosto de
2011.
OSVDB.
Padrões
de
Vulnerabilidades.
Disponível
<http://osvdb.org/vuln_standards>. Acessado em: setembro de 2011.
em:
OWASP. CLASP Project. Disponível em: http://www.owasp.org/index.php/ Category:
OWASP_CLASP_Project. Último acesso em janeiro de 2011.
OWASP. How to add validation logic to HttpServletRequest. Disponível em:
<https://www.owasp.org/index.php/How_to_add_validation_logic_to_HttpServletR
equest>. Acessado em: agosto de 2011.
OWASP. Melhores Práticas de Codificação Segura OWASP: Guia de Referência
Rápida.
2010.
Disponível
em:
<http://www.owasp.org/index.php/Secure_Coding_Practices>. Último acesso
em: julho de 2011.
OWASP. OWASP Top 10: The Ten Most Critical web Application Security Risk.
2010.
Disponível
em:
<http://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project>.
Último acesso em: julho de 2011.
OWASP. WebScarab . Software para análise de aplicativos web. Disponível em:
<https://www.owasp.org/index.php/webScarab_Getting_Started>. Acesso em:
julho de 2011.
PAIVA, Alan e MEDEIROS, Indiana Belianka Kosloski. Uma abordagem de caso de
integração entre os processos de Tratamento de Incidentes de Segurança
Computacionais e Desenvolvimento de Software. Monografia de
especialização. Brasília: Departamento de Ciência da Computação da
Universidade de Brasília. 2008.
PASSOS, Antonio. Java Security - Como Usar JAAS Com Tomcat 6. Disponível em:
<http://pt.scribd.com/doc/7571690/Java-Security-Como-Usar-JAAS-ComTomcat-6>. Acessado em: maio de 2011.
PINCEL, Paulo. Polícia Federal investiga ataques de hackers na internet. Disponível
em:
<http://www.piauihoje.com/noticias/policia-federal-investiga-ataques-dehackers-na-internet-29700.html>. Acessado em: setembro de 2011.
63
WAGNER, Rosana; MACHADO, Alencar. Níveis de segurança para processos de
desenvolvimento de software seguro. Universidade Federal de Santa Maria
(UFSM),
Santa
Maria
–
RS.
2010
Disponível
em:
<http://www.sirc.unifra.br/artigos2010/7.pdf>. Acessado em: 28 out. 2011.
SACRAMENTO, Wendell M. Utilizando Servlet Filter com JavaServer Faces.
Disponível
em:
<http://www.devmedia.com.br/articles/viewcomp.asp?comp=5331>. Acessado
em: julho de 2011.
SANS. SANS 2009: The Top Cyber Security Risks. Disponível em:
<http://www.sans.org/top-cyber-security-risks >. Acessado em: janeiro de 2011.
SECRETARIA DE LOGÍSTICA E TECNOLOGIA DA INFORMAÇÃO DO
MINISTÉRIO DO PLANEJAMENTO, ORÇAMENTO E GESTÃO. INSTRUÇÃO
NORMATIVA No. 4, DE 12 DE NOVEMBRO DE 2010: Dispõe sobre o processo
de contratação de Soluções de Tecnologia da Informação pelos órgãos
integrantes do Sistema de Administração dos Recursos de Informação e
Informática (SISP) do Poder Executivo Federal. Brasília, novembro de 2010.
Publicada no DOU No. 218, de 16 nov 2010 – Seção 1. Disponível em:
<http://www.governoeletronico.gov.br/biblioteca/arquivos/instrucao-normativano-04-de-12-novembro-de-2010/IN SLTI MP 04 2010 - V1.PDF>. Acesso em:
setembro de 2011.
SPRINGSOURCE.
Spring
Security.
Disponível
em:
<http://static.springsource.org/spring-security/site/>. Ultimo acesso em julho de
2011.
STAIR, Ralph; REYNOLDS, George. Princípios de Sistemas de Informação. Editora:
Cengage Learning. Sexta Edição 2006.
TAGIAROLI, Guilherme. Hackers vazam informações de funcionários do Exército
Brasileiro.
Atualizada
20/06/2011.
Disponível
em:<http://tecnologia.uol.com.br/ultimas-noticias/redacao/2011/06/20/hackersvazam-informacoes-de-funcionarios-do-exercito-brasileiro.jhtm>. Acessado em:
agosto de 2011.
TERRA,
Ricardo.
Segurança
da
Internet.
Disponível
em:
<http://www.ricardoterra.com.br/publicresources/PALESTRASegurancaInternet.
pdf>. Ultimo acesso em julho de 2011.
VIANA,
Fábio.
Tutorial
de
JASS.
Disponível
<http://www.guj.com.br/articles/184>. Ultimo acesso em julho de 2011.
em:
YIN, R. K. Estudo de Caso: Planejamento e Métodos. 3. ed. Porto Alegre: Bookman.
2005.
64
Glossário
A
ABNT – Associação Brasileira de Normas Técnicas.
APF – Administração Pública Federal.
API – Application Programming Interface (Interface de Programação de Aplicativos).
B
Banco de dados (base de dados) – é um conjunto de registros dispostos em
estrutura regular que possibilita a reorganização dos mesmos e armazenagem de
informação.
C
CLASP – Comprehensive, Lightweight Application Security Process.
CSRF – Cross-Site Request Forgery.
D
DoS – Denial of Service (negação de serviço).
H
HTTP – Hypertext Transfer Protocol.
I
IDE
–
Integrated
Development
Enviroment
(ambiente
desenvolvimento de software).
IEC – International Electrotechnical Commission.
IN – Instrução Normativa.
Informar - Ato de prover uma informação.
Informação - Significado que um agente extrai de um dado.
ISO – International Organization for Standardization.
J
Java EE – Java Enterprise Edition .
JDK – Java Development Kit.
integrado
para
65
M
MDA – Model Drive Architecture.
N
NBR – Norma Brasileira.
O
ORACLE – Empresa de software norte-americana.
OSVDB – Open Source Vulnerability Database.
OWASP – Open web Application Security Project.
R
RBAC – Role Based Access Control Model.
RPC – Remote Procedure Calls.
RUP – Rational Unified Process (Processo Unificado Racional)
S
SANS – Institute. Instituto SANS (SysAdmin, Audit, NetWork, Security).
SDK – Software Development Kit.
SQL – Structured Query Language.
SQL Injection – Injeção de SQL.
T
TIC – Tecnologia da Informação e Comunicação.
U
URL – Uniform Resource Locator .
W
WWW – World Wide web.
X
XSS – Cross-Site Scripting.
66
Apêndice A – Ataque de Hackers
A.1 Hackers vazam informações de funcionários do Exército
Brasileiro
Hackers brasileiros (TAGIAROLI, 2011) vazaram neste sábado (18/06/2011)
informações de quase um mil membros do Exército Brasileiro. O ataque foi feito pelo
Fatal Error Crew, mesmo grupo que atacou o site da presidência da República no
início deste ano. Eles próprios fizeram a divulgação para a imprensa, enviando por
e-mail um link com vários dados de funcionários da Força Armada.
As informações vazadas pelo Fatal Error Crew contêm o nome, número de
CPF, função e um número que, supostamente, tem relação com o cadastro militar de
funcionários da corporação. Os dados foram adquiridos por meio de um ataque à
base de dados do "Gestor de Controle de Distribuição da Água”.
Consultado sobre a divulgação de informações nesta segunda-feira (20), o
Centro de Comunicação Social do Exército informou que o Centro de Coordenação
para Tratamento de Incidentes de Rede do Exército já está trabalhando no caso e
que os dados não comprometeram a página principal da Força Armada.
Eles conseguiram as informações de um banco de dados do Exército a partir
de um ataque conhecido como injeção de SQL. Esse tipo de ação consiste,
basicamente, na exploração de falhas que levam usuários avançados de
programação a acessar o que quiserem dentro de um banco de dados.
Apesar da divulgação das informações, o grupo, consultado pela reportagem,
afirmou que não usará os dados para o mal. “Nós só queríamos expor a falta de
segurança dos servidores do Exército Brasileiro.” Além disso, um dos membros do
67
grupo, afirmou que essa não ser a primeira vez em que eles conseguiram acessar
dados do órgão e que vários outros sites do Governo do Brasil são vulneráveis.
A.2 Polícia Federal investiga ataques de hackers na internet
A Polícia Federal anunciou oficialmente nesta sexta-feira (24) que começou a
investigar a série de ataques de hackers a sites do governo nos últimos dia. Após o
ataque aos sites da Presidência, do Senado e da Receita Federal, classificados
como o maior da história da rede no Brasil, os hackers derrubaram na madrugada
desta sexta a página na internet do Instituto Brasileiro de Geografia e Estatística
(IBGE).
Segundo informações da assessoria de imprensa da Polícia Federal, as
investigações já estão em curso. Na quinta-feira, ao G1, a Polícia Federal havia
afirmado que o órgão reunia informações para monitorar as ações dos hackers. Não
serão divulgadas informações sobre a investigação para não prejudicar o trabalho
dos agentes da corporação, segundo a assessoria da PF.
O site do Ministério da Cultura também apresentou instabilidade, em
decorrência da sobrecarga de acessos por um único usuário. A equipe de
infraestrutura do ministério trabalha com a possibilidade de que o site tenha sido
alvo de hackers, mas não confirma o caso como um novo ataque. Após detectar e
neutralizar a ameaça, o site voltou a funcionar normalmente.
A página do Ministério do Esporte ficou fora do ar na manhã desta sexta, mas
por volta das 9h o acesso estava normalizado. A assessoria de imprensa da pasta
havia informado na quinta que tiraria o site do ar para que seja feita uma varredura.
Segundo a assessoria, o procedimento é padrão para o trabalho de rastreamento.
A assessoria da Empresa Brasileira de Infraestrutura Aeroportuária (Infraero),
vinculada ao Ministério da Defesa, afirma que o página da autarquia foi tirada do ar
propositalmente para reforço na segurança, para evitar possíveis ataques de
hackers.
Grupo nacionalista
No ataque ao site do IBGE, os hackers deixaram uma mensagem em que se
denominam como um grupo nacionalista, “que deseja fazer do Brasil um país
68
melhor’”. O Fail Shell, nome do grupo que "pichou" o site do IBGE, promete ainda
realizar neste mês o maior ataque a sites do governo da história.
Ao pé da página, os hackers ainda negaram ter relações com os grupos
LulzSec ou Anonymous no Brasil, que seriam "grupos sem qualquer ideologia",
segundo a mensagem deixada pelos hackers.
O LulzSecBrazil é apontado como o responsável pelos ataques que
derrubaram sites do governo na madrugada de quarta-feira (22). Foi o maior ataque
sofrido pelo governo, com mais de 2 bilhões de tentativas de acesso em um curto
período de tempo, segundo o Serviço Federal de Processamento de Dados (Serpro).
O órgão informou que o ataque não causou danos às informações disponíveis nas
páginas e partiu de servidores localizados na Itália.
A ação realizada pelos hackers na página do IBGE é diferente da que
derrubou os portais da Presidência e do governo brasileiro na quarta. No caso do
IBGE, foi feita uma “pichação” no site, ou uma alteração de página. Para derrubar os
portais do governo, os hackers utilizaram sistemas que faziam múltiplas tentativas de
acesso ao mesmo tempo, técnica batizada de “negação de serviço” e conhecida
pelas iniciais em inglês DDoS (Distributed Denial of Service).
Grupo contrário
O canal de comunicação usado pelo LulzsecBrazil foi fechado por volta das
22h desta quinta (23). A decisão foi tomada pelos administradores da rede que
também hospeda o canal usado pela operação do Lulzsec original.
Antes, o grupo divulgou na internet arquivos com supostos dados de políticos,
como a presidente Dilma Rousseff, o prefeito de São Paulo, Gilberto Kassab, o
ministro da Educação, Fernando Haddad, e o prefeito do Rio de Janeiro, Eduardo
Paes.
Um possível indício do surgimento de um grupo de piratas contrários ao
LulzSecBrazil é a divulgação de um documento que acusa um hacker de ser líder do
movimento brasileiro. Ele seria Al3XG0, um conhecido criminoso digital envolvido
com o roubo de senhas bancárias e cartões de crédito e que mantinha um site que
pegava informações de brasileiros usando uma falha no site do Ministério do
Trabalho. O documento indica também nome, RG e CPF de uma pessoa que,
segundo o texto, seria o hacker Al3XG0. Há ainda um link para uma fotografia,
supostamente do hacker.
69
O LulzSecBrazil teria ligações com o LulzSec, responsável por ataques
recentes a empresas de videogame como Sony e Nintendo, às redes de televisão
americanas Fox e PBS e a órgãos governamentais americanos como a CIA (agência
de inteligência americana) e o FBI (polícia federal), além do serviço público de saúde
britânico, o NHS.
A.3 Hackers atacaram as páginas de 105 sítios da web na UFRJ
Em 03/04/2007, segundo Almeida (2011), o grupo de crackers conhecidos
como SegmentationFault, invadiu um servidor da Universidade Federal do Rio de
Janeiro rodando FreeBSD. O servidor hospedava cerca de 105 sites os quais
tiveram a página inicial alterada (defaced).
Imagem da invasão deixada nas páginas da UFRJ.
yes… UFRJ FOI HACKEADA!
Nós hackeamos seu servidor admin. desculpe =).
defaced by S4P0
root@acd:/root# uname –a;id;uptime;pwd
FreeBSD acd.ufrj.br 4.8-RELEASE FreeBSD 4.8-RELEASE #2: Tue Aug 10 17:57:12 EST 2004
[email protected]:/usr/src/sys/compile/ACD_UFRJ i386
uid=0(root) gid=0(wheel) groups=0(wheel), 2(kmem), 3(sys), 4(tty), 5(operator), 20(staff), 31(guest)
11:51 up 20:28, 5 users, load aver¬ages: 0,16 0,34 0,47
/root
[ Contact us ]
IRC.GigaChat.NET
#SegFault
Você pode ver a lista dos ataques a empresas famosas ou do governo brasileiro realizadas pelo grupo
SegmentationFault aqui.
Lista dos sites da UFRJ quer foram atacados.
Aqui você pode ver a lista geral dos ataques do grupo SegmentationFault no mundo.
Figura 12: Ataque ao sítio da UFRJ (ALMEIDA, 2011)
70
Esta foi o maior ataque contra uma instituição federal registrado no Brasil. O
líder do grupo conhecido como s4p0, não quis revelar a falha explorada, pois diz que
existem outros sites com a mesma falha e pretende atacá-los em breve.
O grupo SegmentationFault é um dos grupos mais ativos do Brasil tendo
atacado mais de 3000 sites ao redor do mundo, destes mais de 500 são sites do
governo ou empresas famosas.
71
Apêndice B – Exemplo de URL com
Código Visível
Figura 13: Código do parâmetro visível na URL - 1 (SILVA, 2011).
Figura 14: Código do parâmetro visível na URL - 2 (SILVA, 2011).
72
Apêndice C – Controle de Acesso em
Aplicações Java EE
A plataforma Java EE adota um modelo de controle de acesso baseado em
papéis, o qual é conhecido como RBAC (Role Based Access Control).
O mecanismo de autenticação da plataforma Java EE é padronizada para
aplicações web, em como as credenciais dos usuários podem ser enviadas ao
servidor. Nas aplicações EJB não existe padrão, mas caso seja um ponto de entrada
para a aplicação (com EJB remoto), é preciso autenticar quem faz o acesso.
Em uma aplicação web, as configurações de segurança são feitas no
deployment descriptor (arquivo web.xml). É importante que as permissões sejam
atribuídas de acordo com os padrões de URL ou servlets. Todos os papéis (roles)
utilizados pela aplicação devem ser declarados a partir do elemento <security -role>
As permissões são atribuídas através de elementos <security-constraint>, que
declaram a abrangência da mesma em um elemento <web-resource-collection > e
os papéis que podem acessá-la como o elemento <auth-constraint>. A listagem 1
apresenta o trecho de um deployment descriptor para exemplificar a configuração de
segurança em uma aplicação web.
Listagem 1 (GUERRA, 2008): (com segurança)
<security-constraint>
<web-resource-collection>
<web-resource-name>Nome restrição</web-resource-name>
<url-pattern>/admin/*.servlet</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
73
<security-role>
<role-name>admin</role-name>
</security-role>
Em uma aplicação EJB (GUERRA, 2008), o controle de acesso é feito através
da permissão para invocação a métodos. Antes de ser lançado o EJB 3, essa
configuração podia ser feita no deployment descriptor (arquivo ejb-jar.xml). A
listagem 2 mostra um exemplo de como fazer essa configuração.
Todos os papéis utilizados na configuração precisam ser declarados no
elemento <security-role>. O elemento <method-permission> dá a permissão de
acesso a um ou mais métodos de um EJB. Também é possível especificar os
parâmetros do método (para o caso de sobrecarga) e se ele pertence a uma
interface local ou remota.
Se a aplicação já utilizar EJB 3, é possível fazer essa configurações de
segurança por meio de anotações. A anotação @RolesAllowed permite especificar
quais são os perfis autorizados a acessar o método anotado. As anotações
@PermitAll e @DenyAll dão respectivamente autorização a todos os usuários e
bloqueia qualquer acesso. Essas configurações podem ser sobrepostas por
configurações no deployment descriptor no momento do deploy.
Listagem 2 (GUERRA, 2008): (com segurança)
<assembly-descriptor>
<security-role>
<role-name>admin</role-name>
</security-role>
<method-permission>
<role-name>admin</role-name>
<method>
ejb-name>Fachada</ejb-name>
<method-name>criarConta</method-name>
</method>
</method-permission>
</assembly-descriptor>
Além da segurança declarativa, a plataforma Java EE fornece uma API para a
aplicação realizar verificações de forma programática.
74
Na aplicação web, os métodos que se referem à segurança podem ser
encontrados na classe HTTPServletRequest, sendo os métodos seguintes:
O
método
getUserPrincipal(),
que
retorna
uma
instância
do
java.security.Principal, que corresponde ao usuário
O método isUserInRole(), que verifica se o usuário pertence a um
determinado grupo de usuários.
Numa aplicação EJB, os métodos ficam na classe EJBContext, e seus
métodos são os seguintes:
O método getCallerPrincipal(), que possui funcionalidade análoga ao método
getUserPrincipal() da aplicação web.
O método isCallerInRole(), que possui funcionalidade análoga ao método
isUserInRole() da aplicação web.
Porém,
os métodos acima mencionados,
são utilizados mais para
funcionalidades do que segurança. Por exemplo: exibir um campo, um botão ou link,
somente se o usuário for um administrador ou verificar se o usuário não é um
supervisor.
Em uma aplicação web, as informações sobre o usuário podem ser mantidas
em sua sessão, ficando acessíveis em qualquer parte da aplicação web. Uma das
opções para implementar o controle de acesso (GUERRA, 2008) na camada web de
um aplicativo é a utilização de um “filtro”. O filtro intercepta cada requisição e verifica
se o usuário possui permissão de acesso antes de ela começar a ser processada
pelo servlet responsável. O filtro deve ser configurado para interceptar os servlets
que devem ser protegidos no arquivo “web.xml”. A listagem 3 apresenta um exemplo
de como deveria ser configurado um filtro para controle de acesso. No exemplo, o
filtro recupera um objeto com dados do usuário da sessão, o mapa de parâmetros
recebidos e a URI acessada pelo usuário e chama um método na classe
AccessControlPolicy, a qual irá ou não autorizar o acesso. Caso o acesso não seja
autorizado, uma exceção será lançada com os dados do acesso realizado.
Listagem 3 (GUERRA, 2008): (com segurança)
public class AccessControlFilter implements Filter{
private AccessControlPolicy policy;
public void init(FilterConfig filterConfig){
policy = new AccessControlPolicy();
75
}
Public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpSession session = ((HttpServletRequest) request).getSession();
User user = (User) session.getAttribute(“user”);
Map parameters = request.getParameterMap();
String uri = ((HttpServletRequest) request).getRequestURI();
}
If (policy.authorizeAccess(user, uri, parameters)){
Chain.doFilter(request, response);
} else {
throw new AccessControlViolationException(user, uri, parameters);
}
public void destroy(){
}
}
A implementação do controle de acesso em aplicações EJB é um pouco mais
complicada (GUERRA, 2008), por não existir um local centralizado onde as
informações sobre o usuário possam ficar mais acessíveis. Uma das formas de se
fazer isso é utilizar o mecanismo de autenticação do container, porém recuperar o
usuário utilizando o método getCallerPrincipal() e implementar um controle de
acesso próprio. Porém, existe a desvantagem de caso sejam necessárias outras
informações do usuário ausentes na instância de Principal recuperada, elas deverão
ser recuperadas a cada acesso. Outra possibilidade é manter um stateful session
bean como fachada para os acessos a aplicação, onde inicialmente recebe as
credenciais e autentica o usuário e faz uma verificação da permissão a cada acesso
feito.
A listagem 4 mostra um exemplo de como essa estratégia pode ser criada.
No constructor do bean é criada uma instância de AccessControlPolicy, sendo essa
a classe responsável por autorizar ou não o acesso de acordo com um modelo de
controle de acesso adotado. O método authenticateUser() é responsável por
autenticar o usuário e armazená-lo na variável user, a qual irá manter esse estado
durante as chamadas de método devido à natureza stateful do bean. Todo método
de uma das business interface do bean será interceptado pelo método
verifyAccess(), devido à anotação @AroundInvoke. Esse método só permite que o
76
método seja chamado caso o método authorizedAccess() confirme que o usuário foi
autenticado e possui aquela permissão. Esse método além de receber o método
chamado também recebe os seus parâmetros, permitindo assim que os dados
recebidos sejam levados em consideração pelo controle de acesso. O EJB
BusinessSession
negócio
ilustra outros beans que possuem efetivamente as regras de
e são acessados pelos clientes através da fachada. Esses beans
protegidos pela fachada devem possuir apenas interface local, para que a
verificação do controle de acesso não venha a ser contornada.
Listagem 4 (GUERRA, 2008): (com segurança)
@Stateful
public class SecurityFacadeBean implements SecurityFacadeRemote{
@EJB
private BusinessSessionLocal businessSessionBean;
@EJB
private AuthenticationLocal authenticationBean;
private User user;
private AccessControlPolicy policy;
public SecurityFacadeBean({
policy = new AccessControlPolicy();
}
public void authenticateUser(User user){
if (authenticationBean.authenticateUser(user)){
this.user = user;
} else {
throw new AuthenticationException(user);
}
}
@AroundInvoke
public Object verifyAccess( InvocationContext ) throws Exception {
final Method method = context.getMethod();
final Object[] parameters = context.getParameters();
if (method.getName().equals(“authenticateUser”) ||
(user != null &&
policy.authorizeAccess(user,method,parameters))){
return context.proceed();
} else {
throw new AccessControlViolationException(
user,method, parameters);
}
77
}
public void executeBusinessRule(){
BusinessSessionBean.businessRule();
}
//outros métodos do negócio
}
78
Apêndice D – Demonstração de Alguns
Tipos de Ataques em Código Java EE
Para mitigar um ataque de Injeção de SQL, segundo Terra(2011), temos que
compreender que o objetivo do hacker é injetar um comando SQL ou algum
comando como o valor de entrada de algum campo de um formulário web. Todos os
parâmetros passados são direcionados para o banco de dados, de modo que o
atacante pode manipular com as tabelas e dados diretamente.
Exemplo em Java da codificação com vulnerabilidade em JDBC (sem
segurança), que era praticada pelas equipes de desenvolvimento da InfoTIC na
universidade Z:
public boolean onLogon(String nome, String senha){
boolean result = false;
Connection conn = null;
try {
conn = ServiceLocator.getConnection();
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("select a from USUARIO where NOME = '"
+ nome + "' and SENHA = '" + senha + "'");
result = rs.next();
...
} catch (SQLException e) {
...
} finally {
...
}
return result;
}
RESULTADOS1 (sem segurança):
ESPERADO: nome:joao e senha:maria
Quando submetido à query será montada como a seguinte:
79
select a from USUARIO where NOME = ‘joao’ and SENHA = ‘maria’
NÃO ESPERADO: nome:xyz’-- e senha:
Quando submetido à query será montada como a seguinte:
select a from USUARIO where NOME = ‘xyz’-- and SENHA = ‘’
RESULTADOS2 (sem segurança):
ESPERADO: nome:daniel e senha:catarina
Quando submetido à query será montada como a seguinte:
select a from USUARIO where NOME = ‘daniel’ and SENHA = ‘catarina’
NÃO ESPERADO: nome: z e senha: w’ or 1=1-Quando submetido à query será montada como a seguinte:
select a from USUARIO where NOME = ‘z’ and SENHA = ‘w’ or 1=1--‘
Exemplos que podem mitigar essa vulnerabilidade (com segurança), que
passaram a ser utilizados pela InfoTIC da universidade Z:
1) Utilizando JDBC e PreparedStatement
String txtSQL = "select a from USUARIO where NOME = ? “
+ ” and SENHA = ? ";
conn = ServiceLocator.getConnection();
PreparedStatement pst = conn.prepareStatement(txtSQL);
pst.setString(1,nome);
//se essas duas linhas forem omitidas,
pst.setString(2,senha);
//o PreparedStatement fica vulnerável,
ResultSet rs = pst.executeQuery();
result = rs.next();
2) Utilizando Named Parameters em JPA ou Hibernate
String txtSQL = "select a from USUARIO where NOME = ‘:nome’ “
+ ” and SENHA = ‘:senha’ ";
q = entityManager.createQuery(txtSQL);
q.setParameter(“nome”, nome);
q.setParameter(“senha”, senha);
80
Ataque de XSS Cross Site Scripting, segundo Terra(2011), é uma
vulnerabilidade tipicamente encontrada em aplicações web, que permitem injeção de
código por usuários maliciosos em páginas vistas por outros usuários. Temos por
exemplo código HTML e scripts executados no lado do cliente (JavaScript).
Exemplo em Java da codificação com vulnerabilidade (sem segurança), que
era praticada pelas equipes de desenvolvimento da InfoTIC na universidade Z:
1) Utilizando código JSP vulnerável a um ataque XSS refletido
<% String usuarioID = request.getParameter(“id”); %>
...
ID do Usuario: <%= usuarioID %>
2) Utilizando código SERVLET vulnerável a um ataque XSS refletido
Out.writeln(“Pesquisa por:” + request.getParameter(“q”));
3) Utilizando código SERVLET vulnerável a um ataque XSS armazenado
String txtSQL = "select a from USUARIO where NOME = ? “
+ ” and SENHA = ? ";
conn = ServiceLocator.getConnection();
PreparedStatement pst = conn.prepareStatement(txtSQL);
pst.setString(1,nome);
pst.setString(2,senha);
ResultSet rs = pst.executeQuery();
result = rs.next();
OBS.: Esse exemplo é o mesmo utilizado para evitar a injeção de SQL.
Porém o mesmo não previne contra o XSS armazenado, pois os dados vêm do
banco de dados e são enviados para a página HTML (ou JSP) sem a validação :
out.writeln(“<tr><td>” + rs.getString(“nome”)+“<tr><td>” + rs.getString(“comentário”)
+“<td><tr>” );
Exemplos de códigos que previnem contra o escape de
caracteres (com
segurança), que mitigam essa vulnerabilidade, que passaram a ser utilizados pela
InfoTIC da universidade Z:
81
a. Escape de caracteres sensíveis a JSP , HTML e XML
//JSF comandos seguros
<h:outputText value=”#{param.nome}”/>
<h:outputText escape=”true” value=”#{param.nome}”/>
// o parâmetro escape possui o valor padrão igual a “true”.
//JSP comandos seguros
<c:out value=”#{param.nome}”/>
<c:out escapeXml=”true” value=”#{param.nome}”/>
// o parâmetro escapeXml possui o valor padrão igual a “true”.
//JSF comandos inseguros, pois não utiliza o escape
<h:outputText escape=”false” value=”#{param.nome}”/>
//JSP comandos inseguros, pois não utiliza o escape
${param.nome}”/>
<c:out escapeXml=”false” value=”#{param.nome}”/>
b. Filtro que permite caracteres autorizados
//Esse código deve ser utilizado dentro de um ServletFilter, a fim de permitir
//que toda a aplicação a utilize.
//A expressão só permite o uso de espaços e os caracteres: a-zA-Z_0-9’-‘e”
//sejam passados adiante
String strExemplo = “[\\s\\w-,]*”;
Pattern padrão = Pattern.compile(strExemplo);
Validate(stringToValidate, padrao);
A conjunção de três fatores contribui grandemente para que haja segurança
cibernética nos aplicativos web, tais como: boas práticas de codificação,
metodologia adequada (projeto, arquitetura, etc.), e testes.
82
Apêndice E – Processo de
Desenvolvimento Seguro CLASP
O processo CLASP (OWASP, 2010), é apresentado através de cinco níveis
de perspectivas chamado Visões CLASP. Estes pontos de vista são divididos em
atividades, que por sua vez contêm componentes do processo.
Na Figura 15, conforme Holanda e Fernandes (2011, p. 26), vemos a
organização de cima para baixo por peças que interagem, e como aplicá-los ao seu
ciclo de vida do desenvolvimento de software específico. Estas são as Visões
CLASP:
I. Visão de Conceito;
II. Visão Baseado em Regras;
III. Visão de Avaliação de Atividades;
IV. Visão de Implementação de Atividades;
V. Visão de Vulnerabilidade.
. A Visão Conceitual (I) apresenta uma visão geral de como funciona o
processo CLASP e como seus componentes interagem. São introduzidas as
melhores práticas, a interação entre o CLASP e as políticas de segurança, alguns
conceitos de segurança e os componentes do processo.
A Visão baseada em Regras (II) introduz as responsabilidades básicas de
cada membro do projeto (gerente, arquiteto, especificador de requisitos, projetista,
implementador, analista de testes e auditor de segurança) relacionando-os com as
atividades propostas, assim como a especificação de quais são os requerimentos
básicos para que cada função.
83
A Visão de Avaliação de Atividades (III) descreve o propósito de cada
atividade, bem como o custo de implementação, a aplicabilidade, o impacto relativo,
os riscos em caso de não aplicar a atividade.
A Visão de Implementação (IV) descreve o conteúdo das 24 atividades de
segurança definidas pelo CLASP e identifica os responsáveis pela implementação,
bem como as atividades relacionadas.
A Visão de Vulnerabilidades (V) possui 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
atividade também é realizada técnicas de mitigação e avaliação de risco. Assim
como período de A & M (Avoidance e Mitigation) por fase do SDLC.
Figura 15: Visões do CLASP. Adaptado de OWASP(2010).
84
Apêndice F – Mapa Conceitual:
Desenvolvimento do Software com
Código Seguro
Figura 16: Mapa conceitual do software com código seguro (SILVA, 2011)
85
Apêndice G – Código-fonte de Uma
Aplicação Web Sem Código Seguro
//Arquivo: pagAcesso.jsp
<%@page contentType="text/html" pageEncoding="ISO-8859-1"%>
<%@ page import="javax.servlet.http.HttpSession" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>P&aacute;gina de acesso (1)</title>
<link rel="stylesheet" type="text/css" href="estiloufrj.css" />
</head>
<body>
<div align="center">
<form action="verificaSenha.jsp" method="post" name="login">
<table align="center" bgcolor="beige" border="0"
cellspacing="0" cellpadding="0" width="600">
<tr>
<td bgcolor="azure" align="center" colspan="2">
<%@ include file="/WEB-INF/jspf/Cabec.jsp" %>
<h3 class="marinho">Acesso ao Sistema</h3>
</td>
</tr>
<tr>
<td align="right"><br />Funcion&aacute;rio:&nbsp;&nbsp;</td>
<td align="left"><br />
<input type="text" name="usuario" value="" size="15" maxlength="15">
</td>
</tr>
<tr>
<td align="right"><br />Senha:&nbsp;&nbsp;</td>
<td align="left"><br />
<input type="password" name="senha"
value="" size="15" maxlength="15"></td>
</tr>
<tr>
<td colspan="2" align="center">
<br />
<input type="submit" value="Enviar" name="enviar" /> &nbsp;
<input type="reset" value="Limpar" name="limpa" /> &nbsp;
86
<input type="button" value="Voltar"
name="volta" onclick="javascript:history.back(-1)"/>
<br />
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
---------------------------------------------//-----------------------------------------------//Arquivo: verificaSenha.jsp
<%@page contentType="text/html" pageEncoding="ISO-8859-1"%>
<%@page import="java.sql.*, sga.BeanFuncionario" %>
<%@ page import="javax.servlet.http.HttpSession" %>
<jsp:useBean id="login" scope="request" class="sga.BeanFuncionario" />
<jsp:setProperty name="login" property="usuario" param="usuario" />
<jsp:setProperty name="login" property="senha" param="senha" />
<% HttpSession ssga = request.getSession(false);
String usuario = (String) request.getParameter("usuario");
String senha = (String) request.getParameter("senha");
String nivelac = (String) request.getParameter("nivelac");
String logado = (String) request.getParameter("logado");
BeanFuncionario usu = new BeanFuncionario(usuario, nivelac, senha);
String logado1 = "";
//acesso padrão ALUNO
String nivelac1 = "";
//nível padrão 0 para ALUNO
String senha1 = "";
boolean entrada = false;
ResultSet rslogin = login.consultaFunLogin();
if ((usuario != null) && (senha != null)) {
while (rslogin.next()) {
logado1 = rslogin.getString("usuario");
nivelac1 = rslogin.getString("nivel");
senha1 = rslogin.getString("senha");
System.out.println("Usuario: " + logado1 );
System.out.println("Senha: " + senha1 );
System.out.println("Nível: " + nivelac1 );
System.out.println("Entrada antes: " + entrada);
if (usuario.equals(logado1)) {
if (senha.equals(senha1)) {
entrada = true;
System.out.println("Entrada depois: " + entrada);
nivelac = ssga.getAttribute("nivelac").toString();
logado = ssga.getAttribute("logado").toString();
}
}
break;
}
87
if (entrada) {
ssga.setAttribute("logado", logado1);
ssga.setAttribute("nivelac", nivelac1);
ssga.setAttribute("sessao", "autorizado");
}
}%>
<jsp:forward page="/pagAutorizado.jsp" />
---------------------------------------------//-----------------------------------------------//Arquivo: BeanFuncionario.java
public ResultSet consultaFunLogin() {
stmt2 = null; conecta2 = null; rs2 = null; int conta = 0;
try {
Class.forName(classe2);
System.out.println("Classe carregada com SUCESSO!");
} catch (ClassNotFoundException cnfe) {
permissao2 = false;
System.out.println("Classe nao foi carregada!");
}
try {
conecta2 = DriverManager.getConnection(url2, user2, password2);
System.out.println("Conexao feita com SUCESSO!");
} catch (SQLException sqlecon) {
permissao2 = false;
System.out.println("Erro ao conectar o Banco de dados '" + url2 + "' !");
}
try {
//consulta os registros cadastrados
tsql = "select * from funcionarios where usuario = '" + usuario + "'" +
" and senha = '" + senha + "'";
stmt2 = conecta2.createStatement();
rs2 = stmt2.executeQuery(tsql);
permissao2 = true;
System.out.println("Consulta bem sucedida!");
return rs2;
} catch (SQLException sqlex2) {
System.out.println("Consulta mal sucedida!" + "\n "+ usuario + "\n " + senha);
permissao2 = false;
}
return null;
}
Observação:
Este código sem segurança está aqui como exemplo. O mesmo já foi modificado no
sistema que está sendo desenvolvido na InfoTIC, após a equipe ficar sabendo das
diversas vulnerabilidades informadas pelos institutos de segurança.