Wiztree Software-Installation bei Praxis-Verwaltungssystem?

Stop - PixabayIch nutze den Blog mal als Honeypot, um herauszufinden, ob es weitere Betroffene gibt. Ein Blog-Leser hat mich vor einiger Zeit kontaktiert, weil bei einem seiner Kunden eine Software mit Namen "Wiztree" auf dessen Servern installiert wurde. Da es sich um Server handelt, auf denen ein Praxis-Verwaltungssystem läuft, und die "Beigabe" im Umfeld eines Software-Updates erfolgte, war der Blog-Leser, der als Dienstleister arbeitet, natürlich alarmiert.


Anzeige

Blog-Leser Michael hat mich bereits zum 8. Januar 2025 per Mail kontaktiert – ich hatte das Thema aber liegen gelassen, da der Leser beim Software-Anbieter nachfragen wollte, ob es eine Erklärung gibt.

Plötzlich wird Wiztree installiert

Michael betreut als IT-Dienstleister auch eine Zahnarzt-Praxis, wo zwei Windows Server mit dem Praxis-Verwaltungssystem (PVS) laufen. Zum 8. Januar 2025 wurde er "aufgescheucht", weil er an diesem Morgen auf zwei Servern eine seltsame Software-Installation entdeckte.

Auf diesen Servern erfolgte am 07.01.2025 zwischen 19:30 – 22:30 Uhr ein Update des zahnärztlichen PVS Systems (Solutio Charly 9.32.1). So weit so normal und kein Grund zur Beunruhigung.

Beide Server hätten dann in der Nacht um 3:01 und 3.02 Uhr die Software "Wiztree v.4.23" des Herstellers "Antibody Software" installiert, ohne dass ein Benutzereingriff erfolgte, schrieb der Blog-Leser.


Anzeige

Installierte Software Wizztree

Bei Wiztree handelt es sich um einen Disk Space Analyzer des oben genannten Herstellers. Was den Leser dann beunruhigte, ist der Umstand, dass die Software "Wiztree v.4.23" des Herstellers "Antibody Software" gleich auf zwei Servern aufschlug.

Dazu schrieb mir der Leser, dass es sich bei diesen beiden Servern um einen voll gepatchten Windows Server 2016 Standard und  einen Windows Server 2019 Standard handelt. Beide Server stehen an verschieden Standorten, die nicht miteinander verbunden sind oder im Kontext miteinander stehen.

Der Leser fand das seltsam und versucht, die Fa. Solutio, den Hersteller des Praxis-Verwaltungssystems, telefonisch zu erreichen, um zu klären, ob es einen Zusammenhang mit dem Update des PVS steht.

Michael fragte in seiner initialen Mail, ob evtl. andere Nutzer dieses PVS-Systems nach Update ähnliches berichten können? Wie bereits erwähnt, hatte ich die Information liegen gelassen und bei Michael nochmals nachgefragt.

Zum 20. Januar 2025 gab es von ihm die Rückmeldung, dass der Hersteller Solutio bisher nichts zur Aufklärung beigetragen und sich auf Anfragen nicht gemeldet habe. Daher stelle ich das Thema mal hier im Blog ein, verbunden mit der Frage, ob jemand aus der Leserschaft zufällig etwas ähnliches beobachtet hat.


Anzeige

Dieser Beitrag wurde unter Sicherheit, Software abgelegt und mit , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

68 Antworten zu Wiztree Software-Installation bei Praxis-Verwaltungssystem?

  1. Adrian Weyler sagt:

    Moin, außer einem Hack/Remote missbrauch mit Adminrechten oder einem anderen Dienstleister/Techniker, wäre meine Idee eine automatische Installation ggf. durch Update Routine eines Tools was Müll mitgebracht hat oder über ein Patchmanagement / Autoupdater ggf. Winget Download und unerlaubte Mitinstallation von Adware oder missbrauch eines Update Servers "gekapert" wie damals bei CCleaner.

    Es soll, mit dem Tool WizTree, auch ein Remote/Netzwerkscan der Festplatte möglich sein.

  2. Anonym sagt:

    Ich kann bestätigen dass bei unserem einzigen Solutio Charly Kunden ebenfalls seit Anfang Januar "WizTree" installiert ist. Hinweise auf WizTree finden sich auch in den Charly Server Skripten unter "C:\Program Files\Charly Server\Modules". Läuft also unter Support Tools des PVS.

  3. Mars sagt:

    Wir haben ich Kunden die Charly einsetzen aber Wiztree wäre mir neu. Solutio zu erreichen zu erreichen und zeitnah eine Antwort zu bekommen ist wie nen 6er im Lotto, aber das ist ein trauriges Spiel bei vielen PVS Herstellern.

  4. Tomas Jakobs sagt:

    Kenne die Software PVS nicht, aber es befremdet sehr, dass ein produktiver Server offenen Zugriff zum Internet hat. Kein Proxy, keine Firewall dazwischen, wo Traffic lediglich zu den Hosts der benötigten Gegenstellen gelassen wird? Sowas würde ich sofort bei einem Audit knallrot markieren!

    Und nein, es erstaunt nicht, dass Drittsoftware huckepack von einem Betreiber mitinstalliert wird. Genau deswegen betreibt man Produktivsysteme offline.

    • Peter sagt:

      Proxy???
      Wir haben 2025 und ich habe immer öfter den Eindruck, dass es das Konzept nicht mehr gibt. Regelmäßig gibt es bei uns Probleme mit Software, die über den Proxy Probleme macht.
      Und auch Anbieter wie Microsoft etc. bieten ja riesige Listen mit Netzen, die man am besten direkt rauslässt, damit die Performance in Teams&Co stimmt.

      • Anonym sagt:

        Das Konzept Proxy gibt es schon noch, häufig aber als transparenten Proxy was der Anwender dann gar nicht mitbekommt. Und ein Server muss ganz sicher nicht auf riesige Listen von Netzen zugreifen, das ist eher was für den Client und ja, da macht das gerne mal Aufwand.

        Ganz offline kann man auch produktive Systeme häufig nicht betreiben. Manche Software da draußen macht es sehr schwer oder gar unmöglich z.B. ein Update ohne Internetverbindung durchzuführen. Aber sowas schränkt man dann auf dedizierte Ziele ein.

      • Tomas Jakobs sagt:

        Willkommen in der Realität Ich kenne kein Enterprise Netzwerk ohne. Meist werden diese transparent vergeben, damit Enduser davon nichts mitbekommen. Dein Smartphone zum Beispiel bekommt sein Internet garantiert von Deinem Provider ebenfalls durch ein Proxy geschleift.

        > Ganz offline kann man auch produktive Systeme häufig nicht betreiben.

        Natürlich kannst und musst Du das. In der produzierenden Industrie ist das Vorraussetzung. Da willst Du Anlagensteuerungen ganz bestimmt nicht im Netz haben.

        Alle von mir verwalteten ADs bestehen im Grunde nur noch aus offline gehaltenen Server. Updates gibt es per WSUS, der als einziger zuschaltbar seine Updates holt.

        • R.S. sagt:

          Nein, kann man nicht.
          Es gibt genug Software auch sehr großer Anbieter, die bei jedem Programmstart und bei laufendem Programm auch regelmäßig (z.B. alle 10 Minuten) eine Lizenzprüfung machen.
          Scheitert die Verbindung zum Lizenzserver, startet das Programm nicht.
          Man kann bei verlorener Verbindung zum Lizenzserver mit dem Programm nicht mehr arbeiten oder seine Sachen nicht mehr speichern.

          • Tomas Jakobs sagt:

            Dann schaltest Du den oder die Lizenzserver im Proxy/Firewall auf genau dem Port, der benötigt wird frei.

            Was macht Dein Kicki-Bunti-Admin sonst so?

            Eine offen am Internet betriebene Anlage ohne Netzwerkisolierung und Netzwerkkontrolle, eine fette Nebenabweichung wenn ich bei Dir TISAX auditieren würde.

            • Anonym sagt:

              Gottseidank auditierst du bei mir nichts. Deine Meinung in allen Ehren, kann man drüber diskutieren. Bei der Aussage mit den Klicki Bunti Admins würdest du bei mir hochkant rausfliegen, nicht nur als Dienstleister oder Auditor, sondern auch als Mitarbeiter.

        • Anonym sagt:

          > Da willst Du Anlagensteuerungen ganz bestimmt nicht im Netz haben.

          Und Anlagensteuerungen sind, wenn sie über ein Proxy "am Netz" sind, nicht am Netz?

          Ich schätze mal, dass der Poster hier auch keine Industrieanlagen meint, sondern viel eher Serversysteme auf denen eine Fachanwendung läuft. Da wird es in der Tat immer schwieriger diese gänzlich offline zu betreiben. Dazu kannst du dir auch über WSUS, Proxy, dedizierte IPs Schadsoftware einfangen.

        • Der der mit dem Fremdscham tanzt sagt:

          Updates per WSUS. das zuverlässigste Patchsystem aller Zeiten, da gab's ja noch nie Probleme mit. 😂
          Schon alleine die Liste an Servern / FQDNs die Microsoft freigegeben haben will damit Windows und Office365 Updates funktionieren ist mindestens 30 Zeilen lang und enthält zum Beispiel *.windowsupdate.com
          Das können viele Firewallsysteme gar nicht per Firewallregel freigeben.

          Durch die ganzen CDNs kann man heutzutage ja nichtmal mehr sauber Geoblocking benutzen weil der Zugriff auf eine Webseite einer deutschen Firma dank CDNs je nach Lust und Laune durch 15 verschiedene Länder der Welt erfolgt.

          Außerdem würde ich gerne ein kleines bis mittelständisches Unternehmen sehen das bereit ist wöchentlich etliche Stunden Arbeitszeit zu bezahlen alleine für Webproxy Pflege und URLs nach pflegen die fürs tägliche Arbeiten und normale Updates der verwendeten Software so nötig sind wenn man innerhalb von 5 Minuten auch einfach HTTPS mit logging freigeben könnte. 😂

          • Sebastian sagt:

            Findest Du DNS basierte Out/In Freigaben sinnvoll?
            Ich würde es eher als weitere Line Of Defense sehen, hat man oder eben nicht.

            • Tomas Jakobs sagt:

              DNS basierte Out/In Freigaben? Sorry das gefähtliche Naivität! Jeder bessere Payload- oder Update-Mechanismus hat in seiner Serverliste auch die eine oder andere direkte IP.

              • Anonym sagt:

                Naivität ist grenzenlos.

                Liegt auch an der nicht (mehr?) vorhandenen Vorstellungskraft, dass alles, aber auch alles was es gibt, durchsetzt von Backdoors auf verschiedensten Ebenen ist und gnadenlos von verschiedensten Seiten ausgenutzt und missbraucht wird – und 99% davon wird nie entdeckt…

                Sieht man auch schön, wenn wieder mal völliges Unverständnis oder "sensationelle" Beiträge über Magic Packets o.ä. durch die Berichterstattung geistern, sowas ist Standard seit Jahrzehnten.

    • FriedeFreudeEierkuchen sagt:

      Irgendwie verstehe ich deine Argumentation komplett gar nicht. Was genau ist dein Problem?
      Ein PVS ist eine Praxisverwaltungsoftware. Vielleicht erklärt sich für dich damit die Problematik?
      Der Hersteller installiert ein Update für das Praxisverwaltungssystem (PVS). Das ist soweit in Ordnung und auch explizit gewünscht. Schließlich gibt es im ärztlichen Umfeld ständig Veränderungen. Niemand wird also den Server so abschotten, dass es keine Updates mehr geben kann. Von "keine Firewall" ist hier nirgends die Rede gewesen, daher ist diese Kritik Unsinn. Und was du genau mit einem Proxy anfangen willst, erschließt sich mir auch nicht. Worin liegt für dich der Nutzen?

      Das hier berichtete Problem liegt darin, dass der Hersteller beim Update nebenbei ein weiteres Tool auf dem Server installiert – ohne Rückfrage, ohne Hinweise.
      PVS sind eine Nische. Aber anscheinend lukrativ genug, trotz einem starken Konkurrenzumfeld noch verdienen zu können. Aber wohl nicht lukrativ genug, für ordentlichen Service.

      • Anonym sagt:

        Das hier berichtete Problem liegt darin, dass der Hersteller…

        .. oder wer/wie auch immer…

      • Tomas Jakobs sagt:

        > Was genau ist dein Problem? (…) Das hier berichtete Problem liegt darin, dass …

        Nein das ist es nicht allein. Du scheinst die Tragweite des Vorfalls nicht umfasst zu haben. Was da Nachts um 3:00 Uhr offenbar massenhaft in zahlreichen Arztpraxen passiert, ist folgendes:

        Ohne Ankündigung, Absprache oder Zustimmung wurde remote eine bislang unbekannte und ungetestete Software auf einem produktiven System installiert. Keine Komponente, eine vollständig eigenständige Software mit eigenem (Innosetup) Installer und vertraglichen Nebenabsprachen.

        Wir sprechen hier nicht von einem Wald-Wiesen-Klicki-Bunti Host sondern von einem, wo besonders schutzwürdige und sensible Gesundheitsdaten von Kunden aufbewahrt werden. Da hat in meinem Verständnis niemand was einfach so zu installieren.

        Wer bezahlt eigentlich den betrieblichen Schaden + Technikereinsatz zur Fehlersuche wenn am Folgetag der Server tot bleibt. Weil sich irgendwas von Wiztree mit einem Whitelisting nicht verträgt und die Arztsoftware ins Nirvana schickt? Was passiert mit einem Notfall, der dringend behandelt hätte werden müsste und deswegen fort geschickt wird. Dem in Folge Schaden für Leib und Leben widerfährt?

        Risikobewertung… sagt Dir das was? Aber Zahnärzten sagt man ja eh nach, dass das unter den Ärzten eher die Metzger seien.

        Ich kenne die Software Wiztree nicht aber was ist da mit Telemetriedaten? Wie kommen Updates ins System, der Website zufolge müssen diese manuell installiert werden. Wer macht das? Wer bezahlt den Mehraufwand? Wie sieht es überhaupt mit der Lizenzierung aus? Ich sehe da so erstmal keine und hätte da gerne was auf Papier.

        Damit Du zum Vergleich einmal siehst, wie in der Industrie mit externen Zulieferen umgegangen wird:

        https://blog.jakobs.systems/blog/20231010-supplychain-management/

        • Der der mit dem Fremdscham tanzt sagt:

          In einer bunten Wunschwelt gebe ich dir da durchaus Recht, das wäre alles ganz toll und hätten wir gerne überall.
          In der Realität schaut's aber anders aus.
          Warst du seit DSGVO Mal beim Arzt?
          Ich saß in den letzten Jahren zig Male unbeaufsichtigt im Behandlungszimmer mit entsperren Rechner, teilweise 30 Minuten.
          Bei mindestens einer Arztpraxis war sogar die Patientenverwaltung offen, ich hätte mir also innerhalb von einer Minute die Patientenakten ansehen und auf einen USB Stick ziehen können.
          Da hab ich die Ärztin dann sogar drauf angesprochen dass sie das nicht so lassen können und beim Nachfolgetermin 6 Wochen später wars wieder genauso.
          Da hab ich dann die Praxis gewechselt.

          Wir haben auch schon bei einer Arztpraxis die Fritzbox gewechselt weil die ihren Internetanschluss über uns haben. Deren komplette IT für 2 Hausärzte in der Praxis waren 2 Windows 7 Rechner und ein USB Stick auf den täglich von der Praxis Software Sicherungen erzeugt wurden. Zu dem Zeitpunkt war Windows 7 2 Jahre Out of support.
          Die hingen direkt hinter der Fritzbox am Internet und waren 10+ Jahre alt.

          Das kam dann raus, als der eine Win 7 Rechner die Grätsche gemacht hat und alle Praxisdaten weg waren.
          Es gab zwar dieses Backup auf den USB Stick, die Software ist aber erst im Nachhinein um den Teil Terminplanung erweitert worden und das wurde im "Backup" nicht mit angehakt bei Ergänzung.
          Bei denen war dann also die komplette Terminplanung für das laufende Jahr weg.

          So schaut die Realität in 9 von 10 kleinen Arztpraxen in Deutschland aus. 😂

          • Anonym sagt:

            Meiner Beobachtung nach in 9,5 von 10.

          • Michael B. sagt:

            Ich kann das ebenso bestätigen. Das Sicherheitsbewusstsein lässt sehr zu Wünschen übrig, obwohl es die IT-Sicherheitsrichtlinie nach § 75b SGB V der KZV/KZBV für die Ärzte gibt und auch der BSI darauf verweist. Aber es ist eben nur eine "Richtlinie". Und ja, die DSGVO wird ständig mit Füßen getreten, was ich so als eDSB beobachte und mich mit Mandanten rumstreiten muss. Das ist der öffentliche Aufreger hinsichtlich der ePA noch harmlos. Bei etlichen Ärzten findet die Verabeitung von Art. 9 Daten schon statt, bevor ein AV-Vertrag gem. Art. 28 DSGVO abgeschlossen wurde und sich der DSB mit der Richtigkeit beschäftigt hat. Dann kommen noch die ganzen Startup Cloud-Anbieter für Termin-Vergabe und Co., die den Ärzten alles versprechen, aber höchstkritisch hinsichtlich Art. 9 Daten einzuschätzen sind. Aber das ist ein ganz anderes Thema. Vielleicht ein separater Beitrag von Herrn Born mal wert. Dann plaudere ich mal aus dem Nähkästchen.

          • Tomas Jakobs sagt:

            Auf diese Argumentation will ich mich besser nicht einlassen, da es in der Industrie und so manchem Mittelständer nicht wirklich besser aussieht.

            Doch es gibt sie, Unternehmen und Geschäftsführer, die IT für wichtig nehmen, weil Sie wissen, dass ohne alles steht und es saftige Poenale oder Klagen geben würde wenn man in einer wichtigen Lieferkette steckt.

            Daher ist es nicht verwunderlich, dass Unternehmen zunehmend ihre Lieferketten auf zumindest grundlegende Zertifizierungen und ITMS prüfen. Mag für viele zusätzliche Verwaltungsarbeit sein, dort wo vorher gar nichts war ist es aber mindestens etwas.

            IMHO helfen bei vielen nur empfindliche Strafen und mehrere Wochen Ransomware-Befall bis da etwas im Dachstübchen klingelt.

            Deswegen mein Tip an jede Sekretärin oder Office-Arbeiter. Klickt auf alle Anlagen, öffnet alle Euch in Emails präsentierten Links. Ihr müsst sicheres Arbeitsgerät und eine sichere Arbeitsumgebung von Eurem Arbeitgeber gestellt bekommen, wo ihr eine angebliche Telekom-Rechnung auch darauf validieren können müsst. Wenn eine komplette IT Infrastruktur aufgrund eines Mausklicks abfackelt, dann ist es nicht euer Fehler. Die komplette IT Infrastruktur ist dann einfach kaputt und verdient es abgefackelt zu werden.

            • Günter Born sagt:

              Den letzten Absatz sollte man streichen – ist kontraproduktiv und könnte für Angestellte böse ausgehen.

            • Anonym sagt:

              Und lasst alle Fenster und Türen im Büro offen, ihr müsst eine sichere Arbeitsumgebung von Eurem Arbeitgeber gestellt bekommen, merkste selbst…

            • Der mit dem Fremdscham tanzt sagt:

              Bei uns streicht jetzt ein Kunde die Firewall runter auf Mindestschutz, nur noch stumpfes Firewalling, kein Webfilter, kein Gar nichts, weil sonst das Geld zum Mitarbeiter bezahlen fehlt.

              Und ein anderer Kunde war schon Mal 3 Tage offline wegen Emotet damals weil ein Mitarbeiter Freitag Nachmittag den Wurm gestartet hat und dann aber einfach ins Wochenende gegangen ist. Montag früh war dann halt alles im Netzwerk was der Nutzer im Zugriff hatte verschlüsselt. 😂
              Da hat sich trotzdem keinerlei Lerneffekt eingestellt meines Erachtens nach.
              Kompetente Mitarbeiter finden ist heutzutage halt schwer, Unternehmen die wissen welche Online Portale, Programme und Co. sie verwenden sind bei Kleinstbetrieben auch selten. 😂
              Die jammern dann erst wenn irgendeine Webseite nicht mehr geht.
              Bei Kunden mit Nachtschicht, Frühdienst und dergleichen ist das sehr lustig.

              • Tomas Jakobs sagt:

                > Bei uns streicht jetzt ein Kunde die Firewall runter…

                Also reicht dem eine Fritzbox?!?

                > 3 Tage offline…

                Süß… es fängt an, lustig zu werden, wenn hunderte Mitarbeiter nach Hause geschickt werden, nachdem Sie schon 3 Tage lang Ablage machten. Weil es der Geschäftsführung dämmert, dass es günstiger ist, wenn diese daheim bleiben. Das ist auch der Moment, wo es dämmert, dass IT vielleicht doch keine Kostenstelle und Profit-Center ist. Und man besser den Mitarbeitern und der Technik mehr Liebe und Bedeutung beigemessen hätte die letzten Jahre/Jahrzehnte.

                > Kompetente Mitarbeiter finden ist heutzutage halt schwer

                Kann ich so überhaupt nicht bestätigen. Die findest Du, sogar schnell, nur halt nicht zu zum angedachten Kurs. Denn Porsche fahren, aber nur Fiat500 zahlen will jeder. Die freien Kräfte des Marktes, lernt das nicht BWL-Juppi?

    • anonmyous sagt:

      firewall => windows firewall
      zugriff zum internet => ist nötig, damit leistungserbringer abrechnen können. insbesondere seit der Festlegung der Telematikinfrastruktur.

    • Michael B. sagt:

      Einer der Server wird z.B. durch eine PaloAlto-Firewall geschützt und es folgt auch ein zentralisiertes Monitoring für alle Mitglieds-Praxen. Dort war nichts aufgefallen. Ich hatte denen den Hinweis aus meinem Server-Monitoring dann mal zugeschickt. Früher hätten wir das selber auf der Watchguard monitoren können.

      Solutio-Updates mache ich immer offline, hole mir also zuvor die Installations-Packages. Es ist auch quasi nicht möglich, die Server offline zu betreiben, alleine schon auf Grund der TI (KIM, eAU, ePA, etc.) geht das nicht, ganz abgesehen von zahlreichen Drittanbieter-AddOns, die da laufen, z.B. für Termin-Management, SMS-Versand, Anamnese, Web-Anwendungen, iPad-Anbindung etc.

  5. Kilian sagt:

    Ich habe auch einen Kunden mit Charly und kann es bestätigen, dass Wiztree am 07.01. installiert wurde (Habe nachdem ich diesen Artikel gelesen hatte, gleich nachgeschaut). Installationen von meiner Seite wurde zu dem Zeitpunkt nicht durchgeführt und somit muss die Installation von alleine durchgeführt worden sein.
    Werde da auch mal nachhaken, warum diese Software installiert wird und ob diese wieder deinstalliert werden kann und nicht die Deinstallation den Betrieb der Software stört.
    Aber Antworten von der Firma Charly zu erhalten, bedeutet wirklich viel viel Geduld…

  6. Dieter sagt:

    Abgesehen davon dass es ein Lizenzverstoß wäre, da WizTree nur für den privaten Gebrauch kostenlos einsetzbar ist und nicht kommerziell mit einer anderen Software verteilt werden darf, ist das Programm an sich eine etablierte, moderne und gute Alternative zu WinDirStat oder TreeSize oder Disk-Space-Explorer oder wie sie alle heißen.
    Hier schwingt halt irgendwie mit als sei "WizTree" oder "Antibody Software" irgendein Scam oder gefährlich; das ist nicht der Fall.
    Ich lehne mich mal weit aus dem Fenster und schätze, dass es ggf. (mindestens) einen weiteren Admin gibt der das Tool verteilt hat; ob manuell oder über eine Softwareverteilungslöung sei dahingestellt.
    Ein einleuchtender Grund, weshalb der Hersteller einer Praxisverwaltungs-Software dieses Programm installieren sollte, ist schwer vorstellbar, da es keinen Grund gibt die Details der Festplattennutzung einzusehen. WizTree wird eher von Menschen benutzt, die Zugriff auf die Serverkonsole haben und sich dann anschauen, "wo der freie Platz hin ist", weil bspw. irgendein User plötzlich sein Outlook-OST-Caching auf "unbegrenzt" gestellt hat und von jetzt auf gleich 20+ GB Postfach-Cache in seinem Profilordner dazukommen oder solche Dinge…

    • Marsl sagt:

      Nein, Wiztree ist auch in einer kostenpflichtigen Variante für Unternehmen verfügbar.

      • Dieter sagt:

        Genau. War missverständlich ausgedrückt; "einfach so ungefragt for free auf Servern installieren" wird das Tool (hoffentlich) keine Firma, weil die Lizenz die kostenlose Nutzung nur für Privatpersonen vorsieht. Kommerzielle Nutzung muss lizenziert werden, und Lizenzgeber ist der Hersteller, nicht die Praxisverwaltungssoftware-Herstellerfirma. Daher wäre es ein Lizenzverstoß, wenn sie es ungefragt auf kommerziell genutzten Systemen installieren würden.

        • Dikkie sagt:

          Schnell mal geschaut. Es gibt eine Distribution Lizenz die es erlaubt, die Free Version mit seiner Applikation zu bundeln. Es kann also sein, dass Solutio diese Version lizensiert hat.

    • Michael B. sagt:

      Zwischenzeitlich hat Solutio einen Hinweis im nur für Kunden zugänglichen Support-Portal gestellt. Anscheinend gab es ja auch andere DVO´s, die ein Auge auf Produktivserver halten.

      "Hinweis: Nachträglicher Hinweis zur Nutzung von WizTree
      Wir verwenden WizTree für bestimmte Funktionen. Über die Nutzung wurde bisher nur in der technischen Dokumentation informiert: https://charly-cdn-solutio.s3.amazonaws.com/release/docs/windows/overview.html.
      WizTree wird in verschiedenen Szenarien eingesetzt, um performant sicherzustellen, dass Speicheranforderungen – beispielsweise bei der Erstellung von Backups – eingehalten werden.
      Sie können WizTree jederzeit manuell deinstallieren, falls Sie dies wünschen."

      Wünschen?! Man sollte zuerst überhaupt mal um Zustimmung bitten, ein solches Tool über ein Script mitten in der Nacht installieren zu lassen.

      • Anonym sagt:

        Wenn eine Firma augenscheinlich nichtmal in der Lage ist, eine "technische Dokumentation" DSGVO konform zu hosten, dann liegt es mutmasslich auch anderweitig im Argen.

  7. Kilian sagt:

    Also ich möchte nur kurz erwähnen (mehr schreibe ich auch dazu nicht), dass bei der Praxis, wo bei mir der Fall ist, nur ich der Admin bin und auch der Charly selber, auf einem separierten Server (VM) liegt.
    Auch ist es sehr unwahrscheinlich, dass bei verschiedenen und auch betreuten Systemen am selben Tag die gleiche Software von einem anderen "Admin" installiert wurde. ;-)

  8. Kilian sagt:

    Für alle, die betroffen sind. Habe folgende super schnelle Antwort erhalten:
    "WizTree wird vom charly-Updater benötigt und von diesem automatisch installiert.

    Bitte entfernen Sie WizTree daher NICHT vom charly-Server. Andernfalls wird der Updater bzw. dessen Funktionen künftig nicht mehr vollumfänglich funktionieren."

    Also haben die einfach installiert…

    • FriedeFreudeEierkuchen sagt:

      "WizTree wird vom charly-Updater benötigt"
      Wow. Was für ein Unsinn. Das klingt ja nach Mega-Gefrickel.
      Ich dachte schon das PVS aus meiner Zuständigkeit wäre hemdsärmelig. Aber es geht wohl immer noch schlimmer.

    • Ralph D. Kärner sagt:

      Wow. Das bedeutet, die Entwickler von Charly kriegen es nicht hin, die in Windows vorhandene Funktion zu bedienen, mit der man den verfügbaren Plattenplatz abfragt, bevor man ein Update startet, dass dann wegen Platzmangels die gesamte Installation ins Nirvana schießt?
      Da sollte man seinem Kunden vielleicht doch einen Wechsel vorschlagen…

    • Michael B. sagt:

      Widersrpüchliche Aussage des Herstellers Solutio:

      "Sie können WizTree jederzeit manuell deinstallieren, falls Sie dies wünschen."

      "Bitte entfernen Sie WizTree daher NICHT vom charly-Server……."

      Was denn nun?

  9. Ray777 sagt:

    Ich kann für einen unserer Kunden, ebenfalls Zahnarzt-Praxis mit Solutio im Einsatz, bestätigen, einen identischen Effekt beobachtet zu haben. WizTree hat sich installiert, ohne dass es dafür eine Erklärung gibt.

  10. Danny sagt:

    Wir haben das Script gefunden es versucht nach dem versenden der Festplatteninfprmationen das Programm zu löschen. geht scheinbar schief.

    }
    function Uninstall-WizTreePortable {
    [CmdletBinding()]
    param()

    try {
    # Get the WizTree installation path
    $charlyServerPath = Join-Path ${env:ProgramFiles} "Charly Server"
    $wizTreeDir = Join-Path $charlyServerPath "wiztree"

    if (Test-Path $wizTreeDir) {
    Write-CustomLog "Removing portable WizTree installation from $wizTreeDir" -Level INFO

    # Remove the entire WizTree directory
    Remove-Item -Path $wizTreeDir -Recurse -Force -ErrorAction Stop

    Write-CustomLog "Portable WizTree uninstalled successfully" -Level INFO
    return $true
    }
    else {
    Write-CustomLog "Portable WizTree not found at $wizTreeDir" -Level INFO
    return $true # Consider it a success if it's already not there
    }
    }
    catch {
    Write-CustomLog "Failed to uninstall portable WizTree: $_" -Level ERROR
    return $false
    }

  11. solutio GmbH & Co. KG sagt:

    Leider haben wir bislang nur in der technischen Dokumentation https://charly-cdn-solutio.s3.amazonaws.com/release/docs/windows/overview.html auf die Verwendung von WizTree hingewiesen und dies in der übrigen Kommunikation versäumt. Nachdem uns dieses Versäumnis bewusst wurde, haben wir die Update-News https://charlyupload.s3.amazonaws.com/uploads/charly-help/Content/whatsNew.htm entsprechend ergänzt. Aufgrund eines technisch bedingten Aktualisierungszyklus sind diese jedoch erst jetzt online verfügbar.
    Wir danken allen Anwendern für den Hinweis und entschuldigen uns für unsere unglückliche Kommunikation.

    • Tomas Jakobs sagt:

      Es tun sich gerade Security-Abgründe auf:

      Es wird doch tatsächlich im Kontext des Charly Installers (=volle System/Adminrechte) automatisch aus dem Netz ein Skript geladen und ohne Prüfung auf Validität und Authentizität auf den Server gestartet.

      https://charly-cdn-solutio.s3.amazonaws.com/release/windows/charly-server-install.ps1

      Ein simples DNS-Spoofing oder Cache Poisoning reicht aus, um in einer (allen) Praxen die eigene Ransomware zu installeren! Oder zumindest um mich auf System/Adminrechte zu elevaten.

      Ich weiß ja nicht was ihr sonst so macht, aber mit Security habt Ihr es nicht so oder?

      Dieses Kurzaudit ist kostenlos…

      Das meine Damen und Herren ist genau der Grund, warum man externe Dienstleister immer an die Hand nehmen muss und kritische Systeme offline betreibt!

      • Schiach sagt:

        Immerhin haben sie es digital signiert!
        /s

        Schade eigentlich, mit ein paar Handkniffen und der vorhandenen Signatur hätte es richtig gut sein können, aber vielleicht fehlt denen nur ein guter PWSH-Profi wie Ihnen.

        Wenn man nur Signierte Skripte lädt und das Cert im System als vertraut hinterlegt ist, ist das schon legitim. Zum Thema spoofing, hoffentlich hat jeder einen eigenen resolver mit DNSSEC?

        Ist auch egal.

        • Tomas Jakobs sagt:

          > Wenn man nur Signierte Skripte lädt …

          Und Du meinst, böse Jungs wissen nicht auch, wie Skripte signiert werden können?

          > und das Cert im System als vertraut hinterlegt ist…

          Was Default jedes schnell z.B. bei Certum für 130,- EUR geschossene Authenticode Cert ist. Den Scan eines Ausweises oder einer Telefonrechnung für eine Fake-Identität ist kein großer Aufwand.

          > …ist das schon legitim.

          Sehe ich nicht so.

          Zum Thema DNS, hatte nicht unlängst Mastercard ein veritables DNS Problem? Wo 1/5 aller Anfragen leicht für genau wie sowas hier hätten mißbraucht werden können?

          Auch beliebt sind vergessene und neu vergebene Instanzen auf eine der nachfolgenden IPs im DNS:

          ;; ANSWER SECTION:
          charly-cdn-solutio.s3.amazonaws.com. 38967 IN CNAME s3-w.eu-central-1.amazonaws.com.
          s3-w.eu-central-1.amazonaws.com. 4 IN A 3.5.137.156
          s3-w.eu-central-1.amazonaws.com. 4 IN A 52.219.170.111
          s3-w.eu-central-1.amazonaws.com. 4 IN A 52.219.169.87
          s3-w.eu-central-1.amazonaws.com. 4 IN A 52.219.169.195
          s3-w.eu-central-1.amazonaws.com. 4 IN A 52.219.170.131
          s3-w.eu-central-1.amazonaws.com. 4 IN A 52.219.170.215
          s3-w.eu-central-1.amazonaws.com. 4 IN A 52.219.75.189
          s3-w.eu-central-1.amazonaws.com. 4 IN A 3.5.135.244

          • Schiach sagt:

            Nicht alles was auf Blog Fefe steht ist extrapolierbar um als Argument in jedem beliebigen Thema herzuhalten ;)

            Im übrigen, meine Records sind bei meiner eigenen Domain sicher.

    • Anonym sagt:

      Was sind das für seltsame Links?

      Mit zig technisch nicht notwendigen externen Einbindungen unpkg und google? Und ohne Einwilligung bzw. Datenschutzerklärung?

      Warum hosten Sie so einfache Dinge nicht einfach komplett selbst lokal im eigenen Hosting?

    • Andreas Möckel sagt:

      Als Administrator der Charly-Anwender-Community, welche von den offiziell bekannt gegebenen 3500 charly-Nutzern ca. 2000 als Mitglieder erreicht, möchte ich folgenden Beitrag aus unserer Facebookgruppe auch hier den Lesern zur Kenntnis geben.
      Vorab nur noch: solutio hat trotz der direkt an die Firma gerichteten Bitte als Gruppenmitglied bisher kein Statement abgegeben.

      Hier der Beitrag:

      "Ist der Autoupdater bereits installiert?

      Unser Mitglied Andreas Fackler hat vorgestern offenbar mit seinem Beitrag etwas aufgedeckt, was, weil noch nicht ausgereift, nicht für die Öffentlichkeit der charly-Anwender gedacht war.
      Was war passiert?
      Offensichtlich ohne Zutun des jeweiligen Anwenders wurde Anfang Januar automatisch in den solutio-Ordner auf den Server-Festplatten der jeweiligen Nutzer ein Windows-Tool "WizTree portable" installiert, ausgeführt und die gewonnenen Informationen für solutio zur Auswertung bereit gestellt.
      Bei WizTree handelt es sich um ein Tool, dass die Speicherbelegung von Festplatten übersichtlich anzeigt sowie die Anzahl der enthaltenen Elemente, Dateien und Ordner auflistet.
      So ein Tool wird z.B. genutzt, um vor einer Update-Installation automatisch zu prüfen, ob der freie Platz für die Installation ausreichend ist – eine durchaus nützliche Funktion.
      Für Privatanwender ist WizTree kostenfrei, bei gewerblicher Nutzung ist eine kostenpflichtige Lizensierung notwendig.
      Auto-Updater für charly
      Schon lange ist bekannt und z.B. mehrfach im Developer-Call gesagt, dass solutio das Procedere der Datensicherung und Updateinstallation überarbeitet und eine automatisierte und für den Praxisbetrieb störungsfreie nächtliche Updateinstallation entwickelt. Mit diesem Wissen erschien es nur folgerichtig, dass zeitlich parallel zum Update 9.31.6 und zur finalen Abkündigung von PostGreSQL 8 und 9 auch der charly-Updater (Bei Container und VM eine charly.exe) manuell vom jeweiligen Nutzer zu installieren sind. Dies funktionierte, ohne irgendwelchen geänderten Nutzungsbedingungen o.ä. aktiv zustimmen zu müssen. Daher war anzunehmen, dass keine wesentlichen und Nutzungsvertragsrelevanten Dinge geändert worden sind. Wie wir jedoch nun wissen, haben wir Anwender unwissend mit dieser Installation solutio das Tor geöffnet, damit automatisch, unbemerkt und ohne aktive Bestätigung des jeweiligen Anwenders diverse automatische Installationen auf unserem Server vorgenommen werden können.
      Bekanntlich hatten wir hier in der CAC eine Umfrage zum Autoupdater, in der sich die überwiegende Mehrheit gegen eine vollständig automatisierte und ohne aktiven Anwenderzugriff laufende Aktualisierung unserer Systeme ausgesprochen hatte. Offenbar lies dieses Umfrageergebnis solutio unbeeindruckt.
      Solutio-Erklärung vom 24.01.25
      Gestern Nachmittag hat solutio eine Erklärung zur Verwendung von WizTree abgegeben, die im Firmen-Facebookauftritt öffentlich zugänglich ist. Auch auf der Support-Seite und in den Neuigkeiten für 9.32.1 tauchten nun entsprechende Hinweise auf.
      Liest man jedoch aufmerksam in der verlinkten technischen Dokumentation nach, werden diverse Widersprüche offensichtlich:
      Die Dokumentation wurde erst am 15.01.2025 veröffentlicht, obwohl der Updater 3.18.4 bereits ab dem 20.11.2024 verpflichtend zu installieren war.
      Es wird informiert, dass die Installation des Wartungsskripts "charly-Server" automatisch ab Version 9.31.6 erfolgte.
      Diese automatische Installation umfasste neben WizTree auch noch 7Zip, OSCDIMG noch weitere, nicht detailliert benannte Tools. Also kann sich der Anwender hier nicht informieren, was alles neben dem aufgeflogenen WizTool noch auf der Festplatte seines Servers "schläft".
      Generell trägt die Dokumentation Arbeitscharakter, so fehlt z.B. das Diagramm "charly-environments" und auch die Kontaktinformationen sind noch nicht enthalten.
      Wichtig: Diese Dokumentation gilt ausschließlich für Aktualisierungen per charly-Updater. Für Containeranwender und VM-Installationen, bei denen zur Aktualisierung kein Updater erforderlich ist und auf deren Systeme ebenfalls automatisch Software aufgespielt worden ist, ist keine Dokumentation auffindbar.
      Wichtig: Ebenso sind die "Neuerungen 9.31.6", in denen erstmals über die Notwendigkeit einer manuellen Aktualisierung des Updaters (bzw. Implementierung einer geänderten charly.exe) durch aktives Eingreifen des Anwenders informiert wurde, nicht mehr verfügbar, auch nicht im Archiv charly-Versionen.
      Meine Bewertung
      Auch wenn ich nur Anwender, und kein IT-Sachkundiger bin, ist mir jedoch sonnenklar, dass zum Erreichen des Ziels "Automatische Updateinstallation ohne Störung des laufenden Praxisbetriebes" durch diverse Tools ein solcher automatisch ablaufender Prozess überwacht und zum erfolgreichen Abschluss gebracht werden muss. Nichts ist schlimmer, als ein Aufhängen des Systems mitten in einer Aktualisierung (was dann erst zum Start des nächsten Arbeitstages bemerkt wird).
      Die Softwareentwickler von solutio achten m.E. immer darauf, dass ein solcher Prozess schnell und kostengünstig abläuft. Daher wird häufig auf etablierte Freeware zurück gegriffen. Hiergegen ist m.E. auch nicht s einzuwenden, so lange für den Endanwender kein Risiko (z.B. eine Lizenz- oder eine Datenschutzverletzung) entsteht.
      Unschön, jedoch bei dem bestehenden Entwicklungsdruch nachvollziehbar ist, dass die schriftliche Dokumentation nachhängt, also noch nicht "rund" ist. Jedoch muss zu jeder Neuerung eine konkrete Dokumentation verfügbar sein.
      Jedoch
      Ein Anwender muss zwingend informiert sein, was er mit einer Installation alles an seinem PVS ändert. Im Falle des Updaters 3.18.4 (der neuen charly.exe) erfolgte überhaupt keine Information durch solutio.
      Mit Veröffentlichung des Updaters (der .exe) wurden die Voraussetzungen geschaffen, dass solutio Tools auf unsere Server-Festplatten installieren kann, also bereits mit Update 9.31.6 und nicht erst, wie dargestellt, mit dem aktuellen Update.
      Solutio hat von dieser Möglichkeit zur Installation bereits 2024 Gebrauch gemacht. So wurde bei mir z.B. 7Zip bereits am 18.12.24 installiert.
      "Weitere Tools" – da ich für den Datenschutz und die Einhaltung der DSGVO in meiner Praxis allein verantwortlich bin, möchte ich schon gern wissen und ggf. entscheiden, welche Software insbesondere auf meinem Server installiert ist. Der Begriff "weitere Tools" kann auch Tools umfassen, die im Verborgenen z.B. Patientendaten aus meinem PVS heraus an Unbekannt übertragen.
      Fazit
      Die unautorisierte Installation und Nutzung einer Drittanbietersoftware auf meine Serverfestplatte betrachte ich als eklatanten Vertrauensbruch und als Verstoß gegen den bestehenden Lizenzvertrag für die Nutzung von charly.
      Unklar ist, ob durch die aktive Nutzung der Drittanbietersoftware (z.B. WizTree) ein Datenabfluss an solutio erfolgt ist und wenn ja, welche Daten sich da solutio geholt hat.
      Die Stellungnahme von solutio vom 24.01.25 ist eine Farce und soll m.E. den Anwender einlullen und ablenken. Die behauptete Veröffentlichung in der technischen Dokumentation der Firma ist für meine von solutio installierte Systemkonfiguration nicht auffindbar.
      Solutio hat erst installiert, dann in der technischen Dokumentation informiert und erst jetzt mit den ergänzten Neuerungen 9.32.1 auf öffentlichen Druck hin reagiert.
      Wegen fehlender Information war keinem Anwender klar, was er da konkret installiert und das er durch sein aktives Handeln solutio einen Zugriff auf seine Serverfestplatte gewährt.
      Neben dem Vertrags- und Vertrauensbruch liegt m.E. mindestens ein meldepflichtiges Vorkommnis einer Datenpanne nach der DSGVO vor. In seiner Stellungnahme erwähnt solutio jedoch nicht, ob die Firma als Verursacher dieser Panne den Landesdatenschutzbeauftragten fristwahren informiert hat und welche Maßnahmen ergriffen worden sind, um ein ggf. immer noch vorhandenes Datenleck oder Sicherheitsrisiko für unsere Patientendaten besteht.
      Ebenfalls fehlt jegliche Information, ob aus dem Anwendersystem Daten abgeflossen sind und wenn ja, welche und wohin, z.B. direkt zu solutio.
      Die Darstellung, weitere, dem Anwender nicht benannte Tools auf die Festplatte des Servers installiert zu haben, hat aus meiner Sicht strafrechtliche Relevanz und bedarf einer juristischen Überprüfung.
      PS: Durch diese neuen Erkenntnisse erscheinen meine unklaren Probleme mit dem Virenschutzprogramm "Norton 360" plötzlich in einem ganz anderen Licht. Es liegt nahe, dass Norton unautorisierte Aktivitäten bei diversen Ports registriert hat und zum Schutz meines Systems alle Ports ohne bekannte Freigabe dicht gemacht hat, um mein PVS zu schützen, d.h. ordentlich und gewissenhaft gearbeitet hat und ich habe es nur nicht verstanden.
      Aber auch hier sitze solutio wieder einmal alles aus! Tickets zu diesen Problemen werden seit Monaten einfach nicht bearbeitet oder das Problem wird als Anwenderfeedback weitergeleitet."

      • Tomas Jakobs sagt:

        Es wird ja immer doller! Was nehmen die solutio sich eigentlich heraus? Einfach ungefragt, intransparent und ohne Wissen 3rd Party Software auf die Kundensysteme zu instalieren. Nun jetzt auch 7-Zip. Warum eigentlich? Können die nicht einschlägige Kompressions-Libs in Ihr eigenes Programm einbinden?

        Kann denn bitte jemand die EULA für die Software bzw. die vertragliche Grundlage hier als Link posten, würde ich mir gerne durchlesen. Ich verwette meinen Hintern, dass da die typischen Ausschlüsse wie "der Kunde ist für sein Rechnersystem verantwortlich" steht.

        So eine Software, so ein Lieferant würde bei mir hochkant rausfliegen.
        Es gibt für Ärzte eine genossenschaftliche Ärztesoftware namens Duria. Diese Causa als Anlass nehmen, das Pferd zu wechseln.

        https://www.duria.de/

        • Andreas Möckel sagt:

          Hier der Link zu den AGB etc.
          https://www.solutio.de/agb/

        • Danny sagt:

          Das ist eine Zahnarztsoftware kein Arztsoftware. Gib aber auch da genügend andere.

        • Michael B. sagt:

          "Nun jetzt auch 7-Zip. Warum eigentlich?"
          Das ist aber nichts neues und gefühlt schon 20 Jahre bei Solutio im Einsatz und wird auch dokumentiert. 7Zip findet für verschiedene Dateioperationen Verwendung, so z.B. für das interne Backup der Solutio-Ablage sowie Komprimierung diverser NCJS-Datenbank Backups aus dem eHealth-Bereich.

          "Können die nicht einschlägige Kompressions-Libs in Ihr eigenes Programm einbinden?"

          Anscheinend nicht, liegt aber auch an der Architektur des PVS. Man furtelt da lieber mit Java-Scripten rum.

      • Anonym sagt:

        Es sollte unter Windows möglich sein, mit den vorhandenen Mitteln in einem Standard Installer herauszufinden, ob der Speicherplatz reichen wird und auch Pakete zu entpacken.

        Die Installation von extra Tools von Drittanbietern für solche Aufgaben ist ein Offenbarungseid dieser Firma.

      • Michael B. sagt:

        "…., in der sich die überwiegende Mehrheit gegen eine vollständig automatisierte…."

        Das ist auch vollkommen verständlich. In aller Regel läuft in den Praxen Solutio Charly auch nicht dediziert auf einem Server. Da laufen meist ein KIM-Client, Datenbanken bildgebender Systeme (z.B. Sidexis, etc.) mit drauf, womöglich auch der DC und ein Mailserver.

        "Unklar ist, ob durch die aktive Nutzung der Drittanbietersoftware (z.B. WizTree) ein Datenabfluss an solutio erfolgt ist und wenn ja, welche Daten sich da solutio geholt hat."

        Normalerweise besteht ein AV-Vertag nach Art. 28 DSGVO mit Solutio, z.B. ergänzend die "Servicespezifische Ergänzungen der Rahmenvereinbarung zur
        Auftragsverarbeitung gemäß Art. 28 DSGVO (Datenbank-Migration)". Diese Verträge weisen allerdings Mängel auf, da z.B. nicht alle Unterauftragnehmer aufgeführt werden. Weitere Tools? "WizzTree" taucht nicht auf, obwohl dieses Tool über Port 80 eine Verbindung in die USA aufbaut. Was wird übertragen? Soll man jetzt hingehen und sich mit Wireshark und Co. jeden Datenstream anschauen, wenn es denn nun auffällt.

        "Neben dem Vertrags- und Vertrauensbruch liegt m.E. mindestens ein meldepflichtiges Vorkommnis einer Datenpanne nach der DSGVO vor."

        Die müsste aber der Verantwortliche, also die Praxis binnen 72 Stunden nach Bekanntwerden gem. Art. 33 DSGVO bei der Aufsichtsbehörde vornehmen und nicht der Software-Hersteller als Auftragsverarbeiter. Der muss allerdings nach Art. 28 Abs. 3 lit. f) DSGVO den Verantwortlichen hierbei unterstützen.

        Der Software-Hersteller wäre also gem. DSGVO dazu verpflichtet gewesen, sich auf Anfrage des Verantwortlichen zu äußern, denn gemäß Art. 28 Abs. 2 lautet es: "Der Auftragsverarbeiter nimmt keinen weiteren Auftragsverarbeiter ohne vorherige gesonderte oder allgemeine schriftliche Genehmigung des Verantwortlichen in Anspruch."

  12. anonmyous sagt:

    ich glaube, solutio überschätzt sich mit der Container-Technologie. mittels eines powershell-skripts mit geprüften signaturen soll der charly-container aktuell gehalten werden anhand dem, was auf dem aws-servern, gemietet von soutio, gespeichert ist. dadurch ist zwar gewährleistet für solutio, dass die "Umgebung" immer gleich, monoton und gut kontrollierbar und jederzeit modifizierbar ist. aber wenn man bedenkt, wie langsam und nostalgisch solutio die schwerpunkte setzt und daran arbeitet. man sollte sich schon längst von java8 verabschieden. eine alte version von wiztree (geniales programm, bin einer der offiziellen, vom maintainer höchstpersönlich ausgewählten beta-tester von windirstat, auch ein fabelhaftes programm) ungelöscht auf dem eigenen on-premises server rumliegen lassen finde ich nicht nur höchst fragwürdig, sondern als kolossalen fehler.

    immerhin finde ich den mix von cloud und on-premises als erfrischend interessant. wusste garnicht, wie flexibel ja sogar genial powershell sein kann.

  13. Andreas Möckel sagt:

    Persönlich scheine ich nicht betroffen zu sein, denn ich bin der erste Produktiv-Anwender des Containers. Trotzdem lasse ich mein System noch von meinem Systembetreuer checken.
    Folgendes Skript wurde mir von einem Community-Mitglied zugesandt und wenn ich es richtig deuten kann, sollte, ohne Spuren zu hinterlassen, WizTree installiert werden, eine Analyse durchführen, das Ergebnis in eine Exportdatei packen, diese verschicken und dann wieder vollständig von der Festplatte entfernt werden. Liege ich da richtig?

    function Get-WizTreePath {
    param (
    [Parameter(Mandatory = $false)]
    [switch]$Install
    )

    # Use Charly Server program files directory for portable WizTree
    $charlyServerPath = Join-Path ${env:ProgramFiles} "Charly Server"
    $wizTreePath = Join-Path $charlyServerPath "wiztree\WizTree64.exe"

    if (-not (Test-Path $wizTreePath)) {
    if ($Install) {
    Write-CustomLog "Downloading portable WizTree…" -Level INFO

    # Create WizTree directory
    $wizTreeDir = Split-Path $wizTreePath -Parent
    New-Item -ItemType Directory -Path $wizTreeDir -Force | Out-Null

    # Download portable version
    $portableUrl = "https://diskanalyzer.com/files/wiztree_4_22_portable.zip"
    $zipPath = Join-Path $env:TEMP "wiztree_portable.zip"

    try {
    Start-DownloadFile -Source $portableUrl -Destination $zipPath

    # Extract portable version
    Expand-Archive -Path $zipPath -DestinationPath $wizTreeDir -Force

    if (-not (Test-Path $wizTreePath)) {
    throw "WizTree executable not found after extraction"
    }

    Write-CustomLog "Portable WizTree downloaded successfully" -Level INFO
    }
    catch {
    Write-CustomLog "Failed to download portable WizTree: $_" -Level ERROR
    throw
    }
    finally {
    # Cleanup
    Remove-Item -Path $zipPath -Force -ErrorAction SilentlyContinue
    }
    } else {
    Write-CustomLog "WizTree wont be installed" -LEVEL DEBUG
    return $null
    }
    }

    return $wizTreePath
    }

    function Resolve-SymbolicLink {
    param (
    [string]$Path
    )

    try {
    Write-CustomLog "Attempting to resolve symbolic link: $Path" -Level DEBUG
    $item = Get-Item $Path -Force -ErrorAction Stop

    if ($item.LinkType -eq "SymbolicLink") {
    $target = $item.Target
    Write-CustomLog "Found symlink target: $target" -Level DEBUG

    # Handle array of targets (take first one)
    if ($target -is [array]) {
    $target = $target[0]
    Write-CustomLog "Multiple targets found, using first one: $target" -Level DEBUG
    }

    # Ensure target path is absolute
    if (-not [System.IO.Path]::IsPathRooted($target)) {
    $parentDir = Split-Path -Parent $Path
    $target = Join-Path $parentDir $target
    Write-CustomLog "Converted to absolute path: $target" -Level DEBUG
    }

    return $target
    }

    Write-CustomLog "Path is not a symbolic link: $Path" -Level DEBUG
    return $Path
    }
    catch {
    Write-CustomLog "Error resolving symbolic link $Path`: $_" -Level WARNING
    return $Path
    }
    }
    function Get-WizTreeResolvedPaths {
    param (
    [Parameter(Mandatory = $true)]
    [string]$Path
    )

    Write-CustomLog "Starting WizTree symlink resolution for path: $Path" -Level DEBUG

    $resolvedPaths = @()
    $tempCsvPath = Join-Path ([System.IO.Path]::GetTempPath()) "wiztree_$([Guid]::NewGuid()).csv"

    try {
    # Get WizTree executable path (don't install)
    $programFiles = ${env:ProgramFiles}
    $wizTreePath = Join-Path $programFiles "WizTree\WizTree64.exe"

    if (-not (Test-Path $wizTreePath)) {
    Write-CustomLog "WizTree not found at $wizTreePath" -Level DEBUG
    return $null
    }

    # Build arguments list
    $arguments = @(
    "`"$Path`"" # Source path
    "/export=`"$tempCsvPath`"" # Export path
    "/admin=1" # Run with admin rights
    "/sortby=3" # Sort by modified date
    "/exportallsizes=1" # Export all sizes
    "/exportattributes=1" # Export attributes
    )

    # Run WizTree scan
    $process = Start-Process -FilePath $wizTreePath -ArgumentList $arguments -NoNewWindow -Wait -PassThru
    if ($process.ExitCode -ne 0) {
    throw "WizTree scan failed with exit code: $($process.ExitCode)"
    }

    $csvData = Get-WizTreeCSVData -CSVPath $tempCsvPath
    $sourceDrive = Split-Path -Qualifier $Path

    foreach ($row in $csvData) {
    $filePath = $row.'File Name' # WizTree's first column header
    $attributes = $row.'Attributes'

    if ($attributes -like "*L*") {
    try {
    $target = Resolve-SymbolicLink $filePath
    if (-not [string]::IsNullOrEmpty($target) -and $target -ne $filePath) {
    if (-not [System.IO.Path]::IsPathRooted($target)) {
    $parentDir = Split-Path -Parent $filePath
    $target = Join-Path $parentDir $target
    }

    $targetDrive = Split-Path -Qualifier $target
    if ($targetDrive -and $targetDrive -ne $sourceDrive) {
    $resolvedPaths += @{
    Source = $filePath
    Target = $target
    }
    }
    }
    } catch {
    Write-CustomLog "Error resolving symlink $filePath`: $_" -Level WARNING
    }
    }
    }
    }
    catch {
    Write-CustomLog "Error in WizTree symlink resolution: $_" -Level WARNING
    return $null
    }
    finally {
    if (Test-Path $tempCsvPath) {
    Remove-Item $tempCsvPath -Force
    }
    }

    return $resolvedPaths
    }

    function Get-WizTreeData {
    param (
    [Parameter(Mandatory = $true)]
    [string]$DirectoryPath,

    [Parameter(Mandatory = $false)]
    [switch]$FoldersOnly,

    [Parameter(Mandatory = $false)]
    [switch]$NoRecurse
    )

    try {
    Write-CustomLog "Starting WizTree scan of directory: $DirectoryPath" -Level DEBUG

    # Create temp file for CSV output
    $tempCsvPath = Join-Path ([System.IO.Path]::GetTempPath()) "wiztree_$([Guid]::NewGuid()).csv"

    # Get WizTree executable
    $wizTreePath = Get-WizTreePath

    # Build arguments list
    $arguments = @(
    "`"$DirectoryPath`"" # Source path
    "/export=`"$tempCsvPath`"" # Export path
    "/admin=1" # Run with admin rights
    "/sortby=3" # Sort by modified date
    "/exportalldates=1" # Export all dates
    "/exportallsizes=1" # Export all sizes
    "/exportattributes=1" # Export attributes
    "/exportfolders=1" # Include folders
    )

    if ($FoldersOnly) {
    $arguments += "/exportfiles=0" # Exclude files
    }

    if ($NoRecurse) {
    $arguments += "/exportmaxdepth=1"
    }

    # Run WizTree scan
    $process = Start-Process -FilePath $wizTreePath -ArgumentList $arguments -NoNewWindow -Wait -PassThru
    if ($process.ExitCode -ne 0) {
    throw "WizTree scan failed with exit code: $($process.ExitCode)"
    }

    # Import CSV with proper headers
    $csvData = Import-Csv -Path $tempCsvPath -Header @(
    'FullName',
    'Size',
    'Allocated',
    'Modified',
    'Attributes',
    'FileCount',
    'FolderCount',
    'LastAccess',
    'Created',
    'FolderSize',
    'FolderAllocated',
    'MFTRecordNumber'
    ) | Select-Object -Skip 2 # Skip header rows

    $results = $csvData | ForEach-Object {
    try {
    # Parse and convert fields
    $size = [long]($_.Size -replace '[",]', ")
    $allocated = [long]($_.Allocated -replace '[",]', ")
    $modified = [DateTime]::ParseExact($_.Modified.Trim('"'), 'yyyy.MM.dd HH:mm:ss', [System.Globalization.CultureInfo]::InvariantCulture)
    $fileCount = [int]($_.FileCount -replace '[",]', ")
    $folderCount = [int]($_.FolderCount -replace '[",]', ")

    # Parse dates
    $lastAccessDate = try {
    [DateTime]::ParseExact($_.LastAccess.Trim('"'), 'yyyy.MM.dd HH:mm:ss', [System.Globalization.CultureInfo]::InvariantCulture)
    } catch {
    $modified
    }

    $createdDate = try {
    [DateTime]::ParseExact($_.Created.Trim('"'), 'yyyy.MM.dd HH:mm:ss', [System.Globalization.CultureInfo]::InvariantCulture)
    } catch {
    $modified
    }

    # Parse size fields
    $folderSize = try {
    [long]($_.FolderSize -replace '[",]', ")
    } catch {
    0
    }

    $folderAllocated = try {
    [long]($_.FolderAllocated -replace '[",]', ")
    } catch {
    0
    }

    $attributes = $_.Attributes.Trim('"')
    $attributesInt = [int]$attributes

    [PSCustomObject]@{
    FullName = $_.FullName.Trim('"')
    Size = $size
    Allocated = $allocated
    Modified = $modified
    Created = $createdDate
    LastAccess = $lastAccessDate
    Attributes = $attributes
    FileCount = $fileCount
    FolderCount = $folderCount
    FolderSize = $folderSize
    FolderAllocated = $folderAllocated
    IsDirectory = [bool]($attributesInt -band 16)
    IsSymLink = $false
    IsHidden = [bool]($attributesInt -band 2)
    IsSystem = [bool]($attributesInt -band 4)
    IsReadOnly = [bool]($attributesInt -band 1)
    }
    }
    catch {
    Write-CustomLog "Error processing CSV row: $_" -Level WARNING
    return $null
    }
    } | Where-Object { $null -ne $_ }

    Write-CustomLog "WizTree scan completed. Found $($results.Count) items." -Level DEBUG
    return $results

    } catch {
    Invoke-ErrorHandler -ErrorRecord $_ -CustomMessage "Error in Get-WizTreeData: $_"
    return $null
    } finally {
    if (Test-Path $tempCsvPath) {
    Remove-Item $tempCsvPath -Force
    }
    }
    }

    function Get-WizTreeDirectorySize {
    param (
    [Parameter(Mandatory = $true)]
    [string]$Path
    )

    try {
    Write-CustomLog "Calculating size for directory: $Path" -Level DEBUG

    # Create temp file for CSV output
    $tempCsvPath = Join-Path ([System.IO.Path]::GetTempPath()) "wiztree_size_$([Guid]::NewGuid()).csv"

    try {
    # Get WizTree executable
    $wizTreePath = Get-WizTreePath

    # Build arguments list
    $arguments = @(
    "`"$Path`"" # Source path
    "/export=`"$tempCsvPath`"" # Export path
    "/admin=1" # Run with admin rights
    "/exportformat=3" # CSV format
    "/sortby=1" # Sort by size
    "/exportallsizes=1" # Export all sizes
    )

    # Run WizTree scan
    $process = Start-Process -FilePath $wizTreePath -ArgumentList $arguments -NoNewWindow -Wait -PassThru
    if ($process.ExitCode -ne 0) {
    throw "WizTree scan failed with exit code: $($process.ExitCode)"
    }

    # Skip first line (donation message) and get the first data line
    # Skip header and get first data line
    $csvData = Get-Content $tempCsvPath | Select-Object -Skip 2
    $firstLine = $csvData | Select-Object -First 1

    if ($firstLine) {
    # Split CSV line and get size from second column (index 1)
    $columns = $firstLine -split ','
    # Remove quotes and commas from size value
    $size = [long]($columns[1] -replace '[",]', ")
    Write-CustomLog "Directory size calculation complete using WizTree: $size bytes" -Level DEBUG
    return $size
    } else {
    Write-CustomLog "No size data found in WizTree output, falling back to Get-ChildItem" -Level WARNING
    throw "No WizTree data available"
    }
    }
    catch {
    Write-CustomLog "WizTree scan failed, falling back to Get-ChildItem: $_" -Level WARNING

    # Fallback to Get-ChildItem
    $size = (Get-ChildItem -Path $Path -Recurse -Force -ErrorAction Stop |
    Measure-Object -Property Length -Sum -ErrorAction Stop).Sum

    Write-CustomLog "Directory size calculation complete using Get-ChildItem: $size bytes" -Level DEBUG
    return $size
    }
    finally {
    # Cleanup temp file
    if (Test-Path $tempCsvPath) {
    Remove-Item $tempCsvPath -Force
    }
    }
    }
    catch {
    Write-CustomLog "Error calculating directory size: $_" -Level ERROR
    throw
    }
    }
    function Uninstall-WizTreePortable {
    [CmdletBinding()]
    param()

    try {
    # Get the WizTree installation path
    $charlyServerPath = Join-Path ${env:ProgramFiles} "Charly Server"
    $wizTreeDir = Join-Path $charlyServerPath "wiztree"

    if (Test-Path $wizTreeDir) {
    Write-CustomLog "Removing portable WizTree installation from $wizTreeDir" -Level INFO

    # Remove the entire WizTree directory
    Remove-Item -Path $wizTreeDir -Recurse -Force -ErrorAction Stop

    Write-CustomLog "Portable WizTree uninstalled successfully" -Level INFO
    return $true
    }
    else {
    Write-CustomLog "Portable WizTree not found at $wizTreeDir" -Level INFO
    return $true # Consider it a success if it's already not there
    }
    }
    catch {
    Write-CustomLog "Failed to uninstall portable WizTree: $_" -Level ERROR
    return $false
    }
    }

    function Get-WizTreeCSVData {
    param (
    [Parameter(Mandatory = $true)]
    [string]$CSVPath,

    [Parameter(Mandatory = $false)]
    [switch]$Skip
    )

    Write-CustomLog "Reading WizTree CSV from: $CSVPath" -Level DEBUG

    if (-not (Test-Path $CSVPath)) {
    throw "WizTree CSV file not found at: $CSVPath"
    }

    try {
    Write-CustomLog "CSV file size: $((Get-Item $CSVPath).Length) bytes" -Level DEBUG

    # Read content with UTF8 encoding and BOM detection
    $rawContent = [System.IO.File]::ReadAllText($CSVPath, [System.Text.Encoding]::UTF8)
    $lines = $rawContent -split "`r`n|\n"
    Write-CustomLog "Total lines in CSV: $($lines.Count)" -Level DEBUG

    # Create standardized English header based on position
    $standardHeaders = @(
    'File Name', # Position 0
    'Size', # Position 1
    'Allocated', # Position 2
    'Modified', # Position 3
    'Attributes', # Position 4
    'Files', # Position 5
    'Folders' # Position 6
    )

    # Create a temporary CSV with English headers
    $tempFile = [System.IO.Path]::GetTempFileName()
    $standardHeaders -join ',' | Set-Content $tempFile -Encoding UTF8

    # Add data lines, skipping the first two lines which contain headers
    $startLine = if ($Skip) { 2 } else { 0 }
    $lines[$startLine..($lines.Count-1)] | Where-Object { $_ -match '\S' } | Add-Content $tempFile -Encoding UTF8

    Write-CustomLog "Processing CSV data…" -Level DEBUG
    $startTime = Get-Date

    # Import CSV with standard headers
    $csvData = Import-Csv $tempFile

    # Debug output – first 5 entries
    $endTime = Get-Date
    $duration = ($endTime – $startTime).TotalSeconds
    Write-CustomLog "CSV processing completed in $duration seconds" -Level DEBUG
    Write-CustomLog "Processed $($csvData.Count) entries" -Level DEBUG

    # Cleanup temp file
    Remove-Item $tempFile -Force

    return $csvData
    }
    catch {
    Write-CustomLog "Error parsing WizTree CSV data: $_" -Level ERROR
    throw
    }
    }

    function Get-CharlyWizTreeDataCSVFilePath {
    param (
    [Parameter(Mandatory = $true)]
    [hashtable]$Config,
    [switch]$ForceRefresh
    )

    $charlyPath = Join-Path $global:SolutioPath "client\charly"
    $cacheFile = Join-Path $global:CharlyServerDataPath "wiztree_cache.csv"
    $cacheMetaFile = Join-Path $global:CharlyServerDataPath "wiztree_cache_meta.json"

    # Check if cache exists and is fresh (less than 1 hour old)
    $useCachedData = $false
    if (-not $ForceRefresh -and (Test-Path $cacheFile) -and (Test-Path $cacheMetaFile)) {
    try {
    $meta = Get-Content $cacheMetaFile | ConvertFrom-Json
    $cacheAge = (Get-Date) – [DateTime]::Parse($meta.Timestamp)
    $useCachedData = $cacheAge.TotalHours -lt 1
    }
    catch {
    Write-CustomLog "Error reading cache metadata: $_" -Level WARNING
    $useCachedData = $false
    }
    }

    if (-not $useCachedData) {
    Write-CustomLog "Generating fresh WizTree data for Charly folder…" -Level INFO
    $wizTreePath = Get-WizTreePath

    $process = Start-Process -FilePath $wizTreePath -ArgumentList "`"$charlyPath`"", "/export=`"$cacheFile`"", "/admin", "/sortby=3", "/exportformat=5", "/attrib=1" -NoNewWindow -Wait -PassThru

    if ($process.ExitCode -ne 0) {
    throw "WizTree scan failed with exit code: $($process.ExitCode)"
    }

    # Save metadata
    $meta = @{
    Timestamp = (Get-Date).ToString("o")
    SourcePath = $charlyPath
    }
    $meta | ConvertTo-Json | Set-Content $cacheMetaFile
    }
    else {
    Write-CustomLog "Using cached WizTree data" -Level DEBUG
    }

    if (-not (Test-Path $cacheFile)) {
    throw "WizTree cache file not found at: $cacheFile"
    }

    return $cacheFile
    }

    # SIG # Begin signature block

    • Tomas Jakobs sagt:

      Again, da wird von von https://diskanalyzer.com/ (und noch nicht mal vom eigenen Server!) einfach so eine Datei aus dem Netz herunter geladen und ohne weitere Validierung/Prüfung im Admin-Kontext (!!!) auf dem Server der Kunden (!!!!!) gestartet und installiert!

      HABEN DIE EIGENTLICH LACK GESOFFEN!?!?

      Was, wenn die Domain "abhanden" kommt? Wenn der Dritte (hier die Antibody Software Ltd) gehackt wird oder sich einfach dazu entscheidet, etwas anderes zu machen?

      Als ISB/DSB würde ich da eine Meldung machen.
      Allein nur deshalb, um aus der persönlichen Haftung raus zu sein.

      Ich bezweifele auch sehr stark aufgrund des offenbarten Geschäftsgebahrens, dass da überhaupt eine Lizenzierung vorliegt.

      Hat jemand mal bei Antibody Software Ltd nachgefragt? Denn so einen Schmus wie solutio da macht, das machen nur Kriminelle, die sich eine Lizenzierung sparen wollen und frei von Schmerzen und Rechtsbewusstsein sind.

      • Michael B. sagt:

        Eine US-Behörde schreibt zu "WizTree":
        "Users must ensure their use of this technology/standard is consistent with VA policies and standards, including, but not limited to, VA Handbooks 6102 and 6500; VA Directives 6004, 6513, and 6517; and National Institute of Standards and Technology (NIST) standards, including Federal Information Processing Standards (FIPS). Users must ensure sensitive data is properly protected in compliance with all VA regulations. Prior to use of this technology, users should check with their supervisor, Information Security Officer (ISO), Facility Chief Information Officer (CIO), or local Office of Information and Technology (OI&T) representative to ensure that all actions are consistent with current VA policies and procedures prior to implementation."

        (Quelle: https://www.oit.va.gov/Services/TRM/ToolPage.aspx?tid=13335)

        Der letzte Satz ist ja interessant, aber hierzulande kann man dieses Tool ja so einfach ungefragt einschleusen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Bitte beachtet die Regeln zum Kommentieren im Blog (Erstkommentare und Verlinktes landet in der Moderation, gebe ich alle paar Stunden frei, SEO-Posts/SPAM lösche ich rigoros). Kommentare abseits des Themas bitte unter Diskussion.

Du findest den Blog gut, hast aber Werbung geblockt? Du kannst diesen Blog auch durch eine Spende unterstützen.