Searching...
Deutsch
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
von Heather Adkins 2020 541 Seiten
3.86
100+ Bewertungen
Hören
Listen to Summary

Wichtige Erkenntnisse

1. Frameworks gewährleisten Sicherheit und Zuverlässigkeit in Anwendungen

Frameworks ermöglichen die Wiederverwendung von Code: Anstatt alle Sicherheits- und Zuverlässigkeitsaspekte für eine bestimmte Funktionalität oder ein Feature zu berücksichtigen, müssen Entwickler nur einen spezifischen Baustein anpassen.

Standardisierter Schutz. Frameworks bieten einen konsistenten Ansatz zur Bewältigung gängiger Sicherheits- und Zuverlässigkeitsprobleme in mehreren Anwendungen. Durch die Zentralisierung kritischer Funktionen wie Authentifizierung, Autorisierung und Fehlerbehandlung verringern Frameworks die Wahrscheinlichkeit von Schwachstellen, die durch inkonsistente Implementierungen entstehen. Dieser Ansatz ermöglicht es Fachexperten, sichere Bausteine zu entwerfen und zu entwickeln, von denen alle Teams profitieren, die das Framework nutzen.

Erhöhte Produktivität. Die Verwendung von Frameworks führt zu einer höheren Produktivität der Entwickler, da sie sich auf die Geschäftslogik konzentrieren können, anstatt Sicherheits- und Zuverlässigkeitsfunktionen neu zu erfinden. Frameworks bieten oft integrierte Tools für Überwachung, Protokollierung und Leistungsoptimierung, die den Entwicklungsprozess weiter rationalisieren. Diese Standardisierung erleichtert es auch, die Sicherheit und Zuverlässigkeit des Codes zu beurteilen, da gängige Muster konsistent über Projekte hinweg angewendet werden.

2. Einfachheit im Code-Design verbessert Sicherheit und Wartbarkeit

Das Vermeiden von YAGNI-Code führt zu verbesserter Zuverlässigkeit, und einfacherer Code führt zu weniger Sicherheitsfehlern, weniger Möglichkeiten für Fehler und weniger Entwicklerzeit, die für die Wartung ungenutzten Codes aufgewendet wird.

Reduzierung der Komplexität. Einfacherer Code ist leichter zu verstehen, zu überprüfen und zu warten. Durch die Befolgung von Prinzipien wie YAGNI (You Aren't Gonna Need It) und das Vermeiden von Überengineering können Entwickler robustere und sicherere Systeme erstellen. Einfacherer Code hat weniger potenzielle Fehlerquellen und ist weniger wahrscheinlich, versteckte Schwachstellen zu enthalten.

Verbesserung der Wartbarkeit. Regelmäßiges Refactoring und die Beseitigung technischer Schulden sind entscheidend, um die Einfachheit des Codes im Laufe der Zeit zu erhalten. Dieser fortlaufende Prozess hilft, die Ansammlung von komplexem, schwer verständlichem Code zu verhindern, der zu Sicherheits- und Zuverlässigkeitsproblemen führen kann. Tools wie Linters und Code-Gesundheitsmetriken können Teams helfen, Verbesserungsbereiche zu identifizieren und hohe Code-Qualitätsstandards zu wahren.

3. Starke Typisierung und Bereinigung verhindern häufige Schwachstellen

Die Verwendung starker Typen schützt Ihren Code vor Fehlern dieser Art, die ein Compiler nicht erfasst.

Typsicherheit. Starke Typisierung hilft, Fehler zur Kompilierzeit statt zur Laufzeit zu erkennen und verhindert viele häufige Schwachstellen, bevor sie in die Produktion gelangen. Durch die Verwendung spezifischer Typen für verschiedene Kontexte (z.B. SafeHtml für HTML-Inhalte, SafeUrl für URLs) können Entwickler Sicherheitsmerkmale von Anfang an durchsetzen. Dieser Ansatz macht es viel schwieriger, Schwachstellen wie SQL-Injection oder Cross-Site-Scripting (XSS) einzuführen.

Eingabevalidierung. Eine ordnungsgemäße Eingabebereinigung ist entscheidend, um Sicherheitslücken zu verhindern. Durch die Verwendung dedizierter Bibliotheken und Frameworks zur Handhabung von Benutzereingaben können Entwickler sicherstellen, dass alle Daten ordnungsgemäß validiert und bereinigt werden, bevor sie in sensiblen Operationen verwendet werden. Dies umfasst:

  • Das Escapen von Sonderzeichen in benutzergenerierten Inhalten
  • Die Validierung und Bereinigung von URLs und Dateipfaden
  • Die Durchsetzung strenger Typprüfungen für alle Eingaben

4. Unit-Tests überprüfen das Verhalten einzelner Komponenten

Unit-Tests werden typischerweise lokal als Teil der Entwicklungsabläufe ausgeführt, um Entwicklern schnelles Feedback zu geben, bevor sie Änderungen am Code einreichen.

Granulare Verifikation. Unit-Tests konzentrieren sich darauf, das Verhalten einzelner Softwarekomponenten isoliert zu überprüfen. Dieser Ansatz ermöglicht es Entwicklern, Fehler früh im Entwicklungsprozess zu erkennen und sicherzustellen, dass jede Komponente korrekt funktioniert, bevor sie integriert wird. Effektive Unit-Test-Praktiken umfassen:

  • Das Schreiben von Tests parallel oder vor dem eigentlichen Code (Test-Driven Development)
  • Die Abdeckung sowohl normaler als auch von Randfällen
  • Die Verwendung von Mocks und Stubs zur Isolierung von Abhängigkeiten

Kontinuierliches Feedback. Durch die Integration von Unit-Tests in den Entwicklungsablauf können Teams Regressionen und unbeabsichtigte Nebeneffekte schnell erkennen. Dieser kontinuierliche Feedback-Loop hilft, die Codequalität zu erhalten und die Einführung neuer Fehler zu verhindern. Automatisierte CI/CD-Pipelines können Unit-Tests bei jeder Codeänderung ausführen und Entwicklern sofortiges Feedback geben.

5. Integrationstests bewerten systemweite Interaktionen

Integrationstests gehen über einzelne Einheiten und Abstraktionen hinaus und ersetzen gefälschte oder ausgeblendete Implementierungen von Abstraktionen wie Datenbanken oder Netzwerkdiensten durch echte Implementierungen.

Systemweite Verifikation. Integrationstests bewerten, wie verschiedene Komponenten eines Systems zusammenarbeiten und decken Probleme auf, die bei der isolierten Prüfung von Einheiten nicht offensichtlich sind. Diese Tests helfen sicherzustellen, dass das System als Ganzes korrekt funktioniert, einschließlich der Interaktionen mit externen Abhängigkeiten wie Datenbanken und APIs. Wichtige Überlegungen für Integrationstests umfassen:

  • Das Einrichten realistischer Testumgebungen
  • Das sichere Verwalten von Testdaten
  • Das Handhaben asynchroner Operationen und Timing-Problemen

Ausgewogenheit zwischen Abdeckung und Geschwindigkeit. Während Integrationstests wertvolle Einblicke in das Systemverhalten bieten, sind sie typischerweise langsamer und ressourcenintensiver als Unit-Tests. Teams müssen das richtige Gleichgewicht zwischen umfassenden Integrationstests und der Aufrechterhaltung schneller Feedback-Loops finden. Strategien wie selektive Integrationstests basierend auf Risikobewertungen können helfen, die Testabdeckung zu optimieren, ohne die Entwicklungsgeschwindigkeit zu opfern.

6. Dynamische Analysetools erkennen Laufzeitfehler und Schwachstellen

Die dynamische Programmanalyse analysiert Software durch Ausführen von Programmen, möglicherweise in virtualisierten oder emulierten Umgebungen, zu Zwecken, die über das bloße Testen hinausgehen.

Erkennung von Laufzeitfehlern. Dynamische Analysetools wie Sanitizer können verschiedene Laufzeitfehler und Schwachstellen erkennen, die durch statische Analyse oder reguläre Tests nicht offensichtlich sind. Diese Tools instrumentieren den Code während der Kompilierung, um Laufzeitprüfungen für Probleme wie:

  • Speicherlecks und Pufferüberläufe
  • Use-after-free-Fehler
  • Datenrennen und Deadlocks
  • Undefiniertes Verhalten

Leistungsüberlegungen. Während dynamische Analysetools wertvolle Einblicke bieten, können sie die Leistung erheblich beeinträchtigen. Teams führen diese Tools oft als Teil von nächtlichen Builds oder dedizierten Testpipelines aus, um das Bedürfnis nach gründlicher Analyse mit der Entwicklungsgeschwindigkeit in Einklang zu bringen. Die durch dynamische Analyse gewonnenen Erkenntnisse können Teams helfen, Fehlerbehebungen zu priorisieren und die allgemeine Codequalität zu verbessern.

7. Fuzz-Tests decken Randfälle und unerwartete Eingaben auf

Fuzzing kann nützlich sein, um die Widerstandsfähigkeit von Diensten zu testen.

Automatisierte Eingabegenerierung. Fuzz-Tests beinhalten die Generierung großer Mengen zufälliger oder halbzufälliger Eingaben, um Fehler und Schwachstellen aufzudecken. Diese Technik ist besonders effektiv beim Auffinden von Randfällen und unerwarteten Verhaltensweisen, die manuelle Tests möglicherweise übersehen. Fuzz-Tests können helfen, zu identifizieren:

  • Speicherbeschädigungsprobleme
  • Eingabevalidierungsfehler
  • Denial-of-Service-Schwachstellen
  • Parsing-Fehler in Dateiformaten oder Netzwerkprotokollen

Kontinuierliches Fuzzing. Die Integration von Fuzz-Tests in kontinuierliche Integrationspipelines ermöglicht es Teams, ihre Systeme ständig auf neue Schwachstellen zu überprüfen. Während sich der Code weiterentwickelt, kann Fuzzing Regressionen oder neue Probleme aufdecken, die durch Änderungen eingeführt wurden. Tools wie libFuzzer und AFL (American Fuzzy Lop) erleichtern die Implementierung von Fuzz-Tests für verschiedene Arten von Software.

8. Kontinuierliche Validierung gewährleistet anhaltende Systemresilienz

Sorgfältig gestaltete Test-Suiten können die Korrektheit verschiedener Softwareteile bewerten, die dieselbe Aufgabe ausführen.

Proaktive Resilienz. Kontinuierliche Validierung geht über traditionelle Tests hinaus, indem das System ständig unter verschiedenen Bedingungen getestet wird. Dieser Ansatz hilft sicherzustellen, dass das System im Laufe der Zeit widerstandsfähig gegen Ausfälle und Angriffe bleibt. Techniken zur kontinuierlichen Validierung umfassen:

  • Chaos-Engineering-Experimente
  • Regelmäßige Notfallwiederherstellungsübungen
  • Automatisierte Sicherheitsüberprüfungen und Penetrationstests
  • Leistungstests unter realistischen Lastbedingungen

Evolvierende Bedrohungsmodelle. Während Systeme wachsen und sich weiterentwickeln, können neue Schwachstellen und Ausfallmodi auftreten. Kontinuierliche Validierung hilft Teams, diesen Herausforderungen einen Schritt voraus zu sein, indem sie regelmäßig die Resilienz ihrer Systeme neu bewerten. Dieser Prozess sollte die Aktualisierung von Bedrohungsmodellen, die Überarbeitung von Testszenarien und die Einbeziehung von Lehren aus realen Vorfällen und Beinaheunfällen umfassen.

Zuletzt aktualisiert:

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.

Rezensionen

3.86 von 5
Durchschnitt von 100+ Bewertungen von Goodreads und Amazon.

Sichere und zuverlässige Systeme aufbauen erhält gemischte Bewertungen, mit einer durchschnittlichen Bewertung von 3,90 von 5. Leser schätzen die umfassende Abdeckung von Sicherheits- und Zuverlässigkeitsprinzipien, insbesondere für große Organisationen. Viele finden es wertvoll für Schulungen und als Nachschlagewerk. Einige kritisieren jedoch die Struktur, Weitschweifigkeit und gelegentliche Unklarheit. Das Buch wird für die Integration von Sicherheits- und Zuverlässigkeitskonzepten gelobt, aber auch dafür, dass es stark auf Google ausgerichtet ist. Während einige Kapitel als zu theoretisch oder detailliert angesehen werden, sind andere äußerst praxisnah. Insgesamt wird es für Sicherheitsexperten und SREs empfohlen.

Über den Autor

Heather Adkins ist eine angesehene Fachfrau im Bereich der Cybersicherheit und Informationstechnologie. Als Autorin hat sie bedeutende Beiträge zur Literatur über sichere und zuverlässige Systeme geleistet, basierend auf ihrer umfangreichen Erfahrung in der Branche. Adkins ist bekannt für ihre Arbeit bei Google, wo sie eine entscheidende Rolle bei der Entwicklung und Implementierung von Sicherheitspraktiken gespielt hat. Ihre Expertise erstreckt sich auf Bereiche wie Risikomanagement, Incident Response und Sicherheitsengineering. Durch ihre Schriften möchte Adkins bewährte Verfahren und Erkenntnisse aus der Arbeit in groß angelegten Technologieumgebungen teilen, um anderen Organisationen zu helfen, ihre Sicherheits- und Zuverlässigkeitsstandards zu verbessern.

0:00
-0:00
1x
Dan
Andrew
Michelle
Lauren
Select Speed
1.0×
+
200 words per minute
Home
Library
Get App
Create a free account to unlock:
Requests: Request new book summaries
Bookmarks: Save your favorite books
History: Revisit books later
Recommendations: Get personalized suggestions
Ratings: Rate books & see your ratings
Try Full Access for 7 Days
Listen, bookmark, and more
Compare Features Free Pro
📖 Read Summaries
All summaries are free to read in 40 languages
🎧 Listen to Summaries
Listen to unlimited summaries in 40 languages
❤️ Unlimited Bookmarks
Free users are limited to 10
📜 Unlimited History
Free users are limited to 10
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 May 2,
cancel anytime before.
Consume 2.8x More Books
2.8x more books Listening Reading
Our users love us
100,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
Try Free & Unlock
7 days free, then $44.99/year. Cancel anytime.
Scanner
Find a barcode to scan

Settings
General
Widget
Appearance
Loading...
Black Friday Sale 🎉
$20 off Lifetime Access
$79.99 $59.99
Upgrade Now →