Sicherheitsverfahren für das Erstellen von Windows Store-Apps

Entwicklerblog für Windows 8-Apps

Ein Einblick in die Entwicklung von Apps im Metro-Stil – präsentiert vom Windows 8-Entwicklerteam

Sicherheitsverfahren für das Erstellen von Windows Store-Apps

Rate This
  • Comments 0

Eines unserer vorrangigsten Ziele bei der Plattform für Windows Store-Apps bestand darin, sicherzustellen, das Kunden ihre Apps vertrauen können. Wir möchten, dass Kunden sich darauf verlassen können, dass ihre Apps erwartungsgemäß funktionieren, problemlos mit anderen Apps zusammenarbeiten und sich sauber deinstallieren lassen. Es gibt zahlreiche Möglichkeiten, Vertrauen zu schaffen, vom Windows Store-Onboarding über eine problemlose Installation sowie Deinstallation und Ihrem Einverständnis zur Verwendung der Standortbestimmung und der Webcam bis zum Zertifizierungskit für Windows-Apps, mit Sie testen können, ob Ihre App die Kriterien für das Einreichen beim Windows Store erfüllt. Kundenvertrauen beruht nicht auf einer einzelnen Funktion, einem einzelnen Vorgang oder einer einzelnen Qualität. Kundenvertrauen beruht auf verschiedenen Faktoren im gesamten Prozess. Wir haben unseren Ansatz im Beitrag Bereitstellen von zuverlässigen und vertrauenswürdigen Apps ausführlich erläutert.

Sprechen wir nun speziell über geschützte und sichere Apps sowie darüber, wie Sie Kundenvertrauen in Ihre Apps gewährleisten können. Moderne Apps enthalten häufig wichtige Kundendaten, von finanziellen Unterlagen bis zu unersetzlichen Fotos. Manche Kunden verdienen mit diesen Daten ihren Lebensunterhalt. Daher müssen sie sich darauf verlassen können, dass diese Daten in Apps sicher sind. Auch bei Apps, die kaum Daten enthalten, erwarten Kunden, dass diese wie vorgesehen funktionieren, ohne andere Apps zu beeinträchtigen.

Hinsichtlich Kundenvertrauen und Kundenzufriedenheit ist es unerlässlich, dass Sie Sicherheitsverfahren in Ihre App integrieren. Zum Glück sind die allgemeinen Sicherheitsverfahren unkompliziert und es ist nicht schwierig, App mit Sicherheitsmaßnahmen zu versehen. Zusätzlich werden Apps im Kontext eines eindeutigen App-Containers ausgeführt, der die App und deren Daten von anderen Apps isoliert. App-Container stellen eine dedizierte Umgebung für Ihre App bereit, einschließlich eines eigenen Speichers für Daten und Einstellungen.

Windows 8 und Visual Studio 2012 stellen eine Reihe von APIs, Steuerelementen und Tools zur Verfügung, um mögliche Sicherheitslücken in Apps zu verhindern und häufige Sicherheitsprobleme zu entschärfen. Keine Plattform ist perfekt, doch sind wir zuversichtlich, dass die Kombination dieser Maßnahmen es Ihnen ermöglicht, großartige Apps zu entwickeln. Außerdem werden wir die Plattform mit der Zeit weiter verbessern. In diesem Beitrag behandeln wir eine einige Tipps und Verbesserungsempfehlungen, dank derer Sie Ihren Kunden sicherere und besser geschützte Apps zur Verfügung stellen können.

Los geht's!

Tipp 1 – Kompilieren Sie Apps mit Visual Studio

Ab Windows 8 sind zahlreiche Sicherheitsverfahren standardmäßig enthalten. Sie müssen Ihre App lediglich mit Visual Studio 2012 kompilieren. Wenn Sie mit Visual Studio 2012 kompilieren, werden Sicherheitstechnologien, die Apps vor häufigen Angriffen schützen (/GS, ASLR, DEP und SeHOP) standardmäßig für den Code Ihrer App aktiviert.

Tipp 2 – Verzichten Sie auf unnötige App-Funktionen

Apps können jeweils Funktionen deklarieren, durch die festlegt wird, wie die App mit verschiedenen Ressourcen und Geräten interagieren kann. Es ist wichtig, auf unnötige App-Funktion zu verzichten, sodass Ihre App mit so wenig Berechtigungen wie möglich ausgeführt werden kann. Der Verzicht auf unnötige Funktionen macht Apps weniger anfällig für Angriffe.

Beispielsweise ermöglicht die Funktion für Heim- oder Arbeitsplatznetzwerke Apps den Zugriff auf Computer in einem lokalen Netzwerk, z. B. für Peer-to-Peer-Spiele. Diese Funktion ist zudem nützlich für Vorabtests mit einem lokalen Dienst. Dennoch ist sie aber häufig unnötig und macht Apps anfällig für Angriffe über ein lokales, nicht vertrauenswürdiges Netzwerk, z. B. einen WLAN-Zugriffspunkt in einem Café oder Flughafen. Sie sollten diese Funktion möglichst deaktivieren und für Tests stattdessen einen Remoteserver verwenden. Dies hat den zusätzlichen Vorteil, dass die Tests hierbei unter realistischen Bedingungen erfolgen. Entfernen Sie die Funktion für Heim- oder Arbeitsplatznetzwerke ggf., bevor Sie die App zur Store-Zertifizierung einreichen.

Funktionen

Eine App mit Internetzugriff, die auf unnötige Funktionen verzichtet

Beachten Sie, dass die Funktionen für die Unternehmensauthentifizierung, Freigegebene Benutzerzertifikate und die Dokumentbibliothek für den Unternehmenszugriff und eingebettete Dokumente vorgesehen sind (z. B. wenn beim Öffnen eines Dokuments auch ein darin enthaltenes Dokument geöffnet werden muss). Es wird ein Unternehmenskonto benötigt wird, um eine App mit diesen Funktionen beim Windows Store einzureichen. Diese Funktionen sind für die meisten Apps in der Regel nicht erforderlich. Sie werden lediglich von Unternehmens-Apps benötigt, die auf Unternehmensressourcen zugreifen müssen. Die Funktionen sind stark reguliert und deren Verwendung erfordert eine zusätzliche Überprüfung im Windows Store.

Tipp 3 – Verwenden Sie die Dateiauswahl anstelle von Bibliotheksfunktionen

Aufbauend auf Tipp 2 zum Verzicht auf nicht benötigte Funktionen können Sie häufig sämtliche dateibasierten Funktionen deaktivieren. Ermöglichen Sie Benutzern, Dateien mithilfe der Dateiauswahl auszuwählen, wenn Ihre App lediglich auf einige wenige Dateien zugreifen muss. Die Dateiauswahl vereinfacht den Code Ihrer App und Benutzer können ohne zusätzliche App-Funktionen auf erforderliche Inhalte zugreifen. Da die Dateiauswahl über alle Apps hinweg einheitlich ist, sind Benutzer mit dem Dialogfeld bereits vertraut, wenn Sie Ihre App zum ersten Mal verwenden, und können die App nach der gewünschten Auswahl sofort weiterverwenden.

Dateiauswahl

  Dateiauswahl mit Bildbibliothek

In JavaScript 

var picker = new Windows.Storage.Pickers.FileOpenPicker();
openPicker.viewMode = Windows.Storage.Pickers.PickerViewMode.thumbnail;
picker.fileTypeFilter.replaceAll([".png", ".jpg", ".jpeg"]);
picker.suggestedStartLocation =
Windows.Storage.Pickers.PickerLocationId.picturesLibrary;

In C#

using Windows.Storage;
using Windows.Storage.Pickers;

FileOpenPicker openPicker = new FileOpenPicker();
openPicker.ViewMode = PickerViewMode.Thumbnail;
openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
openPicker.FileTypeFilter.Add(".png");
openPicker.FileTypeFilter.Add(".jpg");
openPicker.FileTypeFilter.Add(".jpeg");

Beispiel für geeignete Funktionen: Wenn Benutzer in Ihrer App ein Bild auswählen können, sollte die App anstatt der Bildbibliotheksfunktion die Dateiauswahl verwenden. Wenn Ihre App einen vollständigen programmgesteuerten Zugriff auf eine Bibliothek benötigt, wie beispielsweise für einen Musikplayer, der die Inhalte der Musikbibliothek abspielt, ist es angemessen, mit einer Funktion auf die Musikbibliothek zuzugreifen. Wenn Ihre App auf Dokumente zugreifen muss, sollten Sie stets die Dateiauswahl verwenden.

Tipp 4 – Vertrauen Sie keinen Remotedaten

Bei in JavaScript erstellten Apps ist es besonders wichtig, nicht vertrauenswürdige Webinhalte zu überprüfen und vorsichtig mit diesen umzugehen. In der App enthaltene HTML-Seiten werden stets im lokalen Kontext der App ausgeführt, der Zugriff auf die Windows-Runtime bereitstellt. Innerhalb eines iframes angezeigte Remoteseiten werden im Webkontext der App ausgeführt und verfügen über keinen Zugriff auf die Windows-Runtime. Achten Sie darauf, wie die Windows-Runtime aus Ihrer App heraus aufgerufen wird – schließlich möchten Sie nicht, dass eine unbekannte Website Ihre App steuert. (A: Nein, das ist keine gute Idee.) Ihre App sollte APIs, die Skripte wie eval(), setTimeout() und setInterval() ausführen, nur aufrufen, wenn Sie sicher sind, dass die API-Eingabe aus Ihrem Paket stammt. Wenn Sie derartige APIs verwenden müssen, sollten Sie daran denken, dass diese Skripte auswerten können. Sie sollten daher genau wissen, wie das Skript aufgebaut ist, wenn Sie Daten an solche APIs weitergeben.

Verwenden Sie für JSON-Daten anstelle von eval() JSON.parse. Dies ist wesentlich sicherer und Ihre App ist nicht der Gefahr von Angriffen durch Skripteinschleusung ausgesetzt.

In JavaScript 

var jsontext = '{"firstname":"Aaren","surname":"Ekelund"}';
var contact = JSON.parse(jsontext);
console.log(contact.surname + ", " + contact.firstname);

// Output: Ekelund, Aaren

Außerdem sollten Sie bei unbekannten Webinhalten, die innerhalb der App verwendet werden, ausführbare Inhalte mithilfe von innerText oder toStaticHTML entfernen. Dadurch werden Skripte, die in Ihrer App Webinhalte anzeigen können, App entfernt bzw. deaktiviert.

In JavaScript

div.innerHTML = window.toStaticHTML(data);
div.innerText = data;

Diese Funktionen stellen sicher, dass in Ihrer App keine nicht vertrauenswürdige Skripte oder gefährliche Inhalte ausgeführt werden. Im ersten Fall werden Skripte entfernt, im zweiten Fall werden diese in nicht ausführbaren Text umgewandelt. Obwohl die meisten Apps mithilfe von Eingabefeldern innerhalb der App und von herkömmlichen APIs, beispielsweise ein XMLHttpRequest-Objekt, auf Remotewebinhalte zugreifen, sollten Sie nicht vergessen, dass Webinhalte auch auf anderen Wegen in Ihre App gelangen können, z. B. über den Charm „Teilen“.

Tipp 5 – Erlauben Sie keinen Webzugriff auf die WinRT

Standardmäßig gewährt Windows 8 ausschließlich Inhalten in Ihrem App-Paket Zugriff auf die Windows-Runtime (WinRT). Verhindern Sie, dass Daten die Kontrolle über die Verwendung von WinRT-APIs durch Ihre App erlangen, wenn Ihre App Eingaben oder Daten aus dem Web empfangen. Ihre Kunden möchten darauf vertrauen können, dass ihre App wie gewünscht funktioniert, und sie erwarten, dass Sie dieses Vertrauen aufrechterhalten. Sie sollten Websites möglichst in iframes innerhalb eines Sandkastens ausführen. Dies verhindert, dass Skripte Daten senden und dass andere Inhalte in Ihrer App ausgeführt werden.

Wenn Ihre App Webinhalte ausführt, können diese möglicherweise auf die Einstellungen und Daten Ihrer App zugreifen bzw. auf Dateien, auf die auch Ihre App zugreifen kann. Dies ist bei JavaScript-Apps besonders kritisch, da hier das direkte Ausführen von Skripten viel einfacher ist. Wenn beispielsweise eine JavaScript-App postMessage verwendet, um Daten an eine WinRT-API oder an Code-Pakete weiterzugeben, müssen Sie den Ursprung der entsprechenden Daten überprüfen, um sicherzustellen, dass diese aus einer vertrauenswürdigen Quelle stammen.

In JavaScript

window.attachEvent('onmessage',function(e) {
if (e.origin == 'https://www.contoso.com/') {

}
});

Weitere Informationen zum Hinzufügen von Webinhalten zu einer JavaScript-App finden Sie im App-Beispiel unter Integrating Content and Controls from Web Services.

Tipp 6 – Verlangen Sie Beweise: Authentifizieren Sie App und Kunden


Cloud-basierte Apps, bei denen Teile der App auf Cloud-Dienste zugreifen, sind außerordentlich leistungsstark, müssen jedoch umsichtig über die Cloud-Dienste authentifiziert werden, um einen Missbrauch zu verhindern. Cloud-Dienste, die Benutzereingaben empfangen, sollten immer sowohl den Benutzer als auch die App identifizieren und authentifizieren. Indem Sie die App und den Benutzer über einen vertrauenswürdigen Cloud-Dienst authentifizieren, können Sie sich sicher sein, dass Ihr Dienst jeweils legitim mit genau der erwünschten App verwendet wird. Die Kenntnis über die Identität des Benutzers hat den zusätzlichen Vorteil, dass Sie im Fall eines Missbrauchs problemlos sämtliche Inhalte identifizieren und entfernen können, die durch diesen Benutzer veröffentlicht wurden.

Sie können die App mit GetAppReceiptAsync authentifizieren, um zu überprüfen, ob die App aus dem Store stammt und über eine gültige Store-Bestätigung verfügt. Wenn Ihnen ein Backend-Server zur Verfügung steht, können Sie eine weitere Authentifizierung der Bestätigung in Bezug auf das öffentliche Zertifikat der Bestätigungssignatur vornehmen, indem Sie die folgende URL aufrufen. Dabei handelt es sich bei der <CertificateId> um die CertificateId , die in der Bestätigung enthalten ist.

https://go.microsoft.com/fwlink/p/?LinkId=246509&cid=<CertificateId>

Die WinRT stellt eine Vielzahl praktischer Methoden für Client-Apps zur Verfügung, um den Benutzer eines Cloud-Diensts zu authentifizieren, darunter Web Authentication Broker (für Authentifizierungen mithilfe von OAuth), Schließfach für Anmeldeinformationen (zum Speichern von Kennwörtern und kleinen verschlüsselten Werten) und Freigegebene Zertifikatspeicher (für die Authentifizierung von Clientzertifikaten). All dies sind großartige Möglichkeiten, das Kundenvertrauen in Hinblick auf den Umgang mit der Authentifizierung und ihren Anmeldeinformationen zu stärken.

Tipp 7 – Überprüfen Sie Dateien, Protokolle und importierte Daten


Viele Apps erstellen oder laden Dateien, ermöglichen die Aktivierung durch ein Protokoll oder stellen die Möglichkeit zur Verfügung, Dateien zu importieren. Wie die oben beschriebenen Remotewebinhalte, können diese Daten falsch formatiert sein oder aus wenig vertrauenswürdigen Quellen stammen. Daher sollte ihnen nicht vertraut werden. Apps, die Dateien öffnen, Daten importieren oder freigegebene Inhalte empfangen, müssen die Inhalte vorab sehr sorgfältig überprüfen.

Die Validierung hängt vom Eingabetyp und davon ab, wie Ihre App den entsprechenden Inhalt verwendet. Sie kann daher einfach oder komplex sein. Beispielsweise sollten Eingaben, die von einer Datenbankabfrage verwendet werden, zur Verhinderung eines SQL-Injection-Angriffs überprüft werden, da Datenbanken in der Regel alle gültigen Abfragen ausführen, die sie erhalten, und bei bösartigen Eingaben Daten preisgeben, verändern oder sogar löschen können.

In Dateien, Protokollen, importierten Daten und freigegebenen Inhalten können nicht vertrauenswürdige Inhalte enthalten sein, die möglicherweise nicht den von der App erwarteten Inhalten entsprechen. Dateien und Protokolle stellen die häufigste Form nicht vertrauenswürdiger Eingaben dar. Sie sollen jedoch auch beim Umgang mit der Zwischenablage und dem Empfangen von Inhalten über den Charm „Teilen“ vorsichtig sein, da Kunden möglicherweise im Webbrowser nicht vertrauenswürdige Inhalte herunterladen. Apps mit besonders vertraulichen Daten, wie z. B. Apps für die persönlichen Finanzen, sollten extrem vorsichtig mit nicht vertrauenswürdigen Inhalten umgehen, da sie über einen Zugriff auf Informationen verfügen, die für die Kunden außerordentlich wertvoll sind.

Tipp 8 – Nutzen Sie HTTPS-Verbindungen


Verwenden Sie im Zweifel verschlüsselte Verbindungen. HTTPS-Verbindungen werden über einen Remoteserver authentifiziert. Daher sind sie sehr empfehlenswert zur Vermeidung von „Man-in-the-Middle“-Angriffen. Während diese Angriffe in Heimnetzwerk nicht auftreten, gibt es weltweit noch immer zahlreiche unverschlüsselte Funknetzwerke, in denen eine Standard-HTTP-Verbindung nicht sicher ist.

Für eine Standard-HTTPS-Verbindung muss die Remotewebsite über ein von einer Zertifizierungsstelle vergebenes Zertifikat verfügen und so eingerichtet sein, dass eine HTTP-Verbindung zulässig ist. Ab Windows 8 können Apps SSL-Verbindungen mithilfe eines selbstsignierten Zertifikats verwenden, um sich sicher an Ihrem Backend-Server zu authentifizieren. Das bedeutet, dass Sie sogar ohne ein von einer Zertifizierungsstelle vergebenes Zertifikat eine sichere HTTPS-Verbindung nutzen können. Wenn die Kosten bislang den Einsatz von HTTPS verhindert haben, gibt es jetzt keine Grund mehr, Apps bereitzustellen, die Daten über unsichere HTTP-Verbindungen übertragen.

Sie können Ihrer App einfach eine Zertifikatdeklaration hinzufügen, wenn Sie ein selbstsigniertes Zertifikat verwenden möchten. Dies können Sie mit dem Manifest Designer in Visual Studio 2012 erledigen. Alternativ können Sie die Deklaration auch direkt in den XML-Code des App-Manifests einfügen. Um das gleiche Zertifikat zu verwenden, müssen Sie ebenfalls den Backend-Server konfigurieren. Es gibt für IIS einen einfachen Vorgang zur Erstellung und Konfiguration Ihrer Website. Das Zertifikatpaket wird daraufhin automatisch von der App zur Authentifizierung der Verbindung zu Ihrem Webserver verwendet.

Auch für JavaScript-Apps können Sie HTTPS-Verbindungen anfordern, indem Sie den folgenden <meta>-Tag in Ihrer App verwenden:

<meta name="ms-https-connections-only" content="true"/>

Vertrauen aufbauen

Wir hoffen, dass Sie von Windows 8 begeistert sind und bereits einige großartige Apps erstellen, die wir demnächst im Windows Store begrüßen dürfen. Die Tipps und Empfehlungen, die wir oben besprochen haben, sind wichtig, um für die Sicherheit Ihrer Kunden zu sorgen, sodass diese darauf vertrauen können, dass ihre Apps erwartungsgemäß funktionieren. Sicherheit ist für alle Apps entscheidend – ganz gleich, ob es um den Schutz harterkämpfter Highscores oder vertraulicher Finanzdaten geht.

Unser gemeinsames Engagement für die App-Plattform sollen es Kunden ermöglichen, Windows 8- und Windows Store-Apps ohne Bedenken zu testen und zu erwerben. Wir sind zuversichtlich, dass Sie mithilfe der App-Plattform vertrauenswürdige Apps für Kunden erstellen können.

Weitere Informationen über die Sicherheit von Apps finden Sie im Whitepaper Entwickeln von sicheren Apps, unter Starter Kit for the Security Development Lifecycle sowie im Security Development Center.

Vielen Dank!

– Scott Graham, Senior Program Manager, Windows

– Crispin Cowan, Senior Program Manager, Windows

– David Ross, Principal Security Software Engineer, Trustworthy Computing Security

  • Loading...
Leave a Comment
  • Please add 5 and 4 and type the answer here:
  • Post