Hallo!
Ich hoffe, das hier ist das richtige Board für mein Anliegen.
Ich versuche mich an einem Dienst unter dotnet core 3.1 mit u. a. der Klasse BackgroundService. Man findet dazu genug Hilfe im Internet, so dass die Implementierung keine großen Probleme bereitet.
Nun brauche ich einen Denkanstoß für folgende Problemstellung: Der Dienst sollte möglichst resistent gegen Versuche, ihn gewaltig zu beenden. Das "normale" Beenden mittels sc.exe oder über den Dienststeuerungsmanager services.msc dürfte keine Probleme bereiten, denn das kann man leicht abfangen, um darauf zu reagieren.
Ich kenne das von z. B. Virenscannern, die ihre Prozesse mehr oder weniger gut schützen – da ist es schwer, diese mit normalen Mitteln abzuschießen. So was ähnliches würde ich gerne implementieren. Wenn der Dienst unter Windows läuft, könnte dieser in einem Kontext laufen, der ihn vor Bösewichten schützt. Da ich mich jedoch hier nicht wirklich auskenne, frage ich euch nach geeigneten Möglichkeiten, bevor ich unwissentlich einen falschen Ansatz wähle.
Schonmal lieben Dank und ein schönes Wochenende!
René
Ein beenden über den Task Manager wirst du kaum abfangen können.
Ob es durch Windows Verwaltung, oder ob es einen Windows Hook gibt, der beim beenden eines Prozesses ausgelöst wird.
Was glaube ich ganz gängig ist wäre ein zweites Programm, welches parallel läuft. Deine beiden Programme müssten sich dann gegenseitig überwachen.
Vermutlich ist es aber sinnvoller bei passender Authorisierung anzusetzen. Ohne Adminrechte kann ein User einen als Admin gestarteten Prozess nicht beenden.
Danke für die schnelle Antwort! Eine passende Autorisierung ist bereits im Entwurf vorgesehen. Der Dienst läuft in einem Kontext, der normale Anwender das Beenden nicht erlaubt.
Nun kann aber jemand (Anwender bzw. Programm) mit Administratorrechten das Programm killen – genauso kann auch der Überwachungsdienst gekillt werden.
Ich versuche, mich schlau zu machen, wie das Killen abläuft (z. B. vom Taskmanager aus). Ehrlich gesagt, habe ich keine Ahnung (nie gebraucht/benutzt), ob die Anwendung oder sonst wer benachrichtigt wird, das Windows gerade dabei ist, dich aus dem Speicher zu befördern.
Es wäre schön, wenn jemand, der bereits diese Anforderung hatte, darüber was erzählen würde.
Nochmals vielen Dank!
René
Warum glaubst du denn deine Anforderung so umsetzen zu müssen? Ich persönlich halte nichts von Software, welche sich nicht beenden lässt... Die einzige Ausnahme hier ist der Virenscanner
Es handelt sich um einen Überwachungsdienst, der nicht beendet werden darf. In so einem Fall ist es berechtigt, die Hürden möglichst groß zu machen, damit er nicht von jedem beendet werden kann. Ob das unschön ist oder es einem nicht gefällt, ist es zweitrangig. Das sind nun die umzusetzenden Anforderungen – ich kann sie nicht ändern.
Wie würdest du eine solche Anforderung programmiertechnisch erfüllen?
René
Ich würde mir nicht die Arbeit machen dies zu verhindern - ich würde 2 Service machen welche sich gegenseitig überwachen. Sollte einer davon beendet werden, startet der Überwacher den überwachten Service jeweils neu.
Ich kann dir Argumentation verstehen, aber auch zwei sich überwachende Services verschieben das Problem ja nur, wenn du der Authorisierung nicht traust.
Denn auch zwei Services kann ich nahezu gleichzeitig mit Adminrechten beenden.
Es bleibt dir also nur entweder auf die Authorisierung zu vertrauen oder ein Workaround zu bauen, um den du vermutlich wieder einen Workaround bauen musst.
Ich glaube nicht, dass Windows sowas erlaubt, das würde mMn. auch stark in Richtung Malware gehen.
Bau zwei Dienste, die sich gegenseitig überwachen und vertrau darauf, dass jemand mit Admin-Rechten nicht einfach Blödsinn macht.
Dieser Admin hat dann vermutlich den Dienst oder ein dazu gehörendes Programm überhaupt erst installiert, dann solltest Du ihn über diese Dienste und deren Wichtigkeit informieren.
Wer danach trotzdem die Dienste beendet, ist selber schuld und hat sich möglicherweise auch etwas dabei gedacht.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
Stefan, das eine schließt aber das andere nicht aus. Allerdings hat auch die gegenseitige Überwachung einen wunden Punkt, wie andere hier anmerken: Sofern man die notwendigen Rechte besitzt, kann man ein Programm schreiben, das beide Dienste gleichzeitig killt. Sicher gehört kriminelle Energie dazu und man kann nicht alles ausschließen, man sollte aber die Augen nicht verschließen und hoffen, dass es nie dazu kommen wird.
Die gegenseitige Überwachung nenne ich "Security by Obscurity", denn wenn jemand es geschafft hat, sich Administratorrechte zu verschaffen, um den einen Dienst zu killen, braucht er nicht viel, den anderen zu entdecken und ebenfalls zu killen – er muss nur erkennen, dass es einen weiteren Dienst gibt.
Wie würdet ihr die gegenseitige Überwachung implementieren?
Ich habe ein wenig gesucht (gegoogelt), ob es möglich ist, einen Kill programmtechnisch zu erkennen und sich da einzuklinken, bisher fand ich aber nichts. Auf der anderen Seite sendet jemand diese Anforderung an Windows und Windows wirft das Programm vom Speicher. Gäbe es vielleicht eine Möglichkeit, sich dazwischen zu legen bzw. irgend einen Handler bzw. ein Ereignis oder was auch immer zu abonnieren/abzufange, um das zu erkennen?
Darüber hinaus habe ich einen weiteren wunden Punkt bei Verwendung von dotnet core gefunden. Diesen möchte ich aber weiter analysieren, bevor ich ihn hier bekanntgebe.
René
Hallo pollito,
ich glaube dir nicht das du gegoogelt hast sonst würdest du gefunden haben das Windows immer Services und Prozesse abschiessen kann. Wenn du gegoogelt hättest dann hättest du gefinden, dass das nicht geht sondern man höchstens Prozesse als kritisch definieren kann sodass ein einfacher Anwender den Prozess ohne Adminrechte nicht mehr abschiessen kann. Mit Adminrechten geht alles.
Ich glaube dir auch nicht dass du einen Service hast der nicht abschiessbar sein darf oder du in dotnet core eine Lücke gefunden hast.
Das ist kein Vorwurf als lügner das sind fakten und ich kann nichts dafür das dir die antwort nicht gefällt aber der wahrheit entspricht.
Dein Wunsch ist mit einem richtigen Windows nicht umsetzbar weil das Malware Tür und Tor öffnen würdest.
Windows und Admins können immer Prozesse beenden ob du das willst oder nicht.
Mit richtigem Googel wüsstest du das.
Du kannst auf die Beendigung eines Prozesses warten.
Mach also einen Thread mit einer Endlosschleife auf, der auf die Beendigung des jeweils anderen Prozesses wartet und ihn dann erneut startet.
Und bei Windows ist der Benutzer König.
Wenn Du verhindern willst, dass man dein Programm killt, musst Du den Benutzer soweit einschränken, dass er nie in die Lage kommen kann, ihn zu killen.
Ich glaube nicht, dass Microsoft eine offizielle Möglichkeit einbauen, mit der man das Abschießen eines Prozesses verhindern kann, denn das könnte man genauso gut auch negativ nutzen. Das meine ich damit: Es würde an Malware grenzen.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
@MartinF
Mag zwar richtig sein, man sollte aber auch vernüftig diskutieren können.
Du hast dich Heute erst angemeldet, und haust schon solche Kommentare raus.
Keine Ahnung in welchem Forum du bisher aktiv warst, aber hier solltest du einen ordentlichen Umgang mit den Hilfesuchenden pflegen.
Wenn du nur Unterstellungen als Antworten liefern kannst, dann bist du hier definitiv an der falschen Adressen.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Du kannst auf die Beendigung eines Prozesses warten.
Mach also einen Thread mit einer Endlosschleife auf, der auf die Beendigung des jeweils anderen Prozesses wartet und ihn dann erneut startet.
OK, ähnlich hätte ich das realisiert. Allerdings sollten sich beide Prozesse gegenseitig überwachen; denke ich. Nicht dass man erst den Überwachungsprozess killt...
Und bei Windows ist der Benutzer König.
Wenn Du verhindern willst, dass man dein Programm killt, musst Du den Benutzer soweit einschränken, dass er nie in die Lage kommen kann, ihn zu killen.
Gut, das ist bei normalen Usern der Fall. Mit Administratoren sieht es anders aus. Aber das liegt in der Natur der Sache.
Ich glaube nicht, dass Microsoft eine offizielle Möglichkeit einbauen, mit der man das Abschießen eines Prozesses verhindern kann, denn das könnte man genauso gut auch negativ nutzen. Das meine ich damit: Es würde an Malware grenzen.
Ja, da hast du Recht. Ich frage trotzdem, wenn ich das nicht weiß. Ich möchte mich nicht auf Vermutungen stützen.
@MartinF
Mag zwar richtig sein, man sollte aber auch vernüftig diskutieren können.
Du hast dich Heute erst angemeldet, und haust schon solche Kommentare raus.
Keine Ahnung in welchem Forum du bisher aktiv warst, aber hier solltest du einen ordentlichen Umgang mit den Hilfesuchenden pflegen.Wenn du nur Unterstellungen als Antworten liefern kannst, dann bist du hier definitiv an der falschen Adressen.
T-Virus
Danke! So kann man jegliche Diskussion zerstören – hier geht es aber um Technik, nicht nur für die Teilnehmenden sondern auch für die Mitlesenden. Wenn jemand dann das Thema verunreinigt, ist es für die Tonne.
René
Als Info:
Für AV-Programme (etc.) gibt es seit Win 8.1 extra geschützte Dienste: Protecting Anti-Malware Services.
Danke! Habe es gerade durchgelesen und es ist das, wonach ich suchte. Allerdings muss ich jetzt nach der Zertifikatsverwaltung/-erstellung weiterforschen. Ein spannendes Thema und wie es sich darstellt, ein anspruchsvolles.
Aus dem Text:
Updates and servicing
After the anti-malware service is launched as protected, other non-protected processes (and even admins) aren't able to stop the service. In the case of updates to the service binaries, the anti-malware service needs to receive a callback from the installer to stop itself so that it can be serviced. After the service is stopped, the anti-malware installer can perform upgrades and then follow the steps described above in the Registering the service and Starting the service as protected sections to register the certificate and start the service as protected.
Note that the service should ensure that only trusted callers can stop the service. Allowing untrusted callers to do so defeats the purpose of protecting the service.
Hinweis:
Hinweis auf Vorwürfe entfernt, um Thema nicht zu verwässern.
Lieben Dank für deinen Beitrag!
Schönen Sonntag!
René
Du lässt das Forum für dich googeln weil du unfahig bist und akzeptierst antworten nicht willst das System übergehen, behauptet du findest Lücken aber sagst dazu nichts weil es unwahr ist und dabei bist du derjenige der andere beleidigt wie man hier sieht xD xD Schmock!
Danke! Habe es gerade durchgelesen und es ist das, wonach ich suchte. Allerdings muss ich jetzt nach der Zertifikatsverwaltung/-erstellung weiterforschen. Ein spannendes Thema und wie es sich darstellt, ein anspruchsvolles.
Du hast gelesen wofür diese Art Service von Microsoft gedacht/eingeführt wurden?
Und dann kommt ein pubertierender Bubi, der sagt, das ginge nicht und du seist ein Lügner.
Und schon wurde wieder ein Täter zum Opfer gemacht - mit diesem Satz zeigt du uns allen, dass du keinen Deut reifer/besser bist!
Nur mal interessehalber, was wird das für ein Projekt? Ich verstehe nicht ganz wieso man Nutzer Adminrechte gibt aber sowas dann so stark kontrollieren will. Hört sich ehr nach so einem Schul-PC Schutzprogramm oder Mitarbeiterüberwachung an 😄
Sicher gehört kriminelle Energie dazu
Also ich sehe die kriminelle Energie eher bei demjenigen, der ein Überwachungsprogramm (offenbar) gegen den Willen des Benutzers installiert, und dann verhindern will, daß der Benutzer es beenden kann. Nach allem, was du hier dazu schreibst, solltest du davon ausgehen, daß das nicht legal ist.
Die gegenseitige Überwachung nenne ich "Security by Obscurity"
Security through Obscurity ist seit über 150 Jahren widerlegt. Abgesehen davon ist Security wirklich etwas anderes, als zu verhindern, daß ein Programm beendet werden kann.
PS: Du bist noch nicht so lange im Internet unterwegs, oder? Sonst wüßtest du, daß man einen Troll einfach ignorieren kann. Aber so wie du reagierst, zeigst du nur, daß die Kritik nicht ganz unberechtigt war. Und du hast dich nicht nur auf das Niveau des Trolls begeben, sondern noch einige Ebenen darunter.
Der Troll ist inzwischen gesperrt, und wenn du die Sache nicht auf sich beruhen läßt, dann wird dieser Thread auch zugemacht. Die Admins haben am Wochenende auch andere Sachen zu tun.
Weeks of programming can save you hours of planning
By the way:
Angenommen, dieses Programm verfolgt ehrbare Absichten und soll das System wirklich sicherer machen, so stellt es aber automatisch auch ein Sicherheitsrisiko dar.
Das ist auch das Risiko bei den meisten Virenscannern: Viele Viren nutzen Lücken in Virenscannern aus und erreichen so gefährliche Rechte und Windows schützt sie genauso wie den Virenscanner.
Aus dem Grund würde ich dem Benutzer immer die Wahl lassen, ob er ein Programm entfernen möchte.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
Leider darf ich nicht viel erzählen. Es geht in erster Linie um eine Software, die Bereiche eines Datenträgers überwacht und protokolliert. Die Software gibt es schon in einer ersten Vorversion – sie sollte aber möglichst robust sein gegen Versuche, sie zu beenden – auch von einem Admin. Th69 hat mir einen guten Hinweis gegeben, wie man das angehen kann. Nun muss ich evaluieren, ob dieser Mehraufwand berechtigt ist.
René
Und schon wurde wieder ein Täter zum Opfer gemacht - mit diesem Satz zeigt du uns allen, dass du keinen Deut reifer/besser bist!
Ich habe meine Reaktionen entfernt und gut ist. Ich hatte ein technisches Problem, welches ich mit eurer Hilfe zu lösen versuche. Grundlose persönliche Querschüsse müssen wirklich nicht sein – das hat mich auf die Palme gebracht.
Im Übrigen und nur als Info: Ich bat darum, die themenfremden Beiträge zu löschen, auch meine. Nun habe ich selbst meine gelöscht (Text).
Ich hoffe nun, wir kehren zum Thema zurück.
René
By the way:
Angenommen, dieses Programm verfolgt ehrbare Absichten und soll das System wirklich sicherer machen, so stellt es aber automatisch auch ein Sicherheitsrisiko dar.
Das ist auch das Risiko bei den meisten Virenscannern: Viele Viren nutzen Lücken in Virenscannern aus und erreichen so gefährliche Rechte und Windows schützt sie genauso wie den Virenscanner.
Aus dem Grund würde ich dem Benutzer immer die Wahl lassen, ob er ein Programm entfernen möchte.
Es ist richtig. Das Programm wird jedoch im Unternehmensbereich eingesetzt und da hat der Benutzer keine administrativen Berechtigungen. Aber auch Admins sollten nicht so einfach das Programm beenden/deinstallieren können. Ob wir das schlussendlich so weit treiben, wird gerade evaluiert, denn das ist ein größerer Aufwand, der zwar zur Sicherheit beitragen kann, an der Funktionsweise des Programms jedoch nichts ändert – es muss sich auch monetär lohnen.
René