Laden...

Dienst vor Beendigung schützen (Windows Worker Service unter dotnet core 3.1)

Erstellt von pollito vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.594 Views
pollito Themenstarter:in
314 Beiträge seit 2010
vor 3 Jahren
Dienst vor Beendigung schützen (Windows Worker Service unter dotnet core 3.1)

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é

P
441 Beiträge seit 2014
vor 3 Jahren

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.

pollito Themenstarter:in
314 Beiträge seit 2010
vor 3 Jahren

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é

463 Beiträge seit 2009
vor 3 Jahren

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

pollito Themenstarter:in
314 Beiträge seit 2010
vor 3 Jahren

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é

463 Beiträge seit 2009
vor 3 Jahren

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.

P
441 Beiträge seit 2014
vor 3 Jahren

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.

2.078 Beiträge seit 2012
vor 3 Jahren

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.

pollito Themenstarter:in
314 Beiträge seit 2010
vor 3 Jahren

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é

M
4 Beiträge seit 2020
vor 3 Jahren

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.

pollito Themenstarter:in
314 Beiträge seit 2010
vor 3 Jahren

Hinweis:

Antwort auf Vorwürfe entfernt, um Thema nicht zu verwässern.

René

M
4 Beiträge seit 2020
vor 3 Jahren

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.

2.078 Beiträge seit 2012
vor 3 Jahren

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.

T
2.219 Beiträge seit 2008
vor 3 Jahren

@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.

pollito Themenstarter:in
314 Beiträge seit 2010
vor 3 Jahren

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é

pollito Themenstarter:in
314 Beiträge seit 2010
vor 3 Jahren

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é

M
4 Beiträge seit 2020
vor 3 Jahren

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!

463 Beiträge seit 2009
vor 3 Jahren

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!

309 Beiträge seit 2020
vor 3 Jahren

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 😄

5.657 Beiträge seit 2006
vor 3 Jahren

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

2.078 Beiträge seit 2012
vor 3 Jahren

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.

pollito Themenstarter:in
314 Beiträge seit 2010
vor 3 Jahren

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é

pollito Themenstarter:in
314 Beiträge seit 2010
vor 3 Jahren

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é

pollito Themenstarter:in
314 Beiträge seit 2010
vor 3 Jahren

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é