{"id":26129,"date":"2024-02-27T06:16:25","date_gmt":"2024-02-27T05:16:25","guid":{"rendered":"https:\/\/blog.mi.hdm-stuttgart.de\/?p=26129"},"modified":"2024-02-27T06:16:28","modified_gmt":"2024-02-27T05:16:28","slug":"ctf-infrastruktur-als-proof-of-concept-in-der-microsoft-azure-cloud","status":"publish","type":"post","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2024\/02\/27\/ctf-infrastruktur-als-proof-of-concept-in-der-microsoft-azure-cloud\/","title":{"rendered":"CTF-Infrastruktur als Proof-of-Concept in der Microsoft Azure Cloud"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Einf\u00fchrung<\/h2>\n\n\n\n<p>Eine eigene Capture-The-Flag (CTF) Plattform zu betreiben bringt besondere Herausforderungen mit sich. Neben umfangreichem Benutzermanagement, dem Bereitstellen und sicherem Hosten von absichtlich verwundbaren Systemen, sowie einer m\u00f6glichst einfachen Methode, spielbare Systeme von externen Quellen einzubinden.<\/p>\n\n\n\n<p>So m\u00f6chte man vielleicht der eigenen Community die M\u00f6glichkeit bieten, eigene Szenarien zu entwickeln, welche im Anschluss in die Plattform integriert werden k\u00f6nnen. Sollte die Plattform dann \u00fcber einen gewissen Zeitraum durch Mitgliederzuwachs weitere Ressourcen ben\u00f6tigen, bietet sich eine schnelle und flexible Anpassung der Umgebung an. Auch andersherum bietet sich Skalierung in diesem Fall deutlich an, denn sollte man eine Plattform nur in kleinerem, wom\u00f6glich privatem Kreis betreiben, so w\u00fcrde ein permanentes Bereitstellen aller verwundbaren Szenarien auch ungenutzt Ressourcen verbrauchen.\u00a0<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>CTF Infrastruktur in der Wolke<\/strong><\/h2>\n\n\n\n<p>Um diese M\u00f6glichkeit der Bereitstellung einer CTF-Plattform einmal zu beleuchten, hab ich&nbsp; mich an die Arbeit gemacht und einmal versucht, eine solche Plattform in einem Proof-of-Concept zu erstellen. Das entstandene Projekt tr\u00e4gt keinen Namen und dient eher der Evaluation, als einer tats\u00e4chlichen Umsetzung. Ein wichtiger Hinweis: Dieser Blogpost sollte nicht als eine 1:1 Anleitung f\u00fcr das Hosting einer eigenen Plattform herangezogen werden. Durch das Experimentieren mit verschiedenen Programmiersprachen, der Azure-Cloud und des signifikanten Umfangs eines solchen Vorhabens, ist das hier gezeigte lediglich als eine Art Beispiel zu sehen. Stellen, in welchen man weitere Features implementieren k\u00f6nnte, oder in welchen ich bewusst \u201cAbk\u00fcrzungen\u201d gegangen bin, werden hervorgehoben.&nbsp;<\/p>\n\n\n\n<p>Die urspr\u00fcngliche Idee hatte sich bereits zu Beginn der Vorlesung entwickelt, da diese Thematik durch unser Institut f\u00fcr Cybersicherheit bereits auf die eine oder andere Weise im Fokus stand. Nie jedoch mit dieser \u00dcberlegung einer Azure basierten Plattform.<\/p>\n\n\n\n<p>Durch den gro\u00dfen Umfang eines solchen Projekts musste zuerst eine Roadmap her, welche sich im Laufe des Projekts immer wieder angepasst und ver\u00e4ndert hat. Final wurden folgende Ziele definiert:<\/p>\n\n\n\n<p><em>Benutzerverwaltung<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em>Registration<\/em><\/li>\n\n\n\n<li><em>Login\/Logout<\/em><\/li>\n<\/ul>\n\n\n\n<p><em>Privates Netzwerk f\u00fcr bereits erstellte VMs<\/em><\/p>\n\n\n\n<p><em>Die M\u00f6glichkeit f\u00fcr Benutzer, Maschinen zu \u201cspawnen\u201d<\/em><\/p>\n\n\n\n<p>Auf Hinblick m\u00f6glicher Skalierungsw\u00fcnsche habe ich mich f\u00fcr eine \u201cServerless\u201d Umsetzung entschieden, wodurch ich mir f\u00fcr die geplante Webanwendung, sowie deren Datenbank keinerlei Hardware basierten \u00dcberlegungen stellen muss (<em>beinahe, den Preis sollte man zumindest immer im Auge behalten<\/em>).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Architektur &amp; Tech-Stack<\/strong><\/h2>\n\n\n\n<p>Die erstellte Plattform ist vollst\u00e4ndig in Microsoft Azure gehostet. Hierf\u00fcr werden verschiedene Dienste genutzt. Zun\u00e4chst kann der Spieler \u00fcber einen Browser seiner Wahl auf die Webanwendung, welche serverless als <em>Azure Web App <\/em>gehostet wird. Diese Webapp, geschrieben in Go, stellt eine Verbindung mit einer Datenbank her, in welcher alle notwendigen Informationen \u00fcber die Benutzer und die spielbaren Maschinen gespeichert werden. Als Datenbank-Backend kommt eine Microsoft SQL Database zum Einsatz, welche ebenfalls serverless in Azure verf\u00fcgbar ist. Dar\u00fcber hinaus wird ein kleines privates Netzwerk ben\u00f6tigt, welches keinen Internetzugriff haben darf (hier sind absichtlich verwundbare Systeme im Einsatz). Hierf\u00fcr wurde ein kleines virtuelles Netzwerk (Azure virtual network service &#8211; 10.0.0.0\/28) erstellt. Da sich dieses ebenfalls in der Azure Cloud befindet, kann die Gr\u00f6\u00dfe beliebig angepasst werden. Innerhalb dieses Netzwerks sollen alle gew\u00fcnschten VMs liegen, welche von den Spielern angegriffen werden k\u00f6nnen. Unter Anbetracht der Tatsache, dass man auch von Community-Mitgliedern erstellte Szenarien einbinden k\u00f6nnen m\u00f6chte, habe ich mich gegen die Nutzung von Ansible entschieden. Ansible, welches zum automatischen Deployen von VMs wunderbar genutzt werden kann, kommt in diesem Fall mit einem gro\u00dfen Problem: Jede Maschine, die von Dritten bereitgestellt w\u00fcrde, m\u00fcsste erst auf ein Ansible-Playbook \u201c\u00fcbersetzt\u201d werden. Das Ziel soll es sein, dass jede Person sich ein Szenario \u00fcberlegen und einfach auf ihrem eigenen Computer erstellen kann. Beispielsweise mittels VMware oder VirtualBox eine kleine Linux-VM installieren, Schwachstellen-Pfade erstellen und teilen. Das \u00dcbersetzen in Ansible-Playbooks wird besonders dann problematisch, wenn bestimmte Software-Installationen\/Versionen ben\u00f6tigt werden. Da die VMs innerhalb des privaten Netzwerkes keinerlei Internetzugriff haben d\u00fcrfen, wird eine Installation oder das Patchen zum Problem.<\/p>\n\n\n\n<p>Stattdessen kommt ein Powershell-Script zum Einsatz, welches bestehende Images auf den Azure-Account hochl\u00e4dt und dort dann bei VMs eingebunden werden kann.<\/p>\n\n\n\n<p>Schlussendlich muss es dem Spieler \u00fcber die Webapp m\u00f6glich sein VMs zu starten, bzw. zu stoppen, welche keinen direkten Zugriff auf das private Netzwerk haben. Hierf\u00fcr kommen Azure-Runbooks mit \u00f6ffentlichen Webhooks zum Einsatz.<\/p>\n\n\n\n<p>Im Ablauf sieht es dann also wie folgt aus: Der Benutzer registriert sich\/loggt sich \u00fcber die Webapp ein. Die Webapp verifiziert die Daten mit dem MSSQL Server und steuert den Zugriff. Sobald der Benutzer eingeloggt ist, kann er den Status der verf\u00fcgbaren VMs im Webpanel einsehen und durch das Dr\u00fccken eines Knopfs, via Webhook auf die Runbooks, steuern.<\/p>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" width=\"602\" height=\"533\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2024\/02\/1W6P1Bkn9gH5eO8aNwa_GVnBqVTAIY-sBpe2nChUnG6-8ocNXKbZaEsYrvgOQ7nVoSZa_2czI4ZCDZo4JXrCboOD-Sc8k26Kw1233cB5QR_69lw0Y1Xqg3UTvCm-OvhXKAbeMboDpj46p2b-WinrUY.jpg\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Frontend<\/strong><\/h2>\n\n\n\n<p>F\u00fcr die Webapp kommt Go zum Einsatz. Da ich kein begabter Webentwickler bin, habe ich den visuellen Teil sehr schlicht mit Bootstrap umgesetzt.&nbsp;<\/p>\n\n\n\n<p>Aufgeteilt wurde das Projekt in verschiedene Unterordner.<\/p>\n\n\n\n<p><img decoding=\"async\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2024\/02\/0_1bIOC99ganLZR0MCpwAwZx5MNfV62ppNkZw2FmWnEW9V1bTIRgyWKmJsvSU9vZkxB9E9dcLqwIyKMunjCf8M1JitvVUX1dT-XRu4jvn1DMKiGEMaCk9stqLPcQ8BFWo8o2lc0ewNSe4K5RwnqQmTs.png\" style=\"width: 200px\"><\/p>\n\n\n\n<p>Innerhalb von \u201cControllers\u201d findet sich die eigentliche Logik der Anwendung. Hierbei gibt es, \u00e4hnlich einer REST-API, f\u00fcr jedes \u201cFeature\u201d eine eigene Funktion, mit einem eigenen ansteuerbaren Endpoint.<\/p>\n\n\n\n<p><img decoding=\"async\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2024\/02\/SsR9EQCozEmUQutiuCMs8pV4-gUdpf17GPtCx7RoYNkP8LolqIIYgAPyHyXvnnO5l7SkmIqCe0WarZUU1tnFIYtKZSv1nxjdJ9PBWKOxJU9D26XN_vpeA0EMt1GwNoRdY6_ZxFRUTRfNHbB5yS7p468.png\" style=\"width: 400px\"><\/p>\n\n\n\n<p>F\u00fcr das Routing und diverse andere Features kommt das Gin Framework zum Einsatz.<\/p>\n\n\n\n<p>Der visuelle Teil befindet sich aufgeteilt im Templates-Ordner, wobei die oben genannten Controller auf bestimmte Views verweisen, welche dann wiederum definieren, welche Layouts geladen werden. Auch die Informationsweitergabe an das Frontend erfolgt \u00fcber die Controller, indem Gin bei der Weiterleitung alle in der View verwendbaren Variablen mitsendet:<\/p>\n\n\n\n<p><img decoding=\"async\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2024\/02\/Ztn3xLDe8Tb1qIhZOzF7PjbW8fwSGYhCTNaMb6MW_qU_nS3qqMyEaiye9aYUAIeUKE9sPA6govdmR7Q9_zWznI-gLUomknh7hYE4dRS1BH_2BwpZwaXRA_Fz-g3LNSrCc8eOBsPnhtG8MVsgkyHEkYo.png\" style=\"width: 300px\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Backend<\/strong><\/h2>\n\n\n\n<p>Go erleichtert die Arbeit mit Datenbanken ungemein. Dank gorm (Go object-relation mapping) ist es kinderleicht m\u00f6glich eigene Tabellen zu definieren und einheitlich im Code zu verwenden. Die gew\u00fcnschte Tabelle wird mit allen Feldern in einem struct definiert und beim Start der Anwendung durch einen Aufruf von AutoMigrate auf dem MSSQL Server erstellt. Gew\u00fcnschte Spalteneigenschaften, wie beispielsweise das Festlegen eines Primary Keys werden einfach hinzugeschrieben:<\/p>\n\n\n\n<p><img decoding=\"async\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2024\/02\/PQQ1859RnETV8eLpbqNODUDbgy3OqnI72yaEDAJWtNNAPXnTvKm-FTskFzRjKshrIN4Hb0o1kTWc3qTtoJoIBYYG076KeV7ZrzMlXbpvkorvywApkwLUvhHUdpVPDAiM42K3d3MG38Aw6-X0dKz3M4E.png\" style=\"width: 500px\"><\/p>\n\n\n\n<p>Das Session-Management wird hierbei von Gin zur Verf\u00fcgung gestellt (weitere Informationen hier: <a href=\"https:\/\/github.com\/gin-contrib\/sessions\">https:\/\/github.com\/gin-contrib\/sessions<\/a>)<\/p>\n\n\n\n<p>Damit der Benutzer allerdings noch die Maschinen starten und stoppen kann, bedarf es noch der Azure Runbooks. Runbooks sind Funktionen oder Skripte, welche nur ausgef\u00fchrt werden, wenn sie auch angesteuert werden. In diesem Fall wurden einfach Powershell-Scripte erstellt, welche sich in Azure einloggen, durch die Liste der vorhandenen Virtuellen Maschinen, in der eigenen Ressourcen-Gruppe l\u00e4uft und nach bestimmten Tags sucht. Durch das Festlegen von Tags k\u00f6nnen Maschinen beispielsweise individuell angesteuert werden.<\/p>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" width=\"602\" height=\"177\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2024\/02\/HkdUqtOvFEbZdRFQaVd9LpUF6TaU8VoYhJn2kK0A-rzTGuPjvqiNLsNYpHnMuPZpLr5RFCfTW30d46KxetHLb8mYfYqN_70fqpOvYevgh1bfHZFI_UUKHbqRjDrHQ-b8QG2jXXV6E2zh2W35Rr6gpnk.png\"><\/p>\n\n\n\n<p>Nachdem die Playbooks hochgeladen wurden, m\u00fcssen diese noch ver\u00f6ffentlicht werden. Die hier einmalig angezeigte URL wurde dann schlicht auf einen Button im Frontend gelegt, welcher einen Post-Request an einen internen Endpoint geschickt, welcher dann wiederum einen Post-Request an Azure versendet (wie oben bei den Controllern gezeigt).<\/p>\n\n\n\n<p><img decoding=\"async\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2024\/02\/huqaSJqR-ojSGukQ0xNWkLBTVV0JPsiZFAb_wjmQVOT1YdezAbiW3cVszj61JyFiZWZk_xrboIPC0uFRtHFL3j2VEmPy3AahrUnJtZ79qzKK_o8s-oyG6f_NRXHfs2gOtTEeqMFGMAE2M0CXOw6iL6o.png\" style=\"width: 500px\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>CI\/CD<\/strong><\/h2>\n\n\n\n<p>Selbstverst\u00e4ndlich w\u00e4re es viel zu m\u00fchsam, jedes Mal die Webanwendung manuell auf die Azure-Ressource zu verschieben. Allerdings gibt es unter Azure das Hindernis, dass im Gegensatz zu Python oder .NET die Sprache Go nicht offiziell \u201cunterst\u00fctzt\u201d wird. Nachdem die Web App mit \u201c.NET\u201d erstellt wurde, ist es m\u00f6glich, \u00fcber Github Actions einen automatischen Bau-, Test- und Ver\u00f6ffentlichungsprozess zu starten. Damit die Anwendung dann jedoch auf dem Azure-System laufen kann, ben\u00f6tigt es eine f\u00fcr Windows kompilierte Binary. Zus\u00e4tzlich muss die Azure Web App auch wissen, was es \u00fcberhaupt auszuf\u00fchren hat. Dies wird durch das Bereitstellen einer web.config Datei erreicht (diese wird von Microsoft IIS geladen):<\/p>\n\n\n\n<p><img decoding=\"async\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2024\/02\/e2BRE-AWaH0pPQ7yBBZEo5pigGS7XChkPlwQRIdOqiJlZ40_9hqWR8lcrTYWziFFrxifaNVfCzfbz5wT4ChZnDn1qosPa9XqanBVkr0AXjcoKhptxGwIynF2m4ofv3bGbZxJmiNJjULlVrGZuW7iIkQ.png\" style=\"width: 500px\"><\/p>\n\n\n\n<p>Diese Datei muss im Build Ordner liegen. Zus\u00e4tzlich m\u00fcssen zum Kompilieren alle statischen Dateien wie Templates in den Build Ordner verschoben werden, ansonsten werden diese beim Ausf\u00fchren Go-Datei auf dem Zielserver nicht gefunden.<\/p>\n\n\n\n<p>Das gesamte Playbook definiert also zun\u00e4chst das Zielsystem (Windows), legt dann die Ziel-Go Version fest, kopiert alle statischen Daten, baut die Anwendung, testet die Anwendung (ob eine Verbindung zur serverless Datenbank m\u00f6glich ist) und rollt diese auf Azure aus.<\/p>\n\n\n\n<p><img decoding=\"async\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2024\/02\/xw4ZvE69i3eqi3vIm2I65zF16ZSdLtQBA_UVvyJZFMgSPHrRwNxNcyNQyuYITi8c1EXaBq6R6x3-Kk2Ov9DskJI8rfTHlYhtnVlIaNB6FHYWOJrnVAwFIb0cSXvagHf8o5C_qh7UlO1zqWqyBc3nCho.png\" style=\"width: 500px\"><\/p>\n\n\n\n<p>Wichtig anzumerken an dieser Stelle ist, dass Azure Web-App nach dem Start einen zuf\u00e4lligen Port ausw\u00e4hlt, um die Go-Website zu starten. Dieser Port befindet sich in einer Umgebungsvariable und kann beim Start einfach geladen werden. Um weiterhin in lokales Entwickeln zu erm\u00f6glichen, pr\u00fcft man einfach ob eine Umgebungsvariable gesetzt ist oder nicht:<\/p>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" width=\"314\" height=\"138\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2024\/02\/VcCBLpPWNGy1TFvnbo555BbYxYX47WYdKWb8mMK_sw_QMF9LsvWr9xUt71iyyf8V25ElWuVNczLrUeFNsgu2S9gupWeaxYVjOWei-uTCeSICHlhghu1s4aBPa-gSQqsBq1Yegk7gOdQk7Ti2LexDgk0.png\"><\/p>\n\n\n\n<p>Schlussendlich gibt es noch ein PowerShell-Skript, welches es erm\u00f6glicht, vom eigenen Computer ein VM Image hochzuladen. Azure verlangt hierf\u00fcr jedoch ein .vhd-Image, mit einer \u00e4u\u00dferst bestimmten Gr\u00f6\u00dfe. Das Umwandeln mit Beispielsweise Qemu-img ist also vorher notwendig. Au\u00dferdem verwendet das Skript <em>Az<\/em> Funktionen, entsprechend muss die Az Gallery f\u00fcr Powershell installiert werden, bevor das Skript ausf\u00fchrbar wird.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Vor- und Nachteile<\/strong><\/h2>\n\n\n\n<p>Als klaren Vorteil ist die Skalierbarkeit zu nennen. Kosten k\u00f6nnen hier &#8211; wenn richtig beachtet &#8211; signifikant gesenkt werden. Werden Ressourcen nicht ben\u00f6tigt, kann man diese ausschalten. Da das Bereitstellen von verwundbaren VMs mit sehr hohen Ressourcen verbunden ist (i. d. R. 1-4 vCores und 1-8GB RAM) bietet sich eine Cloud-L\u00f6sung definitiv an. Die Kosten k\u00f6nnen sich jedoch auch schnell zu einem Nachteil entwickeln. Fehlerhafte Konfigurationen im \u00e4u\u00dferst un\u00fcbersichtlichen Azure Panel und die Monatsabrechnung auf der Kreditkarte k\u00f6nnte interessant werden.<\/p>\n\n\n\n<p>Der gr\u00f6\u00dfte Nachteil an diesem Proof-of-Concept ist das verwendete Powershell-Script zum Hochladen bestehender Images. Das Umwandeln ben\u00f6tigt bestimmte Formate und Gr\u00f6\u00dfen und der Prozess dauert. Auch war es mir nicht m\u00f6glich, die Images direkt als VMs zu deployen, oder VM-Templates daraus zu erstellen. Selbst wenn ein vollautomatisiertes Ausrollen gelingen sollte, hat man noch immer den stark limitierenden Faktor der eigenen Upload-Geschwindigkeit. VMs sind oftmals mehrere GB gro\u00df, insbesondere Windows-VMs k\u00f6nnen schnell auf 40 GB oder gr\u00f6\u00dfer wachsen.<\/p>\n\n\n\n<p>Technisch l\u00f6st die Cloud einige Herausforderungen, die auch ich bei der Umsetzung hatte. Beispielsweise war das Ansteuern privater VMs durch die Runbooks \u00e4u\u00dferst einfach, sofern man einmal herausgefunden hat, dass es Runbooks gibt und wof\u00fcr sie genutzt werden k\u00f6nnen. Wie sich im Post zeigt, sind viele Herausforderungen im Laufe des Projekts aufgetaucht, welche dank der Azure-Cloud fast alle gel\u00f6st werden konnten. Die einzigen beiden nicht gel\u00f6sten Probleme sind einerseits die Problematik mit dem Hochladen bestehender Images und das Einbinden von einer eigenen .env Datei f\u00fcr Umgebungsvariablen. Scheinbar gibt es die M\u00f6glichkeit .env Dateien direkt auf die Azure Web App hochzuladen, diese muss jedoch jedes Mal manuell \u00fcber das Azure Panel ausgetauscht werden. Ich habe sie leider nicht einmal zum Laufen bekommen, wodurch Credentials nun in bester Cybersicherheitsmannier im Code stehen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Fazit<\/strong><\/h2>\n\n\n\n<p>Diese M\u00f6glichkeit der Cloud-Nutzung ist definitiv etwas, das jedem CTF-Enthusiasten Freude und Kostenreduzierung bringen kann. Allerdings sind der Aufbau und die Unterteilung in hunderte \u201cUnterprodukte\u201d, gemeinsam mit der fehlenden Kostentransparenz, etwas, das man definitiv im Hinterkopf behalten sollte. Auch wenn beim Erstellen einzelner Ressourcen Sch\u00e4tzwerte f\u00fcr Monatspreise geliefert werden, verliert man jedoch schon nach den ersten Services schnell den \u00dcberblick.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Einf\u00fchrung Eine eigene Capture-The-Flag (CTF) Plattform zu betreiben bringt besondere Herausforderungen mit sich. Neben umfangreichem Benutzermanagement, dem Bereitstellen und sicherem Hosten von absichtlich verwundbaren Systemen, sowie einer m\u00f6glichst einfachen Methode, spielbare Systeme von externen Quellen einzubinden. So m\u00f6chte man vielleicht der eigenen Community die M\u00f6glichkeit bieten, eigene Szenarien zu entwickeln, welche im Anschluss in die [&hellip;]<\/p>\n","protected":false},"author":1189,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[227,150,7,1009,216,50,1010,27],"ppma_author":[1008],"class_list":["post-26129","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-azure","tag-ci-cd","tag-cloud","tag-ctf","tag-golang","tag-infrastructure","tag-powershell","tag-security"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":22923,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2022\/03\/20\/games-aus-der-cloud-wo-sind-wir-und-wohin-geht-die-reise\/","url_meta":{"origin":26129,"position":0},"title":"Games aus der Cloud, wo sind wir und wohin geht die Reise?","author":"Sven Kirsch","date":"20. March 2022","format":false,"excerpt":"Cloud Gaming - fl\u00fcssiges Zocken auch mit schlechter Grafikkarte? (esports.com) Was genau ist Cloud Gaming? Cloud Gaming l\u00e4sst sich mit Remote Desktops, Cloud Computing und Video on Demand Diensten vergleichen. Im Grunde beinhaltet Cloud Gaming das Streamen von Videospielen aus der Cloud zum Endkunden. Dabei erfasst und \u00fcbertr\u00e4gt der Client\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/Cloud-Gaming.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/Cloud-Gaming.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/Cloud-Gaming.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/Cloud-Gaming.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/Cloud-Gaming.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/08\/Cloud-Gaming.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":27464,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2025\/02\/28\/low-code-no-code-in-der-enterprise-software-entwicklung-fluch-oder\/","url_meta":{"origin":26129,"position":1},"title":"Low-Code\/No-Code in der Enterprise-Software-Entwicklung \u2013 Fluch oder Segen?","author":"Antonia Herdtner","date":"28. February 2025","format":false,"excerpt":"Anmerkung:\u00a0Dieser Blogpost wurde f\u00fcr das Modul Enterprise IT (113601a) verfasst. 1. Einleitung Die fortschreitende digitale Transformation erfordert von Unternehmen eine stetige Anpassung ihrer IT-Strategien, um wettbewerbsf\u00e4hig zu bleiben. Traditionelle Softwareentwicklung erfordert jedoch umfangreiche Programmierkenntnisse, lange Entwicklungszyklen und erhebliche finanzielle Ressourcen. Angesichts des Fachkr\u00e4ftemangels in der IT-Branche und des steigenden Bedarfs\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":25735,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2023\/09\/13\/fastchat-your-words-instantly-delivered\/","url_meta":{"origin":26129,"position":2},"title":"FastChat &#8211; Your Words, Instantly Delivered","author":"Michael Dick","date":"13. September 2023","format":false,"excerpt":"Einf\u00fchrung Herzlich willkommen zu unserem Blogbeitrag \u00fcber FastChat, einer neuen Web-Chat-Anwendung, die das Kommunizieren im Internet auf ein neues Level hebt. In diesem Beitrag m\u00f6chten wir euch die Hintergrundgeschichte zu diesem Projekt, unsere Ziele und die Funktionalit\u00e4ten vorstellen, welche wir erfolgreich umgesetzt haben. Tauchen wir ein!\u00a0 Unsere Idee f\u00fcr FastChat\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/W_QwicX4WJDR2dKB4QjdppG7EF6IIhCEhDAhLUwZVqX2aHDevpVSAuBbz3tV3zaTEtIeWbiE3At_usAvJ3fl5Fx3Rohme2aszYrChgGMn6oyTmHH9_6xo1xrIQwnjpvaZ_iFRnKrl0m9L_3o2H3j7wo.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/W_QwicX4WJDR2dKB4QjdppG7EF6IIhCEhDAhLUwZVqX2aHDevpVSAuBbz3tV3zaTEtIeWbiE3At_usAvJ3fl5Fx3Rohme2aszYrChgGMn6oyTmHH9_6xo1xrIQwnjpvaZ_iFRnKrl0m9L_3o2H3j7wo.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/W_QwicX4WJDR2dKB4QjdppG7EF6IIhCEhDAhLUwZVqX2aHDevpVSAuBbz3tV3zaTEtIeWbiE3At_usAvJ3fl5Fx3Rohme2aszYrChgGMn6oyTmHH9_6xo1xrIQwnjpvaZ_iFRnKrl0m9L_3o2H3j7wo.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/W_QwicX4WJDR2dKB4QjdppG7EF6IIhCEhDAhLUwZVqX2aHDevpVSAuBbz3tV3zaTEtIeWbiE3At_usAvJ3fl5Fx3Rohme2aszYrChgGMn6oyTmHH9_6xo1xrIQwnjpvaZ_iFRnKrl0m9L_3o2H3j7wo.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":25800,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2023\/09\/14\/splid-2-0-die-zukunft-des-gemeinsamen-ausgabenmanagements\/","url_meta":{"origin":26129,"position":3},"title":"Splid 2.0 &#8211; Die Zukunft des gemeinsamen Ausgabenmanagements","author":"David Christoph Scheifers","date":"14. September 2023","format":false,"excerpt":"Im Rahmen der Vorlesung \u201cSoftware Development for Cloud Computing\u201d haben wir uns daf\u00fcr entschieden, einen Klon der App Splid auf Basis unterschiedlicher Cloud Technologien als Web App zu entwickeln, um uns so die Grundkenntnisse des Cloud Computings anzueignen. Projektidee Bei gemeinsamen Aktivit\u00e4ten und Gruppenausgaben ist es sehr hilfreich, einfache und\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/image6.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/image6.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/image6.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/image6.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/image6.jpg?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/image6.jpg?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":12032,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2020\/09\/30\/admin-panel-web-app-in-der-aws-cloud\/","url_meta":{"origin":26129,"position":4},"title":"Admin Panel (Web App) in der AWS Cloud","author":"ss447","date":"30. September 2020","format":false,"excerpt":"1. Einleitung Im Rahmen der Vorlesung \u201eSoftware Development for Cloud Computing\u201c haben wir uns als Gruppe dazu entschieden aufbauend auf teilweise bereits vorhandener Codebasis an einem Startup-Projekt weiterzuarbeiten. Der Hauptfokus lag bei uns auf dem Ausbau von DevOps-Aspekten und auf dem eines stabilen und sicheren Systems, welches auch in der\u2026","rel":"","context":"In &quot;Cloud Technologies&quot;","block_context":{"text":"Cloud Technologies","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/scalable-systems\/cloud-technologies\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/img.youtube.com\/vi\/qw9ZkWnvR4M\/0.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":26895,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2025\/02\/22\/parallel-sysplex-wie-ibm-z-kontinuierliche-verfugbarkeit-durch-ras-und-innovationen-des-z16-sicherstellt\/","url_meta":{"origin":26129,"position":5},"title":"Parallel SysPlex: Wie IBM Z kontinuierliche Verf\u00fcgbarkeit durch RAS und Innovationen des z16 sicherstellt","author":"Luca Walz","date":"22. February 2025","format":false,"excerpt":"Note: Dieser Blogpost wurde f\u00fcr das Modul Enterprise IT (113601a) verfasst. Kurzfassung In einer zunehmend digitalisierten Welt ist hohe Verf\u00fcgbarkeit eines Systems essenziell f\u00fcr gesch\u00e4ftskritische Anwendungen. Hierbei erm\u00f6glicht eine, von IBM f\u00fcr das IBM Z-Mainframe entwickelte, Cluster Technologie eine nahezu kontinuierliche Verf\u00fcgbarkeit, welche durch dynamische Lastenverteilung, redundante Architektur und Echtzeit\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"authors":[{"term_id":1008,"user_id":1189,"is_guest":0,"slug":"jeremy-joe_klein","display_name":"jk233","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/05aaeb7d09267b412674ab741c6f8c0152b95e7d66c5fd8367422d99ae793b6d?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/26129","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/users\/1189"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/comments?post=26129"}],"version-history":[{"count":2,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/26129\/revisions"}],"predecessor-version":[{"id":26141,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/26129\/revisions\/26141"}],"wp:attachment":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/media?parent=26129"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/categories?post=26129"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/tags?post=26129"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/ppma_author?post=26129"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}