Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 SEGURANÇA EM SISTEMAS WEB 1 SUMÁRIO NOSSA HISTÓRIA .......................................................................................... 2 A internet ......................................................................................................... 3 Ataques a web ................................................................................................. 4 ABORDAGEM TEÓRICA SOBRE SEGURANÇA NO DESENVOLVIMENTO DE APLICAÇÕES WEB ............................................................................................. 6 sEGURANÇA EM APLICAÇÕES WEB ........................................................... 8 Práticas de Segurança em Aplicações Web .................................................. 14 plano de segurança para aplicações web ...................................................... 15 inventário das aplicações web ....................................................................... 15 Priorização das aplicações web ..................................................................... 16 Executar aplicativos usando o mínimo de privilégios ..................................... 17 Proteja-se mesmo durante o processo de avaliação ..................................... 18 uso cookies de forma segura ......................................................................... 19 Treinamentos para Conscientização de Segurança em Aplicações Web ...... 20 Testes de segurança nas aplicações são essenciais .................................... 20 Cuidados a serem tomados na implantação .................................................. 22 REFERENCIAS ............................................................................................. 24 2 NOSSA HISTÓRIA A nossa história inicia com a realização do sonho de um grupo de empresários, em atender à crescente demanda de alunos para cursos de Graduação e Pós- Graduação. Com isso foi criado a nossa instituição, como entidade oferecendo serviços educacionais em nível superior. A instituição tem por objetivo formar diplomados nas diferentes áreas de conhecimento, aptos para a inserção em setores profissionais e para a participação no desenvolvimento da sociedade brasileira, e colaborar na sua formação contínua. Além de promover a divulgação de conhecimentos culturais, científicos e técnicos que constituem patrimônio da humanidade e comunicar o saber através do ensino, de publicação ou outras normas de comunicação. A nossa missão é oferecer qualidade em conhecimento e cultura de forma confiável e eficiente para que o aluno tenha oportunidade de construir uma base profissional e ética. Dessa forma, conquistando o espaço de uma das instituições modelo no país na oferta de cursos, primando sempre pela inovação tecnológica, excelência no atendimento e valor do serviço oferecido. 3 A INTERNET A internet é um conjunto de redes interligadas. Utilizando determinadas regras para a comunicação entre os computadores, conhecidos como protocolos de comunicação, as redes locais se ligam à redes de capacidades extremamente altas(Backbones), sustentados por agências governamentais ou corporações privadas, que por sua vez se conectam à outros backbones, criando assim uma rede mundial. A internet ja tem por volta de sessenta anos e, nesse tempo tem crescido extremamente rápido, com o rítimo acelerado do desenvolvimento tecnológico. Inúmeras possibilidades foram criadas e popularizadas com essa evolução, como a compra e venda de produtos, as transações bancárias e a socialização por intermédio da rede. NOVA YORK […] Gastos de consumidores com compras on-line alcançaram US$ 38 bilhões no primeiro trimestre[...](O Globo, 2011) O internet banking brasileiro já é o segundo canal de serviços mais utilizado pelos clientes, atrás apenas dos caixas automáticos (31%), respondendo por 23% das operações bancárias efetuadas no Brasil, segundo dados da Febraban (Federação Brasileira de Bancos), informa reportagem de Felipe Vanini Bruning para a Folha. (Folha, 2011) Devido à comodidade desses novos serviços, a tendência é um crescimento ainda maior e, com esse intenso tráfego de informações de grande importância e/ou sigilo, como informações pessoais e econômicas, fica evidente o aumento da necessidade de segurança online. As fraudes de R$ 900 milhões registradas entre os anos de 2009 e 2010, de acordo com a Federação Brasileira de Bancos (Febraban) estão criando um cenário onde é cada vez maior a preocupação do setor de transações on-line (internet banking), bem como das empresas fabricantes de softwares de segurança em criar soluções para atender a este mercado. (Diário Comércio Indústria e Serviços, 2011) A Web é formada por diversos tipos de serviços como o World Wide Web (WWW), o File Transfer Protocol(FTP), o correio eletrônico, o Internet Relay Chat (IRC) e o Telnet. O World Wide Web (WWW) é a própria navegação em sites e utiliza o protocolo Hyper Text Transfer Protocol (htttp). O File Transfer Protocol (FTP) é um protocolo que serve para a transferência de arquivos pela internet, de forma rápida e 4 eficiente. Utilizando os protocolos Post Office Protocol(POP) ou o Simple Mail Transfer Protocol(SMTP), o serviço correio eletrônico é responsável pela troca de dados entre computadores ou E-mail. O Internet Relay Chat (IRC) é um serviço da internet que permite a troca de mensagens de texto, entre os usuários, em tempo real. E, finalmente o Telnet é um serviço que permite o acesso à outros computadores na rede. ATAQUES A WEB O primeiro grande ataque ocorreu em 1988, quando um estudante da universidade de Cornell criou um worm, programa que se propaga através de vulnerabilidades ou falhas de configuração de software criando cópias de si mesmo. O ataque atingiu mais de 6000 computadores dos 60000 que constituíam a internet. Este ataque levantou questões de segurança, que até o momento não eram consideradas já que a internet era um ambiente pequeno visto como amigável por seus desenvolvedores e usuários. 15 dias depois foi criada a CERT(Conputer Emergency Response Team), equipe que estuda vulnerabilidades de segurança na internet, pesquisa mudanças a longo-prazo em sistemas de rede e desenvolve informação e treinamento para auxiliar a melhorar a segurança. Nos anos 90 surgiram o www, os browsers netscape e internet explorer e, com isso, as ferramentas de busca como o google e o yahoo, os spams, o hotmail (ferramenta de email na web), o comércio digital e os blogs. Em 97, a web já possuia mais de 1.000.000 de sites. Nessa década, são popularizados os cavalos de Tróia, sniffers e ataques de negação de serviços, alem da utilização da engenharia social. Os cavalos de tróia são programas nocivos que se passam por programas úteis ou inofensivos como por exemplo arquivos recebidos por emails de conhecidos como fotos ou apresentações de slides. Algumas funções maliciosas são: a instalação de keyloggers, programas que capturam e armazenam as teclas digitadas pelos usuários; a alteração ou destruição de arquivos e a criação de backdoors possibilitando outros ataques. Os sniffers são programas que capturam todo o tráfego de um segmento de rede e podem ser utilizados por administradores de rede, na segurança, ou por pessoas máintencionadas, para a captura de senhas, por exemplo. 5 Os ataques de negação de serviços consistem no envio de pacotes de várias origens para um alvo, com o objetivo de desativar seus serviços temporariamente. A engenharia social consiste em se passar por funcionários da empresa alvo ou autoridades interessadas em comprar ou prestar serviços para conseguir informações para o ataque, utilizando da falta de conhecimento dos usuários da rede. Entre 2002 e 2004 são criadas as redes sociais facebook e orkut e o download de musicas pela rede é cada vez maior. NoBrasil é criada a possibilidade de entrega da declaração do imposto de renda pela internet. Neste ponto existem mais de 20.000.000 de sites na web. Durante este período explode o número de códigos maliciosos como worms, bots, cavalos de tróia, vírus ou spywares. Um bot é um programa capaz de se replicar automaticamente e de se comunicar com o invasor. Por meio dessa comunicação, um invasor pode executar um ataque de negação de serviços, adquirir informações do computador hospedeiro, enviar emails de phishing(envio de mensagem em que o remetente se passa por uma instituição conhecida como bancos ou empresas para a indução de instalação de softwares mal-intencionados ou conseguir informações sigilosas) ou spam. Os vírus são programas ou partes de código, geralmente maliciosos que, ao serem executados, são ativados e inserem cópias de si mesmo em outros arquivos ou programas do computador. Spyware é uma categoria de software que monitora as atividades de um sistema e as envia para terceiros. Descrição das categorias de incidentes: -Worm: denominação utilizada para abranger notificações de atividades maliciosas relacionadas com o processo automatizado de propagação de códigos maliciosos na rede. -DoS (Denial of Service): notificações de ataques de negação de serviço. -Invasão: um ataque bem sucedido que resulte no acesso não autorizado a um computador ou rede. -Web: um caso particular de ataque visando especificamente o comprometimento de servidores Web ou desfigurações de páginas na Internet. 6 -Scan: notificações de varreduras em redes de computadores, com o intuito de identificar quais computadores estão ativos e quais serviços estão sendo disponibilizados por eles. É amplamente utilizado por atacantes para identificar potenciais alvos, pois permite associar possíveis vulnerabilidades aos serviços habilitados em um computador. -Fraude: Segundo Houaiss, é "qualquer ato ardiloso, enganoso, de má-fé, com intuito de lesar ou ludibriar outrem, ou de não cumprir determinado dever; logro". Esta categoria engloba as notificações de tentativas de fraudes, ou seja, de incidentes em que ocorre uma tentativa de obter vantagem. -Outros: notificações de incidentes que não se enquadram nas categorias anteriores. ABORDAGEM TEÓRICA SOBRE SEGURANÇA NO DESENVOLVIMENTO DE APLICAÇÕES WEB De acordo com a McAfee for Businesss4 (2014), uma das maiores ameaças que as organizações enfrentam nos dias atuais são os softwares desprotegidos, uma vez que os usuários mal intencionados voltam sua atenção para os aplicativos e softwares que formam a infra-estrutura de TI das organizações, assim a melhor forma de proteção é criar um software seguro desde o início. Seguindo a mesma linha de raciocínio Cabral. Terto (2011), afirma que processo de software é um conjunto de fatores e resultados associados desenvolvidos de forma cíclica em uma organização que produz softwares e buscam desenvolver aplicações com qualidade. Todas essas organizações adotam um processo de desenvolvimento mesmo que ele seja ineficaz. Alguns modelos de processos de software como, por exemplo: o processo unificado aberto (UP)5 , entre outros, foram concebidos em um momento histórico, onde a segurança de informação não era o foco principal até mesmo devido aos softwares não serem expostos de forma abrangente. De fato, pode--se dizer que, de forma complementar aos incidentes de segurança decorrentes de falhas ou ataques do componente humano no trato da informação, a grande maioria dos demais incidentes de segurança da informação tem 7 sua origem nas vulnerabilidades presentes no software. Um dos principais fatores causadores dessas vulnerabilidades é a codificação ingênua do software por um programador, quando o mesmo considera basicamente os cenários positivos de execução de um código, sem se preocupar com o caso de usuários maliciosos. (CABRAL; TERTO, 2011, p.10). Ainda segundo Cabral. Terto (2011), atualmente o processo de desenvolvimento de software não tem como requisito fundamental a segurança, que são influenciadas pela pressão do mercado. O desenvolvimento de um software seguro que não necessita de atualizações constantes ainda é um desafio para a indústria de desenvolvimento de software, que encontram problemas para desenvolver um produto que possibilite um gerenciamento seguro. Durante os últimos anos o número de vulnerabilidades descobertas em aplicações web superou o número encontrado em sistemas operacionais e com isso mais tentativas de ataques nessas aplicações. Com emprego de desenhos e codificação de software ingênua, que não consideram as más intenções dos usuários na outra ponta da aplicação, ou até mesmo o uso de bibliotecas de códigos de origem não confiável, torna o problema mais evidente, fazendo o uso de aplicações web arriscado. A forma mais comum de garantir que será produzido código seguro é por meio de aderência ao uso de padrões de codificação que reduzem a ocorrência de vulnerabilidades de código, chamados padrões de codificação segura, e da verificação de que os programadores a estão adotando. Tais padrões tendem a evitar a injeção de código e outros ataques. (CABRAL; TERTO, 2011, p.11). De acordo com dados levantados por Uto. Pereira (2009), as vulnerabilidades exploráveis listadas no ano de 2009, aproximadamente 80% estavam diretamente ligadas à má codificação de programas e outros 19% estavam ligados a problemas de projeto dos programas. Além disso, 40% das vulnerabilidades exploráveis do período estavam relacionados com problemas de estouro de buffers6 . Dessa forma pode-se afirmar que código não seguro representa uma grande fatia dos problemas de falha de segurança, já um é código seguro resulta em um software seguro que por sua vez consiste em uma composição de confidencialidade aplicáveis ao software. 8 Para minimizar vulnerabilidades de codificação, os desenvolvedores devem ser treinados em técnicas gerais de programação segura e nas especialidades das linguagens com as quais trabalham (UTO; PEREIRA, 2009, p.240). De acordo com o The Open Aplication Security Projet (OWASP, 2013) 7 , a medida que a infraestrutura digital se torna cada vez mais complexa e interligada, torna-se mais difícil obter segurança em aplicações. Não sendo toleráveis problemas de segurança relativamente simples. SEGURANÇA EM APLICAÇÕES WEB Aplicações web são constantes alvos de ataques, onde invasores buscam aproveitar vulnerabilidades encontradas para o roubo de informações confidenciais. Seja no ambiente corporativo ou mesmo no âmbito pessoal, os ataques podem vir a gerar prejuízos não somente pelo vazamento de informações, mas também pelos danos potenciais de uma aplicação inoperante em um determinado período de tempo. Estar vulnerável não somente significa a existência de uma falha de implementação ou erros na aplicação. O invasor pode se utilizar de algo concreto, como a relação estabelecida entre servidor e cliente para, a partir desse ponto, burlar a segurança. A seguir, serão elencadas as vulnerabilidades mais comuns em aplicações web. Cross Site Scripting ou XSS Utiliza a relação de confiança entre o servidor da aplicação e o navegador para transporte de código malicioso, que geralmente é escrito em javascript, a fim de conseguir dados sensíveis, como o identificador da sessão do usuário. Segundo OWSAP(2016), muitas aplicações permitem a postagem de conteúdo por parte de seus usuários. O XSS está ligado a esse conteúdo, que pode ser utilizado para solicitar informações ao usuário dentro da aplicação e o direcionar para fora dela. Como o navegador da vítima não consegue identificar o que corresponde ao trecho de código malicioso, este será executado assim que for detectado pelo navegador. O ataque pode ser feito utilizando também os mecanismos de busca. Se a aplicação não possuirtratamento para tal, executará o código malicioso. Outra forma 9 de fazer o ataque é inserindo no meio da página original aplicação, escrita em HTML, trechos de códigos a fim de se obter as informações desejadas. Para tornar o código ilegível e burlar mecanismos que se baseiam em tags para proteção, como por exemplo (script) ou (alert) os códigos são escritos em hexadecimal. Essa vulnerabilidade está ligada a falta de tratamento dos dados e conteúdo postado pelo usuário. A execução do código é imperceptível ao usuário infectado, já que é executada pelo navegador de forma transparente. Injeção de SQL Uma outra vulnerabilidade diz respeito a injeção de códigos com comando em Structured Query Language (SQL) para obter dados diretamente do banco. SQL corresponde a linguagem para gerenciamento dos dados utilizada pelos principais bancos de dados estruturados na modelagem relacional. Um estudo feito pela Owasp (2013) sobre vulnerabilidades em aplicações web apontou o Structured Query Language Injection, ou SQL Injection como a técnica mais utilizada no meio virtual para obtenção de dados de forma mal intencionada. O ataque visa utilizar os dados de entrada do cliente no aplicativo para conseguir dados confidenciais, modificar, excluir ou atualizar registros. Conforme Owasp (2016), a técnica afeta um número grande de aplicações disponíveis atualmente, pois a arquitetura de grande parte se baseia em banco de dados SQL. Em geral, a forma como as aplicações web constroem os comando SQL envolvem a sintaxe escrita pelos programadores com parâmetros informados pelos usuários. Dessa forma, há a possibilidade de o usuário explorar os parâmetros informados para obter dados do banco. Conforme cita OWASP(2016), esses ataques ainda podem ser classificados em 3 diferentes classes: ● Inband: os dados são extraídos usando o mesmo canal que é usado para injetar o código; ● Out-of-band: os dados são recuperados em um outro canal, como por exemplo enviados para um e mail informado; ● Inferencial: não a transferência real dos dados, porém é possível reconstruir as informações através de solicitações particulares. 10 Como a exemplo do XSS, o SQL Injection consegue ser neutralizado se os formulários, campos de pesquisa, URLs, tiverem tratamento para os dados informados pelo usuário na aplicação. Cross Site Request Forgery Utiliza a relação de confiança entre o aplicativo e seu usuário legítimo. Geralmente fazendo uso de engenharia social, para explorar essa vulnerabilidade, o atacante necessita que a vítima esteja com uma sessão ativa na aplicação alvo. Nesse momento, o ataque pode ser concluído com sucesso caso o usuário receba um link ou acesse, no mesmo navegador, o aplicativo malicioso. Dessa forma, a aplicação maliciosa ou link inclui uma requisição ao aplicativo alvo, carregando os parâmetros necessário para a conclusão da transação. Os aplicativos vulneráveis são aqueles em que as requisições são feitas de maneira estática, ou seja, sempre enviando os mesmos parâmetros para fazer a requisição. Uma alternativa para tratar as requisições do CSRF é o Synchronizer Token Pattern. Diz respeito a enviar um token como um dos parâmetros da requisição. Com isso, tem-se a garantia de que a requisição está sendo feita, de forma que o token enviado seja comparado ao token armazenado na sessão do usuário, é gerado um novo token para armazenamento na sessão. Se o token for diferente, a requisição deve ser descartada pelo servidor. Referência direta a objetos Uma referência direta a um objeto expõe os dados de um sistema aos usuários. Seja um arquivo, diretório ou a chave de uma tabela, a referência direta permite que um usuário acesse dados aos quais não tem permissão. A fragilidade encontra-se na ideia de que o usuário sempre irá seguir os caminhos preestabelecidos pela aplicação. Na própria aplicação são visualizados parâmetros que referenciam objetos internos. O usuário se aproveita dessa fragilidade para, alterando os parâmetros para ter acesso a outros dados da aplicação. Como prevenção, deve-se verificar se o usuário tem permissão para acesso ao objeto ao qual está requisitando. Broken Autenticação e Gestão de Sessões 11 O invasor utiliza-se de falhas da aplicação no gerenciamento de sessão ou na autenticação, como por exemplo, contas expostas, senhas, IDs de sessão, para representar um usuário legítimo. De acordo com Owasp (2017) deve-se verificar as seguintes diretrizes: ● As credenciais de autenticação de usuário não são protegidas quando armazenadas usando hash ou criptografia. ● As credenciais podem ser adivinhadas ou substituídas por funções de gerenciamento de contas fracas (por exemplo, criação de contas, alteração de senha, recuperação de senha, IDs de sessão fracas). ● IDs de sessão são expostos na URL (por exemplo, reescrita de URL). ● IDs de sessão são vulneráveis a ataques de fixação de sessão . ● IDs de sessão não timeout, ou sessões de usuário ou tokens de autenticação, particularmente single sign-on (SSO) tokens, não são devidamente invalidados durante logout. ● Os IDs de sessão não são rodados após o login bem-sucedido. ● Senhas, IDs de sessão e outras credenciais são enviadas através de conexões não criptografadas. Por exemplo, se alguém utiliza um computador público para acesso a uma determinada aplicação e, ao invés de fazer logout, apenas fecha o navegador, corre o risco de ter deixado a sessão ativa por um tempo, deixando aberta a possibilidade de que uma outra pessoa utilize-se dessa conta para obter dados. Insufficient Logging & Monitoring Um sistema sem logs, não consegue detectar que em algum lugar de sua API/Sistema alguém está tentando explorar alguma falha. Muitos desenvolvedores são resistentes a implementar um módulo de logs no seu sistema, principalmente devido ao peso destes dados no banco. Se este for o problema, defina um período de auto-exclusão do log que você pode suportar. Um mês é o mínimo! Outra solução é o monitoramento em tempo real, que permite a você e sua equipe perceber comportamentos estranhos no seu sistema, como picos ou quedas absurdas de acesso. Assim, é importante manter painéis de informações ao vivo da sua aplicação, normalmente em monitores ou televisões sempre ligados nesta tela, com alertas sonoros caso julgue necessário. 12 Sensitive Data Exposure As ferramentas de inspecionar elementos em uma página ou aplicação web, como o Chrome DevTools, estão entre as ferramentas preferidas dos desenvolvedores, e também dos hackers mal-intencionados. Muitas APIs não protegem devidamente as informações que são transmitidas através delas, o que permite que invasores tirem proveito dos parâmetros retornados por ela, simplesmente inspecionando a aba ‘network’ do seu sistema. Quanto a isso, é necessário dedicar uma atenção especial ao definir como estas informações vão trafegar pela interface, e criptografá-las devidamente. XML External Entities (XXE) Esta vulnerabilidade é específica de sistemas que trabalham com a linguagem XML, como por exemplo, software emissores de documentos fiscais eletrônicos. Invasores podem explorar processadores de XML vulneráveis, onde é possível injetar códigos maliciosos e enviar para uma aplicação que fará a leitura desse XML. Broken Access Control Essa falha ocorre em aplicações que possuem páginas, rotas com informações que apenas o administrador deveria ter acesso, porém o controle de usuários não funciona. Neste formato, o hacker consegue autenticar-se como administrador, e a partir daí, acessar, copiar e até excluir seus dados. Para prevenir problemas de broken access control, é necessário que a validação do perfil de acesso venha do seu servidor, e não possa ser alterada externamente. Security Misconfiguration Se trata de configurações padrão de fábrica, informações abertasna nuvem, headers http configurados incorretamente, erros verbosos que indicam com precisão o motivo do erro. 13 A solução desse problema é bem simples: sempre lembre-se de excluir os arquivos e configurações default dos frameworks que utilizar. Alguns frameworks vão te lembrar disso após a instalação. Outros, não. Insecure Deserialization Falha muito utilizada para execução remota de códigos maliciosos. Mesmo quando essa falha de segurança não resulta em um acesso remoto por parte do hacker, ele podem utilizar a brecha para uma escalação de privilégios, configurando- se como administrador. Using Components with Known Vulnerabilities Mesmo que sua aplicação esteja desenvolvida seguindo um padrão seguro, as bibliotecas de terceiros que sua aplicação utiliza podem possuir falhas que são conhecidas na internet. Isso resulta em exploits, softwares prontos para serem utilizados para uma invasão. Assim, é necessário ficar atento a possíveis vulnerabilidades de todos os componentes, bibliotecas e APIs que você irá consumir em seu software. Insufficient Logging & Monitoring Um sistema sem logs, não consegue detectar que em algum lugar de sua API/Sistema alguém está tentando explorar alguma falha. Muitos desenvolvedores são resistentes a implementar um módulo de logs no seu sistema, principalmente devido ao peso destes dados no banco. Se este for o problema, defina um período de auto-exclusão do log que você pode suportar. Um mês é o mínimo! Outra solução é o monitoramento em tempo real, que permite a você e sua equipe perceber comportamentos estranhos no seu sistema, como picos ou quedas absurdas de acesso. Assim, é importante manter painéis de informações ao vivo da sua aplicação, normalmente em monitores ou televisões sempre ligados nesta tela, com alertas sonoros caso julgue necessário. 14 PRÁTICAS DE SEGURANÇA EM APLICAÇÕES WEB Os sites podem ser afetado por algum tipo de ataque DDoS, como o grande ataque que a empresa Dyn sofreu no final de 2016 derrubando milhares de sites relevantes, então você sabe que esta é uma grande preocupação. Como mostrado no gráfico abaixo, o número de ataques DDoS têm crescido consistentemente ao longo dos últimos anos e a tendência é que isso continue piorando. Ataques DDoS ocorrem na camada de rede, são por natureza volumétricos (em sua maioria) e dependem do seu provedor de hospedagem, datacenter ou CDN para serem apropriadamente mitigados. Normalmente, quando ocorrem, os provedores de infraestrutura tomam as providências necessárias para restabelecer o serviço. Subindo alguns níveis no modelo OSI, voltemos à camada de aplicação. Embora não haja maneira de garantir 100% de segurança, pois é impossível prever tudo, existem medidas que podem ser utilizadas para reduzir as chances de ocorrência de problemas de segurança em aplicativos web. Quanto mais destas medidas forem tomadas simultâneamente, mais protegida estará sua aplicação. 15 PLANO DE SEGURANÇA PARA APLICAÇÕES WEB O primeiro passo para assegurar-se que se está utilizando as melhores práticas de segurança para aplicações web é ter um plano traçado. Com frequência as empresas adotam uma abordagem desorganizada para esta situação e acabam realizando muito pouco. Sente-se com sua equipe de segurança de TI para desenvolver um plano de segurança detalhado e acionável. É importante que este plano esteja alinhado com os objetivos da sua organização. Por exemplo, talvez você queira melhorar seu compliance, ou talvez você precise proteger sua marca. É necessário priorizar quais aplicativos devem ser protegidos primeiro e como eles serão testados. Você pode optar por fazê-lo manualmente, através de uma solução em nuvem, através de software específico, de um provedor de serviços gerenciados ou por outros meios. Embora o plano de segurança e a lista de verificação de cada empresa sejam diferentes e dependam da arquitetura de sua infraestrutura, é importante que você defina especificamente quais os requisitos de segurança a serem atendidos e os critérios para avaliação. A OWASP (Open Web Application Security Project), grupo especializado em segurança online, criou um checklist bem detalhado que você pode utilizar como base para a sua avaliação. Além disso, se sua organização é grande o suficiente, seu plano deve relacionar os indivíduos dentro da organização que serão responsáveis pela manutenção contínua dessas melhores práticas. Finalmente, não se esqueça de levar em conta os custos em que sua organização incorrererá ao engajar essas atividades, pois este pode ser um fator decisivo na hora de priorizar. INVENTÁRIO DAS APLICAÇÕES WEB É provável que você não tenha uma ideia muito clara sobre quais aplicativos web sua empresa utiliza. Na verdade, a maioria das organizações tem muitos aplicativos “rogue” rodando sem saber, até que algo dê errado. Você não pode esperar manter uma boa política de segurança em aplicações web sem mapear detalhadamente quais aplicativos sua empresa utiliza. 16 Quantos são? Onde estão localizados? Executar esse inventário pode ser uma tarefa trabalhosa e é provável que leve algum tempo até sua conclusão. Ao fazê-lo, anote a finalidade de cada aplicação. Quanto maior a organização, maiores as chances de encontrar aplicações redundantes ou até mesmo inúteis. O inventário virá a calhar para as próximas sugestões, por isso invista o tempo necessário e certifique- se de obter os detalhes de cada aplicação utilizada. PRIORIZAÇÃO DAS APLICAÇÕES WEB Depois de concluir o inventário de seus aplicativos web, classificá-los em ordem de prioridade é o próximo passo lógico. Sem priorizar quais aplicativos focar primeiro, você terá dificuldade em fazer qualquer progresso significativo. Classifique as aplicações em três categorias: Crítico Importante Norma As aplicações críticas são principalmente aquelas que podem ser acessadas externamente e contém informações de clientes. Estas são as aplicações que devem ser geridas em primeiro lugar, pois são as mais suscetíveis como alvos a serem exploradas por hackers. As aplicações importantes podem ser de uso interno ou externo e podem conter algumas informações confidenciais. Aplicações normais têm muito menos exposição, mas devem ser incluídas em testes por precaução, mesmo que em um segundo momento. Categorizando suas aplicações assim você pode focar testes extensivos nas aplicações críticas e usar testes menos complexos (e caros) nas demais. Isso permite que você faça o uso mais eficaz dos recursos da empresa ao mesmo tempo em que pode alcançar resultados significativos com maior velocidade. Conforme você avalia sua lista de aplicativos web antes de testá-los, é necessário decidir quais vulnerabilidades valem a pena eliminar e quais não são tão preocupantes. A maioria das aplicações web tem muitas vulnerabilidades. Por exemplo, dê uma olhada no relatório abaixo, que avaliou e categorizou 9000 sites infectados: 17 Eliminar todas as vulnerabilidades de todas as aplicações web não só não é possível como nem mesmo vale o seu tempo. Mesmo depois de categorizar suas aplicações de acordo com a importância, será necessário um investimento considerável de recursos para analisá-las. Limitando os testes apenas às vulnerabilidades mais ameaçadoras, você economizará muito tempo e fará o trabalho muito mais rápido. Quanto à determinação das vulnerabilidades a serem focadas, isso realmente depende das aplicações que você está usando. Existem algumas medidas de segurança padrão que devem ser implementadas (discutidas mais adiante), porém vulnerabilidades específicas de aplicativos precisam ser pesquisadas e analisadas. Mantenha em mente também que, à medida que o teste evolui, você pode perceber que ignorou certas questões importantes. Não tenhamedo de interromper os testes para redefinir prioridades ou focar em vulnerabilidades adicionais. Lembre- se que no futuro este trabalho será muito mais fácil, pois será iterativo, o esforço inicial é o mais trabalhoso. EXECUTAR APLICATIVOS USANDO O MÍNIMO DE PRIVILÉGIOS Mesmo depois que todas as suas aplicações web forem avaliadas, testadas e sanitizadas contra as vulnerabilidades mais problemáticas, você não está a salvo. Cada aplicativo web possui privilégios específicos em computadores locais e remotos. Esses privilégios podem, e devem, ser ajustados para aumentar a segurança. Sempre 18 use as configurações menos permissivas para todas as aplicações web. Isso significa que as aplicações devem ser “amarradas”. Somente pessoas com autorizações de alto nível devem poder fazer alterações no nível de sistema. Este é um fator a ser considerado em suas avaliações iniciais, caso contrário você terá que repassar toda a lista ajustando as permissões de acordo. Para a vasta maioria das aplicações apenas os administradores de sistemas necessitam de acesso completo. A maioria dos outros usuários pode realizar o necessário com configurações minimamente permissivas. No caso improvável em que privilégios são ajustados incorretamente para um aplicativo e certos usuários não podem acessar os recursos de que precisam, o problema pode ser tratado pontualmente. É muito melhor ser demasiado restritivo nesta situação do que ser demasiado permissivo. PROTEJA-SE MESMO DURANTE O PROCESSO DE AVALIAÇÃO Mesmo uma empresa pequena e simples pode levar semanas – ou até meses – para listar seus aplicativos web e fazer as alterações necessárias. Durante esse período o negócio pode estar vulnerável a ataques, portanto é crucial utilizar as ferramentas adequadas para evitar maiores problemas. Para isso existem algumas opções: Remover funcionalidades de determinados aplicativos: se a funcionalidade torna o aplicativo mais vulnerável a ataques pode valer a pena restringir o seu uso. Use um WAF (Web Application Firewall) para proteção contra as vulnerabilidades mais preocupantes. O firewall de aplicação web filtra e obstrui tráfego HTTP indesejável e ajuda a blindar contra XSS, SQL injection e muito mais. 19 Durante todo o processo as aplicações web existentes devem ser monitoradas continuamente, para assegurar que não estão sendo violadas por terceiros. Se sua empresa, ou site, sofre um ataque durante este período, identifique o ponto fraco e faça a correção antes de continuar com o processo de checagem e sanitização. Você deve adquirir o hábito de documentar cuidadosamente as vulnerabilidades e como elas devem ser tratadas, para que as ocorrências futuras possam ser solucionadas de forma mais rápida e eficaz. USO COOKIES DE FORMA SEGURA Outra área que muitas organizações não aborda cuidadosamente é o uso de cookies. Os cookies são incrivelmente convenientes, tanto para empresas quanto para usuários. Eles permitem que os usuários sejam lembrados pelos sites que visitam, para que visitas futuras sejam mais rápidas e, em muitos casos, mais personalizadas. No entanto, cookies também podem ser manipulados por hackers para obter acesso a áreas protegidas. Apesar de não ser necessário interromper completamente o uso de cookies – o que seria um grande retrocesso em muitos aspectos – é necessário fazer ajustes a fim de minimizar o risco de ataques. 1. Nunca use cookies para armazenar informações altamente sensíveis ou críticas, por exemplo não use cookies para lembrar as senhas dos usuários, pois isso facilita muito aos hackers a obtenção de acesso não autorizado. 2. Você também deve ser conservador ao definir o prazo de expiração para os cookies. Claro, é bom saber que um cookie permanecerá válido para um usuário por meses, mas a realidade é que cada cookie representa um risco de segurança e quanto mais tempo durar, maior o tempo de exposição ao risco. 3. Finalmente, considere criptografar as informações armazenadas nos cookies que você usa, isto já vai dificultar muito o uso de forma maliciosa. Além do que já mencionamos, existem algumas outras sugestões de segurança de aplicações mais “imediatas” que se pode implementar: Utilize HTTPS e redirecione todo o tráfego HTTP para HTTPS; 20 Evite ataques de cross-site-script (XSS) usando o cabeçalho de segurança x-xss-security; Implemente uma política de segurança de conteúdo; Nunca é demais lembrar, use senhas fortes que empregam uma combinação de letras minúsculas e maiúsculas, números e símbolos especiais, etc. TREINAMENTOS PARA CONSCIENTIZAÇÃO DE SEGURANÇA EM APLICAÇÕES WEB Em uma empresa, são grandes as chances de que apenas um punhado de pessoas compreenda a importância da segurança em aplicações web. A maioria dos usuários tem apenas a compreensão mais básica do problema e isso pode torná-los descuidados. Usuários sem instrução não conseguem identificar apropriadamente os possíveis riscos de segurança. Em essência, educar a todos sobre segurança em aplicações web é uma ótima maneira de envolver a organização no ato de encontrar e eliminar vulnerabilidades. Com isso em mente, considere a possibilidade de trazer um especialista em segurança de aplicativos web para conduzir treinamentos de conscientização aos seus funcionários. Isso é muito importante para ajudar na implementação e manutenção das melhores práticas. Manter as melhores práticas de segurança em aplicativos web é um esforço de equipe. Sua segurança como um todo é limitada ao elo mais fraco, seja sistema ou membro da equipe. Mantenha isso em mente e busque identificar constantemente o elo mais fraco a fim de fortalecê-lo. TESTES DE SEGURANÇA NAS APLICAÇÕES SÃO ESSENCIAIS As práticas de testes automatizados são voltadas para melhorar a qualidade do software desenvolvido e são grandes aliadas na segurança de um sistema, uma vez que um código bem escrito é menos propenso a falhas, que podem gerar vulnerabilidades. Algumas metodologias de desenvolvimento de software incorporam o desenvolvimento orientado a testes, ou TDD do inglês Test Driven Development, como parte da rotina de desenvolvimento, porém poucas equipes cumprem essas 21 rotinas. Desenvolvedores costumam testar as funcionalidades de sua aplicação, todavia, durante a rotina de testes automatizados do sistema, normalmente em sua fase de homologação ou durante o desenvolvimento, também é necessário submeter a aplicação a testes de seguranças. Como pode-se observar na Figura a rotina de desenvolvimento com TDD se baseia em primeiro escrever um teste com os requisitos da função a ser desenvolvida. Após escrito, esse teste ele irá falhar, pois ainda não há nenhuma função desenvolvida para atender as condições daquele teste, e então é feita a codificação da função, com o objetivo de cumprir todos os requisitos pré estabelecidos no teste. Com a função completa é feita a refatoração do código, a fim de eliminar todas as redundâncias e funções que podem ser abusadas por atacantes. A revisão de todo código fonte escrito, a procura de falhas, é a mais aconselhada para minimizar a ocorrência de ataques nas aplicações. Essa parte costuma ser ignorada, porém é de extrema importância que seja feita para garantir o mínimo de qualidade no software desenvolvido (Chess B. and McGraw 2011). Outra maneira de testar um software desenvolvido é com a utilização de scanners automatizados para encontrar falhas de segurança nas aplicações. A utilização desses scanners deve ser feita com muita atenção, pois este tipo de teste pode gerar falsos positivos e falsos negativos, exibindo falhas onde não existem e deixando passar falhas existentes (Basso 2010). Se faz necessário a utilização de vários scanners e também a conferência manual dos resultados exibidos por eles, para confirmarse condizem com a realidade. Grande parte dos ataques na Internet são provenientes de indivíduos conhecidos como “Script Kiddie”, que normalmente possuem rasos conhecimentos e assistem vídeos e tutoriais na Internet aprendendo a utilizar ferramentas prontas para 22 realizar ataques. É recomendado aos desenvolvedores que pesquisem as principais ferramentas automatizadas de invasão de sistemas, pois ao testar sua aplicação com ferramentas conhecidas no mercado, poderá tomar ações proativas de segurança e obter uma drástica diminuição nas possibilidades de sua aplicação ser invadida por esses tipos de indivíduos. CUIDADOS A SEREM TOMADOS NA IMPLANTAÇÃO Durante a implementação do software é aconselhado que seja feito um plano de ação, descrevendo como a equipe tratará uma eventual descoberta de vulnerabilidades ou a ocorrência de um ataque, para que se este vier a ocorrer, a equipe não demore muito para responder e aplicar as correções necessárias. Outro ponto importante na implementação é o servidor que irá rodar a aplicação desenvolvida. Neste servidor deve ser instalado apenas o necessário para que a aplicação execute e cada servidor deve ter suas responsabilidades bem definidas. Recomenda-se colocar um servidor para o banco de dados e outro para executar a aplicação, nesses servidores os serviços que são executados devem estar sempre atualizados, evitando assim que falhas descobertas em softwares utilizados possam ser exploradas. Um cenário muito comum de ataque ocorre em sites que utilizam o gerenciador de conteúdo WordPress, que tem à sua disposição variadas extensões para diferentes tipos de site na Internet (Kyaw et al. 2015). O WordPress foi feito para que pessoas leigas conseguissem criar e administrar seus blogs. Pela facilidade de sua utilização foram surgindo extensões que permitem até mesmo rodar uma loja virtual dentro do sistema de blogs. Muitas dessas extensões podem conter falhas na sua codificação e expor o sistema a vulnerabilidades. Por esse motivo, é recomendado sempre utilizar bibliotecas e extensões que são atualizadas constantemente e verificar se não há nenhuma vulnerabilidade em seus códigos antes de colocar em produção. Senhas padrões devem ser evitadas em qualquer ambiente, principalmente quando lidamos com servidores. Uma vez colocados em rede, vários scripts automáticos ficam testando as senhas para conseguir acesso ao servidor, que podem ser invadidos e usados para minerar bitcoins, disseminar fraudes pela Internet e até 23 mesmo para atacar outros servidores através de negação de serviço ou formar uma botnet de amplificação de ataques. Recentemente, em fevereiro de 2018, foi descoberta uma vulnerabilidade de configuração incorreta na aplicação Memcached, que é um sistema distribuído de cache usado por servidores para acelerar redes e sites. Cerca de 51 mil servidores estavam expostos na Internet com essa falha. Através dos servidores com a falha atacantes conseguiram fazer um dos maiores ataques de negação de serviço já registrado, usando os servidores como fator de amplificação conseguiram chegar a 1,35 Tbps de tráfego contra os servidores do GitHub. A configuração correta do servidor é algo essencial para que sejam evitados esses tipos de vetores de ataque, além disso, devem estar sempre atualizados. Ainda é recomendado para servidores Linux não utilizar senha para fazer login no SSH e sim a utilização de um par de chaves, pública e privada, conhecido como SSH key. A utilização e boa configuração de firewalls a nível de aplicação e de rede em ambientes de produção são de extrema importância, para negar várias solicitações, feitas muitas das vezes por scanners, a procura de vulnerabilidades e portas abertas que possam ser pontos de ameaça. Existem até mesmo sistemas automatizados que detectam e bloqueiam ataques em serviços web com base em anomalias do tráfego de rede dos servidores (Pereira 2011). Invasores estão a todo momento tentando roubar dados, dados esses que normalmente são armazenados em bancos de dados em que a preocupação com a segurança dos mesmos é bem básica. Uma das táticas que vem sendo utilizado para diminuir o roubo de informações nos bancos de dados é a criptografia dos dados armazenados, que causa perda da performance. Pesquisas como as de Jordão (2014) tentam encontrar um equilíbrio entre criptografia e performance em bancos de dados não relacionais, para termos uma maior confiabilidade nos dados armazenados. 24 REFERENCIAS BASSO, T. (2010) “Uma abordagem para avaliação da eficácia de scanners de vulnerabilidade em aplicações web”. Dissertação de Mestrado, Universidade Estadual de Campinas – Faculdade de Engenharia Elétrica e de Computação. Campinas, São Paulo. BATISTA, C. F. A. (2007) “Métricas de Segurança de Software”. Dissertação de Mestrado, Pontifícia Universidade Católica do Rio de Janeiro, Rio de Janeiro. BRAGA, A. M. (2007) “Visão geral das boas práticas para construção de softwares seguros”. Revista Técnica IPEP, São Paulo, SP, 7(2), 65-78. CHESS B., MCGRAW G. (2004) “Static analysis for security”. IEEE Security & Privacy, v. 2, n. 6, p. 76-79. DEVMEDIA (2018) “TDD: fundamentos do desenvolvimento orientado a testes”. Disponível em: Acesso em: 20 Março 2018. DIJKSTRA, E. W. (1972) “ The humble programmer”. Communications of the ACM, v. 15, n. 10, p. 859-866. FIDELIS, R. (2016) “Como Eu Usei o Cartão de Crédito do CEO do Trampos.co para Pagar Minha Assinatura Premium”. Disponível em: Acesso em: 10 Março 2018. GITHUB (2018) “February 28th DDoS Incident Report”. Disponível em: . Acesso em: 20 Março 2018. IDGNOW (2017) “Déficit de profissionais de segurança em TI deve bater 3,5 milhões em 2021”. Disponível em: . Acesso em: 10 Março 2018. JORDÃO, R. E. M. (2014) “Armazenamento Distribuído de Dados Seguros com Esquema de Consultas Diretas”, Trabalho de Conclusão de Curso, Faculdade de Tecnologia, Universidade de Brasília - UnB. Brasília-DF. Kolias, C., Kambourakis, G., Stavrou A. and Voas J. (2017) "DDoS in the IoT: Mirai and Other Botnets," in Computer, vol. 50, no. 7, p. 80-84. KYAW, A. K., SIOQUIM F., and JOSEPH J., (2015) "Dictionary attack on Wordpress: Security and forensic analysis" Second International Conference on Information Security and Cyber Forensics (InfoSec), Cape Town, 2015, p. 158-164. LUZ, H. J. F. (2011) “Análise de Vulnerabilidades em Java Web Applications”, Trabalho de Conclusão de Curso, Centro Universitário Eurípides de Marília, Fundação de Ensino Eurípides Soares da Rocha. Marília-SP. MONTANHEIRO, L. S., CARVALHO, A. M. M., RODRIGUES, J. A. (2017) “Utilização de JSON Web Token na Autenticação de Usuários em APIs REST”, XIII Encontro Anual de Computação. Anais do XIII Encontro Anual de Computação EnAComp 2017. Catalão: Universidade Federal de Goiás (UFG) - Regional Catalão, 2017. v. XIII. p. 186-193. 25 OWASP (2013) “OWASP Top 10 2013 – The Ten Most Critical Web Application Security Risk”. Disponível em: . Acesso em: 10 Março 2018. PEREIRA, H. (2011) “Sistema de Detecção de Intrusão para Serviços Web Baseado em Anomalias”, Dissertação (mestrado), Pontifícia Universidade Católica do Paraná - PUCPR. Curitiba-PR. SEGINFOCAST (2016) “Análise de Código e Segurança de Software”. Disponível em: . Acesso em: 10 Março 2018. SOUZA, L. L. (2012) “Desenvolvimento seguro de aplicações web seguindo a metodologia OWASP”. Monografia, Universidade Federal de Lavras. Minas Gerais, Brasil
Compartilhar