<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>EXXETA BLOG</title>
	<atom:link href="https://blog.exxeta.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.exxeta.com</link>
	<description></description>
	<lastBuildDate>Tue, 17 Aug 2021 12:59:52 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.8.2</generator>
	<item>
		<title>Xamarin – eine gute Wahl?</title>
		<link>https://blog.exxeta.com/2021/08/17/xamarin-eine-gute-wahl/</link>
					<comments>https://blog.exxeta.com/2021/08/17/xamarin-eine-gute-wahl/#respond</comments>
		
		<dc:creator><![CDATA[Thomas Münzl]]></dc:creator>
		<pubDate>Tue, 17 Aug 2021 12:59:51 +0000</pubDate>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[.NET MAUI]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[xamarin]]></category>
		<category><![CDATA[xamarin.forms]]></category>
		<category><![CDATA[xaml]]></category>
		<guid isPermaLink="false">https://blog.exxeta.com/?p=2112</guid>

					<description><![CDATA[<p>Wer eine mobile App entwickeln möchte, muss sich zu Beginn für eine Technologie entscheiden. Bei einer Vielzahl unterschiedlicher Frameworks und Sprachen ist dies kein leichtes Unterfangen, zumal alle Technologien dem stetigen Wandel unterliegen. Eine grundsätzliche Aussage über die beste Wahl für alle Problemdomänen ist nahezu unmöglich, denn dabei spielen sehr viele unterschiedliche Faktoren eine Rolle.Mit [&#8230;]</p>
<p>Der Beitrag <a rel="nofollow" href="https://blog.exxeta.com/2021/08/17/xamarin-eine-gute-wahl/">Xamarin – eine gute Wahl?</a> erschien zuerst auf <a rel="nofollow" href="https://blog.exxeta.com">EXXETA BLOG</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Wer eine mobile App entwickeln möchte, muss sich zu Beginn für eine Technologie entscheiden. Bei einer Vielzahl unterschiedlicher Frameworks und Sprachen ist dies kein leichtes Unterfangen, zumal alle Technologien dem stetigen Wandel unterliegen. Eine grundsätzliche Aussage über die beste Wahl für alle Problemdomänen ist nahezu unmöglich, denn dabei spielen sehr viele unterschiedliche Faktoren eine Rolle.</p>



<p>Mit Xamarin positioniert sich Microsoft mit einer Plattform, die es Entwicklern ermöglicht, iOS-, Android- und Windows-Anwendungen mit Hilfe von .NET zu erstellen. .NET als einheitliche Basis bietet interessante Entwicklungsansätze, speziell mit Xamarin.Forms, weshalb Xamarin gerne als Cross-Plattform-Technologie angesehen wird.</p>



<p>Der Beitrag soll aufzeigen, wieso es sich lohnen kann, Xamarin als Framework für neue Projekte in die Auswahl miteinzubeziehen. Dabei richtet er sich insbesondere an diejenigen, die sich mit der Entwicklung einer mobilen App beschäftigen und vor der Auswahl einer Technologie stehen.</p>



<h2>Woher kommt Xamarin?</h2>



<p>Xamarin ist mit der Übernahme durch Microsoft fester Bestandteil der .NET-Familie geworden und adressiert hier strategisch den Mobile-App-Markt, speziell Android und iOS als die gängigsten mobilen Betriebssysteme. Die Idee hinter der Plattform ist es, C#-Entwicklern die Entwicklung von Mobile Apps zu ermöglichen und die Stärken des .NET-Ökosystems zu nutzen.</p>



<p>Xamarin bietet Wrapper für plattformabhängige Befehle an, so dass diese auch in C# genutzt werden können. Die plattformunabhängige Code-Basis kann so leicht von den plattformabhängigen Befehlen getrennt werden, so dass diese dann für mehrere Plattformen gleichzeitig genutzt werden kann.</p>



<p>In Xamarin.Forms werden darüber hinaus auch die UI-Beschreibungen plattformunabhängig realisiert, so dass auch diese nur einmal erstellt werden müssen. Die Standard-Bedienelemente wie Textfelder, Buttons oder Radiobuttons und UI-Layouts sind in einheitlichem Markup gebündelt. Das Framework übersetzt diese dann in konkrete, native UI entsprechend des Betriebssystems, für das das App-Paket gebaut wird. Xamarin (wird auch als Xamarin Native bezeichnet) und Xamarin.Forms sind damit unterschiedliche App-Modelle.</p>



<h2>Eine UI für alle Plattformen</h2>



<p>Xamarin.Forms abstrahiert nicht nur die App-Logik, sondern vereinheitlicht auch die Benutzeroberfläche.<br>Indem das Aussehen üblicher UI-Elemente einmalig durch Templates, Styles und Ressourcen beschrieben wird, erscheint die App rasch in einheitlichem Design.</p>



<p>Vorgegebene Style-Guides, die das Corporate Design abbilden, können in XAML einmal definiert und überall verwendet werden. Änderungen an den Unternehmensrichtlinien sind im XAML daher direkt auf alle betreffenden UI-Komponenten angewendet. Auch die Integration des immer beliebter werdenden Dark Modes geht so einfach von der Hand.</p>



<p>Das beschleunigt die initiale Entwicklung, hilft aber auch, auf Änderungswünsche zügig reagieren zu können.</p>



<h2>Xamarin ist Enterprise-ready</h2>



<p>Apps sollen zwar einfach sein, sie können aber mit der Zeit recht schnell komplex werden. Daher muss von Beginn an auf eine gute Erweiterbarkeit und Modifizierbarkeit geachtet werden. Mit der Verwendung des Model-View-ViewModel<sup>1</sup> (MVVM) Patterns ist es möglich, die Programmlogik strikt vom UI-Code zu trennen.</p>



<p>Die konsequente Einhaltung der Struktur ermöglicht automatisierte Komponententests, um die korrekte Programmfunktionalität sicherzustellen. Das wiederum reduziert den manuellen Testaufwand erheblich.</p>



<p>Xamarin.Forms wurde lange Zeit nachgesagt, dass es eher für Prototypen oder nur einfache Apps geeignet ist. Diese Zeiten sind aber vorbei. Xamarin.Forms ist mittlerweile so ausgereift, dass es auch bei komplexen Apps eingesetzt werden kann.</p>



<h2>Nutzersicht</h2>



<p>Alternativlösungen wie PhoneGap<sup>2</sup> oder Cordova<sup>3</sup> bilden eine Webseite innerhalb eines Web-View-Containers ab. Was aus Entwicklersicht vielversprechend sein mag, nämlich eine bereits existierende Webseite innerhalb einer App anzubieten, stört die Nutzerfreundlichkeit.</p>



<p>Hierbei punktet Xamarin damit, wie die App schlussendlich auf dem Mobilgerät angezeigt wird: Der geschriebene Code wird als native App ausgeliefert. Die Bedienelemente werden dabei in die plattformspezifischen Komponenten gerendert.</p>



<p>Der OS-spezifische Look &amp; Feel bleibt bestehen und kommt besser beim Endnutzer an, da er seine eingeprägten Klicks und Gesten einsetzen kann.</p>



<h2>Community &amp; Third-Party</h2>



<p>Auch Xamarin kann nicht alle Problemstellungen adressieren und so spielt für die Entscheidung pro oder contra Xamarin natürlich auch die Erweiterbarkeit mit Third-Party-Libraries eine wichtige Rolle.</p>



<p>Xamarin als Framework profitiert von der Übernahme durch Microsoft und erhält dadurch mehr Aufmerksamkeit. Vergleichsweise klein ist aber die Community gegenüber Alternativen wie React Native.</p>



<p>Deshalb ist die Auswahl an Third-Party-Libraries, die Lösungen speziell für Xamarin-Apps bieten, nicht so zahlreich wie bei alternativen Lösungen im JavaScript-Umfeld.</p>



<p>Es sollte also schon im Vorfeld geprüft werden, ob benötigte Libraries existieren. Mit .NET als Basis gibt es jedoch auch Zugriff auf eine Vielzahl von NuGet-Paketen für alle möglichen Szenarien. Einige wenige Firmen haben sich auch auf die Erstellung von Xamarin UI- und Bedienelementen spezialisiert.</p>



<h2>Einstieg in Xamarin</h2>



<p>Verfügbares Know-how sollte bei der Technologie-Auswahl definitiv berücksichtigt werden, aber auch Xamarin-Neueinsteigern fällt der Beginn denkbar einfach: Die App-Logik wird in C# entwickelt und basiert auf dem etablierten .NET Framework.</p>



<p>Für die Darstellung der Oberflächen wird in Xamarin.Forms die deklarative Markup-Sprache XAML – die eXtensible Application Markup Language – verwendet.</p>



<p>XAML ist keine Exklusivtechnik von Xamarin, sondern findet bereits jahrelang Anwendung in der .NET-Welt. Gängige Steuerelemente und Layouts entstammen aus WPF und unterstützen daher auch in Xamarin vollumfängliche Features wie Data-Binding und die Referenzierung appinterner Komponenten.</p>



<p>Wer bereits durch WPF mit XAML vertraut ist, wird also sehr schnell die App-Entwicklung mit Xamarin meistern.</p>



<p>Einen vollwertigen, visuellen XAML-Designer für die Xamarin-Entwicklung gibt es gegenwärtig nicht, jedoch wurde die Developer Experience mit der Einführung von Hot-Reload<sup>4</sup> deutlich verbessert. Mit Hot-Reload werden Änderungen am User Interface an der laufenden Applikation angewendet, was die Entwicklungsdauer stark verringert.</p>



<h2>Entwickleraufwand</h2>



<p>Abzuwägen ist vor allem auch der finanzielle Aspekt, der im Bereich der Entwicklung mit Xamarin fällig wird. Für Visual Studio fallen Lizenzkosten an, gegebenenfalls ist jedoch die kostenfreie Community-Edition ausreichend. Die Standard-Entwicklungsumgebungen für native Apps – Android Studio und Apples XCode – sind kostenfrei.</p>



<p>Teams, die bereits in der .NET-Welt unterwegs sind, verfügen sicherlich bereits über eine Lizenz von Visual Studio oder nutzen die Rider IDE von JetBrains. Für .NET-Entwicklerteams ist daher nicht mit zusätzlichen Lizenzkosten zu rechnen. Besteht das Entwicklerteam vor allem aus .NET Entwicklern, sind auch erheblich weniger Schulungskosten notwendig, da keine neuen Programmiersprachen (Android: Java oder Kotlin; iOS: ObjectiveC oder Swift) erlernt werden müssen.</p>



<p>In der nativen App-Entwicklung kommen zwei verschiedene Entwicklungsumgebungen mit unterschiedlichen Tools zum Einsatz. Apples XCode und Android Studio sind zwar kostenfrei, die Werkzeuge verlangen aber unterschiedliche Bedienung.</p>



<p>Üblicherweise ist die Entwicklung nativer Apps für mehrere Plattformen nicht einem Entwickler zuzumuten, daher ist hier mit höheren Personalkosten für zwei oder mehrere Entwickler auszugehen.</p>



<p>Auch perspektivisch sind mehrere Entwickler für die Pflege und Weiterentwicklung der nativen Apps einzukalkulieren. Unterschiedliche Implementierungen der Funktionalitäten bergen umso mehr Fehlerpotentiale.</p>



<p>Die Vereinheitlichung der Funktionalitäten in Xamarin reduziert den Aufwand gegenüber der nativen Entwicklung.</p>



<p>Ausgaben und Aufwand in der Vergangenheit sollten sicherlich auch beachtet werden: Bestehender und wiederverwendbarer Code sollte in der Auswahl der Technologie berücksichtigt werden.</p>



<h2>Von Xamarin.Forms zu .NET MAUI</h2>



<p>Microsoft plant für Ende 2021 die Veröffentlichung von .NET MAUI (.NET Multi-Platform App UI). Hierbei handelt es sich um eine Weiterentwicklung von Xamarin.Forms, in der neben Android-, iOS- und Windows- auch macOS-Anwendungen mithilfe des Frameworks entwickelt werden können.</p>



<p>Ziel ist es also, mehr Zielplattformen ansprechen zu können, die Xamarin-Technologie nachhaltig für die Zukunft zu rüsten und noch mehr Vereinheitlichung zu schaffen.</p>



<p>Bei MAUI gibt es daher nur noch ein einziges Projekt, statt einem Hauptprojekt, sowie für jede Zielplattform ein weiteres. Populäre Design Patterns und Funktionen werden noch besser integriert. Hot-Reload reagiert beispielsweise dann auch auf Änderungen an der Code-Logik.</p>



<p>Trotz Änderungen an der Projektstruktur wird der Migrationsprozess zu MAUI leicht zu bewältigen sein. Bis dahin kann deshalb weiterhin Xamarin.Forms zum Einsatz kommen.</p>



<h2>Fazit</h2>



<p>Xamarin ist keine Hybrid-Lösung für mobile Apps auf Basis von Webtechnologien. Vielmehr bekommen wir native Apps, die aus einem einheitlichen Crossplattform-Projekt entstehen.</p>



<p>Wer sich für ein App-Framework entscheiden muss und bereits Expertise in .NET-Technologien mitbringt, sollte Xamarin in Erwägung ziehen.</p>



<p>Darüber hinaus sollte geprüft werden, ob Bestandscode eingebracht werden kann: technisches Know-how und bestehende Logik weiterzuverwenden ergibt hier überaus Sinn.</p>



<p>Besonders geeignet zeigt sich Xamarin, wenn eine schnelle Auslieferung wichtiger ist als die Komplexität der App im ersten Schritt. Speziellere Features, die plattformabhängig implementiert werden müssen, lassen sich trotzdem noch im weiteren Verlauf einbauen.</p>



<p>Perspektivisch gesehen ist es empfehlenswert, die Applikation von Beginn an auf Xamarin.Forms aufzubauen. So fällt der Umstieg auf MAUI einfacher.</p>



<div style="height:65px" aria-hidden="true" class="wp-block-spacer"></div>



<p><sup>1</sup> <a href="https://docs.microsoft.com/de-de/xamarin/xamarin-forms/enterprise-application-patterns/mvvm" target="_blank" rel="noreferrer noopener">https://docs.microsoft.com/de-de/xamarin/xamarin-forms/enterprise-application-patterns/mvvm</a></p>



<p><sup>2</sup> <a href="https://de.wikipedia.org/wiki/Adobe_PhoneGap" target="_blank" rel="noreferrer noopener">https://de.wikipedia.org/wiki/Adobe_PhoneGap</a></p>



<p><sup>3</sup> <a href="https://cordova.apache.org" target="_blank" rel="noreferrer noopener">https://cordova.apache.org</a></p>



<p><sup>4</sup> <a href="https://docs.microsoft.com/de-de/xamarin/xamarin-forms/xaml/hot-reload" target="_blank" rel="noreferrer noopener">https://docs.microsoft.com/de-de/xamarin/xamarin-forms/xaml/hot-reload</a></p>
<p>Der Beitrag <a rel="nofollow" href="https://blog.exxeta.com/2021/08/17/xamarin-eine-gute-wahl/">Xamarin – eine gute Wahl?</a> erschien zuerst auf <a rel="nofollow" href="https://blog.exxeta.com">EXXETA BLOG</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.exxeta.com/2021/08/17/xamarin-eine-gute-wahl/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Warum selbst das beste Tool einen echten Penetrationstest nicht ersetzen kann</title>
		<link>https://blog.exxeta.com/2020/11/03/warum-selbst-das-beste-tool-einen-echten-penetrationstest-nicht-ersetzen-kann/</link>
					<comments>https://blog.exxeta.com/2020/11/03/warum-selbst-das-beste-tool-einen-echten-penetrationstest-nicht-ersetzen-kann/#comments</comments>
		
		<dc:creator><![CDATA[Sebastian Schwegler]]></dc:creator>
		<pubDate>Tue, 03 Nov 2020 15:46:21 +0000</pubDate>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[application security]]></category>
		<category><![CDATA[penetrationstest]]></category>
		<category><![CDATA[pentesting]]></category>
		<guid isPermaLink="false">https://blog.exxeta.com/?p=1906</guid>

					<description><![CDATA[<p>Beim Durchführen von Penetrationstests erlebt man immer wieder Überraschungen und findet Fehler, die man sich in seinen kühnsten Träumen nicht vorstellen kann. So auch bei einem eigentlich ganz normalen Penetrationstest für einen Kunden.Zu testen war eine digitale Plattform, die einen Produktpreis sowie einen Rabattfaktor mit vertretungsberechtigten Personen verknüpft, sodass diese Personen dann mit den verknüpften [&#8230;]</p>
<p>Der Beitrag <a rel="nofollow" href="https://blog.exxeta.com/2020/11/03/warum-selbst-das-beste-tool-einen-echten-penetrationstest-nicht-ersetzen-kann/">Warum selbst das beste Tool einen echten Penetrationstest nicht ersetzen kann</a> erschien zuerst auf <a rel="nofollow" href="https://blog.exxeta.com">EXXETA BLOG</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Beim Durchführen von Penetrationstests erlebt man immer wieder Überraschungen und findet Fehler, die man sich in seinen kühnsten Träumen nicht vorstellen kann. So auch bei einem eigentlich ganz normalen Penetrationstest für einen Kunden.</p>



<p>Zu testen war eine digitale Plattform, die einen Produktpreis sowie einen Rabattfaktor mit vertretungsberechtigten Personen verknüpft, sodass diese Personen dann mit den verknüpften Daten ein Geschäft abschließen können. Dem Auftragnehmer wird durch die verifizierte Identität des Käufers die Möglichkeit geboten, seine Zahlungsbedingungen mittels des Rabattfaktors anzupassen.</p>



<p>Wir starteten also mit dem Test und verschafften uns zunächst einen Überblick über offene Ports und eventuell auffindbare Verzeichnisse, aber hier war alles in Ordnung. Anschließend versuchten wir, über eigentlich nicht zulässige HTTP-Methoden auf URLs eigene Daten ins System zu bringen – auch das schlug fehl.</p>



<p>Also nahmen wir die Aufrufe beim Verifizieren der Daten gegenüber dem Shop-Betreiber genauer unter die Lupe. Der prinzipielle Ablauf gestaltet sich wie folgt:</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="641" height="212" src="https://blog.exxeta.com/wp-content/uploads/2020/11/exxeta_blog_schwegler_overview.png" alt="" class="wp-image-1910" srcset="https://blog.exxeta.com/wp-content/uploads/2020/11/exxeta_blog_schwegler_overview.png 641w, https://blog.exxeta.com/wp-content/uploads/2020/11/exxeta_blog_schwegler_overview-300x99.png 300w" sizes="(max-width: 641px) 100vw, 641px" /></figure></div>



<p>Die Einbindung der Kunden-API erfolgt über ein Javascript-SDK. Dort wird ein Objekt erzeugt, welches einen Eventhandler für den Abschluss des Vorgangs im “Kunden UI” besitzt, sodass die API den Shop-Betreiber benachrichtigt, wenn die Informationen freigegeben werden oder nicht.</p>



<p>Um die Anwendung sicher zu machen, setzt das Entwicklungsteam auf JWT, sodass die Daten jeder Anfrage signiert werden können. Das sah konkret dann so aus:</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="369" height="229" src="https://blog.exxeta.com/wp-content/uploads/2020/11/exxeta_blog_schwegler_json.png" alt="" class="wp-image-1912" srcset="https://blog.exxeta.com/wp-content/uploads/2020/11/exxeta_blog_schwegler_json.png 369w, https://blog.exxeta.com/wp-content/uploads/2020/11/exxeta_blog_schwegler_json-300x186.png 300w" sizes="(max-width: 369px) 100vw, 369px" /></figure></div>



<p>Man sieht, dass ein JWT mitgesendet wird, welches dieselben Daten aus den Parametern price und discount in signierter Form enthält. Dementsprechend beschränkt waren die Angriffsmöglichkeiten, da die JWT selbst korrekt implementiert waren. Uns fielen sofort die Variablen price und discount ins Auge, sodass wir diese Anfrage mit unserem HTTP-Proxy unterbrochen und manipuliert haben. Mit erschreckendem Ergebnis: Der Server akzeptierte die Anfrage und wir erhielten als Antwort ein JSON-Objekt mit dem Status “VALID”. So könnte ein Kunde die Preise der Produkte, die er bestellen möchte, zu seinen Gunsten manipulieren.</p>



<p>Also mussten wir das Javascript-SDK überprüfen, ob dieses die Manipulation tatsächlich so an den Shopbetreiber weitergeben würde. Nach ein wenig Suche und Debugging im Browser haben wir die betreffende Codestelle gefunden. Mit Entsetzen nahmen wir folgendes zur Kenntnis:</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="613" height="252" src="https://blog.exxeta.com/wp-content/uploads/2020/11/exxeta_blog_schwegler_js.png" alt="" class="wp-image-1908" srcset="https://blog.exxeta.com/wp-content/uploads/2020/11/exxeta_blog_schwegler_js.png 613w, https://blog.exxeta.com/wp-content/uploads/2020/11/exxeta_blog_schwegler_js-300x123.png 300w" sizes="(max-width: 613px) 100vw, 613px" /></figure></div>



<p>Nachdem der Server unsere Manipulation bereits akzeptiert hatte, erklärt nun auch das Javascript-SDK diese Manipulation für gültig.</p>



<p>Beim Kunden herrschte natürlich blankes Entsetzen – wie konnte das passieren? Man setze doch bereits diverse Tools für Security und Codequalität in Sonar ein. Es stellte sich heraus, dass die falsche Funktion aufgerufen wurde.</p>



<p>Dieses Beispiel zeigt wunderbar, warum selbst das beste Tool keinen echten Penetrationstest ersetzen kann: Ein Tool kann eben nicht herausfinden, ob der Softwareentwickler die semantisch korrekte Funktion aufgerufen hat.</p>



<p>Ohne unseren Penetrationstest wäre diese Sicherheitslücke, mit der sich die gesamte Funktionalität der Anwendung umgehen ließe, wahrscheinlich in Produktion gegangen.</p>
<p>Der Beitrag <a rel="nofollow" href="https://blog.exxeta.com/2020/11/03/warum-selbst-das-beste-tool-einen-echten-penetrationstest-nicht-ersetzen-kann/">Warum selbst das beste Tool einen echten Penetrationstest nicht ersetzen kann</a> erschien zuerst auf <a rel="nofollow" href="https://blog.exxeta.com">EXXETA BLOG</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.exxeta.com/2020/11/03/warum-selbst-das-beste-tool-einen-echten-penetrationstest-nicht-ersetzen-kann/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Statische Codeanalyse: Xanitizer und RIPS im Vergleich</title>
		<link>https://blog.exxeta.com/2020/06/17/statische-codeanalyse-xanitizer-und-rips-im-vergleich/</link>
					<comments>https://blog.exxeta.com/2020/06/17/statische-codeanalyse-xanitizer-und-rips-im-vergleich/#respond</comments>
		
		<dc:creator><![CDATA[Sebastian Schwegler]]></dc:creator>
		<pubDate>Wed, 17 Jun 2020 07:14:06 +0000</pubDate>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[rips]]></category>
		<category><![CDATA[sast]]></category>
		<category><![CDATA[xanitizer]]></category>
		<guid isPermaLink="false">https://blog.exxeta.com/?p=1856</guid>

					<description><![CDATA[<p>SAST, was für static application security testing steht, ist eine Phase im Software Development Lifecycle (SDL). Ziel dieser Phase ist es, frühzeitig Sicherheitslücken in Softwarecode zu erkennen, sodass diese gar nicht erst in nachgelagerte Systeme gelangen. Neben der statischen Analyse wird auch noch die dynamische Analyse praktiziert, diese setzt jedoch ein lauffähiges Programm voraus.SAST ist [&#8230;]</p>
<p>Der Beitrag <a rel="nofollow" href="https://blog.exxeta.com/2020/06/17/statische-codeanalyse-xanitizer-und-rips-im-vergleich/">Statische Codeanalyse: Xanitizer und RIPS im Vergleich</a> erschien zuerst auf <a rel="nofollow" href="https://blog.exxeta.com">EXXETA BLOG</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>SAST, was für <em>static application security testing</em> steht, ist eine Phase im Software Development Lifecycle (SDL). Ziel dieser Phase ist es, frühzeitig Sicherheitslücken in Softwarecode zu erkennen, sodass diese gar nicht erst in nachgelagerte Systeme gelangen. Neben der statischen Analyse wird auch noch die dynamische Analyse praktiziert, diese setzt jedoch ein lauffähiges Programm voraus.</p>



<p>SAST ist im Security-Kontext den Whitebox-Tests zuzuordnen, da der Quellcode zwingend benötigt wird. Dafür wird beim Whitebox-Test allerdings kein laufendes Programm benötigt. Im Gegensatz hierzu setzt die dynamische Analyse (<em>dynamic application security testing</em>) ein laufendes Programm voraus, benötigt dafür aber keinen Quellcode.</p>



<p>Statische Codeanalyse lässt sich in verschiedenen Detailstufen durchführen, von einfachen Mustererkennungen (wie zum Beispiel SpotBugs) bis hin zur detaillierten Datenflussanalyse</p>



<p>Um statische Codeanalyse durchführen zu können, muss das eingesetzte Programm den Quellcode auf verschiedene Probleme prüfen. Hierfür haben sich verschiedene Techniken wie die Datenflussanalyse in Kombination mit der Taint-Analyse etabliert. Dort wird die Aufrufhierarchie des Quellcodes analysiert und mit einer weiteren Information angereichert: An welchem Punkt gelangen möglicherweise kritische Eingaben in eine Anwendung und wie werden diese Eingaben weiterverarbeitet.</p>



<pre class="crayon-plain-tag">@RestController
public class RestController{
    @Autowired
    private databaseService;
@GetMapping("/login")
public boolean login(@RequestParam(value="username", default="") String username, @RequestParam(value="password", default="") String password) {
    return databaseService.checkCredentials(username, password);
}
}</pre>



<p>Somit ergibt sich für die statische Codeanalyse der Vorteil (im Vergleich zur dynamischen Analyse), dass das Verfahren schnell, einfach und automatisiert durchführbar ist. So ist SAST ideal für tägliche Tests, zum Beispiel während eines <em>nightly builds</em>, geeignet.</p>



<p>Allerdings sollten bei der Auswahl eines SAST-Tools einige Punkte beachtet werden:</p>



<p>&#8211; Das Tool muss die zu untersuchende Sprache unterstützen.<br>&#8211; Welche Arten von Schwachstellen kann das Tool erkennen und welche Arten von Schwachstellen sind im Projekt besonders wichtig?<br>&#8211; Muss der Quellcode in kompilierter Form vorliegen oder kann das Tool auch nur mit reinen .java-Dateien arbeiten?<br>&#8211; Kann das Tool in IDEs integriert werden?<br>&#8211; Lizenzkosten: Freeware, per-User usw.</p>



<h2>Bewertungskriterien</h2>



<p>Zwei der bekanntesten Tools für statische Codeanalyse sind Xanitizer und RIPS. Um eine möglichst realitätsnahe Bewertung der Tools vornehmen zu können, sollen verschiedene Problemstellungen aus der Praxis analysiert werden. Dazu zählen konkret SQL-Injection, Cross-Site-Scripting und NoSQL-Injection. Alle drei Problemstellungen werden in verschiedenen „Schwierigkeitsgraden“ ausgeführt. So werden SQL-Injections als einfache Query mit Stringkonkatenation von Nutzereingaben, als PreparedStatement mit Stringkokatenation von Nutzereingaben sowie als korrektes PreparedStatement getestet werden. Zudem wird getestet, wie gut die Software-Tools selbst geschriebene Sanitizer bewerten können. Hierzu wird ein eigens entwickelter Sanitizer (welcher nicht alle schädlichen Zeichen korrekt entfernt) eingesetzt. Die Software sollte erkennen, dass hier keine korrekte Bereinigung durchgeführt wird.</p>



<p>Für Cross-Site-Scripting soll sowohl persistentes als auch reflektiertes Cross-Site-Scripting getestet werden. Es sollen Nutzerkommentare in eine Datenbank gespeichert werden. Auch hier soll zusätzlich ein unvollständiger Sanitizer zum Einsatz kommen.</p>



<h2>Ergebnisse</h2>



<p>Sowohl Xanitizer als auch RIPS haben alle eingebauten Schwachstellen korrekt erkannt. Unvollständige Sanitizer haben beide Tools nicht erkannt, da sie aber die betreffenden Methodenaufrufe als Schwachstelle erkannt haben, fällt dies nicht sonderlich schwer ins Gewicht. Auch das reflektierte Cross-Site-Scripting haben beide Tools erkannt. Somit haben beide Tools alle Schwachstellen zuverlässig erkannt und dabei keine false-positives erzeugt. Auch bei der Analyse von echten Projekten erzeugen beide Tools erstaunlich wenige false-positives; false-negatives konnten bisher nicht festgestellt werden</p>



<h2>Analysierbare Sprachen in Xanitizer und RIPS</h2>



<p>Während Xanitizer aktuell nur Java analysieren kann, bietet RIPS zusätzlich die Möglichkeit, PHP zu analysieren. Bei PHP wird eine große Anzahl Frameworks untersützt, sodass auch Erweiterungen für CMS problemlos und zuverlässig analysiert werden können.</p>



<p>Xanitizer bereitet aktuell eine Unterstützung für Javascript vor, ebenso RIPS<em>.</em></p>



<h2>Einrichtung und Nutzung von Xanitizer und RIPS</h2>



<p>Um Xanitizer beziehungsweise RIPS optimal nutzen zu können, können diverse Einstellungen vorgenommen werden. Die Installation der beiden Tools ist sehr einfach. Während Xanitizer als Programm gestartet wird, liefert RIPS ein Installationsskript, das alle Docker-Container von RIPS herunterlädt und entsprechend einrichtet. Auch weitere Anpassungen wie URLs, Ports und Benutzer können später über dieses Installer-Skript einfach und unkompliziert vorgenommen werden.</p>



<h3>SAST mit Xanitizer</h3>



<p>Xanitizer erzeugt zu jedem Projekt einen sogenannten Workspace, in welchem alle relevanten Konfigurationen vorgenommen werden können.</p>



<p>Hierzu zählen unter anderem die Einstiegspunkte in die Applikation, die zu berücksichtigenden Klassen sowie die zu analysierenden Sicherheitsprobleme. Hierbei sollte erwähnt werden, dass Xanitizer ausschließlich mit <em>class</em>-Dateien arbeitet, <em>java</em>-Dateien werden nur für die Quellcodedarstellung der Resultate benötigt. Daher ist für Xanitizer zwingend ein kompilierfähiges Projekt notwendig, es sei denn, das Projekt liegt als fertige JAR/WAR-Datei vor.</p>



<p>Sollte Xanitizer nicht alle Klassen in den Workspace aufgenommen haben, können die entsprechenden <em>include patterns</em> im Workspace ergänzt werden. Weiterhin können nicht benötigte Klassen, wie zum Beispiel Unit-Tests, entfernt werden.</p>



<p>Anschließend kann der Call-Graph berechnet werden. Falls in diesem Schritt nicht alle Einstiegspunkt in die Anwendung gefunden wurden, können diese über konfigurierbare Patterns in den Einstellungen des Workspaces nachgetragen werden. Es können viele Parameter definiert und etwa Methodennamen, Parameter, Rückgabewert oder Annotations konfiguriert werden. Anschließend kann die Analyse der Sicherheitslücken beginnen. Hierfür transformiert Xanitizer den Quellcode zunächst in eine von Xanitizer entwickelte Zwischensprache, um die Analyse zu vereinfachen und später neue Sprachen einfacher integrieren zu können. Nach diesem Schritt meldet Xanitizer, welche Sicherheitslücken gefunden wurden. Hier können nun eigene Sanitizer oder false positives markiert werden, sodass diese bei der nächsten Analyse nicht mehr beachtet werden. Findings können kategorisiert und mit Kommentaren versehen werden, sodass auch mehrere Personen an einem Projekt arbeiten können.</p>



<p>Für automatisierte Workflows steht ein Headless-Mode zur Verfügung. In diesem läuft Xanitizer ohne GUI, benötigt aber einen korrekt konfigurierten Workspace. So kann Xanitizer regelmäßig ausgeführt werden, zum Beispiel während Nightly-Builds oder in CI/CD-Pipelines auf einem Buildserver.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="411" height="431" src="https://blog.exxeta.com/wp-content/uploads/2020/06/Xanitizer.png" alt="" class="wp-image-1868" srcset="https://blog.exxeta.com/wp-content/uploads/2020/06/Xanitizer.png 411w, https://blog.exxeta.com/wp-content/uploads/2020/06/Xanitizer-286x300.png 286w" sizes="(max-width: 411px) 100vw, 411px" /><figcaption>Statische Codeanalyse mit Xanitizer</figcaption></figure></div>



<h3>SAST mit RIPS</h3>



<p>Ein weiteres SAST-Tool, welches ähnlich arbeitet wie Xanitizer, ist RIPS. RIPS verfolgt einen anderen Architekturansatz und ist als klassische Client-Server-Architektur aufgebaut: Um Quellcode zu analysieren, verbindet man sich per Browser mit der Web-GUI von RIPS und meldet sich mit seinen Zugangsdaten an.</p>



<p>Anschließend kann ein ZIP-Archiv hochgeladen werden. Im Gegensatz zu Xanitizer benötigt RIPS keine class-Dateien, der normale Quellcode aus der Versionskontrolle reicht somit aus.</p>



<p>Anschließend kann ein Analyseprofil definiert werden, in welchem zu prüfende Sicherheitslücken eingestellt werden können.</p>



<p>Auch in RIPS können eigene Sanitizer, Sources und false positives markiert werden. Anschließend analysiert RIPS das Projekt und zeigt die Ergebnisse nach Kategorien sortiert an. Im Gegensatz zu Xanitizer wird bei RIPS der Quellcode nicht transformiert, es kommt für jede Sprache eine eigens entwickelte Analyse-Engine zum Einsatz. Auch in RIPS können Findings markiert und kommentiert werden.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" width="421" height="431" src="https://blog.exxeta.com/wp-content/uploads/2020/06/RIPS.png" alt="" class="wp-image-1870" srcset="https://blog.exxeta.com/wp-content/uploads/2020/06/RIPS.png 421w, https://blog.exxeta.com/wp-content/uploads/2020/06/RIPS-293x300.png 293w" sizes="(max-width: 421px) 100vw, 421px" /><figcaption>Statische Codeanalyse mit RIPS</figcaption></figure></div>



<h3>Integration in den SDLC</h3>



<p>Sowohl RIPS als auch Xanitizer lassen sich hervorragend in bestehende SDLC eingliedern. So können sie als Jenkins-Plugin oder GitLab-Pipeline eingebunden werden. RIPS bietet zusätzlich noch Plugins für Eclipse und IntelliJ an, sodass Entwickler noch vor einem Commit lokal eine Prüfung durchführen können. Auch können beide Tools als Maven-Goal eingebunden werden. RIPS unterstützt zusätzlich noch Gradle, während Xanitizer noch ANT unterstützt.</p>



<p>Allerdings müssen beide Tools für einen sinnvollen Einsatz im SDLC entsprechend konfiguriert werden, was zumindest anfänglich etwas Zeit in Anspruch nimmt.</p>



<h3>RIPS und Xanitizer im Vergleich</h3>



<p>Die nachfolgende Tabelle fasst die bereits in den vorausgegangenen Ausführungen erläuterten Unterschiede zwischen RIPS und Xanitizer noch einmal zusammen:</p>



<figure class="wp-block-table table-style-v2 is-style-stripes"><table><tbody><tr><td><strong>Aspekt</strong></td><td><strong>RIPS</strong></td><td><strong>Xanitizer</strong></td></tr><tr><td>Architektur</td><td>Client-Server-Architektur</td><td>Einzelanwendung mit optionalem Headless-Mode</td></tr><tr><td>Nutzerverwaltung</td><td>Verschiedene Nutzeraccounts</td><td>Keine Nutzerverwaltung</td></tr><tr><td>Analyse</td><td>Eine Analyse-Engine pro Sprache</td><td>Transformation in Zwischensprache</td></tr><tr><td>Integration in CI/CD</td><td>Jenkins, SonarQube, Gitlab, Bitbucket, Bamboo, Drone, TeamCity, CircleCI, TravisCI</td><td>Jenkins, SonarQube, DefectDojo, Jackhammer, Command Line</td></tr><tr><td>Integration in Build</td><td>Maven, Gradle</td><td>Maven, Ant</td></tr><tr><td>Unterstützte Sprachen</td><td>Java, PHP</td><td>Java, Javascript (ab Version 5.0)</td></tr><tr><td>Lizenzmodelle</td><td>Einzelnutzer, Mehrbenutzer, Mehrbenutzer mit mehreren Anwendungen</td><td>Tages-, Wochen-, Jahreslizenz mit Abstufungen in Maschinen-, Floating- und Firmenweite Lizenz</td></tr><tr><td>Lizenzkosten</td><td>Auf Anfrage</td><td>400 EUR (Tageslizenz) bis 14.000 EUR (Floating-Jahreslizenz), Firmenlizenz auf Anfrage</td></tr></tbody></table></figure>



<h2>Fazit</h2>



<p>Statische Codeanalyse eignet sich hervorragend, um bereits in der Entwicklungsphase einer Software mögliche Schwachstellen zu erkennen und noch vor einer Auslieferung in die Produktivumgebung zu beheben. Hier unterstützt RIPS besonders mit einem Plugin für gängige IDEs. Sowohl RIPS als auch Xanitizer bieten eine gute Integration in die Versionsverwaltung. Das Markieren von false-positives funktioniert bei beiden Tools einwandfrei und beide Tools können diese Markierungen auch beim Zusammenführen von Branches der Versionskontrolle beibehalten.</p>



<p>Allerdings hat SAST einen entscheidenden Nachteil: Der Code wird nicht ausgeführt, sodass anhand verschiedener Heuristiken entschieden werden muss, ob eine potentielle Sicherheitslücke vorliegt, oder nicht. Dadurch kann vor allem in der Einführungsphase eines solchen Tools ein erhöhter Aufwand entstehen, da möglicherweise etliche false-positives markiert werden müssen. Dieser Aufwand sollte auf jeden Fall erbracht werden, da nur so eine sinnvolle Nutzung von SAST möglich ist, denn: <strong>Wenn ein Softwareentwickler ein Security-Tool als lästig empfindet, wird er es nicht benutzen oder die vielen Findings nicht beachten.</strong></p>



<p>Weiterhin stellen Bibliotheken und Frameworks eine Hürde für SAST-Tools dar, da sich hier häufig Aufrufhierarchien ändern oder der Quellcode teilweise gar nicht vorliegt (meist bei selbst entwickelten Frameworks) und somit keine verlässliche Aussage getroffen werden kann, ob hier sicherheitsrelevante Methoden oder ähnliches aufgerufen werden.</p>



<p>Daher sollte SAST immer mit einer dynamischen Analyse kombiniert werden, um möglichst viele Schwachstellen einer Anwendung erkennen zu können.</p>
<p>Der Beitrag <a rel="nofollow" href="https://blog.exxeta.com/2020/06/17/statische-codeanalyse-xanitizer-und-rips-im-vergleich/">Statische Codeanalyse: Xanitizer und RIPS im Vergleich</a> erschien zuerst auf <a rel="nofollow" href="https://blog.exxeta.com">EXXETA BLOG</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.exxeta.com/2020/06/17/statische-codeanalyse-xanitizer-und-rips-im-vergleich/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>So sorgen Sie für mehr Sicherheit im Software Development Lifecycle</title>
		<link>https://blog.exxeta.com/2019/08/19/so-sorgen-sie-fuer-mehr-sicherheit-im-software-development-lifecycle/</link>
					<comments>https://blog.exxeta.com/2019/08/19/so-sorgen-sie-fuer-mehr-sicherheit-im-software-development-lifecycle/#respond</comments>
		
		<dc:creator><![CDATA[Javan Rasokat]]></dc:creator>
		<pubDate>Mon, 19 Aug 2019 11:53:21 +0000</pubDate>
				<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">https://blog.exxeta.com/?p=1509</guid>

					<description><![CDATA[<p>SDLC steht für Software Development Lifecycle (dt. Software-Lebenszyklus). Ein SDLC ist im Wesentlichen eine Reihe von Schritten oder Phasen, die einen Rahmen für die Entwicklung von Software und deren Verwaltung über den gesamten Lebenszyklus bieten. Obwohl es nicht nur eine Technik oder Möglichkeit gibt, Anwendungen und Softwarekomponenten zu entwickeln, gibt es etablierte Methoden, die von [...]</p>
<p>Der Beitrag <a rel="nofollow" href="https://blog.exxeta.com/2019/08/19/so-sorgen-sie-fuer-mehr-sicherheit-im-software-development-lifecycle/">So sorgen Sie für mehr Sicherheit im Software Development Lifecycle</a> erschien zuerst auf <a rel="nofollow" href="https://blog.exxeta.com">EXXETA BLOG</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>Dieser Artikel ist auch auf Englisch verfügbar: <a href="https://blog.exxeta.com/en/2019/08/19/helpful-aspects-for-securing-the-software-development-lifecycle/" target="_blank" rel="noreferrer noopener" aria-label="https://blog.exxeta.com/en/2019/08/19/helpful-aspects-for-securing-the-software-development-lifecycle/ (öffnet in neuem Tab)">https://blog.exxeta.com/en/2019/08/19/helpful-aspects-for-securing-the-software-development-lifecycle/</a></em></p>



<p>SDLC steht für Software Development Lifecycle (dt. Software-Lebenszyklus). Ein SDLC ist im Wesentlichen eine Reihe von Schritten oder Phasen, die einen Rahmen für die Entwicklung von Software und deren Verwaltung über den gesamten Lebenszyklus bieten. Obwohl es nicht nur eine Technik oder Möglichkeit gibt, Anwendungen und Softwarekomponenten zu entwickeln, gibt es etablierte Methoden, die von Unternehmen verwendet werden und Modelle, um unterschiedliche Herausforderungen und Ziele zu bewältigen. Diese Methoden und Modelle basieren typischerweise auf einer Norm, wie beispielsweise ISO/IEC 12207, die Richtlinien für die Entwicklung, Beschaffung und Konfiguration von Softwaresystemen festlegt.</p>



<p>Um ein qualitativ hochwertiges Softwareprodukt zu entwickeln, das die Anforderungen des Kunden oder des Endverbrauchers erfüllt, müssen Unternehmen den für sie besten Software Development Lifecycle wählen. Es gibt unterschiedliche SDLC’s. Die Wahl des SDLC variiert von Unternehmen zu Unternehmen. Jedes Unternehmen hat seine eigenen Verfahren und Richtlinien, die sich auch in Bezug auf die Anforderungen und die Infrastruktur unterscheiden. Ein Softwareentwicklungsprozess beschreibt eine theoretische und konzeptionelle Darstellung der Softwareentwicklung. Die Softwareentwicklung durchläuft eine Reihe von verschiedenen Phasen wie Anforderungsanalyse, Designspezifikation, Programmierung, Test und Wartung. Mit Hilfe von Entwicklungsprozessen können Unternehmen die Arbeit effizient aufteilen, verschiedene Aktivitäten dem Softwareentwicklungsteam zuordnen, Budgets und Termine oder den Zeitraum schätzen. Um auf dem globalen Markt konkurrenzfähig zu sein, haben in den letzten vier Jahrzehnten die Unternehmen und Organisationen verschiedene Softwareentwicklungsprozesse wie Wasserfall, Spiralmodell, “Rapid Prototyping”, Agilität und weitere praktiziert. (JAGLI &amp; Yeddu, 2017)</p>



<h2>Secure SDLC</h2>



<p>Ein sicherer SDLC ist für Unternehmen aller Branchen von entscheidender Bedeutung. Schwache oder gar keine Sicherheitspraktiken führen zu unsicherem und verwundbarem Code. Durch die Integration von Aktivitäten, welche die Sicherheitspraktiken beschreiben, kann die Architektur verbessert werden. Synonym für Secure SDLC ist der sichere Software-Lebenszyklus, auch bekannt als S-SDLC. Außerdem gibt es noch das bekannte Secure Development Lifecycle (SDL)-Framework von Microsoft, auf das wir ebenfalls verweisen.</p>



<p>Eine stärkere Fokussierung auf die Anwendungssicherheit ist wirtschaftlich sinnvoll. Dies betrifft nicht nur die nun aufgezeigten, recht hohen Kosten, die ein IT-Sicherheitsvorfall verursacht, sondern hilft auch, den Unternehmenswert zu steigern. Es ist bekannt, dass die erst späte Behebung von Schwachstellen im SDLC zu höheren IT-Ausgaben und Opportunitätskosten führt.</p>



<p>Von verschiedenen Unternehmen wurden mehrere Herausforderungen im Rahmen des SDLC beobachtet. Einige dieser Beobachtungen sind:</p>



<ul><li>&#8211; Laut eines Sicherheitsberichtes von Microsoft waren etwa 10% der bis Oktober 2016 offenbarten Schwachstellen auf Betriebssysteme (OS) und die anderen 90% auf die Anwendungsebene ausgerichtet.</li><li>&#8211; Der IBM Internet Security Systems X-Force-Bericht 2016 ergab, dass nur 11% aller im Jahr 2008 offenbarten Schwachstellen zu den fünf führenden Softwareanbietern (Microsoft, Oracle, IBM, Apple und Cisco) gehören.</li><li>&#8211; Das National Institute of Standards &amp; Technology (NIST) schätzt, dass Code-Fixes, die nach der Veröffentlichung durchgeführt werden, 30 Mal mehr kosten als die Code-Fixes, die während der Designphase durchgeführt werden.</li><li>&#8211; Das NIST schätzt, dass 92% aller Sicherheitsvorfälle auf Softwareprobleme zurückzuführen sind.</li><li>&#8211; Ein Bericht von Cigitial zeigt, dass die Ursachen für Schwachstellen in der Anwendungssicherheit fast gleichmäßig auf Programmierfehler und Designfehler verteilt sind.</li></ul>



<p>Diese Ergebnisse zeigen, wie stark die Anwendungsebene von Angriffen betroffen ist.</p>



<p>Eine solide SDLC-Strategie bietet qualitativ hochwertige Software, weniger Schwachstellen, sowie besser eingesetzte Zeit und Ressourcen. Eine Strategie hilft bei der Entwicklung und Wartung von Software. Tools ermöglichen die Integration automatisierter Sicherheitstests in den SDLC-Prozess.</p>



<figure class="wp-block-image"><img loading="lazy" width="1024" height="200" src="https://blog.exxeta.com/wp-content/uploads/2019/08/EXXETA_Blog_Rasokat_SecureSDLC-1-1024x200.png" alt="" class="wp-image-1485" srcset="https://blog.exxeta.com/wp-content/uploads/2019/08/EXXETA_Blog_Rasokat_SecureSDLC-1-1024x200.png 1024w, https://blog.exxeta.com/wp-content/uploads/2019/08/EXXETA_Blog_Rasokat_SecureSDLC-1-300x59.png 300w, https://blog.exxeta.com/wp-content/uploads/2019/08/EXXETA_Blog_Rasokat_SecureSDLC-1-768x150.png 768w, https://blog.exxeta.com/wp-content/uploads/2019/08/EXXETA_Blog_Rasokat_SecureSDLC-1.png 1728w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Abbildung 1: Die Phasen des SDLC (in Anlehnung an Subramanian &amp; M., 2017)</figcaption></figure>



<p>In der Literatur gibt es unterschiedliche Einteilungen der Phasen des SDLC. Diese unterschiedlichen Einteilungen reichen von vier recht allgemein gefassten Phasen bis zu den in der Abbildung 1 gezeigten sechs Phasen. Das liegt daran, dass oftmals die Phasen vier und fünf als “Test und Wartung” zusammengefasst sind. Auch eine Einteilung in sieben Phasen ist möglich. Da der Software-Lebenszyklus als vollständige Endlosschleife betrachtet wird, sind auch die Aktivitäten nach der Bereitstellung, also während des Betriebs, für ein vollständiges Bild sinnvoll. In dieser Grafik wurde die sechste Phase “Betrieb und Wartung” für den Secure SDLC hinzugefügt, um die Sicherheitsmaßnahmen, die nach dem Bereitstellen (Deployment) auftreten, mit aufzunehmen und ein ganzheitliches Bild des Secure SDLC zu vermitteln.</p>



<p>Ein wesentliches Merkmal, das den Secure SDLC vom herkömmlichen Entwicklungsprozess unterscheidet, ist, dass Tests kontinuierlich und automatisiert im gesamten SDLC stattfinden.</p>



<h2>OWASP SAMM</h2>



<p>Zur Entwicklung einer ganzheitlichen Sicherheitsstrategie kann das OpenSAMM Projekt eingesetzt werden. Das OWASP Software Assurance Maturity Model (SAMM) unterstützt den gesamten Software-Lebenszyklus, einschließlich Entwicklung und Beschaffung, und ist technologie- und prozessunabhängig. Es ist bewusst so konzipiert, dass es entwicklungsfähig und risikoorientiert ist (Deleersnyder, Win, &amp; Glas, 2017, S. 2). SAMM definiert die einzelnen Sicherheitsmaßnahmen anhand der Unternehmensfunktionen und kann daher bereits zu Beginn in der Planungsphase verwendet werden, um den Prozess zur kontinuierlichen Verbesserung der Sicherheit phasenübergreifend aufzusetzen (Tatlı, 2012, S. 805).</p>



<figure class="wp-block-image"><img loading="lazy" width="952" height="663" src="https://blog.exxeta.com/wp-content/uploads/2019/08/EXXETA_Blog_Rasokat_SAMM.png" alt="" class="wp-image-1476" srcset="https://blog.exxeta.com/wp-content/uploads/2019/08/EXXETA_Blog_Rasokat_SAMM.png 952w, https://blog.exxeta.com/wp-content/uploads/2019/08/EXXETA_Blog_Rasokat_SAMM-300x209.png 300w, https://blog.exxeta.com/wp-content/uploads/2019/08/EXXETA_Blog_Rasokat_SAMM-768x535.png 768w" sizes="(max-width: 952px) 100vw, 952px" /><figcaption>Abbildung 2: Sicherheitsmaßnahmen innerhalb der Unternehmensfunktionen (Deleersnyder u. a., 2017, S. 3)</figcaption></figure>



<p>Abbildung 2 veranschaulicht die Unternehmensfunktionen nach SAMM und die jeweiligen Sicherheitsmaßnahmen. Die vier Geschäftsfunktionen (Governance, Construction, Verification und Operations) befinden sich in der höchsten Ebene. In jeder Geschäftsfunktion sollen bestimmte Sicherheitsmaßnahmen umgesetzt werden, um ein bestimmtes Sicherheitsniveau in dieser Geschäftsfunktion zu erreichen. Unter jeder Geschäftsfunktion gibt es drei „Security Practices“. (Tatlı, 2012, S. 805)</p>



<h2>Phasen des Secure SDLC</h2>



<p>Dieses Kapitel orientiert sich an den Phasen des Secure Development Lifecycle. In den nun folgenden Unterkapiteln werden die einzelnen Phasen erklärt und jeweils die Maßnahmen zur Integration von Sicherheit erläutert.</p>



<h3>Phase 1: Anforderungsanalyse (Requirement Analysis)</h3>



<p>Der erste Schritt ist die Abbildung eines Planungsprozesses. Während dieser Phase muss ein Unternehmen das Release-Thema, den Inhalt und die Zeitleiste identifizieren. Dazu gehören typischerweise Aktivitäten wie das Sammeln von Endbenutzeranforderungen, das Bestimmen von User Stories, die in das Release aufgenommen werden sollen, und das Planen von Release-Phasen.</p>



<p>Zu den Schlüsselaspekten in dieser Phase gehört das Sicherstellen, dass eine Anwendung den Geschäftsanforderungen entspricht.</p>



<h4>Festlegung der Security &amp; Privacy Anforderungen</h4>



<p>Die Notwendigkeit, Sicherheit und Datenschutz zu berücksichtigen, ist ein grundlegender Aspekt bei der Entwicklung sicherer Anwendungen und Systeme. Unabhängig von der verwendeten Entwicklungsmethodik müssen die Sicherheitsanforderungen kontinuierlich aktualisiert werden, um Änderungen der erforderlichen Funktionalität und Änderungen der Bedrohungslandschaft Rechnung zu tragen. Der optimale Zeitpunkt für die Definition der Sicherheitsanforderungen liegt natürlich bereits in der ersten Entwurfs- und Planungsphase, da Entwicklungsteams die Sicherheit so integrieren können, dass Störungen minimiert werden. Zu den Faktoren, die die Sicherheitsanforderungen beeinflussen, gehören die gesetzlichen und branchenspezifischen Anforderungen, Standards wie Verschlüsselungsverfahren, die Überprüfung früherer Vorfälle und bekannte Bedrohungen. (Microsoft, 2019b)</p>



<h3>Phase 2: Designspezifikation (Design)</h3>



<p>Ganz im Gegensatz zum Prinzip „Security by Design“ wird Sicherheit bei der Entwicklung von Anwendungen häufig vernachlässigt. Dabei können durch die Designphase laut Gartner bis zu 50% der Schwachstellen vermieden werden (Stackpole &amp; Oksendahl, 2010, S. 199).</p>



<p>Während der Designphase werden Architektur und Design der Lösung mit Hilfe von Threat Modeling-Techniken überprüft. Für jede der Komponenten sollten Bedrohungsakteure und mögliche Bedrohungsszenarien aufgezählt werden. Beispielsweise könnte ein Bedrohungsszenario ein mögliches Problem der Datenintegrität sein, da es keine Authentifizierungskontrollen auf dem Gerät gibt. Nach der Aufzählung der Bedrohungen können Gegenmaßnahmen bewertet und empfohlen werden.</p>



<p>Zu den Schlüsselaspekten in dieser Phase gehören:</p>



<ul><li>&#8211; Das Engagement in der Bedrohungsmodellierung und im Sicherheitsdesign</li><li>&#8211; Die Wahl der Programmiersprachen, Frameworks und der Bibliotheken, die im Entwicklungsprozess verwendet werden sollen</li></ul>



<h4>Bedrohungsmodellierung (engl. Threat Modeling)</h4>



<p>Threat Modeling ist ein Prozess, mit dem potenzielle Bedrohungen aus der Sicht eines hypothetischen Angreifers identifiziert, aufgezählt und priorisiert werden können. Microsoft bietet als Hilfsmittel kostenfrei das Microsoft Threat Modeling Tool an.</p>



<p>Das Threat Modeling Tool ist ein Kernelement im Microsoft Security Development Lifecycle (SDL). Es ermöglicht Softwarearchitekten, potenzielle Sicherheitslücken früh zu identifizieren und zu entschärfen, wenn sie relativ einfach und kostengünstig gelöst werden können. (Microsoft, 2019a)</p>



<h4>Security Design Review (SDR)</h4>



<p>Ein SDR ist eine detaillierte Analyse der wichtigsten Systeme mit Blick auf die Gesamtsystemsicherheit. Dazu gehört beispielsweise die Einhaltung von Best Practices. Werden zum Beispiel Authentifizierungsverfahren mit Standards wie OAuth umgesetzt und Schutzmechanismen wie 2-Faktor unterstützt und werden technische Schutzmechanismen, wie die OWASP Proactive Controls, von Beginn an in die Applikationsarchitektur integriert, entstehen in der Implementierungsphase weniger Fehler (Stackpole &amp; Oksendahl, 2010, S. 199).</p>



<h3>Phase 3: Implementierung (Development)</h3>



<p>Diese Phase umfasst die eigentliche Entwicklung und die Erstellung der Anwendung – bei gleichzeitiger Erfüllung aller in der Planungsphase festgelegten Anforderungen.</p>



<p>Zu den Schlüsselaspekten in dieser Phase gehören:</p>



<ul><li>&#8211; Die Schulung von Entwicklern in sicherer Programmierung</li><li>&#8211; Das Auffinden und Beheben von Fehlern und Sicherheitsschwachstellen im Code während des Schreibens</li><li>&#8211; Die Open-Source-Komponenten auf sichere Weise nutzen</li></ul>



<h4>Statische Codeanalyse</h4>



<p>Eine wichtige Sicherheitsmaßnahme ist die statische Codeanalyse. Ziel ist es, den Quellcode nach unsicheren Methoden, wie veralteten Hashing-Algorithmen oder ungeprüften Benutzereingaben, zu untersuchen. Unter anderem mit Hilfe von Pattern Matching können Schwachstellen im Quellcode erkannt werden. Es gibt zahlreiche Tools, die statische Codeanalysen auch vollautomatisch im CI/CD-Build-Prozess durchführen. Bereits in der Entwicklungsumgebung (IDE) können statische Codeanalysetools wie .NET Security Code Scan unterstützen.</p>



<h4>Code Review</h4>



<p>Beim Code-Review wird ein Programmabschnitt nach oder während der Entwicklung von einem (Peer Review) oder mehreren Gutachtern (Mehr-Augen-Prinzip) Korrektur gelesen, um mögliche Fehler, Vereinfachungen oder Testfälle zu finden. Code Reviews sind ein etabliertes und adäquates Mittel der Softwareentwicklung. Ziel dieser Sicherheitsmaßnahme ist die Einhaltung von Secure Coding Guidelines, die beispielsweise durch Secure Coding Schulungen vermittelt werden, zu überprüfen. Von OWASP gibt es als nützliches Hilfsmittel die OWASP Secure Coding Praktiken und das OWASP Code Review Projekt.</p>



<h3>Phase 4: Test (Testing)</h3>



<p>Während dieser Phase testet das Team den Code anhand der Anforderungen, um sicherzustellen, dass das Produkt diese erfüllt und wie erwartet funktioniert. Die vierte Phase umfasst die Durchführung aller Arten von Leistungs-, Qualitätssicherungs- und Funktionstests sowie nicht-funktionale Tests, wie z. B. UX-Tests. Während das Testen traditionell nach der Entwicklungsphase stattgefunden hat, gehen Unternehmen, die einen Best-Practice-Ansatz verfolgen, zu kontinuierlichen automatisierten Tests im gesamten SDLC über.</p>



<p>Zu den Schlüsselaspekten in dieser Phase gehören:</p>



<ul><li>&#8211; Das Testen der Anwendung anhand von Sicherheitsrichtlinien mit verschiedenen Testmethoden, darunter statische, dynamische, Software-Zusammensetzungsanalyse und manuelle Penetrationstests</li><li>&#8211; Die Durchführung eines umfassenden Spektrums von Leistungs-, Funktions-, Einheits- und Integrationstests unter Verwendung der gleichen Sprache und Protokolle der zu testenden Systeme</li><li>&#8211; Das Hinzufügen von Sicherheitstests als Teil der abschließenden Qualitätsprüfungen</li></ul>



<h4>Security Test Cases</h4>



<p>Zu den Security Test Cases gehört das Prüfen von bestimmten Testfällen, die auch ein Angreifer anwenden würde. Hilreiches Material liefert hierzu der OWASP Testing Guide und die OWASP Cheat Sheets. Damit können per Checkliste häufige Angriffe ausprobiert und abgearbeitet werden. Ein Beispielhafter Testfall wäre die Schwachstelle “Error Handling: Disclosure of sensitive informations”. Diese Schwachstelle tritt dann auf, wenn Fehler in der Applikation provoziert werden. Ein weiterer Testfall ist das Ausspähen von eingesetzten Bibliotheken (auch Footprinting/Banner Grabbing genannt) und die darauf aufbauene Untersuchung nach bereits gemeldeten CVE (Common Vulnerabilities and Exposures) Einträgen.</p>



<h4>Dynamische Analysen</h4>



<p>Mittels Vulnerability Scanning-Tools und Fuzzing-Angriffen kann automatisiert die Applikation von außen angegriffen werden. Schwachstellenscanner wie OWASP ZAP und w3af können die laufende Anwendung angreifen. Diese Scanner verwenden verschiedene Angriffsvektoren und geben sie als Benutzereingaben ein (Fuzzing), die dann von der Anwendung verarbeitet werden. Mithilfe von Scanning Tools wie der OWASP ZAP API oder dem Netsparker können dynamische Analysen automatisiert in den Entwicklungsprozess eingebaut werden.</p>



<h3>Phase 5: Bereitstellung (Deployment)</h3>



<p>In der Release-Phase setzt ein Team die Software auf Produktionsservern ein. Dazu gehört das Bündeln, Verwalten und Bereitstellen mehrerer komplexer Releases in verschiedenen Umgebungen, einschließlich privater Rechenzentren und Clouds, sowie Public Cloud-Ressourcen.</p>



<p>Zu den Schlüsselaspekten in dieser Phase gehören:</p>



<ul><li>&#8211; Die Überwachung des Fortschritts eines Releases und seiner Komponenten</li><li>&#8211; Weg von manuellen Freigabeprozessen hin zu einem automatisierten Prozess, bei dem die Freigabe von Software auf einer Geschäftsentscheidung basiert</li><li>&#8211; Das Erstellen von Sicherheitstests als Teil der abschließenden Qualitätsprüfungen</li></ul>



<h4>Final Security Review (FSR)</h4>



<p>Da sich das Produkt dem Fertigstellungszeitpunkt nähert, muss eine wichtige Frage beantwortet werden: Ist das Produkt aus Sicherheits- und Datenschutzsicht einsatzbereit? Ziel des Final Security Review (FSR) ist es, diese Frage zu beantworten. Das FSR wird vom zentralen Sicherheitsteam durchgeführt und ist ein kritischer Teil des Secure SDLC. Ein hilfreiches Mittel ist ein unabhängiger Penetration Test, welcher von einem externen Dienstleister ausgeführt werden kann.</p>



<h4>Application Security &amp; Monitoring Response Plan</h4>



<p>Bestandteil dieser Sicherheitsmaßnahme ist die Erstellung eines Incident Response Plan (IRP) und die Implementierung eines Incident Response and Management System (IRMS). Ein IRP ist eine Reihe von Anweisungen, die das IT-Team bei der Erkennung, Reaktion auf und Wiederherstellung von Sicherheitsvorfällen unterstützen. Die Informationen des Unternehmens, und damit auch seine Reputation, können durch eine Infrastruktur eingedämmt werden, für welche eine Reaktion auf Störungen entwickelt und implementiert wird. Dies kann zum Beispiel durch Pläne, definierte Rollen, Training, Kommunikation erfolgen, um einen Angriff schnell zu entdecken und den Schaden effektiv einzudämmen. So kann die Anwesenheit des Angreifers beseitigt und die Integrität des Netzwerks und der Systeme wiederhergestellt werden. Angegliedert an das Risikomanagement kann ein Incident Response and Management System (IRMS) implementiert werden.</p>



<h3>Phase 6: Betrieb und Wartung (Operations and Maintenance)</h3>



<p>Während dieser Phase befindet sich ein Produkt in der Produktion und wird von den Kunden genutzt. Die Überwachung der Leistung und der Benutzererfahrung der Anwendung ist entscheidend für die kontinuierliche Verbesserung. Ein Unternehmen stellt sicher, dass Betriebsdaten Entwicklern und Testern zur Verfügung gestellt werden.</p>



<p>Zu den Schlüsselaspekten in dieser Phase gehören:</p>



<ul><li>&#8211; Die fortlaufende Prüfung und Überwachung von Anwendungen in der Produktion.</li><li>&#8211; Die Neubewertung von Anwendungen hinsichtlich Leistung, Sicherheit und Benutzerfreundlichkeit, sobald diese aktualisiert oder geändert werden.</li></ul>



<h4>Incident Forensics</h4>



<p>Incident Forensics beinhaltet unter anderem, die Vorgehensweise eines Angreifers Schritt für Schritt zurückzuverfolgen und die forensische Analyse möglicher Sicherheitsverletzungen. Im Falle eines Cyberangriffes geht es darum, Beweismittel gerichtsverwertbar zu sichern und aufzubereiten. Im Ernstfall helfen nicht kompromittierte Logfiles, um den Angreifer aufzugreifen.</p>



<h4>Security Monitoring</h4>



<p>Beim Security Monitoring geht es darum, die potentiellen Bedrohungen zu erkennen, bevor es zu bedrohlichen Einbrüchen kommt. Dazu werden Ereignisdaten aus unterschiedlichen operativen Ebenen gesammelt und in Echtzeit analysiert. Auf Applikationsebene kann der OWASP AppSensor integriert werden. Dieser Verteidigungsmechanismus wird als Runtime Application Self-Protection (RASP) bezeichnet. RASP ist eine Sicherheitssoftware, die mit in die Anwendung integriert wird oder an die Umgebung geknüpft ist. So können Angriffe auf Anwendungsebene erkannt und direkt blockiert werden. Da RASP auf Anwendungsebene läuft, hat zum Beispiel AppSensor Einblick über die Vorgänge innerhalb der Anwendung. Das Anwendungsverhalten kann genau analysiert werden. Somit wird ermöglicht, dass in Echtzeit reagiert werden kann.</p>



<p style="background-color:#ffffff" class="has-text-color has-background has-very-light-gray-color">.</p>



<h2>Quellen</h2>



<p>Deleersnyder, S., Win, B. D., &amp; Glas, B. (2017). SOFTWARE ASSURANCE MATURITY MODEL. A GUIDE TO BUILDING SECURITY INTO SOFTWARE DEVELOPMENT, OWASP Foundation. Abgerufen von <a href="https://github.com/OWASP/samm/raw/master/Supporting Resources/v1.5/Final/SAMM_How_To_V1-5_FINAL.pdf" target="_blank" rel="noreferrer noopener" aria-label="https://github.com/OWASP/samm/raw/master/Supporting Resources/v1.5/Final/SAMM_How_To_V1-5_FINAL.pdf (öffnet in neuem Tab)">https://github.com/OWASP/samm/raw/master/Supporting Resources/v1.5/Final/SAMM_How_To_V1-5_FINAL.pdf</a></p>



<p>JAGLI, D., &amp; Yeddu, S. (2017). CloudSDLC: Cloud Software Development Life Cycle. International Journal of Computer Applications, 168, 6–10. <a href="https://doi.org/10.5120/ijca2017914468" target="_blank" rel="noreferrer noopener" aria-label="https://doi.org/10.5120/ijca2017914468 (öffnet in neuem Tab)">https://doi.org/10.5120/ijca2017914468</a></p>



<p>Kesäniemi, A. (2009). Code Analysis. Automatic vs Manual, OWASP Foundation. Abgerufen von <a href="https://www.owasp.org/images/5/53/Ari_kesaniemi_nixu_manual-vs-automatic-analysis.pdf" target="_blank" rel="noreferrer noopener" aria-label="https://www.owasp.org/images/5/53/Ari_kesaniemi_nixu_manual-vs-automatic-analysis.pdf (öffnet in neuem Tab)">https://www.owasp.org/images/5/53/Ari_kesaniemi_nixu_manual-vs-automatic-analysis.pdf</a></p>



<p>Lobačevski, J., &amp; Arteau, P. (2019). Security Code Scan. Security static code analyzers for .NET. Abgerufen von <a href="https://security-codescan.github.io" target="_blank" rel="noreferrer noopener" aria-label="https://security-codescan.github.io (öffnet in neuem Tab)">https://security-codescan.github.io</a></p>



<p>Microsoft. (2019a). Microsoft Threat Modeling Tool. Abgerufen von <a href="https://docs.microsoft.com/de-de/azure/security/azure-security-threat-modeling-tool" target="_blank" rel="noreferrer noopener" aria-label="https://docs.microsoft.com/de-de/azure/security/azure-security-threat-modeling-tool (öffnet in neuem Tab)">https://docs.microsoft.com/de-de/azure/security/azure-security-threat-modeling-tool</a></p>



<p>Microsoft. (2019b). What are the Microsoft SDL practices? Abgerufen von <a href="https://www.microsoft.com/en-us/securityengineering/sdl/practices" target="_blank" rel="noreferrer noopener" aria-label="https://www.microsoft.com/en-us/securityengineering/sdl/practices (öffnet in neuem Tab)">https://www.microsoft.com/en-us/securityengineering/sdl/practices</a></p>



<p>Stackpole, B., &amp; Oksendahl, E. (2010). Security Strategy: From Requirements to Reality. CRC Press. Abgerufen von <a href="https://books.google.de/books?id=ziGJGMhryA0C" target="_blank" rel="noreferrer noopener" aria-label="https://books.google.de/books?id=ziGJGMhryA0C (öffnet in neuem Tab)">https://books.google.de/books?id=ziGJGMhryA0C</a></p>



<p>Subramanian, S., &amp; M., B. S. (2017). Security Assurance in the SDLC for the Internet of Things. Secure SDLC Steps to Address Common Coding Flaws and Software Vulnerabilities. Abgerufen von <a href="https://www.isaca.org/Journal/archives/2017/Volume-3/Pages/security-assurance-in-the-sdlc-for-the-internet-of-things.aspx" target="_blank" rel="noreferrer noopener" aria-label="https://www.isaca.org/Journal/archives/2017/Volume-3/Pages/security-assurance-in-the-sdlc-for-the-internet-of-things.aspx (öffnet in neuem Tab)">https://www.isaca.org/Journal/archives/2017/Volume-3/Pages/security-assurance-in-the-sdlc-for-the-internet-of-things.aspx</a></p>



<p>Tatlı, E. İ. (2012). OWASP Anleitungen und Tools für Secure SDLC. Datenschutz und Datensicherheit &#8211; DuD, 36(11), 805–809. <a href="https://doi.org/10.1007/s11623-012-0276-2" target="_blank" rel="noreferrer noopener" aria-label="https://doi.org/10.1007/s11623-012-0276-2 (öffnet in neuem Tab)">https://doi.org/10.1007/s11623-012-0276-2</a></p>
<p>Der Beitrag <a rel="nofollow" href="https://blog.exxeta.com/2019/08/19/so-sorgen-sie-fuer-mehr-sicherheit-im-software-development-lifecycle/">So sorgen Sie für mehr Sicherheit im Software Development Lifecycle</a> erschien zuerst auf <a rel="nofollow" href="https://blog.exxeta.com">EXXETA BLOG</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.exxeta.com/2019/08/19/so-sorgen-sie-fuer-mehr-sicherheit-im-software-development-lifecycle/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
