Für Software-Entwickler und Nerds ein kleiner Thread zur IT-Sicherheit bei #Datenbanken und Zugriffs-Berechtigungen:

Bei normalen Dateisystem haben wir uns daran gewöhnt, dass nicht jeder Server-Dienst nach /etc, /usr/local/bin oder c:\windows\system32 schreiben darf. 1/x
Viele Entwickler wollen auf Datenbanken aber Vollzugriff auf alles haben. Steht die Anwendung im Netz und findet jemand eine Lücke ist die Kacke am Dampfen: „DELETE FROM users;“ und alle User sind weg. Mit „TRUNCATE users“ gehts sogar schneller. 2/x
Mit Pech geht das sogar auf fremden Datenbanken auf dem gleichen Server. Dumm.

Daher kennen anständige relationale Datenbankmanagementsystemen (RDBMS) User, Rollen und Zugriffsrechte; nutzt man die, darf der Applikations-User der Web-Anwendung nur das nötige. 3/x
Beispiel von wen-waehlen.de
Bis 2017 hatte ich quasi nur einen User; der durfte zwar nicht alles, aber keine Trennung zwischen Kandidaten und Usern.
Nun ist es anders: Es gibt einen Anwender-User (ww21), einen für Kandidaten, einen für Maintenance-Kram, einen Admin 👇4/x
Und einen Owner, dem alle Tabellen etc, gehören. Nicht jeder darf sich einloggen, der Owner braucht das nie.

An die DB kommen nur Mitglieder der Gruppe ww21_users; in der DB ist alles in Schemas getrennt, die dürfen jeweils nur von Usern der richtigen Gruppe genutzt werden. 5/x
(Wer genau hinsieht, sieht eine Ausnahme, aber die ist Absicht; Rechte auf den Tabellen sind ja auch noch nötig).
Alle Tabellen haben eingeschränkte Rechte, und um Tipparbeit zu sparen gibts fertige Include-Files mit den wichtigsten Berechtigungen: 6/x
Beispiel für ein paar Tabellen: der normale User ww21 hat (via Role ww21_users) überall nur Lese-Rechte, auf der History-Tabelle noch nicht mal das. Zu der gleich mehr.
Der Kandidaten-User darf UPDATE aber kein DELETE! auf der Kandidaten-Tabelle machen. Auf Antworten nix! 7/x
HUCH? Wie kommen denn dann die Antworten in die Kandidaten-Antwort-Tabelle?
Ganz einfach: über eine Funktion, die zum richtigen User wechselt!

Das geht (Bild 2) via SECURITY DEFINER, und damit der Aufrufen keine Temp-Tabellen faken kann, wird auch der search_path angepasst. 8/x
Normalerweise würde man die History-Tabelle durch einen Trigger füllen lassen, das ist hier so etwas schneller, wird ja eh schon Code aufgerufen. Auf der History-Tabelle hat niemand irgendwelche Rechte (außer Admins und Owner); die ist nur zur Sicherheit, […] 9/x
[…] falls irgendwas kaputt geht, eine Fehleingabe alles löscht oder ähnliches.
Uups, durch eine Fehleingabe eines Admin-Users kann doch alles weg sein? Ja, in der Tat. Das wäre da mittels Trigger besser. Bei der Kandidaten-Tabelle ist es via Trigger: 10/x
Wenn ich also aus Versehen mal ein

UPDATE Kandidaten SET vorname='Korrigiert';

Ohne WHERE machen würde, könnte ich das alte wieder aus der History raus ziehen. Aber es kommt niemand an diese ran, da es keine Leseberechtigung gibt (wie immer: außer Superuser und Owner)

11/x
Zurück zu den Berechtigungen: Die sind schon mal ganz gut, nicht schwer und helfen allerhand Probleme im Fall eines erfolgreichen Angriffs zu reduzieren.
Mit #PostgreSQL #Postgres ist das alles easy, bei einem Dump kommen die Berechtigungen mit (nicht so bei MySQL-Gammel) 12/x
Die Include-Skripte für psql helfen, wiederkehrendes zu vermeiden.
Aber es ist immer noch möglich, bei vorhandenen Berechtigungen mehr zu machen als erwünscht.
Da helfen Funktionen, die nur das Nötigste machen (siehe antworten_kandidaten_insert(…) oben). 13/x
Diese machen die Applikations-Entwicklung einfacher (können quasi als API-Methoden aufgerufen werden), aber es ist halt für jede Änderung auch eine SQL-Änderung nötig. Das Vorgehen wurde früher mal vom @BSI_Bund empfohlen. Habe es z.B. in github.com/alvar-freude/P… umgesetzt 14/x
Und wie kriegt man das ganze nun in die Anwendungen? Nun, heutzutage hat man ja eh meist mehrere „Microservices“ laufen; bei wen-waehlen.de läuft die Kandidaten-Eingabe auf getrennten Applikations-Servern, normale User und Admins ebenso; je im #FreeBSD-Jail und […] 15/x
[…] ein Apache mit mod_proxy (und mod_balancer, um je zwei Backends zu haben, damit je einer problemlos runtergefahren werden kann) verteilt das entsprechend. Anstatt alle mit dem gleichen User verbinden zu lassen, hat jeder App-Typ eben einen eigenen. 16/x
Fazit: so wie man Web-Server nicht als root laufen lässt, sollte man auch Anwendungen nicht als Superuser auf die Datenbank lassen. Mindestens Trennung nach DB, feinere Berechtigungen sind wie dargestellt mit #PostgreSQL auch kein Problem.

#GehtWaehlen! wen-waehlen.de
Ach, und noch ein Nachtrag: mehrere User hat auch noch den Vorteil, dass jeder User andere Konfiguration kriegen kann; z.B. search_path; oder gammeliges latin1.
Und: bei wen-waehlen.de gibts für normale Nutzende synchronous_commit=off, bringt etwas Performance und […]
[…] dafür sind im Falle eines Crashs halt maximal die User-Eingaben der letzten 600 ms weg (na und, dann ist alles eh nicht mehr erreichbar), aber bei Kandidaten sollte das nicht passieren, daher ist da der Default aktiv. Bringt unter Last mehr Schreib-Performance.
(Wahrscheinlich dürfte die Funktion mittels ON CONFLICT (Upsert), das seit #PostgreSQL 9.5 möglich ist, deutlich einfacher und schneller sein. postgresql.org/docs/current/s… Sollte ich mal anpassen … – das Ding ist an der Stelle halt schon ziemlich alt.)

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Alvar C.H. Freude

Alvar C.H. Freude Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @alvar_f

25 Sep
#GehtWählen!

Wen und welche Partei?
WEN WÄHLEN? hilft:
wen-waehlen.de
wen-waehlen.de/btw21/parteien…

#btw21 #btw2021
Hallo @cducsubt, @cdu, @CSU. Ich bin etwas verwundert:
Die Mehrheit er CDU/CSU-Bundestagskandidatinnen und -Kandidaten sagt seit Jahren, dass die Nebentätigkeiten von MdB stärker offen gelegt werden sollen. Aber nichts passiert.

wen-waehlen.de/btw21/parteien…

Wahlkampf-Lügen?
Read 9 tweets
24 Sep
Die bessere Wahl-O-Mat-Alternative: wen-waehlen.de/?start=1
… und in den Statistiken mal wieder interessant zu sehen, bei wem Menschenwürde am niedrigsten bewertet wird: wen-waehlen.de/btw21/parteien…
… oder die Gleichberechtigung aller Menschen: wen-waehlen.de/btw21/parteien…
Read 12 tweets
26 Aug
Der @henningtillmann hat da 👇 gezeigt, dass die @CSU die Besucher ihrer Negative-Campaigning-Website u.a. an Facebook verpetzt. Ohne (erforderliche!) Rechtsgrundlage, natürlich.
Hier nun ein Thread, warum so etwas trotz Nachbesserung Problematisch ist, los geht's! 1/x
Da Verarbeitungen personenbezogener Daten grundsätzlich einer Rechtsgrundlage nach Artikel 6 Absatz 1 Unterabsatz 1 oder bei besonderen Kategorien personenbezogener Daten wie politischer Meinungen DS-GVO nach Artikel 9 Absatz 2 DS-GVO bedürfen, hat die CSU … 2/x
… schnell nachgebessert.
Ob CSU oder nicht, ist auch egal, die Fehler machen viele:
Nachgebessert? Naja, sie hat es versucht. Facebook ist nicht mehr dabei, und mit einem „Cookie Banner“ versuchen sie, vermutlich eine Einwilligung einzuholen. Siehe Beispiele ab 2. Screenshot 3/x
Read 24 tweets
25 Aug
Gastronomie in Zeiten, in denen nach Corona geöffnet werden darf. Stuttgart Innenstadt.
Beim Palast der Republik nebenan war es übrigens gerammelt voll.
Ich frage mich nun: solche Schließungen in bester Lage macht man natürlich nicht freiwillig – aber offensichtlich ist es nicht so nötig bisherige eventuelle Einnahmeverluste auszugleichen, um eine Öffnung dennoch sicherzustellen […]
Read 4 tweets
28 Jun
@mame82 @HonkHase @LoeweHeinz @gnirbel @AllenRe97883617 @BergerPhilipp @patrick_hennig @_lucaApp Also, noch mal:
Datenschutz ist auch Risikomanagement. Es wird nicht per se davon ausgegangen, dass ein Anbieter inkriminiert ist, aber er hat dafür Maßnahmen zu treffen.

Das Risiko, dass ein Anbieter komplett und vollständig von Angreifern übernommen wird, ist zwar vorhanden,
@mame82 @HonkHase @LoeweHeinz @gnirbel @AllenRe97883617 @BergerPhilipp @patrick_hennig @_lucaApp […] aber man kann nicht sagen: wenn ein Angreifer den Diensteanbieter vollständig übernimmt, sind folgende Datenabgriffe möglich, also definieren wir: der Anbieter ist so sicher/unsicher, als wenn er vollständig übernommen wurde. […]
@mame82 @HonkHase @LoeweHeinz @gnirbel @AllenRe97883617 @BergerPhilipp @patrick_hennig @_lucaApp […] Also kann man nicht behaupten, dass die Nutzung einer App damit einhergeht, dass es los gehe „mit der Nachverfolgbarkeit, wer welche religiösen Einrichtungen besucht hat“, im Sinne von „da ist ein signifikantes Risiko, dass jeder Kirchgänger nachverfolgt wird“. […]
Read 7 tweets
25 Jul 20
Wer kennt jemanden, der 100 Millionen € Spielgeld übrig hat? Dann gründen wir ein Blockchain-KI-Gesundheits-Datenschutz-BigData-Krypto-Startup, stecken 5 Mio in repräsentative Büros, 20 Mio in Lobbyisten, 5 Mio investieren wir in Politiker (einschliesslich Bespaßung), […]
[…] für 3 Mio holen wir billige Programmierer und Designer, die aus freien Bibliotheken und mit Photoshop Demos zusammenbasteln, 10 Mio stecken wir in den Wasserkopf, 5 Mio sonstige laufende Kosten, für 30 kaufen wir irgendeine Firma mit ein paar namhaften Kunden auf, […]
[…] der Rest ist für unsere Mühen (ächz!). Von den Lobbyisten lassen wir irgendwelche Minister belabern, denen wir für 500 Mio € irgendeinen Scheiss Verkaufen. Das Zeug dafür kaufen wir wiederum woanders ein, dass wir selbst nur Frickelkram-Pfusch haben merkt ja keiner, […]
Read 4 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!

Follow Us on Twitter!

:(