Por Collin Greene, Director de Seguridad de Productos
Miles de millones de personas utilizan Facebook para conectarse con la gente que les importa. Y es nuestra responsabilidad diseñar servicios que mantengan protegidas a las personas.
En Facebook, adoptamos un enfoque para la seguridad llamado “defensa-en-profundidad”, que consiste en agregar capas de protección para prevenir y atender las vulnerabilidades en nuestra programación desde múltiples ángulos. Se trata de un esfuerzo masivo y constante que involucra a distintos equipos, áreas y husos horarios. Tanto los ingenieros como las prácticas de seguridad se encuentran integradas en todas las áreas de la compañía para poder garantizar que la protección de datos sea incluida en nuestro código de programación y en el diseño desde el inicio, en lugar de agregarlas al final.
Dado que resulta prácticamente imposible escribir un código de programación infalible, es común que un software enfrente problemas. Si bien la mayoría de esos incidentes no tienen consecuencias importantes, algunos pueden generar vulnerabilidades de seguridad que potencialmente podrían ser aprovechados para acceder a datos o a cuentas de usuarios. Por esta razón, Facebook está comprometido a encontrar, arreglar y prevenir esos problemas. Trabajamos continuamente para mejorar nuestras defensas de modo que podamos responder a amenazas emergentes y anticiparnos a nuestros adversarios, lo cual implica que el trabajo nunca puede considerarse terminado.
En el gráfico publicado más adelante en este texto, pueden ver cómo nuestro enfoque de “defensa-en-profundidad” se basa en una combinación de tecnología y equipos de expertos en seguridad que trabajan junto a la gran comunidad de seguridad para proteger nuestra plataforma. En el siguiente artículo, vamos a analizar cinco componentes: infraestructura de seguridad, herramientas automatizadas de prueba, revisiones internas de pares y diseño, ejercicios del “Red Team” y programa de recompensa para bugs en mayor profundidad.
Infraestructura de seguridad: Reducir errores de programación
Todos los ingenieros que se suman a Facebook atraviesan un entrenamiento integral de seis semanas en el que aprenden los procesos de seguridad fundamentales que describimos en este artículo. Esto asegura que todo nuestro personal de ingeniería recibe entrenamiento en seguridad de la información.
También invertimos mucho en construir infraestructura que ayude a los ingenieros a prevenir y eliminar conjuntos completos de problemas cuando escriben un código de programación. La infraestructura equivale a los ladrillos de una construcción, como por ejemplo los lenguajes de programación personalizados y bibliotecas de bits de código comunes, que dan salvaguardas a los ingenieros cuando están programando.
Un ejemplo de un marco que construimos se llama Hack, una actualización del popular lenguaje de programación PHP. Hack le permite a los desarrolladores evitar la introducción de errores solicitando que definan explícitamente y escriban ciertas variables y parámetros en su código. Agregar esta información le permite al software de desarrollo identificar potenciales errores mientras el desarrollador codifica. Se puede pensar en estos requerimientos como topes inflables en una pista de bowling: canalizan y orientan las acciones que un programador puede realizar, limitando la cantidad de errores que podrían introducirse. Como beneficio extra, la información adicional que los desarrolladores de Hack deben agregar al código que escriben puede hacer que el análisis posterior resulte más fácil, y nos ayuda a desarrollar las herramientas de análisis que describiremos en la siguiente sección. (Los programadores pueden leer, en el blog para desarrolladores, nuestro artículo sobre Hack, el cual es de código abierto, para saber más detalles técnicos).
También hemos creado XHP, una mejora para PHP/Hack de código abierto que ayuda a ingenieros a integrar códigos PHP y HTML de una forma más invisible, reduciendo la probabilidad de que se introduzcan errores en el código. Esto ayuda a prevenir un tipo de problema común conocido como vulnerabilidad “cross-site scripting”.
Hack y XHP son ejemplos de infraestructura de seguridad que ayuda a que nuestros ingenieros construyan tecnología más segura desde el inicio, en lugar de que escriban líneas de código adicionales.
Herramientas automatizadas de prueba: Análisis constante de códigos de programación, automáticamente y a gran escala
Dado que la infraestructura de seguridad por sí sola no pueden anticipar y prevenir todos los problemas, también invertimos en crear herramientas de análisis que puedan inspeccionar códigos y descubrir errores de seguridad a gran escala y lo más rápido posible.
Estamos aprendiendo continuamente a partir de incidentes de seguridad que afectan tanto a Facebook como a otras compañías tecnológicas, descubriendo nuevos tipos de vulnerabilidades en el software y utilizando luego este aprendizaje para prevenir incidentes similares en el futuro. Aquí es donde entran en juego nuestras herramientas preventivas y de detección.
Existen muchos tipos diferentes de herramientas que utilizamos en Facebook, incluidas las de análisis estático, que analizan códigos abiertos escritos, y las de análisis dinámico, que ejecutan el código para observar errores mientras el programa está actuando. Estas herramientas buscan problemas potenciales para que puedan corregirse o señalarse para su análisis posterior.
Sin importar cómo es que descubrimos un problema de seguridad, respondemos haciendo una clasificación del asunto y luego un análisis de sus causas principales, lo cual nos permite aprender de cada problema para prevenir que lo mismo –o errores similares– vuelvan a ocurrir en el futuro. Este análisis luego vuelve a nutrir las otras etapas de nuestro enfoque de defensa en profundidad. Por ejemplo, puede llevarnos a crear nuevos marcos de programación, herramientas, o capacitaciones.
Como ejemplo, creamos una herramienta única que actualizamos regularmente para detectar nuevas clases de problemas. Ese dispositivo analiza continuamente la base de código completa de Facebook –actualmente consiste en más de 100 millones de líneas de código Hack– para identificar vulnerabilidades. Realizar análisis manuales para monitorear constantemente tantas líneas de código que cambian miles de veces por día consumiría una increíble cantidad de tiempo y recursos. Esta herramienta nos permite auditar automáticamente nuestro código para ciertos tipos de problemas de manera constante.
Revisión de pares, revisiones diseñadas, ejercicios con el “Red Team”: utilizar expertos humanos para descubrir fallas que la tecnología no encuentra.
Todos los cambios en la programación atraviesan una revisión obligatoria realizada por pares además de los análisis automáticos descritos en la sección anterior. Algunas opciones nuevas también atravesarán revisiones diseñadas, en las cuales los expertos en seguridad de Facebook brindan información para ayudar a los ingenieros a detectar cualquier deficiencia que pueda generar problemas de seguridad. Estas revisiones internas ofrecen otra capa de escrutinio para asegurarnos de que estamos cumpliendo con las prácticas industriales recomendadas.
Para imaginar formas en que se puede abusar de o atacar a nuestros productos, también llevamos a cabo ejercicios de modelos de amenazas en los que intentamos anticipar cómo actores malintencionados podrían abusar de nuestros sistemas o hacer un uso indebido de nuestra plataforma. Corregimos los problemas que aparecen en estos ejercicios y este aprendizaje nos ayuda a diseñar nuevos marcos de programación y herramientas de análisis.
La siguiente capa de nuestro enfoque de defensa en profundidad es poner regularmente a prueba nuestras protecciones para verificar que el código y los mecanismos de defensa estén funcionando como se espera, y que nuestros equipos de respuesta estén listos y preparados para detectar e investigar ataques. Para hacerlo, tenemos lo que se llama un “Red Team” o Equipo Rojo de expertos en seguridad interna que planean y ejecutan “ataques” fingidos a nuestros sistemas. Estos ejercicios sorpresa nos ayudan a tener una imagen realista de cuán preparados estamos, poniendo intensamente a prueba nuestros sistemas y procesos.
Luego tomamos los resultados del equipo rojo y, junto con otros equipos asociados en toda la compañía, trazamos un mapa de respuesta a un incidente de seguridad similar en algo llamado “ejercicio de tablero”. Esto nos ayuda a mejorar la coordinación entre nuestros equipos que trabajan en seguridad, privacidad, políticas públicas, comunicaciones, productos, y asuntos legales, y también nos ayuda a ejercitar los músculos organizacionales que necesitaríamos durante un incidente real.
Programa de recompensa de Bugs: Involucrar a la comunidad global de seguridad
Dado que nos enfrentamos a muchos de los mismos desafíos que el resto de la industria de la tecnología, hemos invertido mucho en compartir nuestras herramientas y conocimiento para poder mejorar la defensa colectiva de nuestra comunidad. A cambio, expertos en seguridad externos nos brindan su experiencia a través del programa “bug bounty” de Facebook, uno de los más longevos de la industria.
Desde 2011, hemos alentado a investigadores de seguridad a que revelen responsablemente potenciales problemas para que podamos arreglarlos, que reconozcan públicamente su trabajo, y les pagamos una recompensa por esa tarea. Nuestro programa bug bounty ha sido determinante para que podamos detectar problemas rápidamente, descubrir tendencias, e involucrar a los mejores talentos del área de seguridad fuera de Facebook para que nos ayuden a que la plataforma sea más segura. Las lecciones aprendidas de cada reporte nutren nuestro esfuerzo más amplio en el área de la seguridad, volviéndonos mejores y más rápidos en descubrir, arreglar y prevenir problemas. Al día de la fecha, hemos pagado más de $7,5 millones en recompensas a investigadores de más de 100 países. Continuamos innovando en este rubro expandiendo el programa de recompensa para que incluya problemas que pueden generar abuso de datos y poner en riesgo aplicaciones de terceros en la plataforma.
Una misión única de proteger a más de 2.000 millones de personas en Facebook
Asistir a nuestra comunidad global es una gran responsabilidad que nos ha llevado a realizar mejoras e inversiones en tecnología y talento en el área de seguridad. Nuestro enfoque en descubrir, arreglar y prevenir problemas de seguridad nos ha permitido expandir nuestras defensas a medida que Facebook fue creciendo hasta asistir a miles de millones de personas que se conectan unas con otras. A veces esto ha significado adaptar nuestras estrategias para proteger a nuestra comunidad global en expansión, reescribir nuestros ampliamente utilizados marcos de programación y abrir el código de herramientas de seguridad originales. Y dado que sabemos que los esfuerzos de seguridad nunca están 100% terminados, nuestro equipo de seguridad continuará innovando a medida que la comunidad de Facebook siga creciendo.