2009-07-16 15 views
2

Die grundlegende Frage
Wie weiß ich, geschickt zu authentifizieren, dass es meine öffentlich zugänglich ist (Client) Anwendung, die meine Dienstnachricht sendet? Woher weiß ich, dass es nicht nur eine andere Anwendung ist, die sich als meine Anwendung ausgibt?Wie Client-Anwendung für das Vertrauen von Nachrichten von ihm

Einige Hintergrund
Derzeit protokollieren wir alle Fehler, die auf unseren Webseiten über log4net und WCF in einer Datenbank auftreten. Dies funktioniert gut, da der Web-Server (Zugriff vom Web - teilweise vertrauenswürdig) über eine vertrauenswürdige Beziehung Fehler an den WCF-Dienst meldet, der auf dem Anwendungsserver ausgeführt wird (vom Web aus nicht erreichbar - vertrauenswürdig). Wir wissen daher, dass alle Fehlerprotokolle echt sind und wir sie untersuchen müssen.

Mit unseren neuen Websites planen wir, SilverLight zu nutzen, um die Dinge ein wenig aufzupeppen. Das Problem, mit dem wir konfrontiert sind, besteht darin, Fehler von der SilverLight-Anwendung, die auf dem Web-Consumer-PC (Nicht vertrauenswürdig) läuft, an unseren Anwendungsserver zu melden (vom Web aus nicht erreichbar - vertrauenswürdig).

Wir können das Problem der Unzugänglichkeit des Anwendungsservers lösen, indem wir den Client über eine Service-Fassade auf dem Webserver kommunizieren lassen, so dass es keine Sorgen macht. Das Problem tritt auf, wenn wir sicherstellen müssen, dass die Anwendung, die die Nachrichten sendet, wirklich unsere Anwendung ist und nicht nur ein Imitator.

Einige Gedanken
Der Code wird in C# geschrieben werden und in einer Silverlight Anwendung ausgeführt werden, die lokal auf dem Client-PC läuft, so dass wir nicht garantiert werden kann, dass es dekompilierten und verwendet werden, werden nicht an Senden Sie gefälschte Nachrichten an unseren Service.

Das obige bedeutet, dass wir die herkömmliche symmetrische Verschlüsselung nicht verwenden können, da wir unseren privaten Schlüssel nicht in der Anwendung speichern können (er kann dekompiliert werden). Ebenso können wir keine asymmetrische Verschlüsselung verwenden, da sie einfach nur angenommen werden könnte (der Angreifer könnte einfach Nachrichten mit dem gespeicherten öffentlichen Schlüssel signieren und senden - die Nachrichten würden echt aussehen)

Bei dieser Anwendung gibt es keinen Benutzer Authentifizierung, also können wir das nicht nutzen, um uns Vertrauen zu schenken.

Ja, ich weiß, dass dies als die Daten mit den Fehlerprotokolle sind besser geschützt eher bizzare ist zeigt die Anwendung, aber es ist der Fall :)

Irgendwelche Gedanken oder Hilfe wäre sehr dankbar!

Antwort

3

Unmöglich.

Sie können Benutzer authentifizieren, aber nicht die Anwendung.

Nehmen wir an, Sie entscheiden sich, die Anwendung digital zu signieren. Diese Signatur wird dann zur Laufzeit von Ihrer Client-Anwendung gelesen und überprüft ihre eigenen ausführbaren Binärdateien auf diese Signatur. Es gibt nichts, was den Gegner daran hindert, diesen Scheck einfach aus seiner Anwendung zu entfernen.

Selbst wenn Sie es nahezu unmöglich machen, Ihre Anwendung zurückzuentwickeln, könnte der Angreifer immer den Kommunikationskanal ansehen und einen Betrüger schreiben, der von Ihrem Client zu Ihrem Server nicht unterscheidbar ist.

Das einzige, was Sie tun können, ist die Aktionen auf dem Server gegen eine Benutzeridentität zu validieren.

+0

Dies ist fast der Punkt, den ich erreicht habe, aber das scheint wie ein gemeinsames Softwareproblem. Ich hoffe auf weitere Ideen, die mich auf den richtigen (oder besseren) Weg schicken. – FryHard

+0

Es ist eine sehr schlechte Idee, "unmöglich" zu sagen, wenn es um Technologie geht. Im Allgemeinen hat jemand es bereits getan, als jemand anderes "unmöglich" sagt ... –

+0

Ich sehe das nicht als ein Problem der Technologie. Es ist ein Problem unvollständiger Informationen. Der Server erhält Anweisungen von einer nicht vertrauenswürdigen Quelle. Diese Quelle kann nur vertrauenswürdig sein, wenn Informationen von einem vertrauenswürdigen Kanal bereitgestellt werden. –

1

Vermutlich erstellt Ihr Server die Webseite, auf der sich die Silverlight-Anwendung befindet. Sie könnten einen kurzlebigen temporären "Schlüssel" erstellen, den nur diese Webseite enthält. Wenn die Silverlight-App gestartet wird, liest sie diese Taste und verwendet sie. Da der Server selbst über eine ständig wechselnde, sehr kurze Liste zulässiger Schlüssel verfügt, können Sie sicher sein, dass nur Ihre App auf Ihre Dienste zugreift.

+0

Woher weiß der Server, für welche Clients Schlüssel sicher sind? –

+0

Er hat dies bereits festgestellt, indem er eine Silverlight-Anwendung erstellt hat, die in eine Webseite eingebettet ist, die von einem Webserver gehostet wird. Welche Browser auf die Seite zugreifen können, sind die gültigen Clients. –

+0

Ich mag diese Idee John, aber beim Austesten sieht es so aus, als ob die Parameter, die an die SilverLight-Anwendung übergeben werden, im Klartext übergeben werden. Was würde verhindern, dass jemand den Ladevorgang der SilverLight-Anwendung verhindert und dann den einmal ausgelösten kurzlebigen Schlüssel verwendet, um Zugang zu den Diensten zu erhalten? – FryHard

1

Der beste Rat für Sie in dieser Angelegenheit ist, einen Sicherheitsexperten zu engagieren, um Ihnen zu helfen. Dies ist kein einzigartiges oder ungewöhnliches Problem - betrachte jedes Spiel (wie zum Beispiel WoW), das versucht herauszufinden, ob es mit einem echten Client oder einem betrügerischen Client spricht. Selbst mit sehr viel Aufwand (Blizzard Warden nachschlagen, ich werde es hier nicht verlinken), haben sie immer noch Probleme. Das Problem läuft darauf hinaus, wie viel Zeit und Aufwand Ihr Angreifer investieren wird, um Ihre Versuche, ihn hart zu machen, zu vereiteln. Stellen Sie sicher, dass Sie alles auf der Serverseite validieren. :)