Mostrando postagens com marcador Segurança em Desenvolvimento. Mostrar todas as postagens
Mostrando postagens com marcador Segurança em Desenvolvimento. Mostrar todas as postagens

quarta-feira, 16 de dezembro de 2015

6 dicas de segurança no desenvolvimento de softwares

O desenvolvimento de softwares deve levar em consideração diversos fatores. As necessidades do cliente, o público-alvo e a exigência de entrega de builds rápidas são apenas alguns detalhes da rotina de um time de desenvolvimento. O cuidado com a segurança, por exemplo, é indispensável nas aplicações modernas.



Mesmo no caso de apps mobile simples, não podemos ignorar a necessidade de trabalhar com métodos de desenvolvimento seguros. A importância dada para a segurança da informação aumenta a confiabilidade do software final. Em um universo onde o compartilhamento de informações pela internet e entre aparelhos faz parte do dia a dia dos usuários de smartphones, tablets e computadores, a segurança digital será fundamental para a criação de novas soluções de TI.

No texto de hoje, falaremos um pouco mais sobre as melhores práticas para quem procura desenvolver apps mais seguros e como garantir que a sua equipe crie ferramentas confiáveis. Acompanhe:

quarta-feira, 4 de novembro de 2015

Qual é o processo de desenvolvimento de software seguro?

Durante o desenvolvimento de um software, os gerentes de TI buscam garantir a entrega de um produto com uma baixa quantidade de bugs no menor tempo possível. No entanto, durante esse processo, não são raros os casos em que gestores ignoram práticas de segurança que evitam, no futuro, vazamento de dados sigilosos. 



Diante desse cenário, é fundamental que certas rotinas sejam tomadas, ainda que os modelos de criação de software mais tradicionais não sejam focados no desenvolvimento de software seguro.

quarta-feira, 12 de agosto de 2015

Segurança de aplicações: conheça os 7 mitos

Diversos mitos e conceitos errados povoam o imaginário corporativo quando falamos em segurança de aplicações na internet. Esse é um grande problema, pois o gestor passa a ter uma visão mais limitada e acaba não prevenindo o seu setor de TI como deveria, por acreditar em coisas que não são verdadeiras.
Com tantos sistemas e aplicativos novos em redes públicas, a segurança para aplicativos web deve ser sim uma preocupação constante para os gestores de TI, especialmente levando em conta a atual complexidade dos sistemas de TI, como o Big Data, a computação em nuvem, entre outros.
Dessa forma, se faz necessária a implantação de uma segurança efetiva de aplicações, mas, para que isso aconteça, é preciso que os mitos da segurança de aplicações sejam derrubados. Para isso, veja os 7 mitos mais comuns nessa área:

quinta-feira, 6 de novembro de 2014

Como contratar desenvolvimento de software ou comprar software com mais segurança?

A aquisição de um software que irá compor as ferramentas que criam a sua vantagem competitiva é um investimento sério e deve ser levado como tal, por isso, antes de adquirir um software, tenha algumas garantias em relação à segurança da plataforma e à manutenção de possíveis falhas, visando reduzir problemas futuros.

Veja, para isso, as nossas dicas!

segunda-feira, 28 de julho de 2014

Contratando um desenvolvedor de software? Saiba por que você também precisa contar com um consultor para segurança

Já dissemos É mais barato ser proativo que investir na segurança do software durante o seu desenvolvimento é a opção mais prudente e econômica para as empresas. Isso porque deixar para tomar uma atitude quanto à segurança depois que ocorre um incidente, seja um ataque hacker ou mesmo um vazamento inesperado de dados, pode custar a própria credibilidade da empresa, patrimônio mais valioso do empreendedor.

Quando a busca pelas possíveis vulnerabilidades do sistema ocorre durante a sua construção muita dor de cabeça pode ser evitada lá na frente. Mas, apesar desta ser uma lógica simples, muitos empreendedores ainda preferem economizar com segurança e delegam ao desenvolvedor toda a responsabilidade pelo software.

segunda-feira, 21 de julho de 2014

As 3 falhas de segurança mais comuns nos softwares

Priorizar a segurança em todas as fases do desenvolvimento de um software, especialmente no início, é comprovadamente mais barato do que corrigir possíveis falhas depois que a arquitetura está pronta.


Engajado na busca de soluções para as falhas que ameaçam a segurança dos softwares, o Instituto SANS de Informação sobre segurança, Redes, Computação, Auditoria e Sistemas Administrativos, apresenta sua célebre lista dos 25 erros de programação que podem levar às inúmeras falhas de segurança de softwares.

Baseados nesta lista, separamos três das falhas mais frequentes no quesito segurança. Veja quais são.

terça-feira, 24 de junho de 2014

5 Motivos para entender porque software seguro é essencial nas empresas

Ter um software seguro é primordial para grandes empresas por uma série de motivos. Garantir a segurança dos sistemas desde o início das atividades da corporação pode livrá-la de grandes prejuízos. Além disso, pode preservar e até mesmo construir sua credibilidade perante aos clientes e funcionários, livrá-la de possíveis intempéries legais e contribuir para a sua produtividade com a redução das perdas.

Separamos cinco bons motivos para mostrar por que uma grande empresa precisa ter medidas que assegurem seu software.

quarta-feira, 16 de outubro de 2013

Gestão de Segurança em Banco de Dados

Além da aplicação que é a interface com os usuários, existem outros recursos que trabalham em conjunto, cooperando entre si para que seu serviço consiga entregar valor a quem o usa e que se não estiverem protegidos adequadamente poderão ser explorados por um atacante, comprometendo seus investimentos.




Quando se discute segurança em aplicações geralmente a primeira coisa a se pensar é fazer um trabalho de Pentest na interface da aplicação para encontrar vulnerabilidades. Por outra perspectiva, eu pergunto: "e seu Banco de Dados, está seguro?".

Nesta dissertiva será evitado especificar uma tecnologia como DB2, Oracle, SQL Server, PostgreSQL, MySQL etc. Inclusive os Bancos de Dados conhecidos como NoSQL. Veremos uma versão global de gestão para proteção de repositórios de dados.

De acordo com a estrutura da NBR ISO/IEC 27001, o Item 3 (três) que especifica os "Termos e Definições", podemos destacar três importantes itens (existem outros que não será foco da nossa proposta atual) que descrevem bem o que será tratato aqui:
  • Disponibilidade: propriedade de estar acessível e utilizável sob demanda por uma entidade autorizada
  • Confidencialidade: propriedade de que uma informação não esteja disponível ou revelada a indivíduos, entidades ou processos não autorizados.
  • Integridade: propriedade de salvaguarda da exatidão e completeza de ativos
Imagine uma Aplicação Web que precisa acessar um Banco de Dados para exibir informações à usuários. Como nosso foco é o Banco de Dados deixemos de lado os usuários que interagem com a camada de visão da aplicação. Nesse exemplo, a "entidade autorizada" pelo Banco de Dados é a "Aplicação Web" que tem nome de usuário, senha e limites sobre o que pode acessar sempre que for solicitado, isto é, sob demanda. Por fim, tudo que foi dito é o que define a Disponibilidade.

Você pode estar se perguntando sobre a demanda que não é um termo de segurança da informação e sim apenas uma questão de recursos computacionais como configuração, adicionar mais memória, usar um melhor processador, adicionar redundância ou distribuição dos recursos. Mas existe uma outra faceta da disponibilidade. Imagine agora se o seu servidor de Banco de Dados estiver sofrendo um ataque de Denial of Service (DoS). Isto, também, pode afetar no atendimento a sua demanda. E pior, isso pode deixar o serviço indisponível. Logo disponibilidade por demanda é, também, item de segurança da informação.

Outro ponto importante é a administração de usuários de um Banco de Dados. É comum encontrar um mesmo usuário que tenha acesso a várias databases sem que as databases se relacionem. Ou seja, uma mesma empresa com diferentes aplicações e um único usuário no Banco de Dados. Esta prática é condenável, pois se alguém indevidamente consegue as credenciais de uma aplicação todas as databases serão afetadas e não apenas uma. Para piorar não é novidade aplicações usarem a senha de administrador (ou de root ou do system) do Banco de Dados que, em posse do atacante, dará autonomia completa ao repositório de dados.

Para mitigar esse problema é necessário que cada diferente aplicação tenha seu próprio usuário (diferente do usuário administrador ou root ou system) no Banco de Dados limitado a certa(s) database(s). Para cada database é possível, também, dizer se o usuário tem acesso apenas read-only (só leitura) e/ou de escrita. Indo mais além, é possível limitar o acesso por endereço IP de origem. Isso completa o que chamamos de Confidencialidade.

A grande maioria dos SGDBs (Sistemas Gerenciadores de Banco de Dados) tem o conceito de ACID (Atômicidade, Consistência, Isolamento e Durabilidade) que caracteriza as transações em um Banco de Dados. Transações são unidades lógicas de trabalho. Ou seja, quando iniciadas não devem sofrer interferências externas até chegar ao seu fim.
  • Atômicidade: Uma transação não pode ser dividida.
  • Consistência: Uma transação deve ser iniciada a partir de um estado consistente do Banco de Dados para outro estado, também, consistente.
  • Isolamento: Conjunto de técnicas para que transações paralelas não interfiram uma nas outras.
  • Durabilidade: Os efeitos de uma transação devem ser persistidas (commit) no Banco de Dados
Com isso fechamos o item Integridade, converse com seu DBA se seu Banco de Dados possui essa importante característica.

Outras dicas importantes:
  • Se todas as conexões do seu Banco de Dados são realizadas de um único IP de origem configure-o para só aceitar conexões deste IP.
  • Atualize sempre o executável e as bibliotecas do Banco de Dados, atento as correções de falhas de segurança.
  • Faça com que o sistema de arquivos onde fica os dados do banco fique protegido para que só o Administrador de Sistemas (ou, no caso do Linux, o root) tenha acesso.
  • Utilize senhas fortes para o usuário administrador ou root ou system.

segunda-feira, 16 de setembro de 2013

O estado atual da Segurança em Aplicações - E sua empresa, como está?

Foi realizada uma pesquisa bem interessante sobre a maturidade da segurança de aplicações em organizações. Foram entrevistados 642 profissionais da área (executivos e desenvolvedores), com perguntas sobre uso de ferramentas, conhecimento sobre SDL e políticas de segurança no desenvolvimento.

Os idealizadores da pesquisa foram a empresa Security Innovation e o Instituto Ponemon. Um dos grandes pontos que chamou atenção nos resultados foi a diferença da visão real entre executivos e desenvolvedores sobre o processo atual da segurança de aplicações que a empresa se encontra.


Atualmente a camada de aplicação é responsável por 90% das vulnerabilidades de segurança, porém mais de 80% dos orçamentos são gastos na proteção na camada de rede. Aproveito o gancho aqui para uma palestra que nosso CTO Wagner Elias fará no Silver Bullet com o título "Falta Dinheiro" , onde ele focará um pouco na parte de investimentos do orçamento da empresa.

Os 7 pontos chave encontrados na pesquisa foram.
  1. Maioria das organizações não possuem um processo de desenvolvimento de software
  2. Maioria das organizações não estão fazendo testes de segurança das aplicações
  3. Políticas e requerimentos não estão integrados no SDLC
  4. Grande maioria não possui um processo formal de treinamento de segurança em aplicações
  5. Times de desenvolvimentos não são medidos por compliance com regulamentações e padrões
  6. Maioria das organizações não identificam, medem ou entendem os riscos da segurança das aplicações
  7. Grande desconexão entre executivos e desenvolvedores na situação real na maturidade no desenvolvimento seguro.
Abaixo alguns pontos importantes que valem ser destacados:

Um ponto que podemos achar básico, porém analisando a pesquisa notamos que não é tão comum, são as ferramentas automatizadas. Ficou constatado que durante o processo de desenvolvimento apenas 41% das empresas utilizam essas ferramentas e 43% após o lançamento. Esses números são extremamente baixos, visto que uma ferramenta automatizada seria a checagem mais simplificada, sem grande demanda de tempo, que uma empresa poderia adicionar.

Uma das grandes surpresas, conforme citado anteriormente no inicio do post, foi a diferença de visão da situação entre como a equipe de desenvolvimento está em relação a maturidade da segurança das aplicações. Executivos são totalmente otimistas com 67%, porém a parte técnica não está com a mesma visão, onde 73% NÃO acreditam nessa situação. Essa falta de consenso é bem crítica, pois demonstra que a empresa não está alinhada nesse processo de segurança de aplicação e investimentos podem ( e possivelmente devem) estar sendo feito em área erradas ou com menor necessidade.

Entendimento do risco e tomada de decisões baseado nas métricas demonstram o pouco uso dessa importante informação, sendo respectivamente 44% (entendimento do risco) e 42% (ações baseadas em métricas). Ter um contexto e adaptar a métrica ao seu negócio é fundamental para tomada de decisões, o que nos gerou dúvidas de como eles priorizam as correções e esforços, sem ter a métrica e entendimento adequado.


Alguns dados interessantes sobre os pesquisados, o que mostra grande valor da mesma, pois abrangeu diferentes áreas de atuação, assim como tamanho.

Tamanho das empresas


Área de atuação das empresas


Pesquisa e artigo completo podem ser encontrado em https://www.securityinnovation.com/security-lab/our-research/current-state-of-application-security.html

O Conviso Security Compliance (CSC) é a ferramenta que unifica todo o processo de desenvolvimento seguro e gestão das vulnerabilidades em uma única interface, desenvolvida pela Conviso para facilitar a priorização de ações, gerando métricas que possibilitam que a empresa tenha uma visão singular da situação atual da segurança da aplicação, tanto no lado técnico como executivo.

Requisite mais informações e uma demonstração: https://www.conviso.com.br/produtos.php

quinta-feira, 11 de julho de 2013

Publicado o OWASP Top 10 2013

A nova versão dos Top 10 riscos para aplicações web da OWASP

Saiu a publicação da nova versão oficial do OWASP Top 10 2013 [1]. Ela já estava disponível para visualização e comentários, porém agora foi lançada na versão oficial [2]. Para quem ainda não conhece a OWASP (Open Web Application Security Project) é uma organização internacional, criada em 2003, sem fins lucrativos que visa fornecer recursos, documentos e ferramentas para a melhoria da segurança das aplicações no mundo todo. Mais informações sobre o OWASP e suas atividades poderão sem encontradas em www.owasp.org.

O OWASP Top 10 é um documento que demostra um consenso geral entre os profissionais de segurança, listando os 10 riscos mais comuns entre as aplicações web e definido por ordem de importância. A listagem dessas vulnerabilidades começou em 2004 e normalmente a cada 3 anos é realizado uma revisão da lista de acordo com estatísticas de várias organizações e empresas.

Então, nesses últimos 3 anos tivemos grandes mudanças? Inicialmente veja na tabela abaixo as diferenças entre o Top 10 2010 e o 2013:


Analisando a tabela observaremos que houve algumas mudanças, o A2 não é mais Cross-Site Scripting (XSS) e sim Broken Authentication and Session Management. A razão principal desta mudança é que as falhas de XSS estão sendo mais facilmente encontradas e mitigadas e os frameworks de desenvolvimento já possuem em sua maioria mecanismos de proteção inclusos contra este tipo de falha, embora ainda seja comum encontrar as mesmas em sites e produtos que testamos. Quanto às falhas de autenticação, estas são mais difíceis de serem verificadas e encontradas por scanners automatizados e por isso diversas aplicações web possuem algum problema relacionado, por menor que seja.

O A7 - Insecure Cryptographic Storage  unificou-se com o A9 - Insufficient Transport Layer Protection para formar o A6 - Sensitive Data Exposure, visto que ambos tratavam da proteção de dados sensíveis, o primeiro no armazenamento e o segundo no transporte.

O novo A7 - Missing Function Level Access Control se tornou uma ampliação do antigo A8 - Failure to Restrict URL Access, abordando todos os problemas relativos a controle de acesso da aplicação. Ele visa proteger o acesso não autorizado a funcionalidades do sistema.

E o novo A9 - Using Known Vulnerable Components está relacionado a grande utilização de códigos e bibliotecas de terceiros sem a devida atualização e verificação de segurança dos mesmos. A utilização de frameworks ou bibliotecas vulneráveis pode facilmente tornar seu sistema vulnerável caso alguma falha seja identificada para aquele componente utilizado. Muitas empresas e organizações não dão o devido cuidado a este tipo de problema por achar que um código de terceiro é seguro por natureza. Se todo mundo usa, então não deve ter problema não é mesmo? Ledo engano. É muito importante que durante análises de vulnerabilidades e auditorias de código esses componentes sejam devidamente avaliados e testados em buscas de falhas que possam comprometer toda a aplicação que os utiliza. Alguns exemplos desse tipo de falha e o impacto que elas podem causar podem ser identificadas no Spring Remote Code Execution [3] e o Apache CXF Authentication Bypass (CVE-2012-3451) [4].

Apesar destas mudanças os outros itens permaneceram intactos, mudando apenas de posição no ranking da lista. É importante que sua aplicação esteja protegida destes riscos, mas que não se limite apenas ao Top 10, pois existem outras vulnerabilidades que não são abordadas nesta lista mas que também podem causar grande impacto caso sua aplicação esteja vulnerável.



segunda-feira, 10 de dezembro de 2012

Desenvolvi minha aplicação em Ruby on Rails, estou seguro?

O framework para desenvolvimento de aplicações web Ruby on Rails já vem por padrão com proteções contra alguns tipos de ataques e oferece vários  métodos que auxliam o desenvolvedor a deixar sua aplicação segura.
Agora, se você me perguntar "estou seguro?" a princípio minha resposta seria "depende!". Neste texto vou considerar que o framework Ruby on Rails, em si, não tem nenhum furo de segurança. "Ah! quer dizer que o framework Rails tem furos de segurança". Não exatamente, mas, vez por outra, aparece uma nova versão que diz que foi consertado ítens de segurança, assim como em qualquer outro framework Java, .Net ou em sistemas operacionais como o Windows e Linux ou em banco de dados e aplicações em geral.
De agora em diante vamos nos preocupar, apenas, na codificação de sua aplicação.
Vamos começar com o exemplo mais básico, mas que muito desenvolvedor costuma errar, veja o código abaixo:
Product.where("name LIKE '%" + params[:name] + "%'")
Duas lições que devem ficar na sua memória sempre e em qualquer linha de código que você criar.
1. Nunca confie em, absolutamente nada, que o usuário vai digitar.
2. Novamente, nunca confie em, absolutamente nada, que o usuário vai digitar.
A partir dessas duas lições, vamos notar que o usuário pode burlar a consulta e inserir comandos SQLs indesejados (SQL Injection). Logo, ao invés de usar concatenação de strings, use a interpolação disponível no framework que, por si só, vai tratar o Injeção de SQL:
name_like = "%#{params[:name]}%"
Product.where("name LIKE ?", name_like)
Mas concatenando strings não é única maneira de fazer Injeção de SQL. Imagine só uma view com esse campo em um formulário:
<select name="report">
    <option value="weekly">Vendas Por Semana</option>
    <option value="monthly">Vendas Por Mês</option>
    <option value="yearly">Vendas Por Ano</option>
</select>
Chamando o método send em uma classe de Model você pode estar dando espaço ao atacante para roubar dados ou até mesmo destruir informações, veja o exemplo sendo passado por parametro a opção escolhida:
Sell.send(params[:report])
Agora imagine se o atacante mudar um "option" por isso:
...
<option value="destroy_all">Vendas Por Semana</option>
...
Ou seja a classe de Model "Sell" executará o método destroy_all que apagará todos os dados da tabela. Para resolver este problema você poderia simplesmente fazer:
allowed_methods = ['weekly', 'monthly', 'yearly']
if allowed_methods.include?(params[:report])
    Sell.send(params[:report]) 
end
Ou seja, apenas os métodos permitidos para exibir relatórios podem ser executados pela classe de Model "Sell".
Programação é algo bastante dinâmico e não podemos nos limitar a estes dois exemplos apresentados aqui, é preciso sempre estar atento a novas oportunidades que um atacante pode explorar. É como já disse antes, e vou repetir:
Nunca confie em, absolutamente nada, que o usuário vai digitar.
Vamos dar uma olhada agora em outro tipo de ataque. Um tipo de ataque que é feito na View de sua aplicação: a Injeção de JavaScript (Cross-Site Script ou, apenas, XSS).
No Rails, qualquer variável com caracteres <, >, ', " e & serão substituídos por &lt;, &gt;, &#x27;, &quot; e &amp;, respectivamente. Desta maneira, sua aplicação fica livre de ataques por Injeção de Javascript.
Primeiramente vou indicar que evite o máximo o uso do método html_safe para variáveis, pois este método autoriza que os caracteres mencionados acima não sejam substituídos, podendo desta forma deixar sua aplicação vulnerável.
Vamos dar um exemplo bem simples e, aparentemente, ingênuo de um formulário que ao ser submetido troca o cor de fundo de uma DIV em uma página web. Exemplo:
<form action="/tests/" method="get">
    <select name="color">
        <option value="#0000FF">Azul</option>
        <option value="#FF0000">Vermelho</option>
        <option value="#00FF00">Verde</option>
    </select>
    <input type="submit">
</form>

<div style='background-color: <%= (params[:color] || "#0000FF").html_safe %>'>
    Um texto qualquer
</div>
Se o atacante mudar uma option para:
...
<option value=""><script>alert('ok');</script>">Azul</option>
...
Com isso a atacante pode mudar qualquer informação da página web ou, pior, redirecioná-lo para um outro site, contendo uma página igual a que você queria mas onde o atacante tem plenos domínios sobre o que você digita em formulários, podendo, inclusive, pegar o número do seu cartão de crédito.
Se você realmente precisar usar o método html_safe use junto com o método content_tag do framework Rails para evitar o surgimento dessas vulnerabilidades, Por exemplo:
...
<%= content_tag 'div', 'Um texto qualquer', :style => "background-color:#{(params[:color] || "#0000FF").html_safe}"  %>
...

Conclusão

Como já foi dito, programação é muito dinâmica, é preciso ficar atento a tudo que pode se tornar vulnerabilidades em sua aplicação. Todos os dados de entrada que o usuário fizer devem ser tratados com atenção especial e ter restrições. Além disso, todos os dados que serão exibidos, também, devem ter atenção especial e devidamente tratados logo antes de sua exibição.
Se você tomar todos esses cuidados, muito provavelmente sua aplicação estará segura contra esses ataques mencionados, seja qual for a linguagem e framework escolhidos.


Autor do Post

Desenvolvedor antenado em segurança de aplicações, louco por tecnologia e sempre disposto a resolver algum problema. Gosta de Rock n' Roll das antigas e de um bom jogo de futebol

sexta-feira, 30 de novembro de 2012

OpenSAMM o que é e para que serve?

O SAMM[1] é um framework aberto para ajudar as organizações a formular e implementar uma estratégia para a segurança de software, foi originalmente desenvolvido por Pravir Chandra, um consultor independente de segurança de software. Após o seu lançamento ele foi integrado a OWASP (Open Web Application Security Project) que ficou conhecido como Open SAMM.

O Open SAMM foi projetado para ser bem flexível assim podendo ser utilizado em pequenas, médias e grandes empresas e utilizando qualquer estilo de desenvolvimento, podendo ser aplicado para projetos individuais ou para toda uma organização. 

Ele possui recursos que o ajudarão em:
  • Avaliar as práticas de segurança da organização
  • Elaborar um programa de segurança de software balanceado
  • Definir e medir atividades relacionadas a segurança na organização
O Open SAMM especifica quatro funções de negócios críticos, cada um com três práticas de
segurança, são elas:

Visão Geral do OpenSAMM

Governança

São as atividades da gerência, que seria examinar os grupos de desenvolvimento e também gerenciar os níveis dos negócios estabelecidos pela empresa.
.
Estratégia e Métricas: Definição da estratégia que será utilizada para a garantia de software ou seja criar definições de metas de segurança e também estudar os riscos da empresa. 
Políticas e Conformidade: Entender as diretrizes/políticas e regulamentá-las nos padrões de seguranças, também fazer auditorias para descobrir se algum projeto não está dentro das expectativas. 
Orientação e Educação: Ensinar as pessoas que estão envolvidas no desenvolvimento do software como desenvolver e implementar um software mais seguro, o OpenSAMM também indica que uma boa alternativa para melhorar o desempenho é através de objetivos para cada funcionário.

Construção

Definir metas e criar os software dentro dos padrões. Isso inclui o gerenciamento do produto, a especificação do nível da arquitetura, design e implementação.
.
Modelagem de Ameaças: Identificar e entender os níveis de risco na funcionalidade do software no ambiente em que ele será executado, a partir dos detalhes conseguidos ficara mais fácil tomar decisões. 
Requisitos de Segurança: Definir qual será o comportamento esperado a respeito da segurança do software, definindo cada processo por níveis e fazer auditorias para garantir que todas as especificações de segurança estão sendo utilizadas. 
Arquitetura Segura: Projetar softwares seguros por padrões, reutilizando os componentes assim os riscos de segurança do software serão drasticamente reduzidos.

Verificação

Verificações e testes nos produtos durante o desenvolvimento do software, garantindo uma boa qualidade do software.

Revisão de Arquitetura: Avaliar a segurança da arquitetura do software, permitindo assim detectar problemas logo no inicio. Quando se resolve o problema no inicio se reduz também o tempo e dinheiro que seria gasto a procura desse problema. 
Revisão de Código: Inspecionar os códigos fontes a fim de encontrar potenciais falhas no software que ocorreu no desenvolvimento. O Code Review seria uma revisão mais profunda já que na hora do desenvolvimento também acontece algumas revisões, outra função é estabelecer uma base para uma codificação mais segura. 
Testes de Segurança: Testar o software a procura de vulnerabilidades, para garantir que os resultados serão os esperados quando estiver em execução, basicamente seria a fase de teste a procura de qualquer tipo de erro.

Implantação

Gerenciar a liberação do software, ou seja, essa função serve para saber se o produto vai chegar de acordo com o que foi especificado para o usuário final.

Gerenciamento de Vulnerabilidades: Gerenciar os relatórios de vulnerabilidades e incidentes operacionais ganhando assim uma base de dados dos problemas que já ocorreu, se por acaso acontecer novamente ficará mais fácil resolver. 
Proteção de Ambiente: Garantir que o software será executado corretamente no ambiente de produção, reforçar a segurança da infraestrutura e implementar atualizações de segurança. 
Capacitação Operacional: Procurar todo tipo de informação que possa afetar a segurança do software e comunicar aos desenvolvedores, assim detalhando os impactos que possam ocorrer para os usuários e operadores.

Comparação entre SAMM e a ISO / IEC 27034

A ISO/IEC 27034[2] é um padrão internacional para ajudar as organizações a implementar mecanismos de segurança durante todo o ciclo de vida do seu desenvolvimento. A tabela abaixo mostra o relacionamento dos recursos do SDL (Secure Development Lifecycle) com as 12 práticas de segurança do OpenSAMM. O losango grande indica um forte relacionamento com um tópico da ISO/IEC 27034 enquanto o losango pequeno indica um fraco relacionamento: 

De acordo com o Colin Watson, autor da comparação, a ISO/IEC 27034 está mais relacionada com a ideia de um programa de segurança de software específico para organizações, junto com uma abordagem baseada em risco para aplicar segurança em diferentes aplicações.


Referências




Autor do Post

Luan Souza é graduando do curso de Sistemas de Informação da Universidade Federal da Paraíba (UFPB). Apaixonado pela área de Segurança da Informação desde pequeno, pratica Futebol Americano e curte uma boa balada.

quarta-feira, 31 de outubro de 2012

Segurança por Reputação

Trabalhando com segurança da informação a alguns anos e consultando alguns números[1][2] é fácil concluir que a dupla Oracle e SAP são quase unanimidade em grandes empresas. A base instalada destes produtos é numerosa e de vital importância, afinal eles suportam operações críticas de seus clientes.

Este fato já não surpreende, mas o que impressiona é o número de profissionais que acredita que por ter comprado um produto com uma marca forte e referência no seu segmento ele é seguro, não necessita de avaliações e cuidados com a sua segurança.

Estes produtos gozam de uma característica que eu chamo de Segurança por Reputação, afinal ninguém testa, ninguém avalia, mas todo mundo confia.

A cada dia as estatísticas provam que esta confiança coloca grandes empresas em risco. Afinal o número de vulnerabilidades para estas plataformas só aumenta conforme o gráfico 1 que apresenta as falhas descobertas nos últimos anos em soluções da SAP. E o investimento em segurança de verdade não acontece. Uso a expressão segurança de verdade, pois as empresas acreditam estar investindo em segurança, afinal gastam valores altíssimos em revisões de perfis realizadas por auditores de empresas especializadas.



Gráfico 1 - Fonte Fonte http://erpscan.com/publications/sap-security-in-figures-a-global-survey-2007-2011/



Acontece que estas análises não focam em identificar falhas na solução e sim em validar regras de negócio. A revisão das regras de negócio é necessária, mas não irá identificar e ajudar a corrigir as falhas na plataforma e na sua configuração. As estatísticas mostram que 69% das falhas da SAP são críticas e devem ser corrigidas com prioridade conforme o gráfico 2. 


Gráfico 2 - Fonte http://erpscan.com/publications/sap-security-in-figures-a-global-survey-2007-2011/

Como os ambientes podem estar seguros se existe uma máxima que não se aplica atualizações em ambiente SAP porque ele é crítico para empresa?

Falando da Oracle, a situação não é diferente. Os números também não são animadores, conforme o gráfico 3 que apresenta o número de vulnerabilidades por ano.




Gráfico 3 - Fonte http://www.cvedetails.com/vendor/93/Oracle.html


Para aumentar o nível de segurança destes ambientes é necessário um investimento em análises de vulnerabilidades técnicas e testes de invasão que irão validar se o ambiente está adequadamente configurado e possui todas as atualizações de segurança necessárias. De posse destas análises as empresas poderão desenvolver planos de ações para corrigir estas vulnerabilidades e adotar uma arquitetura que seja segura e adequada a sua característica.
Não confie nos produtos que você adquire. Independente da empresa e do valor pago, invista em análise e conhecimento do seu ambiente.

1 - http://exame.abril.com.br/negocios/empresas/noticias/lucro-da-oracle-cresce-7-5-no-4o-trimestre-2/
2 - http://computerworld.uol.com.br/negocios/2012/07/24/receita-da-sap-cresce-12-no-segundo-semestre/

segunda-feira, 25 de outubro de 2010

Implementando um processo de segurança em desenvolvimento

Com a crescente demanda por iniciativas de segurança em desenvolvimento de software é comum encontrarmos soluções mirabolantes e ferramentas que implementam segurança "Out-Of-The-Box". Não acredite nestas iniciativas. Para produção de um software seguro é necessário a adoção de métodos que garantam a qualidade durante todas as etapas do desenvolvimento [1][2].

Antes de pensar em segurança é preciso analisar o seu processo de desenvolvimento de software. Segundo estudos realizados pela Cigital Software Confidence [3]: “software ruim é a origem da maioria dos problemas de segurança”. Isso significa que uma má gestão no processo de desenvolvimento de software pode levar a um código mal estruturado e por sua vez a problemas de segurança. Por outro lado, software de qualidade é desenvolvido com uma abordagem estruturada e ferramentas de apoio[4][5].

Como é o seu processo de desenvolvimento?


Seu processo de desenvolvimento atende a estes requisitos:

1 - Como você gerencia o seu código fonte?


Uma ferramenta fundamental para o desenvolvimento de software é um bom sistema de controle de versão para o código fonte[6]. Além de organizar a interação entre desenvolvedores, essa ferramenta irá garantir integridade e possibilitar o gerenciamento de versões do código, evitando equívocos quanto a versão colocada em produção.

2 - Quais os tipos de testes você adota?


Um processo fundamental para a melhoria continua do software são os testes [7]. Devem ser adotadas desde práticas que buscam uma avaliação geral do software até modelos que buscam testar pequenos trechos de código por vez (como os testes unitários).

3 - Como você gerencia a correção de bugs?


Como diria Joel Spolsky: “não é possível armazenar mais que três bugs na cabeça” [8]. Para manter registro das falhas encontradas no sistema é essencial que seja adotado uma ferramenta de Bug Tracking. Esta irá agir como facilitadora da comunicação entre os envolvidos na identificação e correção do bug.

4 - Você adota um processo de Integração Contínua para garantir que bugs não são inseridos no build?


Um processo de integração continua irá colaborar para garantir a qualidade do software desenvolvido[9][10]. O processo irá automatizar verificações no processo de build da ferramenta, garantindo assim, que seja possível gerar um novo release sem problemas.

5 - Como você documenta o software desenvolvido e a arquitetura que o suporta?


Documentação clara da arquitetura e código fonte ajuda a aumentar a qualidade do software desenvolvido. Uma documentação clara, objetiva e bem estruturada é de fundamental importância para que o software possa ser expandido de forma sustentável e segura.

Se você ainda tem deficiência nos itens listados acima, o primeiro passo é buscar ajustar o seu processo de desenvolvimento às técnicas mencionadas. Com esta iniciativa você naturalmente irá desenvolver software melhor e com número menor de bugs.

Já possuo um bom processo de desenvolvimento de software e quero inserir neste processo atividades que irão melhorar a segurança dos softwares desenvolvidos


O primeiro ponto a ser entendido é: para implementar segurança em um processo de desenvolvimento são necessárias mudanças. Isto envolve de questões culturais até capacitação dos envolvidos em temas associados a segurança. Todo esse processo de reeducação leva tempo e não acontece simplesmente ao escrever uma política ou definir alguns checklists.

Segundo estudos relatados no BSIMM (Building Security In Maturity Model), atualmente, existem mais de sessenta grandes iniciativas de segurança no desenvolvimento de software em organizações dos mais diversos setores. Todas essas iniciativas tem características comuns, adotam estruturas e abordagens que foram analisadas pelo BSIMM.

A implementação de um processo de segurança em desenvolvimento deve ser gradativo. Iremos tratar respectivamente as atividades envolvidas do nível menos ao mais maduro de acordo com os estudos do BSIMM. Esses estudos, não levam em consideração a organização em domínios, visando uma visão mais abrangente orientada às atividades e não a um framework específico.

Estas atividades descrevem em alto nível as práticas que devem ser inseridas no seu processo de desenvolvimento que levarão gradativamente ao processo para criação de software seguro.

1 – Diretrizes de alto nível e os gestores do processo


A iniciativa de segurança em desenvolvimento irá mexer com os processos de desenvolvimento de software e impactar o modelo já estabelecido entre gestores do negócio e equipe de desenvolvimento. Por isso, uma modificação de cultura é necessária para que esta iniciativa seja suportada pelo alto nível da organização. Esse processo deve se conduzido por profissionais que tenham visão do negócio como um todo e um bom relacionamento com equipe de desenvolvimento e gerentes do negócio.

2 –Time de Segurança em Desenvolvimento


É necessário definir um time que irá conduzir as atividades de segurança em desenvolvimento, como: revisores, responsáveis por políticas e métricas, testadores e orientadores. É importante notar que estes profissionais devem ser identificados no time de desenvolvimento e/ou contratados com estes perfil. Um erro recorrente é que muitas vezes profissionais de áreas relacionadas a segurança, sem perfil de engenharia de software são contratados para ocupar as vagas referentes aos perfis citados.

3 – Papéis e Estrutura adotada para o (Secure Development Lifecycle)


Estudando práticas como as sugeridas pela OWASP (Open Web Application Security Project)[11] e estabelecendo uma cultura de segurança na organização, defina metas, desenvolva documentação prescritiva e defina os papéis e responsabilidades dos envolvidos no SDL.

4 – Treinamento e Capacitação


Com o processo iniciado e apoio da organização é preciso treinar os envolvidos e desenvolver materiais e recursos para que os profissionais se mantenham conscientes sobre a necessidade de segurança e sejam informados sobre fontes de pesquisa no tema.

5 – Reutilização de Componentes


Construa e homologue componentes de código e arquitetura que possam vir a ser adotados como padrão na organização. Modelos como o ESAPI (Enterprise Security API)[12][13][14][15] da OWASP podem ser adotados evitando que códigos com problemas de segurança e componentes inseguros sejam adotados.

6 – Padrões de Código Seguro e Checklists


Defina padrões de códigos seguros, boas práticas de acordo com a linguagem adotada e ambiente definido pela organização[16]. Crie checklists para verificar as principais ações durante o desenvolvimento e revisão de segurança do software.

7 – Modelo para Avaliação de Riscos


Defina um processo para avaliar os riscos associados aos softwares desenvolvidos e como os riscos identificados serão tratados. Modelos como o Theat Modeling da Microsoft[17] podem ser adotados como referência. Este processo deve estar associado a um processo de gestão de vulnerabilidades e resposta a incidentes.

8 – Revisão de Segurança


Defina processo de revisão de segurança e testes que irão verificar se existem problemas de segurança que ainda não foram tratados. Os problemas identificados devem ser tratados e documentados no processo de Bug Tracking [18], através do processo de gestão de vulnerabilidades. Modelos como o OWASP Testing Guide [19] e OWASP Code Review Guide [20] podem ser adotados como referência.

9 – Ferramentas para Teste


Adote e crie ferramentas para testar as características específicas dos softwares desenvolvidos pela organização. Essas ferramentas devem evoluir de acordo os insumos produzidos pelas revisões de segurança. Evite ferramentas que propõem modelos baseados em padrões conhecidos e não permitem que sejam aprimoradas e orientadas para a organização. Frameworks como o O2 Platform [21] da OWASP se adaptam e evoluem com a sua equipe de teste a medida que o seu software vai sendo desenvolvido.

10 – Implantação de Software


Após a adoção de todo o processo é necessário colocar o software em produção. Após ir para produção, falhas podem aparecer e um processo claro de resposta a incidentes deve estar estabelecido. Eventuais problemas de segurança devem ser tratados sem que causem grandes problemas aos usuários e a organização.

Conclusões


Gradualmente, as organizações serão pressionadas a adotar um modelo de segurança em desenvolvimento de software e os envolvidos devem se adequar a esta nova realidade. O processo de segurança em desenvolvimento exige que a organização adote boas práticas de desenvolvimento e se adeque a nova cultura de desenvolvimento seguro de software.

Apesar de relativamente nova a iniciativa de segurança em desenvolvimento, é cada vez mais abundante os modelos e ferramentas para suporte ao processo. Nenhuma tecnologia isolada irá aumentar a segurança do software desenvolvido. É necessário recursos, tempo e dedicação para que gradativamente a organização aumente a segurança de seus sistemas computacionais. Como a segurança das aplicações fará parte das atribuições e metas de conformidade da organização é necessário que a alta gestão da organização apoie a iniciativa de desenvolvimento de software seguro e fornece todos os recursos necessário.

Sobre o Autor


Wagner Elias atua com Segurança da Informação desde 2004, tendo trabalhado como consultor, líder de equipes e gerente de consultoria. Tem ampla experiência na condução de projetos em IT Security com soluções implementadas em empresas dos mais diversos segmentos. Possui as certificações CBCP, SANS GIAC GHTQ, ITIL e CobiT Foundations além de certificações de produtos de SIEM e WAF. É fundador e líder do capítulo brasileiro da OWASP, ocupou o cargo de diretor de conteúdo na gestão 2006-2008 e de eventos da gestão 2008-2010 do capítulo brasileiro da ISSA. É co-fundador e sócio da Conviso IT Security, onde atua como Gerente de R&D, responsável pela gestão de pesquisa e desenvolvimento de projetos de consultoria.

Referências



  1. Application Lifecycle Management

  2. Guide to the Software Engineering Body of Knowledge (SWEBOK)

  3. Building Security In Maturity Model

  4. Bom código é suficiente para um projeto ter sucesso?

  5. Inimigos do software seguro

  6. Visualization of Version Control Information

  7. Software QA and Testing Resource Center

  8. Acompanhamento de Bugs Indolor

  9. Continuous Integration: Improving Software Quality and Reducing Risk [Paperback]

  10. CI Feature Matrix

  11. Open Web Application Security Project

  12. ESAPI (Enterprise Security API)

  13. Java Swingset

  14. PHP Swingset

  15. .Net Swingset

  16. OWASP Secure Coding Practices

  17. Microsoft Threat Modeling

  18. O uso de ferramentas de Bug Tracker no tratamento de vulnerabilidades

  19. OWASP Testing Guide

  20. OWASP Code Review

  21. O2 Platform

segunda-feira, 13 de setembro de 2010

Porque o Requisito 6 do PCI DSS pode ser mais um Snake Oil

Este artigo está também disponível para leitura on-line no Scribd.

por Eduardo V. C. Neves | Operações

Nas próximas semanas o PCI Council irá promover uma revisão no PCI Data Security Standard (PCI DSS), buscando esclarecer pontos que causam confusão na implementação do padrão pelas empresas. É uma iniciativa louvável e que mostra o comprometimento deste padrão em buscar o estabelecimento de um nível de segurança adequado nas empresas, porém a interpretação errada pode levar mais uma vez as empresas a uma falsa sensação de segurança ao estarem aderentes ao padrão. Este artigo aborda como o Requerimento 6 pode ser plenamente atendido com o desenvolvimento e a implementação de um Secure Development Lifecycle nas empresas, reduzindo de forma significativa a probabilidade de não-aderência ao padrão e estabelecendo um nível de proteção real e eficiente para as aplicações utilizadas no trato dos dados do portador do cartão.

Snake Oil e Aderência a um Padrão


Em 2008 eu publiquei um artigo intitulado “Entendendo o PCI: Porque os padrões promovidos pelo PCI Council são bem mais que um simples snake oil”. A minha opinião não mudou nem um pouco nestes dois anos, ainda acho que o PCI DSS e os padrões relacionados pode ser uma revolução ao levar a segurança técnica para empresas que nem sabiam o que era antes da obrigação.

Porém, como qualquer padrão, ele está sujeito à forma como as pessoas o interpretam, sejam elas as obrigadas a implementar os controles ou as que o auditam. O ainda impressionante caso da Heartland Payment Systems deixou claro para os mais céticos que tamanho corporativo e imensos investimentos em segurança não são suficientes para evitar o comprometimento de dados privados. O que tenho escutado de algumas pessoas é uma interpretação equivocada do Requerimento 6, onde a aderência está fundamentada em testar as aplicações desenvolvidas em busca das vulnerabilidades listadas no OWASP Top 10 e ajustar estas para ter um software seguro.

O OWASP Top 10 é uma lista muito bem construída e constantemente atualizada que apresenta as dez vulnerabilidades mais comuns em aplicações web, o que pode acontecer em sua exploração e como evitar que ocorram. Só isso, e como não é um padrão, acho incoerente afirmar que está “aderente”. Além do mais, esta lista é somente um dos requisitos solicitados pelo PCI DSS, não sendo exaustivo e devendo ser considerado parte do processo, como o próprio texto do padrão informa em “6.3. Desenvolver aplicativos de software de acordo com o PCI DSS (por exemplo, autenticação segura e registros) e com base nas melhores práticas do setor, além de incorporar a segurança das informações em todo o ciclo de vida do desenvolvimento dos softwares. “

Limitar a segurança das aplicações ao que está recomendado no OWASP Top 10 é um snake oil tremendo que possivelmente irá satisfazer os auditores e deixar a empresa completamente exposta com vulnerabilidades tão sérias quando um Cross Site Scripting. O OWASP Top 10 lista problemas mais comuns, e não todos os problemas. Falhas de lógica que são exclusivas em aplicações específicas não aparecem por motivos óbvios e podem ser extremamente danosas. Quando existe uma sensação de segurança, as pessoas tendem a naturalmente baixar a guarda por acharem que o problema está resolvido, focando os esforços em outros pontos de atenção. Se isso ocorre com uma “aderência” ao OWASP Top 10, mais um problema é criado.

As alterações propostas pelo PCI Council


O que o PCI Council busca com as alterações propostas, é estabelecer uma abordagem mais compreensiva para as empresas uma vez que as próprias recomendações atuais do Padrão muitas vezes são confusas para profissionais que não trabalham com IT Security, ou até mesmo para pessoas experientes. Em especial, duas alterações afetam diretamente o Requisito 6 e serão alteradas para esclarecer como as empresas devem tratar os seguintes pontos:

  • Evoluir o Requerimento 6.2 para que seja possível criar um ranking de vulnerabilidades de acordo com seu risco de exploração, o que possivelmente será concluído com a recomendação de um processo de tratamento a médio prazo.

  • Esclarecer o Requerimento 6.5 para eliminar redundâncias no que é solicitado no ponto 6.3.1 e ainda incluir novos padrões de mercado como recomendação, além do OWASP Top 10.


O Requerimento 6.2


Eu insisto na abordagem que estabelecer um nível risco para uma vulnerabilidade é algo extremamente complexo e depende de interações que só podem ser alcançadas em um processo de Risk Assessment, algo que empresas que querem gastar cada vez menos com o PCI DSS e simplesmente alcançar a certificação, dificilmente irão investir. Porém, ao substituir o termo “risco” por impacto total, derivado do que pode acontecer na exploração de uma vulnerabilidade e a probabilidade de ocorrência, baseada no seu conhecimento e existência de formas de automação, faz sentido sim. Mas ainda com essa consideração, o que fazer no caso de efetivação de uma ameaça de baixo impacto total que possa causar um estrago inesperado?

Para ilustrar este cenário, tomo como exemplo um dos projetos que fizemos para identificar vulnerabilidades em aplicações web. De todas as vulnerabilidades que identificamos, duas eram consideradas de baixo impacto total, mas se ambas fossem exploradas de forma simultânea, o resultado poderia levar a empresa a pagar uma multa considerável para um de seus parceiros comerciais. Esta informação não era de conhecimento do nosso cliente, e foi obtida graças ao fato de um dos membros de nossa equipe ter trabalhado na mesma indústria e passado por um cenário similar no passado. Como fica o ranking de vulnerabilidades neste caso?

Indo um pouco além, existe uma enorme probabilidade das empresas desconsiderarem fatores totalmente relevantes para a forma como uma vulnerabilidade pode ser explorada:

  • Falhas na camada de arquitetura que podem ser ignoradas ou mesmo não existir durante a elaboração do ranking, tal como o posicionamento de um banco de dados no lugar errado.

  • Problemas na camada de rede de dados que também não são considerados, como falhas na implementação de HTTPS ou falhas correlatas como a persistente inexistência da flag SECURE nos cookies utilizados.


A idéia é muito boa, mas tenho receio de que a prática comum será simplesmente criar um ranking de vulnerabilidades que serão tratadas de forma isolada, o que volta na falsa sensação de segurança que abordei no começo deste artigo.

O Requerimento 6.5


Na versão atual do padrão, os Requisitos 6.3.1 e 6.5 tem textos e objetivos similares, ambos exigem que as aplicações sejam desenvolvidas seguindo critérios mínimos de segurança. Enquanto o 6.3.1 estabelece o processo de desenvolvimento seguro evitando vulnerabilidades conhecidas e indo além ao abordar processos (ex. Separação de funções), o 6.5 indica o OWASP como fonte de recursos através de um nome genérico: “Open Web Application Security Project Guide”.

Colocar estes conteúdos em um só requerimento é uma excelente idéia, porém eu iria um pouco além para aproveitar a ocasião e esclarecer pontos que são óbvios para quem conhece o processo de desenvolvimento seguro, mas não tem sido seguidos pelas pessoas que respondem pela adequação ao PCI DSS na maioria dos casos que conheço.

  • Testar as alterações que ocorrem em uma aplicação, incluindo uso de patches é correto, mas o texto é muito confuso tanto em inglês quando em português: “6.3.1. Teste de todos os patches de segurança e alterações de configuração no sistema e no software antes da implementação”. Esclarecer este ponto é fundamental, uma vez que leva as pessoas a entenderem que o cerne da questão são patches, e não alterações como um todo.

  • Deixar claro que o OWASP Top 10 é apenas uma das várias referências e não deve ser um limitador. Quando o texto aborda “... com base nas diretrizes de codificação seguras, como o Guia do projeto de segurança do aplicativo aberto da Web.” abre demais o assunto e confunde qualquer um que não tenha experiência em IT Security. A propósito, o OWASP mantém um número enorme de guias de suporte para desenvolvimento seguro, não seria muito mais assertivo dar o nome do que é recomendado?


Indo além neste requerimento, o que fazer com as aplicações legadas que estão vulneráveis e vão demorar um bom tempo para entrarem no circuito de desenvolvimento seguro, se este efetivamente for criado da forma correta? Sem dúvida existe o Requerimento 6.6 que recomenda o uso de um Web Application Firewall (WAF), mas um WAF não protege aplicações de falhas de lógica e para ser efetivo depende de uma administração que inclui tunning de suas funções. Novamente, manter requerimentos isolados é um risco que irá gerar uma grande carga de trabalho e investimentos contínuos das empresas sem que exista uma real elevação do nível de segurança das aplicações utilizadas. É necessário pensar de forma integrada.

Uma abordagem mais eficiente


Para obter uma aplicação do PCI DSS sem que este seja mais um snake oil é necessário olhar o padrão como um todo e estabelecer critérios que façam sentido para a empresa. No caso da manutenção de aplicações seguras, recomendo um abordagem que inclua o uso de três funções conjuntas: a proteção para o legado de aplicações, um ciclo de desenvolvimento seguro e a capacitação adequada das empresas e seus técnicos para garantir a evolução do conhecimento em segurança, e a conseqüente melhoria do nível de segurança.

Tratando o legado de aplicações


Administrar um legado é sempre um desafio para qualquer empresa, são computadores antigos que não suportam atualizações, softwares que não funcionam com os requisitos atuais mas não podem ser trocados por estarem integrados com outros sistemas e aplicações que precisam ser tratadas para adequar a segurança, e isso nem sempre depende somente da empresa. Em comum, existem aspectos operacionais que não estão escritos no PCI DSS e em nenhum outro padrão, mas fazem parte do dia-a-dia da maioria das empresas e devem ser considerados como pontos de criação de um processo que funcione.

  • Aplicações legadas em áreas de negócio podem ter sido negociadas diretamente com o fabricante sem o envolvimento de TI. Como resultado, elas ficam “escondidas” no parque de produtos da empresa, e devem ser buscadas uma a uma para adequação.

  • Aplicações legadas podem ter funções em sua construção que impeçam alterações para adequação de segurança. Falta de acesso ao código-fonte e necessidade de operação sob um usuário administrator são dois pontos comuns e que necessitam de tratamento especial.

  • Aplicações legadas podem suportar processos críticos do negócio, e sua interrupção depende de muito planejamento e negociação com as áreas envolvidas. É impraticável pensar que será possível testar e adequar a segurança dentro de um cronograma feito somente por TI.

  • O volume de aplicações legadas, pode levar a uma necessidade de investimento nos testes de segurança que nunca será aprovado pelos responsáveis. Em um de nossos clientes, já trabalhamos com 80 aplicações com estas características que precisavam ser adequadas em 90 dias.


Para adequar a segurança deste legado de forma eficiente é fundamental estabelecer a abordagem de testes mais adequada para o volume e características únicas (ex. Tipo de linguagem utilizada) em cada cenário e desenvolver uma ação onde fique muito claro como o processo será feito e o que é esperado de cada área participante. Estratégias que funcionam e podem ser utilizadas em praticamente qualquer mercado estão baseadas nesta premissa.

Escolhendo o modelo de teste adequado


Existem, no mínimo, três formas de se buscar vulnerabilidades em aplicações: security scan, penetration test e code review. As diferenças entre elas podem ser resumidas no gráfico abaixo, onde o nível de esforço e qualidade dos resultados estão diretamente relacionados.



  • Security Scan: Identifica vulnerabilidades comuns (ex. Cross Site Scripting e SQL Injection), porém não cobre falhas de lógica e violações de confiança na aplicação. É uma abordagem onde deve-se esperar somente uma visão geral das vulnerabilidades.

  • Penetration Test: Feito da forma correta, envolve o security scan e uma série de testes manuais para validação de resultados obtidos por ferramentas e identificação de vulnerabilidades lógicas na interação entre os componentes (ex. Servidores Web).

  • Code Review: Como envolve a análise do código e a forma como a aplicação se comporta em modo de execução, é um teste completo que permite identificar vulnerabilidades e ainda modelar as ameaças relacionadas.


Usar somente uma destas abordagens para testar o nível de segurança de aplicações é uma opção que não recomendo, se você quiser preservar o seu investimento e ter uma administração de segurança que consiga equilibrar os recursos disponíveis com a obtenção de um nível de proteção adequado. Desenhar uma abordagem que obtenha o melhor de cada modelo de teste é fundamental para garantir uma velocidade aceitável na obtenção de resultados e criar um ranking de quais aplicações devem ser adequadas no começo da fila de forma correta.

Uma das formas que usamos com sucesso nos últimos anos é simples e funciona muito bem:

  • As aplicações são todas submetidas a um security scan, onde os resultados mostram quais estão com a maior quantidade de vulnerabilidades simples. Este resultado é discutido com o cliente para que ele defina - com o nosso apoio - onde iremos aprofundar os testes.

  • Penetration Tests e Code Review são utilizados em conjunto, de acordo com as características da aplicação, como nos casos não é possível obter acesso ao código fonte ou não existe tempo hábil para testes mais profundos.


Com os resultados em mãos, é possível apresentar três resultados que permitem adequar o nível de segurança imediatamente e em ações futuras, onde os erros são eliminados e a camada de proteção das aplicações adequada.

  • Vulnerabilidades de simples resolução - em boa parte dos casos - podem ser imediatamente resolvidas e muitas vezes a aplicação da recomendação de melhoria elimina uma grande quantidade de pontos identificados, como gerar processos de validação de dados que eliminam um Cross Site Scripting.

  • Aplicações desenvolvidas internamente quase sempre apresentam erros similares que denotam o tipo de capacitação necessária para o time de desenvolvimento. Com este dado em mãos, é previsto um treinamento adequado que, aos poucos, permite a criação de aplicações mais seguras.

  • Aplicações adquiridas externamente - onde o código fonte quase nunca está disponível - tem suas falhas identificadas, e este resultado pode ser utilizado como massa de manobra para negociação com os fornecedores através de cláusulas contratuais e adoção de responsabilidade compartilhada.


Este primeiro passo trata do legado de aplicações e estabelece um nível mínimo de segurança que permite basear a adoção de um processo de desenvolvimento seguro na empresa. Porém, existe um ponto que é comum a maioria dos negócios e que já foi citado neste artigo: o que fazer com as aplicações suja correção não pode ser feita até um determinado momento temporal?

A proteção das aplicações de missão crítica


Missão crítica é um termo que pode ser aplicado de diversas formas e acaba muitas vezes caindo no jargão de frases de efeito. Neste caso, vamos considerar que as aplicações de missão crítica são as que não podem ser interrompidas até um determinado momento, independente se o motivo é o suporte direto a um processo de negócio (ex. Um carrinho de compras para um e-commerce) ou uma impossibilidade operacional (ex. Dependência de um componente compartilhado com outros produtos).

A questão é que a aplicação não pode ser interrompida para que as vulnerabilidades identificadas sejam tratadas, e é necessário impedir que ela seja atacada. Neste ponto é onde identificamos a função de um Web Application Firewall (WAF) que irá permitir o funcionamento do componente sem que ataques a estas falhas sejam efetivados. Note que para um WAF resultar em uma proteção eficiente, não basta colocar uma caixa no data center e esperar que ele aja sozinho, é necessário um mínimo de interação com o produto e a administração de pelo menos duas funções:

  • O tunning inicial do produto depende do comportamento das aplicações que estão sendo protegidas. O conjunto de regras que vem de fábrica com o WAF tem que ser entendido e utilizado para cada componente sob sua guarda, uma vez que elas são padronizadas exatamente por estarem sob esta premissa.

  • O virtual patching, que nada mais é do que criar ou adequar uma regra no WAF para proteger a aplicação de uma ou mais falhas, deve ser criado de acordo com cada situação. Claro que para uma grande maioria dos casos, o uso de um template fornecido no produto basta, porém são as exceções que devem ser olhadas mais de perto.


E ainda que já tenha sido citado, lembre-se que um WAF tem funções de proteção específicas e nunca deve ser considerado um substituto para testes de segurança e os processos de correção resultantes. O WAF é um guardião que provê um bom nível de proteção para as suas aplicações enquanto elas são adequadas em novos releases.

A adequação através de um SDL


A adoção de um Secure Development Lifecycle (SDL) é a base da proposta de abordagem mais eficiente descrita neste artigo, e é neste momento em que ele tem o seu papel definido. Existem diversas metodologias disponíveis na Internet e muito bem estruturadas, em comum elas apresentam ciclos que devem ser adotados de acordo com o tamanho da empresa, quantidade de esforço alocado e capacitação da equipe responsável.

Uma vez estabelecido, o SDL deve ser utilizado para adequar o nível de segurança das aplicações componentes do legado que foram testadas, evitar a ocorrência de novas vulnerabilidades pela inserção dos controles que permeiam o processo e ainda para uma função que fecha a proposta de abordagem apresentada.

Capacitação contínua e abrangente


As características do processo de desenvolvimento que geram vulnerabilidades nas aplicações, dependem muito do nível de capacitação da equipe técnica não só em como um SDL funciona, mas ainda em competências específicas de desenvolvimento seguro. Existem abordagens gerais, que permitem eliminar boa parte das falhas oriundas da falta de tratamento de dados, ainda abordagens específicas que tratam da forma como os códigos são escritos.

Porém, de nada adianta se o treinamento não for direcionado e abrangente. O direcionamento, se dá através da identificação das causas que geraram as vulnerabilidades - um dos resultados colaterais dos testes realizados - e adequação do treinamento para garantir a capacitação da equipe em competências que estejam direcionadas ao que eles fazem, ao invés de um tratamento geral que muitas vezes tem uma carga horária excessiva para a realidade destes profissionais e não chega nos pontos fundamentais para a empresa.

A abrangência se dá pela introdução do processo em todas as áreas da empresa envolvidas e pela administração de políticas que garantam a autoridade do SDL. Um lugar comum que deve ser evitado ao máximo é uma área de negócios exigir a publicação de uma determinada aplicação sem que ela passe pelo tratamento adequado, invocando o “engessamento do processo” e o “impacto nos negócios causado por TI” como causas.

É óbvio que nesta situação, a causa é da falta de planejamento da área de negócios, que não soube adequar a sua forma de trabalho com as regras da empresa. Porém, para que isso não se torne uma exceção que vire regra e realmente funcione, as pessoas destas áreas tem que ser capacitadas em como as regras funcionam. Esperar que o processo seja criado e todos o conheçam é inocente demais, mas é uma das formas como vejo as coisas acontecerem em muitos lugares.

Conclusão


Uma justificativa financeira


O PCI DSS é um padrão que exige o desenvolvimento e manutenção de segurança nas aplicações, e as multas e conseqüências do seu não cumprimento certamente são os principais motivadores para a aderências das empresas. Porém, limitar o escopo ao fluxo dos dados do portador do cartão pode ser um erro com conseqüências que vão muito além de uma multa imposta por uma bandeira de cartão de crédito.

Valores que definem as perdas relacionadas a ataques bem sucedidos contra componentes informatizados utilizados por empresas e pessoas são apresentados em pesquisas que existem há mais de duas décadas e não só serviram para as empresas definirem suas estratégias de proteção, como ainda basearam a criação de outros controles de mercado como a Seção 404 da SOX e o HIPAA. Porém, quando as falhas atingem aplicações corporativas - com suas versões web inclusas - o cenário deve ser considerado de forma específica.

  • Uma pesquisa conduzida pelo Ponemon Institute apontou que, apesar da maior preocupação ser o furto de dados corporativos através de falhas em aplicações web, 70% dos entrevistados afirmaram que suas empresas não alocam recursos suficientes para proteger estes componentes, e que 34% das vulnerabilidades críticas não são corrigidas.

  • O Gartner Group afirma que 75% das falhas de segurança exploradas com sucesso estão em aplicações e o National Institute of Standards and Technology (NIST) estima este percentual em 92%, tomando como base os resultados de órgãos do Governo dos E.U.A.


No Brasil não existem ainda pesquisas sobre o tema com amplitude suficiente para especificar o cenário em todo o mercado. Porém, desenvolvemos uma quantidade considerável de projetos nesta área desde 2008 em empresas de grande e médio porte e os resultados não diferem da realidade apresentada nas pesquisas citadas.

Se tomarmos como base para uma projeção racional na realidade do nosso País, a estimativa de movimentação superior a R$ 14 bilhões no comércio eletrônico para 2010, mostra o valor dos prejuízos que as empresas podem sofrer com ataques bem sucedidos às aplicações web que suportam este tipo de processo de venda. Porém, existem custos ocultos que nem sempre são percebidos quando existe uma análise de falhas em aplicações.

  • Aplicações que permitam aos clientes de uma empresa serem lesados pela exploração de uma falha podem gerar processos legais com base no Código Civil, sendo que já existe jurisprudência sobre o assunto.

  • Falhas em aplicações que permitam a inserção de malware e posterior contaminação de usuários, além de poderem ser utilizados para processos dos lesados, geram um grande impacto negativo na mídia como ocorrido em 2009 com uma série de web sites brasileiros.


Considere que, além do crescimento anual de 35% no acesso da população à Internet, as redes sociais hoje movimentam 62% do tráfego da Internet brasileira e a exposição de uma vulnerabilidade nestes canais, assim como a opinião do público-alvo de qualquer empresa, estão totalmente capilarizadas e com alta velocidade de proliferação. Pense além do PCI DSS, limitar o escopo e buscar o máximo de controles com o mínimo de investimentos em uma porção do seu Ambiente Informatizado é arriscado e não permite o uso de uma grande oportunidade para estabelecer um processo de segurança que atenda a todas as aplicações, resultando em aspectos financeiros positivos para toda a empresa.

Metodologia é somente a base para um processo operacional


Implementar controles de segurança adequados no processo de desenvolvimento de software, proporciona a garantia de que as funções esperadas para os produtos serão atendidas com a redução dos riscos na exploração de vulnerabilidades para níveis realmente aceitáveis. Porém implementar estas medidas pode ser um processo impossível de ser concluído, caso a abordagem não seja estabelecida para atender à realidade da empresa e aceitar a evolução natural do nível de maturidade estabelecido.

As metodologias citadas neste artigo como base para um SDL são similares ao proporem um processo estruturado de inserir práticas de segurança no processo de desenvolvimento de software. Excelentes em suas propostas, porém freqüentemente implementadas de forma equivocada no Brasil e injustamente definidas como panacéias por não atenderem a premissas que quase nunca foram bem estabelecidas.

O problema é que elas mostram como implementar as práticas de segurança em um nível de maturidade crescente, mas não como enfrentar características comuns das empresas brasileiras tais como o desconhecimento técnico da equipe em práticas de segurança, a necessidade de usar a mesma mão-de-obra para práticas diferentes (e muitas vezes antagônicas, como segurança e performance), e a prática comum de colocar em produção aplicações que atendam objetivos de negócio imediatos, ainda que sejam vulneráveis.

Use as metodologias como base, pense em como a sua empresa funciona e equilibre estes aspectos. O PCI DSS tem sido um problema em muitas implementações pela inexistência de uma análise criteriosa de como criar controles amplos e que não só atendam os requerimentos, como ainda ampliem o nível de segurança como um todo. Apesar de parecer um aumento desnecessário de investimento, esta opção permite que a empresa realmente atinja um bom nível de segurança, aderindo ao PCI DSS como conseqüência das práticas que permitem a gestão em Segurança da Informação.

Não deixe o PCI DSS ser um snake oil na sua empresa, depende somente de como ele será interpretado e de conseguir usar as limitações deste padrão a seu favor. O Requerimento 6 pode ser a oportunidade ideal para que finalmente um SDL seja implementado, e todas as aplicações tenham as proteções adequadas, beneficiando não só a aderência ao padrão, mas a forma como os seus clientes fazem negócios com você. Eles irão perceber a diferença, é só uma questão de mais algum tempo.

Sobre o Autor


Eduardo Vianna de Camargo Neves trabalha com Segurança da Informação desde 1997, tendo atuado como auditor, consultor e Security Officer. É sócio-fundador e Gerente de Operações da Conviso IT Security, responsável pela administração e estratégia da empresa. Serve ainda como membro do Capítulo Brasil do OWASP, do OWASP Global Education Committee na América Latina e voluntário no (ISC)2.