Antipatterns
Felix von Leitner
An anti-pattern is a common response to a recurring problem
that is usually ineffective and risks being highly
counterproductive.
Motto des Vortrags
[Denkt euch hier ein Foto von Mark Twain hin]
The man who does not read has no advantage over the man who cannot
read.
--Mark Twain
Struktur des Vortrags
Problem
Wir haben ein Problem
Idee
Seal Team 6 hackt schnell was
Effekt
Jetzt haben wir eine ProblemFactory
[Denkt euch hier als Illustration einen Screenshot
hiervon ]
Woran erkennt man gute Hacker?
[Visuelle Folie, denkt euch ein tolles Foto von Dennis Ritchie, Ken
Thompson und Brian Kernighan, z.B. von
hier
oder
hier .
Alle drei haben rauschende Bärte]
[Die nächste Folie hat dann Fotos von Richard Stallman und Alan Cox]
Mein erster Admin-Job
Meine Erwartungshaltung
[Denkt euch ein tolles Foto des turkmenischen Ältestenrats, von
hier ]
Niemand mit Bart weit und breit!
Der Dienstälteste wechselt bloß Tapes
Keine Prüfung, kein Test, nichts
Die gaben mir einfach so das root-Passwort
[Visuelle Slide; Foto von Johnny Depp als Captain Jack Sparrow,
sehr verwirrter Gesichtsausdruck]
Damals habe ich gelernt...
Admin wird man nicht am Ende, weil man Programmieren, Management,
Integration, Risikobewertung, Krisenbewältigung und Psychologie
gelernt hat
Admin wird man am Anfang, weil man mit wenig Gehalt zufrieden ist
Zwei Arten von Admin
Will Probleme lösen
Will Probleme verwalten
Zwei Arten von Admin
Der frische Admin:
Will, dass hier alles flutscht
Lernt neue Dinge, damit er mehr besser machen kann!
Der alte Admin:
Will, dass niemand was anfasst!
Hortet Herrschaftswissen um sich herum
Zwei Arten von Admin
[Gemeint ist Dienstalter, nicht biologisches Alter.
Entweder der Job verändert einen und/oder die jungen Idealisten
ziehen alle weiter und die konservativen Zyniker bleiben da]
Problem
Das müsste mal jemand automatisieren
Zu spät automatisiert
„Ach das geht manuell schnell genug“
Effekt
Wird jahrelang manuell gemacht
+ Tippfehler + Zeitverschwendung
Zu früh automatisiert
„Ich mach das mal schnell“
Effekt
Problem tritt nie wieder auf
Automatisierung: Normalfall
Umsetzung
Admin verschwindet für 6 Wochen
in der Versenkung
Effekt
Löst das Problem nicht
Effekt
Aber „löst“ 23 andere hochinteressante Probleme!
Effekt
Setzt frühbabylonische Artefakte aus /usr/ucb voraus
Effekt
Macht mehr Ärger als es einspart
Effekt
Amortisiert sich ca. 2370
[Denkt euch hier ein Bild der USS Enterprise D hin]
Effekt
Bis dahin bleibt das Problem liegen
Und legt Eier
[Bild von Ripley in Aliens zwischen den Alien-Eiern]
Effekt
Wichtige Geschäftsprozesse stauen sich
[Bild: China National Highway 110 traffic jam, z.B. von hier ]
Problem
Software mit bekannten Problemen
Idee
Patches vom Hersteller!
Umsetzung
Praktikant klickt mal beim Hersteller
Effekt
Unübersichtliche Herstellerseiten
Effekt
Advisories hinter Paywall / Nur gegen NDA / Benchmarkverbot
Effekt
Unbrauchbare Patch-Beschreibungen
Umsetzung
Praktikant liest bugtraq/full-disclosure
Effekt
Komplettausfall des Praktikanten Kommt zu nichts anderem mehr
Effekt
Praktikant wusste nicht, was wir alles einsetzen
Problem
Praktikant findet Patch
Umsetzung
Alter Admin steht im Weg rum
Umsetzung
„Erst ein paar Wochen warten,ob der Patch gut ist!“
Effekt
Systeme haben alle bekannten Sicherheitslücken der letzten Monate
Umsetzung
Je Bullshit-Markting, desto installieren!
[Visualisierung:
hier oder hier ]
Effekt
Core 1: 100% Symantec, versucht McAfee auszuschalten
Effekt
Core 2: 100% McAfee, loggt abgewehrte Angriffe
Effekt
Tab öffnen im Browser dauert 2 Minuten
Effekt
Task Manager starten dauert auch 2 Minuten
Effekt
Platte voll mit AV-Komponenten, die sich gegenseitig in
die Quarantäne geschoben haben
Effekt
Riesige Monitoring-Systeme Logs ungelesen nach
/dev/null Heizlüfter-Appliances
Problem
Frisches Service Pack draußen!
Umsetzung
Wir spielen nur gerade Nummern ein
Effekt
[Visualisierung: Zerg rush]
Kurzes Intermezzo
„Wir spielen nur Patches ein, die wir wirklich
brauchen!“
1. Kannst du gar nicht beurteilen
2. „Silent Patches“
Hersteller verschweigt in den Patch Notes selbst gefundene Lücken
3. Testet der Hersteller
… unter der Annahme, dass alle vorherigen
Patches eingespielt wurden!
Problem
Neue Softwareversion ist draußen!
Umsetzung
Nein. Wir trauen keinen .0-Versionen
Effekt
gcc überspringt jetzt .0 Erstes Release heißt .1
Problem
Auf dem Server läuft unsichere Antiquität
Effekt
Snowflake-Systeme! Jedes subtil anders!
Problem
Auf dem Server läuft alter Scheiß
Umsetzung
Nein! Alter Admin steht im Weg!
Effekt
„Können wir nicht patchen“
„Sonst verlieren wir den Support“
Effekt
„Ist nicht alt, ist stable!“
Effekt
Debian "Hammurabi I"
Ubuntu "Recalcitrant Ramses" VLTS
Effekt
Wir können SSL2 nicht abschalten!
Auf RAMSVAX läuft noch OpenSSL 0.9.7g!
Anmerkung
Das ist nicht stable, das ist known bad!
Anmerkung
Neue Releases fallen nicht vom Himmel!
Es gab einen guten Grund
Problem
Umgebung zu restriktiv
Umsetzung
„Dein Tablet unterliegt nicht unserem Device Management, also
darfst du es nicht benutzen“
Effekt
Chef forwarded seine Mail zu Yahoo
Problem
Das funktioniert hier alles nicht!
Idee
„$PRODUKT ist Scheiße!“
Idee
„$HERSTELLER ist Scheiße!!“
Umsetzung
Kollege guckt kurz drauf
Effekt
„Hier fehlt ein Semikolon“
Problem
Welche Hosts sind online?
Idee
Monitoring! Statistik!
Umsetzung
Liste: Die Hosts, die gerade mit Datenbank reden!
Effekt
Überraschung! 100% der Hosts anwesend!
Problem
Was, wenn was kaputt geht?
Umsetzung
Tarball in die Cloud
Effekt
Tarball enthält Configs mit Credentials
Effekt
und die persönlichen Daten aller User
Effekt
und die Plattenkrypto-Recovery-Keys
Effekt
World Readable unverschlüsselt in der Cloud
Effekt
Jemand findet es mit Shodan Geht völlig in der Masse unter
[Visualisierung: Get out of jail free-Karte von Monopoly]
Problem
Telefonie ist zu teuer!
Umsetzung
Am Switch sind noch Ports frei
Effekt
Über VoIP-Buchse kommt man in alle Netze der Firma rein
Problem
Integration benötigt
Umsetzung
Admin hackt schnell was
[Visualisierung:
XKCD 208 ]
Effekt
Keinerlei Qualitätsansprüche
Effekt
Integration viel schlimmer als Komponenten
Effekt
Verliert sofort Interesse,
tut andere Dinge
[Visualisierung:
Obama Mike Drop ]
Problem
Alles reagiert furchtbar zäh
Idee
Monitoring, wieso das so lahm ist!
Umsetzung
Plus 7 Agenten, ein NIDS und ein SIEM! Diagnose-Tool in
Java *swap*
Effekt
Jetzt noch viel langsamer
Problem
Outgesourcetes RZ macht nur Ärger
Idee
Wir gehen in die Cloud!
Umsetzung
„Wenn du deine Daten in die Cloud tust, sind es nicht mehr
deine Daten!“
Effekt
„Schlimmer kann es nicht werden“
„Die reagieren wenigstens auf unsere Tickets“
Problem
Fefe macht Pentest
Idee
„Nimm das Staging-System“
Umsetzung
Dev loggt sich in Produktion ein, editiert in Dateien herum
Effekt
„Konnten nicht im Staging testen“
„Da ist die nächste Version drauf“
„Für den Pentest“
Problem
Security von Grund auf verkackt
Idee
Wir brauchen ein Security-Team!
Effekt
„Oh gut, nicht mehr mein Problem“
*weiter verkack*
Problem
Update ausrollen!
Umsetzung
for i in $HOSTS; do ssh $i …
Problem
„Hat mal jemand ne aktuelle Host-Liste?“
Idee
Steht bestimmt im Wiki
Problem
wiki: Connection refused
Problem
Drei Seiten Perl-Fehlermeldung. Freidrehener Watchdog-Auto-Restart frisst 100% CPU
Umsetzung
$ sudo CPAN -i CGI::Carp
Effekt
Wiki ist wieder da!
Problem
Hostliste: Stand 8/1997
Idee
Ich pinge einfach alle!
Umsetzung
$ for i in `seq 1 254`; do
if ping -c1 10.0.0.$i ; then
echo 10.0.0.$i >> hosts; fi; done
Effekt
seq: command not found
(seq ist Linux-spezifisch)
Umsetzung
$ for i in {1..254}; do
if ping -c1 10.0.0.$i ; then
echo 10.0.0.$i >> hosts; fi; done
Anmerkung
ETA: 30 Minuten *spinnenweb*
Anmerkung
Ich habe mir daher mal ein pingnet(1) gehackt
# pingnet -c1 127.0.0.1 127.0.0.10
PING 127.0.0.1 till 127.0.0.10 (127.0.0.1 till 127.0.0.10): 24 octets
44 octets from 127.0.0.1: icmp_seq=0 ttl=64 time=1.3 ms
44 octets from 127.0.0.2: icmp_seq=0 ttl=64 time=1.7 ms
44 octets from 127.0.0.3: icmp_seq=0 ttl=64 time=2.1 ms
44 octets from 127.0.0.4: icmp_seq=0 ttl=64 time=2.5 ms
44 octets from 127.0.0.5: icmp_seq=0 ttl=64 time=2.9 ms
[...]
--- 127.0.0.1 till 127.0.0.10 ping statistics ---
1x10 packets sent, 10 hosts replied.
Problem
Wie kriegen wir die IPs da raus?
type="video/mp4">
Idee
| grep octet | sed
's/.*from \([0-9]*.[0-9]*.[0-9]*.[0-9]*\):.*/\1/'
Idee
| awk -F'[: ]' '/octet/ { print $4 }'
Idee
Kann das nicht unser HP Openview?
[Visualisierung: Skelett vor Terminal]
Antipattern 1: Monster-Truck Modus
Ziel: Update einspielen
Umwelt zwingt zu 23 Notfalleinsätzen auf dem Weg
Keiner davon war unser eigentliches Ziel!
Motivation, einen davon richtig zu fixen: Null.
-> Desolate Zustände bleiben erhalten, Flickschusterei.
[Visualisierung: Monster Truck fährt über Autos drüber]
Antipattern 1a: Not My Job
Fixt nur Brocken, der uns im Weg liegt
Nicht den direkt daneben
-> Fast alles bleibt kaputt.
[Visualisierung: Not My Job
Award ]
Antipattern 2: Ewiger Feuerwehrmodus
Immer Zeitdruck
Probleme bleiben liegen
Fallen einem immer zu maximal inopportuner Zeit auf den Fuß
Drückt auf Moral und Lebenswillen
[Visualisierung: Kosteneffiziente Fernmeldetechnik ]
Antipattern 3: Keine Toolbeherrschung
Datei gelöscht, aber Platz noch belegt? Prozess läuft noch!
fn=/etc/passwd ; echo ${fn##*/}
fn=datei.html.bak ; echo ${fn%.bak}
Prozess reagiert nicht? strace!
Prozess hinterlässt lauter core dumps? ulimit -c0
Antipattern 3: Keine Toolbeherrschung
Wo ist die Config-Datei? strace!
Wer hat diese Datei offen? lsof! (oder ls in /proc)
Welcher Prozess blockt umount von /mnt? lsof!
find ~/mp3 -name \*.mp3 | xargs du -hs
Antipattern: „gemanaged“ vs „gelöst“
Viel zufriedener mit „restartet sich automatisch“
… als mit „crasht nicht mehr“
[Visualisierung: Lemmings-Screenshot]
Antipattern: Zuständigkeiten-Pingpong
Das können wir nicht fixen
Dafür ist die Firewall-Abteilung zuständig
6 Monate später:
Regel ist drin
Kriegt man jetzt nie wieder raus
Antipattern: Zuständigkeiten-Monopoly
Oracle-Team loggt in ihre Datenbank, rückt Logs nicht raus
Netzwerk-Team loggt in ihr Cisco Mars
Unix-Leute loggen per syslog ins SIEM
Niemand hat genug Daten für Korrelationen.
Außerdem sind die Uhrzeiten nicht synchron.
Antipattern: Cloud
Wir checken den Quellcode auf Github ein
Travis lässt in der Cloud Tests laufen
Docker baut Image in der Cloud
Gerät provisioniert sich automatisch aus der Cloud
Foreman provisioniert Builds im RZ / der Cloud
Keiner hat auch nur einen der Schritte gesehen oder geprüft!
„Was rollen wir da eigentlich gerade aus?“
Antipattern: Security-Theater
Credentials per Shamir Secret Splitting verteilt
Image-Build packt kombinierten Key ins Image
Dort hat nach Install jeder der Admins Zugriff
[Visualisierung: TSA-Regelung zu Snow Globes ]
Antipattern: Security-Theater
Cooler kommerzieller Passwort-Broker und -Manager
Login nur über 7 Proxies und Jumphosts
… und dann loggen sich alle überall als root ein
[Visualisierung: Irrer mit Kettensäge]
Anekdote
Eines der Highlights meiner Karriere:
Monitoring für ein SIEM bauen
Antipattern: „Hold my beer“
Admin schreibt kleinen Hack in Exoten-Sprache
… die niemand sonst im Team spricht
Wird prompt Teil der kritischen Infrastruktur
Think: Groovy, Lua, Smalltalk.
Oder: Admin tut Binary aufs System, verlegt Quellcode.
[Visualisierung: Navajo Code Talkers ]
Antipattern: „Ich war's nicht“
Besser: Blameless Post-Mortem
Häufig auch: Gibt nicht mal Change Management oder
eine Liste, wer was gemacht hat
[Visualisierung: Harrison Ford in 'Who? Me?!'-Pose ]
Antipattern: Ist doch noch gut!
System komplett zerschossen?
Mehr Malware als Systemkomponenten?
Alle Dienste von den Russen ferngewartet?
Egal! Weiterhumpeln statt Neuinstallation!
[Visualisierung: Dieses tolle
Video ]
Antipattern: Da gibt es eine App!
System komplett zerschossen?
Mehr Malware als Systemkomponenten?
Alle Dienste von den Russen ferngewartet?
Da gibt es doch bestimmt ein Tool für!
[Visualisierung: Lauter Screenshots von schattigen
„Systemoptimierern“ und „Malware-Entfernern“]
[Visualisierung: diese
Forums-Anfrage für Leute, die glauben, das beträfe nur Windows]
Ein paar allgemeine Ratschläge
Ratschläge fürs Management
Fehlerkultur (Gefundene Bugs feiern, niemanden bestrafen)
Feedback (Bugs vom Verursacher fixen lassen)
Werte kommunizieren: Qualität wichtiger als mehr Features
Zeit zum Lernen geben (und zum Anwenden des Gelernten)
Angemessen bezahlen!
Ratschläge fürs Management
Architektur nicht vorgeben!
Entweder sie ist offensichtlich, dann helft ihr nicht
Oder nicht, dann schadet ihr wahrscheinlich
Gebt vor, was getan wird, nicht wie!
Ratschläge für Admins
Der gute Admin hat keine Notfall-Einsätze
Automatisiert alles weg, bis ihr den ganzen Tag Zeit
habt
Dann nutzt die Zeit, um coole Dinge zu lernen!
Ratschläge für Alle
Orientiert euch immer nur an euch selbst von früher
Nie an anderen!
Tor 1: Anderer ist gleich gut. Alles super. Motivation weg.
Tor 2: Anderer ist schlechter. Alles super. Motivation weg.
Tor 3: Anderer ist besser. Selbstzweifel. Motivation weg.
Danke! Fragen?