Posts mit dem Label Verfügbarkeit werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Verfügbarkeit werden angezeigt. Alle Posts anzeigen

Montag, 24. Dezember 2012

Sicherheit in der GAE - Teil 3

Die Sandbox

Alle Anwendungen der GAE werden in einer Sandbox ausgeführt. Diese stellt Anwendungen einen eingeschränkten Interpreter für die jeweilige Sprache sowie eine API für alle von der GAE bereitgestellten Zusatzdienste bereit. Gleichzeitig erzwingt sie die Abgrenzung zwischen der Anwendung und der darunter liegenden Plattform.

Anwendungen werden beim Upload in der GAE in einen Anwendungscontainer zusammengefasst. Dieser enthält alle Anwendungsdateien und Ressourcen, jedoch nicht die Verzeichnisse, die über die Konfigurationsdateien direkt als statischeVerzeichnisse nach außen freigegeben sind. Der Anwendungscontainer ist read-only, d.h. es ist nicht möglich aus einer Anwendung heraus in das Dateisystem zu schreiben. Dies schützt die Anwendung im Falle einer Kompromittierung vor Manipulationen des Programmcodes und der in diesem Container mitgelieferten Ressourcen [1]. Bis Version 1.7.2 war die Anzahl der Dateien aus der die Anwendung bestehen kann (inkl. der statischen Dateien und Ressourcen) auf 10.000 und die Gesamtgröße dieses Containers auf 1Gb beschränkt [2].


Abschirmung der Plattform

Die Sandbox verhindert den Zugriff auf die darunterliegende Plattform und das Betriebsystem, indem verschiedene Funktionen des Interpreters abgeschaltet sind. Im Gegensatz zur Java-Version der GAE, bei der einzelne Klassen der Standardbibliothek freigeschaltet sind [3], sind bei Python fast alle Module, die in Python selbst geschrieben sind, verfügbar. Allerdings sind nahezu alle Erweiterungen, die in C geschrieben sind, entfernt. So sind neben dem ctypes-Modul, das Zugriff auf Funktionen von externen Librarys ermöglicht, auch das _socket Modul nicht verfügbar.

Abschirmung des Internets

Neben dem Schutz der Anwendung und der Plattform selbst sind auch Maßnahmen ergriffen, um andere Systeme und Netzwerke im Internet vor Angriffen aus der GAE heraus zu schützen. So besteht keine Möglichkeit aus der GAE eine direkte Verbindung zu anderen Systemen im Internet aufzubauen. Für das abrufen von URLs steht ein Proxy zur Verfügung, der verschiedene HTTP-Header in der ausgehenden Anfrage erzwingt [4]. Für den Versand und Empfang von E-Mails steht ebenfalls eine API zur Verfügung, die die E-Mails über einen Proxy leitet und so beispielsweise Missbrauch durch eine gefälschte Absenderkennung verhindert [5]. Allerdings wird die Möglichkeit, direkt ausgehende IP-Verbindungen zu erlauben z.Z. von Google getestet [6, App Engine 1.7.2 Released]. Damit könnten diese Beschränkungen in einer zukünftigen Version entfernt werden.

[1] Python Runtime Environment
https://developers.google.com/appengine/docs/python/runtime

[2] Google App Engine Python SDK Release Notes
http://code.google.com/p/googleappengine/wiki/SdkReleaseNotes

[3] The JRE Class White List
https://developers.google.com/appengine/docs/java/jrewhitelist

[4] URL Fetch Python API
https://developers.google.com/appengine/docs/python/urlfetch/overview

[5] Mail Python API
https://developers.google.com/appengine/docs/python/mail/overview

[6] News, Notes, tips and tricks from the Google App Engine Team
http://googleappengine.blogspot.de


Sonntag, 23. Dezember 2012

Sicherheit in der GAE - Teil 2

Funkionsweise der GAE

Die GAE ist ein verteiltes System zum Bereitstellen von Webanwendungen. Die GAE liegt z.Z. in drei Versionen vor: Python (wahlweise in den Versionen 2.5 oder 2.7), Java oder in der von Google selbst entwickelten Programmiersprache Go. Anwendungen werden zunächst lokal mittels einem von Google bereitgestellten Software development Kit (SDK) erstellt. Dieses simuliert die von der GAE bereitgestellten Application programming interfaces (APIs) und stellt einen lokalen Webserver bereit, auf dem die Anwendung getestet werden kann. Anschließend wird die Anwendung „deployed“, d.h. mittels eines mit dem SDK mitgelieferten Programms in die GAE hochgeladen. Hierbei werden die Anwendungsdaten in einem Container zusammengefasst, der beim Aufruf der Anwendung von einem Server der GAE geladen und die Anwendung hieraus ausgeführt wird. Für den Betrieb der Anwendung stellt Google verschiedene Dienste wie Datenbanken oder einen Dienst zum versenden von E-Mails bereit. Für die Nutzung dieser Dienste entstehen entsprechend dem Nutzungsvolumen Kosten. Allerdings stellt Google jeder Anwendung einen gewisse Menge an Ressoucen pro Tag kostenlos zur Verfügung, sodass die Appengine risikofrei getestet werden kann. Weiterhin gelten für verschiedene Dienste sogenannte Safety Quotas [1], die verhindern, dass einzelne Anwendungen einen Dienst überlasten und dieser so für andere Anwendungen der GAE vorübergehend nicht zur Verfügung steht. Diese Limits dienen ausschließlich zur Planung der benötigten Ressourcen und stellen keine technischen Beschränkungen dar, sodass diese auf Anfrage [2] erhöht werden können. Konkret sind folgende Ressourcen von Bedeutung, da diese von den meisten Webanwendungen verwendet werden.

  • Ein- und ausgehender Traffic: Für freie Anwendungen gelten Limits von je 1GB Traffic/Tag sowie maximal 56MB/Minute. Bezahlte Anwendungen haben z.Z. unbegrenzten, kostenlos eingehenden Traffic sowie ausgehenden Traffic für 0.12$/GB (je 1GB/Tag kostenlos; Maximum 10GB/Minute).
  • Datenbank: Freie Anwendungen erhalten je 50.000 Schreib-, Lese- und Small-Ops1 pro Tag. Bezahlte Anwendungen können diesen Dienst beliebig für 0,1$/100k Schreiboperationen, 0,07$/100k Leseoperationen und 0,01$ 100k Smallops nutzen. Dies sind jedoch low-level Operationen; das Einfügen eines Eintrags benötigt ggf. mehrere dieser Schreiboperationen [3].
  • URL-Fetch: Freie Anwendungen können diesen Dienst zum Abruf entfernter URLs höchstens 657.000 mal pro Tag nutzen. Weiterhin gelten für sie Beschränkungen von maximal 3.000 Zugriffen/Minute mit je maximal 22MB/Minute gesendete oder empfangene Daten. Die über diesen Dienst übertragenen Daten zählen ebenfalls zum ein- und ausgehenden Traffic der Anwendung. Für bezahlte Anwendungen gelten die gleichen Vorraussetzungen, jedoch besteht hier ein Tageslimit von 46.000.000 Zugriffen/Tag sowie maximal 32.000 Zugriffe/Minute mit je maximal 740MB übertragenen Daten pro Minute.
  • Instanzstunden: Die GAE startet Instanzen der Anwendung nach Bedarf. Sinkt der Bedarf, wird eine Instanz 15 Minuten nach dem letzten Zugriff auf sie entweder abgeschaltet oder weiterhin vorgehalten, jedoch bis zum nächsten Zugriff nicht weiter angerechnet. Freie Anwendungen erhalten 28 Instanzstunden/Tag, bezahlte Anwendungen können darüber hinaus weitere Instanzstunden für 0.08$/Stunde nutzen.

[1] Quotas and Safetylimits
https://developers.google.com/appengine/docs/quotas

[2] Quota Increase Request
http://support.google.com/code/bin/request.py?\&contact_type=AppEngineCPURequest

[3] Billing and Budgeting Resources
https://developers.google.com/appengine/docs/billing

Dienstag, 18. Dezember 2012

Sicherheit in der GAE - Teil 1

Webanwendungen stellen inzwischen eine Kernkomponente des Internets dar. Ein Großteil des Umsatzes im E-Commerce wird über Webanwendungen abgewickelt. Allein in Deutschland wird der Umsatz im E-Commerce für 2012 auf 29,5 Milliarden Euro geschätzt, 13% mehr als in 2011 [1]. Bedingt durch diese rasant steigende, gesamtwirtschaftliche Bedeutung von Webanwendungen rückt deren Sicherheit und Verfügbarkeit zunehmend in den Fokus.

Die GAE ist deshalb mit mehren Sicherheitsaspekten versehen, die Angriffe auf Anwendungen erschweren und im Falle von erfolgreichen Angriffen die Auswirkungen auf die Anwendung minimieren sollen. Weiterhin wurden diverse Maßnahmen ergriffen, um die GAE selbst zu schützen und negative Effekte von einer Anwendung auf andere Anwendungen zu minimieren.

 Im Laufe dieser Serie werden mögliche Angriffe auf die Verfügbarkeit einer Anwendung der GAE (Python) aufgezeigt und Gegenmaßnahmen vorgestellt.

[1] Handelsverband Deutschland: E-Commerce-Umsatz in Deutschland von 1999 bis 2011
http://de.statista.com/statistik/daten/studie/3979/umfrage/e-commerce-umsatz-in-deutschland-seit-1999