Searching...
Español
EnglishEnglish
EspañolSpanish
简体中文Chinese
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
Building Secure and Reliable Systems

Building Secure and Reliable Systems

Best Practices for Designing, Implementing, and Maintaining Systems
por Heather Adkins 2020 541 páginas
3.86
183 calificaciones
Escuchar
Try Full Access for 7 Days
Unlock listening & more!
Continue

Puntos clave

1. Los frameworks garantizan seguridad y fiabilidad en todas las aplicaciones

Los frameworks permiten reutilizar código: en lugar de considerar todos los aspectos de seguridad y fiabilidad que afectan a una funcionalidad o característica, los desarrolladores solo necesitan personalizar un bloque específico.

Protección estandarizada. Los frameworks ofrecen un enfoque coherente para abordar preocupaciones comunes de seguridad y fiabilidad en múltiples aplicaciones. Al centralizar funciones críticas como autenticación, autorización y manejo de errores, los frameworks reducen la probabilidad de vulnerabilidades derivadas de implementaciones inconsistentes. Este método permite que expertos en la materia diseñen y desarrollen bloques seguros, beneficiando a todos los equipos que utilizan el framework.

Mayor productividad. El uso de frameworks incrementa la productividad de los desarrolladores, quienes pueden concentrarse en la lógica del negocio en lugar de reinventar funciones de seguridad y fiabilidad. Además, suelen incluir herramientas integradas para monitoreo, registro y optimización del rendimiento, lo que agiliza aún más el proceso de desarrollo. Esta estandarización facilita también la comprensión de la seguridad y fiabilidad del código, al aplicar patrones comunes de forma consistente en los proyectos.

2. La simplicidad en el diseño del código mejora la seguridad y el mantenimiento

Evitar el código YAGNI conduce a una mayor fiabilidad, y un código más simple reduce los errores de seguridad, las oportunidades de equivocarse y el tiempo que los desarrolladores dedican a mantener código no utilizado.

Reducir la complejidad. Un código sencillo es más fácil de entender, revisar y mantener. Siguiendo principios como YAGNI (No lo vas a necesitar) y evitando la sobreingeniería, los desarrolladores pueden crear sistemas más robustos y seguros. El código simple tiene menos puntos potenciales de fallo y es menos propenso a contener vulnerabilidades ocultas.

Mejorar la mantenibilidad. La refactorización regular y la gestión de la deuda técnica son esenciales para conservar la simplicidad del código a lo largo del tiempo. Este proceso continuo previene la acumulación de código complejo y difícil de comprender, que puede generar problemas de seguridad y fiabilidad. Herramientas como linters y métricas de salud del código ayudan a los equipos a identificar áreas de mejora y mantener altos estándares de calidad.

3. La tipificación fuerte y la sanitización previenen vulnerabilidades comunes

Usar tipos fuertes protege tu código de errores que un compilador no detecta.

Seguridad de tipos. La tipificación fuerte permite detectar errores en tiempo de compilación en lugar de en tiempo de ejecución, evitando muchas vulnerabilidades comunes antes de que lleguen a producción. Al usar tipos específicos para diferentes contextos (por ejemplo, SafeHtml para contenido HTML, SafeUrl para URLs), los desarrolladores pueden imponer propiedades de seguridad desde el diseño. Esto dificulta la introducción de vulnerabilidades como inyección SQL o cross-site scripting (XSS).

Validación de entradas. La sanitización adecuada de las entradas es fundamental para prevenir vulnerabilidades de seguridad. Utilizando bibliotecas y frameworks dedicados al manejo de datos de usuario, los desarrolladores aseguran que toda la información sea validada y limpiada antes de usarse en operaciones sensibles. Esto incluye:

  • Escapar caracteres especiales en contenido generado por usuarios
  • Validar y sanitizar URLs y rutas de archivos
  • Aplicar una estricta comprobación de tipos en todas las entradas

4. Las pruebas unitarias verifican el comportamiento de componentes individuales

Las pruebas unitarias suelen ejecutarse localmente como parte del flujo de trabajo de ingeniería para proporcionar retroalimentación rápida a los desarrolladores antes de enviar cambios al código.

Verificación granular. Las pruebas unitarias se centran en comprobar el comportamiento de componentes de software aislados. Este enfoque permite detectar errores temprano en el desarrollo y asegura que cada componente funcione correctamente antes de integrarse. Las buenas prácticas incluyen:

  • Escribir pruebas junto con el código o incluso antes (Desarrollo guiado por pruebas)
  • Cubrir casos normales y extremos
  • Usar mocks y stubs para aislar dependencias

Retroalimentación continua. Integrar las pruebas unitarias en el flujo de trabajo permite detectar regresiones y efectos secundarios no deseados rápidamente. Este ciclo continuo ayuda a mantener la calidad del código y evita la introducción de nuevos errores. Las canalizaciones automatizadas de CI/CD pueden ejecutar pruebas unitarias en cada cambio, brindando retroalimentación inmediata a los desarrolladores.

5. Las pruebas de integración evalúan las interacciones a nivel de sistema

Las pruebas de integración van más allá de las unidades individuales y abstracciones, reemplazando implementaciones falsas o simuladas de abstracciones como bases de datos o servicios de red por implementaciones reales.

Verificación a nivel de sistema. Las pruebas de integración evalúan cómo interactúan los distintos componentes de un sistema, detectando problemas que no se aprecian al probar unidades aisladas. Estas pruebas aseguran que el sistema funcione correctamente en conjunto, incluyendo interacciones con dependencias externas como bases de datos y APIs. Aspectos clave incluyen:

  • Configurar entornos de prueba realistas
  • Gestionar datos de prueba de forma segura
  • Manejar operaciones asíncronas y problemas de sincronización

Equilibrio entre cobertura y velocidad. Aunque las pruebas de integración aportan información valiosa sobre el comportamiento del sistema, suelen ser más lentas y consumir más recursos que las pruebas unitarias. Los equipos deben encontrar un equilibrio entre una cobertura integral y mantener ciclos de retroalimentación rápidos. Estrategias como pruebas de integración selectivas basadas en evaluación de riesgos ayudan a optimizar la cobertura sin sacrificar la velocidad de desarrollo.

6. Las herramientas de análisis dinámico detectan errores y vulnerabilidades en tiempo de ejecución

El análisis dinámico de programas examina el software ejecutando los programas, potencialmente en entornos virtualizados o emulados, con fines que van más allá de las pruebas.

Detección de errores en tiempo de ejecución. Herramientas de análisis dinámico como los sanitizadores pueden detectar diversos errores y vulnerabilidades que no se evidencian mediante análisis estático o pruebas convencionales. Estas herramientas instrumentan el código durante la compilación para añadir verificaciones en tiempo de ejecución de problemas como:

  • Fugas de memoria y desbordamientos de búfer
  • Errores de uso después de liberar memoria
  • Condiciones de carrera y bloqueos
  • Comportamientos indefinidos

Consideraciones de rendimiento. Aunque las herramientas de análisis dinámico ofrecen información valiosa, pueden afectar significativamente el rendimiento. Por ello, suelen ejecutarse en compilaciones nocturnas o pipelines de prueba dedicados, equilibrando la necesidad de análisis exhaustivo con la velocidad de desarrollo. Los datos obtenidos ayudan a priorizar correcciones y mejorar la calidad general del código.

7. Las pruebas de fuzzing descubren casos límite y entradas inesperadas

El fuzzing puede ser útil para probar la resiliencia de servicios.

Generación automatizada de entradas. Las pruebas de fuzzing consisten en generar grandes cantidades de entradas aleatorias o semi-aleatorias para descubrir errores y vulnerabilidades. Esta técnica es especialmente eficaz para encontrar casos límite y comportamientos inesperados que las pruebas manuales podrían pasar por alto. El fuzzing puede identificar:

  • Problemas de corrupción de memoria
  • Fallos en la validación de entradas
  • Vulnerabilidades de denegación de servicio
  • Errores de análisis en formatos de archivo o protocolos de red

Fuzzing continuo. Integrar el fuzzing en pipelines de integración continua permite a los equipos explorar constantemente sus sistemas en busca de nuevas vulnerabilidades. A medida que la base de código evoluciona, el fuzzing puede detectar regresiones o problemas introducidos por cambios. Herramientas como libFuzzer y AFL facilitan la implementación de fuzzing en diversos tipos de software.

8. La validación continua asegura la resiliencia constante del sistema

Suites de pruebas cuidadosamente diseñadas pueden evaluar la corrección de diferentes piezas de software que realizan la misma tarea.

Resiliencia proactiva. La validación continua va más allá de las pruebas tradicionales al ejercitar constantemente el sistema bajo diversas condiciones. Este enfoque ayuda a garantizar que el sistema mantenga su resiliencia frente a fallos y ataques a lo largo del tiempo. Las técnicas incluyen:

  • Experimentos de ingeniería del caos
  • Simulacros regulares de recuperación ante desastres
  • Escaneos automatizados de seguridad y pruebas de penetración
  • Pruebas de estrés de rendimiento bajo cargas realistas

Modelos de amenaza en evolución. A medida que los sistemas crecen y cambian, pueden surgir nuevas vulnerabilidades y modos de fallo. La validación continua ayuda a los equipos a anticiparse a estos retos mediante la reevaluación periódica de la resiliencia. Este proceso debe incluir la actualización de modelos de amenaza, la revisión de escenarios de prueba y la incorporación de aprendizajes derivados de incidentes reales y casi accidentes.

Última actualización:

Want to read the full book?

FAQ

What's Building Secure and Reliable Systems about?

  • Focus on Integration: The book emphasizes integrating security and reliability into the entire lifecycle of system design, implementation, and maintenance.
  • Practical Guidance: It offers practical advice and best practices for organizations of all sizes, from startups to large enterprises.
  • Cultural Aspects: The authors discuss the importance of fostering a culture of security and reliability within organizations.

Why should I read Building Secure and Reliable Systems?

  • Comprehensive Resource: It serves as a guide for professionals involved in system design and operations, offering insights from experienced practitioners at Google.
  • Real-World Examples: The book shares case studies and examples, making the concepts relatable and applicable to various organizational contexts.
  • Improving Practices: Readers can learn how to improve their organization's security posture and reliability practices.

What are the key takeaways of Building Secure and Reliable Systems?

  • Integration of Principles: Security and reliability should be integrated into every stage of the system lifecycle.
  • Crisis Management: Effective crisis management strategies, including incident response planning, are outlined.
  • Cultural Importance: A culture that prioritizes security and reliability is essential for resilient systems.

What are the best quotes from Building Secure and Reliable Systems and what do they mean?

  • "Security and reliability are inherent properties of a system.": These aspects should be integrated from the beginning.
  • "A culture of inevitability can help teams have the appropriate frame of mind to build secure and reliable systems.": Accepting that failures can happen leads to better resilience.
  • "Everyone is responsible for security and reliability.": Security and reliability should be a collective effort across the organization.

What is the principle of least privilege in Building Secure and Reliable Systems?

  • Definition: Users should have the minimum access necessary to accomplish their tasks.
  • Reducing Risk: Limiting access minimizes the potential for mistakes or malicious actions.
  • Implementation Strategies: Strategies include using small functional APIs and advanced authorization controls.

How does Building Secure and Reliable Systems define adversaries?

  • Understanding Adversaries: Adversaries are individuals or groups that may exploit system vulnerabilities.
  • Motivations: Motivations include financial gain, activism, and espionage.
  • Frameworks for Analysis: The book provides frameworks for analyzing adversaries, aiding in designing resilient systems.

What role does culture play in security and reliability according to Building Secure and Reliable Systems?

  • Cultural Shift: Building a culture of security and reliability is essential for long-term success.
  • Empowerment and Training: Training employees and empowering them to take ownership of security practices is crucial.
  • Collaboration and Communication: Open communication and collaboration help identify potential issues early.

What is the role of the incident commander (IC) in crisis management as described in Building Secure and Reliable Systems?

  • Leadership During Incidents: The IC leads the incident response team and makes critical decisions.
  • Maintaining Morale: The IC focuses on maintaining team morale during high-pressure situations.
  • Handover Processes: The IC manages handovers between shifts to ensure continuity.

How does Building Secure and Reliable Systems address the trade-offs between security and reliability?

  • Balancing Act: Decisions in one area can impact the other, requiring careful consideration.
  • Design Considerations: Designers should ensure security measures do not compromise reliability.
  • Real-World Examples: Examples show how organizations navigate these trade-offs effectively.

What are some best practices for designing secure systems in Building Secure and Reliable Systems?

  • Design for Understandability: Systems should be understandable to aid in security and reliability.
  • Use of Proxies: Safe proxies manage access and enforce security policies.
  • Continuous Improvement: Regularly review and update security practices based on new insights.

What are the advanced mitigation strategies discussed in Building Secure and Reliable Systems?

  • Defense in Depth: Implement multiple defensive measures to protect systems.
  • Automated Response Mechanisms: Use automated systems for quick incident response.
  • Regular Testing and Updates: Continuously test and update security measures to adapt to threats.

How does Building Secure and Reliable Systems suggest handling legacy code?

  • Consolidate Exemption Mechanisms: Simplify the codebase to reduce vulnerabilities.
  • Refactor Regularly: Improve security and reliability through regular refactoring.
  • Avoid Overengineering: Promote the YAGNI principle to keep the codebase manageable.

Reseñas

3.86 de 5
Promedio de 183 calificaciones de Goodreads y Amazon.

Building Secure and Reliable Systems genera opiniones encontradas, con una calificación promedio de 3.90 sobre 5. Los lectores valoran su enfoque exhaustivo sobre los principios de seguridad y fiabilidad, especialmente en el contexto de grandes organizaciones. Muchos lo consideran útil tanto para la formación como para consultarlo como guía de referencia. Sin embargo, algunos critican su estructura, su extensión y la falta de claridad en ciertos pasajes. El libro es reconocido por integrar de manera efectiva los conceptos de seguridad y fiabilidad, aunque también se señala que está muy centrado en Google. Mientras que algunos capítulos resultan demasiado teóricos o detallados, otros son sumamente prácticos. En conjunto, se recomienda para profesionales de seguridad y SREs.

Your rating:
4.38
114 calificaciones

Sobre el autor

Heather Adkins es una profesional destacada en el ámbito de la ciberseguridad y la tecnología de la información. Como autora, ha aportado de manera significativa a la literatura sobre sistemas seguros y confiables, basándose en su amplia experiencia en la industria. Adkins es reconocida por su labor en Google, donde ha desempeñado un papel fundamental en el desarrollo e implementación de prácticas de seguridad. Su experiencia abarca áreas como la gestión de riesgos, la respuesta a incidentes y la ingeniería de seguridad. A través de sus escritos, Adkins busca compartir las mejores prácticas y conocimientos adquiridos al trabajar en entornos tecnológicos de gran escala, ayudando a otras organizaciones a mejorar su postura en seguridad y confiabilidad.

Listen
Now playing
Building Secure and Reliable Systems
0:00
-0:00
Now playing
Building Secure and Reliable Systems
0:00
-0:00
1x
Voice
Speed
Dan
Andrew
Michelle
Lauren
1.0×
+
200 words per minute
Queue
Home
Swipe
Library
Get App
Create a free account to unlock:
Recommendations: Personalized for you
Requests: Request new book summaries
Bookmarks: Save your favorite books
History: Revisit books later
Ratings: Rate books & see your ratings
250,000+ readers
Try Full Access for 7 Days
Listen, bookmark, and more
Compare Features Free Pro
📖 Read Summaries
Read unlimited summaries. Free users get 3 per month
🎧 Listen to Summaries
Listen to unlimited summaries in 40 languages
❤️ Unlimited Bookmarks
Free users are limited to 4
📜 Unlimited History
Free users are limited to 4
📥 Unlimited Downloads
Free users are limited to 1
Risk-Free Timeline
Today: Get Instant Access
Listen to full summaries of 73,530 books. That's 12,000+ hours of audio!
Day 4: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 7: Your subscription begins
You'll be charged on Aug 30,
cancel anytime before.
Consume 2.8x More Books
2.8x more books Listening Reading
Our users love us
250,000+ readers
"...I can 10x the number of books I can read..."
"...exceptionally accurate, engaging, and beautifully presented..."
"...better than any amazon review when I'm making a book-buying decision..."
Save 62%
Yearly
$119.88 $44.99/year
$3.75/mo
Monthly
$9.99/mo
Start a 7-Day Free Trial
7 days free, then $44.99/year. Cancel anytime.
Scanner
Find a barcode to scan

38% OFF
DISCOUNT FOR YOU
$79.99
$49.99/year
only $4.16 per month
Continue
2 taps to start, super easy to cancel
Settings
General
Widget
Loading...