Glorf.it

Glorf IT

Bedenkliches aus dem IT-Alltag

20. Februar 2013 um 22:58

Einfügen in Table-Valued-Functions

Ich bin ein großer Freund von Inline-Table-Valued-Functions. Das sind Funktionen, die nur aus einem SELECT-Statement bestehen, dass eine Tabelle als Ergebnis liefert. Hier ein Beispiel:

CREATE FUNCTION test3.f_orders
(@name NVARCHAR(100))
RETURNS TABLE
RETURN (SELECT ordid, o.custid, o.uid, orderdate, total
FROM test3.orders AS o
JOIN test3.user2customers AS uc
ON o.custid=uc.custid
JOIN test3.users AS u
ON uc.uid=u.uid
WHERE u.name = @name);

Sie werden manchmal als parametrisierte Views bezeichnet, weil wirklich eine sehr große Verwandtschaft zu Views besteht. Das geht so weit, dass man sowohl Daten "in" die Funktion einfügen als auch ändern kann. Damit das geht, müssen freilich wieder die gleichen Regeln wie bei Views eingehalten werden.

Beispiel für INSERT:
INSERT INTO test3.f_orders('Tom') (custid)
VALUES (2);

Beispiel für UPDATE:
UPDATE o
SET total=(SELECT SUM(price*amount)
FROM test3.f_orderdetails('Tom') AS od
WHERE od.ordid=o.ordid)
FROM test3.f_orders('Tom') AS o
WHERE o.ordid=@ordid

Das Beispiel für DELETE ist ein Bausatz für Euch als Hausaufgabe… 😉

15. Februar 2013 um 20:55

PASS-Vortrag "Performance & Manageability der tempdb" – 19.02.2013 – Nürnberg

SQL-PASSAm kommenden Dienstag ist der nächste SQL-PASS-Vortrag. Sowohl thematisch als auch vom Referenten wird das ein echtes Highlight: Torsten Schüssler ist der Szene wohl bekannt. Das Thema "Performance & Manageability der tempdb" ist schwierig und wichtig. Daher ein Tipp für alle, die sich mit dem Thema Performance am SQL Server befassen.

Hier die Details im O-Ton:

Performance & Manageability der tempdb
Die tempdb, eine Systemdatenbank im SQL Server, die es in sich hat und trotzdem oft genug ein Schattendasein führt.
Missverständnisse und widersprüchliche Aussagen zum Best Practice der tempdb, heizen die anhaltende Diskussion in der SQL Server Community immer wieder an.

Anlass genug für Torsten Schüssler die Aufgaben und Einsatzmöglichkeiten der temdb vorzustellen und Antworten zu folgenden Fragen liefern:
Gibt es eine einheitliche Lösung zur Performance-Optimierung, die in jeder Situation angewendet werden kann?
Wie viele Dateien sollte die tempdb haben?
Welches RAID? Wie wäre es mit Solid State Drives (SSDs)?
Wie kann ich Performance-Probleme überwachen?

Referent
Torsten Schüßler aka tosc, ist Kind der Sinclair ZX81 Generation. Seit über 18 Jahren ist er als zertifizierter Datenbank- und Systemadministrator (MCTS|MCITP) tätig. Sein umfassendes Wissen bringt er bei der international tätigen Europoles ein.
Als einer der ersten Regulars von InsideSQL berichtet er zusammen mit Frank Kalis und Christoph Muthmann laufend über Interessantes zum SQL Server.
Torsten unterstützt die PASS Deutschland e.V. als RGV in der Region Franken.

Termin: Dienstag, 19.02.2013, ab 18:30h bis ca. 20:30h (danach bitte etwas Zeit für das Essen danach einplanen)

Veranstaltungsort: New Elements GmbH
Thurn-und-Taxis-Straße 10, D – 90411 Nürnberg
(Alcatel-Lucent Gebäude im Nordostpark)
Kostenfreie Parkplätze sind direkt vor der Tür vorhanden.

Der Eintritt ist wie immer kostenlos, man muss auch kein Mitglied sein oder werden.
Wegen der Raumplanung ist eine kurze Info an die Regionalleiter der SQLPASS Franken wichtig.
Interessierte bitte daher formlos bei Michael Deinhardt (mde@sqlpass.de) per Mail oder via Xing anmelden.
(Es geht – wie immer – dabei nur darum abzuschätzen, wie viele in etwa kommen, damit genügend Stühle da sind.)

SQL-PASS ist eine von Microsoft unabhängige SQL-Server-User-Group. Daher muss man auch keine Angst haben, dass man irgendetwas angedreht bekommt. Es gibt mehrere Regionalgruppen, unsere fränkische ist meines Wissens die Größte in Deutschland. Mehr Infos hier: www.sqlpass.de

10. Februar 2013 um 12:35

Unter Windows 8 mit Bordmitteln eine Komplettsicherung erstellen

Am Freitag habe ich zum ersten Mal versucht unter Windows 8 mit Bordmitteln eine Komplettsicherung zu erstellen. Das geht recht einfach, wenn man erst mal weiß wo man suchen muss…

Die Anleitung unter pctipp.ch half dabei. In Kurzform:

  • Alle Systemsteuerungselemente
  • Dateiwiederherstellung
  • Systemabbild erstellen

Die Suche nach "Sicherung" oder "Backup" fand wegen der intuitiven Benennung "Systemabbild" keinen Treffer…

10. Februar 2013 um 12:18

Impressum bei Facebook

Nachdem gerichtlich klar gemacht wurde, dass Massenabmahner auch wegen fehlendem Impressum bei Facebook teure Briefe schicken dürfen, sank das Ansehen des Berufsstands bei mir in ungeahnte Tiefen. Details bei Heise-Online.
Jedenfalls hat nun auch die Facebook-Seite der ELIA-Gemeinde dort einen deutlich sichtbaren Link zum Impressum. Die Kirchengemeinde verkauft zwar nichts, aber wer weiß schon, wann die Rechtsauffassung sich wieder ändert…

Nachdem ich nicht wirklich bei Facebook unterwegs bin, musste ich erst mal rumsuchen, welche Möglichkeiten es gibt: Keine schöne und einfache! Am einfachsten ist es einen Link in die Kurzbeschreibung aufzunehmen, aber weil dort keine beschrifteten Links möglich sind, sieht das auch recht hässlich aus.
Schick wäre es als App neben Infos, Fotos, Karte, etc stellen zu können. Dazu muss man aber erst mal eine entsprechende App erstellen und sich zuvor bei Facebook als Entwickler registrieren.

Hier zwei für mich hilfreiche Links:

  • Kurzbeschreibung der verschiedenen Möglichkeiten bei wasistsocialmedia.com
  • Anleitung, wie man eine App erstellt (leicht veraltet) bei itratos.de (PDF). Komischerweise fand ich auf deren Web-Auftritt keine Seite, die auf die Anleitung verlinkte, die mir Google präsentierte. Daher hier nur der Deep-Link…

Hinweise auf einfache und schöne Möglichkeiten sind willkommen… 😉

3. Februar 2013 um 22:35

Debuggen ohne Admin-Rechte

Für alle Software-Entwickler, die zwar Debuggen können, aber nicht glauben, dass für das Debugging unter Windows unter bestimmten Umständen schon normale Benutzerrechte ausreichen, folgt hier eine kleine Anleitung, wie sie sich selber oder andere von Gegenteil überzeugen können.

Bis vor etlichen Jahren dachte auch ich, dass nur Administratoren debuggen können. Genährt wird die Annahme das durch entsprechende Einträge in den Gruppenpolicies und der Tatsache, dass man zum Entwickeln oftmals Adminrechte benötigt. Tatsächlich benötigt man aber für Anwendungen, die man selber starten kann, die also im eigenen Benutzerkontext ausgeführt werden, keine Admin-Rechte. Das birgt erhebliche Sicherheitsrisiken für Fat-Client-Anwendungen, die von einer Anzahl an Mitarbeitern auf deren Rechnern ausgeführt werden.

Normale Mitarbeiter können freilich eher keine Debugger bedienen. Tracer verwenden aber teilweise ähnliche Mechanismen, um Anwendungen viel bequemer auszuforschen. Sie sind leichter zu bedienen und die Ergebnisse einfacher weiter zu verwenden. Wo man debuggen kann, da kann man auch tracen, umgekehrt nicht unbedingt.

Die folgenden Anleitung ist recht spartanisch, sollte aber für alle Softwareentwickler ausreichend sein, um es selber auszuprobieren. Das Debuggen an sich wird nicht erklärt, weil das die Zielgruppe des Artikels schon kennt. Daher plaudert die Anleitung in meinen Augen nichts Sicherheitskritisches aus. Genau genommen ist sie sogar äußerst trivial. Sie soll auch nur dazu motivieren eigene Annahmen zu überprüfen, wenn es nötig ist.

Wenn also wieder mal jemand sagt, dass für Debuggng und Tracing Administratorrechte nötig sind, dann fragt ihn mal, ob er das ausprobiert hat…

Vorbereitung

Die Schritte habe ich unter Windows 7 Professional ausgeführt. Die Transferleistung auf andere Versionen ist aber gering.

Benutzer ohne Adminrechte anlegen:

  • "cmd.exe" als Administrator ausführen.
  • Dort ausführen: net user /add noadminuser topsecrpwd
  • Mit "net user noadminuser" kann man prüfen, dass er wirklich nur Mitglied der Gruppe "Benutzer ist.

Debugger besorgen:

  • Hier nehmen wir den vergleichsweise beliebten Debugger "Ollydbg". Ich kenne und nutze ihn sonst nicht und habe ihn vor allem deswegen ausgewählt, weil er keine Installation benötigt. Das darf ein normaler Benutzer nämlich nicht.
  • Wir könnten den auch im kommenden Schritt download, wenn wir uns als Benutzer "noadminuser" anmelden. Aber der erste Start des Browsers dauert immer so lange, weil er Profile einrichtet, etc…

Durchführung

Dazu melden wir uns als der Windows-Benutzer "noadminuser" an, entpacken das Archiv mit Ollydbg irgendwohin, z.B, auf den Desktop. Mit einem Doppelklick auf Ollydbg.exe wird der Debugger gestartet.

Prompt werden wir mit dem Hinweis begrüßt, dass wir keine Admin-Rechte haben und daher einige Aktionen nicht möglich sind:
Debugging eingeschränkt wegen fehlender Admin-Rechte
Das stört uns aber weiter nicht, wir wollen weder Remote-Debugging, noch andere fortgeschrittene Dinge tun.

Anschließend starten wir über "File | Open" die zu überwachende Anwendung "notepad.exe" aus dem Verzeichnis "C:\windows\system32". Daraufhin springt der Debugger in die Startsequenz der Anwendung. Mit einen Klick auf den Run-Button kommen wir in die eigentliche Anwendung und können debuggen:
Notepad im Debugger

Freilich kann man auch auf andere Arten debuggen, das ist nur ein Beispiel wie ich es machen würde. Hier kann jeder selber die Möglichkeiten ausprobieren. Der Proof-of-Concept ist damit abgeschlossen. Tests mit verschiedenen erhältlichen Tracern kann jeder Interessierte selber machen.

Aufräumen nicht vergessen

Wer dazu keine VM genutzt hat, der muss den Benutzer "noadminuser" auch wieder löschen. Das ist diesmal besser über die Systemsteuerung zu erledigen, weil dann alle Profil-Dateien mitgelöscht werden können.

2. Februar 2013 um 11:37

Tausche SysAdmin gegen DB-Admin

Wegen vieler Termine komme ich erst heute dazu auf die neue Beschreibung von JTL hinzuweisen: In der Standard-Installation von Wawi-Full wird ein SQL Server 2005 mit einem festen Passwort vergeben, dass im Internet veröffentlicht wurde. Bislang musste der SysAdmin für den laufenden Betrieb der Anwendung verwendet werden. Das ist nun nicht mehr nötig.

Folge Schritte zur Absicherung des System sind nun möglich:

  • Passwort des Benutzers "sa" ändern oder besser einen anderen SysAdmin-Benutzer einrichten (besser mit Windows-Authentifizierung) und den sa-Benutzer disablen. In höheren Versionen kann man den "sa" auch löschen.
  • Einen DB-Administrator anlegen und den für den Zugriff mittels JTL-WAWI eintragen (–> Anleitung von JTL)
    Für das JTL-WAWI muss nun nicht mehr mit dem SysAdmin-Benutzer "sa" gearbeitet werden.

Was ist der Unterschied zwischen einem SysAdmin und einem Datenbank-Admin (eigentlich "DBOwner")?

Sollte das Kennwort des SysAdmins "sa" erspäht werden, dann kann der Angreifer (z.B. ein böswilliger Mitarbeiter) alle Daten in allen Datenbanken des SQL Servers lesen und manipulieren. Er kann außerdem über verschiedene eXtended Procedures den File-Server übernehmen, weil der SQL Server in der oben beschriebenen Installation im Systemkontext ausgeführt wird. Der Prozess hat daher Admin-Rechte am Server.

Die Rechte eines DB-Admin (eigentlich "DbOwner") sind zwar immer noch weitreichend. Er kann ebenso wie der SysAdmin die Daten in der betroffenen Datenbank lesen und manipulieren, z.B. die Tabelle mit den Benutzern und dessen Passwörtern. Beide können Datenbank-Objekte löschen oder erweitert: komplette Tabellen, Prozeduren, … Der DB-Admin bietet aber keine Möglichkeit aus dem SQL Server auszubrechen (wenigstens ist mir keine bekannt). Außerdem sind die anderen Datenbanken vor ihm sicher.
Daher ist es zwar nicht das Optimum, aber ein erheblicher Schritt in Richtung Sicherheit, wenn für den laufenden Betrieb ein DB-Admin genutzt wird. Daher ist es empfehlenswert der Anleitung zu folgen.

Hinweis zu den Voraussetzungen für einen Angriff

Mails entnehme ich, dass immer noch einige Entwickler denken, dass man unter Windows zum Debuggen Administrator-Rechte benötigt. Wenn man das annimmt, dann kommt man freilich bei der Einschätzung von potentiellen Sicherheitslücken zu anderen Ergebnissen als ich. Offenbar reichte mein Hinweis nicht aus, um die eigene Meinung praktisch zu überprüfen. Daher schaue ich zu, dass ich mal eine kleine, aber ungefährliche Anleitung poste, wie man auch ohne Admin-Rechte debuggen kann.

"Debuggen" nennt man das detaillierte, schrittweise Beobachten einer Anwendung. Dabei kann man die einzelnen Maschinenbefehle der betreffenden Anwendung schrittweise oder auch wie im Kino untersuchen. Dazu muss der Angreifer Maschinensprache können, also typischerweise Informatiker sein und/oder Hacker. Die gleichen Mechanismen (allerdings nicht so tiefgehend) nutzen sogenannte "Tracer": sie protokollieren Aktionen mit, meist auf Funktionsebene sogenannter API-Schnittstellen. Die Ausgaben sind sehr viel leichter zu verstehen, mit einer guten Anleitung oder einem komfortablen Tracer könnte auch ein Laie hier brauchbare Informationen herausholen.

Wo man debuggen kann, da kann man auch tracen, umgekehrt nicht unbedingt. Daher ist die Frage so wichtig, ob ein normaler Benutzer debuggen kann. Bis ich zu einer Anleitung komme, können die Gläubigen der Windows-Security das ja einfach mal ausprobieren… 😉

Update 3.2.2013: Die angesprochene Anleitung steht nun zur Verfügung.

|