<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="/rss-style.xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title><![CDATA[Team IT Security - 📰 Alle Kategorien]]></title>
<link><![CDATA[https://tsecurity.de/export/rss/alle-kategorien.xml?q=malwaretech%2F]]></link>
<description><![CDATA[Das Gesamte Cyber Threat Intelligence Feed-Archiv von TSecurity.de. Alle Nachrichten, Sicherheitsmeldungen, Videos, Downloads und Analysen in einer zentralen Übersicht.]]></description>
<language>de-DE</language>
<lastBuildDate>Thu, 30 Jul 2026 02:30:53 +0200</lastBuildDate>
<pubDate>Thu, 30 Jul 2026 02:30:53 +0200</pubDate>
<ttl>15</ttl>
<copyright>2026 Team IT Security</copyright>
<managingEditor>lakandor@tsecurity.de (Horus Sirius)</managingEditor>
<webMaster>lakandor@tsecurity.de (Horus Sirius)</webMaster>
<category>IT Security</category>
<category>Cybersecurity</category>
<category>Nachrichten</category>
<generator>Team IT Security RSS Generator v2.0</generator>
<image>
<url>https://tsecurity.de/favicon.ico</url>
<title><![CDATA[Team IT Security - 📰 Alle Kategorien]]></title>
<link><![CDATA[https://tsecurity.de/export/rss/alle-kategorien.xml?q=malwaretech%2F]]></link>
</image>
<atom:link href="https://tsecurity.de/export/rss/it-security.xml?q=malwaretech%2F" rel="self" type="application/rss+xml" />
<item>
<title><![CDATA[ComoDoS – Exploiting a Remote Kernel Vulnerability in Comodo Internet Security]]></title>
<description><![CDATA[Sometimes firewall stops attackers, sometimes attackers stop firewall. analyzing a zero-day vulnerability in Comodo Internet Security’s Firewall driver. This article has been indexed from MalwareTech Read the original article: ComoDoS – Exploiting a Remote Kernel Vulnerability in Comodo Internet ...]]></description>
<link>https://tsecurity.de/de/3569177/it-security-nachrichten/comodos-exploiting-a-remote-kernel-vulnerability-in-comodo-internet-security/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3569177/it-security-nachrichten/comodos-exploiting-a-remote-kernel-vulnerability-in-comodo-internet-security/</guid>
<pubDate>Wed, 03 Jun 2026 12:37:55 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Sometimes firewall stops attackers, sometimes attackers stop firewall. analyzing a zero-day vulnerability in Comodo Internet Security’s Firewall driver. This article has been indexed from MalwareTech Read the original article: ComoDoS – Exploiting a Remote Kernel Vulnerability in Comodo Internet Security</p>
<p class="more-link-p"><a class="more-link" href="https://www.itsecuritynews.info/comodos-exploiting-a-remote-kernel-vulnerability-in-comodo-internet-security/">Read more →</a></p>
<p>The post <a href="https://www.itsecuritynews.info/comodos-exploiting-a-remote-kernel-vulnerability-in-comodo-internet-security/">ComoDoS – Exploiting a Remote Kernel Vulnerability in Comodo Internet Security</a> appeared first on <a href="https://www.itsecuritynews.info/">IT Security News</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[WannaCry: Two Weeks and 16 Million Averted Ransoms Later]]></title>
<description><![CDATA[WannaCrypt, aka WannaCry, has been the Infosec story of the past couple of weeks. What was originally a humble ransomware became a newly retrofitted NSA-powered worm which spread recklessly, wreaking global havoc.
Fortunately, the proliferation of WannaCry came to a standstill when one of our sec...]]></description>
<link>https://tsecurity.de/de/3501608/it-security-nachrichten/wannacry-two-weeks-and-16-million-averted-ransoms-later/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3501608/it-security-nachrichten/wannacry-two-weeks-and-16-million-averted-ransoms-later/</guid>
<pubDate>Fri, 08 May 2026 23:23:24 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<!-- Load D3.js and C3.js libraries for charts -->



<link rel="stylesheet" href="https://www.kryptoslogic.com/customjs/c3.min.css">
<p>WannaCrypt, aka WannaCry, has been <em>the</em> Infosec story of the past couple of weeks. What was originally a humble ransomware became a newly retrofitted NSA-powered worm which spread recklessly, wreaking global havoc.</p>
<p>Fortunately, the proliferation of WannaCry came to a standstill when one of our security researchers, <a href="https://www.malwaretech.com/">MalwareTech</a>, working to collect intelligence for the <a href="https://www.kryptoslogic.com/kryptos_vantage.html">Vantage Breach Intelligence Feed</a>, registered a domain associated to the malware, ultimately triggering its “kill switch”.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[MalwareTech Weekend Hangout]]></title>
<description><![CDATA[Author: Marcus Hutchins - Bewertung: 9x - Views:104 Ask questions, chat about current events, and just hang out]]></description>
<link>https://tsecurity.de/de/3115845/it-security-video/malwaretech-weekend-hangout/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3115845/it-security-video/malwaretech-weekend-hangout/</guid>
<pubDate>Sun, 23 Nov 2025 22:19:20 +0100</pubDate>
<category>🎥 IT Security Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Author: Marcus Hutchins - Bewertung: 9x - Views:104 <br/></p><p><iframe id="ytplayer" loading="lazy" type="text/html" width="100%" height="auto" src="https://www.youtube.com/embed/uOpgJval1vc?autoplay=1&origin=http://tsecurity.de" frameborder="0"></iframe></p><p>Ask questions, chat about current events, and just hang out<br/></p>]]></content:encoded>
</item>
<item>
<title><![CDATA[158: MalwareTech]]></title>
<description><![CDATA[MalwareTech was an anonymous security researcher, until he accidentally stopped WannaCry, one of the largest ransomware attacks in history. That single act of heroism shattered his anonymity and pulled him into a world he never expected.https://malwaretech.comSponsorsSupport for the show comes fr...]]></description>
<link>https://tsecurity.de/de/3105904/podcasts/158-malwaretech/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3105904/podcasts/158-malwaretech/</guid>
<pubDate>Wed, 19 Nov 2025 00:35:32 +0100</pubDate>
<category>🎥 Podcasts</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>MalwareTech was an anonymous security researcher, until he accidentally stopped WannaCry, one of the largest ransomware attacks in history. That single act of heroism shattered his anonymity and pulled him into a world he never expected.</p><p><a href="https://malwaretech.com/"><strong>https://malwaretech.com</strong></a></p><h3>Sponsors</h3><p>Support for the show comes from <a href="https://www.blackhillsinfosec.com/darknet"><strong>Black Hills Information Security</strong></a>. Black Hills has a variety of penetration assessment and security auditing services they provide customers to help keep improve the security of a company. If you need a penetration test check out <a href="https://www.blackhillsinfosec.com/darknet"><strong>www.blackhillsinfosec.com/darknet</strong></a>.</p><p>Support for this show comes from <a href="https://arcticwolf.com/darknet"><strong>Arctic Wolf</strong></a>. Arctic Wolf is the industry leader in security operations solutions, delivering 24x7 monitoring, assessment, and response through our patented Concierge Security model. They work with your existing tools and become an extension of your existing IT team. Visit <a href="https://arcticwolf.com/darknet"><strong>arcticwolf.com/darknet</strong></a> to learn more.</p><p>Support for this show comes from <a href="https://cloaked.com/darknet"><strong>Cloaked</strong></a>, a digital privacy tool. Cloaked offers private email, phone numbers, and virtual credit card numbers. So you can be anonymous online. They also will remove your personal information from the internet. Like home address, SSN, and phone numbers. Listeners get 20% off a Cloaked subscription when they visit <a href="https://cloaked.com/darknet"><strong>https://cloaked.com/darknet</strong></a>. Calling 1-855-752-5625 for a free scan to check if your personal information is exposed!</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Meet the Guy Who Accidentally Stopped the World's Most Dangerous Ransomware ☠ Ep. 158 MalwareTech]]></title>
<description><![CDATA[Author: Jack Rhysider - Bewertung: 2765x - Views:93454 MalwareTech was an anonymous young security researcher, until he stumbled upon the command and control server for WannaCry, a Windows exploit developed by the NSA and weaponized by North Korea (probably). When he registered the domain, he ina...]]></description>
<link>https://tsecurity.de/de/3105889/it-security-video/meet-the-guy-who-accidentally-stopped-the-worlds-most-dangerous-ransomware-ep-158-malwaretech/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3105889/it-security-video/meet-the-guy-who-accidentally-stopped-the-worlds-most-dangerous-ransomware-ep-158-malwaretech/</guid>
<pubDate>Wed, 19 Nov 2025 00:34:57 +0100</pubDate>
<category>🎥 IT Security Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<enclosure url="https://i.ytimg.com/vi/r4BkcQvrDe4/maxresdefault.jpg" length="0" type="image/jpeg" />
<content:encoded><![CDATA[<p>Author: Jack Rhysider - Bewertung: 2765x - Views:93454 <br/></p><p><iframe id="ytplayer" loading="lazy" type="text/html" width="100%" height="auto" src="https://www.youtube.com/embed/r4BkcQvrDe4?autoplay=1&origin=http://tsecurity.de" frameborder="0"></iframe></p><p>MalwareTech was an anonymous young security researcher, until he stumbled upon the command and control server for WannaCry, a Windows exploit developed by the NSA and weaponized by North Korea (probably). When he registered the domain, he inadvertently hit the kill switch for this terrifying ransomware - and exposed his identity to the entire world in the process.<br />
<br />
https://malwaretech.com<br />
<br />
Visit https://darknetdiaries.com/episode/158/ for a list of sources, full transcripts, and to listen to all episodes.<br/></p>]]></content:encoded>
</item>
<item>
<title><![CDATA["Darknet Diaries Deutsch": Der Mann, der WannaCry stoppte]]></title>
<description><![CDATA[Der Securityforscher MalwareTech stoppt die Ransomware WannaCry und wird dadurch in eine Welt hineingezogen, die er sich nie hätte vorstellen können.]]></description>
<link>https://tsecurity.de/de/3012274/it-security-nachrichten/darknet-diaries-deutsch-der-mann-der-wannacry-stoppte/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3012274/it-security-nachrichten/darknet-diaries-deutsch-der-mann-der-wannacry-stoppte/</guid>
<pubDate>Tue, 30 Sep 2025 11:19:18 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Der Securityforscher MalwareTech stoppt die Ransomware WannaCry und wird dadurch in eine Welt hineingezogen, die er sich nie hätte vorstellen können.]]></content:encoded>
</item>
<item>
<title><![CDATA["Darknet Diaries Deutsch": Der Mann, der WannaCry stoppte]]></title>
<description><![CDATA[Der Securityforscher MalwareTech stoppt die Ransomware WannaCry und wird dadurch in eine Welt hineingezogen, die er sich nie hätte vorstellen können.]]></description>
<link>https://tsecurity.de/de/3012266/it-nachrichten/darknet-diaries-deutsch-der-mann-der-wannacry-stoppte/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3012266/it-nachrichten/darknet-diaries-deutsch-der-mann-der-wannacry-stoppte/</guid>
<pubDate>Tue, 30 Sep 2025 11:15:46 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Der Securityforscher MalwareTech stoppt die Ransomware WannaCry und wird dadurch in eine Welt hineingezogen, die er sich nie hätte vorstellen können.]]></content:encoded>
</item>
<item>
<title><![CDATA[https://www.pn-tilamuta.go.id/shelby.txt]]></title>
<description><![CDATA[https://www.pn-tilamuta.go.id/shelby.txt notified by SimsimiKI generiertes Nachrichten UpdateVerwendetes künstliches Intelligenz Model: mistral-nemo-instruct-2407@q8_0Bitte achte darauf, dass der Fachartikel in deutscher Sprache verfasst wird und die Zitationen und Quellenangaben korrekt sind.
...]]></description>
<link>https://tsecurity.de/de/2655564/hacking/httpswwwpn-tilamutagoidshelbytxt/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2655564/hacking/httpswwwpn-tilamutagoidshelbytxt/</guid>
<pubDate>Sat, 08 Mar 2025 11:49:59 +0100</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[https://www.pn-tilamuta.go.id/shelby.txt notified by Simsimi<!-- START: Dynamically Added Content --><br><h3>KI generiertes Nachrichten Update</h3><hr>Verwendetes künstliches Intelligenz Model: mistral-nemo-instruct-2407@q8_0<br><br><p>Bitte achte darauf, dass der Fachartikel in deutscher Sprache verfasst wird und die Zitationen und Quellenangaben korrekt sind.</p><br />
<hr /><br />
<p><strong>IT-Sicherheitsbedrohung durch den Shelby-Text</strong></p><br />
<p>Die IT-Sicherheit ist ein kritisches Thema in der heutigen digitalen Welt. Hacker nutzen verschiedene Methoden, um Schwachstellen in Systemen auszunutzen und unbefugten Zugriff zu erlangen. Ein jüngst entdecktes Beispiel für eine potenzielle IT-Sicherheitsbedrohung ist der Shelby-Text, der unter der URL <a href="https://www.pn-tilamuta.go.id/shelby.txt">https://www.pn-tilamuta.go.id/shelby.txt</a> abrufbar ist.</p><br />
<p>Der Shelby-Text besteht aus einer Sammlung von Codeschnipseln und Anweisungen, die darauf abzielen, Schwachstellen in verschiedenen IT-Systemen auszunutzen. Die Schnipsel enthalten unter anderem Skripte für die Ausführung von SQL-Injektionen, Passwort-Cracking-Tools und Exploits für bekannte Sicherheitslücken. Durch die Nutzung dieser Tools können Angreifer die Sicherheit von Webanwendungen, Datenbanken und anderen IT-Systemen compromise.</p><br />
<p>Die Existenz des Shelby-Textes wurde erstmals im März 2021 durch den Security-Forscher Marcus Hutchins bekannt [1]. Hutchins entdeckte den Text auf einer indonesischen Regierungssite und warnte vor der potenziellen Bedrohung, die von dem Inhalt ausgehen könnte. Obwohl die genauen Absichten hinter der Veröffentlichung des Shelby-Textes unklar sind, kann man davon ausgehen, dass er als Ressource für Hacker dienen soll, um ihre Angriffe zu verbessern.</p><br />
<p>Die Gefahr, die von dem Shelby-Text ausgeht, ist real und sollte von IT-Sicherheitsfachleuten ernst genommen werden. Die Sammlung enthält eine Fülle von Tools und Anweisungen, die es Angreifern ermöglichen, Schwachstellen in Systemen auszunutzen. Unternehmen und Organisationen sollten daher ihre Sicherheitsmaßnahmen überprüfen und sicherstellen, dass sie gegen gängige Angriffsmethoden wie SQL-Injektionen und Passwort-Cracking geschützt sind.</p><br />
<p>Es gibt auch Hinweise darauf, dass der Shelby-Text Teil eines größeren Netzwerks von Hacker-Ressourcen ist. Eine Analyse der Quelle <a href="https://www.pn-tilamuta.go.id/">https://www.pn-tilamuta.go.id/</a> ergab weitere Links zu verdächtigen Websites, die ebenfalls Hacker-Werkzeuge und Anleitungen anbieten [2]. Dieses Netzwerk könnte ein Indikator dafür sein, dass organisierte Hackergruppen hinter diesen Ressourcen stehen.</p><br />
<p>Um sich vor Bedrohungen wie dem Shelby-Text zu schützen, sollten Unternehmen und Organisationen ihre Sicherheitsrichtlinien überprüfen und sicherstellen, dass sie den Schutz ihrer Daten und Systeme als oberste Priorität betrachten. Dies bedeutet unter anderem, regelmäßig Backups durchzuführen, Schwachstellen in Systemen zu beheben und Mitarbeiter in Sicherheitsfragen zu schulen.</p><br />
<p>In Bezug auf die Rechtmäßigkeit der Veröffentlichung des Shelby-Textes ist zu sagen, dass es sich dabei möglicherweise um eine Verletzung von Urheberrechten oder sogar eine Straftat handeln könnte. Die Sammlung enthält Code-Schnipsel und Anweisungen, die von anderen Quellen kopiert wurden, ohne dass auf die ursprüngliche Quelle verwiesen wird [3]. Unternehmen und Organisationen sollten daher sicherstellen, dass sie über die notwendigen Lizenz- und Genehmigungen verfügen, bevor sie solche Ressourcen nutzen oder veröffentlichen.</p><br />
<p>Insgesamt zeigt der Shelby-Text, wie real die Bedrohung durch Hacker ist und wie wichtig es für Unternehmen und Organisationen ist, ihre IT-Sicherheitsmaßnahmen zu stärken. Durch die Identifizierung und Behebung von Schwachstellen sowie die Schulung von Mitarbeitern können sie sich gegen Angriffe schützen und so einen unverzichtbaren Schutz für ihre Daten und Systeme bieten.</p><br />
<p><strong>Referenzen</strong></p><br />
<p>[1] Marcus Hutchins' Tweet über den Shelby-Text: <a href="https://twitter.com/MalwareTech/status/1368509562180759554">https://twitter.com/MalwareTech/status/1368509562180759554</a></p><br />
<p>[2] Analyse der Quelle <a href="https://www.pn-tilamuta.go.id/">https://www.pn-tilamuta.go.id/</a>: <a href="https://tsecurity.de/de/2655564/IT+Sicherheit/Hacker/https%3A%2F%2Fwww.pn-tilamuta.go.id%2Fshelby.txt/">https://tsecurity.de/de/2655564/IT+Sicherheit/Hacker/https%3A%2F%2Fwww.pn-tilamuta.go.id%2Fshelby.txt/</a></p><br />
<p>[3] Urheberrechtliche Bedenken im Zusammenhang mit dem Shelby-Text: <a href="https://www.techrepublic.com/article/how-to-protect-your-business-from-hackers-and-cybercriminals/">https://www.techrepublic.com/article/how-to-protect-your-business-from-hackers-and-cybercriminals/</a></p><br />
<!-- END: Dynamically Added Content -->]]></content:encoded>
</item>
<item>
<title><![CDATA[New Scanner Released to Detect CUPS RCE Vulnerability CVE-2024-47176]]></title>
<description><![CDATA[New Scanner Released to Detect CUPS RCE Vulnerability CVE-2024-47176
				
				
			
			
				
				
				
				
			
				
				
				
				
				
				
				
				
				
				
				
				 Post Views: 1
			
			
				
				
				
				
				



			
			
				
				
				
				
			
				
				
				
				
				
				
				
				
		...]]></description>
<link>https://tsecurity.de/de/2376015/hacking/new-scanner-released-to-detect-cups-rce-vulnerability-cve-2024-47176/</link>
<guid isPermaLink="true">https://tsecurity.de/de/2376015/hacking/new-scanner-released-to-detect-cups-rce-vulnerability-cve-2024-47176/</guid>
<pubDate>Wed, 09 Oct 2024 10:19:45 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div class="et_pb_section et_pb_section_0 et_section_specialty">
				
				
				
				
				
				<div class="et_pb_row">
				<div class="et_pb_column et_pb_column_3_4 et_pb_column_0   et_pb_specialty_column  et_pb_css_mix_blend_mode_passthrough">
				
				
				
				
				<div class="et_pb_row_inner et_pb_row_inner_0">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_inner et_pb_column_inner_0 et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_post_title et_pb_post_title_0 et_pb_bg_layout_light  et_pb_text_align_left">
				
				
				
				
				
				<div class="et_pb_title_container">
					<h1 class="entry-title">New Scanner Released to Detect CUPS RCE Vulnerability CVE-2024-47176</h1>
				</div>
				
			</div>
			</div>
				
				
				
				
			</div><div class="et_pb_row_inner et_pb_row_inner_1">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_inner et_pb_column_inner_1 et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_0  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong><div class="post-views content-post post-281355 entry-meta load-static">
				<span class="post-views-icon dashicons dashicons-chart-bar"></span> <span class="post-views-label">Post Views:</span> <span class="post-views-count">1</span>
			</div></strong></p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_1  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><br>
<!-- News_Horizontal_smaller --><br>
<ins class="adsbygoogle" data-ad-client="ca-pub-6620833063853657" data-ad-slot="8337846400"></ins><br>
</div>
			</div>
			</div>
				
				
				
				
			</div><div class="et_pb_row_inner et_pb_row_inner_2 patreon-row">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_inner et_pb_column_inner_2 et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_2  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><h3 class="premium-content">Join our <a class="green_color" href="https://www.patreon.com/posts/maximizing-your-87671900" target="_blank" rel="noopener sponsored">Patreon</a> Channel and Gain access to 70+ Exclusive Walkthrough Videos.</h3></div>
			</div><div class="et_pb_module et_pb_image et_pb_image_0">
				
				
				
				
				<a href="https://www.patreon.com/posts/maximizing-your-87671900" target="_blank"><span class="et_pb_image_wrap "><img fetchpriority="high" decoding="async" width="800" height="120" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2023/11/Patreon.png" alt="Patreon" title="Patreon" srcset="https://www.blackhatethicalhacking.com/wp-content/uploads/2023/11/Patreon.png 800w, https://www.blackhatethicalhacking.com/wp-content/uploads/2023/11/Patreon-480x72.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 800px, 100vw" class="wp-image-275956"></span></a>
			</div><div class="et_pb_module et_pb_divider et_pb_divider_0 et_pb_divider_position_ et_pb_space"><div class="et_pb_divider_internal"></div></div>
			</div>
				
				
				
				
			</div><div class="et_pb_row_inner et_pb_row_inner_3">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_inner et_pb_column_inner_3 et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_3  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner">Reading Time: 3 Minutes</div>
			</div>
			</div>
				
				
				
				
			</div><div class="et_pb_row_inner et_pb_row_inner_4">
				<div class="et_pb_column et_pb_column_4_4 et_pb_column_inner et_pb_column_inner_4 et-last-child">
				
				
				
				
				<div class="et_pb_module et_pb_text et_pb_text_4  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><h4><strong>New Scanner Released to Detect CUPS RCE Vulnerability CVE-2024-47176</strong></h4>
<p>A new <strong>automated scanner</strong> has been developed to help security professionals detect devices vulnerable to the <strong>Common Unix Printing System (CUPS) Remote Code Execution (RCE)</strong> flaw, tracked as <strong>CVE-2024-47176</strong>. Discovered by <strong>Simone Margaritelli</strong>, this flaw allows attackers to execute arbitrary code remotely, albeit with some real-world constraints.</p>
<h4><strong>CUPS Flaw: A DDoS Amplification Threat</strong></h4>
<p>Although RCE exploitation in real-world scenarios is limited, <strong>Akamai</strong> demonstrated that <strong>CVE-2024-47176</strong> can enable a <strong>600x amplification</strong> factor in <strong>distributed denial-of-service (DDoS)</strong> attacks, raising further security concerns.</p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_5 see-also-text  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>See Also: So, you want to be a hacker?<br></strong><strong><a href="https://www.blackhatethicalhacking.com/courses/" target="_blank" rel="noopener noreferrer">Offensive Security, Bug Bounty Courses</a></strong></p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_6  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><br>
<!-- News_Horizontal_smaller --><br>
<ins class="adsbygoogle" data-ad-client="ca-pub-6620833063853657" data-ad-slot="8337846400"></ins><br>
</div>
			</div><div class="et_pb_module et_pb_text et_pb_text_7  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><h4><span><strong>Discover your weakest link. Be proactive, not reactive. Cybercriminals need just one flaw to strike.</strong></span></h4>
<p><a href="https://www.blackhatethicalhacking.com/solutions/"><img decoding="async" class="alignnone wp-image-276050 size-full" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2023/11/Solutions.png" alt="" width="800" height="120" srcset="https://www.blackhatethicalhacking.com/wp-content/uploads/2023/11/Solutions.png 800w, https://www.blackhatethicalhacking.com/wp-content/uploads/2023/11/Solutions-480x72.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 800px, 100vw"></a></p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_8  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><h4><strong>Marcus Hitchins Releases Python-Based Scanner</strong></h4>
<p>Cybersecurity researcher <a href="https://github.com/MalwareTech/CVE-2024-47176-Scanner" target="_blank" rel="noopener"><strong>Marcus Hitchins</strong></a> (aka <strong>MalwareTech</strong>) developed the <strong>cups_scanner.py</strong> tool to allow system administrators to <strong>scan networks for vulnerable CUPS-Browsed services</strong>. The tool helps detect instances of CUPS-Browsed bound to <strong>UDP port 631</strong>, which can expose devices to unauthorized access or exploitation.</p>
<h4><strong>How the Scanner Works</strong></h4>
<p>The scanner sends <strong>custom UDP packets</strong> to broadcast addresses on port 631. Vulnerable <strong>CUPS</strong> instances respond by sending HTTP requests back to the scanner’s server. The results are logged, allowing administrators to identify and target affected devices for patching or reconfiguration.</p>
<p><img decoding="async" class="aligncenter" src="https://www.bleepstatic.com/images/news/u/1220909/2024/Phishing/22/example.png" alt="Example scan and results" width="900" height="142"><strong>Example scan and results</strong><br><em>Source: GitHub</em></p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_9 see-also-text  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Trending: <a href="https://www.blackhatethicalhacking.com/articles/10-misconceptions-about-hacking/" target="_blank" rel="noopener noreferrer">10 Misconceptions about Hacking</a></strong></p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_10  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><br>
<!-- News Adsense Adcode Horizontal --><br>
<ins class="adsbygoogle" data-ad-client="ca-pub-6620833063853657" data-ad-slot="8337846400"></ins><br>
</div>
			</div><div class="et_pb_module et_pb_text et_pb_text_11 see-also-text  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Trending: <a href="https://www.blackhatethicalhacking.com/tools/argus/" target="_blank" rel="noopener">Recon Tool: Argus</a></strong></p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_12  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><div class="pt-0">
<h4><strong>Logs and Next Steps</strong></h4>
<p>The tool creates two logs: <strong>cups.log</strong>, detailing the IP addresses and CUPS versions of responding devices, and <strong>requests.log</strong>, capturing the raw HTTP requests for further analysis. By using this tool, system administrators can <strong>mitigate exposure</strong> to <strong>CVE-2024-47176</strong>, improving network security.</p>
</div></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_13 see-also-text  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong>Trending: <a href="https://www.blackhatethicalhacking.com/news/sniper-dz-the-phaas-platform-behind-140000-phishing-sites-exposed/" target="_blank" rel="noopener noreferrer">Sniper Dz: The PhaaS Platform Behind 140,000+ Phishing Sites Exposed<br>
</a></strong></p></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_14  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><blockquote>
<p><em>Are u a security researcher? Or a company that writes articles about Cyber Security, Offensive Security (related to information security in general) that match with our specific audience and is worth sharing? </em><em>If you want to express your idea in an article contact us here for a quote: <strong>info@blackhatethicalhacking.com</strong></em></p>
</blockquote></div>
			</div><div class="et_pb_module et_pb_text et_pb_text_15  et_pb_text_align_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_text_inner"><p><strong><em>Source: bleepingcomputer.com</em></strong></p>
<p><a href="https://www.bleepingcomputer.com/news/software/new-scanner-finds-linux-unix-servers-exposed-to-cups-rce-attacks/" target="_blank" rel="noopener"><strong>Source Link</strong></a></p></div>
			</div><div class="et_pb_module et_pb_divider et_pb_divider_1 et_pb_divider_position_ et_pb_space"><div class="et_pb_divider_internal"></div></div><div class="et_pb_module et_pb_image et_pb_image_1 store-img">
				
				
				
				
				<a href="https://store.blackhatethicalhacking.com/" target="_blank"><span class="et_pb_image_wrap "><img decoding="async" width="1142" height="500" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2023/03/Store.png" alt="Merch" title="Store" srcset="https://www.blackhatethicalhacking.com/wp-content/uploads/2023/03/Store.png 1142w, https://www.blackhatethicalhacking.com/wp-content/uploads/2023/03/Store-980x429.png 980w, https://www.blackhatethicalhacking.com/wp-content/uploads/2023/03/Store-480x210.png 480w" sizes="(min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1142px, 100vw" class="wp-image-271829"></span></a>
			</div><div class=" et_pb_logo_slider  et_pb_logo_slider_0 ">
                
            </div>
			</div>
				
				
				
				
			</div>
			</div><div class="et_pb_column et_pb_column_1_4 et_pb_column_1    et_pb_css_mix_blend_mode_passthrough">
				
				
				
				
				<div class="et_pb_module et_pb_sidebar_0 news-sidebar1 et_pb_widget_area clearfix et_pb_widget_area_left et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_widget rpwe_widget recent-posts-extended"><h4 class="widgettitle">Recent News</h4><div class="rpwe-block news-recent-posts-sb"><ul class="rpwe-ul"><li class="rpwe-li rpwe-clearfix"><a class="rpwe-img" href="https://www.blackhatethicalhacking.com/news/over-300000-ddos-attack-commands-issued-by-gorillabot-in-one-month/" target="_self"><img class="rpwe-aligncenter rpwe-thumb" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2024/10/877x440-Images-for-the-News-posts-24-300x150.png" alt="Over 300,000 DDoS Attack Commands Issued by GorillaBot in One Month" height="150" width="300" loading="lazy" decoding="async"></a><h3 class="rpwe-title"><a href="https://www.blackhatethicalhacking.com/news/over-300000-ddos-attack-commands-issued-by-gorillabot-in-one-month/" target="_self">Over 300,000 DDoS Attack Commands Issued by GorillaBot in One Month</a></h3><time class="rpwe-time published" datetime="2024-10-08T11:04:15+02:00">October 8, 2024</time><div class="rpwe-summary"></div></li><li class="rpwe-li rpwe-clearfix"><a class="rpwe-img" href="https://www.blackhatethicalhacking.com/news/apple-fixes-ios-bug-that-exposed-saved-passwords-to-voiceover/" target="_self"><img class="rpwe-aligncenter rpwe-thumb" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2024/10/877x440-Images-for-the-News-posts-23-300x150.png" alt="Apple Fixes iOS Bug That Exposed Saved Passwords to VoiceOver" height="150" width="300" loading="lazy" decoding="async"></a><h3 class="rpwe-title"><a href="https://www.blackhatethicalhacking.com/news/apple-fixes-ios-bug-that-exposed-saved-passwords-to-voiceover/" target="_self">Apple Fixes iOS Bug That Exposed Saved Passwords to VoiceOver</a></h3><time class="rpwe-time published" datetime="2024-10-07T09:55:56+02:00">October 7, 2024</time><div class="rpwe-summary"></div></li><li class="rpwe-li rpwe-clearfix"><a class="rpwe-img" href="https://www.blackhatethicalhacking.com/news/stealthy-perfctl-malware-exploits-linux-servers-for-cryptojacking-and-proxyjacking/" target="_self"><img class="rpwe-aligncenter rpwe-thumb" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2024/10/877x440-Images-for-the-News-posts-22-300x150.png" alt="Stealthy “perfctl” Malware Exploits Linux Servers for Cryptojacking and Proxyjacking" height="150" width="300" loading="lazy" decoding="async"></a><h3 class="rpwe-title"><a href="https://www.blackhatethicalhacking.com/news/stealthy-perfctl-malware-exploits-linux-servers-for-cryptojacking-and-proxyjacking/" target="_self">Stealthy “perfctl” Malware Exploits Linux Servers for Cryptojacking and Proxyjacking</a></h3><time class="rpwe-time published" datetime="2024-10-04T10:38:15+02:00">October 4, 2024</time><div class="rpwe-summary"></div></li><li class="rpwe-li rpwe-clearfix"><a class="rpwe-img" href="https://www.blackhatethicalhacking.com/news/ivanti-epm-exploit-allows-hackers-to-take-over-systems-via-sql-injection/" target="_self"><img class="rpwe-aligncenter rpwe-thumb" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2024/10/877x440-Images-for-the-News-posts-21-300x150.png" alt="Ivanti EPM Exploit Allows Hackers to Take Over Systems via SQL Injection" height="150" width="300" loading="lazy" decoding="async"></a><h3 class="rpwe-title"><a href="https://www.blackhatethicalhacking.com/news/ivanti-epm-exploit-allows-hackers-to-take-over-systems-via-sql-injection/" target="_self">Ivanti EPM Exploit Allows Hackers to Take Over Systems via SQL Injection</a></h3><time class="rpwe-time published" datetime="2024-10-03T10:28:30+02:00">October 3, 2024</time><div class="rpwe-summary"></div></li></ul></div><!-- Generated by http://wordpress.org/plugins/recent-posts-widget-extended/ --></div><div class="et_pb_widget widget_block"><h3>EXPLORE OUR STORE</h3></div><div class="et_pb_widget widget_media_image"><a href="https://store.blackhatethicalhacking.com/"><img decoding="async" width="233" height="300" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2024/09/Tshirt-233x300.png" class="image wp-image-280999  attachment-medium size-medium" alt=""></a></div><div class="et_pb_widget widget_media_image"><a href="https://store.blackhatethicalhacking.com/"><img decoding="async" width="300" height="280" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2024/09/RedTeamers-e1725807706904-300x280.png" class="image wp-image-281001  attachment-medium size-medium" alt=""></a></div><div class="et_pb_widget widget_media_image"><a href="https://store.blackhatethicalhacking.com/"><img decoding="async" width="711" height="1024" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2024/09/Hoodie-711x1024.png" class="image wp-image-281002  attachment-large size-large" alt=""></a></div><div class="widget_text et_pb_widget widget_custom_html"><div class="textwidget custom-html-widget"> <!-- News Adsense Adcode --> <ins class="adsbygoogle" data-ad-client="ca-pub-6620833063853657" data-ad-slot="8337846400" data-ad-format="auto" data-full-width-responsive="true"></ins> </div></div>
			</div><div class="et_pb_module et_pb_sidebar_1 news-sidebar2 et_animated et_pb_widget_area clearfix et_pb_widget_area_left  et_pb_text_align_justified et_pb_bg_layout_light">
				
				
				
				
				<div class="et_pb_widget widget_block"><a href="https://www.blackhatethicalhacking.com/courses/"><img decoding="async" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2022/06/OffSec-Course.png"></a>
<h3>Offensive Security &amp; Ethical Hacking Course</h3>
<p>Begin the learning curve of hacking now!</p></div><div class="et_pb_widget widget_block"><hr>
<a href="https://www.blackhatethicalhacking.com/solutions/"><img decoding="async" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2023/03/Solutions.png"></a>
<h3>Information Security Solutions</h3>
<p>Find out how Pentesting Services can help you.</p></div><div class="et_pb_widget widget_block"><hr>
<a href="https://discord.gg/EYMqveWXkv"><img decoding="async" src="https://www.blackhatethicalhacking.com/wp-content/uploads/2023/10/Discord.png"></a>
<h3>Join our Community</h3></div>
			</div>
			</div>
				</div>
				
			</div>The post <a href="https://www.blackhatethicalhacking.com/news/new-scanner-released-to-detect-cups-rce-vulnerability-cve-2024-47176/">New Scanner Released to Detect CUPS RCE Vulnerability CVE-2024-47176</a> first appeared on <a href="https://www.blackhatethicalhacking.com/">Black Hat Ethical Hacking</a>.]]></content:encoded>
</item>
<item>
<title><![CDATA[Everything you need to know about the OpenSSL 3.0.7 Patch]]></title>
<description><![CDATA[Live Status: this is an ongoing issue, and I plan to update this article when new information become available. Make sure to deep-refresh to avoid
The post Everything you need to know about the OpenSSL 3.0.7 Patch appeared first on MalwareTech.]]></description>
<link>https://tsecurity.de/de/1681350/reverse-engineering/everything-you-need-to-know-about-the-openssl-307-patch/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1681350/reverse-engineering/everything-you-need-to-know-about-the-openssl-307-patch/</guid>
<pubDate>Tue, 01 Nov 2022 12:19:30 +0100</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Live Status: this is an ongoing issue, and I plan to update this article when new information become available. Make sure to deep-refresh to avoid</p>
<p>The post <a rel="nofollow" href="https://www.malwaretech.com/2022/11/everything-you-need-to-know-about-the-openssl-3-0-7-patch.html">Everything you need to know about the OpenSSL 3.0.7 Patch</a> appeared first on <a rel="nofollow" href="https://www.malwaretech.com/">MalwareTech</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[[Video] Introduction to Use-After-Free Vulnerabilities | UserAfterFree Challenge Walkthrough (Part: 1)]]></title>
<description><![CDATA[An introduction to Use-After-Free exploitation and walking through one of my old challenges. Challenge Info: https://www.malwaretech.com/challenges/windows-exploitation/user-after-free-1-0 Download Link: https://malwaretech.com/downloads/challenges/UserAfterFree2.0.rar Password: MalwareTech
The p...]]></description>
<link>https://tsecurity.de/de/1533498/reverse-engineering/video-introduction-to-use-after-free-vulnerabilities-userafterfree-challenge-walkthrough-part-1/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1533498/reverse-engineering/video-introduction-to-use-after-free-vulnerabilities-userafterfree-challenge-walkthrough-part-1/</guid>
<pubDate>Tue, 07 Jun 2022 07:05:53 +0200</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>An introduction to Use-After-Free exploitation and walking through one of my old challenges. Challenge Info: https://www.malwaretech.com/challenges/windows-exploitation/user-after-free-1-0 Download Link: https://malwaretech.com/downloads/challenges/UserAfterFree2.0.rar Password: MalwareTech</p>
<p>The post <a rel="nofollow" href="https://www.malwaretech.com/2022/05/video-introduction-to-use-after-free-vulnerabilities-userafterfree-challenge-walkthrough-part-1.html">[Video] Introduction to Use-After-Free Vulnerabilities | UserAfterFree Challenge Walkthrough (Part: 1)</a> appeared first on <a rel="nofollow" href="https://www.malwaretech.com/">MalwareTech</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[[Video] Exploiting Windows RPC – CVE-2022-26809 Explained | Patch Analysis]]></title>
<description><![CDATA[Walking through my process of how I use patch analysis and reverse engineering to find vulnerabilities, then evaluate the risk and exploitability of bugs.
The post [Video] Exploiting Windows RPC – CVE-2022-26809 Explained | Patch Analysis appeared first on MalwareTech.]]></description>
<link>https://tsecurity.de/de/1533500/reverse-engineering/video-exploiting-windows-rpc-cve-2022-26809-explained-patch-analysis/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1533500/reverse-engineering/video-exploiting-windows-rpc-cve-2022-26809-explained-patch-analysis/</guid>
<pubDate>Tue, 07 Jun 2022 07:05:53 +0200</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Walking through my process of how I use patch analysis and reverse engineering to find vulnerabilities, then evaluate the risk and exploitability of bugs.</p>
<p>The post <a rel="nofollow" href="https://www.malwaretech.com/2022/04/video-exploiting-windows-rpc-cve-2022-26809-explained-patch-analysis.html">[Video] Exploiting Windows RPC – CVE-2022-26809 Explained | Patch Analysis</a> appeared first on <a rel="nofollow" href="https://www.malwaretech.com/">MalwareTech</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[An in-depth look at hacking back, active defense, and cyber letters of marque]]></title>
<description><![CDATA[There has been much discussion in cyber security about the possibility of enabling the private sector to engage in active cyber defense, or colloquially “hacking
The post An in-depth look at hacking back, active defense, and cyber letters of marque appeared first on MalwareTech.]]></description>
<link>https://tsecurity.de/de/1533502/reverse-engineering/an-in-depth-look-at-hacking-back-active-defense-and-cyber-letters-of-marque/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1533502/reverse-engineering/an-in-depth-look-at-hacking-back-active-defense-and-cyber-letters-of-marque/</guid>
<pubDate>Tue, 07 Jun 2022 07:05:53 +0200</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>There has been much discussion in cyber security about the possibility of enabling the private sector to engage in active cyber defense, or colloquially “hacking</p>
<p>The post <a rel="nofollow" href="https://www.malwaretech.com/2021/11/an-in-depth-look-at-hacking-back-active-defense-and-cyber-letters-of-marque.html">An in-depth look at hacking back, active defense, and cyber letters of marque</a> appeared first on <a rel="nofollow" href="https://www.malwaretech.com/">MalwareTech</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hard Disk Firmware Hacking (2015) - MalwareTech]]></title>
<description><![CDATA[submitted by    /u/igor_sk   [link]   [comments]]]></description>
<link>https://tsecurity.de/de/1433849/reverse-engineering/hard-disk-firmware-hacking-2015-malwaretech/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1433849/reverse-engineering/hard-disk-firmware-hacking-2015-malwaretech/</guid>
<pubDate>Thu, 08 Apr 2021 19:16:15 +0200</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[  submitted by   <a href="https://www.reddit.com/user/igor_sk"> /u/igor_sk </a> <br> <span><a href="https://www.malwaretech.com/2015/04/hard-disk-firmware-hacking.html">[link]</a></span>   <span><a href="https://www.reddit.com/r/ReverseEngineering/comments/mmyw1q/hard_disk_firmware_hacking_2015_malwaretech/">[comments]</a></span>]]></content:encoded>
</item>
<item>
<title><![CDATA[MalwareTech, WannaCry and Kronos – Understanding the Connections]]></title>
<description><![CDATA[As Marcus Hutchins was on his way home to the UK after attending Def Con and Black Hat in Las Vegas, NV, the FBI arrested him. This event sparked immediate internet outcry, especially among the cybersecurity community, as Hutchins was better known as MalwareTech and had just made cybersecurity fa...]]></description>
<link>https://tsecurity.de/de/1398184/it-security-nachrichten/malwaretech-wannacry-and-kronos-understanding-the-connections/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1398184/it-security-nachrichten/malwaretech-wannacry-and-kronos-understanding-the-connections/</guid>
<pubDate>Thu, 04 Mar 2021 04:30:11 +0100</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>As Marcus Hutchins was on his way home to the UK after attending Def Con and Black Hat in Las Vegas, NV, the FBI arrested him. This event sparked immediate internet outcry, especially among the cybersecurity community, as Hutchins was better known as MalwareTech and had just made cybersecurity fame by stopping the WannaCry ransomware […]… <a class="view-article " href="https://www.tripwire.com/state-of-security/featured/malwaretech-wannacry-kronos-understanding-connections/" title="Read More">Read More</a></p>
<p>The post <a rel="nofollow" href="https://www.tripwire.com/state-of-security/featured/malwaretech-wannacry-kronos-understanding-connections/">MalwareTech, WannaCry and Kronos – Understanding the Connections</a> appeared first on <a rel="nofollow" href="https://www.tripwire.com/state-of-security">The State of Security</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[How I Found My First Ever ZeroDay (In RDP)]]></title>
<description><![CDATA[Up until recently, I’d never tried the bug hunting part of vulnerability research. I’ve been reverse engineering Windows malware for over a decade, and I’d done the occasional patch analysis, but I never saw a point in bug hunting on a major OS. After all, there are teams of vulnerability … 
The ...]]></description>
<link>https://tsecurity.de/de/1340809/reverse-engineering/how-i-found-my-first-ever-zeroday-in-rdp/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1340809/reverse-engineering/how-i-found-my-first-ever-zeroday-in-rdp/</guid>
<pubDate>Thu, 31 Dec 2020 23:47:23 +0100</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Up until recently, I’d never tried the bug hunting part of vulnerability research. I’ve been reverse engineering Windows malware for over a decade, and I’d done the occasional patch analysis, but I never saw a point in bug hunting on a major OS. After all, there are teams of vulnerability … </p>
<p>The post <a rel="nofollow" href="https://www.malwaretech.com/2020/12/how-i-found-my-first-ever-zeroday-in-rdp.html">How I Found My First Ever ZeroDay (In RDP)</a> appeared first on <a rel="nofollow" href="https://www.malwaretech.com/">MalwareTech</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Are Criminals Really Using ICS Malware?]]></title>
<description><![CDATA[Recently, The New York Times posted a sensational article about criminals using sophisticated state software for the first time. The headline is non-specific and could be taken to mean state hacking tools in general; however, this would be completely untrue. The NSA hacking tools leaked by the sh...]]></description>
<link>https://tsecurity.de/de/1154631/reverse-engineering/are-criminals-really-using-ics-malware/</link>
<guid isPermaLink="true">https://tsecurity.de/de/1154631/reverse-engineering/are-criminals-really-using-ics-malware/</guid>
<pubDate>Sat, 20 Jun 2020 02:18:07 +0200</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p>Recently, The New York Times posted a sensational article about criminals using sophisticated state software for the first time. The headline is non-specific and could be taken to mean state hacking tools in general; however, this would be completely untrue. The NSA hacking tools leaked by the shadowbrokers are used … </p>
<p>The post <a rel="nofollow" href="https://www.malwaretech.com/2020/06/are-criminals-really-using-ics-malware.html">Are Criminals Really Using ICS Malware?</a> appeared first on <a rel="nofollow" href="https://www.malwaretech.com/">MalwareTech</a>.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[learn reverse engineering by solving MalwareTechs VM1 challenge using cutter]]></title>
<description><![CDATA[submitted by    /u/DaringJoker  [link]   [comments]]]></description>
<link>https://tsecurity.de/de/928546/reverse-engineering/learn-reverse-engineering-by-solving-malwaretechs-vm1-challenge-using-cutter/</link>
<guid isPermaLink="true">https://tsecurity.de/de/928546/reverse-engineering/learn-reverse-engineering-by-solving-malwaretechs-vm1-challenge-using-cutter/</guid>
<pubDate>Mon, 25 Nov 2019 20:47:16 +0100</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[  submitted by   <a href="https://www.reddit.com/user/DaringJoker"> /u/DaringJoker </a> <br><span><a href="https://daringjoker.wordpress.com/2019/11/26/malwaretech-vm/">[link]</a></span>   <span><a href="https://www.reddit.com/r/ReverseEngineering/comments/e1l9vc/learn_reverse_engineering_by_solving_malwaretechs/">[comments]</a></span>]]></content:encoded>
</item>
<item>
<title><![CDATA[A Widespread BlueKeep 'Exploit' Is Targetting Unpatched Windows 7/XP Computers]]></title>
<description><![CDATA[An anonymous reader quotes Forbes:
When Microsoft issued the first patch in years for Windows XP in May 2019, you knew that something big was brewing. That something was a wormable Windows vulnerability that security experts warned could have a similar impact as the WannaCry worm from 2017. The B...]]></description>
<link>https://tsecurity.de/de/907356/it-security-nachrichten/a-widespread-bluekeep-exploit-is-targetting-unpatched-windows-7xp-computers/</link>
<guid isPermaLink="true">https://tsecurity.de/de/907356/it-security-nachrichten/a-widespread-bluekeep-exploit-is-targetting-unpatched-windows-7xp-computers/</guid>
<pubDate>Mon, 04 Nov 2019 02:00:15 +0100</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[An anonymous reader quotes Forbes:
When Microsoft issued the first patch in years for Windows XP in May 2019, you knew that something big was brewing. That something was a wormable Windows vulnerability that security experts warned could have a similar impact as the WannaCry worm from 2017. The BlueKeep vulnerability exists in unpatched versions of Windows Server 2003, Windows XP, Windows Vista, Windows 7, Windows Server 2008 and Windows Server 2008 R2: and it's now been confirmed that a BlueKeep exploit attack is currently ongoing... 

Security researchers, including Kevin Beaumont who originally named the vulnerability and Marcus Hutchins (also known as MalwareTech) who was responsible for hitting the kill switch that stopped the WannaCry, have confirmed that a widespread BlueKeep exploit attack is now currently underway. Hutchins told Wired that "BlueKeep has been out there for a while now. But this is the first instance where I've seen it being used on a mass scale." It would appear that rather than a wormable threat, where the BlueKeep exploit could spread itself from one machine to another, the attackers are searching for vulnerable unpatched Windows systems that have Remote Desktop Services (RDP) 3389 ports exposed to the internet. This dampens the panic that there could be another WannaCry about to happen, although the potential for such a scenario, albeit on a much smaller scale, certainly remains. For now though, this looks like being an attack campaign with a cryptocurrency miner payload. 

While there is always the possibility that the threat actors behind this attack could drop more malicious payloads than a crypto-miner, for now, this acts as yet another warning for users of the 700,000 or so still vulnerable Windows systems to get patching... Seriously folks, if you are using one of the vulnerable versions of Windows, then what more is it going to take to get you to apply the update that fixes the BlueKeep vulnerability?<p></p><div class="share_submission">
<a class="slashpop" href="http://twitter.com/home?status=A+Widespread+BlueKeep+'Exploit'+Is+Targetting+Unpatched+Windows+7%2FXP+Computers%3A+http%3A%2F%2Fbit.ly%2F32fbh3w"><img src="https://a.fsdn.com/sd/twitter_icon_large.png"></a>
<a class="slashpop" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Ftech.slashdot.org%2Fstory%2F19%2F11%2F03%2F2331250%2Fa-widespread-bluekeep-exploit-is-targetting-unpatched-windows-7xp-computers%3Futm_source%3Dslashdot%26utm_medium%3Dfacebook"><img src="https://a.fsdn.com/sd/facebook_icon_large.png"></a>

<a class="nobg" href="http://plus.google.com/share?url=https://tech.slashdot.org/story/19/11/03/2331250/a-widespread-bluekeep-exploit-is-targetting-unpatched-windows-7xp-computers?utm_source=slashdot&amp;utm_medium=googleplus"><img src="https://www.gstatic.com/images/icons/gplus-16.png" alt="Share on Google+"></a>



</div><p><a href="https://tech.slashdot.org/story/19/11/03/2331250/a-widespread-bluekeep-exploit-is-targetting-unpatched-windows-7xp-computers?utm_source=rss1.0moreanon&amp;utm_medium=feed">Read more of this story</a> at Slashdot.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[BlueKeep: A Journey from DoS to RCE (CVE-2019-0708)]]></title>
<description><![CDATA[Due to the serious risk of a BlueKeep based worm, I’ve held back this write-up to avoid advancing the timeline. Now that a proof-of-concept for RCE (remote code execution) has been release, i feel it’s now safe for me to post this. This article will be a follow on from … 
The post BlueKeep: A Jou...]]></description>
<link>https://tsecurity.de/de/860714/reverse-engineering/bluekeep-a-journey-from-dos-to-rce-cve-2019-0708/</link>
<guid isPermaLink="true">https://tsecurity.de/de/860714/reverse-engineering/bluekeep-a-journey-from-dos-to-rce-cve-2019-0708/</guid>
<pubDate>Sat, 07 Sep 2019 01:32:01 +0200</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[
<p>Due to the serious risk of a BlueKeep based worm, I’ve held back this write-up to avoid advancing the timeline. Now that a proof-of-concept for RCE (remote code execution) has been release, i feel it’s now safe for me to post this. This article will be a follow on from … </p>
<p>The post <a rel="nofollow" href="https://www.malwaretech.com/2019/09/bluekeep-a-journey-from-dos-to-rce-cve-2019-0708.html">BlueKeep: A Journey from DoS to RCE (CVE-2019-0708)</a> appeared first on <a rel="nofollow" href="https://www.malwaretech.com/">MalwareTech</a>.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Equifax Owes You Money! MalwareTech Goes Free & BlueKeep Is For Sale - ThreatWire]]></title>
<description><![CDATA[$(document).ready(function() {
										onYouTubePlayerAPIReadyByID('At0cIg2cu_k');
									});]]></description>
<link>https://tsecurity.de/de/847728/it-security-video/equifax-owes-you-money-malwaretech-goes-free-bluekeep-is-for-sale-threatwire/</link>
<guid isPermaLink="true">https://tsecurity.de/de/847728/it-security-video/equifax-owes-you-money-malwaretech-goes-free-bluekeep-is-for-sale-threatwire/</guid>
<pubDate>Wed, 28 Aug 2019 08:32:25 +0200</pubDate>
<category>🎥 IT Security Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<enclosure url="https://i.ytimg.com/vi/At0cIg2cu_k/maxresdefault.jpg" length="0" type="image/jpeg" />
<content:encoded><![CDATA[<div id="ytplayer_At0cIg2cu_k"></div>

					<script>
									$(document).ready(function() {
										onYouTubePlayerAPIReadyByID('At0cIg2cu_k');
									}); 
									</script>]]></content:encoded>
</item>
<item>
<title><![CDATA[Video: First Look at Ghidra (NSA Reverse Engineering Tool)]]></title>
<description><![CDATA[Today during RSA Conference, the National Security Agency release their much hyped Ghidra reverse engineering toolkit. Described as  “A software reverse engineering (SRE) suite of tools”, Ghidra sounded like some kind of disassembler framework.Prior to release, my expectation was something more t...]]></description>
<link>https://tsecurity.de/de/843203/reverse-engineering/video-first-look-at-ghidra-nsa-reverse-engineering-tool/</link>
<guid isPermaLink="true">https://tsecurity.de/de/843203/reverse-engineering/video-first-look-at-ghidra-nsa-reverse-engineering-tool/</guid>
<pubDate>Wed, 28 Aug 2019 07:33:25 +0200</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[
<p>Today during RSA Conference, the National Security Agency release their much hyped Ghidra reverse engineering toolkit. Described as  “A software reverse engineering (SRE) suite of tools”, Ghidra sounded like some kind of disassembler framework.Prior to release, my expectation was something more than Binary Ninja, but lacking debugger integration. I figured … </p>
<p>The post <a rel="nofollow" href="https://www.malwaretech.com/2019/03/video-first-look-at-ghidra-nsa-reverse-engineering-tool.html">Video: First Look at Ghidra (NSA Reverse Engineering Tool)</a> appeared first on <a rel="nofollow" href="https://www.malwaretech.com/">MalwareTech</a>.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Analyzing a Windows DHCP Server Bug (CVE-2019-0626)]]></title>
<description><![CDATA[Today I’ll be doing an in-depth write up on CVE-2019-0626, and how to find it. Due to the fact this bug only exists on Windows Server, I’ll be using a Server 2016 VM (corresponding patch is KB4487026). Note: this bug was not found by me, I reverse engineered it from … 
The post Analyzing a Window...]]></description>
<link>https://tsecurity.de/de/843204/reverse-engineering/analyzing-a-windows-dhcp-server-bug-cve-2019-0626/</link>
<guid isPermaLink="true">https://tsecurity.de/de/843204/reverse-engineering/analyzing-a-windows-dhcp-server-bug-cve-2019-0626/</guid>
<pubDate>Wed, 28 Aug 2019 07:33:25 +0200</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[
<p>Today I’ll be doing an in-depth write up on CVE-2019-0626, and how to find it. Due to the fact this bug only exists on Windows Server, I’ll be using a Server 2016 VM (corresponding patch is KB4487026). Note: this bug was not found by me, I reverse engineered it from … </p>
<p>The post <a rel="nofollow" href="https://www.malwaretech.com/2019/03/analyzing-a-windows-dhcp-server-bug-cve-2019-0626.html">Analyzing a Windows DHCP Server Bug (CVE-2019-0626)</a> appeared first on <a rel="nofollow" href="https://www.malwaretech.com/">MalwareTech</a>.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Tracking the Hide and Seek Botnet]]></title>
<description><![CDATA[Hide and Seek (HNS) is a malicious worm which mainly infects Linux based IoT devices and routers. The malware spreads via bruteforcing SSH/Telnet credentials, as well as some old CVEs. What makes HNS unique is there’s no command and control server; instead, it receives updates using a custom peer...]]></description>
<link>https://tsecurity.de/de/843206/reverse-engineering/tracking-the-hide-and-seek-botnet/</link>
<guid isPermaLink="true">https://tsecurity.de/de/843206/reverse-engineering/tracking-the-hide-and-seek-botnet/</guid>
<pubDate>Wed, 28 Aug 2019 07:33:25 +0200</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[
<p>Hide and Seek (HNS) is a malicious worm which mainly infects Linux based IoT devices and routers. The malware spreads via bruteforcing SSH/Telnet credentials, as well as some old CVEs. What makes HNS unique is there’s no command and control server; instead, it receives updates using a custom peer-to-peer network … </p>
<p>The post <a rel="nofollow" href="https://www.malwaretech.com/2019/01/tracking-the-hide-and-seek-botnet.html">Tracking the Hide and Seek Botnet</a> appeared first on <a rel="nofollow" href="https://www.malwaretech.com/">MalwareTech</a>.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Best Languages to Learn for Malware Analysis]]></title>
<description><![CDATA[One of the most common questions I’m asked is “what programming language(s) should I learn to get into malware analysis/reverse engineering”, to answer this question I’m going to write about the top 3 languages which I’ve personally found most useful. I’ll focus on native malware (malware which d...]]></description>
<link>https://tsecurity.de/de/843234/reverse-engineering/best-languages-to-learn-for-malware-analysis/</link>
<guid isPermaLink="true">https://tsecurity.de/de/843234/reverse-engineering/best-languages-to-learn-for-malware-analysis/</guid>
<pubDate>Wed, 28 Aug 2019 07:33:25 +0200</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[
<p>One of the most common questions I’m asked is “what programming language(s) should I learn to get into malware analysis/reverse engineering”, to answer this question I’m going to write about the top 3 languages which I’ve personally found most useful. I’ll focus on native malware (malware which does not require … </p>
<p>The post <a rel="nofollow" href="https://www.malwaretech.com/2018/03/best-programming-languages-to-learn-for-malware-analysis.html">Best Languages to Learn for Malware Analysis</a> appeared first on <a rel="nofollow" href="https://www.malwaretech.com/">MalwareTech</a>.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Investigating Command and Control Infrastructure (Emotet)]]></title>
<description><![CDATA[Although the majority of botnets still use a basic client-server model, with most relying on HTTP servers to receive commands, many prominent threats now use more advanced infrastructure to evade endpoint blacklisting and be resilient to take-down. In this article I will go through and explain my...]]></description>
<link>https://tsecurity.de/de/843240/reverse-engineering/investigating-command-and-control-infrastructure-emotet/</link>
<guid isPermaLink="true">https://tsecurity.de/de/843240/reverse-engineering/investigating-command-and-control-infrastructure-emotet/</guid>
<pubDate>Wed, 28 Aug 2019 07:33:25 +0200</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[
<p>Although the majority of botnets still use a basic client-server model, with most relying on HTTP servers to receive commands, many prominent threats now use more advanced infrastructure to evade endpoint blacklisting and be resilient to take-down. In this article I will go through and explain my process of identifying … </p>
<p>The post <a rel="nofollow" href="https://www.malwaretech.com/2017/11/investigating-command-and-control-infrastructure-emotet.html">Investigating Command and Control Infrastructure (Emotet)</a> appeared first on <a rel="nofollow" href="https://www.malwaretech.com/">MalwareTech</a>.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Creating a Simple Free Malware Analysis Environment]]></title>
<description><![CDATA[Computer Requirements: A CPU with AMD-V or Intel VT-x support (pretty much any modern CPU). 4 GB RAM (more is better). Make sure Virtualization (AMD-V or Intel VT-x) is enabled in the BIOS. To do this, you’ll need to google “enable virtualization” along with your bios or motherboard version, then...]]></description>
<link>https://tsecurity.de/de/843241/reverse-engineering/creating-a-simple-free-malware-analysis-environment/</link>
<guid isPermaLink="true">https://tsecurity.de/de/843241/reverse-engineering/creating-a-simple-free-malware-analysis-environment/</guid>
<pubDate>Wed, 28 Aug 2019 07:33:25 +0200</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[
<p>Computer Requirements: A CPU with AMD-V or Intel VT-x support (pretty much any modern CPU). 4 GB RAM (more is better). Make sure Virtualization (AMD-V or Intel VT-x) is enabled in the BIOS. To do this, you’ll need to google “enable virtualization” along with your bios or motherboard version, then … </p>
<p>The post <a rel="nofollow" href="https://www.malwaretech.com/2017/11/creating-a-simple-free-malware-analysis-environment.html">Creating a Simple Free Malware Analysis Environment</a> appeared first on <a rel="nofollow" href="https://www.malwaretech.com/">MalwareTech</a>.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[DejaBlue: Analyzing a RDP Heap Overflow]]></title>
<description><![CDATA[In August 2019 Microsoft announced it had patched a collection of RDP bugs, two of which were wormable. The wormable bugs, CVE-2019-1181 & CVE-2019-1182 affect every OS from Windows 7 to Windows 10. There is some confusion about which CVE is which, though it’s possible both refer to the same … 
T...]]></description>
<link>https://tsecurity.de/de/843177/reverse-engineering/dejablue-analyzing-a-rdp-heap-overflow/</link>
<guid isPermaLink="true">https://tsecurity.de/de/843177/reverse-engineering/dejablue-analyzing-a-rdp-heap-overflow/</guid>
<pubDate>Wed, 28 Aug 2019 07:33:24 +0200</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[
<p>In August 2019 Microsoft announced it had patched a collection of RDP bugs, two of which were wormable. The wormable bugs, CVE-2019-1181 &amp; CVE-2019-1182 affect every OS from Windows 7 to Windows 10. There is some confusion about which CVE is which, though it’s possible both refer to the same … </p>
<p>The post <a rel="nofollow" href="https://www.malwaretech.com/2019/08/dejablue-analyzing-a-rdp-heap-overflow.html">DejaBlue: Analyzing a RDP Heap Overflow</a> appeared first on <a rel="nofollow" href="https://www.malwaretech.com/">MalwareTech</a>.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[YouTube’s Policy on Hacking Tutorials is Problematic]]></title>
<description><![CDATA[Recently YouTube changed its policy on “hacking” tutorials to an essential blanket ban. In the past, such content was occasionally removed under YouTube’s broad “Harmful and Dangerous Content” clause, which prohibited videos “encouraging illegal activity”. An updated policy now specifically targe...]]></description>
<link>https://tsecurity.de/de/843196/reverse-engineering/youtubes-policy-on-hacking-tutorials-is-problematic/</link>
<guid isPermaLink="true">https://tsecurity.de/de/843196/reverse-engineering/youtubes-policy-on-hacking-tutorials-is-problematic/</guid>
<pubDate>Wed, 28 Aug 2019 07:33:24 +0200</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[
<p>Recently YouTube changed its policy on “hacking” tutorials to an essential blanket ban. In the past, such content was occasionally removed under YouTube’s broad “Harmful and Dangerous Content” clause, which prohibited videos “encouraging illegal activity”. An updated policy now specifically targets instructional hacking videos. One major problem here is that … </p>
<p>The post <a rel="nofollow" href="https://www.malwaretech.com/2019/07/youtubes-new-policy-on-hacking-tutorial-is-a-problem.html">YouTube’s Policy on Hacking Tutorials is Problematic</a> appeared first on <a rel="nofollow" href="https://www.malwaretech.com/">MalwareTech</a>.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Analysis of CVE-2019-0708 (BlueKeep)]]></title>
<description><![CDATA[I held back this write-up until a proof of concept (PoC) was publicly available, as not to cause any harm. Now that there are multiple denial-of-service PoC on github, I’m posting my analysis. Binary Diffing As always, I started with a BinDiff of the binaries modified by the patch (in … 
The post...]]></description>
<link>https://tsecurity.de/de/843199/reverse-engineering/analysis-of-cve-2019-0708-bluekeep/</link>
<guid isPermaLink="true">https://tsecurity.de/de/843199/reverse-engineering/analysis-of-cve-2019-0708-bluekeep/</guid>
<pubDate>Wed, 28 Aug 2019 07:33:24 +0200</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[
<p>I held back this write-up until a proof of concept (PoC) was publicly available, as not to cause any harm. Now that there are multiple denial-of-service PoC on github, I’m posting my analysis. Binary Diffing As always, I started with a BinDiff of the binaries modified by the patch (in … </p>
<p>The post <a rel="nofollow" href="https://www.malwaretech.com/2019/05/analysis-of-cve-2019-0708-bluekeep.html">Analysis of CVE-2019-0708 (BlueKeep)</a> appeared first on <a rel="nofollow" href="https://www.malwaretech.com/">MalwareTech</a>.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Analysis of a VB Script Heap Overflow (CVE-2019-0666)]]></title>
<description><![CDATA[Anyone who uses RegEx knows how easy it is to shoot yourself in the foot; but, is it possible to write RegEx so badly that it can lead to RCE? With VB Script, the answer is yes! In this article I’ll be writing about what I assume to be CVE-2019-0666. … 
The post Analysis of a VB Script Heap Overf...]]></description>
<link>https://tsecurity.de/de/843201/reverse-engineering/analysis-of-a-vb-script-heap-overflow-cve-2019-0666/</link>
<guid isPermaLink="true">https://tsecurity.de/de/843201/reverse-engineering/analysis-of-a-vb-script-heap-overflow-cve-2019-0666/</guid>
<pubDate>Wed, 28 Aug 2019 07:33:24 +0200</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[
<p>Anyone who uses RegEx knows how easy it is to shoot yourself in the foot; but, is it possible to write RegEx so badly that it can lead to RCE? With VB Script, the answer is yes! In this article I’ll be writing about what I assume to be CVE-2019-0666. … </p>
<p>The post <a rel="nofollow" href="https://www.malwaretech.com/2019/04/analysis-of-a-vb-script-heap-overflow.html">Analysis of a VB Script Heap Overflow (CVE-2019-0666)</a> appeared first on <a rel="nofollow" href="https://www.malwaretech.com/">MalwareTech</a>.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Marcus hutchins, also known by his online alias malwaretech, has been spared jail time in his sentencing for the creation of the kronos malware.]]></title>
<description><![CDATA[submitted by    /u/RonaldvanderMeer  [link]   [comments]]]></description>
<link>https://tsecurity.de/de/564143/it-security-nachrichten/marcus-hutchins-also-known-by-his-online-alias-malwaretech-has-been-spared-jail-time-in-his-sentencing-for-the-creation-of-the-kronos-malware/</link>
<guid isPermaLink="true">https://tsecurity.de/de/564143/it-security-nachrichten/marcus-hutchins-also-known-by-his-online-alias-malwaretech-has-been-spared-jail-time-in-his-sentencing-for-the-creation-of-the-kronos-malware/</guid>
<pubDate>Mon, 29 Jul 2019 21:31:44 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<table><tr>
<td> <a href="https://www.reddit.com/r/security/comments/cjeb4j/marcus_hutchins_also_known_by_his_online_alias/"> <img src="https://b.thumbs.redditmedia.com/1V0ZfzLYHs1vgsAztntD1HVbiOgiH5miv7ThuBFkJtM.jpg" alt="Marcus hutchins, also known by his online alias malwaretech, has been spared jail time in his sentencing for the creation of the kronos malware." title="Marcus hutchins, also known by his online alias malwaretech, has been spared jail time in his sentencing for the creation of the kronos malware."></a> </td>
<td>   submitted by   <a href="https://www.reddit.com/user/RonaldvanderMeer"> /u/RonaldvanderMeer </a> <br><span><a href="https://threatpost.com/wannacry-hero-avoids-jail-time-in-kronos-malware-charges/146721/">[link]</a></span>   <span><a href="https://www.reddit.com/r/security/comments/cjeb4j/marcus_hutchins_also_known_by_his_online_alias/">[comments]</a></span> </td>
</tr></table>]]></content:encoded>
</item>
<item>
<title><![CDATA[‘WannaCry Hero’ Avoids Jail Time in Kronos Malware Charges]]></title>
<description><![CDATA[Marcus Hutchins, also known by his online alias MalwareTech, has been spared jail time in his sentencing for the creation of the Kronos malware.]]></description>
<link>https://tsecurity.de/de/563834/it-security-nachrichten/wannacry-hero-avoids-jail-time-in-kronos-malware-charges/</link>
<guid isPermaLink="true">https://tsecurity.de/de/563834/it-security-nachrichten/wannacry-hero-avoids-jail-time-in-kronos-malware-charges/</guid>
<pubDate>Mon, 29 Jul 2019 16:01:35 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Marcus Hutchins, also known by his online alias MalwareTech, has been spared jail time in his sentencing for the creation of the Kronos malware.]]></content:encoded>
</item>
<item>
<title><![CDATA[Marcus Hutchins sentenced to supervised release, no jail for the expert]]></title>
<description><![CDATA[Marcus Hutchins has been sentenced to “time served” and one year of supervised release his role in developing and selling the Kronos banking malware. The popular researcher Marcus Hutchins, also known as MalwareTech, has been sentenced to “time served” and one year of supervised release his role ...]]></description>
<link>https://tsecurity.de/de/562622/hacking/marcus-hutchins-sentenced-to-supervised-release-no-jail-for-the-expert/</link>
<guid isPermaLink="true">https://tsecurity.de/de/562622/hacking/marcus-hutchins-sentenced-to-supervised-release-no-jail-for-the-expert/</guid>
<pubDate>Sat, 27 Jul 2019 12:30:35 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[
<p>Marcus Hutchins has been sentenced to “time served” and one year of supervised release his role in developing and selling the Kronos banking malware. The popular researcher Marcus Hutchins, also known as MalwareTech, has been sentenced to “time served” and one year of supervised release his role in developing and selling the Kronos banking malware. […]</p>
<p>The post <a rel="nofollow" href="https://securityaffairs.co/wordpress/88959/cyber-crime/marcus-hutchins-sentence.html">Marcus Hutchins sentenced to supervised release, no jail for the expert</a> appeared first on <a rel="nofollow" href="https://securityaffairs.co/wordpress">Security Affairs</a>.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[WannaCry hero Marcus Hutchin aka MalwareTech won’t serve prison time]]></title>
<description><![CDATA[By Waqas
The British cyber security researcher and WannaCry ransomware hero Marcus Hutchin was initially facing up to 10 years in a US prison.
This is a post from HackRead.com Read the original post: WannaCry hero Marcus Hutchin aka MalwareTech won’t serve prison time]]></description>
<link>https://tsecurity.de/de/562513/it-security-nachrichten/wannacry-hero-marcus-hutchin-aka-malwaretech-wont-serve-prison-time/</link>
<guid isPermaLink="true">https://tsecurity.de/de/562513/it-security-nachrichten/wannacry-hero-marcus-hutchin-aka-malwaretech-wont-serve-prison-time/</guid>
<pubDate>Sat, 27 Jul 2019 03:31:32 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[
<p>By <a rel="nofollow" href="https://www.hackread.com/author/hackread/">Waqas</a></p>
<p>The British cyber security researcher and WannaCry ransomware hero Marcus Hutchin was initially facing up to 10 years in a US prison.</p>
<p>This is a post from HackRead.com Read the original post: <a rel="nofollow" href="https://www.hackread.com/wannacry-hero-marcus-hutchin-malwaretech-case/">WannaCry hero Marcus Hutchin aka MalwareTech won’t serve prison time</a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[MalwareTech Researcher, Who Stopped WannaCry Ransomware, Gets no Jail Time Over Malware Charges]]></title>
<description><![CDATA[Malwaretech researcher, Marcus Hutchins, gets one year supervised release for charges on his role in making and selling the banking malware Kronos and UPAS Kit. In April he pleaded guilty to two counts of creating malware. The Kronos malware available in the dark web markets since 2014 for $7,00,...]]></description>
<link>https://tsecurity.de/de/562509/hacking/malwaretech-researcher-who-stopped-wannacry-ransomware-gets-no-jail-time-over-malware-charges/</link>
<guid isPermaLink="true">https://tsecurity.de/de/562509/hacking/malwaretech-researcher-who-stopped-wannacry-ransomware-gets-no-jail-time-over-malware-charges/</guid>
<pubDate>Sat, 27 Jul 2019 03:30:37 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[
<img width="300" height="300" src="https://i1.wp.com/3.bp.blogspot.com/-FWkHoepxBjY/XTuHHepEpOI/AAAAAAAADQI/4OM_d5jXxlkYuTl1wYsWPu88PNuRghbegCK4BGAYYCw/s1600/Marcus%2BHutchins.png?fit=300%2C300" class="webfeedsFeaturedVisual wp-post-image" alt="Marcus Hutchins" link_thumbnail=""><p>Malwaretech researcher, Marcus Hutchins, gets one year supervised release for charges on his role in making and selling the banking malware Kronos and UPAS Kit. In April he pleaded guilty to two counts of creating malware. The Kronos malware available in the dark web markets since 2014 for $7,00, the malware has keylogging, formgrabbing and […]</p>
<p>The post <a rel="nofollow" href="https://gbhackers.com/marcus-hutchins-no-jail-time/">MalwareTech Researcher, Who Stopped WannaCry Ransomware, Gets no Jail Time Over Malware Charges</a> appeared first on <a rel="nofollow" href="https://gbhackers.com/">GBHackers On Security</a>.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Marcus 'MalwareTech' Hutchins Gets No Prison Time, One Year Supervised Release]]></title>
<description><![CDATA[An anonymous reader writes: Marcus 'MalwareTech' Hutchins, the security researcher who helped stop the WannaCry ransomware outbreak, was sentenced today in the US to time served and one year of supervised release. The UK-born malware analyst avoided the prison time in the case as the judge descri...]]></description>
<link>https://tsecurity.de/de/562416/it-security-nachrichten/marcus-malwaretech-hutchins-gets-no-prison-time-one-year-supervised-release/</link>
<guid isPermaLink="true">https://tsecurity.de/de/562416/it-security-nachrichten/marcus-malwaretech-hutchins-gets-no-prison-time-one-year-supervised-release/</guid>
<pubDate>Fri, 26 Jul 2019 21:31:43 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[An anonymous reader writes: Marcus 'MalwareTech' Hutchins, the security researcher who helped stop the WannaCry ransomware outbreak, was sentenced today in the US to time served and one year of supervised release. The UK-born malware analyst avoided the prison time in the case as the judge described "too many positives on other side of ledger" -- referring to Hutchins' role in the WannaCry ransomware outbreak and his work as a malware analyst. Judge J. P. Stadmueller had a difficult decision on his hand, and would have considered a pardon. However, courts have no such power, and deferred to the executive branch. In court, Hutchins apologized, again, to victims, family, and friends. The judge waived any fines. The sentence comes after Hutchins pleaded guilty this April on two charges of entering a conspiracy to create and distribute malware, and in aiding and abetting its distribution.<p></p>
<div class="share_submission">
<a class="slashpop" href="http://twitter.com/home?status=Marcus+'MalwareTech'+Hutchins+Gets+No+Prison+Time%2C+One+Year+Supervised+Release%3A+http%3A%2F%2Fbit.ly%2F2YtgfvK"><img src="https://a.fsdn.com/sd/twitter_icon_large.png"></a>
<a class="slashpop" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Fyro.slashdot.org%2Fstory%2F19%2F07%2F26%2F1755211%2Fmarcus-malwaretech-hutchins-gets-no-prison-time-one-year-supervised-release%3Futm_source%3Dslashdot%26utm_medium%3Dfacebook"><img src="https://a.fsdn.com/sd/facebook_icon_large.png"></a>

<a class="nobg" href="http://plus.google.com/share?url=https://yro.slashdot.org/story/19/07/26/1755211/marcus-malwaretech-hutchins-gets-no-prison-time-one-year-supervised-release?utm_source=slashdot&amp;utm_medium=googleplus"><img src="https://www.gstatic.com/images/icons/gplus-16.png" alt="Share on Google+"></a>



</div>
<p><a href="https://yro.slashdot.org/story/19/07/26/1755211/marcus-malwaretech-hutchins-gets-no-prison-time-one-year-supervised-release?utm_source=rss1.0moreanon&amp;utm_medium=feed">Read more of this story</a> at Slashdot.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Judge Rules No Jail Time for WannaCry 'Killer' Marcus Hutchins, a.k.a. MalwareTech]]></title>
<description><![CDATA[Marcus Hutchins, better known as MalwareTech, has been sentenced to "time served" and one year of supervised release for developing and selling the Kronos banking malware.

Yes, Hutchins will not go to prison, United States District Judge J.P. Stadtmueller ruled today in Milwaukee County Court, a...]]></description>
<link>https://tsecurity.de/de/562409/it-security-nachrichten/judge-rules-no-jail-time-for-wannacry-killer-marcus-hutchins-aka-malwaretech/</link>
<guid isPermaLink="true">https://tsecurity.de/de/562409/it-security-nachrichten/judge-rules-no-jail-time-for-wannacry-killer-marcus-hutchins-aka-malwaretech/</guid>
<pubDate>Fri, 26 Jul 2019 21:31:41 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Marcus Hutchins, better known as MalwareTech, has been sentenced to "time served" and one year of supervised release for developing and selling the Kronos banking malware.

Yes, Hutchins will not go to prison, United States District Judge J.P. Stadtmueller ruled today in Milwaukee County Court, after describing his good work as "too many positives on the other side of the ledger."

In response<img src="http://feeds.feedburner.com/~r/TheHackersNews/~4/9inBuBXw4IE" height="1" width="1" alt="">
]]></content:encoded>
</item>
<item>
<title><![CDATA[Solving MalwareTech Shellcode challenges with some radare2 magic! - @syscall59]]></title>
<description><![CDATA[submitted by    /u/h41zum  [link]   [comments]]]></description>
<link>https://tsecurity.de/de/523657/reverse-engineering/solving-malwaretech-shellcode-challenges-with-some-radare2-magic-syscall59/</link>
<guid isPermaLink="true">https://tsecurity.de/de/523657/reverse-engineering/solving-malwaretech-shellcode-challenges-with-some-radare2-magic-syscall59/</guid>
<pubDate>Sun, 09 Jun 2019 12:38:57 +0200</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[  submitted by   <a href="https://www.reddit.com/user/h41zum"> /u/h41zum </a> <br><span><a href="http://medium.syscall59.com/solving-malwaretech-shellcode-challenges-with-some-radare2-magic-b91c85babe4b">[link]</a></span>   <span><a href="https://www.reddit.com/r/ReverseEngineering/comments/bydgaz/solving_malwaretech_shellcode_challenges_with/">[comments]</a></span>
]]></content:encoded>
</item>
<item>
<title><![CDATA[WannaCry Hero Marcus Hutchins(MalwareTech) Pleads Guilty to Developing a Banking Malware]]></title>
<description><![CDATA[]]></description>
<link>https://tsecurity.de/de/480288/hacking/wannacry-hero-marcus-hutchinsmalwaretech-pleads-guilty-to-developing-a-banking-malware/</link>
<guid isPermaLink="true">https://tsecurity.de/de/480288/hacking/wannacry-hero-marcus-hutchinsmalwaretech-pleads-guilty-to-developing-a-banking-malware/</guid>
<pubDate>Sat, 20 Apr 2019 11:00:44 +0200</pubDate>
<category>🕵️ Hacking</category>
<source url="https://tsecurity.de">tsecurity.de</source>
</item>
<item>
<title><![CDATA[WannaCry hero MalwareTech pleads guilty to writing banking malware]]></title>
<description><![CDATA[]]></description>
<link>https://tsecurity.de/de/480263/it-security-nachrichten/wannacry-hero-malwaretech-pleads-guilty-to-writing-banking-malware/</link>
<guid isPermaLink="true">https://tsecurity.de/de/480263/it-security-nachrichten/wannacry-hero-malwaretech-pleads-guilty-to-writing-banking-malware/</guid>
<pubDate>Sat, 20 Apr 2019 03:31:48 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
</item>
<item>
<title><![CDATA[WannaCry hero MalwareTech pleads guilty to writing banking malware]]></title>
<description><![CDATA[]]></description>
<link>https://tsecurity.de/de/480264/it-security-nachrichten/wannacry-hero-malwaretech-pleads-guilty-to-writing-banking-malware/</link>
<guid isPermaLink="true">https://tsecurity.de/de/480264/it-security-nachrichten/wannacry-hero-malwaretech-pleads-guilty-to-writing-banking-malware/</guid>
<pubDate>Sat, 20 Apr 2019 03:31:48 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
</item>
<item>
<title><![CDATA[Security researcher MalwareTech pleads guilty]]></title>
<description><![CDATA[]]></description>
<link>https://tsecurity.de/de/480233/it-security-nachrichten/security-researcher-malwaretech-pleads-guilty/</link>
<guid isPermaLink="true">https://tsecurity.de/de/480233/it-security-nachrichten/security-researcher-malwaretech-pleads-guilty/</guid>
<pubDate>Fri, 19 Apr 2019 23:47:02 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
</item>
<item>
<title><![CDATA[Marcus Hutchins, WannaCry-killer, hit with four new charges by the FBI]]></title>
<description><![CDATA[Marcus Hutchins, the British malware analyst who helped stop global Wannacry menace, is now facing four new charges related to malware he allegedly created and promoted it online to steal financial information.

Hutchins, the 24-year-old better known as MalwareTech, was arrested by the FBI last y...]]></description>
<link>https://tsecurity.de/de/324034/it-security-nachrichten/marcus-hutchins-wannacry-killer-hit-with-four-new-charges-by-the-fbi/</link>
<guid isPermaLink="true">https://tsecurity.de/de/324034/it-security-nachrichten/marcus-hutchins-wannacry-killer-hit-with-four-new-charges-by-the-fbi/</guid>
<pubDate>Thu, 07 Jun 2018 15:31:01 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Marcus Hutchins, the British malware analyst who helped stop global Wannacry menace, is now facing four new charges related to malware he allegedly created and promoted it online to steal financial information.

Hutchins, the 24-year-old better known as MalwareTech, was arrested by the FBI last year as he was headed home to England from the DefCon conference in Las Vegas for his alleged role<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheHackersNews?a=Ow-AtJjCWao:1RVCoaQKV8I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheHackersNews?d=yIl2AUoC8zA" border="0"></a>
</div>
<img src="http://feeds.feedburner.com/~r/TheHackersNews/~4/Ow-AtJjCWao" height="1" width="1" alt="">
]]></content:encoded>
</item>
<item>
<title><![CDATA[US Piles New Charges on Marcus Hutchins (aka MalwareTech)]]></title>
<description><![CDATA[The US government has filed new charges against Marcus Hutchins, the security researcher known as MalwareTech who stopped the WannaCry ransomware outbreak last year. [...]]]></description>
<link>https://tsecurity.de/de/323654/it-security-nachrichten/us-piles-new-charges-on-marcus-hutchins-aka-malwaretech/</link>
<guid isPermaLink="true">https://tsecurity.de/de/323654/it-security-nachrichten/us-piles-new-charges-on-marcus-hutchins-aka-malwaretech/</guid>
<pubDate>Thu, 07 Jun 2018 03:00:39 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[The US government has filed new charges against Marcus Hutchins, the security researcher known as MalwareTech who stopped the WannaCry ransomware outbreak last year. [...]]]></content:encoded>
</item>
<item>
<title><![CDATA[WannaCry hero charged with creating Kronos banking malware]]></title>
<description><![CDATA[By Waqas
The 23-year-old cybersecurity expert, Marcus Hutchins (@Malwaretech on Twitter), who
This is a post from HackRead.com Read the original post: WannaCry hero charged with creating Kronos banking malware]]></description>
<link>https://tsecurity.de/de/313071/it-security-nachrichten/wannacry-hero-charged-with-creating-kronos-banking-malware/</link>
<guid isPermaLink="true">https://tsecurity.de/de/313071/it-security-nachrichten/wannacry-hero-charged-with-creating-kronos-banking-malware/</guid>
<pubDate>Wed, 16 May 2018 16:01:12 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[
<p>By <a rel="nofollow" href="https://www.hackread.com/author/hackread/">Waqas</a></p>
<p>The 23-year-old cybersecurity expert, Marcus Hutchins (@Malwaretech on Twitter), who</p>
<p>This is a post from HackRead.com Read the original post: <a rel="nofollow" href="https://www.hackread.com/wannacry-hero-charged-kronos-banking-malware/">WannaCry hero charged with creating Kronos banking malware</a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Malware Developer Who Used Spam Botnet To Pay For College Gets No Prison Time]]></title>
<description><![CDATA[An anonymous reader writes: The operator of a 77,000-strong spam botnet was sentenced to two years probation and no prison time after admitting his crime and completely reforming his life. The former botnet operator is now working for a cybersecurity company, and admitted his actions as soon as t...]]></description>
<link>https://tsecurity.de/de/224576/it-security-nachrichten/malware-developer-who-used-spam-botnet-to-pay-for-college-gets-no-prison-time/</link>
<guid isPermaLink="true">https://tsecurity.de/de/224576/it-security-nachrichten/malware-developer-who-used-spam-botnet-to-pay-for-college-gets-no-prison-time/</guid>
<pubDate>Fri, 03 Nov 2017 14:15:54 +0100</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[An anonymous reader writes: The operator of a 77,000-strong spam botnet was sentenced to two years probation and no prison time after admitting his crime and completely reforming his life. The former botnet operator is now working for a cybersecurity company, and admitted his actions as soon as the FBI knocked on his door back in 2013. The botnet operator, a 29-year-old from Santa Clara, California, says he was tricked by fellow co-schemers who told him they were not doing anything wrong by infecting computers with malware because they were not accessing private information such as banking or financial records. Furthermore, the botnet operator escaped prison time because he used all the money he earned in getting a college degree at Cal Poly instead of using it on a lavish lifestyle or drugs. This case is similar to the one that MalwareTech (aka Marcus Hutchins) now faces in the U.S. for his role in developing the Kronos trojan, but also after turning his life around and working as a cybersecurity researcher for years.<p></p><div class="share_submission">
<a class="slashpop" href="http://twitter.com/home?status=Malware+Developer+Who+Used+Spam+Botnet+To+Pay+For+College+Gets+No+Prison+Time%3A+http%3A%2F%2Fbit.ly%2F2h7MTzv"><img src="https://a.fsdn.com/sd/twitter_icon_large.png"></a>
<a class="slashpop" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Fyro.slashdot.org%2Fstory%2F17%2F11%2F03%2F0017235%2Fmalware-developer-who-used-spam-botnet-to-pay-for-college-gets-no-prison-time%3Futm_source%3Dslashdot%26utm_medium%3Dfacebook"><img src="https://a.fsdn.com/sd/facebook_icon_large.png"></a>

<a class="nobg" href="http://plus.google.com/share?url=https://yro.slashdot.org/story/17/11/03/0017235/malware-developer-who-used-spam-botnet-to-pay-for-college-gets-no-prison-time?utm_source=slashdot&amp;utm_medium=googleplus"><img src="https://www.gstatic.com/images/icons/gplus-16.png" alt="Share on Google+"></a>



</div><p><a href="https://yro.slashdot.org/story/17/11/03/0017235/malware-developer-who-used-spam-botnet-to-pay-for-college-gets-no-prison-time?utm_source=rss1.0moreanon&amp;utm_medium=feed">Read more of this story</a> at Slashdot.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Code Linked to MalwareTech and Kronos Published in 2009]]></title>
<description><![CDATA[A piece of code linked to both the British researcher Marcus Hutchins, known online as MalwareTech, and the banking Trojan named Kronos was first published in 2009.
Hutchins became famous and was named a “hero” after he helped stop the WannaCry ransomware attack by registering a domain that acted...]]></description>
<link>https://tsecurity.de/de/195466/it-security-nachrichten/code-linked-to-malwaretech-and-kronos-published-in-2009/</link>
<guid isPermaLink="true">https://tsecurity.de/de/195466/it-security-nachrichten/code-linked-to-malwaretech-and-kronos-published-in-2009/</guid>
<pubDate>Mon, 21 Aug 2017 13:15:39 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><strong><span><span>A piece of code linked to both the British researcher Marcus Hutchins, known online as MalwareTech, and the banking Trojan named Kronos was first published in 2009.</span></span></strong></p>
<p><span><span>Hutchins became famous and was named a “hero” after he helped stop the WannaCry ransomware attack by registering a domain that acted as a kill switch for the malware.</span></span></p>
<p><a href="http://www.securityweek.com/code-linked-malwaretech-and-kronos-published-2009" target="_blank">read more</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Securityweek?a=IIjVMfFz2zg:3ecnGK1KrZ4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Securityweek?d=yIl2AUoC8zA" border="0"></a> <a href="http://feeds.feedburner.com/~ff/Securityweek?a=IIjVMfFz2zg:3ecnGK1KrZ4:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Securityweek?i=IIjVMfFz2zg:3ecnGK1KrZ4:-BTjWOF_DHI" border="0"></a> <a href="http://feeds.feedburner.com/~ff/Securityweek?a=IIjVMfFz2zg:3ecnGK1KrZ4:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/Securityweek?d=dnMXMwOfBR0" border="0"></a> <a href="http://feeds.feedburner.com/~ff/Securityweek?a=IIjVMfFz2zg:3ecnGK1KrZ4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Securityweek?i=IIjVMfFz2zg:3ecnGK1KrZ4:V_sGLiPBpWU" border="0"></a> <a href="http://feeds.feedburner.com/~ff/Securityweek?a=IIjVMfFz2zg:3ecnGK1KrZ4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Securityweek?d=qj6IDK7rITs" border="0"></a> <a href="http://feeds.feedburner.com/~ff/Securityweek?a=IIjVMfFz2zg:3ecnGK1KrZ4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Securityweek?i=IIjVMfFz2zg:3ecnGK1KrZ4:gIN9vFwOqvQ" border="0"></a> <a href="http://feeds.feedburner.com/~ff/Securityweek?a=IIjVMfFz2zg:3ecnGK1KrZ4:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Securityweek?d=TzevzKxY174" border="0"></a> <a href="http://feeds.feedburner.com/~ff/Securityweek?a=IIjVMfFz2zg:3ecnGK1KrZ4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Securityweek?i=IIjVMfFz2zg:3ecnGK1KrZ4:F7zBnMyn0Lo" border="0"></a>
</div><img src="http://feeds.feedburner.com/~r/Securityweek/~4/IIjVMfFz2zg" height="1" width="1" alt="">]]></content:encoded>
</item>
<item>
<title><![CDATA[British Researcher Pleads Not Guilty to Creating Malware]]></title>
<description><![CDATA[British cybersecurity researcher Marcus Hutchins, known online as “MalwareTech,” has pleaded not guilty in a U.S. court to charges related to creating and selling a banking Trojan named Kronos.
read more]]></description>
<link>https://tsecurity.de/de/193337/it-security-nachrichten/british-researcher-pleads-not-guilty-to-creating-malware/</link>
<guid isPermaLink="true">https://tsecurity.de/de/193337/it-security-nachrichten/british-researcher-pleads-not-guilty-to-creating-malware/</guid>
<pubDate>Mon, 14 Aug 2017 20:00:43 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<p><strong><span><span>British cybersecurity researcher Marcus Hutchins, known online as “MalwareTech,” has pleaded not guilty in a U.S. court to charges related to creating and selling a banking Trojan named Kronos.</span></span></strong></p>
<p><a href="http://www.securityweek.com/british-researcher-pleads-not-guilty-creating-malware" target="_blank">read more</a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Securityweek?a=yS0RIGRCJ8Q:2pG-2DkejU0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/Securityweek?d=yIl2AUoC8zA" border="0"></a> <a href="http://feeds.feedburner.com/~ff/Securityweek?a=yS0RIGRCJ8Q:2pG-2DkejU0:-BTjWOF_DHI"><img src="http://feeds.feedburner.com/~ff/Securityweek?i=yS0RIGRCJ8Q:2pG-2DkejU0:-BTjWOF_DHI" border="0"></a> <a href="http://feeds.feedburner.com/~ff/Securityweek?a=yS0RIGRCJ8Q:2pG-2DkejU0:dnMXMwOfBR0"><img src="http://feeds.feedburner.com/~ff/Securityweek?d=dnMXMwOfBR0" border="0"></a> <a href="http://feeds.feedburner.com/~ff/Securityweek?a=yS0RIGRCJ8Q:2pG-2DkejU0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/Securityweek?i=yS0RIGRCJ8Q:2pG-2DkejU0:V_sGLiPBpWU" border="0"></a> <a href="http://feeds.feedburner.com/~ff/Securityweek?a=yS0RIGRCJ8Q:2pG-2DkejU0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/Securityweek?d=qj6IDK7rITs" border="0"></a> <a href="http://feeds.feedburner.com/~ff/Securityweek?a=yS0RIGRCJ8Q:2pG-2DkejU0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/Securityweek?i=yS0RIGRCJ8Q:2pG-2DkejU0:gIN9vFwOqvQ" border="0"></a> <a href="http://feeds.feedburner.com/~ff/Securityweek?a=yS0RIGRCJ8Q:2pG-2DkejU0:TzevzKxY174"><img src="http://feeds.feedburner.com/~ff/Securityweek?d=TzevzKxY174" border="0"></a> <a href="http://feeds.feedburner.com/~ff/Securityweek?a=yS0RIGRCJ8Q:2pG-2DkejU0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/Securityweek?i=yS0RIGRCJ8Q:2pG-2DkejU0:F7zBnMyn0Lo" border="0"></a>
</div><img src="http://feeds.feedburner.com/~r/Securityweek/~4/yS0RIGRCJ8Q" height="1" width="1" alt="">]]></content:encoded>
</item>
<item>
<title><![CDATA[Researcher Who Stopped WannaCry Pleads Not Guilty to Creating Banking Malware]]></title>
<description><![CDATA[Lorenzo Franceschi-Bicchierai, reporting for Motherboard: Monday, the well-known security researcher who became famous after helping to stop the destructive WannaCry ransomware outbreak pleaded "not guilty" to creating software that would later become banking malware. Marcus Hutchins -- better kn...]]></description>
<link>https://tsecurity.de/de/193256/it-security-nachrichten/researcher-who-stopped-wannacry-pleads-not-guilty-to-creating-banking-malware/</link>
<guid isPermaLink="true">https://tsecurity.de/de/193256/it-security-nachrichten/researcher-who-stopped-wannacry-pleads-not-guilty-to-creating-banking-malware/</guid>
<pubDate>Mon, 14 Aug 2017 16:15:53 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Lorenzo Franceschi-Bicchierai, reporting for Motherboard: Monday, the well-known security researcher who became famous after helping to stop the destructive WannaCry ransomware outbreak pleaded "not guilty" to creating software that would later become banking malware. Marcus Hutchins -- better known by his online nickname MalwareTech -- was arrested in early August in Las Vegas after the hacking conference Def Con. The US government accuses Hutchins of writing software in 2014 that would later become the banking malware Kronos. After getting out on bail and traveling to Milwaukee, he stood in front a judge on Monday for his arraignment. Prosecutors also allege he helped a still unknown co-defendant market and sell Kronos. Hutchins's lawyer Brian Klein declared in a packed courtroom in Milwaukee that Hutchins was "not guilty" of six charges related to the alleged creation and distribution of malware. Hutchins will be allowed to travel to Los Angeles, where he will live while he awaits trial. He will also be represented by Marcia Hoffman, formerly of the Electronic Frontier Foundation. Under the terms of his release, Hutchins will be tracked by GPS but will be allowed full internet access so he can continue to work as a security researcher; the only restriction is he will no longer be allowed to access the WannaCry "sinkhole" he used to stop the outbreak of ransomware.<p></p><div class="share_submission">
<a class="slashpop" href="http://twitter.com/home?status=Researcher+Who+Stopped+WannaCry+Pleads+Not+Guilty+to+Creating+Banking+Malware%3A+http%3A%2F%2Fbit.ly%2F2uHndes"><img src="https://a.fsdn.com/sd/twitter_icon_large.png"></a>
<a class="slashpop" href="http://www.facebook.com/sharer.php?u=https%3A%2F%2Fyro.slashdot.org%2Fstory%2F17%2F08%2F14%2F1549251%2Fresearcher-who-stopped-wannacry-pleads-not-guilty-to-creating-banking-malware%3Futm_source%3Dslashdot%26utm_medium%3Dfacebook"><img src="https://a.fsdn.com/sd/facebook_icon_large.png"></a>

<a class="nobg" href="http://plus.google.com/share?url=https://yro.slashdot.org/story/17/08/14/1549251/researcher-who-stopped-wannacry-pleads-not-guilty-to-creating-banking-malware?utm_source=slashdot&amp;utm_medium=googleplus"><img src="http://www.gstatic.com/images/icons/gplus-16.png" alt="Share on Google+"></a>                                                                                                                                                                              



</div><p><a href="https://yro.slashdot.org/story/17/08/14/1549251/researcher-who-stopped-wannacry-pleads-not-guilty-to-creating-banking-malware?utm_source=rss1.0moreanon&amp;utm_medium=feed">Read more of this story</a> at Slashdot.</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[Festnahme in den USA: MalwareTech soll Banking-Trojaner Kronos entwickelt haben]]></title>
<description><![CDATA[Die Hacker- und IT-Security-Konferenz Def Con besuchte Marcus H. demnach nur am Rande, wie Daily Mail behauptet. Unterstützer des Verhafteten ...]]></description>
<link>https://tsecurity.de/de/190738/it-security-nachrichten/festnahme-in-den-usa-malwaretech-soll-banking-trojaner-kronos-entwickelt-haben/</link>
<guid isPermaLink="true">https://tsecurity.de/de/190738/it-security-nachrichten/festnahme-in-den-usa-malwaretech-soll-banking-trojaner-kronos-entwickelt-haben/</guid>
<pubDate>Mon, 07 Aug 2017 16:00:56 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Die Hacker- und <b>IT</b>-<b>Security</b>-Konferenz Def Con besuchte Marcus H. demnach nur am Rande, wie Daily Mail behauptet. Unterstützer des Verhafteten ...]]></content:encoded>
</item>
<item>
<title><![CDATA[Malwaretech Blog: Marcus Hutchins soll auf Kaution freikommen]]></title>
<description><![CDATA[Der in den USA inhaftierte britische Hacker soll vorerst auf Kaution freikommen. Weil seine Bekannten das nötige Geld nicht am Freitag aufbringen konnten, musste er das Wochenende in Haft verbringen. (Malware, Defcon)]]></description>
<link>https://tsecurity.de/de/190491/it-nachrichten/malwaretech-blog-marcus-hutchins-soll-auf-kaution-freikommen/</link>
<guid isPermaLink="true">https://tsecurity.de/de/190491/it-nachrichten/malwaretech-blog-marcus-hutchins-soll-auf-kaution-freikommen/</guid>
<pubDate>Mon, 07 Aug 2017 08:48:24 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Der in den USA inhaftierte britische Hacker soll vorerst auf Kaution freikommen. Weil seine Bekannten das nötige Geld nicht am Freitag aufbringen konnten, musste er das Wochenende in Haft verbringen. (<a href="https://www.golem.de/specials/malware/">Malware</a>, <a href="https://www.golem.de/specials/defcon/">Defcon</a>) <img src="https://cpx.golem.de/cpx.php?class=17&amp;aid=129335&amp;page=1&amp;ts=1502093760" alt="" width="1" height="1">]]></content:encoded>
</item>
<item>
<title><![CDATA[Malwaretech Blog: Marcus Hutchins soll auf Kaution freikommen]]></title>
<description><![CDATA[Der in den USA inhaftierte britische Hacker soll vorerst auf Kaution freikommen. Weil seine Bekannten das nötige Geld nicht am Freitag aufbringen konnten, musste er das Wochenende in Haft verbringen. (Malware, Defcon)]]></description>
<link>https://tsecurity.de/de/190478/it-security-nachrichten/malwaretech-blog-marcus-hutchins-soll-auf-kaution-freikommen/</link>
<guid isPermaLink="true">https://tsecurity.de/de/190478/it-security-nachrichten/malwaretech-blog-marcus-hutchins-soll-auf-kaution-freikommen/</guid>
<pubDate>Mon, 07 Aug 2017 08:45:55 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Der in den USA inhaftierte britische Hacker soll vorerst auf Kaution freikommen. Weil seine Bekannten das nötige Geld nicht am Freitag aufbringen konnten, musste er das Wochenende in Haft verbringen. (<a href="https://www.golem.de/specials/malware/">Malware</a>, <a href="https://www.golem.de/specials/defcon/">Defcon</a>) <img src="https://cpx.golem.de/cpx.php?class=17&amp;aid=129335&amp;page=1&amp;ts=1502093760" alt="" width="1" height="1">]]></content:encoded>
</item>
<item>
<title><![CDATA[Kronos Malware 'Dealer' On WannaCry Killer Charges: What Charges?]]></title>
<description><![CDATA[The government claims Marcus Hutchins, aka MalwareTech, created banking malware and knew about the harm it caused. But researchers say the malicious tool didn't do much.]]></description>
<link>https://tsecurity.de/de/190412/it-security-nachrichten/kronos-malware-dealer-on-wannacry-killer-charges-what-charges/</link>
<guid isPermaLink="true">https://tsecurity.de/de/190412/it-security-nachrichten/kronos-malware-dealer-on-wannacry-killer-charges-what-charges/</guid>
<pubDate>Sun, 06 Aug 2017 20:15:47 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[The government claims Marcus Hutchins, aka MalwareTech, created banking malware and knew about the harm it caused. But researchers say the malicious tool didn't do much.]]></content:encoded>
</item>
<item>
<title><![CDATA[Marcus Hutchins (MalwareTech) Gets $30,000 Bail, But Can't Leave United States]]></title>
<description><![CDATA[Marcus Hutchins, the malware analyst who helped stop global Wannacry menace, has reportedly pleaded not guilty to charges of creating and distributing the infamous Kronos banking malware and is set to release on $30,000 bail on Monday.

Hutchins, the 23-year-old who operates under the alias Malwa...]]></description>
<link>https://tsecurity.de/de/190172/it-security-nachrichten/marcus-hutchins-malwaretech-gets-30000-bail-but-cant-leave-united-states/</link>
<guid isPermaLink="true">https://tsecurity.de/de/190172/it-security-nachrichten/marcus-hutchins-malwaretech-gets-30000-bail-but-cant-leave-united-states/</guid>
<pubDate>Sat, 05 Aug 2017 10:00:36 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Marcus Hutchins, the malware analyst who helped stop global Wannacry menace, has reportedly pleaded not guilty to charges of creating and distributing the infamous Kronos banking malware and is set to release on $30,000 bail on Monday.

Hutchins, the 23-year-old who operates under the alias MalwareTech on Twitter, stormed to fame and hailed as a hero over two months ago when he stopped a<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheHackersNews?a=A1ZJy_JTnH4:7CR-lek9Gic:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheHackersNews?d=yIl2AUoC8zA" border="0"></a>
</div><img src="http://feeds.feedburner.com/~r/TheHackersNews/~4/A1ZJy_JTnH4" height="1" width="1" alt="">]]></content:encoded>
</item>
<item>
<title><![CDATA[Kronos Malware Dealer On WannaCry Killer Charges: What Charges?]]></title>
<description><![CDATA[The government claims Marcus Hutchins, aka MalwareTech, created banking malware and knew about the harm it caused. But researchers say the malicious tool didn't do much.]]></description>
<link>https://tsecurity.de/de/190062/it-security-nachrichten/kronos-malware-dealer-on-wannacry-killer-charges-what-charges/</link>
<guid isPermaLink="true">https://tsecurity.de/de/190062/it-security-nachrichten/kronos-malware-dealer-on-wannacry-killer-charges-what-charges/</guid>
<pubDate>Fri, 04 Aug 2017 17:45:35 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[The government claims Marcus Hutchins, aka MalwareTech, created banking malware and knew about the harm it caused. But researchers say the malicious tool didn't do much.]]></content:encoded>
</item>
<item>
<title><![CDATA[Threatpost News Wrap, August 4, 2017]]></title>
<description><![CDATA[The news of the week is discussed, including how Marcus Hutchins, aka MalwareTech was arrested in Las Vegas, Alex Stamos' Black Hat keynote, and this week's proposed IoT legislation.]]></description>
<link>https://tsecurity.de/de/190038/it-security-nachrichten/threatpost-news-wrap-august-4-2017/</link>
<guid isPermaLink="true">https://tsecurity.de/de/190038/it-security-nachrichten/threatpost-news-wrap-august-4-2017/</guid>
<pubDate>Fri, 04 Aug 2017 16:31:11 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[The news of the week is discussed, including how Marcus Hutchins, aka MalwareTech was arrested in Las Vegas, Alex Stamos' Black Hat keynote, and this week's proposed IoT legislation.]]></content:encoded>
</item>
<item>
<title><![CDATA[WannaCry Hero Arrested, One of Two Charged with Distribution of Kronos Malware]]></title>
<description><![CDATA[Marcus Hutchins, aka MalwareTech the WannaCry hero, was arrested and charged with another unnamed individual with creating and distributing the Kronos banking malware.]]></description>
<link>https://tsecurity.de/de/189718/it-security-nachrichten/wannacry-hero-arrested-one-of-two-charged-with-distribution-of-kronos-malware/</link>
<guid isPermaLink="true">https://tsecurity.de/de/189718/it-security-nachrichten/wannacry-hero-arrested-one-of-two-charged-with-distribution-of-kronos-malware/</guid>
<pubDate>Thu, 03 Aug 2017 20:45:36 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Marcus Hutchins, aka MalwareTech the WannaCry hero, was arrested and charged with another unnamed individual with creating and distributing the Kronos banking malware.]]></content:encoded>
</item>
<item>
<title><![CDATA[FBI Arrests Researcher Who Found 'Kill-Switch' to Stop Wannacry Ransomware]]></title>
<description><![CDATA[The 22-year-old British security researcher who gained fame for discovering the "kill switch" that stopped the outbreak of the WannaCry ransomware—has been reportedly arrested in the United States after attending the Def Con hacking conference in Las Vegas.

Marcus Hutchins, operates under the al...]]></description>
<link>https://tsecurity.de/de/189686/it-security-nachrichten/fbi-arrests-researcher-who-found-kill-switch-to-stop-wannacry-ransomware/</link>
<guid isPermaLink="true">https://tsecurity.de/de/189686/it-security-nachrichten/fbi-arrests-researcher-who-found-kill-switch-to-stop-wannacry-ransomware/</guid>
<pubDate>Thu, 03 Aug 2017 18:45:38 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[The 22-year-old British security researcher who gained fame for discovering the "kill switch" that stopped the outbreak of the WannaCry ransomware—has been reportedly arrested in the United States after attending the Def Con hacking conference in Las Vegas.

Marcus Hutchins, operates under the alias MalwareTech on Twitter, was detained by the FBI in the state of Nevada, a friend of Hutchins<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheHackersNews?a=CJLT6yiMtew:quCrYlv-Qu4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheHackersNews?d=yIl2AUoC8zA" border="0"></a>
</div><img src="http://feeds.feedburner.com/~r/TheHackersNews/~4/CJLT6yiMtew" height="1" width="1" alt="">]]></content:encoded>
</item>
<item>
<title><![CDATA[Wanna Cry: Sicherheitsforscher Malwaretech in den USA festgenommen]]></title>
<description><![CDATA[Ein britischer Sicherheitsforscher und Hacker ist in den USA verhaftet worden. Der 23-Jährige hatte unabsichtlich dazu beigetragen, die Ausbreitung von Wanna Cry zu verlangsamen. Der Grund für die Festnahme ist derzeit unklar. (Security, Defcon)]]></description>
<link>https://tsecurity.de/de/189670/it-nachrichten/wanna-cry-sicherheitsforscher-malwaretech-in-den-usa-festgenommen/</link>
<guid isPermaLink="true">https://tsecurity.de/de/189670/it-nachrichten/wanna-cry-sicherheitsforscher-malwaretech-in-den-usa-festgenommen/</guid>
<pubDate>Thu, 03 Aug 2017 17:32:50 +0200</pubDate>
<category>📰 IT Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Ein britischer Sicherheitsforscher und Hacker ist in den USA verhaftet worden. Der 23-Jährige hatte unabsichtlich dazu beigetragen, die Ausbreitung von Wanna Cry zu verlangsamen. Der Grund für die Festnahme ist derzeit unklar. (<a href="https://www.golem.de/specials/security/">Security</a>, <a href="https://www.golem.de/specials/defcon/">Defcon</a>) <img src="https://cpx.golem.de/cpx.php?class=17&amp;aid=129301&amp;page=1&amp;ts=1501781340" alt="" width="1" height="1">]]></content:encoded>
</item>
<item>
<title><![CDATA[Wanna Cry: Sicherheitsforscher Malwaretech in den USA festgenommen]]></title>
<description><![CDATA[Ein britischer Sicherheitsforscher und Hacker ist in den USA verhaftet worden. Der 23-Jährige hatte unabsichtlich dazu beigetragen, die Ausbreitung von Wanna Cry zu verlangsamen. Der Grund für die Festnahme ist derzeit unklar. (Security, Defcon)]]></description>
<link>https://tsecurity.de/de/189662/it-security-nachrichten/wanna-cry-sicherheitsforscher-malwaretech-in-den-usa-festgenommen/</link>
<guid isPermaLink="true">https://tsecurity.de/de/189662/it-security-nachrichten/wanna-cry-sicherheitsforscher-malwaretech-in-den-usa-festgenommen/</guid>
<pubDate>Thu, 03 Aug 2017 17:30:32 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Ein britischer Sicherheitsforscher und Hacker ist in den USA verhaftet worden. Der 23-Jährige hatte unabsichtlich dazu beigetragen, die Ausbreitung von Wanna Cry zu verlangsamen. Der Grund für die Festnahme ist derzeit unklar. (<a href="https://www.golem.de/specials/security/">Security</a>, <a href="https://www.golem.de/specials/defcon/">Defcon</a>) <img src="https://cpx.golem.de/cpx.php?class=17&amp;aid=129301&amp;page=1&amp;ts=1501781340" alt="" width="1" height="1">]]></content:encoded>
</item>
<item>
<title><![CDATA[Hero White Hat Who Stopped WannaCry Spread Awarded $10K by HackerOne]]></title>
<description><![CDATA[The security researcher that put a stop to the spread of WannaCry last week was rewarded a $10,000 bug bounty by HackerOne. 

The white hat hacker MalwareTech, who has since been identified after British tabloids doxxed him while he clearly wanted to keep his anonymity, managed to put a stop to t...]]></description>
<link>https://tsecurity.de/de/160041/it-security-nachrichten/hero-white-hat-who-stopped-wannacry-spread-awarded-10k-by-hackerone/</link>
<guid isPermaLink="true">https://tsecurity.de/de/160041/it-security-nachrichten/hero-white-hat-who-stopped-wannacry-spread-awarded-10k-by-hackerone/</guid>
<pubDate>Tue, 16 May 2017 20:45:47 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[The security researcher that put a stop to the spread of WannaCry last week was rewarded a $10,000 bug bounty by HackerOne. 

The white hat hacker MalwareTech, who has since been identified after British tabloids doxxed him while he clearly wanted to keep his anonymity, managed to put a stop to the spread of this ransomware by registering a jibberish domain found deep within the malware's code, effectively triggering the kill switch.

Of course, ever since then other variants have popped up in the wild, some with kill switches of their own, others without. Nonetheless, the worst wave had been stopped. In total, around 220,000 computers have been infected in over 150 countries across the world. Even more such infections were blocked by security solutions. 

HackerOne, the bug bounty platform used by dozens of companies and even the US Army, has decided it would be a good idea to reward MalwareTech for the great service he did the world. 

The young white hat doesn't p...]]></content:encoded>
</item>
<item>
<title><![CDATA[Note on WannaCrypt Infection Count Accuracy]]></title>
<description><![CDATA[Our sinkhole is designed to collect any and all HTTP requests to sinkholed domain for investigation purposes (these are then sent to a back-end database). What this means is that around the period when infections started being prevented the data on https://intel.malwaretech.com/botnet/wcrypt had ...]]></description>
<link>https://tsecurity.de/de/159730/reverse-engineering/note-on-wannacrypt-infection-count-accuracy/</link>
<guid isPermaLink="true">https://tsecurity.de/de/159730/reverse-engineering/note-on-wannacrypt-infection-count-accuracy/</guid>
<pubDate>Tue, 16 May 2017 10:02:58 +0200</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Our sinkhole is designed to collect any and all HTTP requests to sinkholed domain for investigation purposes (these are then sent to a back-end database). What this means is that around the period when infections started being prevented the data on https://intel.malwaretech.com/botnet/wcrypt had almost pinpoint accuracy; […]]]></content:encoded>
</item>
<item>
<title><![CDATA[British Tabloids Doxxed WannaCry "Accidental Hero"]]></title>
<description><![CDATA[UK tabloids were on a twisted mission the other day - find out, at whatever price, just who is behind the MalwareTech Twitter handle. In other words, they wanted to know the name of the "accidental hero" who stopped the spread of one of the largest cyber attacks in history. 

Their methods weren'...]]></description>
<link>https://tsecurity.de/de/159489/it-security-nachrichten/british-tabloids-doxxed-wannacry-accidental-hero/</link>
<guid isPermaLink="true">https://tsecurity.de/de/159489/it-security-nachrichten/british-tabloids-doxxed-wannacry-accidental-hero/</guid>
<pubDate>Mon, 15 May 2017 22:15:55 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[UK tabloids were on a twisted mission the other day - find out, at whatever price, just who is behind the MalwareTech Twitter handle. In other words, they wanted to know the name of the "accidental hero" who stopped the spread of one of the largest cyber attacks in history. 

Their methods weren't exactly the greatest - they doxxed him. They dug and dug the Internet for traces of any information that may help identify him. They stalked his Instagram, tracked a girl and stalked her too. It was completely insane and not something you should do to someone who was already more than willing to speak to you, albeit not face to face. 

The only thing the young researcher wanted to do was remain anonymous, do what he loves and continue saving the world. Against his will, his name has now been made public. Personal details about him were made public too, even though they held no weight in what he did and why he did it. 

The only information anyone really needed about him was...]]></content:encoded>
</item>
<item>
<title><![CDATA[Watch WannaCry attack geography in real time]]></title>
<description><![CDATA[The MalwareTech analyst who briefly blunted the WannaCry outbreak last week has a couple of real-time trackers that show attacks in progress.]]></description>
<link>https://tsecurity.de/de/159328/it-security-nachrichten/watch-wannacry-attack-geography-in-real-time/</link>
<guid isPermaLink="true">https://tsecurity.de/de/159328/it-security-nachrichten/watch-wannacry-attack-geography-in-real-time/</guid>
<pubDate>Mon, 15 May 2017 16:00:48 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[The MalwareTech analyst who briefly blunted the WannaCry outbreak last week has a couple of real-time trackers that show attacks in progress.]]></content:encoded>
</item>
<item>
<title><![CDATA[Bitdefender: Threats Like WannaCry Will Become the Norm]]></title>
<description><![CDATA[The digital side of our lives has just gotten a lot more dangerous with the presence of WannaCry and that's mostly because we are probably going to start seeing this type of infections a lot more often from here on out. 

Bitdefender notes that just a few hours ago a new version of WannaCry has b...]]></description>
<link>https://tsecurity.de/de/159173/it-security-nachrichten/bitdefender-threats-like-wannacry-will-become-the-norm/</link>
<guid isPermaLink="true">https://tsecurity.de/de/159173/it-security-nachrichten/bitdefender-threats-like-wannacry-will-become-the-norm/</guid>
<pubDate>Mon, 15 May 2017 12:15:48 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[The digital side of our lives has just gotten a lot more dangerous with the presence of WannaCry and that's mostly because we are probably going to start seeing this type of infections a lot more often from here on out. 

Bitdefender notes that just a few hours ago a new version of WannaCry has been spotted in the wild after the hacking group behind the ransomware changed a couple of bytes to override the kill switch discovered by MalwareTech, which stopped the spread of the initial wave. A second wave was stopped by another security researcher through a similar method. 

"WannaCry 1.0 and 2.0 are just the beginning. It's probably going to get worse before it gets better, as it's going to be one of the most serious threats for the following 12 months," BitDefender's Catalin Cosoi writes. A solution may exist, he notes, if Microsoft would deci...]]></content:encoded>
</item>
<item>
<title><![CDATA[WannaCry Ransomware Variant with No Kill Switch Discovered]]></title>
<description><![CDATA[As expected, the WannaCry ransomware is not even close to being done, despite one researcher discovering a convenient kill switch. Other variants have already been discovered in the wild, some with a different kill switch, some with none at all. 

After security researcher going by the Twitter ha...]]></description>
<link>https://tsecurity.de/de/158972/it-security-nachrichten/wannacry-ransomware-variant-with-no-kill-switch-discovered/</link>
<guid isPermaLink="true">https://tsecurity.de/de/158972/it-security-nachrichten/wannacry-ransomware-variant-with-no-kill-switch-discovered/</guid>
<pubDate>Sun, 14 May 2017 20:00:25 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[As expected, the WannaCry ransomware is not even close to being done, despite one researcher discovering a convenient kill switch. Other variants have already been discovered in the wild, some with a different kill switch, some with none at all. 

After security researcher going by the Twitter handle MalwareTech discovered that by purchasing a random domain name the initial spread of the WannaCry ransomware was stopped, it was expected that the attackers would simply remove this domain from the code, add another or just leave the code free of such an easy way out. 

Multiple researchers have confirmed that such variants are available online and coming after Internet users everywhere. 

 A patched (non recompiled) variant with *NO* kill-switch is out there too. Patched jump and zeroed the URL. ...]]></content:encoded>
</item>
<item>
<title><![CDATA[WannaCry Ransomware Spread Halted by Hero Researcher]]></title>
<description><![CDATA[Dubbed an "accidental hero," a cybersecurity researcher tweeting under the MalwareTech handle, has managed to find a kill switch to stop the spread of the WannaCry ransomware. 

Working together with Darien Huss from Proofpoint security firm, the researcher managed to dig into the WannaCry code a...]]></description>
<link>https://tsecurity.de/de/158873/it-security-nachrichten/wannacry-ransomware-spread-halted-by-hero-researcher/</link>
<guid isPermaLink="true">https://tsecurity.de/de/158873/it-security-nachrichten/wannacry-ransomware-spread-halted-by-hero-researcher/</guid>
<pubDate>Sat, 13 May 2017 22:45:39 +0200</pubDate>
<category>📰 IT Security Nachrichten</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Dubbed an "accidental hero," a cybersecurity researcher tweeting under the MalwareTech handle, has managed to find a kill switch to stop the spread of the WannaCry ransomware. 

Working together with Darien Huss from Proofpoint security firm, the researcher managed to dig into the WannaCry code and find a kill switch. Hardcoded into the malware in the case the creator wanted to stop it from spreading there was a nonsensical domain name that the malware made a request to. If the request was successful, the kill switch went into effect and the malware stops spreading. 

All it took MalwareTech to do was to register that domain since the attackers didn't bother to do it. They say they didn't even realize that this would put an end to the propagation of the malware until after the deed was done. The problem now is that the attackers can, at any point, fiddle with the code and tak...]]></content:encoded>
</item>
<item>
<title><![CDATA[Ransomware Reaches the Malware Top 3 for the First Time]]></title>
<description><![CDATA[According to statistics gathered by Check Point, for the first time ever, ransomware has entered the top 3 of today's most dangerous malware.

While everybody knows how dangerous and devastating a ransomware infection can be, the number of affected victims was regularly low, and never large enoug...]]></description>
<link>https://tsecurity.de/de/85257/it-security/ransomware-reaches-the-malware-top-3-for-the-first-time/</link>
<guid isPermaLink="true">https://tsecurity.de/de/85257/it-security/ransomware-reaches-the-malware-top-3-for-the-first-time/</guid>
<pubDate>Mon, 24 Oct 2016 00:45:12 +0200</pubDate>
<category>📰 IT Security</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[According to statistics gathered by Check Point, for the first time ever, ransomware has entered the top 3 of today's most dangerous malware.

While everybody knows how dangerous and devastating a ransomware infection can be, the number of affected victims was regularly low, and never large enough to warrant a spot on the top 10, let alone top 3 most dangerous malware families around.

Things changed this summer and autumn when ransomware infections seem to have gone out of control. The ransomware family that made it into the top 3 is none other than Locky.

Locky's prevalence is no surprise, knowing that it received several updates in the past months and is spread via the massive Necurs botnet, which according to recent statistics gathered by MalwareTech, has over 6 million bots ready to send Locky spam.

Check Point's findings regarding Locky's rise i...]]></content:encoded>
</item>
<item>
<title><![CDATA[Ransomware Reaches the Malware Top 3 for the First Time]]></title>
<description><![CDATA[According to statistics gathered by Check Point, for the first time ever, ransomware has entered the top 3 of today's most dangerous malware.

While everybody knows how dangerous and devastating a ransomware infection can be, the number of affected victims was regularly low, and never large enoug...]]></description>
<link>https://tsecurity.de/de/85257/it-security/ransomware-reaches-the-malware-top-3-for-the-first-time/</link>
<guid isPermaLink="true">https://tsecurity.de/de/85257/it-security/ransomware-reaches-the-malware-top-3-for-the-first-time/</guid>
<pubDate>Mon, 24 Oct 2016 00:45:12 +0200</pubDate>
<category>📰 IT Security</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[According to statistics gathered by Check Point, for the first time ever, ransomware has entered the top 3 of today's most dangerous malware.

While everybody knows how dangerous and devastating a ransomware infection can be, the number of affected victims was regularly low, and never large enough to warrant a spot on the top 10, let alone top 3 most dangerous malware families around.

Things changed this summer and autumn when ransomware infections seem to have gone out of control. The ransomware family that made it into the top 3 is none other than Locky.

Locky's prevalence is no surprise, knowing that it received several updates in the past months and is spread via the massive Necurs botnet, which according to recent statistics gathered by MalwareTech, has over 6 million bots ready to send Locky spam.

Check Point's findings regarding Locky's rise i...]]></content:encoded>
</item>
<item>
<title><![CDATA[Initial Estimations of Mirai DDoS Botnet Are Accurate]]></title>
<description><![CDATA[According to a recent analysis by security researchers MalwareTech and 2sec4u, initial estimations on the size of the Mirai botnet seem to be precise, with the botnet pulling in around 120,00 bots per day.

The numbers come from over 500 honeypot servers installed across the Internet by the two r...]]></description>
<link>https://tsecurity.de/de/78717/it-security/initial-estimations-of-mirai-ddos-botnet-are-accurate/</link>
<guid isPermaLink="true">https://tsecurity.de/de/78717/it-security/initial-estimations-of-mirai-ddos-botnet-are-accurate/</guid>
<pubDate>Tue, 04 Oct 2016 04:30:12 +0200</pubDate>
<category>📰 IT Security</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[According to a recent analysis by security researchers MalwareTech and 2sec4u, initial estimations on the size of the Mirai botnet seem to be precise, with the botnet pulling in around 120,00 bots per day.

The numbers come from over 500 honeypot servers installed across the Internet by the two researchers, who configured the servers to imitate vulnerable IoT devices that had their telnet port open for external connections and used simplistic admin passwords.

These are the types of targets the Mirai trojan targets and infects, adding them to a botnet controlled by an attacker, which is rented and used to carry out DDoS attacks.

Mirai botnet confirmed to be comprised mainly of CCTV cameras

This botnet, even if n...]]></content:encoded>
</item>
<item>
<title><![CDATA[Initial Estimations of Mirai DDoS Botnet Are Accurate]]></title>
<description><![CDATA[According to a recent analysis by security researchers MalwareTech and 2sec4u, initial estimations on the size of the Mirai botnet seem to be precise, with the botnet pulling in around 120,00 bots per day.

The numbers come from over 500 honeypot servers installed across the Internet by the two r...]]></description>
<link>https://tsecurity.de/de/78717/it-security/initial-estimations-of-mirai-ddos-botnet-are-accurate/</link>
<guid isPermaLink="true">https://tsecurity.de/de/78717/it-security/initial-estimations-of-mirai-ddos-botnet-are-accurate/</guid>
<pubDate>Tue, 04 Oct 2016 04:30:12 +0200</pubDate>
<category>📰 IT Security</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[According to a recent analysis by security researchers MalwareTech and 2sec4u, initial estimations on the size of the Mirai botnet seem to be precise, with the botnet pulling in around 120,00 bots per day.

The numbers come from over 500 honeypot servers installed across the Internet by the two researchers, who configured the servers to imitate vulnerable IoT devices that had their telnet port open for external connections and used simplistic admin passwords.

These are the types of targets the Mirai trojan targets and infects, adding them to a botnet controlled by an attacker, which is rented and used to carry out DDoS attacks.

Mirai botnet confirmed to be comprised mainly of CCTV cameras

This botnet, even if n...]]></content:encoded>
</item>
<item>
<title><![CDATA[Dridex Spam Now Using Password-Protected Office Documents]]></title>
<description><![CDATA[Operators of the Dridex banking trojan are experimenting with a new technique of delivering spam to their victims, according to independent security researcher MalwareTech.

The researcher has recently spotted a spam wave coming from legitimate but compromised websites, which the crooks were abus...]]></description>
<link>https://tsecurity.de/de/76869/it-security/dridex-spam-now-using-password-protected-office-documents/</link>
<guid isPermaLink="true">https://tsecurity.de/de/76869/it-security/dridex-spam-now-using-password-protected-office-documents/</guid>
<pubDate>Tue, 27 Sep 2016 19:00:10 +0200</pubDate>
<category>📰 IT Security</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Operators of the Dridex banking trojan are experimenting with a new technique of delivering spam to their victims, according to independent security researcher MalwareTech.

The researcher has recently spotted a spam wave coming from legitimate but compromised websites, which the crooks were abusing to send spam to victims, most predominantly to users living in the UK.

Crooks experimenting with non-Necurs delivery channels

There are two new techniques employed by the Dridex crew in this campaign. The first is the usage of compromised servers to send spam. Previously the Dridex gang had historically relied on the Necurs botnet, a network of compromised computers.

Because crooks used such a novel tactic, it took security firms some time to discover the new campaign and properly mark it as spam.

The second is in the...]]></content:encoded>
</item>
<item>
<title><![CDATA[Dridex Spam Now Using Password-Protected Office Documents]]></title>
<description><![CDATA[Operators of the Dridex banking trojan are experimenting with a new technique of delivering spam to their victims, according to independent security researcher MalwareTech.

The researcher has recently spotted a spam wave coming from legitimate but compromised websites, which the crooks were abus...]]></description>
<link>https://tsecurity.de/de/76869/it-security/dridex-spam-now-using-password-protected-office-documents/</link>
<guid isPermaLink="true">https://tsecurity.de/de/76869/it-security/dridex-spam-now-using-password-protected-office-documents/</guid>
<pubDate>Tue, 27 Sep 2016 19:00:10 +0200</pubDate>
<category>📰 IT Security</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[Operators of the Dridex banking trojan are experimenting with a new technique of delivering spam to their victims, according to independent security researcher MalwareTech.

The researcher has recently spotted a spam wave coming from legitimate but compromised websites, which the crooks were abusing to send spam to victims, most predominantly to users living in the UK.

Crooks experimenting with non-Necurs delivery channels

There are two new techniques employed by the Dridex crew in this campaign. The first is the usage of compromised servers to send spam. Previously the Dridex gang had historically relied on the Necurs botnet, a network of compromised computers.

Because crooks used such a novel tactic, it took security firms some time to discover the new campaign and properly mark it as spam.

The second is in the...]]></content:encoded>
</item>
<item>
<title><![CDATA[Kelihos Botnet Triples Its Size in Just 24 Hours]]></title>
<description><![CDATA[The Kelihos botnet, sometimes also referred to as Waledac, has been adding new bots all summer and started shifting operations from spamming "pump-and-dump" campaigns to delivering ransomware and banking trojans, security researcher MalwareTech has discovered.

Kelihos is one of those old botnets...]]></description>
<link>https://tsecurity.de/de/64772/it-security/kelihos-botnet-triples-its-size-in-just-24-hours/</link>
<guid isPermaLink="true">https://tsecurity.de/de/64772/it-security/kelihos-botnet-triples-its-size-in-just-24-hours/</guid>
<pubDate>Sun, 28 Aug 2016 02:30:09 +0200</pubDate>
<category>📰 IT Security</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[The Kelihos botnet, sometimes also referred to as Waledac, has been adding new bots all summer and started shifting operations from spamming "pump-and-dump" campaigns to delivering ransomware and banking trojans, security researcher MalwareTech has discovered.

Kelihos is one of those old botnets created many years ago, which somehow has managed to avoid quite a few takedown attempts, and has come back to life, just like Ramnit.

Discovered in 2008, Kelihos has been one of the main sources of pharma and pump-and-dump spam, even as recently as 2016. While spam...]]></content:encoded>
</item>
<item>
<title><![CDATA[Kelihos Botnet Triples Its Size in Just 24 Hours]]></title>
<description><![CDATA[The Kelihos botnet, sometimes also referred to as Waledac, has been adding new bots all summer and started shifting operations from spamming "pump-and-dump" campaigns to delivering ransomware and banking trojans, security researcher MalwareTech has discovered.

Kelihos is one of those old botnets...]]></description>
<link>https://tsecurity.de/de/64772/it-security/kelihos-botnet-triples-its-size-in-just-24-hours/</link>
<guid isPermaLink="true">https://tsecurity.de/de/64772/it-security/kelihos-botnet-triples-its-size-in-just-24-hours/</guid>
<pubDate>Sun, 28 Aug 2016 02:30:09 +0200</pubDate>
<category>📰 IT Security</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[The Kelihos botnet, sometimes also referred to as Waledac, has been adding new bots all summer and started shifting operations from spamming "pump-and-dump" campaigns to delivering ransomware and banking trojans, security researcher MalwareTech has discovered.

Kelihos is one of those old botnets created many years ago, which somehow has managed to avoid quite a few takedown attempts, and has come back to life, just like Ramnit.

Discovered in 2008, Kelihos has been one of the main sources of pharma and pump-and-dump spam, even as recently as 2016. While spam...]]></content:encoded>
</item>
<item>
<title><![CDATA[Let's Analyze: Dridex (Part 2)]]></title>
<description><![CDATA[In the previous article we went over how to dump the names of the majority of functions dridex resolves dynamically to complicate analysis. Today we will be using some similar methods to get the other main piece of the puzzle (encrypted string).Encrypted StringsAs we've already got a nice list of...]]></description>
<link>https://tsecurity.de/de/40042/reverse-engineering/lets-analyze-dridex-part-2/</link>
<guid isPermaLink="true">https://tsecurity.de/de/40042/reverse-engineering/lets-analyze-dridex-part-2/</guid>
<pubDate>Tue, 19 Apr 2016 18:20:41 +0200</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">In the <a href="http://www.malwaretech.com/2016/03/lets-analyze-dridex-part-1.html">previous article</a>&nbsp;we went over how to dump the names of the majority of functions dridex resolves dynamically to complicate analysis. Today we will be using some similar methods to get the other main piece of the puzzle (encrypted string).<br><br><h2>Encrypted Strings</h2><div>As we've already got a nice list of functions called, we can look for those involved in string operations such as MultiByteToWideChar or CompareStringA in order to find encrypted strings. I went with CompareStringA as it takes two input strings so there's a better chance of finding one that's recently been decrypted.</div><div><br></div><div>I got lucky and the first call to CompareStringA I looked at appeared to be a wrapper function that the bot implements for easy string comparison (taking both strings as input parameters).&nbsp;</div><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://4.bp.blogspot.com/-Kjghybpa_jI/VxYyfPS72HI/AAAAAAAABec/23iNxSeW9YQHqqQQJT1_1DNKDu7IlvuVwCLcB/s1600/CompareFunction.png" imageanchor="1"><img border="0" src="https://4.bp.blogspot.com/-Kjghybpa_jI/VxYyfPS72HI/AAAAAAAABec/23iNxSeW9YQHqqQQJT1_1DNKDu7IlvuVwCLcB/s1600/CompareFunction.png"></a></td></tr><tr><td>A simple string comparison function</td></tr></tbody></table><div><br>By right clicking on the function and selecting "jump to xrefs to", we can just pick one at random and trace back each of the two string arguments and see if any start off as encrypted.&nbsp;</div><div><br></div><div><a href="https://4.bp.blogspot.com/-uw8kPm2aDpw/VxYzngMVaPI/AAAAAAAABek/dGhWal4341ErE8CpGLUfmcHTivoYzD00wCLcB/s1600/PossibleDecryptLoop.png" imageanchor="1"><img border="0" src="https://4.bp.blogspot.com/-uw8kPm2aDpw/VxYzngMVaPI/AAAAAAAABek/dGhWal4341ErE8CpGLUfmcHTivoYzD00wCLcB/s1600/PossibleDecryptLoop.png"></a></div><div><br></div><div>This one is promising because var_24 (the second parameter to our CompareString function) is a stack variable which is not written to at any point during the function, the only reference is the lea eax, [var_24] in the excerpt above (so it must be written somewhere in sub_40C47C). Even more promising is the fact that right above the lea operation is a mov operation which moves a pointer to some non ASCII data into edx (looks encrypted); the assumption here is that the function sub_40C47C decrypts the data in the pointer stored in edx into the one stored in eax; but is that assumption correct?</div><div><br></div><div></div><div><div><a href="https://1.bp.blogspot.com/-TY-nKPdPAuo/VxZNd3X03sI/AAAAAAAABf8/-pdGUnOxLc8N7MFLl_QgjKEuQLDRnBekACLcB/s1600/PossibleDecryptLoopInternal.png" imageanchor="1"><img border="0" height="328" src="https://1.bp.blogspot.com/-TY-nKPdPAuo/VxZNd3X03sI/AAAAAAAABf8/-pdGUnOxLc8N7MFLl_QgjKEuQLDRnBekACLcB/s640/PossibleDecryptLoopInternal.png" width="640"></a></div><br></div><div>Without going overboard with screenshots, I can tell you that the empty stack variable in eax is moved into ebx which is stored and restored by all functions called from inside sub_40C47 (that is, it doesn't change at any point during the function until the end where its' value is moved into eax and the original register is restored). If all assumptions and facts remain correct, we can put a breakpoint at the end of the function and eax should be a pointer to a string.</div><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://2.bp.blogspot.com/-n7pVPoDOVqw/VxY3AfVjiuI/AAAAAAAABe8/hHFDmIlamFIbyv8Lsx_VxfuKPqLZ4KN1wCLcB/s1600/DecryptedString.png" imageanchor="1"><img border="0" src="https://2.bp.blogspot.com/-n7pVPoDOVqw/VxY3AfVjiuI/AAAAAAAABe8/hHFDmIlamFIbyv8Lsx_VxfuKPqLZ4KN1wCLcB/s1600/DecryptedString.png"></a></td></tr><tr><td><span>&nbsp;Whoever said assumptions get you nowhere?</span></td></tr></tbody></table><div><br></div><div>If you're not familiar with WinDbg the command "da poi(eax)" breaks down to "da" (display as ascii) "poi(eax)" (the address pointed to by the value in eax). Which should be (and is) our decrypted string!&nbsp;</div><div><br></div><div>Dridex actually uses both ASCII and Unicode strings but the function we have found only deals with ASCII, we could go back and look for a Unicode function called like CompareStringW then repeat the previous process, or we could do a binary search (ALT&nbsp;+ B) of the function and hope to get another that looks similar. I liked the look of that "push 2800h; mov ebp, edx" so I grabbed the bytes using the WinDbg command "u 0x0040c485 L2" and entered them into the binary search (make sure to check find all occurrences).</div><div><br><div></div></div><div><a href="https://1.bp.blogspot.com/-AUs5ncNfEqg/VxY7N544s8I/AAAAAAAABfU/E1mZEHoG_NkaRYKqQ1bX-q5jslGC9u9KQCLcB/s1600/BinarySearch.png" imageanchor="1"><img border="0" src="https://1.bp.blogspot.com/-AUs5ncNfEqg/VxY7N544s8I/AAAAAAAABfU/E1mZEHoG_NkaRYKqQ1bX-q5jslGC9u9KQCLcB/s1600/BinarySearch.png"></a></div><div><br></div><div>Again, for those unfamiliar with WinDbg "u &lt;address&gt;" disassembles an &nbsp;address and "L2" tells the disassembler to only dissemble two instructions.</div><div><br><div></div></div><div><a href="https://2.bp.blogspot.com/-0QRdDxhTgdo/VxY8DHcGF0I/AAAAAAAABfc/9oFAmiAB5gYPht3Ok0-Vuoc10YXyrSEQACKgB/s1600/BinaryOccurrences.png" imageanchor="1"><img border="0" src="https://2.bp.blogspot.com/-0QRdDxhTgdo/VxY8DHcGF0I/AAAAAAAABfc/9oFAmiAB5gYPht3Ok0-Vuoc10YXyrSEQACKgB/s1600/BinaryOccurrences.png"></a></div><div><br><div><a href="https://2.bp.blogspot.com/-yOcNTCiEagY/VxZPZknY4zI/AAAAAAAABgI/M2phHfi-1pMYZst-JXBCBQnR9WSmdkGhQCLcB/s1600/BothDecryptorFunctions.png" imageanchor="1"><img border="0" height="373" src="https://2.bp.blogspot.com/-yOcNTCiEagY/VxZPZknY4zI/AAAAAAAABgI/M2phHfi-1pMYZst-JXBCBQnR9WSmdkGhQCLcB/s640/BothDecryptorFunctions.png" width="640"></a></div><br></div><div>After a quick binary search we are presented with two identical functions (the one we've already found and another, the unicode version.), it's almost too easy. All that's left is to write a script similar to the one in the previous article and dump the encrypted string&nbsp;+ the address the decrypter was called from.</div><pre name="code">import idc<br>import idautils<br>import idaapi<br><br>strings_info = []<br><br>def DumpStrings():<br>    for string in strings_info:<br>        print("%s at 0x%X" % (string[1], string[0]))<br><br>def BreakpointHandler(dec_string):<br>    call_loc = PrevHead(Dword(GetRegValue("ESP")), 0)<br>    string_info = (call_loc, dec_string)<br><br>    if string_info not in strings_info:<br>        strings_info.append(string_info)<br>        print("Got string: %s @ %x" % (dec_string, call_loc))<br><br>def BreakpointHandlerAscii():<br>    dec_string = GetString(Dword(GetRegValue("EAX")), -1, ASCSTR_C)<br>    BreakpointHandler(dec_string)<br><br>def BreakpointHandlerUnicode():<br>    dec_string = GetString(Dword(GetRegValue("EAX")), -1, ASCSTR_UNICODE)<br>    BreakpointHandler(dec_string)<br><br>def main():<br>    func_ascii = 0x0040C4A9     #Last byte of the ascii function<br>    func_unicode = 0x0040F1C9   #Last byte of the unicode decrypted function<br><br>    #Lets us use python functions for breakpoint conditions<br>    RunPlugin("python", 3)<br><br>    AddBpt(func_ascii)<br>    SetBptCnd(func_ascii, "BreakpointHandlerAscii()")<br>    print("Breakpoint at: %x" % func_ascii)<br><br>    AddBpt(func_unicode)<br>    SetBptCnd(func_unicode, "BreakpointHandlerUnicode()")<br>    print("Breakpoint at: %x" % func_unicode)<br><br>if __name__ == '__main__':<br>    main()<br></pre><div><br></div><div>This code is pretty much the same as the previous one, except instead of setting breakpoints on the xrefs to the decryptor function "func_ascii" and "func_unicode" are the address of the last instruction of both function. We get the xref address by doing "PrevHead(Dword(GetRegValue("ESP")), 0)" which gets the return address off the stack and then find the instruction prior to it (the call to the decrypter).<br><br>The following snippet creates a tuple containing the decrypted string and thhe address of the call, this is then pushed to an array if it hasn't already which allows us to output call_loc:dec_string combinations we've not already handled; it also allows us to call DumpString() from the python command line to dump all the unique decrypted string combinations.<br><pre name="code">    string_info = (call_loc, dec_string)<br><br>    if string_info not in strings_info:<br>        strings_info.append(string_info)<br>        print("Got string: %s @ %x" % (dec_string, call_loc))<br></pre><br>Once we've run the script and gotten some data, we might notices that multiple calls came from the same address but decrypted different strings.<br><br><div><a href="https://2.bp.blogspot.com/-2n3tBGnFksA/VxZGIXEVcyI/AAAAAAAABfs/weoZLtIk8eI8rqY86QcIFfiNCnpetPQ4gCLcB/s1600/DecryptedStrings.png" imageanchor="1"><img border="0" src="https://2.bp.blogspot.com/-2n3tBGnFksA/VxZGIXEVcyI/AAAAAAAABfs/weoZLtIk8eI8rqY86QcIFfiNCnpetPQ4gCLcB/s1600/DecryptedStrings.png"></a></div>To resolve this, lets look back to how the decryption function is called.<br><br><div><a href="https://1.bp.blogspot.com/-uw8kPm2aDpw/VxYzngMVaPI/AAAAAAAABew/T9Tflh3tuMwbGtYD-LHr3j5iWv5bhD9UQCKgB/s1600/PossibleDecryptLoop.png" imageanchor="1"><img border="0" src="https://1.bp.blogspot.com/-uw8kPm2aDpw/VxYzngMVaPI/AAAAAAAABew/T9Tflh3tuMwbGtYD-LHr3j5iWv5bhD9UQCKgB/s1600/PossibleDecryptLoop.png"></a></div><br>There is a number in ecx which could be some kind of id or offset into a block which specifies to the decrypter which string gets returned. The next step would be to find some strings you're interested in, head to the address the call came from, then disassemble it to find out how the target string is determined and where in the call chain it was decided that specific string was needed. Once you've gotten all that information, you can merge some of the code from the last article and this one to comment all the places in which a given string is referenced.<br><br>Next we'll start looking at the C&amp;C code, which will require you to have a good handle on how the strings are referenced. I've walked you through the first step and explained what the next step entails, so you should have something to work on while you wait for the next article! Hint: focus on HTTP related strings as the C&amp;C protocol is encrypted XML over HTTPS (you can check you're in the right place by cross-referencing the string with calls to functions which might send data to a remote host).</div><div><br></div><div><br></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Let's Analyze: Dridex (Part 2)]]></title>
<description><![CDATA[In the previous article we went over how to dump the names of the majority of functions dridex resolves dynamically to complicate analysis. Today we will be using some similar methods to get the other main piece of the puzzle (encrypted string).Encrypted StringsAs we've already got a nice list of...]]></description>
<link>https://tsecurity.de/de/40042/reverse-engineering/lets-analyze-dridex-part-2/</link>
<guid isPermaLink="true">https://tsecurity.de/de/40042/reverse-engineering/lets-analyze-dridex-part-2/</guid>
<pubDate>Tue, 19 Apr 2016 18:20:41 +0200</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">In the <a href="http://www.malwaretech.com/2016/03/lets-analyze-dridex-part-1.html">previous article</a>&nbsp;we went over how to dump the names of the majority of functions dridex resolves dynamically to complicate analysis. Today we will be using some similar methods to get the other main piece of the puzzle (encrypted string).<br><br><h2>Encrypted Strings</h2><div>As we've already got a nice list of functions called, we can look for those involved in string operations such as MultiByteToWideChar or CompareStringA in order to find encrypted strings. I went with CompareStringA as it takes two input strings so there's a better chance of finding one that's recently been decrypted.</div><div><br></div><div>I got lucky and the first call to CompareStringA I looked at appeared to be a wrapper function that the bot implements for easy string comparison (taking both strings as input parameters).&nbsp;</div><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://4.bp.blogspot.com/-Kjghybpa_jI/VxYyfPS72HI/AAAAAAAABec/23iNxSeW9YQHqqQQJT1_1DNKDu7IlvuVwCLcB/s1600/CompareFunction.png" imageanchor="1"><img border="0" src="https://4.bp.blogspot.com/-Kjghybpa_jI/VxYyfPS72HI/AAAAAAAABec/23iNxSeW9YQHqqQQJT1_1DNKDu7IlvuVwCLcB/s1600/CompareFunction.png"></a></td></tr><tr><td>A simple string comparison function</td></tr></tbody></table><div><br>By right clicking on the function and selecting "jump to xrefs to", we can just pick one at random and trace back each of the two string arguments and see if any start off as encrypted.&nbsp;</div><div><br></div><div><a href="https://4.bp.blogspot.com/-uw8kPm2aDpw/VxYzngMVaPI/AAAAAAAABek/dGhWal4341ErE8CpGLUfmcHTivoYzD00wCLcB/s1600/PossibleDecryptLoop.png" imageanchor="1"><img border="0" src="https://4.bp.blogspot.com/-uw8kPm2aDpw/VxYzngMVaPI/AAAAAAAABek/dGhWal4341ErE8CpGLUfmcHTivoYzD00wCLcB/s1600/PossibleDecryptLoop.png"></a></div><div><br></div><div>This one is promising because var_24 (the second parameter to our CompareString function) is a stack variable which is not written to at any point during the function, the only reference is the lea eax, [var_24] in the excerpt above (so it must be written somewhere in sub_40C47C). Even more promising is the fact that right above the lea operation is a mov operation which moves a pointer to some non ASCII data into edx (looks encrypted); the assumption here is that the function sub_40C47C decrypts the data in the pointer stored in edx into the one stored in eax; but is that assumption correct?</div><div><br></div><div></div><div><div><a href="https://1.bp.blogspot.com/-TY-nKPdPAuo/VxZNd3X03sI/AAAAAAAABf8/-pdGUnOxLc8N7MFLl_QgjKEuQLDRnBekACLcB/s1600/PossibleDecryptLoopInternal.png" imageanchor="1"><img border="0" height="328" src="https://1.bp.blogspot.com/-TY-nKPdPAuo/VxZNd3X03sI/AAAAAAAABf8/-pdGUnOxLc8N7MFLl_QgjKEuQLDRnBekACLcB/s640/PossibleDecryptLoopInternal.png" width="640"></a></div><br></div><div>Without going overboard with screenshots, I can tell you that the empty stack variable in eax is moved into ebx which is stored and restored by all functions called from inside sub_40C47 (that is, it doesn't change at any point during the function until the end where its' value is moved into eax and the original register is restored). If all assumptions and facts remain correct, we can put a breakpoint at the end of the function and eax should be a pointer to a string.</div><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://2.bp.blogspot.com/-n7pVPoDOVqw/VxY3AfVjiuI/AAAAAAAABe8/hHFDmIlamFIbyv8Lsx_VxfuKPqLZ4KN1wCLcB/s1600/DecryptedString.png" imageanchor="1"><img border="0" src="https://2.bp.blogspot.com/-n7pVPoDOVqw/VxY3AfVjiuI/AAAAAAAABe8/hHFDmIlamFIbyv8Lsx_VxfuKPqLZ4KN1wCLcB/s1600/DecryptedString.png"></a></td></tr><tr><td><span>&nbsp;Whoever said assumptions get you nowhere?</span></td></tr></tbody></table><div><br></div><div>If you're not familiar with WinDbg the command "da poi(eax)" breaks down to "da" (display as ascii) "poi(eax)" (the address pointed to by the value in eax). Which should be (and is) our decrypted string!&nbsp;</div><div><br></div><div>Dridex actually uses both ASCII and Unicode strings but the function we have found only deals with ASCII, we could go back and look for a Unicode function called like CompareStringW then repeat the previous process, or we could do a binary search (ALT&nbsp;+ B) of the function and hope to get another that looks similar. I liked the look of that "push 2800h; mov ebp, edx" so I grabbed the bytes using the WinDbg command "u 0x0040c485 L2" and entered them into the binary search (make sure to check find all occurrences).</div><div><br><div></div></div><div><a href="https://1.bp.blogspot.com/-AUs5ncNfEqg/VxY7N544s8I/AAAAAAAABfU/E1mZEHoG_NkaRYKqQ1bX-q5jslGC9u9KQCLcB/s1600/BinarySearch.png" imageanchor="1"><img border="0" src="https://1.bp.blogspot.com/-AUs5ncNfEqg/VxY7N544s8I/AAAAAAAABfU/E1mZEHoG_NkaRYKqQ1bX-q5jslGC9u9KQCLcB/s1600/BinarySearch.png"></a></div><div><br></div><div>Again, for those unfamiliar with WinDbg "u &lt;address&gt;" disassembles an &nbsp;address and "L2" tells the disassembler to only dissemble two instructions.</div><div><br><div></div></div><div><a href="https://2.bp.blogspot.com/-0QRdDxhTgdo/VxY8DHcGF0I/AAAAAAAABfc/9oFAmiAB5gYPht3Ok0-Vuoc10YXyrSEQACKgB/s1600/BinaryOccurrences.png" imageanchor="1"><img border="0" src="https://2.bp.blogspot.com/-0QRdDxhTgdo/VxY8DHcGF0I/AAAAAAAABfc/9oFAmiAB5gYPht3Ok0-Vuoc10YXyrSEQACKgB/s1600/BinaryOccurrences.png"></a></div><div><br><div><a href="https://2.bp.blogspot.com/-yOcNTCiEagY/VxZPZknY4zI/AAAAAAAABgI/M2phHfi-1pMYZst-JXBCBQnR9WSmdkGhQCLcB/s1600/BothDecryptorFunctions.png" imageanchor="1"><img border="0" height="373" src="https://2.bp.blogspot.com/-yOcNTCiEagY/VxZPZknY4zI/AAAAAAAABgI/M2phHfi-1pMYZst-JXBCBQnR9WSmdkGhQCLcB/s640/BothDecryptorFunctions.png" width="640"></a></div><br></div><div>After a quick binary search we are presented with two identical functions (the one we've already found and another, the unicode version.), it's almost too easy. All that's left is to write a script similar to the one in the previous article and dump the encrypted string&nbsp;+ the address the decrypter was called from.</div><pre name="code">import idc<br>import idautils<br>import idaapi<br><br>strings_info = []<br><br>def DumpStrings():<br>    for string in strings_info:<br>        print("%s at 0x%X" % (string[1], string[0]))<br><br>def BreakpointHandler(dec_string):<br>    call_loc = PrevHead(Dword(GetRegValue("ESP")), 0)<br>    string_info = (call_loc, dec_string)<br><br>    if string_info not in strings_info:<br>        strings_info.append(string_info)<br>        print("Got string: %s @ %x" % (dec_string, call_loc))<br><br>def BreakpointHandlerAscii():<br>    dec_string = GetString(Dword(GetRegValue("EAX")), -1, ASCSTR_C)<br>    BreakpointHandler(dec_string)<br><br>def BreakpointHandlerUnicode():<br>    dec_string = GetString(Dword(GetRegValue("EAX")), -1, ASCSTR_UNICODE)<br>    BreakpointHandler(dec_string)<br><br>def main():<br>    func_ascii = 0x0040C4A9     #Last byte of the ascii function<br>    func_unicode = 0x0040F1C9   #Last byte of the unicode decrypted function<br><br>    #Lets us use python functions for breakpoint conditions<br>    RunPlugin("python", 3)<br><br>    AddBpt(func_ascii)<br>    SetBptCnd(func_ascii, "BreakpointHandlerAscii()")<br>    print("Breakpoint at: %x" % func_ascii)<br><br>    AddBpt(func_unicode)<br>    SetBptCnd(func_unicode, "BreakpointHandlerUnicode()")<br>    print("Breakpoint at: %x" % func_unicode)<br><br>if __name__ == '__main__':<br>    main()<br></pre><div><br></div><div>This code is pretty much the same as the previous one, except instead of setting breakpoints on the xrefs to the decryptor function "func_ascii" and "func_unicode" are the address of the last instruction of both function. We get the xref address by doing "PrevHead(Dword(GetRegValue("ESP")), 0)" which gets the return address off the stack and then find the instruction prior to it (the call to the decrypter).<br><br>The following snippet creates a tuple containing the decrypted string and thhe address of the call, this is then pushed to an array if it hasn't already which allows us to output call_loc:dec_string combinations we've not already handled; it also allows us to call DumpString() from the python command line to dump all the unique decrypted string combinations.<br><pre name="code">    string_info = (call_loc, dec_string)<br><br>    if string_info not in strings_info:<br>        strings_info.append(string_info)<br>        print("Got string: %s @ %x" % (dec_string, call_loc))<br></pre><br>Once we've run the script and gotten some data, we might notices that multiple calls came from the same address but decrypted different strings.<br><br><div><a href="https://2.bp.blogspot.com/-2n3tBGnFksA/VxZGIXEVcyI/AAAAAAAABfs/weoZLtIk8eI8rqY86QcIFfiNCnpetPQ4gCLcB/s1600/DecryptedStrings.png" imageanchor="1"><img border="0" src="https://2.bp.blogspot.com/-2n3tBGnFksA/VxZGIXEVcyI/AAAAAAAABfs/weoZLtIk8eI8rqY86QcIFfiNCnpetPQ4gCLcB/s1600/DecryptedStrings.png"></a></div>To resolve this, lets look back to how the decryption function is called.<br><br><div><a href="https://1.bp.blogspot.com/-uw8kPm2aDpw/VxYzngMVaPI/AAAAAAAABew/T9Tflh3tuMwbGtYD-LHr3j5iWv5bhD9UQCKgB/s1600/PossibleDecryptLoop.png" imageanchor="1"><img border="0" src="https://1.bp.blogspot.com/-uw8kPm2aDpw/VxYzngMVaPI/AAAAAAAABew/T9Tflh3tuMwbGtYD-LHr3j5iWv5bhD9UQCKgB/s1600/PossibleDecryptLoop.png"></a></div><br>There is a number in ecx which could be some kind of id or offset into a block which specifies to the decrypter which string gets returned. The next step would be to find some strings you're interested in, head to the address the call came from, then disassemble it to find out how the target string is determined and where in the call chain it was decided that specific string was needed. Once you've gotten all that information, you can merge some of the code from the last article and this one to comment all the places in which a given string is referenced.<br><br>Next we'll start looking at the C&amp;C code, which will require you to have a good handle on how the strings are referenced. I've walked you through the first step and explained what the next step entails, so you should have something to work on while you wait for the next article! Hint: focus on HTTP related strings as the C&amp;C protocol is encrypted XML over HTTPS (you can check you're in the right place by cross-referencing the string with calls to functions which might send data to a remote host).</div><div><br></div><div><br></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[When Scriptkiddies Attack]]></title>
<description><![CDATA[Usually I don't blog about the hundreds of ridiculous or down right crazy emails I receive each year, but this exchange makes all the others seem completely reasonable in comparison. Normally my unwanted emails range from people asking obviously blackhat questions presented as whitehat questions ...]]></description>
<link>https://tsecurity.de/de/26043/reverse-engineering/when-scriptkiddies-attack/</link>
<guid isPermaLink="true">https://tsecurity.de/de/26043/reverse-engineering/when-scriptkiddies-attack/</guid>
<pubDate>Tue, 16 Feb 2016 18:20:23 +0100</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">Usually I don't blog about the hundreds of ridiculous or down right crazy emails I receive each year, but this exchange makes all the others seem completely reasonable in comparison. Normally my unwanted emails range from people asking obviously blackhat questions presented as whitehat questions to offers of under the table payments in return for coding malware, but this email was something special.<br><br>If you don't follow me on twitter (Why don't you follow me on twitter? <img border="0" src="https://2.bp.blogspot.com/-dZhGpy-Y86g/VsL52H_6__I/AAAAAAAABVg/UoohHnVyw8g/s1600/sadface.png">), I've been spending a while working on <a href="http://intel.malwaretech.com/">intel.malwaretech.com</a>&nbsp;(a botnet tracker for various peer-to-peer botnet) and tweeting my progress. Yesterday I tweeted the following GIF showing my real-time tracking interface I'd just finished).<br><br><div><a href="https://4.bp.blogspot.com/-PDFvVhNGGhU/VsL7Mi3BimI/AAAAAAAABVs/OjcbEYShRM0/s1600/new.gif" imageanchor="1"><img border="0" height="640" src="https://4.bp.blogspot.com/-PDFvVhNGGhU/VsL7Mi3BimI/AAAAAAAABVs/OjcbEYShRM0/s640/new.gif" width="496"></a></div><br>Within a couple of minutes of tweeting, I received the following email from someone with a name matching that of one of my followers.<br><br><div><a href="https://4.bp.blogspot.com/-126de4JFChs/VsL-G34qp1I/AAAAAAAABV4/oZhZICV9XC4/s1600/email1.png" imageanchor="1"><img border="0" height="640" src="https://4.bp.blogspot.com/-126de4JFChs/VsL-G34qp1I/AAAAAAAABV4/oZhZICV9XC4/s640/email1.png" width="450"></a></div>Basically, he's mistaken my botnet tracker for me posting screenshots of my botnet on twitter (I guess there are probably people who do that???), and wants me to give him the code.<br><br>I was still in the process of updating the tracker, so I didn't notice the email until a follow-up was send 20 minutes later.<br><br><div><a href="https://3.bp.blogspot.com/-dKBcA0oSGyU/VsMzd3t6jBI/AAAAAAAABWI/s8aEAwBdvvA/s1600/email2.png" imageanchor="1"><img border="0" src="https://3.bp.blogspot.com/-dKBcA0oSGyU/VsMzd3t6jBI/AAAAAAAABWI/s8aEAwBdvvA/s1600/email2.png"></a></div>I particularly like this one for a couple reasons: If I wasn't such an upstanding citizen, I think my idea of being "blackhat for one second" would involve something a little more profitable and ambitious than giving out free malware to scriptkiddies (but I guess that's what blackhats do???) and the fact that he claims to have a remote RDP exploit and flash zeroday, but the best monetary amount he can offer is $50.<br><br>You can probably guess what the next email is if you're familiar with the popular phrase: "If at first you don't succeed, then result to blackmail".<br><br><div><a href="https://3.bp.blogspot.com/-dmpQCOOoqh8/VsM24poFvSI/AAAAAAAABWc/8XvBPzIpbgQ/s1600/email3.png" imageanchor="1"><img border="0" src="https://3.bp.blogspot.com/-dmpQCOOoqh8/VsM24poFvSI/AAAAAAAABWc/8XvBPzIpbgQ/s1600/email3.png"></a></div>I wasn't really sure if this was a troll or not, so I just replied with my standard canned response to such threats.<br><br><div><a href="https://2.bp.blogspot.com/-H9FHa_JeCIQ/VsM4G7sBHTI/AAAAAAAABWs/kbuoELiPSgY/s1600/email4.png" imageanchor="1"><img border="0" src="https://2.bp.blogspot.com/-H9FHa_JeCIQ/VsM4G7sBHTI/AAAAAAAABWs/kbuoELiPSgY/s1600/email4.png"></a></div>I also looked up his facebook page and went through the pictures, but due to some CIA grade redaction I doubt we'll ever know his real name.<br><br><div><a href="https://4.bp.blogspot.com/-Uc-vJHmt_vw/VsNSBhjiuDI/AAAAAAAABY8/u1eLmqEp8MA/s1600/badopsec.png" imageanchor="1"><img border="0" height="512" src="https://4.bp.blogspot.com/-Uc-vJHmt_vw/VsNSBhjiuDI/AAAAAAAABY8/u1eLmqEp8MA/s640/badopsec.png" width="640"></a></div><br>Over the next hour I didn't notice anything in my access logs to suggest any attempt at hacking or DDoS, but I wasn't really looking hard as the site is behind cloudflare and I designed the backend in such a way that all user-input is canned to reduce the surface for web based attacks. Ofcourse if he somehow did managed to get into my server, there is no bot source or botnet for him to steal, so he's going to be very disappointed. Although there was no clear evidence of any attacks, I did however notice I'd been very busy sending myself emails.<br><br><div><a href="https://2.bp.blogspot.com/-Rs18ka7J5yU/VsM8vbhU5II/AAAAAAAABW4/e7Uo19r0GsY/s1600/spoofedmail.png" imageanchor="1"><img border="0" src="https://2.bp.blogspot.com/-Rs18ka7J5yU/VsM8vbhU5II/AAAAAAAABW4/e7Uo19r0GsY/s1600/spoofedmail.png"></a><a href="https://2.bp.blogspot.com/-ePksnLcNHvI/VsNAR2P2qWI/AAAAAAAABXM/SBioSXg1fO8/s1600/email5.png" imageanchor="1"><img border="0" src="https://2.bp.blogspot.com/-ePksnLcNHvI/VsNAR2P2qWI/AAAAAAAABXM/SBioSXg1fO8/s1600/email5.png"></a></div><br>Quite interestingly gmail doesn't mark spoofed emails from myself as spam, despite the fact that my email address uses DKIM and the spoofed emails were obviously not authenticated. Usually I'm very overzealous with writing regex rules for emails (sending me an email containing phrase such as &nbsp;"I await your reply", "first page of google" and "Mobile App Development" will result in instant deletion of said mail and all subsequent emails from that address), but in this case all the emails were grouped into a single thread so I could delete with one click, making it not really worth it to log in to the server and add a new rule.<br><br><div><a href="https://4.bp.blogspot.com/-1sp65sOyKxQ/VsM_ic0USII/AAAAAAAABXE/kdq7dNRZsTw/s1600/failedspam.png" imageanchor="1"><img border="0" height="454" src="https://4.bp.blogspot.com/-1sp65sOyKxQ/VsM_ic0USII/AAAAAAAABXE/kdq7dNRZsTw/s640/failedspam.png" width="640"></a></div><br>The hosting service he was using to "bumb" me kept killing the flood due to failures, so my inbox was hardly being overwhelmed by the volume. After about an hour of the world's lamest email flood, it ceased and i received another few mails from our friendly neighborhood hacker.<br><br><div><a href="https://3.bp.blogspot.com/-ZwMtm4HNxSo/VsNB-LkIL3I/AAAAAAAABXY/qC5LAGm30Rs/s1600/email6.png" imageanchor="1"><img border="0" height="640" src="https://3.bp.blogspot.com/-ZwMtm4HNxSo/VsNB-LkIL3I/AAAAAAAABXY/qC5LAGm30Rs/s640/email6.png" width="358"></a></div><br><div>I checked out the link out on a VM through Tor hoping it would be some kind of exploit or IP logger, but it was just a login page for what we can assume is the shell he was offering me.</div><div><br></div><div><a href="https://1.bp.blogspot.com/-Xwed4NrX9VQ/VsNDRLPj6_I/AAAAAAAABXk/n81YDmlZgZ0/s1600/harvardshell.png" imageanchor="1"><img border="0" src="https://1.bp.blogspot.com/-Xwed4NrX9VQ/VsNDRLPj6_I/AAAAAAAABXk/n81YDmlZgZ0/s1600/harvardshell.png"></a></div><div><br></div><div>It's quite common for colleges and universities to allocate official sub-domains for different faculties and delegate management to faculty staff and even students, resulting in them often getting hacked. This specific sub-domain seems to have been accessed by various different hackers and the directories are full of strange files (I'm not really sure who to contact about the shell, so if you're associated with Harvard feel free to email from an official mail for the full link or contact the site administrator.).</div><div><br></div><div>Based on the shell link, I had already figured what his next threat would be and had saved some screenshots of the emails and link just in case; sure enough after another hour I received these two emails around 5 minutes apart.</div><div><br></div><div><a href="https://3.bp.blogspot.com/-s3o0bQ6cA6c/VsNGIusWaTI/AAAAAAAABXw/JyOV9k1yKn8/s1600/email7.png" imageanchor="1"><img border="0" src="https://3.bp.blogspot.com/-s3o0bQ6cA6c/VsNGIusWaTI/AAAAAAAABXw/JyOV9k1yKn8/s1600/email7.png"></a></div><div><br></div><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://1.bp.blogspot.com/-Nu8yris9Lto/VsNHfI2T22I/AAAAAAAABX8/qyy8N84p0zA/s1600/defacepage.png" imageanchor="1"><img border="0" height="408" src="https://1.bp.blogspot.com/-Nu8yris9Lto/VsNHfI2T22I/AAAAAAAABX8/qyy8N84p0zA/s640/defacepage.png" width="640"></a></td></tr><tr><td>Damn it Paul, stop chmodding your directory to 777</td></tr></tbody></table>Creating a sub-page in a sub-directory of a sub-domain of a sub-domain, wow this MalwareTech guy really knows his stuff...<br><br>As of writing this the deface page is still up, but that's not really a surprised seeming as it's not even an index page or in an actively used directory.<br><br><div><a href="https://1.bp.blogspot.com/-uiAcYDuOrF0/VsNKbOY_8PI/AAAAAAAABYI/pxuMTPYS2No/s1600/CookieStealer.png" imageanchor="1"><img border="0" height="104" src="https://1.bp.blogspot.com/-uiAcYDuOrF0/VsNKbOY_8PI/AAAAAAAABYI/pxuMTPYS2No/s640/CookieStealer.png" width="640"></a></div><br>I was also able to find publicly accessible logs from a cookie stealer running on the same sub-domain and according to <a href="https://twitter.com/StephenBattista/status/699332666890391552">a discussion</a> in one of my tweet threads,&nbsp;this could potentially be high risks as sub-domains have the ability to read certain cookies set using the parent domain, i.e .harvard.eu.<br><br>But wait! The fun didn't even stop there: before I went to bed I received a few more threats.<br><br><div><a href="https://3.bp.blogspot.com/-5A6Y8bleWOQ/VsNNNLkpW4I/AAAAAAAABYU/GHv03U2xUvc/s1600/email8.png" imageanchor="1"><img border="0" src="https://3.bp.blogspot.com/-5A6Y8bleWOQ/VsNNNLkpW4I/AAAAAAAABYU/GHv03U2xUvc/s1600/email8.png"></a></div>What is option 2? I must known! Also notice indexx.php as I assume index wasn't writable.<br><br><div><a href="https://2.bp.blogspot.com/-qpeRegOw8PU/VsNNzA8GFGI/AAAAAAAABYY/5U9Cbms0pYc/s1600/email9.png" imageanchor="1"><img border="0" src="https://2.bp.blogspot.com/-qpeRegOw8PU/VsNNzA8GFGI/AAAAAAAABYY/5U9Cbms0pYc/s1600/email9.png"></a></div><br>This is the point where he realized I'd been live tweeting the whole thing and decided to instead blackmail me into deleting my tweets (because obviously blackmailing me had gone well for him so far?).<br><br>I then received one final email before he gave up with the threats (or at least I assume he did).<br><br><div><a href="https://4.bp.blogspot.com/-yDUQmPwAkqg/VsNO2uDusDI/AAAAAAAABYk/Lf3rOjdPRrU/s1600/email10.png" imageanchor="1"><img border="0" src="https://4.bp.blogspot.com/-yDUQmPwAkqg/VsNO2uDusDI/AAAAAAAABYk/Lf3rOjdPRrU/s1600/email10.png"></a></div><br>Now as a not entirely incompetent webmaster, I instantly noticed that IP is not in any of my provider's IP ranges, so I decided to look it up.<br><br><div><a href="https://2.bp.blogspot.com/-B-b0yjkSBho/VsNPdO1qJjI/AAAAAAAABYs/d-FGj8CAJ48/s1600/IPLookup.png" imageanchor="1"><img border="0" src="https://2.bp.blogspot.com/-B-b0yjkSBho/VsNPdO1qJjI/AAAAAAAABYs/d-FGj8CAJ48/s1600/IPLookup.png"></a></div><br>lol, gg.<br><br><br></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[When Scriptkiddies Attack]]></title>
<description><![CDATA[Usually I don't blog about the hundreds of ridiculous or down right crazy emails I receive each year, but this exchange makes all the others seem completely reasonable in comparison. Normally my unwanted emails range from people asking obviously blackhat questions presented as whitehat questions ...]]></description>
<link>https://tsecurity.de/de/26043/reverse-engineering/when-scriptkiddies-attack/</link>
<guid isPermaLink="true">https://tsecurity.de/de/26043/reverse-engineering/when-scriptkiddies-attack/</guid>
<pubDate>Tue, 16 Feb 2016 18:20:23 +0100</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">Usually I don't blog about the hundreds of ridiculous or down right crazy emails I receive each year, but this exchange makes all the others seem completely reasonable in comparison. Normally my unwanted emails range from people asking obviously blackhat questions presented as whitehat questions to offers of under the table payments in return for coding malware, but this email was something special.<br><br>If you don't follow me on twitter (Why don't you follow me on twitter? <img border="0" src="https://2.bp.blogspot.com/-dZhGpy-Y86g/VsL52H_6__I/AAAAAAAABVg/UoohHnVyw8g/s1600/sadface.png">), I've been spending a while working on <a href="http://intel.malwaretech.com/">intel.malwaretech.com</a>&nbsp;(a botnet tracker for various peer-to-peer botnet) and tweeting my progress. Yesterday I tweeted the following GIF showing my real-time tracking interface I'd just finished).<br><br><div><a href="https://4.bp.blogspot.com/-PDFvVhNGGhU/VsL7Mi3BimI/AAAAAAAABVs/OjcbEYShRM0/s1600/new.gif" imageanchor="1"><img border="0" height="640" src="https://4.bp.blogspot.com/-PDFvVhNGGhU/VsL7Mi3BimI/AAAAAAAABVs/OjcbEYShRM0/s640/new.gif" width="496"></a></div><br>Within a couple of minutes of tweeting, I received the following email from someone with a name matching that of one of my followers.<br><br><div><a href="https://4.bp.blogspot.com/-126de4JFChs/VsL-G34qp1I/AAAAAAAABV4/oZhZICV9XC4/s1600/email1.png" imageanchor="1"><img border="0" height="640" src="https://4.bp.blogspot.com/-126de4JFChs/VsL-G34qp1I/AAAAAAAABV4/oZhZICV9XC4/s640/email1.png" width="450"></a></div>Basically, he's mistaken my botnet tracker for me posting screenshots of my botnet on twitter (I guess there are probably people who do that???), and wants me to give him the code.<br><br>I was still in the process of updating the tracker, so I didn't notice the email until a follow-up was send 20 minutes later.<br><br><div><a href="https://3.bp.blogspot.com/-dKBcA0oSGyU/VsMzd3t6jBI/AAAAAAAABWI/s8aEAwBdvvA/s1600/email2.png" imageanchor="1"><img border="0" src="https://3.bp.blogspot.com/-dKBcA0oSGyU/VsMzd3t6jBI/AAAAAAAABWI/s8aEAwBdvvA/s1600/email2.png"></a></div>I particularly like this one for a couple reasons: If I wasn't such an upstanding citizen, I think my idea of being "blackhat for one second" would involve something a little more profitable and ambitious than giving out free malware to scriptkiddies (but I guess that's what blackhats do???) and the fact that he claims to have a remote RDP exploit and flash zeroday, but the best monetary amount he can offer is $50.<br><br>You can probably guess what the next email is if you're familiar with the popular phrase: "If at first you don't succeed, then result to blackmail".<br><br><div><a href="https://3.bp.blogspot.com/-dmpQCOOoqh8/VsM24poFvSI/AAAAAAAABWc/8XvBPzIpbgQ/s1600/email3.png" imageanchor="1"><img border="0" src="https://3.bp.blogspot.com/-dmpQCOOoqh8/VsM24poFvSI/AAAAAAAABWc/8XvBPzIpbgQ/s1600/email3.png"></a></div>I wasn't really sure if this was a troll or not, so I just replied with my standard canned response to such threats.<br><br><div><a href="https://2.bp.blogspot.com/-H9FHa_JeCIQ/VsM4G7sBHTI/AAAAAAAABWs/kbuoELiPSgY/s1600/email4.png" imageanchor="1"><img border="0" src="https://2.bp.blogspot.com/-H9FHa_JeCIQ/VsM4G7sBHTI/AAAAAAAABWs/kbuoELiPSgY/s1600/email4.png"></a></div>I also looked up his facebook page and went through the pictures, but due to some CIA grade redaction I doubt we'll ever know his real name.<br><br><div><a href="https://4.bp.blogspot.com/-Uc-vJHmt_vw/VsNSBhjiuDI/AAAAAAAABY8/u1eLmqEp8MA/s1600/badopsec.png" imageanchor="1"><img border="0" height="512" src="https://4.bp.blogspot.com/-Uc-vJHmt_vw/VsNSBhjiuDI/AAAAAAAABY8/u1eLmqEp8MA/s640/badopsec.png" width="640"></a></div><br>Over the next hour I didn't notice anything in my access logs to suggest any attempt at hacking or DDoS, but I wasn't really looking hard as the site is behind cloudflare and I designed the backend in such a way that all user-input is canned to reduce the surface for web based attacks. Ofcourse if he somehow did managed to get into my server, there is no bot source or botnet for him to steal, so he's going to be very disappointed. Although there was no clear evidence of any attacks, I did however notice I'd been very busy sending myself emails.<br><br><div><a href="https://2.bp.blogspot.com/-Rs18ka7J5yU/VsM8vbhU5II/AAAAAAAABW4/e7Uo19r0GsY/s1600/spoofedmail.png" imageanchor="1"><img border="0" src="https://2.bp.blogspot.com/-Rs18ka7J5yU/VsM8vbhU5II/AAAAAAAABW4/e7Uo19r0GsY/s1600/spoofedmail.png"></a><a href="https://2.bp.blogspot.com/-ePksnLcNHvI/VsNAR2P2qWI/AAAAAAAABXM/SBioSXg1fO8/s1600/email5.png" imageanchor="1"><img border="0" src="https://2.bp.blogspot.com/-ePksnLcNHvI/VsNAR2P2qWI/AAAAAAAABXM/SBioSXg1fO8/s1600/email5.png"></a></div><br>Quite interestingly gmail doesn't mark spoofed emails from myself as spam, despite the fact that my email address uses DKIM and the spoofed emails were obviously not authenticated. Usually I'm very overzealous with writing regex rules for emails (sending me an email containing phrase such as &nbsp;"I await your reply", "first page of google" and "Mobile App Development" will result in instant deletion of said mail and all subsequent emails from that address), but in this case all the emails were grouped into a single thread so I could delete with one click, making it not really worth it to log in to the server and add a new rule.<br><br><div><a href="https://4.bp.blogspot.com/-1sp65sOyKxQ/VsM_ic0USII/AAAAAAAABXE/kdq7dNRZsTw/s1600/failedspam.png" imageanchor="1"><img border="0" height="454" src="https://4.bp.blogspot.com/-1sp65sOyKxQ/VsM_ic0USII/AAAAAAAABXE/kdq7dNRZsTw/s640/failedspam.png" width="640"></a></div><br>The hosting service he was using to "bumb" me kept killing the flood due to failures, so my inbox was hardly being overwhelmed by the volume. After about an hour of the world's lamest email flood, it ceased and i received another few mails from our friendly neighborhood hacker.<br><br><div><a href="https://3.bp.blogspot.com/-ZwMtm4HNxSo/VsNB-LkIL3I/AAAAAAAABXY/qC5LAGm30Rs/s1600/email6.png" imageanchor="1"><img border="0" height="640" src="https://3.bp.blogspot.com/-ZwMtm4HNxSo/VsNB-LkIL3I/AAAAAAAABXY/qC5LAGm30Rs/s640/email6.png" width="358"></a></div><br><div>I checked out the link out on a VM through Tor hoping it would be some kind of exploit or IP logger, but it was just a login page for what we can assume is the shell he was offering me.</div><div><br></div><div><a href="https://1.bp.blogspot.com/-Xwed4NrX9VQ/VsNDRLPj6_I/AAAAAAAABXk/n81YDmlZgZ0/s1600/harvardshell.png" imageanchor="1"><img border="0" src="https://1.bp.blogspot.com/-Xwed4NrX9VQ/VsNDRLPj6_I/AAAAAAAABXk/n81YDmlZgZ0/s1600/harvardshell.png"></a></div><div><br></div><div>It's quite common for colleges and universities to allocate official sub-domains for different faculties and delegate management to faculty staff and even students, resulting in them often getting hacked. This specific sub-domain seems to have been accessed by various different hackers and the directories are full of strange files (I'm not really sure who to contact about the shell, so if you're associated with Harvard feel free to email from an official mail for the full link or contact the site administrator.).</div><div><br></div><div>Based on the shell link, I had already figured what his next threat would be and had saved some screenshots of the emails and link just in case; sure enough after another hour I received these two emails around 5 minutes apart.</div><div><br></div><div><a href="https://3.bp.blogspot.com/-s3o0bQ6cA6c/VsNGIusWaTI/AAAAAAAABXw/JyOV9k1yKn8/s1600/email7.png" imageanchor="1"><img border="0" src="https://3.bp.blogspot.com/-s3o0bQ6cA6c/VsNGIusWaTI/AAAAAAAABXw/JyOV9k1yKn8/s1600/email7.png"></a></div><div><br></div><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="https://1.bp.blogspot.com/-Nu8yris9Lto/VsNHfI2T22I/AAAAAAAABX8/qyy8N84p0zA/s1600/defacepage.png" imageanchor="1"><img border="0" height="408" src="https://1.bp.blogspot.com/-Nu8yris9Lto/VsNHfI2T22I/AAAAAAAABX8/qyy8N84p0zA/s640/defacepage.png" width="640"></a></td></tr><tr><td>Damn it Paul, stop chmodding your directory to 777</td></tr></tbody></table>Creating a sub-page in a sub-directory of a sub-domain of a sub-domain, wow this MalwareTech guy really knows his stuff...<br><br>As of writing this the deface page is still up, but that's not really a surprised seeming as it's not even an index page or in an actively used directory.<br><br><div><a href="https://1.bp.blogspot.com/-uiAcYDuOrF0/VsNKbOY_8PI/AAAAAAAABYI/pxuMTPYS2No/s1600/CookieStealer.png" imageanchor="1"><img border="0" height="104" src="https://1.bp.blogspot.com/-uiAcYDuOrF0/VsNKbOY_8PI/AAAAAAAABYI/pxuMTPYS2No/s640/CookieStealer.png" width="640"></a></div><br>I was also able to find publicly accessible logs from a cookie stealer running on the same sub-domain and according to <a href="https://twitter.com/StephenBattista/status/699332666890391552">a discussion</a> in one of my tweet threads,&nbsp;this could potentially be high risks as sub-domains have the ability to read certain cookies set using the parent domain, i.e .harvard.eu.<br><br>But wait! The fun didn't even stop there: before I went to bed I received a few more threats.<br><br><div><a href="https://3.bp.blogspot.com/-5A6Y8bleWOQ/VsNNNLkpW4I/AAAAAAAABYU/GHv03U2xUvc/s1600/email8.png" imageanchor="1"><img border="0" src="https://3.bp.blogspot.com/-5A6Y8bleWOQ/VsNNNLkpW4I/AAAAAAAABYU/GHv03U2xUvc/s1600/email8.png"></a></div>What is option 2? I must known! Also notice indexx.php as I assume index wasn't writable.<br><br><div><a href="https://2.bp.blogspot.com/-qpeRegOw8PU/VsNNzA8GFGI/AAAAAAAABYY/5U9Cbms0pYc/s1600/email9.png" imageanchor="1"><img border="0" src="https://2.bp.blogspot.com/-qpeRegOw8PU/VsNNzA8GFGI/AAAAAAAABYY/5U9Cbms0pYc/s1600/email9.png"></a></div><br>This is the point where he realized I'd been live tweeting the whole thing and decided to instead blackmail me into deleting my tweets (because obviously blackmailing me had gone well for him so far?).<br><br>I then received one final email before he gave up with the threats (or at least I assume he did).<br><br><div><a href="https://4.bp.blogspot.com/-yDUQmPwAkqg/VsNO2uDusDI/AAAAAAAABYk/Lf3rOjdPRrU/s1600/email10.png" imageanchor="1"><img border="0" src="https://4.bp.blogspot.com/-yDUQmPwAkqg/VsNO2uDusDI/AAAAAAAABYk/Lf3rOjdPRrU/s1600/email10.png"></a></div><br>Now as a not entirely incompetent webmaster, I instantly noticed that IP is not in any of my provider's IP ranges, so I decided to look it up.<br><br><div><a href="https://2.bp.blogspot.com/-B-b0yjkSBho/VsNPdO1qJjI/AAAAAAAABYs/d-FGj8CAJ48/s1600/IPLookup.png" imageanchor="1"><img border="0" src="https://2.bp.blogspot.com/-B-b0yjkSBho/VsNPdO1qJjI/AAAAAAAABYs/d-FGj8CAJ48/s1600/IPLookup.png"></a></div><br>lol, gg.<br><br><br></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Exploring Peer to Peer Botnets]]></title>
<description><![CDATA[Peer to Peer and Everything In betweenBack in October I'd gotten bored of the endless stream of cryptolockers and PoS trojan, so decided to look at something old school, that something was Kelihos. Since then, I've come to realize that P2P botnet monitoring brings together two of my favorite area...]]></description>
<link>https://tsecurity.de/de/20540/video/exploring-peer-to-peer-botnets/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20540/video/exploring-peer-to-peer-botnets/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on"><h2>Peer to Peer and Everything In between</h2><div>Back in October I'd gotten bored of the endless stream of cryptolockers and PoS trojan, so decided to look at something old school, that something was Kelihos. Since then, I've come to realize that P2P botnet monitoring brings together two of my favorite areas of security: Reverse Engineering and Programming. As a fun little side project, I decided to begin work on a P2P botnet monitoring system which would show details such as the size of the botnet and geographical distribution of nodes (It's still a work in progress but you can find it <a href="https://intel.malwaretech.com/botnet/za3/">here</a>.).</div><div><br></div><div><a href="http://2.bp.blogspot.com/-o9tjJuWMkU4/VpPBHaSaSSI/AAAAAAAABUE/vhpclrKs3iw/s1600/ZeroAccess3%2BTracker.png" imageanchor="1"><img border="0" height="488" src="http://2.bp.blogspot.com/-o9tjJuWMkU4/VpPBHaSaSSI/AAAAAAAABUE/vhpclrKs3iw/s640/ZeroAccess3%2BTracker.png" width="640"></a></div><div><br></div><h2>How does it work?</h2><div>In a peer to peer botnet, bots which can receive incoming connections act as servers (called supernodes) and those that can't just perform tasks from the botmaster (known as workers). The supernodes connect to other supernodes and pass messages between themselves to keep the network in sync and workers then connect to multiple supernodes to retrieve commands. In order for the workers to keep an up to date list of supernodes, the each supernode respond to a peer request command with a list of IPs for other supernodes it knows about (this list varies in size depends on botnets; for example Kelihos sends 500 IPs whist ZeroAccess2+ only sends 16). Workers will download peer lists from multiple supernodes and store them locally to ensure they can maintain connectivity with the botnet, even with a constantly changing landscape of supernodes.</div><div><br></div><div><b>Mapping Supernodes</b></div><div>First we need the IP of one or more online supernodes, then we can write a program to connect to each supernode and send a peer request, then connect to all the IPs returned, repeating the process recursively. In the case of newer ZeroAccess nodes, the supernodes internally store a large list of supernode IPs, but only return 16 online IPs as a response to each peer request: this means that in a single crawl we will likely only find a small cluster of recently contacted supernodes, not every online node.&nbsp;</div><div><br></div><div>To ensure the entire network is discovered, we should start the crawler off with multiple supernode IPs and store all IPs found into a database, then each time we restart the crawler we seed it with the list of IPs found during the previous crawler; repeating this process for a couple of hours ensure all online nodes are found.</div><div><br></div><div>If you're like me and you're wondering what a botnet map looks like when visualized, then look no further. Here is some data taken from a single crawl of the ZeroAccess 3 botnet and visualized using d3.&nbsp;</div><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://4.bp.blogspot.com/-TUIOxt2TbYI/VpPwoimJFLI/AAAAAAAABUU/j25BxJZm_LY/s1600/ZA3Full.png" imageanchor="1"><img border="0" height="485" src="http://4.bp.blogspot.com/-TUIOxt2TbYI/VpPwoimJFLI/AAAAAAAABUU/j25BxJZm_LY/s640/ZA3Full.png" width="640"></a></td></tr><tr><td>ZeroAccess 3 Full Map (Online and offline supernodes).</td></tr></tbody></table><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://4.bp.blogspot.com/-ciCWeB19UaI/VpQXFv5QCyI/AAAAAAAABU0/pOa9Gx3DzuY/s1600/ZA3Full2.png" imageanchor="1"><img border="0" height="464" src="http://4.bp.blogspot.com/-ciCWeB19UaI/VpQXFv5QCyI/AAAAAAAABU0/pOa9Gx3DzuY/s640/ZA3Full2.png" width="640"></a></td></tr><tr><td>ZeroAccess 3 Full Map (Same as above but with more link elasticity).</td></tr></tbody></table><div><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://4.bp.blogspot.com/-Ssws2rO1Zbc/VpQXMhmn3GI/AAAAAAAABU8/88JBm2aoFJA/s1600/ZA3OnlineOnly.png" imageanchor="1"><img border="0" height="530" src="http://4.bp.blogspot.com/-Ssws2rO1Zbc/VpQXMhmn3GI/AAAAAAAABU8/88JBm2aoFJA/s640/ZA3OnlineOnly.png" width="640"></a></td></tr><tr><td><span>ZeroAccess 3 (Online supernodes only).</span></td></tr></tbody></table><b><br></b><b>Mapping Workers</b></div><div>This is a little bit more tricky as worker IPs are not exposed to the botnet in any way; however, they do still need to connect to multiple supernodes to retrieve peer lists and commands. In order to map all workers, we'd need to set up multiple supernodes across the botnet which log incoming connections (obviously every worker doesn't connect to every supernode at the same time, so it's important that our supernodes have a stronger presence in the botnet).</div><div><br></div><div>Depending on the botnet bots use various different methods to decide which nodes to contact, this could be: age, online time, latency, or trust. In the case of ZeroAccess 2, it's age. ZA2 workers keep an internal list of supernode IP addresses which they connect to in order from newest to oldest; so, in order to gain a well established presence on the botnet it would be best to have a server with multiple IPs and add new ones frequent, making sure to notify as many other supernodes as possible of our new IP addresses (we can use the comprehensive list of supernode IPs obtained from the crawler for that!).</div><div><br></div><h2>What's the purpose?</h2><div>In my case the botnet tracker has no real purpose other than being a fun project, but in the threat intelligence world it could provide valuable intelligence. If we know the IP addresses of all the workers on the botnet, we can proactively work against any malicious actions they might take: for instance, if the botnet was a spam botnet, we could have have all the IP addresses flagged for spam before they even send a single email. We could also use the data to automatically notify businesses if IPs in their address space show up on the botnet, allowing them to be deal with breaches before they cause any harm.&nbsp;</div><div><br></div><h2>Conclusion</h2><div>This post is just a small insight into my current project and as it progresses I will likely post more data and data visualizations. If you've got any suggestions, leave a comment or DM me on twitter (<a href="https://www.twitter.com/MalwareTechBlog/">@MalwareTechBlog</a>).<br><br>If you're interested to read more about ZeroAccess3, check out this collaboration I did with the guys at Kryptos Logic: <a href="http://kryptoslogic.blogspot.co.uk/2016/01/zeroaccess-3-analysis.html">ZeroAccess 3 Analysis</a>.</div><div><br></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Regarding Kelihos Research]]></title>
<description><![CDATA[I had planned to continue posting a series of articles detailing my findings from looking into the Kelihos botnet (namely the peer-to-peer protocol). Although my intentions were only to crawl the botnet and try to gauge its size (out of personal interest), I've been made aware that the informatio...]]></description>
<link>https://tsecurity.de/de/20542/video/regarding-kelihos-research/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20542/video/regarding-kelihos-research/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on"><br>I had planned to continue posting a series of articles detailing my findings from looking into the Kelihos botnet (namely the peer-to-peer protocol). Although my intentions were only to crawl the botnet and try to gauge its size (out of personal interest), I've been made aware that the information posted in my previous article may have been used by others to perform attacks, resulting in some changed being made to the protocol. Personally I'd be happy to keep reversing the bot and play protocol whack-a-mole, though I understand that there's probably a lot of people out there who are going to be upset if the protocol is repeatedly changed as a result of my articles. I did consider taking a different path with the article and documenting the malware side of Kelihos, like I usually do, but the code is rather software like and doesn't contain anything interesting such as any form of stealth or defense against removal.<br><br>If you have any suggestions for what I should write about instead, please email me on admin@malwaretech.com.<br><br><br></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hidden VNC for Beginners]]></title>
<description><![CDATA[Hidden VNC is a creative solution to a solution to a problem which stemmed from banking fraud. Back years ago when fraud was uncommon, most banks only had basic IP or Geo-location checks to flag or block accounts if someone logged in from another computer. To combat this, banking trojans would ru...]]></description>
<link>https://tsecurity.de/de/20544/video/hidden-vnc-for-beginners/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20544/video/hidden-vnc-for-beginners/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on"><div>Hidden VNC is a creative solution to a solution to a problem which stemmed from banking fraud. Back years ago when fraud was uncommon, most banks only had basic IP or Geo-location checks to flag or block accounts if someone logged in from another computer. To combat this, banking trojans would run a SOCKS proxy server on the victims computer, allowing the fraudster to access the victims bank account with the same IP. As fraud became more prominent, banks started coming up with proprietary fraud detection systems which fingerprint the user's systems using a variety of check (Browser, OS/Plugin versions, locale, timezone, etc). The blackbox nature of these systems would require a fraudster to pretty much replicate the victim's system configuration in order to be sure the account wouldn't get blocked, so a more convenient method of fraud had to be found, that method was of course VNC. Fraudsters could VNC into a victims computer and use it to log into their bank account, but obviously this wasn't ideal. If the victim was using the computer, they'd see what the fraudster was doing, and if they weren't, the computer would probably be turned off. What was needed was some kind of VNC software that allowed fraudsters to access the system discretely, at the same time as the victim was using it.&nbsp;</div><div><br></div><h2>Hidden VNC</h2><div><b>Hidden Desktop</b></div><div>Malware can make use of some little known Windows features such as CreateDesktop and cross-process window subclassing to implement an invisible environment for VNC to run. As most linux users will probably be familiar with, a lot of distros have the ability to run multiple simultaneous desktops with independent taskbars. Windows has had this ability to crate multiple desktops since 2000, but it's not a well known feature and there is no default application to make use of it. By calling CreateDesktop, software can create a hidden desktop and execute applications in the desktop's context. All applications running on the hidden desktop will be invisible to the other desktops (i.e. the one the victim is using), they will not even show in the taskbar outside of the hidden desktop. Sounds simple enough, right?</div><div><br></div><div><b>Screenshots</b></div><div>Most VNC software works by taking periodic screenshots and sending them back to the client; however, Windows does not render any GUI elements to desktops which are not active (currently displayed on the monitor). One can't simply just capture screenshots of the hidden desktop, instead the VNC server would have to call EnumDesktopWindows to get a list of windows running on the hidden desktop, then call PrintWindow on each individual window, writing them to a bitmap in reverse Z-Order (starting with the bottom-most window and working its way to the top-most). Essentially the server is just emulating the screenshot feature by rendering each individual window to a bitmap in reverse of the order they appear on the screen.</div><div><br></div><div>Unfortunately, some applications don't properly handle WM_PRINT or WM_PRINTCLIENT messages (sent by PrintWindow), and as a result all or parts of the application will display as a white rectangle, as shown below.</div><div><br></div><div><a href="http://3.bp.blogspot.com/-qicSAMUhjWc/VfVWae-A5jI/AAAAAAAABMU/ot75M3Wo8Dc/s1600/Screenshot.png" imageanchor="1"><img border="0" height="360" src="http://3.bp.blogspot.com/-qicSAMUhjWc/VfVWae-A5jI/AAAAAAAABMU/ot75M3Wo8Dc/s640/Screenshot.png" width="640"></a></div><div><br></div><div>To resolve this, the VNC server would need to implement WM_PRINT and WM_PRINTCLIENT message on behalf of the application, making sure it paints all visible elements to the buffer. This can be done by either injecting code into all processes and hooking various functions in user32.dll, or by using cross-process subclassing to give the VNC server the ability to process window messages destined for the target application from within the VNC process.</div><div><br></div><div><b>User Input</b></div><div>When it comes to user input, the server has to emulate a virtual keyboard / mouse as input would be sent to the active desktop, not the hidden one. Normally when the mouse is moved or clicked the VNC client would sent the position along with a button click event to the VNC server, which would move the mouse to the given position and simulate a click, but because the real keyboard and mouse can't be use, things are far more complicated. The VNC server would have to keep track of every window on the hidden desktop, it's location, and its Z-Index; When a click even is sent, the server would need to find which window is at the cursor's current position by enumerating each window and checking its coordinates and visibility, then use PostMessage to send it a click event. For keyboard the same is true, the VNC server needs to keep track of which window is currently focused and use PostMessage to direct the input towards it.</div><div><br></div><h2>Conclusion</h2><div>Hidden VNC is probably one of the most complicated malware features to code and essentially requires coders to implement their own window manager, which is why there are very few unique implementations in the wild (most malware uses a single implementation unimaginatively named HVNC).&nbsp;</div><div><br></div><div>Sadly due to the fact it's a very sought after feature for banking trojans, I'm not going to post proof of concept code; however, I've uploaded some example code to demonstrate creating and switching between multiple desktops, you can find it here:&nbsp;<a href="https://github.com/MalwareTech/CreateDesktop/">https://github.com/MalwareTech/CreateDesktop/</a></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Advanced Desktop Application Sandboxing via AppContainer]]></title>
<description><![CDATA[This post is kind of a follow on from my previous article Usermode Sandboxing, so if you've not yet read that you should do so first.AppContainer was a fairly quietly introduced feature in Windows 8, which is a shame as it provides some great features which can be used for desktop application sec...]]></description>
<link>https://tsecurity.de/de/20545/video/advanced-desktop-application-sandboxing-via-appcontainer/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20545/video/advanced-desktop-application-sandboxing-via-appcontainer/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">This post is kind of a follow on from my previous article&nbsp;<a href="http://www.malwaretech.com/2014/10/usermode-sandboxing.html">Usermode Sandboxing</a>,&nbsp;so if you've not yet read that you should do so first.<br><br>AppContainer was a fairly quietly introduced feature in Windows 8, which is a shame as it provides some great features which can be used for desktop application security too (Few people are aware that it's not just used for Apps as the name might suggest). I'll go over some of the features which stood out to me.<br><br><b>Network Restrictions</b><br>A feature previously lacking in the Windows integrity mechanism was proper network restrictions. Low integrity processes could still freely create sockets, which would allow malicious code to escape a sandbox by exploiting a vulnerable higher integrity process listening on the host.<br><br>AppContainer introduces some new network restrictions such as:<br><br><ul><li>WinCapabilityInternetClientSid - Application can make outbound connections but not listen on sockets.</li><li>WinCapabilityInternetClientServerSid -&nbsp;Application can create listening sockets but not make outbound&nbsp;connections.</li><li>WinCapabilityPrivateNetworkClientServerSid -&nbsp;Application can listen or make outbound connections to IPs within the host's&nbsp;local network (not to external networks i.e the internet), but only if the network is set to Work or Private.&nbsp;</li></ul><div>An additional restriction I've noticed is that by default the application can connect to localhost, but cannot interact with listening sockets created by applications outside of its container (Services, other Apps, etc), which would prevent the application from exploiting anything listening on localhost.&nbsp;</div><div><br></div><div><b>Filesystem &amp; Registry Restrictions</b></div><div>Inside the AppContainer variable such as %temp% and %localappdata% are reassigned to directories within that container (%localappdata%\Packages\&lt;Container Name&gt;\), which is the only writable path by default. For registry the default accessible path is: HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\ CurrentVersion\AppContainer\Storage.</div><div><br></div><div>Although Apps can be assigned privileges such as&nbsp;WinCapabilityDocumentsLibrarySid (access to My Documents), this is implemented by the App broker process and will not work for desktop applications, instead one must explicitly add the AppContainer's SID to the file/folder's ACL's from the process creating the container (Same goes for other objects such as sections and registry keys).</div><div><br></div><div><b>Process Isolation</b></div><div>Previously low integrity processes could interfere with other low integrity processes, but with AppContainer this is no longer the case. Listing processes will only show the system pseudo-process and any processes running inside that specific container (no desktop processes, services, or other applications), and it's the same story for any other objects created outside of the container. This is pretty handy as browser worker processes usually run as low integrity, which meant that any malware run inside a sandbox would still be able to inject the browser and exfil data.</div><div><br></div><div><b>Kernel Mode&nbsp;Checks</b></div><div>All the actual access checks are part of the Windows kernel, so it's not a case of just removing a few user mode hooks or performing direct system calls, access is restricted at kernel level making AppContainer a great improvement over old sandboxing methods.<br><br></div><h2>Example Code</h2><div>I've created a little example and test of the AppContainer capabilities in C, it creates a container and executes itself inside the container in order to test the restrictions (Obviously this will only work on Windows 8+ where AppContainer is available).</div><div><br></div><div>The test container is given permission to connect to network IPs (but not the internet), the broker also create a text file (%userprofile%\Desktop\allowed_test.txt) and grants the AppContainer access. Other than connecting to network IPs and accessing the App's install directory or the explicitly allowed file, everything else is restricted.</div><div><br></div><div><a href="http://3.bp.blogspot.com/-7hW705i7WVg/Ve8LuPBEtFI/AAAAAAAABME/_41PdJqEFkU/s1600/AppContainerTest.png" imageanchor="1"><img border="0" height="364" src="http://3.bp.blogspot.com/-7hW705i7WVg/Ve8LuPBEtFI/AAAAAAAABME/_41PdJqEFkU/s640/AppContainerTest.png" width="640"></a></div><div><br></div><div><b><br></b></div><div><b>Github Link:&nbsp;</b><a href="https://github.com/MalwareTech/AppContainerSandbox">https://github.com/MalwareTech/AppContainerSandbox</a></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[User Mode Hook Scanner (Alpha)]]></title>
<description><![CDATA[I finally decided to write my first security tool based on an idea I had for advanced hook detection, I couldn't find any evidence of the method being used so I based a tool around it. It's still a working progress but I'm posting so I can get some feedback early on (Currently only x86 systems ar...]]></description>
<link>https://tsecurity.de/de/20547/video/user-mode-hook-scanner-alpha/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20547/video/user-mode-hook-scanner-alpha/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">I finally decided to write my first security tool based on an idea I had for advanced hook detection, I couldn't find any evidence of the method being used so I based a tool around it. It's still a working progress but I'm posting so I can get some feedback early on (Currently only x86 systems are supported, but this shouldn't be an issue as most researchers are running 32-bit VMs).<br><br><div><a href="http://4.bp.blogspot.com/-TmmCI8sroeI/VdX9vHisc7I/AAAAAAAABLU/jScQm3IXSgE/s1600/HookScanner.png" imageanchor="1"><img border="0" height="390" src="http://4.bp.blogspot.com/-TmmCI8sroeI/VdX9vHisc7I/AAAAAAAABLU/jScQm3IXSgE/s640/HookScanner.png" width="640"></a></div><br><br><h2>Advanced Scanning</h2><div>The scanner will iterate the export table for the following system modules: ntdll.dll, kernel32.dll, kernelbase.dll, user32.dll, ws2_32.dll, and wininet.dll. Like a conventional scanner it will go through each instruction of the exported function, comparing it against a clean version of the dll which has been loaded from the disk. Normally at this point a hook scanner would either report the modification or check to see if it's a jump or call, but I've decided to take an extra step towards detecting obscure hooks.</div><div><br></div><div><b>Function Emulation</b></div><div>If any modification is found at any point within the function body, the scanner will use my basic x86 emulator to begin emulating the function, while tracing push, pop, mov, lea, jmp, call, and ret instructions. The emulator will try to determine if control flow is altered by the modified instructions and if so, which instruction redirects execution and to where.</div><div><br></div><div>The purpose of the emulator is to detect more obscure hooks as well as accurately determine the destination of the hook, beyond resolving basic jump and call instructions. A good example of where this is applicable is on hooks placed by carberp within the native call stubs of ntdll.</div><div><br></div><div>Consider this example call stub:</div><blockquote>mov eax, 0xAA<br>mov edx, 0x7FFE0300<br>call dword ptr [edx]<br>retn 0x10</blockquote>This function does not use a relative call, instead it moves a pointer into the edx register and performs an absolute indirect call with it. Carberp replaces the address moved into the edx register, resulting in redirecting the call to an arbitrary location, and not showing up in hook scanners searching for jmp/call hooks. More advanced hook scanners will log any modifications; however, the user would then have to disassemble the modified function and determine the destination address of the hook, which my engine does automatically (if it fails to resolve the location or detect a control transfer, the modification will still be logged for further investigation).<br><br><h2>Destination Dumping</h2><div>Most rootkits hook by injecting their code (usually shellcode or a PE file) into the target process, hooks are then set to point to locations within the injected code. If the tool is successfully able to work out the destination of a hook, it will query the page it points to and then map out all pages allocated with the same base address. Using this information it is possible to dump the rootkit's entire shellcode, injected PE or DLL, even if it spans multiple pages.&nbsp;</div><div><br></div><h2>Conclusion</h2><div>Again, this is a working progress and I can't guarantee the current version won't be a huge steaming pile of crap. please email any feedback/issues to admin@malwaretech.com or leave a comment on this post.</div><br>Here's a demo video to prove it does at least work on my system:<br><br> <br><br><b>Download Link:</b>&nbsp;<a href="https://www.malwaretech.net/downloads/HookScanner.rar">https://www.malwaretech.net/downloads/HookScanner.rar</a></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Windows 10 System Call Stub Changes]]></title>
<description><![CDATA[Recently I installed Windows 10 RTM and while I was digging around I happened to notice some changes to the user mode portion of the system call stub: these changes appear to break the current methods of user mode system call hooking on x86 and WOW64 (Recap: here).Windows 10 x86Native functions n...]]></description>
<link>https://tsecurity.de/de/20548/video/windows-10-system-call-stub-changes/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20548/video/windows-10-system-call-stub-changes/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">Recently I installed Windows 10 RTM and while I was digging around I happened to notice some changes to the user mode portion of the system call stub: these changes appear to break the current methods of user mode system call hooking on x86 and WOW64 (Recap:&nbsp;<a href="http://www.malwaretech.com/2014/06/usermode-system-call-hooking-betabot.html">here</a>).<br><br><h2>Windows 10 x86</h2>Native functions no longer make a call to ntdll!KiFastSystemCall&nbsp;via the pointer at SharedUserData!SystemCallStub (0x7FFE0300), in fact SharedUserData!SystemCallStub don't seem to point to anything anymore (This change was originally made in Windows 8, but like most people I'd rather just pretend that OS doesn't exist).<br><br>Now the system call stub is inline with one below each native function (I'm not really sure of the reason for the change but it is now impossible to hook all system calls with a single modification).<br><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://4.bp.blogspot.com/-sOjJd0yNsEk/Va_0UmiRhUI/AAAAAAAABJA/MeSAx5c238k/s1600/Windows10%2Bx86.png" imageanchor="1"><img border="0" src="http://4.bp.blogspot.com/-sOjJd0yNsEk/Va_0UmiRhUI/AAAAAAAABJA/MeSAx5c238k/s1600/Windows10%2Bx86.png"></a></td></tr><tr><td>Windows 10 x86</td></tr></tbody></table><h2></h2><h2>Windows 10 x64 (WOW64)</h2>Native function no longer call FS:[0xC0], instead they call a pointer in the same way x86 used to call KiFastSystemCall.<br><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://4.bp.blogspot.com/-7ZRgMSjrsVw/Va_1eOirqZI/AAAAAAAABJI/mAJkgUCB-8o/s1600/Windows10%2BWOW64.png" imageanchor="1"><img border="0" src="http://4.bp.blogspot.com/-7ZRgMSjrsVw/Va_1eOirqZI/AAAAAAAABJI/mAJkgUCB-8o/s1600/Windows10%2BWOW64.png"></a></td></tr><tr><td>Windows 10 x64 (WOW64)</td></tr></tbody></table><br>Wow64SystemServiceCall is not a fixed address like SharedUserData!SystemCallStub, instead it's the absolute address of a function within the wow64 ntdll.dll.<br><div></div><div></div><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://1.bp.blogspot.com/-dSlQxBhtyTA/Va_4KbX_EqI/AAAAAAAABJc/Vm01sx_cBsE/s1600/Wow64SystemServiceCall.png" imageanchor="1"><img border="0" height="238" src="http://1.bp.blogspot.com/-dSlQxBhtyTA/Va_4KbX_EqI/AAAAAAAABJc/Vm01sx_cBsE/s640/Wow64SystemServiceCall.png" width="640"></a></td></tr><tr><td>ntdll!Wow64SystemServiceCall</td></tr></tbody></table><br>The code simply checks a flag in the PEB to decide if to use int 2Eh or normal system call, then as before it calls wow64cpu!CpupReturnFromSystemCallStub; however, this is now done by a pointer in the table pointed to by R15, instead of directly.<br><br>FS:[0xC0] is still usable for compatibility reasons, by it doesn't point to Wow64SystemServiceCall, nor does it point to the old code, instead it points to some more complicated version (wow64cpu!KiFastSystemCall) which does the same thing.<br><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://3.bp.blogspot.com/-5tjwafWX_s8/Va_6YVfwiYI/AAAAAAAABJw/fNcGdl-BC6s/s1600/X86SwitchTo64BitMode.png" imageanchor="1"><img border="0" src="http://3.bp.blogspot.com/-5tjwafWX_s8/Va_6YVfwiYI/AAAAAAAABJw/fNcGdl-BC6s/s1600/X86SwitchTo64BitMode.png"></a></td></tr><tr><td>x86SwitchTo64BitMode (Pointed to by FS:[0xC0] on pre-Windows 10 systems)</td></tr></tbody></table><br>As you can see the original method was just executing a single instruction which did a far jump to wow64cpu!CpupReturnFromSimulatedCode; The new method does exactly the same thing but with more instructions.<br><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://4.bp.blogspot.com/-NYQ1jvYxnos/Va_5m6ZseiI/AAAAAAAABJo/-cln54w89eU/s1600/KiFastSystemCall.png" imageanchor="1"><img border="0" src="http://4.bp.blogspot.com/-NYQ1jvYxnos/Va_5m6ZseiI/AAAAAAAABJo/-cln54w89eU/s1600/KiFastSystemCall.png"></a></td></tr><tr><td>wow64cpu!KiFastSystemCall (Pointed to by FS:[0xC0] on Windows 10 x64)</td></tr></tbody></table><br>It's hard to gauge exactly why the old code was replaces, but it may have something to do with the fact there is no longer any pointers to wow64cpu!CpupReturnFromSimulatedCode which can be accessed from 32-bit code, now the only way is to switch into 64-bit mode and retrieve the pointer from r15+0xF8.<br><br></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[MalwareTech SBK - A Bootkit Capable of Surviving Reformat]]></title>
<description><![CDATA[Since i got into firmware hacking, I've been working on a little project behind the scenes: A hard disk firmware based rootkit which allows malware to survive an operating system re-install or full disk format. Unfortunately I can't post a proof of concept for many reasons (people have even conta...]]></description>
<link>https://tsecurity.de/de/20552/video/malwaretech-sbk-a-bootkit-capable-of-surviving-reformat/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20552/video/malwaretech-sbk-a-bootkit-capable-of-surviving-reformat/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">Since i got into firmware hacking, I've been working on a little project behind the scenes: A hard disk firmware based rootkit which allows malware to survive an operating system re-install or full disk format. Unfortunately I can't post a proof of concept for many reasons (people have even contacted me just to tell me not to post it), so instead I've written a presentation overviewing and explaining the rootkit, which I've dubbed MT-SBK.<br><div><br></div><div>The general purpose of MT-SBK is to provide a "framework" for my previous project, <a href="http://www.malwaretech.com/2014/04/coding-malware-for-fun-and-not-for.html">TinyXPB</a>, A windows XP bootkit. This framework enables TinyXPB to be stored and loaded from within the hard disk firmware, preventing it from being removed by: antiviruses, operating system re-installs, or even full disk reformats. This rootkit is designed for a major brand of hard disk and can infect the firmware from within the operating system (no physical access required), it's also completely undetectable to software running on the host computer.&nbsp;</div><div><br></div><div>The only way to remove MT-SBK is by replacing that hard disk's PCB or connecting an SPI programmer directly to the flash chip and flashing it with the original firmware.&nbsp;</div><div><br></div><div><a href="http://malwaretech.net/MTSBK.pdf">MalwareTech SBK Overview - PDF</a></div><div><a href="https://www.youtube.com/watch?v=0gc-VF6bi3g">Sector Spoofing Example - Youtube</a><br><br><div><a href="http://3.bp.blogspot.com/-wPGeEnFDIdY/VWyAMCHj5rI/AAAAAAAABII/_GOJSC5cqe0/s1600/ss%252B%25282015-04-29%252Bat%252B05.15.59%2529.png" imageanchor="1"><img border="0" height="282" src="http://3.bp.blogspot.com/-wPGeEnFDIdY/VWyAMCHj5rI/AAAAAAAABII/_GOJSC5cqe0/s320/ss%252B%25282015-04-29%252Bat%252B05.15.59%2529.png" width="320"></a></div><br></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hard Disk Firmware Hacking (Final)]]></title>
<description><![CDATA[Core 2, I choose you.Less than 5 minutes after posting the last article, i discovered the final piece of my puzzle: a second CPU core. I was looking through my OpenOCD configuration when I realized it had a single tap definition hardcoded, so i decided to comment it out and let OpenOCD try to aut...]]></description>
<link>https://tsecurity.de/de/20553/video/hard-disk-firmware-hacking-final/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20553/video/hard-disk-firmware-hacking-final/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on"><h2>Core 2, I choose you.</h2><div>Less than 5 minutes after posting the last article, i discovered the final piece of my puzzle: a second CPU core. I was looking through my OpenOCD configuration when I realized it had a single tap definition hardcoded, so i decided to comment it out and let OpenOCD try to automatically discover the taps.&nbsp;</div><div><br></div><div><a href="http://1.bp.blogspot.com/-KqXM-uyoijU/VVYPnMPzkRI/AAAAAAAABGc/Lcok5MfTx-g/s1600/AutoTAP.png" imageanchor="1"><img border="0" height="384" src="http://1.bp.blogspot.com/-KqXM-uyoijU/VVYPnMPzkRI/AAAAAAAABGc/Lcok5MfTx-g/s640/AutoTAP.png" width="640"></a></div><div><br></div><div>Auto probing found two TAPs with the same id, which I assumed to be two different cores, so I updated my config accordingly.&nbsp;</div><div>Here's a new config designed to work with both cores:</div><div><blockquote>transport select jtag<br>adapter_khz 100<br><br>jtag newtap auto0 tap -irlen 4 -expected-id 0x121003d3<br>jtag newtap auto1 tap -irlen 4 -expected-id 0x121003d3<br><br>target create auto0.tap feroceon -endian little -chain-position auto0.tap<br>target create auto1.tap feroceon -endian little -chain-position auto1.tap<br><br>reset_config srst_only<br>adapter_nsrst_delay 200<br>jtag_ntrst_delay 200</blockquote></div><div>After a few small adjustments, all that was left to do was run OpenOCD and see what secrets the new core holds.</div><div><br></div><div><a href="http://1.bp.blogspot.com/-GDbooLOU5Mc/VVn4vmDYzjI/AAAAAAAABGw/5O8ba-hOxSw/s1600/KernelBreakpoint.png" imageanchor="1"><img border="0" height="300" src="http://1.bp.blogspot.com/-GDbooLOU5Mc/VVn4vmDYzjI/AAAAAAAABGw/5O8ba-hOxSw/s640/KernelBreakpoint.png" width="640"></a></div><div><br></div><div>Once I'd connected to the JTAG via IDA, everything was clear. I could see that the second core was stopped on the breakpoint I'd written to the flash chip. This was the core responsible for loading and executing the bootloader, whilst the core I had been looking at before just waits in a loop. Obviously the bootstrap code must be different for core 2, because the other bootstrap just loops until a later time.&nbsp;</div><div><br></div><div><br></div><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://1.bp.blogspot.com/-gamTWQmYXEc/VVn_gQ8oPMI/AAAAAAAABHA/HbXdTsp21aU/s1600/Bootstrap2.png" imageanchor="1"><img border="0" height="640" src="http://1.bp.blogspot.com/-gamTWQmYXEc/VVn_gQ8oPMI/AAAAAAAABHA/HbXdTsp21aU/s640/Bootstrap2.png" width="518"></a></td></tr><tr><td><br></td></tr></tbody></table><div>It's clear that core 1's bootstrap is just debugging / management code, whilst core 2 has a completely separate region of code mapped to the same address. Core 2 not only loads the bootloader from the flash, but also appears responsible for most of the interesting operations such as handling SATA requests and writing the cache descriptor.</div><div><br></div><h2>Conclusion</h2><div>So there you have it, using very little experience I was able to JTAG a WD hard disk, dump the firmware, and even discover how to read / write the flash chip using ICP. I'm definitely going to spend some more time poking about in the firmware to see how parts of it work, but because that's outside the scope of these articles, and to avoid boring people, this will be the last article of the series. If I manage anything interesting, I will likely post my findings in a whitepaper and upload it alongside a demo video.&nbsp;</div><div><br></div><div>I'd like to continue posting both hardware and software articles (and some tutorial), so if you have any suggestions for either, send them to admin@malwaretech.com.&nbsp;</div><div><br></div><div>Hope you've enjoyed a slightly different style of writing and learned something new.</div><div><br></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hard Disk Firmware Hacking (Part 5)]]></title>
<description><![CDATA["Discovery requires experimentation"This weekend I made a pretty big breakthrough which lead to me making a few smaller breakthroughs and ultimately negating most of my previous research. I've also learned that "not reinventing the wheel" isn't always the best option, especially when it comes to ...]]></description>
<link>https://tsecurity.de/de/20554/video/hard-disk-firmware-hacking-part-5/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20554/video/hard-disk-firmware-hacking-part-5/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on"><div></div><h2>"Discovery requires experimentation"</h2><div>This weekend I made a pretty big breakthrough which lead to me making a few smaller breakthroughs and ultimately negating most of my previous research. I've also learned that "not reinventing the wheel" isn't always the best option, especially when it comes to trusting other people's research.&nbsp;</div><div><br></div><div>One of the main goals was to find a way to quickly and easily reprogram the hard disk, given physical access. In the&nbsp;<a href="https://spritesmods.com/?art=hddhack&amp;page=5">spritesmods</a>&nbsp;post he had remove the flash chip from the PCB and attached it to some veroboard, so he could swap it between the hard disk and the flash programmer. Obviously it's not very practical for me to have to keep disconnecting and reconnecting the flash chip, and especially impractical for an adversary looking to quickly infect a disk.&nbsp;</div><div><br></div><div>As most already know, it is possible to flash WD hard disk firmware from within the OS as long as the account has Admin/Root privileges. The disk must be running in order to accept SATA commands and must be restarted to load the new firmware. If the new firmware has errors the disk cannot start, therefore the firmware cannot be fixed (this is known as bricking). Due to the fact I'm hacking about with the firmware I'm likely to brick the device, so i needed another way of flashing it.</div><div><br></div><h2>In-Circuit Programming</h2><div>In circuit Programming (ICP) is the ability to program a flash chip or other component, while it's still connected to the circuit. In the last article I was able to find the test ports that connected to the flash chip, but was unable to program it, however; after some experimentation over the weekend I finally managed to achieve ICP.&nbsp;</div><div><br></div><div><b>The Problem</b></div><div>One of the biggest problems with ICP is that in order to write the flash chip you need to power it, but because it's connected to the rest of the circuit you end up powering other chips, which send data on various buses and interfere with your attempts to talk to the flash.</div><div><br></div><div>To prevent interference on the SPI bus, it's usually enough to hold down the reset button or short the reset signal to ground, resulting in the system being held in reset and unable to start (giving you uninterrupted access to the flash's bus).&nbsp;</div><div><br></div><div>Here's a list of what I'd tried.&nbsp;</div><div><ul><li>Powering the flash directly with 3.3v supply</li><li>Powering the flash directly with 3.3v supply while holding the system in reset</li><li>Powering the entire system by plugging in the HD</li><li>Powering the entire system by plugging in the HD while holding the system in reset</li></ul></div><div>I was ready to give up as nothing was clearly working (my SPI programmer couldn't so much as detect the flash chip), but on Saturday I decided to have one last go, and it worked straight away (sort of).&nbsp;</div><div><br></div><div><a href="http://4.bp.blogspot.com/-CwG7cjSp_xs/VVHX3ppQ8II/AAAAAAAABF4/D6-HkjFg2mw/s1600/flashrom.png" imageanchor="1"><img border="0" height="340" src="http://4.bp.blogspot.com/-CwG7cjSp_xs/VVHX3ppQ8II/AAAAAAAABF4/D6-HkjFg2mw/s640/flashrom.png" width="640"></a></div><div><br></div><div>The SPI programmer was able to detect the flash chip, but most of the data being read was erroneous. On investigation I found that the VCC (power) wire had come unstuck from the test point and was now hanging off the desk. So if the VCC wire wasn't connected and the system wasn't plugged in, how was it reading the flash chip?</div><div><br></div><div>After more experimentation I found that the circuit was set up in such a way that some of the voltage being sent to the MISO pin (about 1.2v of it) was somehow feeding back onto the VCC rail and powering the chip....wat. As I've said I'm not an electronics expert, and this had me completely baffled, but it also showed me that reading the chip in circuit was possible, i just needed to learn its secrets.&nbsp;</div><div><br></div><div><b>The Solution</b></div><div>After extensively more experimentation with a side order of experimentation and failure, I found that holding the system in reset (the solution to most ICP problems) was actually the only issue. I had been leaving the JTAG connected to the system and it was pulling the reset pin low (holding it in reset), so when I wasn't holding the system in reset the JTAG was. After disconnecting the SRST (reset) pin of the JTAG, everything worked perfectly as long as the disk wasn't plugged in and I powered the flash chip directly. It seems that this system is designed for ICP to be done without holding it in reset and doing so causes issues.</div><div><br></div><div></div><div>Here is the updated image from the last article.</div><div><br></div><div><a href="http://3.bp.blogspot.com/-Wd8fhDBYNxA/VVHTfkbxxeI/AAAAAAAABFo/-uNjbNSQ4W8/s1600/ICP.png" imageanchor="1"><img border="0" height="622" src="http://3.bp.blogspot.com/-Wd8fhDBYNxA/VVHTfkbxxeI/AAAAAAAABFo/-uNjbNSQ4W8/s640/ICP.png" width="640"></a></div><div><br></div><div>If you have a USB device which allows for SPI programming and is supported by "flashrom", like I do. You can connect it to the computer and use flashrom to read, write, and erase the flash. The TUMPA is an especially nice board because it has 2 channels, so you don't have to disconnect the JTAG to use SPI.</div><h2></h2><h2>Don't reinvent the wheel they said, It's a waste of time they said</h2><div>Before i started hacking I'd decided to read other people's research to get a good idea of where to start. Resourceful, right? Well it actually turns out that most of the research I've based mine on was either wrong or just doesn't apply to this hard disk.&nbsp;</div><div><br></div><div>I was under the impression that when connecting the JTAG and issuing a "reset halt" command, the system would be halted before any code was run, and I could step through the bootstrap while it read the bootloader from flash and execute it, this wasn't the case.</div><div><br></div><div>After playing around by writing my own code to the flash, i realized that it's is being read into memory and executed long before the system is halted. In fact it seems like the code at 0xFFFF0000 is just some kind of debug console which is only jumped to if a halt command is issued, or the reading / executing the code from flash fails. By the time the JTAG is able to connect and issue a command, the entire kernel has already been loaded and initialized, which explains why I couldn't set any breakpoints on the bootloader.</div><div><br></div><div>I can write a breakpoint to the flash so that an exception is generated and the system fails to load, then remove the breakpoint and manually jump back to the bootloader, but for whatever reason the system doesn't boot properly the second time. This isn't a huge issue because I can still debug the bootloader up until the a certain point (as long as any code I write is run during early boot, I can debug that too), but until I can find why it fails the second time, there is a window of time between the late boot stage and early kernel initialization where I can't debug.&nbsp;</div><div><br></div><h2>Success</h2><div><a href="http://1.bp.blogspot.com/-6S4YPz4Jllc/VVHowXsgdYI/AAAAAAAABGI/PImx2nl6NZo/s1600/CodeInjection.png" imageanchor="1"><img border="0" height="242" src="http://1.bp.blogspot.com/-6S4YPz4Jllc/VVHowXsgdYI/AAAAAAAABGI/PImx2nl6NZo/s640/CodeInjection.png" width="640"></a></div><div><br></div><div>My main goal was to inject code into the firmware both by running an executable on the target computer and with physical access to the hard drive, which I've achieved. Now I'll just poke around and see what I can do with it.</div><div><br></div><div>If you're wondering how easy it would be for an attacker to infect a hard drive's firmware, here are two quick ways they could to do it.</div><div><ol><li>Sending firmware update commands over the SATA interface from the host computer (requires root/admin).</li><li>Create a portable SPI programmer that can flash the firmware by being pressed against the test points on the bottom of the hard drive (would only take about 5 seconds).&nbsp;</li></ol><div>Something...something...aliens...something...something...government... *puts on tinfoil hat*<br><br>Part 6 (Final part):&nbsp;<a href="http://www.malwaretech.com/2015/05/hard-disk-firmware-hacking-final-part.html">http://www.malwaretech.com/2015/05/hard-disk-firmware-hacking-final-part.html</a></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hard Disk Firmware Hacking (Part 4)]]></title>
<description><![CDATA[It seems that the bootstrap code is just scattered around various memory addresses and there's no simple way to dump all of it, so i decided to just dump a chunk of memory from 0x00000000 and look for any reference to addresses outside of that chunk (allowing me to build up a basic map of the cod...]]></description>
<link>https://tsecurity.de/de/20555/video/hard-disk-firmware-hacking-part-4/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20555/video/hard-disk-firmware-hacking-part-4/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">It seems that the bootstrap code is just scattered around various memory addresses and there's no simple way to dump all of it, so i decided to just dump a chunk of memory from 0x00000000 and look for any reference to addresses outside of that chunk (allowing me to build up a basic map of the code).<br><br>Although the exact addresses vary between disk models, my layout should give you a good idea where to look.<br><br><ul><li>0x00000000 - 0x0000A520</li><li>0x0000EA24 - 0x00014F74</li><li>0xFFE19E00 - 0xFFE34D9A</li><li>0xFFFF2800 - 0xFFFF2800</li></ul><div><br></div>After poking around, i found it was reading some code into memory from somewhere, which I assumed to be the flash.<br><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://3.bp.blogspot.com/-duSheH_MD-U/VUkdUZpR2wI/AAAAAAAABEs/nLKJcQUG0q4/s1600/Flash_Snippet.png" imageanchor="1"><img border="0" height="480" src="http://3.bp.blogspot.com/-duSheH_MD-U/VUkdUZpR2wI/AAAAAAAABEs/nLKJcQUG0q4/s1600/Flash_Snippet.png" width="640"></a></td></tr><tr><td>First few bytes of the flash</td></tr></tbody></table><br>The flash starts with a table which spans from 0 to 0x120 (the start of the first block), each table entry is 32 bytes and follows the same format (see: image). Each block has an id from 1 to n, with the exception of the first block which is always 0x5A.<br><br>The block at 0x5A is some kind of bootloader which likely reads and decompresses the rest of the blocks from flash, but I'm not sure yet as it's proving a problem to reverse. I wanted to intercept this bootloader at the entry point, which sounds easy, it's not.<br><br><ul><li>At some point during the bootstrap process my hardware breakpoints stop working, it could be that the processor is overwriting the register, remapping memory, or disabling them all together; but I've not found the issue yet. This means I can't simply set a breakpoint on the bootloader entry point (0x19000).</li><li>The bootstrap code responsible for loading and executing the bootloader is in ROM, so I can't set software breakpoints either.</li><li>Watchpoints don't seem to work at all, even before my breakpoints stop working I can't get the code to break on any memory access.</li><li>Most of the code that isn't in ROM is using some kind of paging (aka overlaying), which reads certain regions of code into memory when they're needed, then replaces them when they're not, preventing the use of software breakpoints.</li></ul><div><br></div><div>All in all, this was proving to be must more of a pain than I expected so I decided the easiest option would be to buy a drive with an external EEPROM chip, instead of one built into the MCU. This way I could write software breakpoints directly to the flash chip with an EEPROM programmer.</div><div><br></div><div><a href="http://4.bp.blogspot.com/-F2Xp2bH__Ls/VUkjsE-joUI/AAAAAAAABE4/-Hb5E-6WtAU/s1600/PCB_Flash.png" imageanchor="1"><img border="0" height="424" src="http://4.bp.blogspot.com/-F2Xp2bH__Ls/VUkjsE-joUI/AAAAAAAABE4/-Hb5E-6WtAU/s1600/PCB_Flash.png" width="640"></a></div><div><br></div><br>&nbsp;Hardware and firmware wise this disk is pretty much identical, except the firmware is now stored in a 256k SPI flash chip, instead of in the MCU's internal memory. The first thing I did was use a multimeter to see if there's anywhere on the top of the PCB i could connect to the flash chip (so I didn't have to desolder it or keep unscrewing the PCB from the disk).<br><br><div><a href="http://3.bp.blogspot.com/-9Qx4gtQddrw/VUkkxvnU1-I/AAAAAAAABFE/9JwlTaLgUYc/s1600/ISP.png" imageanchor="1"><img border="0" height="624" src="http://3.bp.blogspot.com/-9Qx4gtQddrw/VUkkxvnU1-I/AAAAAAAABFE/9JwlTaLgUYc/s1600/ISP.png" width="640"></a></div><br>WP# and HOLD# are shorted to VCC, so they're not a problem and the rest of the required pins are brought out to the test pads around E11. I tried connecting my TUMPA's SPI interface to the test pads and using the flashrom software, but it was unable to detect the chip. I'm not sure if this is because my TUMPA isn't capable of in-circuit programming, or there is other stuff on the same data lines, but it I simply couldn't get it to work.<br><br>My new plan is to get a SOIC clip, a decent EEPROM programmer, and a desoldering station for if neither of the other option work; In the mean time I will be trying to find out what's stopping my breakpoints from working and see if i can remedy that. I'll probably not have another update until all my stuff gets delivered and I have a few days to try it all out.<br><br>Part 5 (Writing the flash):&nbsp;<a href="http://www.malwaretech.com/2015/05/hard-disk-firmware-hacking-part-5.html">http://www.malwaretech.com/2015/05/hard-disk-firmware-hacking-part-5.html</a></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hard Disk Firmware Hacking (Part 3)]]></title>
<description><![CDATA[Before we get started with part 3, I have a few updates regarding part 1 & 2.I've found that the reset pad on the JTAG header is not actually a system reset (SRST) but a TAP reset (TRST), which isn't very useful for debugging. Here is the updated layout with the system reset signal added (this wi...]]></description>
<link>https://tsecurity.de/de/20556/video/hard-disk-firmware-hacking-part-3/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20556/video/hard-disk-firmware-hacking-part-3/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">Before we get started with part 3, I have a few updates regarding part 1 &amp; 2.<br><br>I've found that the reset pad on the JTAG header is not actually a system reset (SRST) but a TAP reset (TRST), which isn't very useful for debugging. Here is the updated layout with the system reset signal added (this will allow the 'reset halt' command to break on the reset vector, before any instructions are executed).<br><br><div><a href="http://2.bp.blogspot.com/-qVcEybzOjTw/VTZnIGTiHGI/AAAAAAAABDk/WuV-Osa__o8/s1600/JTAG_Pins_New.png" imageanchor="1"><img border="0" height="620" src="http://2.bp.blogspot.com/-qVcEybzOjTw/VTZnIGTiHGI/AAAAAAAABDk/WuV-Osa__o8/s1600/JTAG_Pins_New.png" width="640"></a></div><br>In my case there wasn't a test pad for the SRST line, but there was a very small exposed bit of copper underneath the serial sticker, which was connected to the SRST pin of the CPU.<br><br>Ceriand on <a href="http://www.reddit.com/r/ReverseEngineering/comments/32jx6k/dumping_the_firmware_of_a_hard_drive_with_jtag/cqcbdda">Reddit</a>&nbsp;pointed out that the JTAG header matches the footprint of a MICTOR connector (38 or 40 pin one usually), so if you don't want to do any soldering you could get yourself a MICTOR connector and cable.<br><br><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://3.bp.blogspot.com/-jrqTYAonEp4/VTZpDQxXg4I/AAAAAAAABDw/MomiWLykIxE/s1600/MICTOR.png" imageanchor="1"><img border="0" height="640" src="http://3.bp.blogspot.com/-jrqTYAonEp4/VTZpDQxXg4I/AAAAAAAABDw/MomiWLykIxE/s1600/MICTOR.png" width="640"></a></td></tr><tr><td>MICTOR 38 connector</td></tr></tbody></table><br>I've also found out the hard way that older PSUs don't like to be used at extremely low voltage (components inside them tend to explode), so I recommend buying a decent AC to Molex power adapter (don't get the cheap ones, they die after a day).<br><br><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://3.bp.blogspot.com/-CdZRVUk7nmo/VTZ9wGYlqyI/AAAAAAAABEY/Dc2MY-LgFK8/s1600/fuse.png" imageanchor="1"><img border="0" height="478" src="http://3.bp.blogspot.com/-CdZRVUk7nmo/VTZ9wGYlqyI/AAAAAAAABEY/Dc2MY-LgFK8/s1600/fuse.png" width="640"></a></td></tr><tr><td>Apparently glass fuses like to explode and send shards flying everywhere</td></tr></tbody></table><br>Lastly: because the JTAG header has an RTCK connector, you should be able to set adapter_khz in the openocd config to 0. The JTAG can then use adaptive clocking, which should prevent any timeout errors.<br><br><h2>Bootstrap &amp; Bootloader</h2><div>After some reversing I'm now convinced that the bootstrap code in Part 2 is not used during a normal boot. On execution it waits for some data on a port (most likely the serial port), then acts accordingly. If no data is found, the code goes into an infinite loop and the drive never boots.</div><div><br></div><div><a href="http://4.bp.blogspot.com/-xuj5GZP_afA/VTZwaEtvuPI/AAAAAAAABD8/sKqjDxDcOus/s1600/Bootstrap1.png" imageanchor="1"><img border="0" height="640" src="http://4.bp.blogspot.com/-xuj5GZP_afA/VTZwaEtvuPI/AAAAAAAABD8/sKqjDxDcOus/s1600/Bootstrap1.png" width="504"></a></div><div><br></div><div>On this CPU the 0x1C00A000 - 0x1C00AFFF range appears to be mapped to various ports and test pads all around the PCB. Now, because I don't have the money for an oscilloscope or decent logic analyzer I'm going to have to pass up on mapping these ports, even though it would make things easier.</div><div><br></div><div>All this code does is read some kind of switch which enters the system into a specific mode based on the value:</div><div><ul><li>4 - Not sure, but it waits infinitely for a value on some port. My assumption is this code probably allows developers to read/write/erase the processor's internal flash.</li><li>3 - Jumps to the address in R4 (in my case this is 0, but that could be by design)</li><li>6 - A serial console which looks for ASCII bytes (r, w, j, h) on the serial port, allowing the developer to send read, write, jump, and halt commands.</li></ul><div>I'm not familiar with how ports are mapped to memory, but&nbsp;0x1C00A030 is always 0 while&nbsp;0x1C00A03A is always 0xFFFF (which I assume means one is constant at a low voltage and the other constant at a high voltage).</div></div><div><br></div><div>Interestingly if we set a hardware breakpoints on "cmp R1, #3" and set R1 to 3, the code will jump to address 0 and boot normally (this is why I think 0 doesn't mean uninitialized). Let's see what's at address 0.</div><div><br></div><div><a href="http://4.bp.blogspot.com/-zrF58vjNGAI/VTZ53J46_gI/AAAAAAAABEM/7db5ldTf708/s1600/IVT.png" imageanchor="1"><img border="0" height="640" src="http://4.bp.blogspot.com/-zrF58vjNGAI/VTZ53J46_gI/AAAAAAAABEM/7db5ldTf708/s1600/IVT.png" width="614"></a></div><div><br></div><div>Address 0 is usually RAM, but there's already valid code here, so it's quite likely the CPU temporarily maps address 0 to some area of the internal ROM during boot. This is a standard ARM IVT, which you'd see at the boot address of any ARM devices; making me think the bootstrap at 0xFFFF0000 is only executed if the CPU detects a JTAG is attached. Until I can buy a decent logic analyzer and figure which port allows us to control the bootstrap mode switch, the only apparent way to boot the disk normally with a JTAG attached is to perform a "reset halt" then manually set R1 to '3' just before the check.</div><div><br></div><div>In this case the boot code is all over the place with massive gaps between sections, my next step will be to map, dump, and reverse it. I'd probably have done that already, but my power adapter didn't arrive until yesterday.&nbsp;</div><div><br></div><div>Part 4 (Working with spi flash):&nbsp;<a href="http://www.malwaretech.com/2015/05/hard-disk-firmware-hacking-part-4.html">http://www.malwaretech.com/2015/05/hard-disk-firmware-hacking-part-4.html</a></div><div><br></div><div><br></div><div><br></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hard Disk Firmware Hacking (Part 2)]]></title>
<description><![CDATA[Now that everything is ready to be connected, power up the hard drive an run openocd with the following command: openocd -f interface/.cfg -f target/test.cfgtest.cfg should be the configuration for the CPU used by your hard disk controller, for most marvell CPUs this config should work. I'm not s...]]></description>
<link>https://tsecurity.de/de/20557/video/hard-disk-firmware-hacking-part-2/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20557/video/hard-disk-firmware-hacking-part-2/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">Now that everything is ready to be connected, power up the hard drive an run openocd with the following command: openocd -f interface/&lt;your interface here&gt;.cfg -f target/test.cfg<br><br>test.cfg should be the configuration for the CPU used by your hard disk controller, for most marvell CPUs <a href="http://pastebin.com/Rb94dGcq">this config</a> should work. I'm not sure of the adapter_khz, so I've set mine to 100 (as long as this value is lower than the actual it should work).<br><br><div><a href="http://1.bp.blogspot.com/-LaPlnReD1qU/VSu2opfNfpI/AAAAAAAABCY/lmKMO2QpuRo/s1600/OpenOCD.png" imageanchor="1"><img border="0" height="362" src="http://1.bp.blogspot.com/-LaPlnReD1qU/VSu2opfNfpI/AAAAAAAABCY/lmKMO2QpuRo/s1600/OpenOCD.png" width="640"></a></div><br>If all went well, you should see something along the lines of the above. Now you can use telnet to connect to port 4444 and issue commands.<br><br><div><a href="http://2.bp.blogspot.com/--SmjKvyASlQ/VSu4usvuy1I/AAAAAAAABCo/OoomVlQIST8/s1600/Telnet.png" imageanchor="1"><img border="0" height="364" src="http://2.bp.blogspot.com/--SmjKvyASlQ/VSu4usvuy1I/AAAAAAAABCo/OoomVlQIST8/s1600/Telnet.png" width="640"></a></div><br>The Marvell chips used in hard disk controller aren't publicly documented; so if you want to know information such as their memory map, you'll have to sign a NDA and probably pay some money. Instead, what I'm going to do is try to figure out as much as I can from the firmware and possibly by probing the circuit.<br><br>Getting the firmware isn't easy when you can't de-solder and dump the flash, so we'll have to work through the boot process. Most ARM CPUs begin executing at address 0xFFFF0000, this is known as the reset vector. If we dump 65536 bytes from this address, we'll find the bootstrap code which will be a good starting point.<br><br>In order o dump memory, we first need to halt the CPU, which can be done with the command "reset halt" (It's required that we first reset the system as we can't halt past a certain stage). If the reset command doesn't work for any reason e.g: RST pin of JTAG isn't connected to anything, you'll need to disconnect and reconnect the hard drive's power source then quickly tap into the JTAG and issue the halt command within a few second. Memory dumped with the command "dump_image &lt;file name&gt; &lt;address&gt; &lt;size&gt;".<br><br><div><a href="http://1.bp.blogspot.com/-U2NB2b6iLm4/VSvaAyw4lJI/AAAAAAAABDQ/FlffCoLjxyg/s1600/Bootstrap.png" imageanchor="1"><img border="0" height="640" src="http://1.bp.blogspot.com/-U2NB2b6iLm4/VSvaAyw4lJI/AAAAAAAABDQ/FlffCoLjxyg/s1600/Bootstrap.png" width="576"></a></div><br><br>When we disassemble the dumped image, it's some fairly small (4 kb) ARM bootstrap code, which should lead us to the rest of the firmware. I've not had much time to look, so I'll reverse the bootstrap code and post the next part when I've found the rest of the bootloader and kernel.<br><br>Part 3 (Bootstrap analysis):&nbsp;<a href="http://www.malwaretech.com/2015/04/hard-disk-firmware-hacking-part-3.html">http://www.malwaretech.com/2015/04/hard-disk-firmware-hacking-part-3.html</a></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hard Disk Firmware Hacking (Part 1)]]></title>
<description><![CDATA[I've not been doing much in the windows malware world for a while now, because quite frankly I've run out of ideas and I'm totally bored. Recently I decided to take the jump into electronics / hardware hacking and people have suggested I post some of that here.A couple of years ago I started look...]]></description>
<link>https://tsecurity.de/de/20558/video/hard-disk-firmware-hacking-part-1/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20558/video/hard-disk-firmware-hacking-part-1/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">I've not been doing much in the windows malware world for a while now, because quite frankly I've run out of ideas and I'm totally bored. Recently I decided to take the jump into electronics / hardware hacking and people have suggested I post some of that here.<br><br>A couple of years ago I started looking into BIOS rootkits (back before (U)EFI was mainstream). I was aware that most hardware had a BIOS type setup that is usually initialized during the POST phase of the boot process, so I was looking into the possibility of modifying &nbsp;firmware to work in the same way as a BIOS rootkit would. My two main candidates were the GPU and Hard Disk, which I began looking into (but was mostly sandbagged by my lack of reverse engineering knowledge at the time).<br><br>My current project is on hold while I await the arrival of some expensive hardware which will allow me to overcome a setback (the manufacture disabled the JTAG interface prior to shipping), so I decided to have a play with something I saw on spritesmods in 2013 (<a href="https://spritesmods.com/?art=hddhack">Hard disk hacking</a>).<br><br><h2>Hard Disk Hacking</h2><div>I found an old Western Digital hard drive in pretty good condition, so I unscrewed the controller and had a look.</div><div><br></div><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://2.bp.blogspot.com/-dzR0lJk-giQ/VSudN6bYhAI/AAAAAAAABBE/e1pn9MdYCa4/s1600/HDD_Controller.png" imageanchor="1"><img border="0" height="428" src="http://2.bp.blogspot.com/-dzR0lJk-giQ/VSudN6bYhAI/AAAAAAAABBE/e1pn9MdYCa4/s1600/HDD_Controller.png" width="640"></a></td></tr><tr><td>This is where I'd put my flash...if i had any.</td></tr></tbody></table><div><br></div><div>The guy on spritesmods had dumped the firmware by de-soldering the flash chip and dumping it manually, the only problem is the red circle is were the flash chip should be (thanks obama).&nbsp;</div><div><br>Above the red circle is a Marvell 88i8846-TFJ2 ARM processor which has internal flash. I don't fancy my chances of de-soldering the entire CPU and trying to access the memory manually, so I decided to go for the JTAG method.</div><div><br></div><div><a href="http://1.bp.blogspot.com/-MGVDOTF1i3w/VSuf-U_X53I/AAAAAAAABBQ/mWXDn20d6Bc/s1600/JTAG_Pins.png" imageanchor="1"><img border="0" height="621" src="http://1.bp.blogspot.com/-MGVDOTF1i3w/VSuf-U_X53I/AAAAAAAABBQ/mWXDn20d6Bc/s1600/JTAG_Pins.png" width="640"></a></div><div><br></div>The header for the JTAG is fairly well known, though it can be upside down (in my case the first pin of the header is denoted by a '1' on the board). Pins 6 to 11 are all we need for the JTAG and the metal circle, which is the ground.<br><br>As you can probably see, I've decided not to solder the pins. This is for two reasons: They're rusty and they're too close together, so I could easily short the board. Instead I opted to use the test pads, which can be found using the 'continuity' mode on the multimeter (thanks to @<a href="https://twitter.com/McGrewSecurity">McGrewSecurity</a> for the tip).<br><br><div><a href="http://1.bp.blogspot.com/-kV58jqhN-ag/VSujUwOxFSI/AAAAAAAABBc/RWckRLsyb9c/s1600/Multimeter_Continuity.png" imageanchor="1"><img border="0" height="480" src="http://1.bp.blogspot.com/-kV58jqhN-ag/VSujUwOxFSI/AAAAAAAABBc/RWckRLsyb9c/s1600/Multimeter_Continuity.png" width="640"></a></div><br>By setting this mode on the multimeter it will show us the resistance between two points, the '1' means total resistance (the points likely aren't even connected) and '0.01' is a good connection. The meter will also emit and audible (and incredibly annoying) high pitch tone when the resistance is low, so we only really need to use the tone to tell if two points are connected.<br><br>With the hard drive disconnected simply put one of the multimeter probes on the header pin you want to locate the test pad for, then move the other probe around the test pads in the area where mine are until you hear a beep. On my board you'll see there are visible data lines running from the header pins to the test pads, which gives you a good idea where to look (depending on the quality of your eyesight).<br><br><div>I didn't want the hard drive plugged into my computers power supply in case something went wrong, and my computer is the opposite side of the room, so I didn't want to try and build a 10m long SATA cable either. Here's my solution (disclaimer: If you injure yourself blame someone else i.e. not me).&nbsp;</div><div><br></div><div><a href="http://2.bp.blogspot.com/-gWIv43MlWL8/VSumonMYl3I/AAAAAAAABBo/nJJDCrVC2cI/s1600/PSU_Shorted.png" imageanchor="1"><img border="0" height="466" src="http://2.bp.blogspot.com/-gWIv43MlWL8/VSumonMYl3I/AAAAAAAABBo/nJJDCrVC2cI/s1600/PSU_Shorted.png" width="640"></a></div><div><br></div><br>If you have a spare PSU lying around, you can short the third and forth pin of the ATX header to turn it on without connecting it to a motherboard. My PSU was very old and missing a fan, so I was pleasantly surprised when nothing shorted or caught fire (My entire house is on the same circuit breaker, so I'd be spend the next hour rebooting various devices).<br><br><div><a href="http://3.bp.blogspot.com/-uL2S05hTifU/VSuopuew0XI/AAAAAAAABB0/Vo62WgYiQoE/s1600/IDE_SATA.png" imageanchor="1"><img border="0" height="200" src="http://3.bp.blogspot.com/-uL2S05hTifU/VSuopuew0XI/AAAAAAAABB0/Vo62WgYiQoE/s1600/IDE_SATA.png" width="200"></a></div><a href="http://4.bp.blogspot.com/-22bkCWoNHNk/VSupjTm7vpI/AAAAAAAABB8/IwaoIjF-OjY/s1600/TUMPA.png" imageanchor="1"><img border="0" height="153" src="http://4.bp.blogspot.com/-22bkCWoNHNk/VSupjTm7vpI/AAAAAAAABB8/IwaoIjF-OjY/s1600/TUMPA.png" width="200"></a><br><br><br><br><br><br><br><br><br><br><br>I use a $5 SATA to USB connector, which is perfect for the data side of the hard disk connection. The red board on the right is a $30 TIAO USB Multi-Protocol Adapter, which is FT2232H based and also does SPI as well as JTAG.<br><br><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://4.bp.blogspot.com/-lS6ScJ9a6Aw/VSuqeQk-g1I/AAAAAAAABCI/x5aH3yF0w5Q/s1600/Full_Setup.png" imageanchor="1"><img border="0" height="460" src="http://4.bp.blogspot.com/-lS6ScJ9a6Aw/VSuqeQk-g1I/AAAAAAAABCI/x5aH3yF0w5Q/s1600/Full_Setup.png" width="640"></a></td></tr><tr><td>I really need a bigger desk</td></tr></tbody></table><br>Here we have a stupidly over-complicated setup due to the fact my Windows desktop reside on the other side of the room: The iMac is running a Linux virtual machine for the JTAG software (FTDI driver and OpenOCD) because they're a pain to install on Windows or OSX . The Windows system (left monitor) is running IDA for reversing/debugging (I plan on trying to connect IDA to the OpenOCD GDB service over my local network when I start doing live analysis).<br><br><br>Part 2 (Dumping the bootstrap):&nbsp;<a href="http://www.malwaretech.com/2015/04/hard-disk-firmware-hacking-part-2.html">http://www.malwaretech.com/2015/04/hard-disk-firmware-hacking-part-2.html</a><br><br><br><br><br></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Bootkit Disk Forensics - Part 2]]></title>
<description><![CDATA[DriverStartIoAs I explained in the previous article: DriverStartIo is used by older miniports to actually perform the disk I/O, it takes 2 parameters (a device object and an IRP), exactly the same as IoCallDriver does. The call to DriverStartIo is done with IoStartPacket; however, the device obje...]]></description>
<link>https://tsecurity.de/de/20559/video/bootkit-disk-forensics-part-2/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20559/video/bootkit-disk-forensics-part-2/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on"><h2>DriverStartIo</h2><div>As I explained in the previous article: DriverStartIo is used by older miniports to actually perform the disk I/O, it takes 2 parameters (a device object and an IRP), exactly the same as IoCallDriver does. The call to DriverStartIo is done with IoStartPacket; however, the device object passed is not that of the miniport, but instead a device associated with the port the target disk is connected to (in my case IdePort1).</div><div><br></div><div>IRP_MJ_SCSI points to IdePortDispatch in atapi.sys, by disassembling it we can see exactly how the required device object is retrieved from the DeviceExtension field of the miniport's device object.</div><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://2.bp.blogspot.com/-elDVj88Qutg/VPYq4a4bOBI/AAAAAAAAA9w/yJafDuu8cm4/s1600/AtaPortDispatch.png" imageanchor="1"><img border="0" src="http://2.bp.blogspot.com/-elDVj88Qutg/VPYq4a4bOBI/AAAAAAAAA9w/yJafDuu8cm4/s1600/AtaPortDispatch.png"></a></td></tr><tr><td>To start with, ebx is the address of the device extension (which is shared between all atapi devices).</td></tr></tbody></table><div><br>The call logic is something like this:<br><ol><li>Get the miniport's device extension from its device object (passed to us in the call).</li><li>Get IdePort1's device extension from offset 0x5C into the miniport's device extension.</li><li>Get IdePort1's device object from offset 0x0C into its device extension.</li><li>Call IoStartPacket with the IRP and IdePort1's device object.</li></ol><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://2.bp.blogspot.com/-oYTqA-I34z8/VPYvawAjrSI/AAAAAAAAA98/lZ5zvpIIK70/s1600/ObjectRelationship.png" imageanchor="1"><img border="0" src="http://2.bp.blogspot.com/-oYTqA-I34z8/VPYvawAjrSI/AAAAAAAAA98/lZ5zvpIIK70/s1600/ObjectRelationship.png" height="264" width="640"></a></td></tr><tr><td>The relationship between the various objects.</td></tr></tbody></table><div><br></div></div><div>As both the miniport and IdePort devices are created by atapi.sys, the DriverObject field of both devices' objects point to the same driver object; thus, hooking DriverStartIo is as simple as replacing the address in the driver's object. &nbsp;</div><div><br></div><h2>Detecting DriverStartIo hook with WinDbg</h2><div>For basic DriverStartIo hook detection we can simply follow the same process as for major function hooks: First, we find the boot disk and list it's stack.</div><table cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://1.bp.blogspot.com/-uWz6wwzeQcs/VPc1WMMJ2yI/AAAAAAAAA-Q/znycrY-NXo0/s1600/DeviceStackClean.png" imageanchor="1"><img border="0" src="http://1.bp.blogspot.com/-uWz6wwzeQcs/VPc1WMMJ2yI/AAAAAAAAA-Q/znycrY-NXo0/s1600/DeviceStackClean.png"></a></td></tr><tr><td>Device stack for boot device on a clean system</td></tr></tbody></table><table cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://3.bp.blogspot.com/-4b0oScbtnkU/VPc2U2lV-YI/AAAAAAAAA-k/H_sW59jnvHM/s1600/DeviceStackTdl4.png" imageanchor="1"><img border="0" src="http://3.bp.blogspot.com/-4b0oScbtnkU/VPc2U2lV-YI/AAAAAAAAA-k/H_sW59jnvHM/s1600/DeviceStackTdl4.png"></a></td></tr><tr><td>Device stack on a TDL4 infected system.</td></tr></tbody></table><div><br></div><div>As I explained in the previous article, modifications made by TDL4 will cause the !drvobj and !devobj commands to think the object is invalid, it's not. You will probably want to check each driver object in the stack (for the invalid DeviceObject you can again use "dt _DEVICE_OBJECT &lt;address&gt;" to find the DriverObject field).</div><div><br></div><div>With most bootkits, the lowest level driver is always the one hooked, so I'll use this in my example.</div><div></div><table cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://3.bp.blogspot.com/-ilPyqIt7MZQ/VPdfyW1oziI/AAAAAAAAA_o/F7O03d_kFCI/s1600/DriverObject.png" imageanchor="1"><img border="0" src="http://3.bp.blogspot.com/-ilPyqIt7MZQ/VPdfyW1oziI/AAAAAAAAA_o/F7O03d_kFCI/s1600/DriverObject.png"></a></td></tr><tr><td>DriverStartIo appears not to be hooked.</td></tr></tbody></table><div><br></div><div>You can see here that DriverStartIo isn't hooked because the address resolve to its proper symbol; however, this isn't actually the real driver object. Earlier i explained that IoStartPacket is always called with the device object of IdePort1, not the disk miniport: This means that when IoStartPacket called DriverStartIo internally, it does so by getting the driver object from the DriverObject field of IdePort1's device object, then getting the DriverStartIo field from that. Obviously this means that to hook DriverStartIo, one could simply just create a copy of atapi's driver object, with the DriverStartIo field modified, then set the DriverObject field of IdePort1's device object to point to the new, malicious driver object (this way on IdePort1 will point to the hooked driver, the rest will point to the original).</div><div><br></div><div>As it happens TDL4 actually does the opposite, it hooks the real atapi driver object, then replaces the DriverObject field of the disk miniport's device object with the address of an identical driver object, without the DriverStartIo field modified.).</div><div><br></div><div>If you know what you're looking for, fake driver objects are easy to detect. All devices created by a driver should point the same driver object, so simply enumerating the devices created by the miniport's driver then making sure all the DriverObject fields point to the same address is all that's needed. This can be done a multitude of ways.</div><div><br></div><div><b>Method 1: DrvObj</b></div><div>The fake driver object will have the same name as the real one (in my case "\driver\atapi"), all you need to do is type "!drvobj \driver\atapi 2" to get the real driver's object (this is a downside of TDL4 hooking the real driver object instead of a spoofed one).&nbsp;</div><div><br></div><div><a href="http://2.bp.blogspot.com/-b1tuHs4XXag/VPdOQQQpL0I/AAAAAAAAA_A/gLJKb2vPDyg/s1600/DriverObjectReal.png" imageanchor="1"><img border="0" src="http://2.bp.blogspot.com/-b1tuHs4XXag/VPdOQQQpL0I/AAAAAAAAA_A/gLJKb2vPDyg/s1600/DriverObjectReal.png"></a></div><div><b>Method 2: NextDevice</b></div><div>Starting with the miniport device, enumerate devices using "dt _DEVICE_OBJECT &lt;address&gt;" and the NextDevice field of each device's object. We're looking for any DriverObject field that dosen't match that of the miniport (this is the real driver object).</div><div></div><table cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://1.bp.blogspot.com/-3jsvAjEKgvQ/VPdjDVVMslI/AAAAAAAAA_0/ApLFlSh-7Vg/s1600/NextDevice.png" imageanchor="1"><img border="0" src="http://1.bp.blogspot.com/-3jsvAjEKgvQ/VPdjDVVMslI/AAAAAAAAA_0/ApLFlSh-7Vg/s1600/NextDevice.png"></a></td></tr><tr><td>All devices should point to the real driver object, except for the miniport.</td></tr></tbody></table><div><b><br>Method 3: DeviceExtension</b></div><div>This is the least reliable way, as the device extension could change from system to system, but as I mentioned earlier: you can find IdePort1's device extension at offset 0x5C isn't the miniport's device extension, then from IdePort1's device extension you can find its device object at offset 0x0C (IdePort1's device object will point to the real driver object). We can actually find the DeviceObject in a single commands using this overly complicated WinDbg-C++ syntax: "dt _DEVICE_OBJECT poi(poi(@@C++(((nt!_DEVICE_OBJECT *)&lt;address&gt;)-&gt;DeviceExtension)+0x5C)+0x0C)", where "&lt;address&gt;" is the miniport device object.</div><div><br></div><div><a href="http://4.bp.blogspot.com/-Rgl2wuQPZxc/VPdVvyB6beI/AAAAAAAAA_Y/8LlcAw2Nx7A/s1600/DeviceExtension.png" imageanchor="1"><img border="0" src="http://4.bp.blogspot.com/-Rgl2wuQPZxc/VPdVvyB6beI/AAAAAAAAA_Y/8LlcAw2Nx7A/s1600/DeviceExtension.png"></a></div><h2>Part3</h2><div><a href="http://www.malwaretech.com/2015/03/bootkit-disk-forensics-part-3.html">http://www.malwaretech.com/2015/03/bootkit-disk-forensics-part-3.html</a></div><div><br></div><div><br></div><div></div><div><br></div><div><br></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Intercepting all System Calls by Hooking KiFastSystemCall]]></title>
<description><![CDATA[Usually I don't post things like this, but because KiFastSystemCall hooking only works on x86 systems and doesn't work on Windows 8 or above, it no longer has much use in malware. There are also multiple public implementations for this method, just not very elegant, which I hope to correct.If you...]]></description>
<link>https://tsecurity.de/de/20560/video/intercepting-all-system-calls-by-hooking-kifastsystemcall/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20560/video/intercepting-all-system-calls-by-hooking-kifastsystemcall/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">Usually I don't post things like this, but because KiFastSystemCall hooking only works on x86 systems and doesn't work on Windows 8 or above, it no longer has much use in malware. There are also multiple public implementations for this method, just not very elegant, which I hope to correct.<br><br>If you haven't read my previous article about this topic, or need a refresher, you can find it <a href="http://www.malwaretech.com/2014/06/usermode-system-call-hooking-betabot.html">here</a>.<br><br><h2>Performing a System Call</h2><div>KiFastSystemCall has a very strange calling convention (if you can call it that). Each native function (Ex: NtCreateFile) corresponds to a function with the same name in the SSDT. In order to make the transition from user mode to kernel mode, the instruction "sysenter" is used.</div><div><br></div><div><a href="http://3.bp.blogspot.com/-mFGfdRzXA3A/U58ZBxRKf7I/AAAAAAAAAf0/mstM2HJclRg/s1600/system+call+path+32-bit.png" imageanchor="1"><img border="0" src="http://3.bp.blogspot.com/-mFGfdRzXA3A/U58ZBxRKf7I/AAAAAAAAAf0/mstM2HJclRg/s1600/system+call+path+32-bit.png" height="190" width="640"></a></div><div><br></div><div><br></div><div>I don't want to go into great detail on how the sysenter instruction actually enters kernel mode, as that would take up the entire page, but I'll explain the basics:</div><div><ul><li>The SSDT is an array of addresses for each native function.</li><li>The number you see being moved into the eax register is known as its ordinal, and is the position within the SSDT where that functions address is located.&nbsp;</li><li>When the sysenter instruction is executed the kernel reads the ordinal from eax and uses it to call the corresponding function in the SSDT, before returning execution to usemode.</li></ul><div>Something important to note is that the native function simply calls KiFastSystemCall and doesn't even set up a stack frame, meaning the address of the first parameter can only be accessed using [esp+8], so we can't just hook KiFastSystemCall with a C function, as this matches no standard calling convention (which is what makes the method so tricky to implement).<br><br><h2>Dispatching Calls</h2></div></div><div>Since the last article I've improved on the dispatching method, which now has two purposes:&nbsp;</div><div><ol><li>Determining which native function made the call to KiFastSystemCall, so we can properly handle it.</li><li>Setting up the stack in such a way that we can access the parameters using plain C.</li></ol><div><br></div><div><b>Dispatching</b></div><div>Normally we'd hook each individual function we want to intercept with a single handler (proxy), but all native functions call KiFastSystemCall, so we need to think differently.&nbsp;</div><div>As I explained earlier, the SSDT is an array of addresses and the ordinal (which is in eax when KiFastSystemCall is invoked), corresponds to the position of that function's address within the SSDT. Using this knowledge we can do the same: We create an array of addresses for the the proxy functions and use the ordinal to locate the correct handler using the ordinal in eax. For our SSDT each entry will be 8 bytes, so the handler needs to be placed at our_ssdt[2*ordinal] (in order to get the ordinal for a native function we just read 4 bytes starting at the 2nd byte of the function).&nbsp;</div></div><div><br></div><div>You're probably wondering why each entry for our SSDT is 8 bytes, instead of 4; this is because in order to set up the stack before calling the proxy, we need to know how many parameters were passed to KiFastSystemCall (we store the proxy address as the first 4 bytes and the number of parameter as the rest).</div><div><br></div><div><b>Preparing the Stack</b></div><div>When KiFastSystemCall is invoked, there are two return addresses between the stack pointer and the function parameters (the return from KiFastSystemCall to the native function and the return from the native function). In order to call the proxy function we will get the number of parameter for the function from our_ssdt[2*ordinal+4] and push them to the stack again, in stdcall format (the proxy function is responsible for removing them from the stack). The last thing that is pushed to the stack before we call the proxy is the eax register (the ordinal), we will need this later if we wish to call the original, non hooked, version of KiFastSystemCall.</div><div><br></div><h2>The Code</h2><div><a href="https://github.com/MalwareTech/FstHook">FstHook</a> - This is my own C&nbsp;library which allows a program to easily hook any number of native function using a single hook on KiFastSystemCall.</div><div><br></div><div>Everything is pretty well commented and self explanatory, but if you have any questions feel free to email me on admin@malwaretech.com.</div><div><br></div><div><br></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Bootkit Disk Forensics - Part 1]]></title>
<description><![CDATA[Recently I got the idea to play around with bypassing bootkit disk filters from an email i received, which highlighted that my MBR spoofing code was able to get underneath the driver of a popular forensics tool, preventing it from reading the real disk sectors. Although I believe disk forensics s...]]></description>
<link>https://tsecurity.de/de/20563/video/bootkit-disk-forensics-part-1/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20563/video/bootkit-disk-forensics-part-1/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on"><div dir="ltr" trbidi="on">Recently I got the idea to play around with bypassing bootkit disk filters from an email i received, which highlighted that my MBR spoofing code was able to get underneath the driver of a popular forensics tool, preventing it from reading the real disk sectors. Although I believe disk forensics should not be done on a live system, instead the disk should be mounted on a clean system and examined from there, I thought it would be fun to write a tool for bypassing various bootkit drivers and then post my research. Another email I received requested that I show how one would detect the presence of such filters from WinDbg, So I will try to cover both.<br><br><h2>Disk Filtering - Old and New Driver Module</h2><div>As I've shown in a <a href="http://www.malwaretech.com/2015/01/using-kernel-rootkits-to-conceal.html">previous article</a>, disk filtering is usually done by hooking the IRP_MJ_SCSI field of the miniport driver's object. Another common method is hooking DriverStartIo; however, this field is only used in the old-style driver model and is set to NULL on most Vista+ systems. The drivers used depend on whether you use SCSI or ATA based hardware, but because all drivers follow the same model, I will simply use an ATA system in my examples.</div><div><br></div><div><b>Old Driver Model</b></div><div>Pre-Vista disk drivers would have a single ATA&nbsp;channel driver known as atapi.sys, which would provide the functionality of both a port and&nbsp;miniport. If a disk required a custom miniport, the vendor would have to write their own miniport&nbsp;+ port driver, which is no small task.<br><br>When a device receives a request such as IRP_MJ_SCSI, it queues it to the disk via IoStartPacket, which eventually calls the address held by the DriverStartIo field of the driver's object; thus hooking DriverStartIo would intercept any disk I/O requests, not just IRP_MJ_SCSI.</div><div><a href="http://2.bp.blogspot.com/-7KShyZmMDXE/VO5GkhQc3CI/AAAAAAAAA7M/rBJ3XJXqiBk/s1600/AtapiOld.png" imageanchor="1"><img border="0" src="http://2.bp.blogspot.com/-7KShyZmMDXE/VO5GkhQc3CI/AAAAAAAAA7M/rBJ3XJXqiBk/s1600/AtapiOld.png" height="342" width="640"></a></div><div><br></div><div><b>New Driver Model</b></div><div>The new driver model provides a Microsoft supplied port driver (ataport.sys) and miniport driver (atapi.sys), which work together to make up the channel interface. The port driver provides basic functionality, whilst the miniport provides hardware specific functionality; so, if a vendor needs a custom miniport driver, they could simply write their own miniport to interface with the Microsoft supplied port driver.</div><div><br></div><div>With the new model the IRP_MJ_SCSI field of atapi's driver object points to a &nbsp;function within ataport.sys (IdePortDispatch), which handles and queues requests using an internal mechanism instead of IoStartPacket, meaning bootkits hooking only IRP_MJ_SCSI and DriverStartIo can be bypassed using passthrough operations (even from usermode).</div><div><a href="http://2.bp.blogspot.com/-IVXrruf6I0E/VO5LMzynqtI/AAAAAAAAA7Y/XRCGOGaHGtw/s1600/AtapiNew.png" imageanchor="1"><img border="0" src="http://2.bp.blogspot.com/-IVXrruf6I0E/VO5LMzynqtI/AAAAAAAAA7Y/XRCGOGaHGtw/s1600/AtapiNew.png" height="540" width="640"></a></div><h2>TDL Warning</h2><div>Although TDL is no longer active, I should mention that it hijacks kdcom.dll (the COM debugger extension) in such a way that it prevents it from starting. If you attempt to enable kernel debugging via COM on a TDL infected system, it will be completely bricked following reboot (even safemode won't load).</div><div><br></div><h2>Detecting Major Function Hooks with WinDbg</h2><div>First things first you need to find which disk is your boot disk (it's up you you how you do this), but in most cases it will be \Device\Harddisk0\DR0. Once you've made sure WinDbg has the correct symbols loaded, use !devstack to display the device stack and find the bottom most device (the miniport).</div><div><br></div><div>Here is a normal output:<br><div><a href="http://4.bp.blogspot.com/--oJ-JSYIKHA/VO5PLvnLvmI/AAAAAAAAA7k/iYAaZ99v8F8/s1600/DeviceStackClean.png" imageanchor="1"><img border="0" src="http://4.bp.blogspot.com/--oJ-JSYIKHA/VO5PLvnLvmI/AAAAAAAAA7k/iYAaZ99v8F8/s1600/DeviceStackClean.png"></a></div><div><br></div></div><div><br></div><div><br></div><div><br></div><div>In the case of some TDL4 infections, the miniport driver object (\driver\atapi) will appear to be invalid (it's not), but it prevents the !devobj and !drvobj commands from working, so we'll have to get the driver object associated with the miniport by using dt _DEVICE_OBJECT on the lowest device's object.<br><br></div><div></div><div></div><div></div><div><a href="http://2.bp.blogspot.com/-ef2rvbrdRxM/VO5SZRWibDI/AAAAAAAAA8A/RQrlvHoyTN0/s1600/DeviceObject.png" imageanchor="1"><img border="0" src="http://2.bp.blogspot.com/-ef2rvbrdRxM/VO5SZRWibDI/AAAAAAAAA8A/RQrlvHoyTN0/s1600/DeviceObject.png"></a></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><br><div></div><br><br><br><br><br><br><br><br>Now we can examine the driver object (specifically the dispatch table) for major function pointer hooks. On a clean system all the dispatch routines should have addresses which resolve to symbols in either the miniport, port or ntoskrnl. On TDL4 infected systems the !drvobj command won't work, so you'll have to use dds (iv'e shown how to use both below).<br><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://1.bp.blogspot.com/-tqcFGTpeTtE/VO5WE1Ez57I/AAAAAAAAA8M/3d4xlRv1fdw/s1600/DriverObject.png" imageanchor="1"><img border="0" src="http://1.bp.blogspot.com/-tqcFGTpeTtE/VO5WE1Ez57I/AAAAAAAAA8M/3d4xlRv1fdw/s1600/DriverObject.png"></a></td></tr><tr><td>Major functions on a clean system shown with !drvobj</td></tr></tbody></table></div><br><div></div><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://2.bp.blogspot.com/-9SOzCD7abpg/VO5b9V_Cu_I/AAAAAAAAA8k/ibevsa7x9zw/s1600/DriverDispatch.png" imageanchor="1"><img border="0" src="http://2.bp.blogspot.com/-9SOzCD7abpg/VO5b9V_Cu_I/AAAAAAAAA8k/ibevsa7x9zw/s1600/DriverDispatch.png"></a></td></tr><tr><td>Major functions on a clean system shown with dds</td></tr></tbody></table><br>On an infected system (TDL4) we will see something similar to the below.<br><table cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://3.bp.blogspot.com/-chTR3A5_ZTk/VO5hU5VeHnI/AAAAAAAAA80/ro7V4cLa96Q/s1600/DriverDispatchInfectedTDL4.png" imageanchor="1"><img border="0" src="http://3.bp.blogspot.com/-chTR3A5_ZTk/VO5hU5VeHnI/AAAAAAAAA80/ro7V4cLa96Q/s1600/DriverDispatchInfectedTDL4.png"></a></td></tr><tr><td>Note: all the dispatch routines point to the same address, which&nbsp;resides in pool memory (not normal).</td></tr></tbody></table><br><br><br><br><br><br><br><br><br><br><table cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://3.bp.blogspot.com/-hlYY-JH4Khs/VO5nnRHksSI/AAAAAAAAA9M/jG1FUqm0REo/s1600/DriverDispatchInfectedRovnixD.png" imageanchor="1"><img border="0" src="http://3.bp.blogspot.com/-hlYY-JH4Khs/VO5nnRHksSI/AAAAAAAAA9M/jG1FUqm0REo/s1600/DriverDispatchInfectedRovnixD.png"></a></td></tr><tr><td>In an attempt to trick av tools, Rovnix redirects the pointers to jumps it wrote to unused space at the end of atapi.sys, hence the addresses don't resolve to a function, only a module.&nbsp;</td></tr></tbody></table><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>If the driver dispatch table appears to be clean, the next thing to do is disassemble the address pointed to by IRP_MJ_SCSI (IRP_MJ_INTERNAL_DEVICE_CONTROL), as this is the dispatch routine which handles disk read/write requests and could be inline hooked. In my case IRP_MJ_SCSI points to ataport!IdePortDispatch.<br><table cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://4.bp.blogspot.com/-JEfTSQ_OY_w/VO5jeC2qdTI/AAAAAAAAA9A/HvsPxwTS5sk/s1600/CleanIdePortDispatch.png" imageanchor="1"><img border="0" src="http://4.bp.blogspot.com/-JEfTSQ_OY_w/VO5jeC2qdTI/AAAAAAAAA9A/HvsPxwTS5sk/s1600/CleanIdePortDispatch.png"></a></td></tr><tr><td>A example of a clean IRP_MJ_SCSI handler</td></tr></tbody></table><br><br><br><br><br><br><br><br><br><br><br><br>It may be difficult to detect inline hooks, especially if existing jump/calls are modified. One should compare the module in memory against its disk image, accounting for relocation and imports (the best way to do this would be to have a driver map the disk image into memory and relocate it to point to the original module, allowing you to simply compare the two).<br><br><h2>Part 2</h2><div><a href="http://www.malwaretech.com/2015/03/bootkit-disk-forensics-part-2.html">http://www.malwaretech.com/2015/03/bootkit-disk-forensics-part-2.html</a></div><br></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Exploring Peer to Peer Botnets]]></title>
<description><![CDATA[Peer to Peer and Everything In betweenBack in October I'd gotten bored of the endless stream of cryptolockers and PoS trojan, so decided to look at something old school, that something was Kelihos. Since then, I've come to realize that P2P botnet monitoring brings together two of my favorite area...]]></description>
<link>https://tsecurity.de/de/20540/video/exploring-peer-to-peer-botnets/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20540/video/exploring-peer-to-peer-botnets/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on"><h2>Peer to Peer and Everything In between</h2><div>Back in October I'd gotten bored of the endless stream of cryptolockers and PoS trojan, so decided to look at something old school, that something was Kelihos. Since then, I've come to realize that P2P botnet monitoring brings together two of my favorite areas of security: Reverse Engineering and Programming. As a fun little side project, I decided to begin work on a P2P botnet monitoring system which would show details such as the size of the botnet and geographical distribution of nodes (It's still a work in progress but you can find it <a href="https://intel.malwaretech.com/botnet/za3/">here</a>.).</div><div><br></div><div><a href="http://2.bp.blogspot.com/-o9tjJuWMkU4/VpPBHaSaSSI/AAAAAAAABUE/vhpclrKs3iw/s1600/ZeroAccess3%2BTracker.png" imageanchor="1"><img border="0" height="488" src="http://2.bp.blogspot.com/-o9tjJuWMkU4/VpPBHaSaSSI/AAAAAAAABUE/vhpclrKs3iw/s640/ZeroAccess3%2BTracker.png" width="640"></a></div><div><br></div><h2>How does it work?</h2><div>In a peer to peer botnet, bots which can receive incoming connections act as servers (called supernodes) and those that can't just perform tasks from the botmaster (known as workers). The supernodes connect to other supernodes and pass messages between themselves to keep the network in sync and workers then connect to multiple supernodes to retrieve commands. In order for the workers to keep an up to date list of supernodes, the each supernode respond to a peer request command with a list of IPs for other supernodes it knows about (this list varies in size depends on botnets; for example Kelihos sends 500 IPs whist ZeroAccess2+ only sends 16). Workers will download peer lists from multiple supernodes and store them locally to ensure they can maintain connectivity with the botnet, even with a constantly changing landscape of supernodes.</div><div><br></div><div><b>Mapping Supernodes</b></div><div>First we need the IP of one or more online supernodes, then we can write a program to connect to each supernode and send a peer request, then connect to all the IPs returned, repeating the process recursively. In the case of newer ZeroAccess nodes, the supernodes internally store a large list of supernode IPs, but only return 16 online IPs as a response to each peer request: this means that in a single crawl we will likely only find a small cluster of recently contacted supernodes, not every online node.&nbsp;</div><div><br></div><div>To ensure the entire network is discovered, we should start the crawler off with multiple supernode IPs and store all IPs found into a database, then each time we restart the crawler we seed it with the list of IPs found during the previous crawler; repeating this process for a couple of hours ensure all online nodes are found.</div><div><br></div><div>If you're like me and you're wondering what a botnet map looks like when visualized, then look no further. Here is some data taken from a single crawl of the ZeroAccess 3 botnet and visualized using d3.&nbsp;</div><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://4.bp.blogspot.com/-TUIOxt2TbYI/VpPwoimJFLI/AAAAAAAABUU/j25BxJZm_LY/s1600/ZA3Full.png" imageanchor="1"><img border="0" height="485" src="http://4.bp.blogspot.com/-TUIOxt2TbYI/VpPwoimJFLI/AAAAAAAABUU/j25BxJZm_LY/s640/ZA3Full.png" width="640"></a></td></tr><tr><td>ZeroAccess 3 Full Map (Online and offline supernodes).</td></tr></tbody></table><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://4.bp.blogspot.com/-ciCWeB19UaI/VpQXFv5QCyI/AAAAAAAABU0/pOa9Gx3DzuY/s1600/ZA3Full2.png" imageanchor="1"><img border="0" height="464" src="http://4.bp.blogspot.com/-ciCWeB19UaI/VpQXFv5QCyI/AAAAAAAABU0/pOa9Gx3DzuY/s640/ZA3Full2.png" width="640"></a></td></tr><tr><td>ZeroAccess 3 Full Map (Same as above but with more link elasticity).</td></tr></tbody></table><div><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://4.bp.blogspot.com/-Ssws2rO1Zbc/VpQXMhmn3GI/AAAAAAAABU8/88JBm2aoFJA/s1600/ZA3OnlineOnly.png" imageanchor="1"><img border="0" height="530" src="http://4.bp.blogspot.com/-Ssws2rO1Zbc/VpQXMhmn3GI/AAAAAAAABU8/88JBm2aoFJA/s640/ZA3OnlineOnly.png" width="640"></a></td></tr><tr><td><span>ZeroAccess 3 (Online supernodes only).</span></td></tr></tbody></table><b><br></b><b>Mapping Workers</b></div><div>This is a little bit more tricky as worker IPs are not exposed to the botnet in any way; however, they do still need to connect to multiple supernodes to retrieve peer lists and commands. In order to map all workers, we'd need to set up multiple supernodes across the botnet which log incoming connections (obviously every worker doesn't connect to every supernode at the same time, so it's important that our supernodes have a stronger presence in the botnet).</div><div><br></div><div>Depending on the botnet bots use various different methods to decide which nodes to contact, this could be: age, online time, latency, or trust. In the case of ZeroAccess 2, it's age. ZA2 workers keep an internal list of supernode IP addresses which they connect to in order from newest to oldest; so, in order to gain a well established presence on the botnet it would be best to have a server with multiple IPs and add new ones frequent, making sure to notify as many other supernodes as possible of our new IP addresses (we can use the comprehensive list of supernode IPs obtained from the crawler for that!).</div><div><br></div><h2>What's the purpose?</h2><div>In my case the botnet tracker has no real purpose other than being a fun project, but in the threat intelligence world it could provide valuable intelligence. If we know the IP addresses of all the workers on the botnet, we can proactively work against any malicious actions they might take: for instance, if the botnet was a spam botnet, we could have have all the IP addresses flagged for spam before they even send a single email. We could also use the data to automatically notify businesses if IPs in their address space show up on the botnet, allowing them to be deal with breaches before they cause any harm.&nbsp;</div><div><br></div><h2>Conclusion</h2><div>This post is just a small insight into my current project and as it progresses I will likely post more data and data visualizations. If you've got any suggestions, leave a comment or DM me on twitter (<a href="https://www.twitter.com/MalwareTechBlog/">@MalwareTechBlog</a>).<br><br>If you're interested to read more about ZeroAccess3, check out this collaboration I did with the guys at Kryptos Logic: <a href="http://kryptoslogic.blogspot.co.uk/2016/01/zeroaccess-3-analysis.html">ZeroAccess 3 Analysis</a>.</div><div><br></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Regarding Kelihos Research]]></title>
<description><![CDATA[I had planned to continue posting a series of articles detailing my findings from looking into the Kelihos botnet (namely the peer-to-peer protocol). Although my intentions were only to crawl the botnet and try to gauge its size (out of personal interest), I've been made aware that the informatio...]]></description>
<link>https://tsecurity.de/de/20542/video/regarding-kelihos-research/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20542/video/regarding-kelihos-research/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on"><br>I had planned to continue posting a series of articles detailing my findings from looking into the Kelihos botnet (namely the peer-to-peer protocol). Although my intentions were only to crawl the botnet and try to gauge its size (out of personal interest), I've been made aware that the information posted in my previous article may have been used by others to perform attacks, resulting in some changed being made to the protocol. Personally I'd be happy to keep reversing the bot and play protocol whack-a-mole, though I understand that there's probably a lot of people out there who are going to be upset if the protocol is repeatedly changed as a result of my articles. I did consider taking a different path with the article and documenting the malware side of Kelihos, like I usually do, but the code is rather software like and doesn't contain anything interesting such as any form of stealth or defense against removal.<br><br>If you have any suggestions for what I should write about instead, please email me on admin@malwaretech.com.<br><br><br></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hidden VNC for Beginners]]></title>
<description><![CDATA[Hidden VNC is a creative solution to a solution to a problem which stemmed from banking fraud. Back years ago when fraud was uncommon, most banks only had basic IP or Geo-location checks to flag or block accounts if someone logged in from another computer. To combat this, banking trojans would ru...]]></description>
<link>https://tsecurity.de/de/20544/video/hidden-vnc-for-beginners/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20544/video/hidden-vnc-for-beginners/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on"><div>Hidden VNC is a creative solution to a solution to a problem which stemmed from banking fraud. Back years ago when fraud was uncommon, most banks only had basic IP or Geo-location checks to flag or block accounts if someone logged in from another computer. To combat this, banking trojans would run a SOCKS proxy server on the victims computer, allowing the fraudster to access the victims bank account with the same IP. As fraud became more prominent, banks started coming up with proprietary fraud detection systems which fingerprint the user's systems using a variety of check (Browser, OS/Plugin versions, locale, timezone, etc). The blackbox nature of these systems would require a fraudster to pretty much replicate the victim's system configuration in order to be sure the account wouldn't get blocked, so a more convenient method of fraud had to be found, that method was of course VNC. Fraudsters could VNC into a victims computer and use it to log into their bank account, but obviously this wasn't ideal. If the victim was using the computer, they'd see what the fraudster was doing, and if they weren't, the computer would probably be turned off. What was needed was some kind of VNC software that allowed fraudsters to access the system discretely, at the same time as the victim was using it.&nbsp;</div><div><br></div><h2>Hidden VNC</h2><div><b>Hidden Desktop</b></div><div>Malware can make use of some little known Windows features such as CreateDesktop and cross-process window subclassing to implement an invisible environment for VNC to run. As most linux users will probably be familiar with, a lot of distros have the ability to run multiple simultaneous desktops with independent taskbars. Windows has had this ability to crate multiple desktops since 2000, but it's not a well known feature and there is no default application to make use of it. By calling CreateDesktop, software can create a hidden desktop and execute applications in the desktop's context. All applications running on the hidden desktop will be invisible to the other desktops (i.e. the one the victim is using), they will not even show in the taskbar outside of the hidden desktop. Sounds simple enough, right?</div><div><br></div><div><b>Screenshots</b></div><div>Most VNC software works by taking periodic screenshots and sending them back to the client; however, Windows does not render any GUI elements to desktops which are not active (currently displayed on the monitor). One can't simply just capture screenshots of the hidden desktop, instead the VNC server would have to call EnumDesktopWindows to get a list of windows running on the hidden desktop, then call PrintWindow on each individual window, writing them to a bitmap in reverse Z-Order (starting with the bottom-most window and working its way to the top-most). Essentially the server is just emulating the screenshot feature by rendering each individual window to a bitmap in reverse of the order they appear on the screen.</div><div><br></div><div>Unfortunately, some applications don't properly handle WM_PRINT or WM_PRINTCLIENT messages (sent by PrintWindow), and as a result all or parts of the application will display as a white rectangle, as shown below.</div><div><br></div><div><a href="http://3.bp.blogspot.com/-qicSAMUhjWc/VfVWae-A5jI/AAAAAAAABMU/ot75M3Wo8Dc/s1600/Screenshot.png" imageanchor="1"><img border="0" height="360" src="http://3.bp.blogspot.com/-qicSAMUhjWc/VfVWae-A5jI/AAAAAAAABMU/ot75M3Wo8Dc/s640/Screenshot.png" width="640"></a></div><div><br></div><div>To resolve this, the VNC server would need to implement WM_PRINT and WM_PRINTCLIENT message on behalf of the application, making sure it paints all visible elements to the buffer. This can be done by either injecting code into all processes and hooking various functions in user32.dll, or by using cross-process subclassing to give the VNC server the ability to process window messages destined for the target application from within the VNC process.</div><div><br></div><div><b>User Input</b></div><div>When it comes to user input, the server has to emulate a virtual keyboard / mouse as input would be sent to the active desktop, not the hidden one. Normally when the mouse is moved or clicked the VNC client would sent the position along with a button click event to the VNC server, which would move the mouse to the given position and simulate a click, but because the real keyboard and mouse can't be use, things are far more complicated. The VNC server would have to keep track of every window on the hidden desktop, it's location, and its Z-Index; When a click even is sent, the server would need to find which window is at the cursor's current position by enumerating each window and checking its coordinates and visibility, then use PostMessage to send it a click event. For keyboard the same is true, the VNC server needs to keep track of which window is currently focused and use PostMessage to direct the input towards it.</div><div><br></div><h2>Conclusion</h2><div>Hidden VNC is probably one of the most complicated malware features to code and essentially requires coders to implement their own window manager, which is why there are very few unique implementations in the wild (most malware uses a single implementation unimaginatively named HVNC).&nbsp;</div><div><br></div><div>Sadly due to the fact it's a very sought after feature for banking trojans, I'm not going to post proof of concept code; however, I've uploaded some example code to demonstrate creating and switching between multiple desktops, you can find it here:&nbsp;<a href="https://github.com/MalwareTech/CreateDesktop/">https://github.com/MalwareTech/CreateDesktop/</a></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Advanced Desktop Application Sandboxing via AppContainer]]></title>
<description><![CDATA[This post is kind of a follow on from my previous article Usermode Sandboxing, so if you've not yet read that you should do so first.AppContainer was a fairly quietly introduced feature in Windows 8, which is a shame as it provides some great features which can be used for desktop application sec...]]></description>
<link>https://tsecurity.de/de/20545/video/advanced-desktop-application-sandboxing-via-appcontainer/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20545/video/advanced-desktop-application-sandboxing-via-appcontainer/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">This post is kind of a follow on from my previous article&nbsp;<a href="http://www.malwaretech.com/2014/10/usermode-sandboxing.html">Usermode Sandboxing</a>,&nbsp;so if you've not yet read that you should do so first.<br><br>AppContainer was a fairly quietly introduced feature in Windows 8, which is a shame as it provides some great features which can be used for desktop application security too (Few people are aware that it's not just used for Apps as the name might suggest). I'll go over some of the features which stood out to me.<br><br><b>Network Restrictions</b><br>A feature previously lacking in the Windows integrity mechanism was proper network restrictions. Low integrity processes could still freely create sockets, which would allow malicious code to escape a sandbox by exploiting a vulnerable higher integrity process listening on the host.<br><br>AppContainer introduces some new network restrictions such as:<br><br><ul><li>WinCapabilityInternetClientSid - Application can make outbound connections but not listen on sockets.</li><li>WinCapabilityInternetClientServerSid -&nbsp;Application can create listening sockets but not make outbound&nbsp;connections.</li><li>WinCapabilityPrivateNetworkClientServerSid -&nbsp;Application can listen or make outbound connections to IPs within the host's&nbsp;local network (not to external networks i.e the internet), but only if the network is set to Work or Private.&nbsp;</li></ul><div>An additional restriction I've noticed is that by default the application can connect to localhost, but cannot interact with listening sockets created by applications outside of its container (Services, other Apps, etc), which would prevent the application from exploiting anything listening on localhost.&nbsp;</div><div><br></div><div><b>Filesystem &amp; Registry Restrictions</b></div><div>Inside the AppContainer variable such as %temp% and %localappdata% are reassigned to directories within that container (%localappdata%\Packages\&lt;Container Name&gt;\), which is the only writable path by default. For registry the default accessible path is: HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\ CurrentVersion\AppContainer\Storage.</div><div><br></div><div>Although Apps can be assigned privileges such as&nbsp;WinCapabilityDocumentsLibrarySid (access to My Documents), this is implemented by the App broker process and will not work for desktop applications, instead one must explicitly add the AppContainer's SID to the file/folder's ACL's from the process creating the container (Same goes for other objects such as sections and registry keys).</div><div><br></div><div><b>Process Isolation</b></div><div>Previously low integrity processes could interfere with other low integrity processes, but with AppContainer this is no longer the case. Listing processes will only show the system pseudo-process and any processes running inside that specific container (no desktop processes, services, or other applications), and it's the same story for any other objects created outside of the container. This is pretty handy as browser worker processes usually run as low integrity, which meant that any malware run inside a sandbox would still be able to inject the browser and exfil data.</div><div><br></div><div><b>Kernel Mode&nbsp;Checks</b></div><div>All the actual access checks are part of the Windows kernel, so it's not a case of just removing a few user mode hooks or performing direct system calls, access is restricted at kernel level making AppContainer a great improvement over old sandboxing methods.<br><br></div><h2>Example Code</h2><div>I've created a little example and test of the AppContainer capabilities in C, it creates a container and executes itself inside the container in order to test the restrictions (Obviously this will only work on Windows 8+ where AppContainer is available).</div><div><br></div><div>The test container is given permission to connect to network IPs (but not the internet), the broker also create a text file (%userprofile%\Desktop\allowed_test.txt) and grants the AppContainer access. Other than connecting to network IPs and accessing the App's install directory or the explicitly allowed file, everything else is restricted.</div><div><br></div><div><a href="http://3.bp.blogspot.com/-7hW705i7WVg/Ve8LuPBEtFI/AAAAAAAABME/_41PdJqEFkU/s1600/AppContainerTest.png" imageanchor="1"><img border="0" height="364" src="http://3.bp.blogspot.com/-7hW705i7WVg/Ve8LuPBEtFI/AAAAAAAABME/_41PdJqEFkU/s640/AppContainerTest.png" width="640"></a></div><div><br></div><div><b><br></b></div><div><b>Github Link:&nbsp;</b><a href="https://github.com/MalwareTech/AppContainerSandbox">https://github.com/MalwareTech/AppContainerSandbox</a></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[User Mode Hook Scanner (Alpha)]]></title>
<description><![CDATA[I finally decided to write my first security tool based on an idea I had for advanced hook detection, I couldn't find any evidence of the method being used so I based a tool around it. It's still a working progress but I'm posting so I can get some feedback early on (Currently only x86 systems ar...]]></description>
<link>https://tsecurity.de/de/20547/video/user-mode-hook-scanner-alpha/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20547/video/user-mode-hook-scanner-alpha/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">I finally decided to write my first security tool based on an idea I had for advanced hook detection, I couldn't find any evidence of the method being used so I based a tool around it. It's still a working progress but I'm posting so I can get some feedback early on (Currently only x86 systems are supported, but this shouldn't be an issue as most researchers are running 32-bit VMs).<br><br><div><a href="http://4.bp.blogspot.com/-TmmCI8sroeI/VdX9vHisc7I/AAAAAAAABLU/jScQm3IXSgE/s1600/HookScanner.png" imageanchor="1"><img border="0" height="390" src="http://4.bp.blogspot.com/-TmmCI8sroeI/VdX9vHisc7I/AAAAAAAABLU/jScQm3IXSgE/s640/HookScanner.png" width="640"></a></div><br><br><h2>Advanced Scanning</h2><div>The scanner will iterate the export table for the following system modules: ntdll.dll, kernel32.dll, kernelbase.dll, user32.dll, ws2_32.dll, and wininet.dll. Like a conventional scanner it will go through each instruction of the exported function, comparing it against a clean version of the dll which has been loaded from the disk. Normally at this point a hook scanner would either report the modification or check to see if it's a jump or call, but I've decided to take an extra step towards detecting obscure hooks.</div><div><br></div><div><b>Function Emulation</b></div><div>If any modification is found at any point within the function body, the scanner will use my basic x86 emulator to begin emulating the function, while tracing push, pop, mov, lea, jmp, call, and ret instructions. The emulator will try to determine if control flow is altered by the modified instructions and if so, which instruction redirects execution and to where.</div><div><br></div><div>The purpose of the emulator is to detect more obscure hooks as well as accurately determine the destination of the hook, beyond resolving basic jump and call instructions. A good example of where this is applicable is on hooks placed by carberp within the native call stubs of ntdll.</div><div><br></div><div>Consider this example call stub:</div><blockquote>mov eax, 0xAA<br>mov edx, 0x7FFE0300<br>call dword ptr [edx]<br>retn 0x10</blockquote>This function does not use a relative call, instead it moves a pointer into the edx register and performs an absolute indirect call with it. Carberp replaces the address moved into the edx register, resulting in redirecting the call to an arbitrary location, and not showing up in hook scanners searching for jmp/call hooks. More advanced hook scanners will log any modifications; however, the user would then have to disassemble the modified function and determine the destination address of the hook, which my engine does automatically (if it fails to resolve the location or detect a control transfer, the modification will still be logged for further investigation).<br><br><h2>Destination Dumping</h2><div>Most rootkits hook by injecting their code (usually shellcode or a PE file) into the target process, hooks are then set to point to locations within the injected code. If the tool is successfully able to work out the destination of a hook, it will query the page it points to and then map out all pages allocated with the same base address. Using this information it is possible to dump the rootkit's entire shellcode, injected PE or DLL, even if it spans multiple pages.&nbsp;</div><div><br></div><h2>Conclusion</h2><div>Again, this is a working progress and I can't guarantee the current version won't be a huge steaming pile of crap. please email any feedback/issues to admin@malwaretech.com or leave a comment on this post.</div><br>Here's a demo video to prove it does at least work on my system:<br><br> <br><br><b>Download Link:</b>&nbsp;<a href="https://www.malwaretech.net/downloads/HookScanner.rar">https://www.malwaretech.net/downloads/HookScanner.rar</a></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Windows 10 System Call Stub Changes]]></title>
<description><![CDATA[Recently I installed Windows 10 RTM and while I was digging around I happened to notice some changes to the user mode portion of the system call stub: these changes appear to break the current methods of user mode system call hooking on x86 and WOW64 (Recap: here).Windows 10 x86Native functions n...]]></description>
<link>https://tsecurity.de/de/20548/video/windows-10-system-call-stub-changes/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20548/video/windows-10-system-call-stub-changes/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">Recently I installed Windows 10 RTM and while I was digging around I happened to notice some changes to the user mode portion of the system call stub: these changes appear to break the current methods of user mode system call hooking on x86 and WOW64 (Recap:&nbsp;<a href="http://www.malwaretech.com/2014/06/usermode-system-call-hooking-betabot.html">here</a>).<br><br><h2>Windows 10 x86</h2>Native functions no longer make a call to ntdll!KiFastSystemCall&nbsp;via the pointer at SharedUserData!SystemCallStub (0x7FFE0300), in fact SharedUserData!SystemCallStub don't seem to point to anything anymore (This change was originally made in Windows 8, but like most people I'd rather just pretend that OS doesn't exist).<br><br>Now the system call stub is inline with one below each native function (I'm not really sure of the reason for the change but it is now impossible to hook all system calls with a single modification).<br><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://4.bp.blogspot.com/-sOjJd0yNsEk/Va_0UmiRhUI/AAAAAAAABJA/MeSAx5c238k/s1600/Windows10%2Bx86.png" imageanchor="1"><img border="0" src="http://4.bp.blogspot.com/-sOjJd0yNsEk/Va_0UmiRhUI/AAAAAAAABJA/MeSAx5c238k/s1600/Windows10%2Bx86.png"></a></td></tr><tr><td>Windows 10 x86</td></tr></tbody></table><h2></h2><h2>Windows 10 x64 (WOW64)</h2>Native function no longer call FS:[0xC0], instead they call a pointer in the same way x86 used to call KiFastSystemCall.<br><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://4.bp.blogspot.com/-7ZRgMSjrsVw/Va_1eOirqZI/AAAAAAAABJI/mAJkgUCB-8o/s1600/Windows10%2BWOW64.png" imageanchor="1"><img border="0" src="http://4.bp.blogspot.com/-7ZRgMSjrsVw/Va_1eOirqZI/AAAAAAAABJI/mAJkgUCB-8o/s1600/Windows10%2BWOW64.png"></a></td></tr><tr><td>Windows 10 x64 (WOW64)</td></tr></tbody></table><br>Wow64SystemServiceCall is not a fixed address like SharedUserData!SystemCallStub, instead it's the absolute address of a function within the wow64 ntdll.dll.<br><div></div><div></div><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://1.bp.blogspot.com/-dSlQxBhtyTA/Va_4KbX_EqI/AAAAAAAABJc/Vm01sx_cBsE/s1600/Wow64SystemServiceCall.png" imageanchor="1"><img border="0" height="238" src="http://1.bp.blogspot.com/-dSlQxBhtyTA/Va_4KbX_EqI/AAAAAAAABJc/Vm01sx_cBsE/s640/Wow64SystemServiceCall.png" width="640"></a></td></tr><tr><td>ntdll!Wow64SystemServiceCall</td></tr></tbody></table><br>The code simply checks a flag in the PEB to decide if to use int 2Eh or normal system call, then as before it calls wow64cpu!CpupReturnFromSystemCallStub; however, this is now done by a pointer in the table pointed to by R15, instead of directly.<br><br>FS:[0xC0] is still usable for compatibility reasons, by it doesn't point to Wow64SystemServiceCall, nor does it point to the old code, instead it points to some more complicated version (wow64cpu!KiFastSystemCall) which does the same thing.<br><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://3.bp.blogspot.com/-5tjwafWX_s8/Va_6YVfwiYI/AAAAAAAABJw/fNcGdl-BC6s/s1600/X86SwitchTo64BitMode.png" imageanchor="1"><img border="0" src="http://3.bp.blogspot.com/-5tjwafWX_s8/Va_6YVfwiYI/AAAAAAAABJw/fNcGdl-BC6s/s1600/X86SwitchTo64BitMode.png"></a></td></tr><tr><td>x86SwitchTo64BitMode (Pointed to by FS:[0xC0] on pre-Windows 10 systems)</td></tr></tbody></table><br>As you can see the original method was just executing a single instruction which did a far jump to wow64cpu!CpupReturnFromSimulatedCode; The new method does exactly the same thing but with more instructions.<br><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://4.bp.blogspot.com/-NYQ1jvYxnos/Va_5m6ZseiI/AAAAAAAABJo/-cln54w89eU/s1600/KiFastSystemCall.png" imageanchor="1"><img border="0" src="http://4.bp.blogspot.com/-NYQ1jvYxnos/Va_5m6ZseiI/AAAAAAAABJo/-cln54w89eU/s1600/KiFastSystemCall.png"></a></td></tr><tr><td>wow64cpu!KiFastSystemCall (Pointed to by FS:[0xC0] on Windows 10 x64)</td></tr></tbody></table><br>It's hard to gauge exactly why the old code was replaces, but it may have something to do with the fact there is no longer any pointers to wow64cpu!CpupReturnFromSimulatedCode which can be accessed from 32-bit code, now the only way is to switch into 64-bit mode and retrieve the pointer from r15+0xF8.<br><br></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[MalwareTech SBK - A Bootkit Capable of Surviving Reformat]]></title>
<description><![CDATA[Since i got into firmware hacking, I've been working on a little project behind the scenes: A hard disk firmware based rootkit which allows malware to survive an operating system re-install or full disk format. Unfortunately I can't post a proof of concept for many reasons (people have even conta...]]></description>
<link>https://tsecurity.de/de/20552/video/malwaretech-sbk-a-bootkit-capable-of-surviving-reformat/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20552/video/malwaretech-sbk-a-bootkit-capable-of-surviving-reformat/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">Since i got into firmware hacking, I've been working on a little project behind the scenes: A hard disk firmware based rootkit which allows malware to survive an operating system re-install or full disk format. Unfortunately I can't post a proof of concept for many reasons (people have even contacted me just to tell me not to post it), so instead I've written a presentation overviewing and explaining the rootkit, which I've dubbed MT-SBK.<br><div><br></div><div>The general purpose of MT-SBK is to provide a "framework" for my previous project, <a href="http://www.malwaretech.com/2014/04/coding-malware-for-fun-and-not-for.html">TinyXPB</a>, A windows XP bootkit. This framework enables TinyXPB to be stored and loaded from within the hard disk firmware, preventing it from being removed by: antiviruses, operating system re-installs, or even full disk reformats. This rootkit is designed for a major brand of hard disk and can infect the firmware from within the operating system (no physical access required), it's also completely undetectable to software running on the host computer.&nbsp;</div><div><br></div><div>The only way to remove MT-SBK is by replacing that hard disk's PCB or connecting an SPI programmer directly to the flash chip and flashing it with the original firmware.&nbsp;</div><div><br></div><div><a href="http://malwaretech.net/MTSBK.pdf">MalwareTech SBK Overview - PDF</a></div><div><a href="https://www.youtube.com/watch?v=0gc-VF6bi3g">Sector Spoofing Example - Youtube</a><br><br><div><a href="http://3.bp.blogspot.com/-wPGeEnFDIdY/VWyAMCHj5rI/AAAAAAAABII/_GOJSC5cqe0/s1600/ss%252B%25282015-04-29%252Bat%252B05.15.59%2529.png" imageanchor="1"><img border="0" height="282" src="http://3.bp.blogspot.com/-wPGeEnFDIdY/VWyAMCHj5rI/AAAAAAAABII/_GOJSC5cqe0/s320/ss%252B%25282015-04-29%252Bat%252B05.15.59%2529.png" width="320"></a></div><br></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hard Disk Firmware Hacking (Final)]]></title>
<description><![CDATA[Core 2, I choose you.Less than 5 minutes after posting the last article, i discovered the final piece of my puzzle: a second CPU core. I was looking through my OpenOCD configuration when I realized it had a single tap definition hardcoded, so i decided to comment it out and let OpenOCD try to aut...]]></description>
<link>https://tsecurity.de/de/20553/video/hard-disk-firmware-hacking-final/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20553/video/hard-disk-firmware-hacking-final/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on"><h2>Core 2, I choose you.</h2><div>Less than 5 minutes after posting the last article, i discovered the final piece of my puzzle: a second CPU core. I was looking through my OpenOCD configuration when I realized it had a single tap definition hardcoded, so i decided to comment it out and let OpenOCD try to automatically discover the taps.&nbsp;</div><div><br></div><div><a href="http://1.bp.blogspot.com/-KqXM-uyoijU/VVYPnMPzkRI/AAAAAAAABGc/Lcok5MfTx-g/s1600/AutoTAP.png" imageanchor="1"><img border="0" height="384" src="http://1.bp.blogspot.com/-KqXM-uyoijU/VVYPnMPzkRI/AAAAAAAABGc/Lcok5MfTx-g/s640/AutoTAP.png" width="640"></a></div><div><br></div><div>Auto probing found two TAPs with the same id, which I assumed to be two different cores, so I updated my config accordingly.&nbsp;</div><div>Here's a new config designed to work with both cores:</div><div><blockquote>transport select jtag<br>adapter_khz 100<br><br>jtag newtap auto0 tap -irlen 4 -expected-id 0x121003d3<br>jtag newtap auto1 tap -irlen 4 -expected-id 0x121003d3<br><br>target create auto0.tap feroceon -endian little -chain-position auto0.tap<br>target create auto1.tap feroceon -endian little -chain-position auto1.tap<br><br>reset_config srst_only<br>adapter_nsrst_delay 200<br>jtag_ntrst_delay 200</blockquote></div><div>After a few small adjustments, all that was left to do was run OpenOCD and see what secrets the new core holds.</div><div><br></div><div><a href="http://1.bp.blogspot.com/-GDbooLOU5Mc/VVn4vmDYzjI/AAAAAAAABGw/5O8ba-hOxSw/s1600/KernelBreakpoint.png" imageanchor="1"><img border="0" height="300" src="http://1.bp.blogspot.com/-GDbooLOU5Mc/VVn4vmDYzjI/AAAAAAAABGw/5O8ba-hOxSw/s640/KernelBreakpoint.png" width="640"></a></div><div><br></div><div>Once I'd connected to the JTAG via IDA, everything was clear. I could see that the second core was stopped on the breakpoint I'd written to the flash chip. This was the core responsible for loading and executing the bootloader, whilst the core I had been looking at before just waits in a loop. Obviously the bootstrap code must be different for core 2, because the other bootstrap just loops until a later time.&nbsp;</div><div><br></div><div><br></div><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://1.bp.blogspot.com/-gamTWQmYXEc/VVn_gQ8oPMI/AAAAAAAABHA/HbXdTsp21aU/s1600/Bootstrap2.png" imageanchor="1"><img border="0" height="640" src="http://1.bp.blogspot.com/-gamTWQmYXEc/VVn_gQ8oPMI/AAAAAAAABHA/HbXdTsp21aU/s640/Bootstrap2.png" width="518"></a></td></tr><tr><td><br></td></tr></tbody></table><div>It's clear that core 1's bootstrap is just debugging / management code, whilst core 2 has a completely separate region of code mapped to the same address. Core 2 not only loads the bootloader from the flash, but also appears responsible for most of the interesting operations such as handling SATA requests and writing the cache descriptor.</div><div><br></div><h2>Conclusion</h2><div>So there you have it, using very little experience I was able to JTAG a WD hard disk, dump the firmware, and even discover how to read / write the flash chip using ICP. I'm definitely going to spend some more time poking about in the firmware to see how parts of it work, but because that's outside the scope of these articles, and to avoid boring people, this will be the last article of the series. If I manage anything interesting, I will likely post my findings in a whitepaper and upload it alongside a demo video.&nbsp;</div><div><br></div><div>I'd like to continue posting both hardware and software articles (and some tutorial), so if you have any suggestions for either, send them to admin@malwaretech.com.&nbsp;</div><div><br></div><div>Hope you've enjoyed a slightly different style of writing and learned something new.</div><div><br></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hard Disk Firmware Hacking (Part 5)]]></title>
<description><![CDATA["Discovery requires experimentation"This weekend I made a pretty big breakthrough which lead to me making a few smaller breakthroughs and ultimately negating most of my previous research. I've also learned that "not reinventing the wheel" isn't always the best option, especially when it comes to ...]]></description>
<link>https://tsecurity.de/de/20554/video/hard-disk-firmware-hacking-part-5/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20554/video/hard-disk-firmware-hacking-part-5/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on"><div></div><h2>"Discovery requires experimentation"</h2><div>This weekend I made a pretty big breakthrough which lead to me making a few smaller breakthroughs and ultimately negating most of my previous research. I've also learned that "not reinventing the wheel" isn't always the best option, especially when it comes to trusting other people's research.&nbsp;</div><div><br></div><div>One of the main goals was to find a way to quickly and easily reprogram the hard disk, given physical access. In the&nbsp;<a href="https://spritesmods.com/?art=hddhack&amp;page=5">spritesmods</a>&nbsp;post he had remove the flash chip from the PCB and attached it to some veroboard, so he could swap it between the hard disk and the flash programmer. Obviously it's not very practical for me to have to keep disconnecting and reconnecting the flash chip, and especially impractical for an adversary looking to quickly infect a disk.&nbsp;</div><div><br></div><div>As most already know, it is possible to flash WD hard disk firmware from within the OS as long as the account has Admin/Root privileges. The disk must be running in order to accept SATA commands and must be restarted to load the new firmware. If the new firmware has errors the disk cannot start, therefore the firmware cannot be fixed (this is known as bricking). Due to the fact I'm hacking about with the firmware I'm likely to brick the device, so i needed another way of flashing it.</div><div><br></div><h2>In-Circuit Programming</h2><div>In circuit Programming (ICP) is the ability to program a flash chip or other component, while it's still connected to the circuit. In the last article I was able to find the test ports that connected to the flash chip, but was unable to program it, however; after some experimentation over the weekend I finally managed to achieve ICP.&nbsp;</div><div><br></div><div><b>The Problem</b></div><div>One of the biggest problems with ICP is that in order to write the flash chip you need to power it, but because it's connected to the rest of the circuit you end up powering other chips, which send data on various buses and interfere with your attempts to talk to the flash.</div><div><br></div><div>To prevent interference on the SPI bus, it's usually enough to hold down the reset button or short the reset signal to ground, resulting in the system being held in reset and unable to start (giving you uninterrupted access to the flash's bus).&nbsp;</div><div><br></div><div>Here's a list of what I'd tried.&nbsp;</div><div><ul><li>Powering the flash directly with 3.3v supply</li><li>Powering the flash directly with 3.3v supply while holding the system in reset</li><li>Powering the entire system by plugging in the HD</li><li>Powering the entire system by plugging in the HD while holding the system in reset</li></ul></div><div>I was ready to give up as nothing was clearly working (my SPI programmer couldn't so much as detect the flash chip), but on Saturday I decided to have one last go, and it worked straight away (sort of).&nbsp;</div><div><br></div><div><a href="http://4.bp.blogspot.com/-CwG7cjSp_xs/VVHX3ppQ8II/AAAAAAAABF4/D6-HkjFg2mw/s1600/flashrom.png" imageanchor="1"><img border="0" height="340" src="http://4.bp.blogspot.com/-CwG7cjSp_xs/VVHX3ppQ8II/AAAAAAAABF4/D6-HkjFg2mw/s640/flashrom.png" width="640"></a></div><div><br></div><div>The SPI programmer was able to detect the flash chip, but most of the data being read was erroneous. On investigation I found that the VCC (power) wire had come unstuck from the test point and was now hanging off the desk. So if the VCC wire wasn't connected and the system wasn't plugged in, how was it reading the flash chip?</div><div><br></div><div>After more experimentation I found that the circuit was set up in such a way that some of the voltage being sent to the MISO pin (about 1.2v of it) was somehow feeding back onto the VCC rail and powering the chip....wat. As I've said I'm not an electronics expert, and this had me completely baffled, but it also showed me that reading the chip in circuit was possible, i just needed to learn its secrets.&nbsp;</div><div><br></div><div><b>The Solution</b></div><div>After extensively more experimentation with a side order of experimentation and failure, I found that holding the system in reset (the solution to most ICP problems) was actually the only issue. I had been leaving the JTAG connected to the system and it was pulling the reset pin low (holding it in reset), so when I wasn't holding the system in reset the JTAG was. After disconnecting the SRST (reset) pin of the JTAG, everything worked perfectly as long as the disk wasn't plugged in and I powered the flash chip directly. It seems that this system is designed for ICP to be done without holding it in reset and doing so causes issues.</div><div><br></div><div></div><div>Here is the updated image from the last article.</div><div><br></div><div><a href="http://3.bp.blogspot.com/-Wd8fhDBYNxA/VVHTfkbxxeI/AAAAAAAABFo/-uNjbNSQ4W8/s1600/ICP.png" imageanchor="1"><img border="0" height="622" src="http://3.bp.blogspot.com/-Wd8fhDBYNxA/VVHTfkbxxeI/AAAAAAAABFo/-uNjbNSQ4W8/s640/ICP.png" width="640"></a></div><div><br></div><div>If you have a USB device which allows for SPI programming and is supported by "flashrom", like I do. You can connect it to the computer and use flashrom to read, write, and erase the flash. The TUMPA is an especially nice board because it has 2 channels, so you don't have to disconnect the JTAG to use SPI.</div><h2></h2><h2>Don't reinvent the wheel they said, It's a waste of time they said</h2><div>Before i started hacking I'd decided to read other people's research to get a good idea of where to start. Resourceful, right? Well it actually turns out that most of the research I've based mine on was either wrong or just doesn't apply to this hard disk.&nbsp;</div><div><br></div><div>I was under the impression that when connecting the JTAG and issuing a "reset halt" command, the system would be halted before any code was run, and I could step through the bootstrap while it read the bootloader from flash and execute it, this wasn't the case.</div><div><br></div><div>After playing around by writing my own code to the flash, i realized that it's is being read into memory and executed long before the system is halted. In fact it seems like the code at 0xFFFF0000 is just some kind of debug console which is only jumped to if a halt command is issued, or the reading / executing the code from flash fails. By the time the JTAG is able to connect and issue a command, the entire kernel has already been loaded and initialized, which explains why I couldn't set any breakpoints on the bootloader.</div><div><br></div><div>I can write a breakpoint to the flash so that an exception is generated and the system fails to load, then remove the breakpoint and manually jump back to the bootloader, but for whatever reason the system doesn't boot properly the second time. This isn't a huge issue because I can still debug the bootloader up until the a certain point (as long as any code I write is run during early boot, I can debug that too), but until I can find why it fails the second time, there is a window of time between the late boot stage and early kernel initialization where I can't debug.&nbsp;</div><div><br></div><h2>Success</h2><div><a href="http://1.bp.blogspot.com/-6S4YPz4Jllc/VVHowXsgdYI/AAAAAAAABGI/PImx2nl6NZo/s1600/CodeInjection.png" imageanchor="1"><img border="0" height="242" src="http://1.bp.blogspot.com/-6S4YPz4Jllc/VVHowXsgdYI/AAAAAAAABGI/PImx2nl6NZo/s640/CodeInjection.png" width="640"></a></div><div><br></div><div>My main goal was to inject code into the firmware both by running an executable on the target computer and with physical access to the hard drive, which I've achieved. Now I'll just poke around and see what I can do with it.</div><div><br></div><div>If you're wondering how easy it would be for an attacker to infect a hard drive's firmware, here are two quick ways they could to do it.</div><div><ol><li>Sending firmware update commands over the SATA interface from the host computer (requires root/admin).</li><li>Create a portable SPI programmer that can flash the firmware by being pressed against the test points on the bottom of the hard drive (would only take about 5 seconds).&nbsp;</li></ol><div>Something...something...aliens...something...something...government... *puts on tinfoil hat*<br><br>Part 6 (Final part):&nbsp;<a href="http://www.malwaretech.com/2015/05/hard-disk-firmware-hacking-final-part.html">http://www.malwaretech.com/2015/05/hard-disk-firmware-hacking-final-part.html</a></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hard Disk Firmware Hacking (Part 4)]]></title>
<description><![CDATA[It seems that the bootstrap code is just scattered around various memory addresses and there's no simple way to dump all of it, so i decided to just dump a chunk of memory from 0x00000000 and look for any reference to addresses outside of that chunk (allowing me to build up a basic map of the cod...]]></description>
<link>https://tsecurity.de/de/20555/video/hard-disk-firmware-hacking-part-4/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20555/video/hard-disk-firmware-hacking-part-4/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">It seems that the bootstrap code is just scattered around various memory addresses and there's no simple way to dump all of it, so i decided to just dump a chunk of memory from 0x00000000 and look for any reference to addresses outside of that chunk (allowing me to build up a basic map of the code).<br><br>Although the exact addresses vary between disk models, my layout should give you a good idea where to look.<br><br><ul><li>0x00000000 - 0x0000A520</li><li>0x0000EA24 - 0x00014F74</li><li>0xFFE19E00 - 0xFFE34D9A</li><li>0xFFFF2800 - 0xFFFF2800</li></ul><div><br></div>After poking around, i found it was reading some code into memory from somewhere, which I assumed to be the flash.<br><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://3.bp.blogspot.com/-duSheH_MD-U/VUkdUZpR2wI/AAAAAAAABEs/nLKJcQUG0q4/s1600/Flash_Snippet.png" imageanchor="1"><img border="0" height="480" src="http://3.bp.blogspot.com/-duSheH_MD-U/VUkdUZpR2wI/AAAAAAAABEs/nLKJcQUG0q4/s1600/Flash_Snippet.png" width="640"></a></td></tr><tr><td>First few bytes of the flash</td></tr></tbody></table><br>The flash starts with a table which spans from 0 to 0x120 (the start of the first block), each table entry is 32 bytes and follows the same format (see: image). Each block has an id from 1 to n, with the exception of the first block which is always 0x5A.<br><br>The block at 0x5A is some kind of bootloader which likely reads and decompresses the rest of the blocks from flash, but I'm not sure yet as it's proving a problem to reverse. I wanted to intercept this bootloader at the entry point, which sounds easy, it's not.<br><br><ul><li>At some point during the bootstrap process my hardware breakpoints stop working, it could be that the processor is overwriting the register, remapping memory, or disabling them all together; but I've not found the issue yet. This means I can't simply set a breakpoint on the bootloader entry point (0x19000).</li><li>The bootstrap code responsible for loading and executing the bootloader is in ROM, so I can't set software breakpoints either.</li><li>Watchpoints don't seem to work at all, even before my breakpoints stop working I can't get the code to break on any memory access.</li><li>Most of the code that isn't in ROM is using some kind of paging (aka overlaying), which reads certain regions of code into memory when they're needed, then replaces them when they're not, preventing the use of software breakpoints.</li></ul><div><br></div><div>All in all, this was proving to be must more of a pain than I expected so I decided the easiest option would be to buy a drive with an external EEPROM chip, instead of one built into the MCU. This way I could write software breakpoints directly to the flash chip with an EEPROM programmer.</div><div><br></div><div><a href="http://4.bp.blogspot.com/-F2Xp2bH__Ls/VUkjsE-joUI/AAAAAAAABE4/-Hb5E-6WtAU/s1600/PCB_Flash.png" imageanchor="1"><img border="0" height="424" src="http://4.bp.blogspot.com/-F2Xp2bH__Ls/VUkjsE-joUI/AAAAAAAABE4/-Hb5E-6WtAU/s1600/PCB_Flash.png" width="640"></a></div><div><br></div><br>&nbsp;Hardware and firmware wise this disk is pretty much identical, except the firmware is now stored in a 256k SPI flash chip, instead of in the MCU's internal memory. The first thing I did was use a multimeter to see if there's anywhere on the top of the PCB i could connect to the flash chip (so I didn't have to desolder it or keep unscrewing the PCB from the disk).<br><br><div><a href="http://3.bp.blogspot.com/-9Qx4gtQddrw/VUkkxvnU1-I/AAAAAAAABFE/9JwlTaLgUYc/s1600/ISP.png" imageanchor="1"><img border="0" height="624" src="http://3.bp.blogspot.com/-9Qx4gtQddrw/VUkkxvnU1-I/AAAAAAAABFE/9JwlTaLgUYc/s1600/ISP.png" width="640"></a></div><br>WP# and HOLD# are shorted to VCC, so they're not a problem and the rest of the required pins are brought out to the test pads around E11. I tried connecting my TUMPA's SPI interface to the test pads and using the flashrom software, but it was unable to detect the chip. I'm not sure if this is because my TUMPA isn't capable of in-circuit programming, or there is other stuff on the same data lines, but it I simply couldn't get it to work.<br><br>My new plan is to get a SOIC clip, a decent EEPROM programmer, and a desoldering station for if neither of the other option work; In the mean time I will be trying to find out what's stopping my breakpoints from working and see if i can remedy that. I'll probably not have another update until all my stuff gets delivered and I have a few days to try it all out.<br><br>Part 5 (Writing the flash):&nbsp;<a href="http://www.malwaretech.com/2015/05/hard-disk-firmware-hacking-part-5.html">http://www.malwaretech.com/2015/05/hard-disk-firmware-hacking-part-5.html</a></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hard Disk Firmware Hacking (Part 3)]]></title>
<description><![CDATA[Before we get started with part 3, I have a few updates regarding part 1 & 2.I've found that the reset pad on the JTAG header is not actually a system reset (SRST) but a TAP reset (TRST), which isn't very useful for debugging. Here is the updated layout with the system reset signal added (this wi...]]></description>
<link>https://tsecurity.de/de/20556/video/hard-disk-firmware-hacking-part-3/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20556/video/hard-disk-firmware-hacking-part-3/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">Before we get started with part 3, I have a few updates regarding part 1 &amp; 2.<br><br>I've found that the reset pad on the JTAG header is not actually a system reset (SRST) but a TAP reset (TRST), which isn't very useful for debugging. Here is the updated layout with the system reset signal added (this will allow the 'reset halt' command to break on the reset vector, before any instructions are executed).<br><br><div><a href="http://2.bp.blogspot.com/-qVcEybzOjTw/VTZnIGTiHGI/AAAAAAAABDk/WuV-Osa__o8/s1600/JTAG_Pins_New.png" imageanchor="1"><img border="0" height="620" src="http://2.bp.blogspot.com/-qVcEybzOjTw/VTZnIGTiHGI/AAAAAAAABDk/WuV-Osa__o8/s1600/JTAG_Pins_New.png" width="640"></a></div><br>In my case there wasn't a test pad for the SRST line, but there was a very small exposed bit of copper underneath the serial sticker, which was connected to the SRST pin of the CPU.<br><br>Ceriand on <a href="http://www.reddit.com/r/ReverseEngineering/comments/32jx6k/dumping_the_firmware_of_a_hard_drive_with_jtag/cqcbdda">Reddit</a>&nbsp;pointed out that the JTAG header matches the footprint of a MICTOR connector (38 or 40 pin one usually), so if you don't want to do any soldering you could get yourself a MICTOR connector and cable.<br><br><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://3.bp.blogspot.com/-jrqTYAonEp4/VTZpDQxXg4I/AAAAAAAABDw/MomiWLykIxE/s1600/MICTOR.png" imageanchor="1"><img border="0" height="640" src="http://3.bp.blogspot.com/-jrqTYAonEp4/VTZpDQxXg4I/AAAAAAAABDw/MomiWLykIxE/s1600/MICTOR.png" width="640"></a></td></tr><tr><td>MICTOR 38 connector</td></tr></tbody></table><br>I've also found out the hard way that older PSUs don't like to be used at extremely low voltage (components inside them tend to explode), so I recommend buying a decent AC to Molex power adapter (don't get the cheap ones, they die after a day).<br><br><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://3.bp.blogspot.com/-CdZRVUk7nmo/VTZ9wGYlqyI/AAAAAAAABEY/Dc2MY-LgFK8/s1600/fuse.png" imageanchor="1"><img border="0" height="478" src="http://3.bp.blogspot.com/-CdZRVUk7nmo/VTZ9wGYlqyI/AAAAAAAABEY/Dc2MY-LgFK8/s1600/fuse.png" width="640"></a></td></tr><tr><td>Apparently glass fuses like to explode and send shards flying everywhere</td></tr></tbody></table><br>Lastly: because the JTAG header has an RTCK connector, you should be able to set adapter_khz in the openocd config to 0. The JTAG can then use adaptive clocking, which should prevent any timeout errors.<br><br><h2>Bootstrap &amp; Bootloader</h2><div>After some reversing I'm now convinced that the bootstrap code in Part 2 is not used during a normal boot. On execution it waits for some data on a port (most likely the serial port), then acts accordingly. If no data is found, the code goes into an infinite loop and the drive never boots.</div><div><br></div><div><a href="http://4.bp.blogspot.com/-xuj5GZP_afA/VTZwaEtvuPI/AAAAAAAABD8/sKqjDxDcOus/s1600/Bootstrap1.png" imageanchor="1"><img border="0" height="640" src="http://4.bp.blogspot.com/-xuj5GZP_afA/VTZwaEtvuPI/AAAAAAAABD8/sKqjDxDcOus/s1600/Bootstrap1.png" width="504"></a></div><div><br></div><div>On this CPU the 0x1C00A000 - 0x1C00AFFF range appears to be mapped to various ports and test pads all around the PCB. Now, because I don't have the money for an oscilloscope or decent logic analyzer I'm going to have to pass up on mapping these ports, even though it would make things easier.</div><div><br></div><div>All this code does is read some kind of switch which enters the system into a specific mode based on the value:</div><div><ul><li>4 - Not sure, but it waits infinitely for a value on some port. My assumption is this code probably allows developers to read/write/erase the processor's internal flash.</li><li>3 - Jumps to the address in R4 (in my case this is 0, but that could be by design)</li><li>6 - A serial console which looks for ASCII bytes (r, w, j, h) on the serial port, allowing the developer to send read, write, jump, and halt commands.</li></ul><div>I'm not familiar with how ports are mapped to memory, but&nbsp;0x1C00A030 is always 0 while&nbsp;0x1C00A03A is always 0xFFFF (which I assume means one is constant at a low voltage and the other constant at a high voltage).</div></div><div><br></div><div>Interestingly if we set a hardware breakpoints on "cmp R1, #3" and set R1 to 3, the code will jump to address 0 and boot normally (this is why I think 0 doesn't mean uninitialized). Let's see what's at address 0.</div><div><br></div><div><a href="http://4.bp.blogspot.com/-zrF58vjNGAI/VTZ53J46_gI/AAAAAAAABEM/7db5ldTf708/s1600/IVT.png" imageanchor="1"><img border="0" height="640" src="http://4.bp.blogspot.com/-zrF58vjNGAI/VTZ53J46_gI/AAAAAAAABEM/7db5ldTf708/s1600/IVT.png" width="614"></a></div><div><br></div><div>Address 0 is usually RAM, but there's already valid code here, so it's quite likely the CPU temporarily maps address 0 to some area of the internal ROM during boot. This is a standard ARM IVT, which you'd see at the boot address of any ARM devices; making me think the bootstrap at 0xFFFF0000 is only executed if the CPU detects a JTAG is attached. Until I can buy a decent logic analyzer and figure which port allows us to control the bootstrap mode switch, the only apparent way to boot the disk normally with a JTAG attached is to perform a "reset halt" then manually set R1 to '3' just before the check.</div><div><br></div><div>In this case the boot code is all over the place with massive gaps between sections, my next step will be to map, dump, and reverse it. I'd probably have done that already, but my power adapter didn't arrive until yesterday.&nbsp;</div><div><br></div><div>Part 4 (Working with spi flash):&nbsp;<a href="http://www.malwaretech.com/2015/05/hard-disk-firmware-hacking-part-4.html">http://www.malwaretech.com/2015/05/hard-disk-firmware-hacking-part-4.html</a></div><div><br></div><div><br></div><div><br></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hard Disk Firmware Hacking (Part 2)]]></title>
<description><![CDATA[Now that everything is ready to be connected, power up the hard drive an run openocd with the following command: openocd -f interface/.cfg -f target/test.cfgtest.cfg should be the configuration for the CPU used by your hard disk controller, for most marvell CPUs this config should work. I'm not s...]]></description>
<link>https://tsecurity.de/de/20557/video/hard-disk-firmware-hacking-part-2/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20557/video/hard-disk-firmware-hacking-part-2/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">Now that everything is ready to be connected, power up the hard drive an run openocd with the following command: openocd -f interface/&lt;your interface here&gt;.cfg -f target/test.cfg<br><br>test.cfg should be the configuration for the CPU used by your hard disk controller, for most marvell CPUs <a href="http://pastebin.com/Rb94dGcq">this config</a> should work. I'm not sure of the adapter_khz, so I've set mine to 100 (as long as this value is lower than the actual it should work).<br><br><div><a href="http://1.bp.blogspot.com/-LaPlnReD1qU/VSu2opfNfpI/AAAAAAAABCY/lmKMO2QpuRo/s1600/OpenOCD.png" imageanchor="1"><img border="0" height="362" src="http://1.bp.blogspot.com/-LaPlnReD1qU/VSu2opfNfpI/AAAAAAAABCY/lmKMO2QpuRo/s1600/OpenOCD.png" width="640"></a></div><br>If all went well, you should see something along the lines of the above. Now you can use telnet to connect to port 4444 and issue commands.<br><br><div><a href="http://2.bp.blogspot.com/--SmjKvyASlQ/VSu4usvuy1I/AAAAAAAABCo/OoomVlQIST8/s1600/Telnet.png" imageanchor="1"><img border="0" height="364" src="http://2.bp.blogspot.com/--SmjKvyASlQ/VSu4usvuy1I/AAAAAAAABCo/OoomVlQIST8/s1600/Telnet.png" width="640"></a></div><br>The Marvell chips used in hard disk controller aren't publicly documented; so if you want to know information such as their memory map, you'll have to sign a NDA and probably pay some money. Instead, what I'm going to do is try to figure out as much as I can from the firmware and possibly by probing the circuit.<br><br>Getting the firmware isn't easy when you can't de-solder and dump the flash, so we'll have to work through the boot process. Most ARM CPUs begin executing at address 0xFFFF0000, this is known as the reset vector. If we dump 65536 bytes from this address, we'll find the bootstrap code which will be a good starting point.<br><br>In order o dump memory, we first need to halt the CPU, which can be done with the command "reset halt" (It's required that we first reset the system as we can't halt past a certain stage). If the reset command doesn't work for any reason e.g: RST pin of JTAG isn't connected to anything, you'll need to disconnect and reconnect the hard drive's power source then quickly tap into the JTAG and issue the halt command within a few second. Memory dumped with the command "dump_image &lt;file name&gt; &lt;address&gt; &lt;size&gt;".<br><br><div><a href="http://1.bp.blogspot.com/-U2NB2b6iLm4/VSvaAyw4lJI/AAAAAAAABDQ/FlffCoLjxyg/s1600/Bootstrap.png" imageanchor="1"><img border="0" height="640" src="http://1.bp.blogspot.com/-U2NB2b6iLm4/VSvaAyw4lJI/AAAAAAAABDQ/FlffCoLjxyg/s1600/Bootstrap.png" width="576"></a></div><br><br>When we disassemble the dumped image, it's some fairly small (4 kb) ARM bootstrap code, which should lead us to the rest of the firmware. I've not had much time to look, so I'll reverse the bootstrap code and post the next part when I've found the rest of the bootloader and kernel.<br><br>Part 3 (Bootstrap analysis):&nbsp;<a href="http://www.malwaretech.com/2015/04/hard-disk-firmware-hacking-part-3.html">http://www.malwaretech.com/2015/04/hard-disk-firmware-hacking-part-3.html</a></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Hard Disk Firmware Hacking (Part 1)]]></title>
<description><![CDATA[I've not been doing much in the windows malware world for a while now, because quite frankly I've run out of ideas and I'm totally bored. Recently I decided to take the jump into electronics / hardware hacking and people have suggested I post some of that here.A couple of years ago I started look...]]></description>
<link>https://tsecurity.de/de/20558/video/hard-disk-firmware-hacking-part-1/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20558/video/hard-disk-firmware-hacking-part-1/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">I've not been doing much in the windows malware world for a while now, because quite frankly I've run out of ideas and I'm totally bored. Recently I decided to take the jump into electronics / hardware hacking and people have suggested I post some of that here.<br><br>A couple of years ago I started looking into BIOS rootkits (back before (U)EFI was mainstream). I was aware that most hardware had a BIOS type setup that is usually initialized during the POST phase of the boot process, so I was looking into the possibility of modifying &nbsp;firmware to work in the same way as a BIOS rootkit would. My two main candidates were the GPU and Hard Disk, which I began looking into (but was mostly sandbagged by my lack of reverse engineering knowledge at the time).<br><br>My current project is on hold while I await the arrival of some expensive hardware which will allow me to overcome a setback (the manufacture disabled the JTAG interface prior to shipping), so I decided to have a play with something I saw on spritesmods in 2013 (<a href="https://spritesmods.com/?art=hddhack">Hard disk hacking</a>).<br><br><h2>Hard Disk Hacking</h2><div>I found an old Western Digital hard drive in pretty good condition, so I unscrewed the controller and had a look.</div><div><br></div><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://2.bp.blogspot.com/-dzR0lJk-giQ/VSudN6bYhAI/AAAAAAAABBE/e1pn9MdYCa4/s1600/HDD_Controller.png" imageanchor="1"><img border="0" height="428" src="http://2.bp.blogspot.com/-dzR0lJk-giQ/VSudN6bYhAI/AAAAAAAABBE/e1pn9MdYCa4/s1600/HDD_Controller.png" width="640"></a></td></tr><tr><td>This is where I'd put my flash...if i had any.</td></tr></tbody></table><div><br></div><div>The guy on spritesmods had dumped the firmware by de-soldering the flash chip and dumping it manually, the only problem is the red circle is were the flash chip should be (thanks obama).&nbsp;</div><div><br>Above the red circle is a Marvell 88i8846-TFJ2 ARM processor which has internal flash. I don't fancy my chances of de-soldering the entire CPU and trying to access the memory manually, so I decided to go for the JTAG method.</div><div><br></div><div><a href="http://1.bp.blogspot.com/-MGVDOTF1i3w/VSuf-U_X53I/AAAAAAAABBQ/mWXDn20d6Bc/s1600/JTAG_Pins.png" imageanchor="1"><img border="0" height="621" src="http://1.bp.blogspot.com/-MGVDOTF1i3w/VSuf-U_X53I/AAAAAAAABBQ/mWXDn20d6Bc/s1600/JTAG_Pins.png" width="640"></a></div><div><br></div>The header for the JTAG is fairly well known, though it can be upside down (in my case the first pin of the header is denoted by a '1' on the board). Pins 6 to 11 are all we need for the JTAG and the metal circle, which is the ground.<br><br>As you can probably see, I've decided not to solder the pins. This is for two reasons: They're rusty and they're too close together, so I could easily short the board. Instead I opted to use the test pads, which can be found using the 'continuity' mode on the multimeter (thanks to @<a href="https://twitter.com/McGrewSecurity">McGrewSecurity</a> for the tip).<br><br><div><a href="http://1.bp.blogspot.com/-kV58jqhN-ag/VSujUwOxFSI/AAAAAAAABBc/RWckRLsyb9c/s1600/Multimeter_Continuity.png" imageanchor="1"><img border="0" height="480" src="http://1.bp.blogspot.com/-kV58jqhN-ag/VSujUwOxFSI/AAAAAAAABBc/RWckRLsyb9c/s1600/Multimeter_Continuity.png" width="640"></a></div><br>By setting this mode on the multimeter it will show us the resistance between two points, the '1' means total resistance (the points likely aren't even connected) and '0.01' is a good connection. The meter will also emit and audible (and incredibly annoying) high pitch tone when the resistance is low, so we only really need to use the tone to tell if two points are connected.<br><br>With the hard drive disconnected simply put one of the multimeter probes on the header pin you want to locate the test pad for, then move the other probe around the test pads in the area where mine are until you hear a beep. On my board you'll see there are visible data lines running from the header pins to the test pads, which gives you a good idea where to look (depending on the quality of your eyesight).<br><br><div>I didn't want the hard drive plugged into my computers power supply in case something went wrong, and my computer is the opposite side of the room, so I didn't want to try and build a 10m long SATA cable either. Here's my solution (disclaimer: If you injure yourself blame someone else i.e. not me).&nbsp;</div><div><br></div><div><a href="http://2.bp.blogspot.com/-gWIv43MlWL8/VSumonMYl3I/AAAAAAAABBo/nJJDCrVC2cI/s1600/PSU_Shorted.png" imageanchor="1"><img border="0" height="466" src="http://2.bp.blogspot.com/-gWIv43MlWL8/VSumonMYl3I/AAAAAAAABBo/nJJDCrVC2cI/s1600/PSU_Shorted.png" width="640"></a></div><div><br></div><br>If you have a spare PSU lying around, you can short the third and forth pin of the ATX header to turn it on without connecting it to a motherboard. My PSU was very old and missing a fan, so I was pleasantly surprised when nothing shorted or caught fire (My entire house is on the same circuit breaker, so I'd be spend the next hour rebooting various devices).<br><br><div><a href="http://3.bp.blogspot.com/-uL2S05hTifU/VSuopuew0XI/AAAAAAAABB0/Vo62WgYiQoE/s1600/IDE_SATA.png" imageanchor="1"><img border="0" height="200" src="http://3.bp.blogspot.com/-uL2S05hTifU/VSuopuew0XI/AAAAAAAABB0/Vo62WgYiQoE/s1600/IDE_SATA.png" width="200"></a></div><a href="http://4.bp.blogspot.com/-22bkCWoNHNk/VSupjTm7vpI/AAAAAAAABB8/IwaoIjF-OjY/s1600/TUMPA.png" imageanchor="1"><img border="0" height="153" src="http://4.bp.blogspot.com/-22bkCWoNHNk/VSupjTm7vpI/AAAAAAAABB8/IwaoIjF-OjY/s1600/TUMPA.png" width="200"></a><br><br><br><br><br><br><br><br><br><br><br>I use a $5 SATA to USB connector, which is perfect for the data side of the hard disk connection. The red board on the right is a $30 TIAO USB Multi-Protocol Adapter, which is FT2232H based and also does SPI as well as JTAG.<br><br><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://4.bp.blogspot.com/-lS6ScJ9a6Aw/VSuqeQk-g1I/AAAAAAAABCI/x5aH3yF0w5Q/s1600/Full_Setup.png" imageanchor="1"><img border="0" height="460" src="http://4.bp.blogspot.com/-lS6ScJ9a6Aw/VSuqeQk-g1I/AAAAAAAABCI/x5aH3yF0w5Q/s1600/Full_Setup.png" width="640"></a></td></tr><tr><td>I really need a bigger desk</td></tr></tbody></table><br>Here we have a stupidly over-complicated setup due to the fact my Windows desktop reside on the other side of the room: The iMac is running a Linux virtual machine for the JTAG software (FTDI driver and OpenOCD) because they're a pain to install on Windows or OSX . The Windows system (left monitor) is running IDA for reversing/debugging (I plan on trying to connect IDA to the OpenOCD GDB service over my local network when I start doing live analysis).<br><br><br>Part 2 (Dumping the bootstrap):&nbsp;<a href="http://www.malwaretech.com/2015/04/hard-disk-firmware-hacking-part-2.html">http://www.malwaretech.com/2015/04/hard-disk-firmware-hacking-part-2.html</a><br><br><br><br><br></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Bootkit Disk Forensics - Part 2]]></title>
<description><![CDATA[DriverStartIoAs I explained in the previous article: DriverStartIo is used by older miniports to actually perform the disk I/O, it takes 2 parameters (a device object and an IRP), exactly the same as IoCallDriver does. The call to DriverStartIo is done with IoStartPacket; however, the device obje...]]></description>
<link>https://tsecurity.de/de/20559/video/bootkit-disk-forensics-part-2/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20559/video/bootkit-disk-forensics-part-2/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on"><h2>DriverStartIo</h2><div>As I explained in the previous article: DriverStartIo is used by older miniports to actually perform the disk I/O, it takes 2 parameters (a device object and an IRP), exactly the same as IoCallDriver does. The call to DriverStartIo is done with IoStartPacket; however, the device object passed is not that of the miniport, but instead a device associated with the port the target disk is connected to (in my case IdePort1).</div><div><br></div><div>IRP_MJ_SCSI points to IdePortDispatch in atapi.sys, by disassembling it we can see exactly how the required device object is retrieved from the DeviceExtension field of the miniport's device object.</div><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://2.bp.blogspot.com/-elDVj88Qutg/VPYq4a4bOBI/AAAAAAAAA9w/yJafDuu8cm4/s1600/AtaPortDispatch.png" imageanchor="1"><img border="0" src="http://2.bp.blogspot.com/-elDVj88Qutg/VPYq4a4bOBI/AAAAAAAAA9w/yJafDuu8cm4/s1600/AtaPortDispatch.png"></a></td></tr><tr><td>To start with, ebx is the address of the device extension (which is shared between all atapi devices).</td></tr></tbody></table><div><br>The call logic is something like this:<br><ol><li>Get the miniport's device extension from its device object (passed to us in the call).</li><li>Get IdePort1's device extension from offset 0x5C into the miniport's device extension.</li><li>Get IdePort1's device object from offset 0x0C into its device extension.</li><li>Call IoStartPacket with the IRP and IdePort1's device object.</li></ol><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://2.bp.blogspot.com/-oYTqA-I34z8/VPYvawAjrSI/AAAAAAAAA98/lZ5zvpIIK70/s1600/ObjectRelationship.png" imageanchor="1"><img border="0" src="http://2.bp.blogspot.com/-oYTqA-I34z8/VPYvawAjrSI/AAAAAAAAA98/lZ5zvpIIK70/s1600/ObjectRelationship.png" height="264" width="640"></a></td></tr><tr><td>The relationship between the various objects.</td></tr></tbody></table><div><br></div></div><div>As both the miniport and IdePort devices are created by atapi.sys, the DriverObject field of both devices' objects point to the same driver object; thus, hooking DriverStartIo is as simple as replacing the address in the driver's object. &nbsp;</div><div><br></div><h2>Detecting DriverStartIo hook with WinDbg</h2><div>For basic DriverStartIo hook detection we can simply follow the same process as for major function hooks: First, we find the boot disk and list it's stack.</div><table cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://1.bp.blogspot.com/-uWz6wwzeQcs/VPc1WMMJ2yI/AAAAAAAAA-Q/znycrY-NXo0/s1600/DeviceStackClean.png" imageanchor="1"><img border="0" src="http://1.bp.blogspot.com/-uWz6wwzeQcs/VPc1WMMJ2yI/AAAAAAAAA-Q/znycrY-NXo0/s1600/DeviceStackClean.png"></a></td></tr><tr><td>Device stack for boot device on a clean system</td></tr></tbody></table><table cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://3.bp.blogspot.com/-4b0oScbtnkU/VPc2U2lV-YI/AAAAAAAAA-k/H_sW59jnvHM/s1600/DeviceStackTdl4.png" imageanchor="1"><img border="0" src="http://3.bp.blogspot.com/-4b0oScbtnkU/VPc2U2lV-YI/AAAAAAAAA-k/H_sW59jnvHM/s1600/DeviceStackTdl4.png"></a></td></tr><tr><td>Device stack on a TDL4 infected system.</td></tr></tbody></table><div><br></div><div>As I explained in the previous article, modifications made by TDL4 will cause the !drvobj and !devobj commands to think the object is invalid, it's not. You will probably want to check each driver object in the stack (for the invalid DeviceObject you can again use "dt _DEVICE_OBJECT &lt;address&gt;" to find the DriverObject field).</div><div><br></div><div>With most bootkits, the lowest level driver is always the one hooked, so I'll use this in my example.</div><div></div><table cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://3.bp.blogspot.com/-ilPyqIt7MZQ/VPdfyW1oziI/AAAAAAAAA_o/F7O03d_kFCI/s1600/DriverObject.png" imageanchor="1"><img border="0" src="http://3.bp.blogspot.com/-ilPyqIt7MZQ/VPdfyW1oziI/AAAAAAAAA_o/F7O03d_kFCI/s1600/DriverObject.png"></a></td></tr><tr><td>DriverStartIo appears not to be hooked.</td></tr></tbody></table><div><br></div><div>You can see here that DriverStartIo isn't hooked because the address resolve to its proper symbol; however, this isn't actually the real driver object. Earlier i explained that IoStartPacket is always called with the device object of IdePort1, not the disk miniport: This means that when IoStartPacket called DriverStartIo internally, it does so by getting the driver object from the DriverObject field of IdePort1's device object, then getting the DriverStartIo field from that. Obviously this means that to hook DriverStartIo, one could simply just create a copy of atapi's driver object, with the DriverStartIo field modified, then set the DriverObject field of IdePort1's device object to point to the new, malicious driver object (this way on IdePort1 will point to the hooked driver, the rest will point to the original).</div><div><br></div><div>As it happens TDL4 actually does the opposite, it hooks the real atapi driver object, then replaces the DriverObject field of the disk miniport's device object with the address of an identical driver object, without the DriverStartIo field modified.).</div><div><br></div><div>If you know what you're looking for, fake driver objects are easy to detect. All devices created by a driver should point the same driver object, so simply enumerating the devices created by the miniport's driver then making sure all the DriverObject fields point to the same address is all that's needed. This can be done a multitude of ways.</div><div><br></div><div><b>Method 1: DrvObj</b></div><div>The fake driver object will have the same name as the real one (in my case "\driver\atapi"), all you need to do is type "!drvobj \driver\atapi 2" to get the real driver's object (this is a downside of TDL4 hooking the real driver object instead of a spoofed one).&nbsp;</div><div><br></div><div><a href="http://2.bp.blogspot.com/-b1tuHs4XXag/VPdOQQQpL0I/AAAAAAAAA_A/gLJKb2vPDyg/s1600/DriverObjectReal.png" imageanchor="1"><img border="0" src="http://2.bp.blogspot.com/-b1tuHs4XXag/VPdOQQQpL0I/AAAAAAAAA_A/gLJKb2vPDyg/s1600/DriverObjectReal.png"></a></div><div><b>Method 2: NextDevice</b></div><div>Starting with the miniport device, enumerate devices using "dt _DEVICE_OBJECT &lt;address&gt;" and the NextDevice field of each device's object. We're looking for any DriverObject field that dosen't match that of the miniport (this is the real driver object).</div><div></div><table cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://1.bp.blogspot.com/-3jsvAjEKgvQ/VPdjDVVMslI/AAAAAAAAA_0/ApLFlSh-7Vg/s1600/NextDevice.png" imageanchor="1"><img border="0" src="http://1.bp.blogspot.com/-3jsvAjEKgvQ/VPdjDVVMslI/AAAAAAAAA_0/ApLFlSh-7Vg/s1600/NextDevice.png"></a></td></tr><tr><td>All devices should point to the real driver object, except for the miniport.</td></tr></tbody></table><div><b><br>Method 3: DeviceExtension</b></div><div>This is the least reliable way, as the device extension could change from system to system, but as I mentioned earlier: you can find IdePort1's device extension at offset 0x5C isn't the miniport's device extension, then from IdePort1's device extension you can find its device object at offset 0x0C (IdePort1's device object will point to the real driver object). We can actually find the DeviceObject in a single commands using this overly complicated WinDbg-C++ syntax: "dt _DEVICE_OBJECT poi(poi(@@C++(((nt!_DEVICE_OBJECT *)&lt;address&gt;)-&gt;DeviceExtension)+0x5C)+0x0C)", where "&lt;address&gt;" is the miniport device object.</div><div><br></div><div><a href="http://4.bp.blogspot.com/-Rgl2wuQPZxc/VPdVvyB6beI/AAAAAAAAA_Y/8LlcAw2Nx7A/s1600/DeviceExtension.png" imageanchor="1"><img border="0" src="http://4.bp.blogspot.com/-Rgl2wuQPZxc/VPdVvyB6beI/AAAAAAAAA_Y/8LlcAw2Nx7A/s1600/DeviceExtension.png"></a></div><h2>Part3</h2><div><a href="http://www.malwaretech.com/2015/03/bootkit-disk-forensics-part-3.html">http://www.malwaretech.com/2015/03/bootkit-disk-forensics-part-3.html</a></div><div><br></div><div><br></div><div></div><div><br></div><div><br></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Intercepting all System Calls by Hooking KiFastSystemCall]]></title>
<description><![CDATA[Usually I don't post things like this, but because KiFastSystemCall hooking only works on x86 systems and doesn't work on Windows 8 or above, it no longer has much use in malware. There are also multiple public implementations for this method, just not very elegant, which I hope to correct.If you...]]></description>
<link>https://tsecurity.de/de/20560/video/intercepting-all-system-calls-by-hooking-kifastsystemcall/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20560/video/intercepting-all-system-calls-by-hooking-kifastsystemcall/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">Usually I don't post things like this, but because KiFastSystemCall hooking only works on x86 systems and doesn't work on Windows 8 or above, it no longer has much use in malware. There are also multiple public implementations for this method, just not very elegant, which I hope to correct.<br><br>If you haven't read my previous article about this topic, or need a refresher, you can find it <a href="http://www.malwaretech.com/2014/06/usermode-system-call-hooking-betabot.html">here</a>.<br><br><h2>Performing a System Call</h2><div>KiFastSystemCall has a very strange calling convention (if you can call it that). Each native function (Ex: NtCreateFile) corresponds to a function with the same name in the SSDT. In order to make the transition from user mode to kernel mode, the instruction "sysenter" is used.</div><div><br></div><div><a href="http://3.bp.blogspot.com/-mFGfdRzXA3A/U58ZBxRKf7I/AAAAAAAAAf0/mstM2HJclRg/s1600/system+call+path+32-bit.png" imageanchor="1"><img border="0" src="http://3.bp.blogspot.com/-mFGfdRzXA3A/U58ZBxRKf7I/AAAAAAAAAf0/mstM2HJclRg/s1600/system+call+path+32-bit.png" height="190" width="640"></a></div><div><br></div><div><br></div><div>I don't want to go into great detail on how the sysenter instruction actually enters kernel mode, as that would take up the entire page, but I'll explain the basics:</div><div><ul><li>The SSDT is an array of addresses for each native function.</li><li>The number you see being moved into the eax register is known as its ordinal, and is the position within the SSDT where that functions address is located.&nbsp;</li><li>When the sysenter instruction is executed the kernel reads the ordinal from eax and uses it to call the corresponding function in the SSDT, before returning execution to usemode.</li></ul><div>Something important to note is that the native function simply calls KiFastSystemCall and doesn't even set up a stack frame, meaning the address of the first parameter can only be accessed using [esp+8], so we can't just hook KiFastSystemCall with a C function, as this matches no standard calling convention (which is what makes the method so tricky to implement).<br><br><h2>Dispatching Calls</h2></div></div><div>Since the last article I've improved on the dispatching method, which now has two purposes:&nbsp;</div><div><ol><li>Determining which native function made the call to KiFastSystemCall, so we can properly handle it.</li><li>Setting up the stack in such a way that we can access the parameters using plain C.</li></ol><div><br></div><div><b>Dispatching</b></div><div>Normally we'd hook each individual function we want to intercept with a single handler (proxy), but all native functions call KiFastSystemCall, so we need to think differently.&nbsp;</div><div>As I explained earlier, the SSDT is an array of addresses and the ordinal (which is in eax when KiFastSystemCall is invoked), corresponds to the position of that function's address within the SSDT. Using this knowledge we can do the same: We create an array of addresses for the the proxy functions and use the ordinal to locate the correct handler using the ordinal in eax. For our SSDT each entry will be 8 bytes, so the handler needs to be placed at our_ssdt[2*ordinal] (in order to get the ordinal for a native function we just read 4 bytes starting at the 2nd byte of the function).&nbsp;</div></div><div><br></div><div>You're probably wondering why each entry for our SSDT is 8 bytes, instead of 4; this is because in order to set up the stack before calling the proxy, we need to know how many parameters were passed to KiFastSystemCall (we store the proxy address as the first 4 bytes and the number of parameter as the rest).</div><div><br></div><div><b>Preparing the Stack</b></div><div>When KiFastSystemCall is invoked, there are two return addresses between the stack pointer and the function parameters (the return from KiFastSystemCall to the native function and the return from the native function). In order to call the proxy function we will get the number of parameter for the function from our_ssdt[2*ordinal+4] and push them to the stack again, in stdcall format (the proxy function is responsible for removing them from the stack). The last thing that is pushed to the stack before we call the proxy is the eax register (the ordinal), we will need this later if we wish to call the original, non hooked, version of KiFastSystemCall.</div><div><br></div><h2>The Code</h2><div><a href="https://github.com/MalwareTech/FstHook">FstHook</a> - This is my own C&nbsp;library which allows a program to easily hook any number of native function using a single hook on KiFastSystemCall.</div><div><br></div><div>Everything is pretty well commented and self explanatory, but if you have any questions feel free to email me on admin@malwaretech.com.</div><div><br></div><div><br></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Bootkit Disk Forensics - Part 1]]></title>
<description><![CDATA[Recently I got the idea to play around with bypassing bootkit disk filters from an email i received, which highlighted that my MBR spoofing code was able to get underneath the driver of a popular forensics tool, preventing it from reading the real disk sectors. Although I believe disk forensics s...]]></description>
<link>https://tsecurity.de/de/20563/video/bootkit-disk-forensics-part-1/</link>
<guid isPermaLink="true">https://tsecurity.de/de/20563/video/bootkit-disk-forensics-part-1/</guid>
<pubDate>Sun, 31 Jan 2016 22:37:07 +0100</pubDate>
<category>🎥 Video</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on"><div dir="ltr" trbidi="on">Recently I got the idea to play around with bypassing bootkit disk filters from an email i received, which highlighted that my MBR spoofing code was able to get underneath the driver of a popular forensics tool, preventing it from reading the real disk sectors. Although I believe disk forensics should not be done on a live system, instead the disk should be mounted on a clean system and examined from there, I thought it would be fun to write a tool for bypassing various bootkit drivers and then post my research. Another email I received requested that I show how one would detect the presence of such filters from WinDbg, So I will try to cover both.<br><br><h2>Disk Filtering - Old and New Driver Module</h2><div>As I've shown in a <a href="http://www.malwaretech.com/2015/01/using-kernel-rootkits-to-conceal.html">previous article</a>, disk filtering is usually done by hooking the IRP_MJ_SCSI field of the miniport driver's object. Another common method is hooking DriverStartIo; however, this field is only used in the old-style driver model and is set to NULL on most Vista+ systems. The drivers used depend on whether you use SCSI or ATA based hardware, but because all drivers follow the same model, I will simply use an ATA system in my examples.</div><div><br></div><div><b>Old Driver Model</b></div><div>Pre-Vista disk drivers would have a single ATA&nbsp;channel driver known as atapi.sys, which would provide the functionality of both a port and&nbsp;miniport. If a disk required a custom miniport, the vendor would have to write their own miniport&nbsp;+ port driver, which is no small task.<br><br>When a device receives a request such as IRP_MJ_SCSI, it queues it to the disk via IoStartPacket, which eventually calls the address held by the DriverStartIo field of the driver's object; thus hooking DriverStartIo would intercept any disk I/O requests, not just IRP_MJ_SCSI.</div><div><a href="http://2.bp.blogspot.com/-7KShyZmMDXE/VO5GkhQc3CI/AAAAAAAAA7M/rBJ3XJXqiBk/s1600/AtapiOld.png" imageanchor="1"><img border="0" src="http://2.bp.blogspot.com/-7KShyZmMDXE/VO5GkhQc3CI/AAAAAAAAA7M/rBJ3XJXqiBk/s1600/AtapiOld.png" height="342" width="640"></a></div><div><br></div><div><b>New Driver Model</b></div><div>The new driver model provides a Microsoft supplied port driver (ataport.sys) and miniport driver (atapi.sys), which work together to make up the channel interface. The port driver provides basic functionality, whilst the miniport provides hardware specific functionality; so, if a vendor needs a custom miniport driver, they could simply write their own miniport to interface with the Microsoft supplied port driver.</div><div><br></div><div>With the new model the IRP_MJ_SCSI field of atapi's driver object points to a &nbsp;function within ataport.sys (IdePortDispatch), which handles and queues requests using an internal mechanism instead of IoStartPacket, meaning bootkits hooking only IRP_MJ_SCSI and DriverStartIo can be bypassed using passthrough operations (even from usermode).</div><div><a href="http://2.bp.blogspot.com/-IVXrruf6I0E/VO5LMzynqtI/AAAAAAAAA7Y/XRCGOGaHGtw/s1600/AtapiNew.png" imageanchor="1"><img border="0" src="http://2.bp.blogspot.com/-IVXrruf6I0E/VO5LMzynqtI/AAAAAAAAA7Y/XRCGOGaHGtw/s1600/AtapiNew.png" height="540" width="640"></a></div><h2>TDL Warning</h2><div>Although TDL is no longer active, I should mention that it hijacks kdcom.dll (the COM debugger extension) in such a way that it prevents it from starting. If you attempt to enable kernel debugging via COM on a TDL infected system, it will be completely bricked following reboot (even safemode won't load).</div><div><br></div><h2>Detecting Major Function Hooks with WinDbg</h2><div>First things first you need to find which disk is your boot disk (it's up you you how you do this), but in most cases it will be \Device\Harddisk0\DR0. Once you've made sure WinDbg has the correct symbols loaded, use !devstack to display the device stack and find the bottom most device (the miniport).</div><div><br></div><div>Here is a normal output:<br><div><a href="http://4.bp.blogspot.com/--oJ-JSYIKHA/VO5PLvnLvmI/AAAAAAAAA7k/iYAaZ99v8F8/s1600/DeviceStackClean.png" imageanchor="1"><img border="0" src="http://4.bp.blogspot.com/--oJ-JSYIKHA/VO5PLvnLvmI/AAAAAAAAA7k/iYAaZ99v8F8/s1600/DeviceStackClean.png"></a></div><div><br></div></div><div><br></div><div><br></div><div><br></div><div>In the case of some TDL4 infections, the miniport driver object (\driver\atapi) will appear to be invalid (it's not), but it prevents the !devobj and !drvobj commands from working, so we'll have to get the driver object associated with the miniport by using dt _DEVICE_OBJECT on the lowest device's object.<br><br></div><div></div><div></div><div></div><div><a href="http://2.bp.blogspot.com/-ef2rvbrdRxM/VO5SZRWibDI/AAAAAAAAA8A/RQrlvHoyTN0/s1600/DeviceObject.png" imageanchor="1"><img border="0" src="http://2.bp.blogspot.com/-ef2rvbrdRxM/VO5SZRWibDI/AAAAAAAAA8A/RQrlvHoyTN0/s1600/DeviceObject.png"></a></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><br><div></div><br><br><br><br><br><br><br><br>Now we can examine the driver object (specifically the dispatch table) for major function pointer hooks. On a clean system all the dispatch routines should have addresses which resolve to symbols in either the miniport, port or ntoskrnl. On TDL4 infected systems the !drvobj command won't work, so you'll have to use dds (iv'e shown how to use both below).<br><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://1.bp.blogspot.com/-tqcFGTpeTtE/VO5WE1Ez57I/AAAAAAAAA8M/3d4xlRv1fdw/s1600/DriverObject.png" imageanchor="1"><img border="0" src="http://1.bp.blogspot.com/-tqcFGTpeTtE/VO5WE1Ez57I/AAAAAAAAA8M/3d4xlRv1fdw/s1600/DriverObject.png"></a></td></tr><tr><td>Major functions on a clean system shown with !drvobj</td></tr></tbody></table></div><br><div></div><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://2.bp.blogspot.com/-9SOzCD7abpg/VO5b9V_Cu_I/AAAAAAAAA8k/ibevsa7x9zw/s1600/DriverDispatch.png" imageanchor="1"><img border="0" src="http://2.bp.blogspot.com/-9SOzCD7abpg/VO5b9V_Cu_I/AAAAAAAAA8k/ibevsa7x9zw/s1600/DriverDispatch.png"></a></td></tr><tr><td>Major functions on a clean system shown with dds</td></tr></tbody></table><br>On an infected system (TDL4) we will see something similar to the below.<br><table cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://3.bp.blogspot.com/-chTR3A5_ZTk/VO5hU5VeHnI/AAAAAAAAA80/ro7V4cLa96Q/s1600/DriverDispatchInfectedTDL4.png" imageanchor="1"><img border="0" src="http://3.bp.blogspot.com/-chTR3A5_ZTk/VO5hU5VeHnI/AAAAAAAAA80/ro7V4cLa96Q/s1600/DriverDispatchInfectedTDL4.png"></a></td></tr><tr><td>Note: all the dispatch routines point to the same address, which&nbsp;resides in pool memory (not normal).</td></tr></tbody></table><br><br><br><br><br><br><br><br><br><br><table cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://3.bp.blogspot.com/-hlYY-JH4Khs/VO5nnRHksSI/AAAAAAAAA9M/jG1FUqm0REo/s1600/DriverDispatchInfectedRovnixD.png" imageanchor="1"><img border="0" src="http://3.bp.blogspot.com/-hlYY-JH4Khs/VO5nnRHksSI/AAAAAAAAA9M/jG1FUqm0REo/s1600/DriverDispatchInfectedRovnixD.png"></a></td></tr><tr><td>In an attempt to trick av tools, Rovnix redirects the pointers to jumps it wrote to unused space at the end of atapi.sys, hence the addresses don't resolve to a function, only a module.&nbsp;</td></tr></tbody></table><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>If the driver dispatch table appears to be clean, the next thing to do is disassemble the address pointed to by IRP_MJ_SCSI (IRP_MJ_INTERNAL_DEVICE_CONTROL), as this is the dispatch routine which handles disk read/write requests and could be inline hooked. In my case IRP_MJ_SCSI points to ataport!IdePortDispatch.<br><table cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://4.bp.blogspot.com/-JEfTSQ_OY_w/VO5jeC2qdTI/AAAAAAAAA9A/HvsPxwTS5sk/s1600/CleanIdePortDispatch.png" imageanchor="1"><img border="0" src="http://4.bp.blogspot.com/-JEfTSQ_OY_w/VO5jeC2qdTI/AAAAAAAAA9A/HvsPxwTS5sk/s1600/CleanIdePortDispatch.png"></a></td></tr><tr><td>A example of a clean IRP_MJ_SCSI handler</td></tr></tbody></table><br><br><br><br><br><br><br><br><br><br><br><br>It may be difficult to detect inline hooks, especially if existing jump/calls are modified. One should compare the module in memory against its disk image, accounting for relocation and imports (the best way to do this would be to have a driver map the disk image into memory and relocate it to point to the original module, allowing you to simply compare the two).<br><br><h2>Part 2</h2><div><a href="http://www.malwaretech.com/2015/03/bootkit-disk-forensics-part-2.html">http://www.malwaretech.com/2015/03/bootkit-disk-forensics-part-2.html</a></div><br></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Inline Hooking for Programmers (Part 2: Writing a Hooking Engine)]]></title>
<description><![CDATA[We'll be writing a hooking engine using trampoline based hooks as explained in the previous article (we don't handle relative instructions as they're very rare, but we do use atomic write operations to prevent race conditions).First things first, we need to define the proxy functions which we wil...]]></description>
<link>https://tsecurity.de/de/3663/reverse-engineering/inline-hooking-for-programmers-part-2-writing-a-hooking-engine/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3663/reverse-engineering/inline-hooking-for-programmers-part-2-writing-a-hooking-engine/</guid>
<pubDate>Thu, 31 Dec 2015 19:58:21 +0100</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">We'll be writing a hooking engine using trampoline based hooks as explained in the previous article (we don't handle relative instructions as they're very rare, but we do use atomic write operations to prevent race conditions).<br><div><br></div><div>First things first, we need to define the proxy functions which we will redirect the hooked functions to, these must have the same calling convention, return type, and parameters as the functions we are going to hook with them. For this example we will simply have them print out the parameters before displaying the message box.<br><pre>int WINAPI NewMessageBoxA(HWND hWnd, LPCSTR lpText, LPCTSTR lpCaption, UINT uType)<br>{<br> printf("MessageBoxA called!\ntitle: %s\ntext: %s\n\n", lpCaption, lpText);<br> return OldMessageBoxA(hWnd, lpText, lpCaption, uType);<br>}<br><br>int WINAPI NewMessageBoxW(HWND hWnd, LPWSTR lpText, LPCTSTR lpCaption, UINT uType)<br>{<br> printf("MessageBoxW called!\ntitle: %ws\ntext: %ws\n\n", lpCaption, lpText);<br> return OldMessageBoxW(hWnd, lpText, lpCaption, uType);<br>}<br></pre></div><div><br>OldMessageBox is simply a typedef that will point to 25 bytes of executable memory which the hooking function will store the trampoline into.<br><pre>typedef int (WINAPI *TdefOldMessageBoxA)(HWND hWnd, LPCSTR lpText, LPCTSTR lpCaption, UINT uType);<br>typedef int (WINAPI *TdefOldMessageBoxW)(HWND hWnd, LPWSTR lpText, LPCTSTR lpCaption, UINT uType);<br>TdefOldMessageBoxA OldMessageBoxA = (TdefOldMessageBoxA)VirtualAlloc(NULL, 25, MEM_COMMIT, PAGE_EXECUTE_READWRITE);<br>TdefOldMessageBoxW OldMessageBoxW =&nbsp;(TdefOldMessageBoxW)VirtualAlloc(NULL, 25, MEM_COMMIT, PAGE_EXECUTE_READWRITE);</pre><br></div><div><div>Now for the hooking function, we will have the following parameters:<br><ul><li>name - The name of the function to hook.</li><li>dll - The dll the target function resides in.</li><li>proxy - a pointer to the proxy function (NewMessageBox).</li><li>original - A pointer to 25 bytes of executable memory, where we will store the trampoline.</li><li>length - A pointer to a variable which receives the number of bytes worth of instructions stored in the trampoline (remember we can only copy whole instructions).&nbsp;</li></ul><pre>BOOL HookFunction(CHAR *dll, CHAR *name, LPVOID proxy, LPVOID original, PDWORD length)<br>{<br>}<br></pre><br>Inside the hooking function we will get the address of the target function, then use the "Hacker Dissasembler Engine (HDE32)" to dissasemble each instruction and get the length, until we have 5 or more bytes worth of whole instructions (hde32_disasm returns the length of the instruction pointed to by the first parameter).<br><pre>LPVOID FunctionAddress;<br>DWORD TrampolineLength = 0;<br><br>FunctionAddress = GetProcAddress(GetModuleHandleA(dll), name);<br>if(!FunctionAddress)<br> return FALSE;<br><br>//disassemble length of each instruction, until we have 5 or more bytes worth<br>while(TrampolineLength &lt; 5)<br>{<br> LPVOID InstPointer = (LPVOID)((DWORD)FunctionAddress + TrampolineLength);<br> TrampolineLength += hde32_disasm(InstPointer, &amp;disam);<br>}</pre><br>To build the actual trampoline we first copy "TrampolineLength" of bytes from the target function to the trampoline buffer (passed to the function in the parameter "original"), then we append the copied bytes with a jump to <i>n</i> bytes into target function (n is TrampolineLength e.g. resume execution in the target function where the trampoline left off).<br><br>A relative jump is the distance from the end of the jump, that is: (destination - (source&nbsp;+ 5)). The source of the jump will be the trampoline address + TrampolineLength and the destination will be the hooked function + TrampolineLength.<br><pre>DWORD src = ((DWORD)FunctionAddress + TrampolineLength);<br>DWORD dst = ((DWORD)original + TrampolineLength + 5);<br>BYTE jump[5] = {0xE9, 0x00, 0x00, 0x00, 0x00};</pre><pre>//Store n bytes from the target function into trampoline<br>memcpy(original, FunctionAddress, TrampolineLength);<br><br>//Set the second byte of the jump (the offset), so the jump goes where we want.<br>*(DWORD *)(jump+1) = src - dst;<br><br>//Copy the jump to the end of the trampoline<br>memcpy((LPVOID)((DWORD)original+TrampolineLength), jump, 5);<br></pre><br>Before we can write the jump to the function, we need to make sure the memory is writable (it's usually not), we do this by setting the protection to PAGE_EXECUTE_READWRITE using VirtualProtect.<br><pre>//Make sure the function is writable<br>DWORD OriginalProtection;<br>if(!VirtualProtect(FunctionAddress, 8, PAGE_EXECUTE_READWRITE, &amp;OriginalProtection))<br> return FALSE;</pre><br>To place the hook all we need to do is create a jump to jump from the target function to the proxy, then we can overwrite the first 5 bytes of the target with it. To avoid any risk of the function being called while we're writing the jump, we must write all of it at once (atomically). Sadly atomic functions can only work with sizes of base 2 (2, 4, 8, 16, etc); our jump is 5 bytes and the closest size we can copy is 8, so we will have to make a custom function (SafeMemcpyPadded) that will pad the source buffer to 8 bytes with bytes from the destination, so that the last 3 bytes remain unchanged after the copy.<br><br>cmpxchg8b compares the 8 bytes held in edx:eax, with the destination, if they're equal it copies the 8 bytes held in ecx:ebx, we set edx:eax to the destination bytes so that the copy always happens.<br><pre>//Build and atomically write the hook<br>*(DWORD *)(jump+1) = (DWORD)proxy - (DWORD)FunctionAddress - 5;<br>SafeMemcpyPadded(FunctionAddress, Jump, 5);</pre><pre>void SafeMemcpyPadded(LPVOID destination, LPVOID source, DWORD size)<br>{<br> BYTE SourceBuffer[8];<br><br> if(size &gt; 8)<br>  return;<br><br> //Pad the source buffer with bytes from destination<br> memcpy(SourceBuffer, destination, 8);<br> memcpy(SourceBuffer, source, size);<br><br> __asm <br> {<br>  lea esi, SourceBuffer;<br>  mov edi, destination;<br><br>  mov eax, [edi];<br>  mov edx, [edi+4];<br>  mov ebx, [esi];<br>  mov ecx, [esi+4];<br><br>  lock cmpxchg8b[edi];<br> }<br>}</pre><br>All that's left to do now is restore the page protection. flush the instruction cache, and set the "length" parameter to TrampolineLength.<br><pre>//Restore the original page protection<br>VirtualProtect(FunctionAddress, 8, OriginalProtection, &amp;OriginalProtection);<br><br>//Clear CPU instruction cache<br>FlushInstructionCache(GetCurrentProcess(), FunctionAddress, TrampolineLength);<br><br>*length = TrampolineLength;<br>return TRUE;</pre><br>The hooking function can simply be called like so.</div><div><pre>DWORD length;<br>HookFunction("user32.dll", "MessageBoxA", &amp;NewMessageBoxA, OldMessageBoxA, &amp;length);<br></pre><br>Unhooking is done by copying "length" bytes to the hooked function from OldMessageBox (the trampoline).<br><br>You can see my full hooking engine, including example usage, on <a href="https://github.com/MalwareTech/BasicHook/">GitHub</a>.<br><br><div><a href="http://4.bp.blogspot.com/-n4Yo3Z21T6g/VK6U1OTerfI/AAAAAAAAA4A/n4fCWcbm5jk/s1600/thumb.png" imageanchor="1"><img border="0" src="http://4.bp.blogspot.com/-n4Yo3Z21T6g/VK6U1OTerfI/AAAAAAAAA4A/n4fCWcbm5jk/s1600/thumb.png" height="0" width="0"></a></div><br></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Using Kernel Rootkits to Conceal Infected MBR]]></title>
<description><![CDATA[If you've look at any of the major bootkits such as TDL4 and Rovnix, you've probably noticed they employ certain self defense features to prevent removal; specifically, intercepting read/write requests to the boot sectors. While these defense mechanisms can fool some software, they may, in some c...]]></description>
<link>https://tsecurity.de/de/3664/reverse-engineering/using-kernel-rootkits-to-conceal-infected-mbr/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3664/reverse-engineering/using-kernel-rootkits-to-conceal-infected-mbr/</guid>
<pubDate>Thu, 31 Dec 2015 19:58:21 +0100</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on"><br>If you've look at any of the major bootkits such as TDL4 and Rovnix, you've probably noticed they employ certain self defense features to prevent removal; specifically, intercepting read/write requests to the boot sectors. While these defense mechanisms can fool some software, they may, in some cases, make infections even easier to spot.<br><br>Rovnix is probably the less stealthy of the two: It intercepts read/write requests to the boot disk by hooking the miniport driver, on read attempts it fills the buffer with zeros, resulting in the boot sectors appearing completely empty, on write requests it simply returns ACCESS_DENIED. Although this does prevent reading &amp; writing &nbsp;the sectors, it's usually a sure sign of an infection when the boot sector is blank but your system boots, or you can't write the boot sector even with SYSTEM privileges.<br><br>On the other had we have TDL4, which goes a step further: Instead of filling the buffer with zeros during read attempts, it instead replaces the read data with the original, non-infected master boot record (MBR). As a result of TDL4's clever trickery, any tools attempting to read the MBR will just see the original windows MBR and assume nothing is wrong; however, TDL4 also opted for a similar method to Rovnix by just denies writes to the boot sector, but with the slightly more inconspicuous error: STATUS_INVALID_DEVICE_REQUEST.<br><br>Obviously straight up denying write requests to the boot sector is going to raise some questions, so what if we improved upon TDL4's method and also allowed writing to the spoofed, non-infected MBR, instead of the real one on disk.<br><br><h2>Intercepting Disk I/O</h2><div>There's a lot of places in the kernel that disk I/O can be intercepted to trick user mode tools; however, any software using kernel drivers can bypass high level hooks. The first though would probably be to hook Disk.sys (the driver responsible for handling disk operations), but although this would work against some tools, there are trick to avoid it, I'll explain how.&nbsp;</div><div><br></div><div>Disk.sys handles disk I/O, it doesn't actually send any requests to the hard drive, it simply acts as a middleman translating kernel disk I/O requests into SCSI requests (the protocol used to communicate with the hard drive). Once Disk.sys has translated a request, it dispatches it to another, lower level driver (known as a Miniport driver), in the form of an SCSI_REQUEST_BLOCK, which the Miniport sends to the hardware via the Port driver.&nbsp;</div><div><br></div><div>The Miniport is generally operating system independent, whilst the port driver is specific to certain OS version and even hardware, making the Miniport the best place to hook without getting into hardware dependent territory. Finding a Miniport driver is pretty straight forward as all drivers/devices are stacked, so we simply walk down the device stack until we reach the bottom most device (The Miniport).&nbsp;</div><div><br></div><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://3.bp.blogspot.com/-kWEu1KbPBNU/VLx9GXQMUMI/AAAAAAAAA4Q/HYwQtgOtLhY/s1600/DiskStack.png" imageanchor="1"><img border="0" src="http://3.bp.blogspot.com/-kWEu1KbPBNU/VLx9GXQMUMI/AAAAAAAAA4Q/HYwQtgOtLhY/s1600/DiskStack.png" height="300" width="400"></a></td></tr><tr><td>2 &nbsp;identical device stacks for different disks</td></tr></tbody></table><div><br></div>The device "\Device\HardDisk0\DR0" is almost always the boot disk and is the NT device name for "\\.\PhysicalDrive0". The device directly below the disk device is the Miniport and usually belongs to atapi.sys, scsiport.sys, iastor.sys (or in the case of vmware,&nbsp;lsi_sas.sys), this is the driver we want to hook. We can get the device object of the Miniport by opening "\Device\HardDisk0\DR0" then calling "IoGetLowerDeviceObject" with it, all we then need to do is replace the IRP_MJ_SCSI pointer in the driver's object with a pointer to our filter routine, which will intercept all I/O for that disk device.<br><br><h2>Filtering Miniport Requests</h2><div><b>Key</b>IoStack = IO_STACK_LOCATION<br>Srb = SCSI_REQUEST_BLOCK</div><div>Cdb = CDB (SCSI Command Block)</div><div><br></div><div>All the information we need is in the SCSI_REQUEST_BLOCK pointed to by IoStack-&gt;Parameters.Scsi.Srb, we only need to filter WRITE(10) and READ(10) SCSI operations on disks 2 TB or smaller ("Srb.CdbLength == 10"). Next we simply check the opcode in the Cdb for&nbsp;SCSIOP_READ or&nbsp;SCSIOP_READ_DATA_BUFF for read operations and similarly&nbsp;SCSIOP_WRITE or&nbsp;SCSIOP_WRITE_DATA_BUFF for write operations.</div><div><br></div><div>Now we need to see if the request is attempting to read or write sectors that overlap the MBR, which is located at logical block address (LBA) 0, by checking the LogicalBlock and TransferLength field in the Cdb, (these values are &nbsp;big-endian so will need to be converted to little-endian before checking them). &nbsp;</div><div><br></div><div>The driver will store the clean MBR into a buffer allocated at runtime, all read/write requests will be done to/from the clean MBR buffer, instead of the actual MBR on disk.</div><div><br></div><div><b>Processing Intercepted Read Requests</b></div><div><ol><li>Set up a completion routine to be called after the hard disk has processed the read request.</li><li>When the completion routine is called, map the caller's buffer (Irp-&gt;MdlAddress) into system memory and replace the infected mbr with the clean one in it.</li><li>Allow the request to complete.</li></ol></div><div><br></div><div><b>Processing Intercepted Write Requests</b></div><div>Write requests are a little different: If the caller is only trying to write 1 sector (just the MBR), we can process the request ourselves; however, if the caller is trying to write multiple sectors (including the MBR), things get a bit more tricky. &nbsp;</div><div><br></div><div><ol><li>Map the caller's buffer (Srb-&gt;DataBuffer) into system memory and read the first 512 bytes (1 sector) into the clean MBR buffer.</li><li>Increment the caller's buffer (Srb-&gt;DataBuffer)&nbsp;by 512 bytes.</li><li>Decrement the transfer length (Srb-&gt;DataTransferLength) by 512 bytes.</li><li>Add 1 to the Logical Block Address (Stored in Cdb).</li><li>Subtract 1 from the Number of blocks to transfer (Stored in Cdb).</li><li>Pass the request to the real Miniport (this will write all the sectors the caller wanted, except the MBR).</li><li>Replace the original&nbsp;Srb-&gt;DataBuffer (Just to be safe).</li><li>If the call succeeded, add 512 to Srb-&gt;DataTransferLength (This is the number of bytes actually written to disk, because we skipped them MBR we need to make it seem like we didn't).</li><li>Allow the request to complete.</li></ol></div><div><br></div><h2>Proof of Concept</h2><div>I've written a proof of concept driver that will make the MBR appear to contain the following text:</div><blockquote>Is this the real code?<br>Is this just spoofed for me?<br>bots trying to hide.<br>Not sure of the legality.</blockquote>The system will be able to read/write to this fake MBR without modifying the real one, when the driver is unloaded or the system rebooted, the original MBR will still be intact and the face one will be gone. For some reason the driver will crash the system if loaded then unloaded many times in a row without reboot, but it's not a huge issue and I'm too lazy to debug.<br><br>GitHub of code: &nbsp;<a href="https://github.com/MalwareTech/FakeMBR/">https://github.com/MalwareTech/FakeMBR/</a><br><br><div><a href="http://1.bp.blogspot.com/-YVs5-6ziY5s/VLyfP3JF0TI/AAAAAAAAA4g/6bAdJ8-zUIU/s1600/MBRFun.png" imageanchor="1"><img border="0" src="http://1.bp.blogspot.com/-YVs5-6ziY5s/VLyfP3JF0TI/AAAAAAAAA4g/6bAdJ8-zUIU/s1600/MBRFun.png" height="368" width="640"></a></div><br><br></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Inline Hooking for Programmers (Part 2: Writing a Hooking Engine)]]></title>
<description><![CDATA[We'll be writing a hooking engine using trampoline based hooks as explained in the previous article (we don't handle relative instructions as they're very rare, but we do use atomic write operations to prevent race conditions).First things first, we need to define the proxy functions which we wil...]]></description>
<link>https://tsecurity.de/de/3663/reverse-engineering/inline-hooking-for-programmers-part-2-writing-a-hooking-engine/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3663/reverse-engineering/inline-hooking-for-programmers-part-2-writing-a-hooking-engine/</guid>
<pubDate>Thu, 31 Dec 2015 19:58:21 +0100</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on">We'll be writing a hooking engine using trampoline based hooks as explained in the previous article (we don't handle relative instructions as they're very rare, but we do use atomic write operations to prevent race conditions).<br><div><br></div><div>First things first, we need to define the proxy functions which we will redirect the hooked functions to, these must have the same calling convention, return type, and parameters as the functions we are going to hook with them. For this example we will simply have them print out the parameters before displaying the message box.<br><pre>int WINAPI NewMessageBoxA(HWND hWnd, LPCSTR lpText, LPCTSTR lpCaption, UINT uType)<br>{<br> printf("MessageBoxA called!\ntitle: %s\ntext: %s\n\n", lpCaption, lpText);<br> return OldMessageBoxA(hWnd, lpText, lpCaption, uType);<br>}<br><br>int WINAPI NewMessageBoxW(HWND hWnd, LPWSTR lpText, LPCTSTR lpCaption, UINT uType)<br>{<br> printf("MessageBoxW called!\ntitle: %ws\ntext: %ws\n\n", lpCaption, lpText);<br> return OldMessageBoxW(hWnd, lpText, lpCaption, uType);<br>}<br></pre></div><div><br>OldMessageBox is simply a typedef that will point to 25 bytes of executable memory which the hooking function will store the trampoline into.<br><pre>typedef int (WINAPI *TdefOldMessageBoxA)(HWND hWnd, LPCSTR lpText, LPCTSTR lpCaption, UINT uType);<br>typedef int (WINAPI *TdefOldMessageBoxW)(HWND hWnd, LPWSTR lpText, LPCTSTR lpCaption, UINT uType);<br>TdefOldMessageBoxA OldMessageBoxA = (TdefOldMessageBoxA)VirtualAlloc(NULL, 25, MEM_COMMIT, PAGE_EXECUTE_READWRITE);<br>TdefOldMessageBoxW OldMessageBoxW =&nbsp;(TdefOldMessageBoxW)VirtualAlloc(NULL, 25, MEM_COMMIT, PAGE_EXECUTE_READWRITE);</pre><br></div><div><div>Now for the hooking function, we will have the following parameters:<br><ul><li>name - The name of the function to hook.</li><li>dll - The dll the target function resides in.</li><li>proxy - a pointer to the proxy function (NewMessageBox).</li><li>original - A pointer to 25 bytes of executable memory, where we will store the trampoline.</li><li>length - A pointer to a variable which receives the number of bytes worth of instructions stored in the trampoline (remember we can only copy whole instructions).&nbsp;</li></ul><pre>BOOL HookFunction(CHAR *dll, CHAR *name, LPVOID proxy, LPVOID original, PDWORD length)<br>{<br>}<br></pre><br>Inside the hooking function we will get the address of the target function, then use the "Hacker Dissasembler Engine (HDE32)" to dissasemble each instruction and get the length, until we have 5 or more bytes worth of whole instructions (hde32_disasm returns the length of the instruction pointed to by the first parameter).<br><pre>LPVOID FunctionAddress;<br>DWORD TrampolineLength = 0;<br><br>FunctionAddress = GetProcAddress(GetModuleHandleA(dll), name);<br>if(!FunctionAddress)<br> return FALSE;<br><br>//disassemble length of each instruction, until we have 5 or more bytes worth<br>while(TrampolineLength &lt; 5)<br>{<br> LPVOID InstPointer = (LPVOID)((DWORD)FunctionAddress + TrampolineLength);<br> TrampolineLength += hde32_disasm(InstPointer, &amp;disam);<br>}</pre><br>To build the actual trampoline we first copy "TrampolineLength" of bytes from the target function to the trampoline buffer (passed to the function in the parameter "original"), then we append the copied bytes with a jump to <i>n</i> bytes into target function (n is TrampolineLength e.g. resume execution in the target function where the trampoline left off).<br><br>A relative jump is the distance from the end of the jump, that is: (destination - (source&nbsp;+ 5)). The source of the jump will be the trampoline address + TrampolineLength and the destination will be the hooked function + TrampolineLength.<br><pre>DWORD src = ((DWORD)FunctionAddress + TrampolineLength);<br>DWORD dst = ((DWORD)original + TrampolineLength + 5);<br>BYTE jump[5] = {0xE9, 0x00, 0x00, 0x00, 0x00};</pre><pre>//Store n bytes from the target function into trampoline<br>memcpy(original, FunctionAddress, TrampolineLength);<br><br>//Set the second byte of the jump (the offset), so the jump goes where we want.<br>*(DWORD *)(jump+1) = src - dst;<br><br>//Copy the jump to the end of the trampoline<br>memcpy((LPVOID)((DWORD)original+TrampolineLength), jump, 5);<br></pre><br>Before we can write the jump to the function, we need to make sure the memory is writable (it's usually not), we do this by setting the protection to PAGE_EXECUTE_READWRITE using VirtualProtect.<br><pre>//Make sure the function is writable<br>DWORD OriginalProtection;<br>if(!VirtualProtect(FunctionAddress, 8, PAGE_EXECUTE_READWRITE, &amp;OriginalProtection))<br> return FALSE;</pre><br>To place the hook all we need to do is create a jump to jump from the target function to the proxy, then we can overwrite the first 5 bytes of the target with it. To avoid any risk of the function being called while we're writing the jump, we must write all of it at once (atomically). Sadly atomic functions can only work with sizes of base 2 (2, 4, 8, 16, etc); our jump is 5 bytes and the closest size we can copy is 8, so we will have to make a custom function (SafeMemcpyPadded) that will pad the source buffer to 8 bytes with bytes from the destination, so that the last 3 bytes remain unchanged after the copy.<br><br>cmpxchg8b compares the 8 bytes held in edx:eax, with the destination, if they're equal it copies the 8 bytes held in ecx:ebx, we set edx:eax to the destination bytes so that the copy always happens.<br><pre>//Build and atomically write the hook<br>*(DWORD *)(jump+1) = (DWORD)proxy - (DWORD)FunctionAddress - 5;<br>SafeMemcpyPadded(FunctionAddress, Jump, 5);</pre><pre>void SafeMemcpyPadded(LPVOID destination, LPVOID source, DWORD size)<br>{<br> BYTE SourceBuffer[8];<br><br> if(size &gt; 8)<br>  return;<br><br> //Pad the source buffer with bytes from destination<br> memcpy(SourceBuffer, destination, 8);<br> memcpy(SourceBuffer, source, size);<br><br> __asm <br> {<br>  lea esi, SourceBuffer;<br>  mov edi, destination;<br><br>  mov eax, [edi];<br>  mov edx, [edi+4];<br>  mov ebx, [esi];<br>  mov ecx, [esi+4];<br><br>  lock cmpxchg8b[edi];<br> }<br>}</pre><br>All that's left to do now is restore the page protection. flush the instruction cache, and set the "length" parameter to TrampolineLength.<br><pre>//Restore the original page protection<br>VirtualProtect(FunctionAddress, 8, OriginalProtection, &amp;OriginalProtection);<br><br>//Clear CPU instruction cache<br>FlushInstructionCache(GetCurrentProcess(), FunctionAddress, TrampolineLength);<br><br>*length = TrampolineLength;<br>return TRUE;</pre><br>The hooking function can simply be called like so.</div><div><pre>DWORD length;<br>HookFunction("user32.dll", "MessageBoxA", &amp;NewMessageBoxA, OldMessageBoxA, &amp;length);<br></pre><br>Unhooking is done by copying "length" bytes to the hooked function from OldMessageBox (the trampoline).<br><br>You can see my full hooking engine, including example usage, on <a href="https://github.com/MalwareTech/BasicHook/">GitHub</a>.<br><br><div><a href="http://4.bp.blogspot.com/-n4Yo3Z21T6g/VK6U1OTerfI/AAAAAAAAA4A/n4fCWcbm5jk/s1600/thumb.png" imageanchor="1"><img border="0" src="http://4.bp.blogspot.com/-n4Yo3Z21T6g/VK6U1OTerfI/AAAAAAAAA4A/n4fCWcbm5jk/s1600/thumb.png" height="0" width="0"></a></div><br></div></div></div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Using Kernel Rootkits to Conceal Infected MBR]]></title>
<description><![CDATA[If you've look at any of the major bootkits such as TDL4 and Rovnix, you've probably noticed they employ certain self defense features to prevent removal; specifically, intercepting read/write requests to the boot sectors. While these defense mechanisms can fool some software, they may, in some c...]]></description>
<link>https://tsecurity.de/de/3664/reverse-engineering/using-kernel-rootkits-to-conceal-infected-mbr/</link>
<guid isPermaLink="true">https://tsecurity.de/de/3664/reverse-engineering/using-kernel-rootkits-to-conceal-infected-mbr/</guid>
<pubDate>Thu, 31 Dec 2015 19:58:21 +0100</pubDate>
<category>🕵️ Reverse Engineering</category>
<source url="https://tsecurity.de">tsecurity.de</source>
<content:encoded><![CDATA[<div dir="ltr" trbidi="on"><br>If you've look at any of the major bootkits such as TDL4 and Rovnix, you've probably noticed they employ certain self defense features to prevent removal; specifically, intercepting read/write requests to the boot sectors. While these defense mechanisms can fool some software, they may, in some cases, make infections even easier to spot.<br><br>Rovnix is probably the less stealthy of the two: It intercepts read/write requests to the boot disk by hooking the miniport driver, on read attempts it fills the buffer with zeros, resulting in the boot sectors appearing completely empty, on write requests it simply returns ACCESS_DENIED. Although this does prevent reading &amp; writing &nbsp;the sectors, it's usually a sure sign of an infection when the boot sector is blank but your system boots, or you can't write the boot sector even with SYSTEM privileges.<br><br>On the other had we have TDL4, which goes a step further: Instead of filling the buffer with zeros during read attempts, it instead replaces the read data with the original, non-infected master boot record (MBR). As a result of TDL4's clever trickery, any tools attempting to read the MBR will just see the original windows MBR and assume nothing is wrong; however, TDL4 also opted for a similar method to Rovnix by just denies writes to the boot sector, but with the slightly more inconspicuous error: STATUS_INVALID_DEVICE_REQUEST.<br><br>Obviously straight up denying write requests to the boot sector is going to raise some questions, so what if we improved upon TDL4's method and also allowed writing to the spoofed, non-infected MBR, instead of the real one on disk.<br><br><h2>Intercepting Disk I/O</h2><div>There's a lot of places in the kernel that disk I/O can be intercepted to trick user mode tools; however, any software using kernel drivers can bypass high level hooks. The first though would probably be to hook Disk.sys (the driver responsible for handling disk operations), but although this would work against some tools, there are trick to avoid it, I'll explain how.&nbsp;</div><div><br></div><div>Disk.sys handles disk I/O, it doesn't actually send any requests to the hard drive, it simply acts as a middleman translating kernel disk I/O requests into SCSI requests (the protocol used to communicate with the hard drive). Once Disk.sys has translated a request, it dispatches it to another, lower level driver (known as a Miniport driver), in the form of an SCSI_REQUEST_BLOCK, which the Miniport sends to the hardware via the Port driver.&nbsp;</div><div><br></div><div>The Miniport is generally operating system independent, whilst the port driver is specific to certain OS version and even hardware, making the Miniport the best place to hook without getting into hardware dependent territory. Finding a Miniport driver is pretty straight forward as all drivers/devices are stacked, so we simply walk down the device stack until we reach the bottom most device (The Miniport).&nbsp;</div><div><br></div><table align="center" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="http://3.bp.blogspot.com/-kWEu1KbPBNU/VLx9GXQMUMI/AAAAAAAAA4Q/HYwQtgOtLhY/s1600/DiskStack.png" imageanchor="1"><img border="0" src="http://3.bp.blogspot.com/-kWEu1KbPBNU/VLx9GXQMUMI/AAAAAAAAA4Q/HYwQtgOtLhY/s1600/DiskStack.png" height="300" width="400"></a></td></tr><tr><td>2 &nbsp;identical device stacks for different disks</td></tr></tbody></table><div><br></div>The device "\Device\HardDisk0\DR0" is almost always the boot disk and is the NT device name for "\\.\PhysicalDrive0". The device directly below the disk device is the Miniport and usually belongs to atapi.sys, scsiport.sys, iastor.sys (or in the case of vmware,&nbsp;lsi_sas.sys), this is the driver we want to hook. We can get the device object of the Miniport by opening "\Device\HardDisk0\DR0" then calling "IoGetLowerDeviceObject" with it, all we then need to do is replace the IRP_MJ_SCSI pointer in the driver's object with a pointer to our filter routine, which will intercept all I/O for that disk device.<br><br><h2>Filtering Miniport Requests</h2><div><b>Key</b>IoStack = IO_STACK_LOCATION<br>Srb = SCSI_REQUEST_BLOCK</div><div>Cdb = CDB (SCSI Command Block)</div><div><br></div><div>All the information we need is in the SCSI_REQUEST_BLOCK pointed to by IoStack-&gt;Parameters.Scsi.Srb, we only need to filter WRITE(10) and READ(10) SCSI operations on disks 2 TB or smaller ("Srb.CdbLength == 10"). Next we simply check the opcode in the Cdb for&nbsp;SCSIOP_READ or&nbsp;SCSIOP_READ_DATA_BUFF for read operations and similarly&nbsp;SCSIOP_WRITE or&nbsp;SCSIOP_WRITE_DATA_BUFF for write operations.</div><div><br></div><div>Now we need to see if the request is attempting to read or write sectors that overlap the MBR, which is located at logical block address (LBA) 0, by checking the LogicalBlock and TransferLength field in the Cdb, (these values are &nbsp;big-endian so will need to be converted to little-endian before checking them). &nbsp;</div><div><br></div><div>The driver will store the clean MBR into a buffer allocated at runtime, all read/write requests will be done to/from the clean MBR buffer, instead of the actual MBR on disk.</div><div><br></div><div><b>Processing Intercepted Read Requests</b></div><div><ol><li>Set up a completion routine to be called after the hard disk has processed the read request.</li><li>When the completion routine is called, map the caller's buffer (Irp-&gt;MdlAddress) into system memory and replace the infected mbr with the clean one in it.</li><li>Allow the request to complete.</li></ol></div><div><br></div><div><b>Processing Intercepted Write Requests</b></div><div>Write requests are a little different: If the caller is only trying to write 1 sector (just the MBR), we can process the request ourselves; however, if the caller is trying to write multiple sectors (including the MBR), things get a bit more tricky. &nbsp;</div><div><br></div><div><ol><li>Map the caller's buffer (Srb-&gt;DataBuffer) into system memory and read the first 512 bytes (1 sector) into the clean MBR buffer.</li><li>Increment the caller's buffer (Srb-&gt;DataBuffer)&nbsp;by 512 bytes.</li><li>Decrement the transfer length (Srb-&gt;DataTransferLength) by 512 bytes.</li><li>Add 1 to the Logical Block Address (Stored in Cdb).</li><li>Subtract 1 from the Number of blocks to transfer (Stored in Cdb).</li><li>Pass the request to the real Miniport (this will write all the sectors the caller wanted, except the MBR).</li><li>Replace the original&nbsp;Srb-&gt;DataBuffer (Just to be safe).</li><li>If the call succeeded, add 512 to Srb-&gt;DataTransferLength (This is the number of bytes actually written to disk, because we skipped them MBR we need to make it seem like we didn't).</li><li>Allow the request to complete.</li></ol></div><div><br></div><h2>Proof of Concept</h2><div>I've written a proof of concept driver that will make the MBR appear to contain the following text:</div><blockquote>Is this the real code?<br>Is this just spoofed for me?<br>bots trying to hide.<br>Not sure of the legality.</blockquote>The system will be able to read/write to this fake MBR without modifying the real one, when the driver is unloaded or the system rebooted, the original MBR will still be intact and the face one will be gone. For some reason the driver will crash the system if loaded then unloaded many times in a row without reboot, but it's not a huge issue and I'm too lazy to debug.<br><br>GitHub of code: &nbsp;<a href="https://github.com/MalwareTech/FakeMBR/">https://github.com/MalwareTech/FakeMBR/</a><br><br><div><a href="http://1.bp.blogspot.com/-YVs5-6ziY5s/VLyfP3JF0TI/AAAAAAAAA4g/6bAdJ8-zUIU/s1600/MBRFun.png" imageanchor="1"><img border="0" src="http://1.bp.blogspot.com/-YVs5-6ziY5s/VLyfP3JF0TI/AAAAAAAAA4g/6bAdJ8-zUIU/s1600/MBRFun.png" height="368" width="640"></a></div><br><br></div>]]></content:encoded>
</item>
</channel>
</rss>
<!-- Generated in 0,05ms -->