{"id":3534,"date":"2009-09-11T20:17:05","date_gmt":"2009-09-11T18:17:05","guid":{"rendered":"http:\/\/www.glorf.it\/blog\/?p=3534"},"modified":"2009-09-16T19:54:13","modified_gmt":"2009-09-16T17:54:13","slug":"sentrigo-veroeffentlicht-sicherheitsproblem-des-sql-servers","status":"publish","type":"post","link":"http:\/\/www.glorf.it\/blog\/2009\/09\/11\/sql-talk\/sql-server\/sentrigo-veroeffentlicht-sicherheitsproblem-des-sql-servers","title":{"rendered":"Sentrigo ver&#246;ffentlicht Sicherheitsproblem des SQL-Servers (Update)"},"content":{"rendered":"<p>Frisch aus dem Urlaub zur&#252;ck &#252;berraschte mich bei <a href=\"http:\/\/www.heise.de\/security\/Microsofts-SQL-Server-verraten-Passwoerter--\/news\/meldung\/144978\">Heise<\/a> die Nachricht, dass eine mir bisher unbekannte Firma ein Sicherheitsproblem am Microsoft SQL-Server entdeckt und ver&#246;ffentlicht habe. Sie meldeten das Problem Ende 2008 an Microsoft und die signalisierten, dass das aus deren Sicht keine relevante L&#252;cke sei und nicht behoben wird. Sentrigo schrieb daraufhin ein Tool, dass diese L&#252;cke ausnutzt um sie zu beheben. Dazu muss man das Tool aber regelm&#228;&#223;ig immer wieder aufrufen. Erst heute kam ich dazu mal die Hintergr&#252;nde zu recherchieren.<\/p>\n<p><strong>Welche Tragweite hat das Problem? <\/strong><br \/>\nHat jemand Windows-Admin-Rechte an dem Computer auf dem der SQL-Server l&#228;uft, dann kann der Windows-Admin die Passw&#246;rter der angemeldeten Benutzer im Klartext lesen, weil sie in einer internen Tabelle pro Datenbank-Verbindung gespeichert werden. Das betrifft alle aktuellen Systeme: SQL Server 2000, SQL Server 2005 und SQL Server 2008 (die Betas von R2 daher vermutlich auch).<\/p>\n<p>W&#228;hrend in der Login-Tabelle nur der Hash des Passwortes gespeichert ist, werden die Informationen zu angemeldeten Benutzern unverschl&#252;sselt im Hauptspeicher gehalten. Ein Administrator kann nun mit geeigneten Werkzeugen, z.B. <a href=\"http:\/\/www.ollydbg.de\/\">OllyDbg<\/a>, den Hauptspeicher nach den Passw&#246;rtern durchsuchen. <a href=\"http:\/\/www.sentrigo.com\">Sentrigo<\/a> hat nun das kostenlose Werkzeug <a href=\"http:\/\/www.sentrigo.com\/passwords\">Passwordizer<\/a> gebaut, dass diese Passw&#246;rter findet und mit Schrott &#252;berschreibt. Hier ein Beispiel:<\/p>\n<blockquote><p>C:\\WINDOWS>E:\\temp\\Passwordizer\\passwordizer\\x86\\passwordizer.exe 2212<br \/>\nProcess is 32bit<br \/>\nDATA section found at 27cf000<br \/>\nExe name is C:\\Programme\\Microsoft SQL Server\\MSSQL.1\\MSSQL\\Binn\\sqlservr.exe<br \/>\nMSSQL Server version is 90000 10820000<br \/>\nScanning for sessions table (Can take up to several minutes)<br \/>\nSession table found at 27e6fe8<br \/>\nGetting user passwords for MSSQL Server 2005<br \/>\nSession id: 51<br \/>\nUsername: sa<br \/>\nPassword: k******9<br \/>\nPassword cleared from memory<\/p>\n<p>Sentrigo Passwordizer process completed successfully<br \/>\n1 passwords removed from memory<\/p><\/blockquote>\n<p>Im Output steht eigentlich alles was man wissen muss, insbesondere die Adresse an der die Informationen gefunden werden k&#246;nnen. Nat&#252;rlich ist die bei jedem Start anders, aber damit kann man sich das Problem mal aus der n&#228;chsten N&#228;he ansehen, weil man ja jetzt genau wei&#223; wo man suchen muss. <\/p>\n<p>Aber auch remote kann man die Passw&#246;rter lesen, wenn man am SQL-Server SysAdmin-Rechte hat. Das geht aber nur am SQL-Server 2000 und 2005, ab 2008er wurde laut <a href=\"http:\/\/www.heise.de\/security\/Microsofts-SQL-Server-verraten-Passwoerter--\/news\/meldung\/144978\">Heise.de<\/a> der dazu n&#246;tige DBCC-Befehl aus anderen Gr&#252;nden entfernt. Im <a href=\"http:\/\/securosis.com\/blog\/sentrigo-and-sql-server-vulnerability\/\">Securosis Blog<\/a> verr&#228;t ein Sentrigo-Mitarbeiter, dass man &quot;DBCC BYTES&quot; dazu verwenden kann. Das ist aber kein gro&#223;es Geheimnis, denn nur <a href=\"http:\/\/www.slaviks-blog.com\/2008\/09\/19\/sql-server-2008-dbcc-bytes\/\">DBCC Bytes ist im SQL Server 2008 nicht mehr vorhanden<\/a>, alle anderen gibt es dort weiterhin.<\/p>\n<p><strong>Meine Einsch&#228;tzung:<\/strong> Ich sehe keine realistische Gefahr f&#252;r die SQL-Server-Kunden, aber Microsoft hat einen peinlichen PR-Gau erlebt.<\/p>\n<p>Warum? Die Sicherheitsl&#252;cke ist schon sehr exotisch. Man muss schon zuerst mal Windows-Admin oder wenigstens SQL-Server-SysAdmin sein, um die L&#252;cke ausnutzen zu k&#246;nnen. Und dann sieht man nur die Passw&#246;rter derjenigen die sich aktuell &#252;ber SQL-Authentifizierung angemeldet haben. Wenn man die von Microsoft empfohlene Windows-Authentifizierung verwendet, sieht man gar nichts. Was kann der Windows-Admin, der immer auch zugleich SysAdmin ist, mit den SQL-Server-Passw&#246;rtern anfangen? Gute Frage. Er darf alles tun, was er ohnehin schon als SysAdmin darf: sich als dieser Benutzer ausgeben und am SQL-Server Dinge in dessen Namen tun.<\/p>\n<p>Die Gefahr besteht also lediglich darin, dass der Anwender SQL-Authentifizierung nutzt und das gleiche Passwort auch f&#252;r sein Online-Banking, E-Bay oder dergleichen verwendet. Das k&#246;nnte ein krimineller Windows-Admininistrator mal ausprobieren und ggf. dann tun was er m&#246;chte. Die L&#252;cke ist in meinen Augen eher eine Kleinigkeit, da Administratoren auch auf viel einfachere Weise die Passw&#246;rter Ihrer Kollegen aussp&#228;hen k&#246;nnten. Dennoch ist es nat&#252;rlich eine L&#252;cke und eine peinliche noch dazu.<\/p>\n<p>Aber f&#252;r die bisher weitgehend unbekannte Firma Sentrigo war das der PR-Boost schlechthin. Sie haben Microsoft so richtig vorgef&#252;hrt, weil Microsoft danach schrie. Nat&#252;rlich h&#228;tte Microsoft das ernst nehmen m&#252;ssen. Man speichert einfach keine Passw&#246;rter im Klartext. Warum auch? Ich habe keine Ahnung wie aufw&#228;ndig die Behebung gewesen w&#228;re, aber da nun mal alle Mitarbeiter mit dem R2 besch&#228;ftigt waren, blieb f&#252;r solche Dinge wohl keine Zeit mehr. Und damit hat sich Microsoft so richtig blamiert. <\/p>\n<p>Vermutlich werden sie es nun doch beheben m&#252;ssen, sonst m&#252;ssen sie sich immer vorwerfen lassen, dass sie eine nicht behobene Sicherheitsl&#252;cke haben. Und diese Diskussionen mag doch keine Firma gerne&#8230; \ud83d\ude09<\/p>\n<p><strong>Update 16.9.2009:<\/strong><\/p>\n<ul>\n<li>Ja, es geht mittels DBCC BYTES, das wurde schon im Fr&#252;hjahr im Vortrag &quot;<a href=\"http:\/\/www.blackhat.com\/presentations\/bh-dc-09\/Cerrudo\/BlackHat-dc-09-Cerrudo-SQL-Anti-Forensics-slides.pdf\">SQL SERVER Anti-Forensics<\/a>&quot; von Cesar Cerrudo (Folie 18) ver&#246;ffentlicht.<\/li>\n<li>Heute bekam ich eine Mail von Firma Sentrigo, die sich f&#252;r den Download des Tools &quot;Passwordizer&quot; bedankte und fragte an welchen L&#246;sungen von ihnen ich denn Interesse h&#228;tte. Hallo? Am Passwordizer nat&#252;rlich. Ich bereue bei der Angabe der pers&#246;nlichen Daten ehrlich gewesen zu sein&#8230;<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Frisch aus dem Urlaub zur&#252;ck &#252;berraschte mich bei Heise die Nachricht, dass eine mir bisher unbekannte Firma ein Sicherheitsproblem am Microsoft SQL-Server entdeckt und ver&#246;ffentlicht habe. Sie meldeten das Problem Ende 2008 an Microsoft und die signalisierten, dass das aus deren Sicht keine relevante L&#252;cke sei und nicht behoben wird. Sentrigo schrieb daraufhin ein Tool, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[19,16],"tags":[929,591],"_links":{"self":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/posts\/3534"}],"collection":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/comments?post=3534"}],"version-history":[{"count":12,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/posts\/3534\/revisions"}],"predecessor-version":[{"id":3592,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/posts\/3534\/revisions\/3592"}],"wp:attachment":[{"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/media?parent=3534"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/categories?post=3534"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.glorf.it\/blog\/wp-json\/wp\/v2\/tags?post=3534"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}