Schutz, der nur im Binary steckt, lässt sich nur ändern, wenn sich das Binary ändert. Das heißt: ein Build, ein Release, ein Download und eine Wartezeit, bis Kunden aktualisieren. Bis der letzte von ihnen aktualisiert hat, laufen Ihre alten Regeln bei Ihren Kunden weiter. Taucht ein neues Analysewerkzeug auf oder beginnt ein Schlüssel weitergegeben zu werden, ist ein Release-Zyklus die falsche Zeiteinheit für eine Reaktion.
Dieser Leitfaden erklärt, wie Sie Ihren Softwareschutz aus der Ferne aktualisieren, ohne neu zu bauen. Er behandelt Remote-Einstellungen, serverseitige Variablen, Session Token Enforcement und Auto-Regeln in qPapel Auth. Außerdem zeigt er, wie jede dieser Funktionen es erlaubt, das Verhalten aus dem Dashboard zu ändern, während Ihre Anwendung bereits bei den Kunden im Einsatz ist.
Warum ein neuer Build zu langsam ist
Ein Release-Zyklus ist für Funktionen gebaut, nicht für die Reaktion auf Bedrohungen. Bis eine Änderung programmiert, gebaut, veröffentlicht und installiert ist, ist der Moment, der sie ausgelöst hat, oft schon vorbei. Aus Schutz, der sich nur im Tempo eines Releases ändern kann, ergeben sich vier Probleme.
- Angreifer iterieren im Stundentakt. Ein neues oder umbenanntes Tool kann zwischen Ihren Releases auftauchen, und ein Build, den Sie nächste Woche ausliefern, hilft heute nicht dagegen.
- Nicht alle aktualisieren. Bis der letzte Kunde die neue Version installiert hat, laufen die alten Schutzregeln weiter im Einsatz.
- Fehler sind teuer. Ist eine Regel zu aggressiv und blockiert echte Kunden, ist ein Neubau ein langsamer Weg, sie zurückzunehmen.
- Geheimnisse veralten. Ein Schlüssel oder eine URL, die im Binary eingebettet ist, lässt sich nur austauschen, indem Sie ein neues ausliefern.
Das ist keine Kritik an Builds, die für Funktionen genau das richtige Werkzeug sind. Es ist ein Missverhältnis im Takt: Sicherheit muss im Tempo der Bedrohung reagieren, und die Bedrohung wartet nicht auf Ihr nächstes Release. Die Lösung ist, die Teile, die sich oft ändern, aus dem Binary herauszuhalten, wo Sie sie ganz ohne Release erreichen.
Was Sie in den Remote-Einstellungen ändern können
Remote-Einstellungen verlagern die Schutzrichtlinie vom Client auf den Server. Sie ändern eine Einstellung im Dashboard, der Client übernimmt sie bei seiner nächsten Prüfung und verhält sich anders, ohne neuen Build und ohne Release. Nahezu die gesamte Erkennungslogik, das Steuerungsverhalten und der Systemablauf lassen sich so ändern.
| Einstellung | Was sie bewirkt |
|---|---|
| Anti-VM | Erkennt virtuelle Maschinen, die häufig zur Analyse von Software genutzt werden |
| Integritäts- und CRC32-Prüfungen | Prüft zur Laufzeit, ob die Anwendung nicht verändert wurde |
| Debugger-Sperre | Erkennt einen angehängten Debugger und sperrt die betreffende Lizenz |
| Sitzungssystem | Bindet jeden Lauf an eine Serversitzung mit rotierenden Sitzungsschlüsseln |
| HWID-Sperre | Hält jede Lizenz an das Gerät gebunden, auf dem sie aktiviert wurde |
| Prozess- und Fenstertitel-Sperrlisten | Blockiert bekannte Analysewerkzeuge anhand von Prozess, Fenstertitel oder Klassenname |
| Benutzerdefinierte Variablen | Ändert Werte, die Ihre App liest, zentral |
Sie können eine Regel außerdem auf den Bereich eingrenzen, in dem sie gilt, indem Sie Ziele nach App-Version, Land oder Nutzergruppe festlegen. So erreicht eine Änderung genau die Builds oder Regionen, die Sie meinen, und nicht alle auf einmal. Die punktebasierte Sperr-Engine und die intervallbasierten Prüfungen lassen sich ebenso im Dashboard abstimmen.
01Regel oder Variable ändern
Serverseitig gespeichert, ohne Neubau
02Client meldet sich
Bei der nächsten intervallbasierten Prüfung
03Neue Einstellungen zurückgegeben
Begrenzt auf Version, Land oder Gruppe
04Neues Verhalten angewendet
Kein Release, kein Download
Die Prüfungen laufen außerdem in Intervallen und nicht nur beim Start. So kann sich eine lang laufende Sitzung einer Änderung nicht einfach dadurch entziehen, dass sie geöffnet bleibt. Verschärfen Sie eine Regel mitten am Tag, übernehmen Sitzungen sie bei ihrer nächsten Prüfung und nicht erst beim nächsten Start. Bei Software, die immer läuft, kann genau das den Unterschied machen zwischen sofort handeln und erst nächste Woche.
Serverseitige Variablen: Werte ändern, nicht nur Schalter
Remote-Einstellungen ändern das Verhalten, serverseitige Variablen ändern die Werte, mit denen Ihre App arbeitet. Kryptografische Schlüssel, API-URLs und kritische Konstanten können auf dem Server liegen statt im Binary. Sie werden nur an eine authentifizierte Sitzung ausgeliefert und in den Speicher gestreamt, statt auf die Festplatte geschrieben zu werden. Der Leitfaden Clientseitiger Schutz im Vergleich mit serverseitigen Geheimnissen erklärt, warum dieser Unterschied zählt.
Weil der Wert serverseitig liegt, können Sie ihn zentral ändern. Tauschen Sie einen Schlüssel aus, der möglicherweise offengelegt wurde, richten Sie die App auf einen neuen Endpunkt aus oder passen Sie eine Konstante an. Jeder authentifizierte Client übernimmt dann den neuen Wert bei seiner nächsten Sitzung. Es gibt nichts neu zu bauen und nichts im Download fest eingebacken, das veralten könnte.
Das verändert den Umgang mit Vorfällen. Eine abgeflossene Konstante oder ein offengelegter Endpunkt ist normalerweise ein Notfall: patchen, bauen, veröffentlichen und dann alle zum Update drängen. Liegt der Wert auf dem Server, wird aus demselben Vorfall ein Feld, das Sie einmal bearbeiten. Das Zeitfenster der Offenlegung schließt sich, während sich die Clients melden. Das, was Sie schützen wollten, hätte gar nicht erst im Binary ausgeliefert werden müssen.
So betreiben Sie außerdem Verhalten pro Segment, ohne Ihren Code zu verzweigen. Dieselbe Variable kann je nach App-Version, Land oder Nutzergruppe einen anderen Wert liefern. Eine Beta-Gruppe, ein regionaler Build oder ein einzelner großer Kunde lassen sich so an einer Stelle unterschiedlich konfigurieren, ohne einen separaten Build pflegen zu müssen.
Sitzungen begrenzen und sperren mit Session Token Enforcement
Session Token Enforcement ist eine Fernsteuerung dafür, wie lange eine Sitzung bestehen darf und wo sie laufen darf. In den Remote-Einstellungen legen Sie eine maximale Dauer aktiver Sitzungen fest und sperren Sitzungen an eine IP-Adresse. So kann ein Token nicht von einem Rechner abgegriffen und tagelang anderswo wiederverwendet werden.
Kurzlebige, IP-gebundene Sitzungen machen ein abgefangenes Token deutlich weniger nützlich. Eine Sitzung, die nach einer festen Zeit abläuft und sich nicht auf eine neue Adresse verschieben lässt, ist eine schlechte Sache zum Weitergeben. Außerdem schließt sie eine Lücke, die eine einmalige Lizenzprüfung offen lässt.
Ein Beispiel: Ein neues Tool taucht auf
Fügt man die Teile zusammen, wird ein Szenario, das sonst ein Release kosten würde, zu wenigen Minuten im Dashboard. Angenommen, neben Ihrer Software taucht ein neues Analysewerkzeug auf, unter einem Namen, den Ihre Sperrliste noch nie gesehen hat.
- 01
Erkennen
Das Tool erscheint in Ihren qPAnalyzer-Ereignissen oder in einer Gruppe markierter Sitzungen, noch bevor es sich verbreitet.
- 02
Regel hinzufügen
Fügen Sie seine Prozess- oder Fenstertitel-Signatur der Sperrliste hinzu oder erhöhen Sie die Punktzahl, die sein Verhalten erzielt, direkt in den Remote-Einstellungen.
- 03
Eingrenzen
Richten Sie die Regel nach App-Version, Land oder Nutzergruppe aus, wenn Sie sie zuerst an einem Teil testen möchten, statt bei allen gleichzeitig.
- 04
Wirksam werden lassen
Laufende Clients übernehmen die neue Regel bei ihrer nächsten Prüfung. Kein Build, kein Release und kein Warten, bis Kunden aktualisieren.
Stellt sich die Regel als zu aggressiv heraus und erwischt echte Kunden, ist die Lösung dieselbe Schleife in umgekehrter Richtung: Lockern Sie die Regel im Dashboard, und die nächste Prüfung macht sie rückgängig. Genau diese Umkehrbarkeit macht es sicher, schnell zu reagieren, statt zu warten, bis Sie sich ganz sicher sind. Bei Sicherheitsfragen heißt das meist, zu lange zu warten.
Reaktionen mit Auto-Regeln und der Risiko-Engine automatisieren
Fernänderungen sind am nützlichsten, wenn Sie sie nicht von Hand vornehmen müssen. Die punktebasierte Risiko-Engine verwandelt die Signale, die Ihre App meldet, in eine einzige Zahl, und Sie legen Schwellenwerte darauf fest: warnen, einschränken, beenden oder sperren. Jedes Signal erhöht die Punktzahl, und die Aktion folgt automatisch.
| Aktion | Wann Sie sie einsetzen könnten |
|---|---|
| Warnen | Eine niedrige Punktzahl, die sich zu protokollieren lohnt, aber noch keine Aktion erfordert |
| Einschränken | Begrenzt, was die Sitzung tun kann, während Sie prüfen |
| Beenden | Beendet die Sitzung, sobald die Punktzahl Ihre Grenze überschreitet |
| Sperren | Sperrt die Lizenz vollständig bei einer eindeutigen Bedrohung mit hoher Punktzahl |
Auto-Regeln gehen einen Schritt weiter: Sie legen eine Regel einmal fest, und sie läuft selbstständig. Sobald ihre Bedingung erfüllt ist, wendet sie die von Ihnen gewählte Aktion an. In Kombination mit der punktebasierten Engine kann Ihr Schutz auf ein neues Muster reagieren, sobald es auftaucht, ohne dass Sie ein Dashboard beobachten. Zur Erkennungsseite siehe qPAnalyzer und warum statische Sperrlisten allein nicht ausreichen.
Die punktebasierte Methode ist bei Fehlalarmen bewusst vorsichtig. Statt aufgrund eines einzelnen Signals zu sperren, was einen gewöhnlichen Nutzer bestraft, dessen Setup zufällig ungewöhnlich aussieht, sammelt sie Belege und handelt erst, wenn die Summe eine Grenze überschreitet, die Sie festgelegt haben. Sie bestimmen, wie vorsichtig diese Grenze ist. Außerdem können Sie eine mildere Aktion wählen, also warnen oder einschränken, während Sie beobachten, wie sich eine neue Regel verhält, bevor Sie je eine Sperre zulassen.
Verwaltung im Dashboard oder über einen Discord-Bot
Das alles verwalten Sie im PapelShip-Dashboard. Auch der Discord-Bot von qPapel kann das System verwalten, und zwar über eine berechtigungsbasierte Struktur. Für Teams und Communities, die ohnehin in Discord arbeiten, heißt das: Sie ändern eine Regel, prüfen eine Lizenz oder reagieren auf eine Warnung, ohne den Chat zu verlassen. Wenn Sie außerdem beim Kauf Rollen vergeben, kombinieren Sie das mit Discord-Rollen für digitale Produkte.
Die berechtigungsbasierte Struktur zählt, sobald mehr als eine Person beteiligt ist. Sie können einen Support-Kollegen eine Lizenz prüfen oder über Discord einen Reset auslösen lassen, ohne ihm die Kontrolle über Ihre Schutzrichtlinie zu übergeben. So erledigen die Menschen, die den Kunden am nächsten sind, die Routinefälle, während die Einstellungen, die bestimmen, wie sich Ihre Software verteidigt, bei Ihnen bleiben.
Häufig gestellte Fragen
Reagieren Sie im Tempo der Bedrohung
Der Sinn der Fernsteuerung ist einfach: Ihre Verteidigung soll sich so schnell ändern wie die Bedrohungen, nicht so schnell wie Ihr Release-Zyklus. Mit Remote-Einstellungen, serverseitigen Variablen, Sitzungsdurchsetzung und Auto-Regeln liegt die Schutzrichtlinie auf dem Server. Dort können Sie sie in Sekunden ändern und selbstständig wirken lassen. Wie sich diese Bausteine in das größere Bild fügen, zeigt der Software-Schutz-Stack für C++ und C#.
Fangen Sie klein an, wenn das Konzept neu für Sie ist. Verlagern Sie eine Sperrliste und eine Variable vom Client, prüfen Sie, dass eine Änderung eine laufende Sitzung bei ihrer nächsten Prüfung erreicht, und ergänzen Sie dann Sitzungsgrenzen und eine erste Auto-Regel, sobald Sie dem Ablauf vertrauen. Ziel ist nicht, alles auf einmal zu konfigurieren. Ziel ist, bei jeder Veränderung der Bedrohung nicht mehr auf ein Release warten zu müssen.
Ein Build, das Sie letzten Monat ausgeliefert haben, bleibt so, wie es war. Eine Richtlinie, die Sie im Dashboard steuern, wandert mit dem Problem mit. Halten Sie die Teile, die oft geändert werden müssen, auf dem Server. Dann kann Ihr Release-Zyklus wieder ganz den Funktionen gehören.
qPapel-Security-Team
Lizenzierung und Softwareschutz