Por Collin Greene, Gerente de Segurança de Produtos
Bilhões de pessoas usam o Facebook para se conectar com quem é importante para elas. Temos a responsabilidade de construir serviços seguros que ajudem a manter as pessoas protegidas.
No Facebook temos uma abordagem de segurança conhecida como “defesa em profundidade”, o que significa que temos diversas camadas de proteção para garantir a prevenção e redução de vulnerabilidades em nosso sistema sob vários ângulos. Esse é um esforço grande e contínuo que abrange times, áreas e diferentes fuso-horários. Engenheiros de segurança e protocolos de toda a empresa estão focados em ajudar a garantir que as proteções de dados sejam incorporadas em nosso códigos de produtos e projetos desde o início, em vez de serem adicionadas apenas no fim dos processos.
Como é praticamente impossível escrever códigos sem falhas, não é incomum um software ter algumas falhas. Embora a maioria dos bugs não tenham consequências sérias, alguns podem criar vulnerabilidades de segurança que podem ser exploradas para obter acesso a dados ou contas de usuários. Por causa disso, o Facebook está comprometido em encontrar, reparar e prevenir esses bugs. Nós trabalhamos continuamente para sempre melhorar nossas defesas para que possamos combater novas ameaças e ficar à frente de nossos adversários, o que significa que esse tipo de trabalho nunca é concluído de fato.
No gráfico abaixo, você pode ver como nossa abordagem de “defesa em profundidade” depende de uma combinação de tecnologia, times especializados em segurança e uma comunidade mais ampla de segurança para ajudar a proteger nossa plataforma. No artigo a seguir, abordaremos cada um dos cinco componentes com maior profundidade — frameworksde segurança, ferramentas de testes automatizadas, revisões por pares e de design, exercícios do “red team” (especialistas que planejam e simulam “ataques” em nossos sistemas) e nosso programa de recompensas para quem nos alertar sobre bugs.
Todo engenheiro que se junta ao Facebook passa por um abrangente treinamento de seis semanas, onde aprende processos de segurança fundamentais descritos ao longo deste artigo. Isso garante que toda nossa força de trabalho de engenharia tenha treinamento em segurança da informação.
Nós também investimos muito na criação de estruturas que ajudem os engenheiros a evitar e remover séries inteiras de bugs quando escrevem um código. Frameworkssão estruturas de trabalho pré-definidas usadas para resolver um problema de um projeto em desenvolvimento, como linguagens de programação personalizadas e bibliotecas de bits de códigos, que fornecem salva-guardas aos engenheiros à medida que escrevem o código.
Um exemplo dessa estrutura que nós construímos é chamada Hack, uma atualização de uma popular linguagem de programação PHP. A Hack ajuda desenvolvedores a evitar erros, exigindo que eles definam explicitamente e digitem certas variáveis e parâmetros em seus códigos. O acréscimo dessa informação permite que o software de desenvolvimento sinalize erros potenciais conforme o desenvolvedor está programando. A ideia é que isso funcione como um para-choque: esses requisitos canalizam e guiam as ações que um programador pode fazer, limitando o número de erros que poderiam ser introduzidos. Como um bônus, as informações adicionais que os desenvolvedores de Hack devem adicionar ao seus códigos podem facilitar muito as análises posteriores e nos ajuda a desenvolver ferramentas de análise que iremos descrever no próximo item. (Programadores podem acessar nosso blog sobre a estrutura Hack, que é um código aberto, para mais detalhes técnicos).
Nós também criamos a XHP, uma ampliação de código-aberto para o PHP/Hack que ajuda engenheiros a integrar os códigos de PHP e HTML de forma mais contínua, reduzindo a probabilidade de que erros sejam introduzidos inadvertidamente no código. Isso ajuda a evitar um tipo comum de problemas conhecido como uma vulnerabilidade de scripts entre sites.
Hack e XHP são exemplos de frameworksde segurança que ajudam a garantir que nossos engenheiros construam tecnologias mais seguras desde o início, em vez de exigir que eles criem um código adicional.
Ferramentas de testes automatizadas: analisar códigos ininterrupta e automaticamente e em escala
Visto que frameworksde segurança sozinhos não conseguem prever e prevenir todos os problemas, nós também investimos em criação de ferramentas de teste que possam inspecionar o código e encontrar erros de segurança em escala e o mais rápido possível.
Nós estamos continuamente aprendendo com incidentes de segurança que afetam o Facebook e outras empresas de tecnologia, descobrindo novos tipos de vulnerabilidade nos softwares e então usando esse conhecimento para prevenir problemas semelhantes no futuro. É aqui que entram nossas ferramentas preventivas e baseadas em detecção.
Existem muitos tipos de ferramentas que nós implementamos no Facebook, incluindo ferramentas de análise estatística, que analisam o código-fonte escrito; e ferramentas de análises dinâmicas, que executam o código para observar erros enquanto o programa está em execução. Essas ferramentas buscam por potencias problemas para que possam ser corrigidos ou sinalizados para análise posterior mais profunda.
Independentemente de como encontramos falhas de segurança, nós respondemos a isso fazendo uma triagem do problema e então fazendo um análise na raiz da causa, o que nos permite aprender com cada falha para evitar que isso – ou erros semelhantes – ocorram no futuro. Essa análise, então, retorna para outras fases de nossa abordagem de defesa em profundidade. Por exemplo, isso pode nos levar a construir novas estruturas de codificação, novas ferramentas ou novos treinamentos.
Como um exemplo, nós criamos uma ferramenta única que é atualizada regularmente para detectar novos tipos de bugs. Essa ferramenta analisa continuamente toda a base de código do Facebook – atualmente mais de 100 milhões de linhas de código Hack – para identificar vulnerabilidades. Seria incrivelmente demorado em termos de tempo e recursos para monitorar continuamente esse código, que muda milhares de vezes por dia, com revisores manuais. Essa ferramenta nos permite auditar nosso código automaticamente para certos tipos de falhas de forma contínua.
Revisões por pares e de design, exercícios do “red team”: uso de especialistas humanos para encontrar falhas de tecnologia
Todas as alterações de código passam obrigatoriamente pela revisão por pares, além da análise automatizada descrita na seção anterior. Alguns recursos novos também serão submetidos a revisões de design, em que especialistas de segurança do Facebook fornecem feedback para ajudar os engenheiros a detectar qualquer deficiência que possa levar a problemas de segurança. Essas análises internas fornecem outra camada do reforço para ajudar a garantir que estamos seguindo as melhores práticas da indústria.
Para imaginar como nossos produtos poderiam ser mal utilizados ou atacados, nós também realizamos exercícios de modelagem de ameaças, nos quais tentamos antecipar como pessoas mal intencionadas poderiam abusar de nossos sistemas ou fazer mal uso de nossa plataforma. Nós corrigimos os problemas que surgem nesses exercícios e também usamos esse aprendizado para ajudar a projetar novas estruturas de codificação e ferramentas de análise.
A próxima camada em nossa abordagem de defesa profunda é testar regularmente nossas proteções, para verificar que nosso código e nossos mecanismos de defesa estão se comportando conforme o pretendido e se nossas equipes de resposta estão prontas e capazes de detectar e investigar ataques. Para fazer isso, nós temos o chamado “red team” de especialistas em segurança interna que planejam e executam “ataques” simulados em nossos sistemas. Esses exercícios não anunciados ajudam a fornecer uma imagem realista de nossa prontidão à medida que testamos nossos sistemas e processos.
Depois, pegamos as descobertas do “red team” e, juntamente com outras equipes parceiras em toda a empresa, mapeamos como podemos responder a um incidente de segurança semelhante que é conhecido como um exercício prioritário. Isso nos ajuda a melhorar a coordenação entre as equipes que trabalham nas áreas de segurança, privacidade, políticas públicas, comunicação, produtos e jurídico, e nos ajuda a exercitar os setores organizacionais que precisaríamos acionar durante um incidente real.
Programa de recompensas Bug Bounty: engajando a comunidade de segurança global
Como enfrentamos muitos desafios de segurança similares aos de outras grandes empresas de tecnologia, investimos no compartilhamento de nossas ferramentas e conhecimentos para que possamos aprimorar a defesa de nossa comunidade de forma mais coletiva. Por sua vez, especialistas em segurança da informação externos nos fornecem seus conhecimentos por meio do programa de recompensas de bugs do Facebook, o Bug Bounty,um dos mais antigos da indústria.
Desde 2011, incentivamos pesquisadores de segurança a expor de maneira responsável potenciais problemas para que possamos corrigir os bugs, reconhecer publicamente seus trabalhos e recompensá-los. Nosso programa de recompensas de bugs tem sido fundamental para nos ajudar a detectar novas falhas rapidamente, identificar tendências e nos relacionar com os melhores talentos de segurança que estão fora do Facebook para nos ajudar a manter a plataforma segura. As lições aprendidas em cada denúncia resultam em maior esforço em segurança, tornando-nos melhores e mais rápidos em encontrar, solucionar e prevenir bugs. Até hoje, pagamos mais de US$7,5 milhões em recompensas para pesquisadores de mais de 100 países. Continuamos a inovar nessa área expandindo o programa de recompensas de bugs para incluir situações que podem levar ao abuso de dados e o comprometimento por parte de aplicativos de terceiros na plataforma.
Uma missão ímpar para proteger mais de 2 bilhões de pessoas no Facebook
Apoiar nossa comunidade global é uma grande responsabilidade que tem impulsionado investimentos e melhorias contínuas em nossa tecnologia e nos talentos da área de segurança. Nosso foco em encontrar, corrigir e prevenir problemas de segurança nos permitiu aumentar nossas defesas, ao passo em que o Facebook cresceu para apoiar bilhões de pessoas conectadas umas às outras. Às vezes, isso significou adaptar nossas estratégias para proteger nossa comunidade global em expansão, reescrevendo nossos códigos de frameworkamplamente utilizados e abrindo o código-fonte de ferramentas de segurança. E como sabemos que o trabalho de segurança nunca está 100% concluído, nossa equipe de segurança continuará inovando, conforme a comunidade do Facebook cresce.