<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Blog on Jon Oberheide</title>
		<link>https://jon.oberheide.org/blog/</link>
		<description>Recent content in Blog on Jon Oberheide</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
		
			<lastBuildDate>Fri, 15 May 2015 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://jon.oberheide.org/blog/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Estimating Google’s Two-Factor (2SV) Adoption with Pen, Paper, and Poor Math</title>
				<link>https://jon.oberheide.org/blog/2015/05/15/estimating-googles-two-factor-2sv-adoption/</link>
				<pubDate>Fri, 15 May 2015 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2015/05/15/estimating-googles-two-factor-2sv-adoption/</guid>
				<description>&lt;p&gt;As a two-factor authentication vendor, reporters often ask us about the state of strong authentication. A common question that comes up is: &lt;em&gt;How many people actually use two-factor authentication? What is the largest two-factor deployment?&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Well, the largest scale deployments of two-factor are often consumer use cases. Despite having very low adoption rates in terms of % of total users, large service providers like Google, Microsoft, Apple, etc have hundreds of million of users, dwarfing the 2FA deployments of even the largest enterprise use cases.&lt;/p&gt;</description>
			</item>
			<item>
				<title>ReKey: Fixing Android&#39;s Master Key Vulnerability</title>
				<link>https://jon.oberheide.org/blog/2013/07/16/rekey-fixing-androids-master-key-vulnerability/</link>
				<pubDate>Tue, 16 Jul 2013 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2013/07/16/rekey-fixing-androids-master-key-vulnerability/</guid>
				<description>&lt;ul&gt;&#xA;&lt;li&gt;Safely patch the Master Key vulnerabilities on your rooted Android device.&lt;/li&gt;&#xA;&lt;li&gt;Avoid waiting months or years for your carrier to deliver a security update.&lt;/li&gt;&#xA;&lt;li&gt;Created by your friendly neighborhood security experts at NEU and Duo Security.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2013/07/rekey.png&#34; alt=&#34;&#34; title=&#34;ReKey&#34; width=&#34;1239&#34; height=&#34;691&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;what-is-rekey&#34;&gt;What is ReKey?&lt;/h3&gt;&#xA;&lt;p&gt;Earlier this month, RFP from BlueBox &lt;a href=&#34;https://bluebox.com/corporate-blog/bluebox-uncovers-android-master-key/&#34;&gt;published&lt;/a&gt; a sneak preview of his upcoming &lt;a href=&#34;https://www.blackhat.com/&#34;&gt;BlackHat&lt;/a&gt; talk, detailing a vulnerability in the Android platform that affects nearly all Android devices. Soon after, a vulnerability of similar nature and impact was &lt;a href=&#34;https://translate.google.com/translate?sl=cn&amp;amp;tl=en&amp;amp;js=n&amp;amp;hl=en&amp;amp;ie=UTF-8&amp;amp;u=http://blog.sina.com.cn/s/blog_be6dacae0101bksm.html&#34;&gt;published&lt;/a&gt; on Chinese forum. Both of these &amp;ldquo;Master Key&amp;rdquo; vulnerabilities allow an attacker to modify the code of an Android package without affecting the signature of the package as verified by the package manager, which has &lt;a href=&#34;https://plus.google.com/113331808607528811927/posts/GxDA6111vYy&#34;&gt;serious implications&lt;/a&gt; when considering system-signed packages. From an end user perspective, the vulnerabilities allow an attacker to take full control of a user&amp;rsquo;s device.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Bypassing Google’s Two-Factor Authentication</title>
				<link>https://jon.oberheide.org/blog/2013/02/25/bypassing-googles-two-factor-authentication/</link>
				<pubDate>Mon, 25 Feb 2013 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2013/02/25/bypassing-googles-two-factor-authentication/</guid>
				<description>&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt; - An attacker can bypass Google&amp;rsquo;s two-step login verification, reset a user&amp;rsquo;s master password, and otherwise gain full account control, simply by capturing a user&amp;rsquo;s application-specific password (ASP).&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2013/02/asps1.png&#34; alt=&#34;Bypassing Google&amp;rsquo;s Two-Factor Authentication&#34; width=&#34;670&#34; height=&#34;485&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;(With all due respect to &lt;a href=&#34;https://www.google.com/goodtoknow/pdfs/ads.pdf&#34;&gt;Google&amp;rsquo;s &amp;ldquo;Good to Know&amp;rdquo; ad campaign&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;h3 id=&#34;abusing-googles-not-so--application-specific-passwords&#34;&gt;Abusing Google&amp;rsquo;s (not-so-) Application-Specific Passwords&lt;/h3&gt;&#xA;&lt;p&gt;Google’s 2-step verification makes for an interesting customer story in some of the challenges that go with such a wide-scale, comprehensive deployment of strong authentication. To make 2-step verification usable for all of their customers (and to bootstrap it into their rather expansive ecosystem without breaking everything), Google’s engineers had to make a few compromises. In particular, with 2-step verification came a notion of &lt;a href=&#34;https://support.google.com/accounts/bin/answer.py?hl=en&amp;amp;answer=185833&#34;&gt;“Application-Specific Passwords” (ASPs)&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Early Results from X-Ray: Over 50% of Android Devices are Vulnerable</title>
				<link>https://jon.oberheide.org/blog/2012/09/12/early-results-from-x-ray-over-50-of-android-devices-are-vulnerable/</link>
				<pubDate>Wed, 12 Sep 2012 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2012/09/12/early-results-from-x-ray-over-50-of-android-devices-are-vulnerable/</guid>
				<description>&lt;p&gt;Later this week, on Friday, I&amp;rsquo;ll be presenting the preliminary results from our X-Ray project at Rapid7&amp;rsquo;s &lt;a href=&#34;https://www.unitedsummit.org&#34;&gt;United Summit conference&lt;/a&gt; in San Francisco.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://xray.io&#34;&gt;X-Ray&lt;/a&gt; is Duo&amp;rsquo;s mobile app that performs &amp;ldquo;vulnerability assessment&amp;rdquo; on Android devices. Instead of scanning for malicious apps installed on the device like a mobile antivirus app would do (a nearly-intractable problem), X-Ray can identify known, yet unpatched, vulnerabilities in the mobile platform itself that could be exploited to take full control of users&amp;rsquo; phones. As carriers are very conservative in rolling out patches to fix vulnerabilities in the Android platform, users&amp;rsquo; mobile devices often remain vulnerable for months and even years.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Announcing X-Ray For Android</title>
				<link>https://jon.oberheide.org/blog/2012/07/25/announcing-xray-for-android/</link>
				<pubDate>Wed, 25 Jul 2012 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2012/07/25/announcing-xray-for-android/</guid>
				<description>&lt;p&gt;The first public of X-Ray is now available! X-Ray 1.0 supports 8 of the most common privilege escalation vulnerabilities that affect the Android platform.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2012/07/xray.png&#34; alt=&#34;&#34; title=&#34;X-Ray&#34; width=&#34;697&#34; height=&#34;576&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;what-is-x-ray&#34;&gt;What is X-Ray?&lt;/h3&gt;&#xA;&lt;p&gt;X-Ray allows you to scan your Android device for security vulnerabilities that put your device at risk.&lt;/p&gt;&#xA;&lt;p&gt;X-Ray was developed by the security experts at &lt;a href=&#34;https://www.duosecurity.com/?cid=70170000000sNXI&#34;&gt;Duo Security&lt;/a&gt;. We hope that X-Ray will empower users with knowledge of vulnerabilities on their devices and allow them to take action to improve their security. We encourage users to contact their carriers and ask for their devices to be patched.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Exploit Mitigations in Android Jelly Bean 4.1</title>
				<link>https://jon.oberheide.org/blog/2012/07/16/exploit-mitigations-in-android-jelly-bean-4-1/</link>
				<pubDate>Mon, 16 Jul 2012 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2012/07/16/exploit-mitigations-in-android-jelly-bean-4-1/</guid>
				<description>&lt;p&gt;It&amp;rsquo;s been a few months since our analysis of the &lt;a href=&#34;https://jon.oberheide.org/blog/2012/02/27/aslr-in-android-ice-cream-sandwich-4-0/&#34;&gt;new ASLR support in Android ICS 4.0&lt;/a&gt;. Given that ICS 4.0 is old news now with the &lt;a href=&#34;https://plus.google.com/u/0/112773496741623034196/posts/QLETQNekJ6D&#34;&gt;recent release&lt;/a&gt; of Jelly Bean 4.1, I thought it was about time to give an update on the ASLR capabilities as well as cover some of the other improvements in exploit mitigations present in Jelly Bean.&lt;/p&gt;&#xA;&lt;p&gt;As a quick recap of the current state of ASLR in Android ICS:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Dissecting the Android Bouncer</title>
				<link>https://jon.oberheide.org/blog/2012/06/21/dissecting-the-android-bouncer/</link>
				<pubDate>Thu, 21 Jun 2012 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2012/06/21/dissecting-the-android-bouncer/</guid>
				<description>&lt;p&gt;At &lt;a href=&#34;https://summercon.org/&#34;&gt;SummerCon&lt;/a&gt; this year, Charlie Miller and I&#xA;gave a talk on &lt;a href=&#34;https://googlemobile.blogspot.com/2012/02/android-and-security.html&#34;&gt;Android&amp;rsquo;s&#xA;Bouncer&lt;/a&gt;.&#xA;Our presentation materials are now &lt;a href=&#34;https://jon.oberheide.org/files/summercon12-bouncer.pdf&#34;&gt;publicly&#xA;available&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://jon.oberheide.org/files/summercon12-bouncer.pdf&#34;&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2012/06/android-bouncer.png&#34; alt=&#34;Dissecting the Android&#xA;Bouncer&#34; title=&#34;Dissecting the Android Bouncer&#34; width=&#34;577&#34; height=&#34;433&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The week before our presentation, we also posted a teaser video showing&#xA;our remote connect-back shell that we used to explore the Bouncer&#xA;environment:&lt;/p&gt;&#xA;&lt;p&gt;Enjoy!&lt;/p&gt;</description>
			</item>
			<item>
				<title>Announcing VPN Hunter</title>
				<link>https://jon.oberheide.org/blog/2012/03/21/announcing-vpn-hunter/</link>
				<pubDate>Wed, 21 Mar 2012 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2012/03/21/announcing-vpn-hunter/</guid>
				<description>&lt;p&gt;Today, we&amp;rsquo;re excited to announce the public launch of &lt;a href=&#34;https://www.vpnhunter.com&#34;&gt;VPN Hunter&lt;/a&gt;!&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.vpnhunter.com&#34;&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2012/03/vpnhunter.png&#34; alt=&#34;&#34; title=&#34;VPN Hunter&#34; width=&#34;345&#34; height=&#34;188&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;VPN Hunter is a service that discovers and classifies the VPNs and other remote access services of any organization. Given only an organization&amp;rsquo;s domain name (eg. msu.edu), VPN Hunter can find a wide range of remote access services associated with that organization, such as:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;SSL VPNs:&lt;/strong&gt; VPN Hunter will seek out SSL VPNs from vendors including Juniper, Cisco, Palo Alto, Citrix, Fortinet, F5, SonicWALL, Barracuda, Microsoft, and Array.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Remote Access:&lt;/strong&gt; VPN Hunter will also discover other remote access services including IPsec, PPTP, OpenVPN, RDP, and SSH.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Email Portals:&lt;/strong&gt; VPN Hunter will find a handful of web-based email portals including Outlook Web App, Gmail, and Zimbra.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Generic Login Sites:&lt;/strong&gt; VPN Hunter can also discover in-house web apps and other generic login sites that aren&amp;rsquo;t tied to a particular third-party vendor or product.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It&amp;rsquo;s no coincidence that VPN Hunter is able to discover many of the remote access services supported by &lt;a href=&#34;https://duo.com&#34;&gt;Duo&amp;rsquo;s two-factor platform&lt;/a&gt;. Given that remote services must be exposed to the public Internet inherently, it&amp;rsquo;s vital that they be protected with strong authentication. Having a simple username and password (that is easily guessed, phished, or otherwise stolen) as the only barrier between the Internet and your internal corporate network is far from ideal and borderline negligent.&lt;/p&gt;</description>
			</item>
			<item>
				<title>ASLR in Android Ice Cream Sandwich 4.0</title>
				<link>https://jon.oberheide.org/blog/2012/02/27/aslr-in-android-ice-cream-sandwich-4-0/</link>
				<pubDate>Mon, 27 Feb 2012 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2012/02/27/aslr-in-android-ice-cream-sandwich-4-0/</guid>
				<description>&lt;p&gt;When I first saw the release notes for the new Android Ice Cream&#xA;Sandwich (ICS) platform, I was excited to see that Google mentioned that&#xA;&amp;quot;Android 4.0 now provides address space layout randomization&amp;quot;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2012/03/aslr.png&#34; alt=&#34;ICS ASLR&#34; width=&#34;540&#34; height=&#34;166&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;For the uninitiated, &lt;a href=&#34;https://en.wikipedia.org/wiki/Address_space_layout_randomization&#34;&gt;ASLR&lt;/a&gt; randomizes&#xA;where various areas of memory (eg. stack, heap, libs, etc) are mapped in&#xA;the address space of a process. Combined with complementary mitigation&#xA;techniques such as non-executable memory protection (NX, XN, DEP,&#xA;W\^X, whatever you want to call it), ASLR makes the exploitation of&#xA;traditional memory corruption vulnerabilities&#xA;probabilisticallydifficult.&lt;/p&gt;</description>
			</item>
			<item>
				<title>CSAW CTF 2011 Kernel Exploitation Challenge</title>
				<link>https://jon.oberheide.org/blog/2011/11/27/csaw-ctf-2011-kernel-exploitation-challenge/</link>
				<pubDate>Sun, 27 Nov 2011 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2011/11/27/csaw-ctf-2011-kernel-exploitation-challenge/</guid>
				<description>&lt;p&gt;My challenge for this year&amp;rsquo;s NYU Poly &lt;a href=&#34;http://www.poly.edu/csaw2011/csaw-CTF&#34;&gt;CSAW&#xA;CTF&lt;/a&gt; finals was a Linux kernel&#xA;exploitation challenge disguised as a crypto challenge. The challenge&#xA;and solution are described below.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-challenge&#34;&gt;The Challenge&lt;/h2&gt;&#xA;&lt;p&gt;Each team is given unprivileged remote shell access to a Linux VM. There&#xA;is a custom kernel module, SqueamishOssifrage.ko, loaded.The full source&#xA;code of the kernel module is provided to the team. SqueamishOssifrage.c&#xA;is reproduced below (and can be downloaded&#xA;&lt;a href=&#34;https://jon.oberheide.org/files/SqueamishOssifrage.c&#34;&gt;here&lt;/a&gt;):&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;/*&#xA; * SqueamishOssifrage.c&#xA; * CSAW 2011 CTF Challenge Kernel Module&#xA; * Jon Oberheide &amp;lt;jon@oberheide.org&amp;gt;&#xA; *&#xA; * Decrypt the flag...and win?&#xA; *&#xA; * Information:&#xA; *&#xA; *   /proc/csaw/key:     get/set symmetric key&#xA; *   /proc/csaw/encrypt: get/set encrypted payload&#xA; *   /proc/csaw/decrypt: get/set decrypted payload&#xA; *&#xA; * Example usage:&#xA; *&#xA; *   # set a key&#xA; *   $ echo &amp;quot;this is a key&amp;quot; &amp;gt; /proc/csaw/key&#xA; *&#xA; *   # encrypt payload with that key&#xA; *   $ echo &amp;quot;hello world&amp;quot; &amp;gt; /proc/csaw/encrypt&#xA; *&#xA; *   # retrieve encrypted payload&#xA; *   $ cat /proc/csaw/encrypt &amp;gt; payload.enc&#xA; *&#xA; *   # decrypt encrypted payload&#xA; *   $ cat payload.enc &amp;gt; /proc/csaw/decrypt&#xA; *&#xA; *   # retrieve decrypted payload&#xA; *   $ cat /proc/csaw/decrypt &amp;gt; payload.dec&#xA; *&#xA; *   # view decrypted payload&#xA; *   $ cat payload.dec&#xA; *   hello world&#xA; */&#xA;&#xA;#include &amp;lt;linux/module.h&amp;gt;&#xA;#include &amp;lt;linux/kernel.h&amp;gt;&#xA;#include &amp;lt;linux/init.h&amp;gt;&#xA;#include &amp;lt;linux/proc_fs.h&amp;gt;&#xA;#include &amp;lt;linux/string.h&amp;gt;&#xA;#include &amp;lt;asm/uaccess.h&amp;gt;&#xA;&#xA;#define PROC_CSAW    &amp;quot;csaw&amp;quot;&#xA;#define PROC_KEY     &amp;quot;key&amp;quot;&#xA;#define PROC_ENCRYPT &amp;quot;encrypt&amp;quot;&#xA;#define PROC_DECRYPT &amp;quot;decrypt&amp;quot;&#xA;#define MAX_LENGTH   128&#xA;#define MAX_ROUNDS   64&#xA;#define DELTA        0x9e3779b9&#xA;&#xA;MODULE_LICENSE(&amp;quot;GPL&amp;quot;);&#xA;MODULE_AUTHOR(&amp;quot;Jon Oberheide&amp;quot;);&#xA;MODULE_DESCRIPTION(&amp;quot;CSAW 2011 CTF Challenge Kernel Module&amp;quot;);&#xA;&#xA;static struct proc_dir_entry *proc_csaw;&#xA;static struct proc_dir_entry *proc_key;&#xA;static struct proc_dir_entry *proc_decrypt;&#xA;static struct proc_dir_entry *proc_encrypt;&#xA;&#xA;static uint32_t key[4] = { 0, 0, 0, 0 };&#xA;static uint32_t rounds = 32;&#xA;static unsigned char enc_blob[MAX_LENGTH];&#xA;static unsigned char dec_blob[MAX_LENGTH];&#xA;&#xA;void encrypt(uint32_t k[], char *buf, int len, int rounds) __attribute__ ((optimize (0)));&#xA;void decrypt(uint32_t k[], char *buf, int len, int rounds) __attribute__ ((optimize (0)));&#xA;void scramble(uint32_t k[], uint32_t t[], uint32_t *s, uint32_t *d) __attribute__ ((optimize (0)));&#xA;void descramble(uint32_t k[], uint32_t t[], uint32_t *s, uint32_t *d) __attribute__ ((optimize (0)));&#xA;&#xA;void&#xA;scramble(uint32_t k[], uint32_t t[], uint32_t *s, uint32_t *d)&#xA;{&#xA;    uint32_t n, sbox[8];&#xA;    uint32_t y = t[0], z = t[1];&#xA;    uint32_t delta = DELTA, sum = 0;&#xA;&#xA;    for (n = 0; n &amp;lt; 8; n++) {&#xA;        sbox[n] = key[n % 4];&#xA;    }&#xA;    for (n = 0; n &amp;lt; 32; n++) {&#xA;        sum += delta;&#xA;        y += ((z &amp;lt;&amp;lt; 4) + k[0]) ^ (z+sum) ^ ((z &amp;gt;&amp;gt; 5) + k[1]);&#xA;        z += ((y &amp;lt;&amp;lt; 4) + k[2]) ^ (y+sum) ^ ((y &amp;gt;&amp;gt; 5) + k[3]);&#xA;    }&#xA;    t[0] = y; s = d + n; t[1] = z;&#xA;}&#xA;&#xA;void&#xA;encrypt(uint32_t k[], char *buf, int len, int rounds)&#xA;{&#xA;    int i;&#xA;&#xA;    if (rounds &amp;gt;= 0) {&#xA;        if (rounds % 3 == 0) {&#xA;            k[0] ^= k[1]; k[1] ^= k[0]; k[0] ^= k[1];&#xA;            k[2] ^= k[3]; k[3] ^= k[2]; k[2] ^= k[3];&#xA;        } else if (rounds % 3 == 1) {&#xA;            k[0] ^= k[2]; k[2] ^= k[0]; k[0] ^= k[2];&#xA;            k[1] ^= k[3]; k[3] ^= k[1]; k[1] ^= k[3];&#xA;        } else if (rounds % 3 == 2) {&#xA;            k[0] ^= k[3]; k[3] ^= k[0]; k[0] ^= k[3];&#xA;            k[2] ^= k[1]; k[1] ^= k[2]; k[2] ^= k[1];&#xA;        }&#xA;        encrypt(k, buf, len, rounds-1);&#xA;    } else {&#xA;        for (i = 0; i &amp;lt; len / 8; i++) {&#xA;            scramble(k, (uint32_t *)(buf + (i * 8)), (uint32_t *) 0, (uint32_t *) DELTA);&#xA;        }&#xA;    }&#xA;}&#xA;&#xA;void&#xA;descramble(uint32_t k[], uint32_t t[], uint32_t *s, uint32_t *d)&#xA;{&#xA;    uint32_t n, sbox[8];&#xA;    uint32_t y = t[0], z = t[1];&#xA;    uint32_t delta = DELTA, sum = delta &amp;lt;&amp;lt; 5;&#xA;&#xA;    for (n = 0; n &amp;lt; 8; n++) {&#xA;        sbox[n] = key[n % 4];&#xA;    }&#xA;    for (n = 0; n &amp;lt; 32; n++) {&#xA;        z -= ((y &amp;lt;&amp;lt; 4) + k[2]) ^ (y + sum) ^ ((y &amp;gt;&amp;gt; 5) + k[3]);&#xA;        y -= ((z &amp;lt;&amp;lt; 4) + k[0]) ^ (z + sum) ^ ((z &amp;gt;&amp;gt; 5) + k[1]);&#xA;        sum -= delta;&#xA;    }&#xA;    t[0] = y; s = d + n; t[1] = z;&#xA;}&#xA;&#xA;void&#xA;decrypt(uint32_t k[], char *buf, int len, int rounds)&#xA;{&#xA;    int i;&#xA;&#xA;    if (rounds &amp;gt;= 0) {&#xA;        if (rounds % 3 == 0) {&#xA;            k[0] ^= k[1]; k[1] ^= k[0]; k[0] ^= k[1];&#xA;            k[2] ^= k[3]; k[3] ^= k[2]; k[2] ^= k[3];&#xA;        } else if (rounds % 3 == 1) {&#xA;            k[0] ^= k[2]; k[2] ^= k[0]; k[0] ^= k[2];&#xA;            k[1] ^= k[3]; k[3] ^= k[1]; k[1] ^= k[3];&#xA;        } else if (rounds % 3 == 2) {&#xA;            k[0] ^= k[3]; k[3] ^= k[0]; k[0] ^= k[3];&#xA;            k[2] ^= k[1]; k[1] ^= k[2]; k[2] ^= k[1];&#xA;        }&#xA;        decrypt(k, buf, len, rounds-1);&#xA;    } else {&#xA;        for (i = 0; i &amp;lt; len / 8; i++) {&#xA;            descramble(k, (uint32_t *)(buf + (i * 8)), (uint32_t *) 0, (uint32_t *) DELTA);&#xA;        }&#xA;    }&#xA;}&#xA;&#xA;int&#xA;key_write(struct file *file, const char __user *ubuf, unsigned long count, void *data)&#xA;{&#xA;    char buf[MAX_LENGTH];&#xA;&#xA;    printk(KERN_INFO &amp;quot;csaw: called key_write\n&amp;quot;);&#xA;&#xA;    memset(buf, 0, sizeof(buf));&#xA;&#xA;    if (count &amp;gt; MAX_LENGTH) {&#xA;        count = MAX_LENGTH;&#xA;    }&#xA;    if (copy_from_user(&amp;amp;buf, ubuf, count)) {&#xA;        return -EFAULT;&#xA;    }&#xA;&#xA;    sscanf(buf, &amp;quot;%16c\t%d&amp;quot;, (char *) key, &amp;amp;rounds);&#xA;&#xA;    return count;&#xA;}&#xA;&#xA;int&#xA;key_read(char *page, char **start, off_t off, int count, int *eof, void *data)&#xA;{&#xA;    printk(KERN_INFO &amp;quot;csaw: called key_read\n&amp;quot;);&#xA;&#xA;    memcpy(page, key, sizeof(key));&#xA;&#xA;    return sizeof(key);&#xA;}&#xA;&#xA;int&#xA;encrypt_write(struct file *file, const char __user *ubuf, unsigned long count, void *data)&#xA;{&#xA;    char buf[MAX_LENGTH];&#xA;    uint32_t session[4];&#xA;&#xA;    printk(KERN_INFO &amp;quot;csaw: called encrypt_write\n&amp;quot;);&#xA;&#xA;    memset(buf, 0, sizeof(buf));&#xA;&#xA;    if (count &amp;gt; MAX_LENGTH) {&#xA;        count = MAX_LENGTH;&#xA;    }&#xA;    if (copy_from_user(&amp;amp;buf, ubuf, count)) {&#xA;        return -EFAULT;&#xA;    }&#xA;&#xA;    memcpy(session, key, sizeof(key));&#xA;&#xA;    encrypt(session, buf, sizeof(buf), rounds);&#xA;&#xA;    memcpy(enc_blob, buf, sizeof(buf));&#xA;&#xA;    return count;&#xA;}&#xA;&#xA;int&#xA;encrypt_read(char *page, char **start, off_t off, int count, int *eof, void *data)&#xA;{&#xA;    printk(KERN_INFO &amp;quot;csaw: called encrypt_read\n&amp;quot;);&#xA;&#xA;    memcpy(page, enc_blob, sizeof(enc_blob));&#xA;&#xA;    return sizeof(enc_blob);&#xA;}&#xA;&#xA;int&#xA;decrypt_write(struct file *file, const char __user *ubuf, unsigned long count, void *data)&#xA;{&#xA;    char buf[MAX_LENGTH];&#xA;    uint32_t session[4];&#xA;&#xA;    printk(KERN_INFO &amp;quot;csaw: called decrypt_write\n&amp;quot;);&#xA;&#xA;    memset(buf, 0, sizeof(buf));&#xA;&#xA;    if (count &amp;gt; MAX_LENGTH) {&#xA;        count = MAX_LENGTH;&#xA;    }&#xA;    if (copy_from_user(&amp;amp;buf, ubuf, count)) {&#xA;        return -EFAULT;&#xA;    }&#xA;&#xA;    memcpy(session, key, sizeof(key));&#xA;&#xA;    decrypt(session, buf, sizeof(buf), rounds);&#xA;&#xA;    memcpy(dec_blob, buf, sizeof(buf));&#xA;&#xA;    return count;&#xA;}&#xA;&#xA;int&#xA;decrypt_read(char *page, char **start, off_t off, int count, int *eof, void *data)&#xA;{&#xA;    printk(KERN_INFO &amp;quot;csaw: called decrypt_read\n&amp;quot;);&#xA;&#xA;    memcpy(page, dec_blob, sizeof(dec_blob));&#xA;&#xA;    return sizeof(dec_blob);&#xA;}&#xA;&#xA;int __init&#xA;csaw_init(void)&#xA;{&#xA;    printk(KERN_INFO &amp;quot;csaw: loading module\n&amp;quot;);&#xA;&#xA;    memset(enc_blob, 0, sizeof(enc_blob));&#xA;    memset(dec_blob, 0, sizeof(dec_blob));&#xA;&#xA;    proc_csaw = proc_mkdir(PROC_CSAW, NULL);&#xA;&#xA;    proc_key = create_proc_entry(PROC_KEY, 0666, proc_csaw);&#xA;    proc_key-&amp;gt;read_proc = key_read;&#xA;    proc_key-&amp;gt;write_proc = key_write;&#xA;&#xA;    proc_encrypt = create_proc_entry(PROC_ENCRYPT, 0666, proc_csaw);&#xA;    proc_encrypt-&amp;gt;read_proc = encrypt_read;&#xA;    proc_encrypt-&amp;gt;write_proc = encrypt_write;&#xA;&#xA;    proc_decrypt = create_proc_entry(PROC_DECRYPT, 0666, proc_csaw);&#xA;    proc_decrypt-&amp;gt;read_proc = decrypt_read;&#xA;    proc_decrypt-&amp;gt;write_proc = decrypt_write;&#xA;&#xA;    printk(KERN_INFO &amp;quot;csaw: created /proc/csaw entries\n&amp;quot;);&#xA;&#xA;    return 0;&#xA;}&#xA;&#xA;void __exit&#xA;csaw_exit(void)&#xA;{&#xA;    printk(KERN_INFO &amp;quot;csaw: unloading module\n&amp;quot;);&#xA;&#xA;    remove_proc_entry(PROC_KEY, proc_csaw);&#xA;    remove_proc_entry(PROC_ENCRYPT, proc_csaw);&#xA;    remove_proc_entry(PROC_DECRYPT, proc_csaw);&#xA;    remove_proc_entry(PROC_CSAW, NULL);&#xA;&#xA;    printk(KERN_INFO &amp;quot;csaw: removed /proc/csaw entries\n&amp;quot;);&#xA;}&#xA;&#xA;module_init(csaw_init);&#xA;module_exit(csaw_exit);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;a-crypto-challenge&#34;&gt;A Crypto Challenge?&lt;/h2&gt;&#xA;&lt;p&gt;Lots of crypto looking stuff, huh? As the header tells you, the kernel&#xA;module exposes an interface via /proc/csaw to set a key and&#xA;encrypt/decrypt payloads:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Tool releases: ksymhunter and kstructhunter</title>
				<link>https://jon.oberheide.org/blog/2011/09/08/tool-releases-ksymhunter-and-kstructhunter/</link>
				<pubDate>Thu, 08 Sep 2011 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2011/09/08/tool-releases-ksymhunter-and-kstructhunter/</guid>
				<description>&lt;p&gt;I&amp;rsquo;m releasing a couple tools I use internally for Linux kernel exploit&#xA;development: &lt;a href=&#34;https://github.com/jonoberheide/ksymhunter&#34;&gt;ksymhunter&lt;/a&gt;&#xA;and &lt;a href=&#34;https://web.archive.org/web/20180611022927/https://github.com/jonoberheide/kstructhunter&#34;&gt;kstructhunter&lt;/a&gt;.&#xA;They&amp;rsquo;re probably only useful for like ten people on the planet, but oh&#xA;well, enjoy!&lt;/p&gt;&#xA;&lt;h2 id=&#34;ksymhunter&#34;&gt;ksymhunter&lt;/h2&gt;&#xA;&lt;p&gt;Kernel symbols are definitely a useful resource when writing Linux&#xA;kernel exploits. Whether you&amp;rsquo;re &lt;a href=&#34;https://jon.oberheide.org/files/cve-2010-3437.c&#34;&gt;looking for particular&#xA;structures&lt;/a&gt; in kernel memory or pulling the old&#xA;&lt;a href=&#34;https://web.archive.org/web/20110807094548/http://grsecurity.net/%7Espender/wunderbar_emporium.tgz&#34;&gt;commit_creds&#xA;technique&lt;/a&gt; for&#xA;convenient privilege escalation, having access to a kernel symbol table&#xA;can be incredibly useful for an exploit writer.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Stackjackin&#39; 2: Electric Boogaloo</title>
				<link>https://jon.oberheide.org/blog/2011/07/06/stackjackin-2-electric-boogaloo/</link>
				<pubDate>Wed, 06 Jul 2011 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2011/07/06/stackjackin-2-electric-boogaloo/</guid>
				<description>&lt;p&gt;Last month at &lt;a href=&#34;https://summercon.org/&#34;&gt;SummerCon&lt;/a&gt;, Dan Rosenberg and I&#xA;talked about our &lt;a href=&#34;https://jon.oberheide.org/blog/2011/04/20/stackjacking-your-way-to-grsec-pax-bypass/&#34;&gt;stackjacking&#xA;technique&lt;/a&gt; for&#xA;exploiting kernel vulnerabilities on grsecurity/PaX-hardened Linux&#xA;kernels, in a presentation titled &amp;quot;Stackjacking and Other Kernel&#xA;Nonsense.&amp;quot;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2011/07/stackjacking.png&#34; alt=&#34;stackjacking&#34; width=&#34;532&#34; height=&#34;398&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;While we covered a lot of material from our original stackjacking&#xA;presentation, we also presented on a couple new items extending the&#xA;original stackjacking technique:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;We discussed about how enhancements to the vanilla Linux kernel,&#xA;such as&#xA;&lt;a href=&#34;https://web.archive.org/web/20110711184043/http://vulnfactory.org:80/blog/2011/06/05/smep-what-is-it-and-how-to-beat-it-on-linux/&#34;&gt;SMEP&lt;/a&gt;,&#xA;may make stackjacking an effective approach for vanilla kernel&#xA;exploitation. While an arbitrary write is currently still sufficient&#xA;for exploiting a vanilla Linux kernel, we may eventually (years?)&#xA;get to the point where the built-in protection mechanisms begin to&#xA;approach themitigationsoffered by grsecurity/PaX. Again, not really&#xA;important in the short-term, but hopefully we&#39;ll revive&#xA;stackjacking for use against vanilla kernels a few years from now. :-)&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;We also presented a revised stackjacking approach that is effective&#xA;against the stackjacking mitigations that &lt;a href=&#34;https://forums.grsecurity.net/viewtopic.php?f=7&amp;amp;t=2596&#34;&gt;spender released&#xA;not-so-quietly&lt;/a&gt; after&#xA;our HES presentation and before our Infiltrate presentation. To top&#xA;it off, the new technique allows exploitation with even less&#xA;attackerassumptions!&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
			</item>
			<item>
				<title>RSA-Proofing Our Duo Push Two-Factor Authentication</title>
				<link>https://jon.oberheide.org/blog/2011/06/21/rsa-proofing-our-duo-push-two-factor-authentication/</link>
				<pubDate>Tue, 21 Jun 2011 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2011/06/21/rsa-proofing-our-duo-push-two-factor-authentication/</guid>
				<description>&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2011/06/rsa.png&#34; alt=&#34;&#34; width=&#34;300&#34; height=&#34;182&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;So&amp;hellip;&lt;a href=&#34;https://www.rsa.com/node.aspx?id=3872&#34;&gt;RSA&lt;/a&gt; &lt;a href=&#34;https://www.rsa.com/node.aspx?id=3891&#34;&gt;happened&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;We haven&amp;rsquo;t commented much on the RSA breach, primarily because, instead of &lt;a href=&#34;https://en.wikipedia.org/wiki/Barratry&#34;&gt;ambulance chasing&lt;/a&gt;, we&amp;rsquo;ve been busy working on some technology to prevent RSA-style attacks from impacting our Duo Push authentication, which is the subject of today&amp;rsquo;s post.&lt;/p&gt;&#xA;&lt;p&gt;However, I think there are a couple interesting points that can be drawn from the RSA breach:&lt;/p&gt;&#xA;&lt;p&gt;First, the RSA breach has shown that two-factor technology is incredibly effective. The attackers targeting &lt;a href=&#34;https://www.informationweek.com/news/government/security/229700151&#34;&gt;Lockheed Martin&lt;/a&gt; and &lt;a href=&#34;https://www.wired.com/threatlevel/2011/05/l-3/&#34;&gt;company&lt;/a&gt; had to plan an entirely separate operation to compromise RSA&amp;rsquo;s internal secrets to even get their foot in the door of the defense contractors. While RSA&amp;rsquo;s implementation of two-factor may be suboptimal, the event bolsters the argument for deploying two-factor rather than undermining it.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Duo Push: The Next Generation of Two-Factor Authentication</title>
				<link>https://jon.oberheide.org/blog/2011/06/08/duo-push-the-next-generation-of-two-factor-authentication/</link>
				<pubDate>Wed, 08 Jun 2011 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2011/06/08/duo-push-the-next-generation-of-two-factor-authentication/</guid>
				<description>&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2011/06/iphone-android-push-for-blog.png&#34; alt=&#34;&#34; width=&#34;473&#34; height=&#34;449&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;We&amp;rsquo;re excited to announce that we&amp;rsquo;ve officially launched &lt;strong&gt;Duo Push&lt;/strong&gt;, a new authentication method that leverages modern smartphones to provide two-factor authentication that&amp;rsquo;s both resistant to the latest threats &lt;strong&gt;and&lt;/strong&gt; is actually enjoyable to use!&lt;/p&gt;&#xA;&lt;p&gt;But first, some background&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;When we first started Duo, we set out to create a two-factor authentication platform that was not only secure, but also easy to use and manage. We saw that two-factor authentication technologies were avoided not because they failed to offer an increase in security, but because their cost, management complexity, and user annoyance factor were prohibitively high. In addition, the &amp;ldquo;one authenticator fits all users&amp;rdquo; model employed by our competitors (&lt;a href=&#34;https://www.rsa.com&#34;&gt;OTP only&lt;/a&gt;, &lt;a href=&#34;http://www.phonefactor.com&#34;&gt;phone only&lt;/a&gt;, &lt;a href=&#34;https://web.archive.org/web/20110621065120/http://www.smspasscode.com:80/&#34;&gt;SMS only&lt;/a&gt;, etc), just didn&amp;rsquo;t fit the diversity of the user base needing two-factor authentication.&lt;/p&gt;</description>
			</item>
			<item>
				<title>When Angry Birds Attack: Android Edition</title>
				<link>https://jon.oberheide.org/blog/2011/05/28/when-angry-birds-attack-android-edition/</link>
				<pubDate>Sat, 28 May 2011 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2011/05/28/when-angry-birds-attack-android-edition/</guid>
				<description>&lt;p&gt;It&amp;rsquo;s been about six months since I reported a vulnerability in the&#xA;Android mobile platform that allowed the unprompted installation of&#xA;arbitrary applications with arbitrary permissions on a victim&amp;rsquo;s device.&#xA;While the vulnerability has long been fixed on Android handsets around&#xA;the world, I&amp;rsquo;ve yet to write up any technical details about it, and&#xA;it&amp;rsquo;s unlikely you&amp;rsquo;ve heard of it unless you were present at our&#xA;&lt;a href=&#34;https://jon.oberheide.org/files/shmoo11-teamjoch.pdf&#34;&gt;ShmooCon presentation&lt;/a&gt; earlier this year.&#xA;So without further ado, let&amp;rsquo;s dive into &amp;quot;When Angry Birds attack:&#xA;Android edition.&amp;quot;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Stackjacking Your Way to grsec/PaX Bypass</title>
				<link>https://jon.oberheide.org/blog/2011/04/20/stackjacking-your-way-to-grsec-pax-bypass/</link>
				<pubDate>Wed, 20 Apr 2011 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2011/04/20/stackjacking-your-way-to-grsec-pax-bypass/</guid>
				<description>&lt;p&gt;This April at Hackito Ergo Sum in Paris and Immunity&amp;rsquo;s Infiltrate in&#xA;Miami, &lt;a href=&#34;https://vulnfactory.org/&#34;&gt;Dan Rosenberg&lt;/a&gt; and I presented on a&#xA;technique to exploit grsecurity/PaX-hardened Linux kernels. Read on for&#xA;a brief overview of our presentation and a link to the full slides and&#xA;PoC code.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://jon.oberheide.org/files/stackjacking-infiltrate11.pdf&#34;&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2011/04/title.png&#34; alt=&#34;title&#34; width=&#34;512&#34; height=&#34;384&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-stackjacking-technique&#34;&gt;The Stackjacking Technique&lt;/h2&gt;&#xA;&lt;p&gt;In our slides, we presented a technique to exploit a&#xA;grsecurity/PaX-hardened Linux kernel (eg. GRKERNSEC_HIGH) given the&#xA;existence of two exploitation primitives:&lt;/p&gt;</description>
			</item>
			<item>
				<title>How I Almost Won Pwn2Own via XSS</title>
				<link>https://jon.oberheide.org/blog/2011/03/07/how-i-almost-won-pwn2own-via-xss/</link>
				<pubDate>Mon, 07 Mar 2011 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2011/03/07/how-i-almost-won-pwn2own-via-xss/</guid>
				<description>&lt;p&gt;No, seriously.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The good:&lt;/strong&gt; Google has patched a serious vulnerability I discovered in&#xA;the Android web market.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The bad:&lt;/strong&gt; Since the Android web market was launched earlier this&#xA;year, it was possible to remotely install arbitrary applications with&#xA;arbitrary permissions onto a victim&amp;rsquo;s phone simply by tricking them&#xA;into clicking a malicious link (either on their desktop OR phone). The&#xA;exploit works universally across all Android devices, versions, and&#xA;architectures.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Exploiting Stack Overflows in the Linux Kernel</title>
				<link>https://jon.oberheide.org/blog/2010/11/29/exploiting-stack-overflows-in-the-linux-kernel/</link>
				<pubDate>Mon, 29 Nov 2010 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2010/11/29/exploiting-stack-overflows-in-the-linux-kernel/</guid>
				<description>&lt;p&gt;In this post, I&amp;rsquo;ll introduce an exploitation technique for kernel stack&#xA;overflows in the Linux kernel. Keep in mind this does not refer to&#xA;buffer overflows on the kernel stack (whose exploitability is well&#xA;understood), but rather the improper expansion of the kernel stack&#xA;causing it to overlap with critical structures which may be subsequently&#xA;corrupted. This is a vulnerability class in the Linux kernel that I do&#xA;not believe have been exploited publicly in the past, but is relevant&#xA;due to a recent vulnerability in the Econet packet family.&lt;/p&gt;</description>
			</item>
			<item>
				<title>CSAW CTF 2010 Kernel Exploitation Challenge</title>
				<link>https://jon.oberheide.org/blog/2010/11/02/csaw-ctf-kernel-exploitation-challenge/</link>
				<pubDate>Tue, 02 Nov 2010 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2010/11/02/csaw-ctf-kernel-exploitation-challenge/</guid>
				<description>&lt;p&gt;The finals for NYU Poly&amp;rsquo;s &lt;a href=&#34;http://www.poly.edu/csaw-CTF&#34;&gt;CSAW CTF&lt;/a&gt; was&#xA;this past weekend in New York City. I thought I would post the kernel&#xA;exploitation challenge I developed for the final round. Feel free to try&#xA;your hand at solving it!&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-setup&#34;&gt;The Setup&lt;/h2&gt;&#xA;&lt;p&gt;Each team is given unprivileged remote shell access to a Linux VM. There&#xA;is a vulnerable kernel module (csaw.ko) loaded into memory:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;csaw@csaw ~ $ lsmod&#xA;Module Size Used by&#xA;csaw 1111 0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The kernel module exposes a /proc/csaw interface with which the team can&#xA;interact with and attempt to exploit the vulnerability contained in the&#xA;kernel module. Upon successful exploitation and privilege escalation,&#xA;the team can retrieve the key/flag hidden in the root-readable&#xA;/root/key.txt file.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Linux Kernel pktcdvd Memory Disclosure</title>
				<link>https://jon.oberheide.org/blog/2010/10/23/linux-kernel-pktcdvd-memory-disclosure/</link>
				<pubDate>Sat, 23 Oct 2010 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2010/10/23/linux-kernel-pktcdvd-memory-disclosure/</guid>
				<description>&lt;p&gt;A vulnerability in the pktcdvd driver in the Linux kernel allows for the&#xA;disclosure of 4 bytes of kernel memory. In this post, I&amp;rsquo;ll describe the&#xA;tad bit of magic that&amp;rsquo;s necessary to exploit the vulnerability on both&#xA;32-bit and 64-bit hosts to disclosure an arbitrary amount of kernel&#xA;memory.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-vulnerability&#34;&gt;The Vulnerability&lt;/h2&gt;&#xA;&lt;p&gt;The vulnerability was first introduced in 2.6.10 (way back in 2004) and&#xA;was recently discovered in late September 2010 by Dan Rosenberg. As&#xA;described by Dan:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Linux Kernel CAN SLUB Overflow</title>
				<link>https://jon.oberheide.org/blog/2010/09/10/linux-kernel-can-slub-overflow/</link>
				<pubDate>Fri, 10 Sep 2010 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2010/09/10/linux-kernel-can-slub-overflow/</guid>
				<description>&lt;p&gt;Ben Hawkes discovered a vulnerability in the Controller Area Network&#xA;(CAN) packet family in the Linux kernel that results in a controllable&#xA;overflow of a SLUB-allocated structure. As there&amp;rsquo;s not a whole lot of&#xA;modern, public examples of SLUB overflow exploits, I&amp;rsquo;ll describe my&#xA;exploit of the CAN vulnerability in detail.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-vulnerability&#34;&gt;The Vulnerability&lt;/h2&gt;&#xA;&lt;p&gt;Ben provides the full details of the vulnerability in his &lt;a href=&#34;https://web.archive.org/web/20100920074938/http://sota.gen.nz:80/af_can/&#34;&gt;blog&#xA;post&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;A controller area network is backed by the AF_CAN datagram socket&#xA;type. This socket is enabled by the CONFIG_CAN kernel configuration&#xA;option, so any kernel compiled with CONFIG_CAN and CONFIG_CAN_BCM&#xA;options were vulnerable. This included at least Ubuntu 10.04 and&#xA;Debian 5.0 (i&amp;rsquo;m told a pre-release version of Red Hat was also&#xA;affected).&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;The bug is an integer overflow in the sendmsg implementation for BCM&#xA;(broadcast manager) AF_CAN sockets which results in controlled&#xA;corruption of a kmalloc heap chunk. No physical CAN device is required&#xA;to trigger the overflow.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;The bcm_sendmsg function in net/can/bcm.c reads in a bcm_msg_head&#xA;structure from a user-supplied iovec:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;struct bcm_msg_head {&#xA;     __u32 opcode;&#xA;     __u32 flags;&#xA;     ...&#xA;     canid_t can_id;&#xA;     __u32 nframes;&#xA;     struct can_frame frames[0];&#xA;};&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;em&gt;The opcode field dictates the type of message processing that should&#xA;be performed by bcm_sendmsg. The vulnerability is in the RX_SETUP&#xA;operation, which is backed by the bcm_rx_setup function in&#xA;net/can/bcm.c (comments marked with BH):&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#define CFSIZ sizeof(struct can_frame)&#xA;&#xA;static int bcm_rx_setup(struct bcm_msg_head *msg_head, ...&#xA; // BH: the ifindex parameter is set to zero if&#xA; // BH: msg-&amp;gt;msg_name is NULL&#xA; ...&#xA;&#xA; op = bcm_find_op(&amp;amp;bo-&amp;gt;rx_ops, msg_head-&amp;gt;can_id,&#xA;                  ifindex);&#xA; // BH: by setting can_id to 0xdeadbeef, a NULL op&#xA; // BH: is returned&#xA; if (op) {&#xA;     ...&#xA; }&#xA; else {&#xA;    op = kzalloc(OPSIZ, GFP_KERNEL);&#xA;&#xA;    if (!op)&#xA;       return -ENOMEM;&#xA;&#xA;    op-&amp;gt;can_id    = msg_head-&amp;gt;can_id;&#xA;    op-&amp;gt;nframes   = msg_head-&amp;gt;nframes;&#xA;    // BH: nframes is controlled by the attacker&#xA;&#xA;    if (msg_head-&amp;gt;nframes &amp;gt; 1) {&#xA;       op-&amp;gt;frames = kmalloc(&#xA;                      msg_head-&amp;gt;nframes * CFSIZ,&#xA;                      GFP_KERNEL);&#xA;       // BH: integer overflow here, large nframes&#xA;       // BH: wraps around to cause a small alloc&#xA;       ...&#xA;&#xA;    }...&#xA;&#xA;    if (msg_head-&amp;gt;nframes) {&#xA;       err = memcpy_fromiovec((u8 *)op-&amp;gt;frames,&#xA;                        msg-&amp;gt;msg_iov,&#xA;                        msg_head-&amp;gt;nframes * CFSIZ);&#xA;       // BH: size field overflows to same value as&#xA;       // BH: the allocation, no corruption&#xA;                      ...&#xA;    } ...&#xA;&#xA;    do_rx_register = 1&#xA; }&#xA;&#xA; ...&#xA; if (do_rx_register) {&#xA;    if (ifindex) {&#xA;       // BH: ifindex is zero, as noted above&#xA;       ...&#xA;    } else&#xA;       err = can_rx_register(NULL, op-&amp;gt;can_id,&#xA;                        REGMASK(op-&amp;gt;can_id),&#xA;                        bcm_rx_handler, op, &amp;quot;bcm&amp;quot;);&#xA;&#xA;        // BH: can_rx_register explicitly&#xA;        // BH: allows registering to a NULL device&#xA;&#xA;        if (err) {&#xA;           ...&#xA;        }&#xA;    }&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;em&gt;Now at this point no memory corruption has occurred, but there is a&#xA;bcm_op structure registered for the NULL device under a can_id of&#xA;0xdeadbeef with a large value for nframes (e.g. nframes = 268435458)&#xA;and a small allocation for the frames buffer (e.g. 32 bytes). If the&#xA;RX_SETUP operation is called again on this operation structure, but&#xA;this time with a mid-sized nframes value (e.g. nframes = 512), then&#xA;the following &amp;lsquo;update&amp;rsquo; code in bcm_rx_setup is invoked:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;op = bcm_find_op(&amp;amp;bo-&amp;gt;rx_ops, msg_head-&amp;gt;can_id, ifindex);&#xA;// BH: op struct for 0xdeadbeef is returned&#xA;&#xA;if (op) {&#xA;   // BH: 512 &amp;lt; 268435458&#xA;   if (msg_head-&amp;gt;nframes &amp;gt; op-&amp;gt;nframes)&#xA;      return -E2BIG;&#xA;&#xA;   if (msg_head-&amp;gt;nframes) {&#xA;      // BH: writes 8192 attacker-controlled bytes&#xA;      // BH: in to a 32-byte buffer&#xA;      err = memcpy_fromiovec((u8 *)op-&amp;gt;frames,&#xA;                       msg-&amp;gt;msg_iov,&#xA;                       msg_head-&amp;gt;nframes * CFSIZ);&#xA;      ...&#xA;   }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;em&gt;This means that it&amp;rsquo;s possible to corrupt any amount of data&#xA;contiguous to the original &amp;lsquo;frames&amp;rsquo; kmalloc chunk with an&#xA;attacker-controlled value. The tough part from here is finding a good&#xA;way of normalizing the heap layout to get a consistent (aka&#xA;exploitable) crash. Needless to say that, with a bit of work, you can&#xA;get an arbitrary kernel-space write.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
			</item>
			<item>
				<title>Dexcode Teardown of the Android SMS Trojan</title>
				<link>https://jon.oberheide.org/blog/2010/08/10/dexcode-teardown-of-the-android-sms-trojan/</link>
				<pubDate>Tue, 10 Aug 2010 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2010/08/10/dexcode-teardown-of-the-android-sms-trojan/</guid>
				<description>&lt;p&gt;I got my hands on a copy of the recent&#xA;&lt;a href=&#34;https://it.slashdot.org/story/10/08/10/1626254/SMS-Trojan-Steals-From-Android-Owners?from=rss&#34;&gt;Android&lt;/a&gt;&#xA;&lt;a href=&#34;https://www.theregister.co.uk/2010/08/10/android_sms_trojan/&#34;&gt;SMS&lt;/a&gt;&#xA;&lt;a href=&#34;https://www.kaspersky.com/news?id=207576152&#34;&gt;trojan&lt;/a&gt; that commits toll&#xA;fraud via SMS messages to premium Russian shortcodes. What follows is a&#xA;brief teardown of the APK and disassembly of the trojan&amp;rsquo;s dexcode and&#xA;description of its malicious functionality. It&amp;rsquo;s incredibly simple in&#xA;nature so there&amp;rsquo;s not much detail to go into.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2010/08/android.png&#34; alt=&#34;android&#34; width=&#34;200&#34; height=&#34;189&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Package: RU.apk&#xA;Package Name: org.me.androidapplication1&#xA;Permissions Requested: android.permission.SEND_SMS&#xA;Contents:&#xA;    ./classes.dex&#xA;    ./res&#xA;    ./res/drawable&#xA;    ./res/drawable/icon.png&#xA;    ./res/layout&#xA;    ./res/layout/main.xml&#xA;    ./resources.arsc&#xA;    ./AndroidManifest.xml&#xA;    ./META-INF&#xA;    ./META-INF/MANIFEST.MF&#xA;    ./META-INF/CERT.RSA&#xA;    ./META-INF/CERT.SF&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;There&amp;rsquo;s not much to this trojan application. In fact, it appears to be&#xA;hastily built off of the HelloWorld example program distributed in the&#xA;Android SDK. Even the primary layout file (main.xml) contains nothing&#xA;but a single LinearLayout with a TextView saying &amp;quot;Hello Android from&#xA;NetBeans&amp;quot;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>A Peek Inside the GTalkService Connection</title>
				<link>https://jon.oberheide.org/blog/2010/06/28/a-peek-inside-the-gtalkservice-connection/</link>
				<pubDate>Mon, 28 Jun 2010 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2010/06/28/a-peek-inside-the-gtalkservice-connection/</guid>
				<description>&lt;p&gt;This posts aims to peek inside the Android GTalkService connection and&#xA;observe its protocol. In particular, we&amp;rsquo;re interested in the&#xA;INSTALL_ASSET message and whether or not it is protected by any&#xA;additional cryptographic signatures beyond the intended guarantees&#xA;provided by the SSL transport.&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-brief-introduction-to-the-gtalkservice&#34;&gt;A Brief Introduction to the GTalkService&lt;/h2&gt;&#xA;&lt;p&gt;If you haven&amp;rsquo;t read the &lt;a href=&#34;https://jon.oberheide.org/blog/2010/06/25/remote-kill-and-install-on-google-android/&#34;&gt;previous&#xA;post&lt;/a&gt; on&#xA;the GTalkService and INSTALL_ASSET/REMOVE_ASSET, do so first.&lt;/p&gt;&#xA;&lt;p&gt;In short, the GTalkService is a persistent connection maintained from&#xA;your Android phone to Google&amp;rsquo;s servers at all time. It allows Google to&#xA;push down messages to your phone in order to perform particular actions.&#xA;For example, when you click to install an app through the Android&#xA;Market, Google pushes down an INSTALL_ASSET to your phone which causes&#xA;it to fetch and install that application. When Google wants to &lt;a href=&#34;https://android-developers.blogspot.com/2010/06/exercising-our-remote-application.html&#34;&gt;remote&#xA;kill an&#xA;application&lt;/a&gt;&#xA;from your phone, it pushes down a REMOVE_ASSET message to your phone&#xA;which causes it to remove the particular application.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Remote Kill and Install on Google Android</title>
				<link>https://jon.oberheide.org/blog/2010/06/25/remote-kill-and-install-on-google-android/</link>
				<pubDate>Fri, 25 Jun 2010 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2010/06/25/remote-kill-and-install-on-google-android/</guid>
				<description>&lt;p&gt;In this post, I&amp;rsquo;ll talk about the REMOVE_ASSET and INSTALL_ASSET&#xA;mechanisms that can be invoked by Google via Android&amp;rsquo;s GTalkService to&#xA;not only remotely remove applications from an Android device but also&#xA;remotely install new applications.&lt;/p&gt;&#xA;&lt;h2 id=&#34;rootstrap-background&#34;&gt;RootStrap Background&lt;/h2&gt;&#xA;&lt;p&gt;So if you didn&amp;rsquo;t check out my &lt;a href=&#34;https://jon.oberheide.org/files/summercon10-androidhax-jonoberheide.pdf&#34;&gt;slides from&#xA;SummerCon&lt;/a&gt; last week in&#xA;NYC, I talked a bit about a program called RootStrap in the second half&#xA;of my talk. RootStrap is intended as an example of an application that&#xA;could be used to bootstrap a rootkit (hence the name). Summed up as&#xA;briefly as possible, RootStrap phones home periodically to fetch remote&#xA;native ARM code and executes it outside the Dalvik VM. An attacker could&#xA;use such an approach to gain a large install base for a seemingly&#xA;innocent application and then push down a local privilege escalation&#xA;exploit as soon as a new vulnerability is discovered in the Linux kernel&#xA;and root the device. Since carriers are fairly conservative in pushing&#xA;out OTA patches for their devices, an attacker could easily push out&#xA;their malicious payload before the devices were patched.&lt;/p&gt;</description>
			</item>
			<item>
				<title>SummerCon 2010 Slides</title>
				<link>https://jon.oberheide.org/blog/2010/06/21/summercon-2010-slides/</link>
				<pubDate>Mon, 21 Jun 2010 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2010/06/21/summercon-2010-slides/</guid>
				<description>&lt;p&gt;SummerCon was absurdly fun. Thanks for redpantz for putting on a great&#xA;event and all the NY guys for making it a blast. My talk was on a few&#xA;random Android topics...slides are available below. I threw everything&#xA;together about 12 hours before my talk so it&amp;rsquo;s a little rough around&#xA;the edges and a few slides have been redacted for now.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2010/06/summercon.png&#34; alt=&#34;summercon&#34; title=&#34;summercon&#34; width=&#34;500&#34; height=&#34;375&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>SOURCE Boston Slides</title>
				<link>https://jon.oberheide.org/blog/2010/04/25/source-boston-slides/</link>
				<pubDate>Sun, 25 Apr 2010 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2010/04/25/source-boston-slides/</guid>
				<description>&lt;p&gt;Just got back from SOURCE Boston. SOURCE was a great event: a great&#xA;line-up of speakers, fun social events (thanks to Rapid7 and iSEC for&#xA;sponsoring), and smooth execution (props to Stacy and Zach). My talk was&#xA;on the topic of Linux kernel security, slides are available&#xA;&lt;a href=&#34;https://jon.oberheide.org/files/source10-linuxkernel-jonoberheide.pdf&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://jon.oberheide.org/files/source10-linuxkernel-jonoberheide.pdf&#34;&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2010/04/pwnie.png&#34; alt=&#34;pwnie&#34; width=&#34;500&#34; height=&#34;373&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/a&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>ReiserFS .reiserfs_priv Vulnerability</title>
				<link>https://jon.oberheide.org/blog/2010/04/10/reiserfs-reiserfs_priv-vulnerability/</link>
				<pubDate>Sat, 10 Apr 2010 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2010/04/10/reiserfs-reiserfs_priv-vulnerability/</guid>
				<description>&lt;p&gt;A vulnerability in the ReiserFS filesystem of the Linux kernel (versions&#xA;&amp;lt;= 2.6.34-rc3) allows for the unprivileged reading and writing of&#xA;objects in the .reiserfs_priv path. Leveraging extended attributes and&#xA;POSIX file-based capabilities, this vulnerability allows for privilege&#xA;escalation on systems with a ReiserFS filesystem.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-vulnerability&#34;&gt;The Vulnerability&lt;/h2&gt;&#xA;&lt;p&gt;The vulnerability was introduced in May 2009 in &lt;a href=&#34;http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=677c9b2&#34;&gt;commit&#xA;677c9b2&lt;/a&gt;.&#xA;The commit was intended to simplify the logic around ReiserFS&amp;rsquo;s&#xA;privroot, a virtual path located at .reiserfs_priv in the root of the&#xA;fs mount that is used for storing internal filesystem information such&#xA;as extended attributes. The commit also had the unfortunate side effect&#xA;of exposing the privroot dentry (even without the expose_privroot mount&#xA;option enabled), allowing an unprivileged user to read/write the&#xA;filesystem information stored in .reiserfs_priv.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Linux Kernel x86-64 Register Leak</title>
				<link>https://jon.oberheide.org/blog/2009/10/04/linux-kernel-x86-64-register-leak/</link>
				<pubDate>Sun, 04 Oct 2009 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2009/10/04/linux-kernel-x86-64-register-leak/</guid>
				<description>&lt;p&gt;A recent vulnerability in the Linux kernel (versions &amp;lt;= 2.6.32-rc1)&#xA;allows the leakage of certain register contents. The x86-64 registers&#xA;r8-r11 may be leaked to 32-bit unprivileged userspace applications that&#xA;switch themselves into 64-bit mode.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;In order to understand this vulnerability, we first need to talk a bit&#xA;about the &lt;a href=&#34;https://en.wikipedia.org/wiki/X86-64&#34;&gt;x86-64 architecture&lt;/a&gt;&#xA;(aka amd64). One of the key design decisions of x86-64, which fueled its&#xA;adoption over IA-64, is its backward compatibility with 32-bit code. In&#xA;x86-64 long mode, there are two sub-modes controlled by the code segment&#xA;descriptor: compatibility mode and 64-bit mode. Therefore, our 64-bit&#xA;operating system can execute both 32-bit and 64-bit binaries without&#xA;issue. Of course, if we&amp;rsquo;re executing a 32-bit binary, we can access our&#xA;traditional 32-bit architecture registers and not any of the additional&#xA;register file added by x86-64.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Disabling Green Dam with Dam Burst</title>
				<link>https://jon.oberheide.org/blog/2009/09/28/disabling-green-dam-with-dam-burst/</link>
				<pubDate>Mon, 28 Sep 2009 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2009/09/28/disabling-green-dam-with-dam-burst/</guid>
				<description>&lt;p&gt;Dam Burst is a simple utility that allows an unprivileged user to&#xA;disable the censorship functionality of the &lt;a href=&#34;https://en.wikipedia.org/wiki/Green_Dam_Youth_Escort&#34;&gt;Green Dam Youth&#xA;Escort&lt;/a&gt; software.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/damburst-small-logo.png&#34; alt=&#34;damburst&#34; width=&#34;500&#34; height=&#34;96&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Dam Burst operates by injecting code into a running application and&#xA;removing the Green Dam hooks that enable it to monitor and block user&#xA;activity, effectively restoring the running application to its original&#xA;uncensored state.&lt;/p&gt;&#xA;&lt;p&gt;Unlike other tools that disable or uninstall the Green Dam software, Dam&#xA;Burst does not require administrative privileges. Since Dam Burst can be&#xA;run as an unprivileged user to disable the Green Dam censorware in&#xA;currently running applications, it is very effective in situations where&#xA;the user is restricted from obtaining administrator privileges and may&#xA;wish to avoid censorship (eg. public/internet cafe computers that the&#xA;user may not own).&lt;/p&gt;</description>
			</item>
			<item>
				<title>Linux Kernel getname() Stack Memory Disclosures</title>
				<link>https://jon.oberheide.org/blog/2009/08/29/linux-kernel-getname-stack-memory-disclosures/</link>
				<pubDate>Sat, 29 Aug 2009 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2009/08/29/linux-kernel-getname-stack-memory-disclosures/</guid>
				<description>&lt;p&gt;In this post, we&amp;rsquo;ll look at some kernel stack information disclosures&#xA;in the getname() functions of several socket AFs recently discovered in&#xA;the Linux kernel.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-vulnerability&#34;&gt;The Vulnerability&lt;/h2&gt;&#xA;&lt;p&gt;The getname() function of an address family in the kernel is used to&#xA;retrieve information about a given socket. This information, in the form&#xA;of a sockaddr struct, is accessed from userspace through the&#xA;getsockname(2) and getpeername(2) system calls for bound and connected&#xA;sockets respectively.&lt;/p&gt;</description>
			</item>
			<item>
				<title>PolyPack at USENIX WOOT &#39;09</title>
				<link>https://jon.oberheide.org/blog/2009/08/10/polypack-at-usenix-woot-09/</link>
				<pubDate>Mon, 10 Aug 2009 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2009/08/10/polypack-at-usenix-woot-09/</guid>
				<description>&lt;p&gt;We just presented our PolyPack research today at the USENIX Workshop on&#xA;Offensive Technologies (WOOT &amp;lsquo;09) in Montreal, Canada. Links to the&#xA;paper and presentation materials are after the jump.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2009/08/woot09.png&#34; alt=&#34;woot09&#34; title=&#34;woot09&#34; width=&#34;575&#34; height=&#34;92&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Paper: &lt;a href=&#34;https://jon.oberheide.org/files/woot09-polypack.pdf&#34;&gt;/files/woot09-polypack.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Presentation: &lt;a href=&#34;https://jon.oberheide.org/files/woot09-polypack-pres.pdf&#34;&gt;/files/woot09-polypack-pres.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;From the &lt;a href=&#34;https://web.archive.org/web/20090606051625/http://polypack.eecs.umich.edu:80/&#34;&gt;PolyPack website&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&amp;quot;PolyPack is a research project at the &lt;a href=&#34;https://web.archive.org/web/20090502010411/http://www.eecs.umich.edu:80/fjgroup/&#34;&gt;University of&#xA;Michigan&lt;/a&gt; aimed at understanding the&#xA;impact of malware packers on modern antivirus products. PolyPack&#xA;highlights the failure of signature-based antivirus against common,&#xA;widely available packers, investigates the role that diversity plays in&#xA;the capabilities of both the packers and antivirus engines, and&#xA;demonstrates the ease and efficacy with which an attacker could deploy&#xA;an online packing service for nefarious purposes in a deployment model&#xA;known as crimeware-as-a-service (CaaS).&lt;/p&gt;</description>
			</item>
			<item>
				<title>Hijacking Tinychat Screencasts</title>
				<link>https://jon.oberheide.org/blog/2009/07/12/hijacking-tinychat-screencasts/</link>
				<pubDate>Sun, 12 Jul 2009 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2009/07/12/hijacking-tinychat-screencasts/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://tinychat.com&#34;&gt;Tinychat&lt;/a&gt; is a sweet site that allows for simple&#xA;chat, video conferencing, and screencasting. In this post, I&amp;rsquo;ll detail&#xA;how to hijack Tinychat screencasts by injecting images of your own.&lt;/p&gt;&#xA;&lt;p&gt;I had played with Tinychat recently and decided to poke at it some more&#xA;when &lt;a href=&#34;https://www.room362.com/&#34;&gt;mubix&lt;/a&gt; held a Metasploit-related&#xA;screencast a couple days ago. Tinychat&amp;rsquo;s multimedia features operate&#xA;with a mix of JavaScript, Java, and Flash. Just looking at the initial&#xA;JavaScript used to set up the screencasting applet set off some alarms:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Analysis of a Trojaned ssh/sshd</title>
				<link>https://jon.oberheide.org/blog/2009/06/30/analysis-of-a-trojaned-ssh-sshd/</link>
				<pubDate>Tue, 30 Jun 2009 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2009/06/30/analysis-of-a-trojaned-ssh-sshd/</guid>
				<description>&lt;p&gt;Some information about a trojaned ssh client and sshd server discovered&#xA;in a recent compromise. I didn&amp;rsquo;t find any details on this particular&#xA;OpenSSH backdoor via Google, so hopefully this information will be of&#xA;use to anyone who runs into it on their boxes.&lt;/p&gt;&#xA;&lt;p&gt;The compromise of a group of small number of Linux boxes in a University&#xA;unit was first discovered when the attackers began launching ssh brute&#xA;force attacks from the boxes. Right off the bat, it was clear from the&#xA;noisy activity that the attackers were not very sophisticated and did&#xA;not recognize the immediate value of the compromised boxes.&lt;/p&gt;</description>
			</item>
			<item>
				<title>udev Local Privilege Escalation</title>
				<link>https://jon.oberheide.org/blog/2009/04/20/udev-local-privilege-escalation/</link>
				<pubDate>Mon, 20 Apr 2009 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2009/04/20/udev-local-privilege-escalation/</guid>
				<description>&lt;p&gt;A recent bug found by &lt;a href=&#34;https://c-skills.blogspot.com&#34;&gt;Sebastian Krahmer&lt;/a&gt;&#xA;in udev has considerable security impact across a wide range of Linux&#xA;distributions.&lt;/p&gt;&#xA;&lt;p&gt;At the core of the vulnerability is the udevd daemon, responsible for&#xA;receiving and handling various device events from the kernel. These&#xA;events are delivered to udevd via&#xA;&lt;a href=&#34;https://en.wikipedia.org/wiki/Netlink&#34;&gt;netlink&lt;/a&gt;, a socket family&#xA;(AF_NETLINK) commonly used for IPC between userspace applications and&#xA;the kernel. However, netlink is not exclusively for kernel/userspace&#xA;communication and can also be used to send messages between userspace&#xA;applications.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Panera Gift Card Security</title>
				<link>https://jon.oberheide.org/blog/2009/04/15/panera-gift-card-security/</link>
				<pubDate>Wed, 15 Apr 2009 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2009/04/15/panera-gift-card-security/</guid>
				<description>&lt;p&gt;A bit of information on Panera Bread&amp;rsquo;s gift card security, or lack&#xA;thereof.&lt;/p&gt;&#xA;&lt;p&gt;Traditional gift card security often involves a randomized account&#xA;number and a scratch-off PIN number. Randomized account numbers prevent&#xA;attackers from guessing valid accounts numbers to use. Scratch-off PIN&#xA;numbers prevent attackers from checking/using card numbers and from&#xA;going in to brick-and-mortar stores to capture numbers of unactiviated&#xA;cards on the racks (checkout clerks are advised to discard any cards&#xA;that already have the PIN scratched-off or otherwise tampered with).&#xA;Online websites also use CAPTCHAs and rate-limiting to avoid attackers&#xA;attempting to bruteforce card number space.&lt;/p&gt;</description>
			</item>
			<item>
				<title>dpkt Tutorial #4: AS Paths from MRT/BGP</title>
				<link>https://jon.oberheide.org/blog/2009/03/25/dpkt-tutorial-4-as-paths-from-mrt-bgp/</link>
				<pubDate>Wed, 25 Mar 2009 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2009/03/25/dpkt-tutorial-4-as-paths-from-mrt-bgp/</guid>
				<description>&lt;p&gt;Previously we looked at &lt;a href=&#34;https://jon.oberheide.org/blog/2008/08/25/dpkt-tutorial-1-icmp-echo/&#34;&gt;creating ICMP echo&#xA;requests&lt;/a&gt;, &lt;a href=&#34;https://jon.oberheide.org/blog/2008/10/15/dpkt-tutorial-2-parsing-a-pcap-file/&#34;&gt;parsing a PCAP&#xA;file&lt;/a&gt;, and &lt;a href=&#34;https://jon.oberheide.org/blog/2008/12/20/dpkt-tutorial-3-dns-spoofing/&#34;&gt;doing&#xA;DNS spoofing&lt;/a&gt; with the&#xA;&lt;a href=&#34;https://code.google.com/p/dpkt/&#34;&gt;dpkt&lt;/a&gt; framework. Today I will show how&#xA;to parse the AS paths of BGP messages out of MRT routing dumps.&lt;/p&gt;&#xA;&lt;p&gt;Parsing BGP routing information is fun. However, before projects like&#xA;&lt;a href=&#34;https://www.routeviews.org/&#34;&gt;RouteViews&lt;/a&gt; were around, getting a global&#xA;view of Internet routing in real-time simply wasn&amp;rsquo;t possible. But&#xA;thanks to RouteViews, we can extract useful routing information from the&#xA;&lt;a href=&#34;https://tools.ietf.org/html/draft-ietf-grow-mrt-10&#34;&gt;MRT&lt;/a&gt; dumps from a&#xA;number of providers&amp;rsquo; perspectives.&lt;/p&gt;</description>
			</item>
			<item>
				<title>ARBSEC 01 Wrap-Up</title>
				<link>https://jon.oberheide.org/blog/2009/03/07/arbsec-01-wrap-up/</link>
				<pubDate>Sat, 07 Mar 2009 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2009/03/07/arbsec-01-wrap-up/</guid>
				<description>&lt;p&gt;ARBSEC 01 was a great success! Thanks for everyone who came out, Bar&#xA;Louie for hosting, and dugsong for taking some pictures! Be sure to join&#xA;us for future &lt;a href=&#34;https://web.archive.org/web/20090227080029/http://arbsec.org:80/&#34;&gt;ARBSEC&lt;/a&gt; meetings, the first Wednesday&#xA;of each month.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://farm4.static.flickr.com/3400/3330267780_d90944c318.jpg&#34; alt=&#34;ARBSEC&#xA;01&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;br&gt;&#xA;jose, grue, steiza, svowels, mattbing, and more.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://farm4.static.flickr.com/3587/3329432995_4354bdb8b4.jpg&#34; alt=&#34;ARBSEC&#xA;01&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;br&gt;&#xA;honey, jono, olga, bfields, nuxi, and more.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://farm4.static.flickr.com/3331/3329431345_769ffe70e9.jpg&#34; alt=&#34;ARBSEC&#xA;01&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;br&gt;&#xA;Dropping some Barracuda 0-day!&lt;/p&gt;</description>
			</item>
			<item>
				<title>ARBSEC Officially Launched</title>
				<link>https://jon.oberheide.org/blog/2009/02/19/arbsec-officially-launched/</link>
				<pubDate>Thu, 19 Feb 2009 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2009/02/19/arbsec-officially-launched/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://web.archive.org/web/20090227080029/http://arbsec.org:80/&#34;&gt;ARBSEC&lt;/a&gt;, a CitySec-style meetup for security&#xA;professionals in the Ann Arbor area, has been officially launched! Our&#xA;first meeting, ARBSEC 01, will be at 6:00pm on March 4th at Bar Louie in&#xA;Ann Arbor.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2009/02/arbsec.png&#34; alt=&#34;arbsec&#34; title=&#34;arbsec&#34; width=&#34;527&#34; height=&#34;153&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;what&#34;&gt;What&lt;/h2&gt;&#xA;&lt;p&gt;An informal meetup of information security professionals in Ann Arbor.&#xA;Unlike other meetups, you will not be expected to pay dues, &amp;quot;join up&amp;quot;,&#xA;or present a zero-day exploit to attend.&lt;/p&gt;&#xA;&lt;h2 id=&#34;where&#34;&gt;Where&lt;/h2&gt;&#xA;&lt;p&gt;ARBSEC 01 is held at Bar Louie, located at 401 E Liberty St, on the&#xA;northeast corner of Liberty and Division. We&amp;rsquo;ll likely be in the back&#xA;patio area.&lt;/p&gt;</description>
			</item>
			<item>
				<title>dpkt Tutorial #3: DNS Spoofing</title>
				<link>https://jon.oberheide.org/blog/2008/12/20/dpkt-tutorial-3-dns-spoofing/</link>
				<pubDate>Sat, 20 Dec 2008 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2008/12/20/dpkt-tutorial-3-dns-spoofing/</guid>
				<description>&lt;p&gt;In our &lt;a href=&#34;https://jon.oberheide.org/blog/2008/08/25/dpkt-tutorial-1-icmp-echo/&#34;&gt;first&lt;/a&gt; and&#xA;&lt;a href=&#34;https://jon.oberheide.org/blog/2008/10/15/dpkt-tutorial-2-parsing-a-pcap-file/&#34;&gt;second&lt;/a&gt; dpkt&#xA;tutorials, we looked at the simple construction and parsing of packets&#xA;respectively. Our third tutorial combines both parsing and construction&#xA;of packets in a single utility for performing DNS spoofing (a la&#xA;dsniff&amp;rsquo;s dnsspoof).&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://code.google.com/p/dpkt/&#34;&gt;dpkt&lt;/a&gt; is a sweet framework for creating&#xA;and parsing packets. While dpkt doesn&amp;rsquo;t have much documentation, once&#xA;you get the hang of using one module, the rest fall into place fairly&#xA;easily. I&amp;rsquo;ll be doing a number of dpkt tutorials with simple tasks in&#xA;hopes of providing some &amp;quot;documentation by example&amp;quot;. If you have any&#xA;tasks you&amp;rsquo;d like to see done in dpkt, drop me a line.&lt;/p&gt;</description>
			</item>
			<item>
				<title>VirusTotal Python Submission Script</title>
				<link>https://jon.oberheide.org/blog/2008/11/20/virustotal-python-submission-script/</link>
				<pubDate>Thu, 20 Nov 2008 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2008/11/20/virustotal-python-submission-script/</guid>
				<description>&lt;p&gt;Here is a simple python script for batch malware submissions to&#xA;VirusTotal via its email interface. Simply replace the SMTP-related&#xA;variables at the top of the script and you&amp;rsquo;re ready to rock!&lt;/p&gt;&#xA;&lt;p&gt;Download &lt;a href=&#34;https://jon.oberheide.org/images/2008/11/vtsubmit.py&#34;&gt;vtsubmit.py&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python&#xA;&#xA;# vtsubmit.py&#xA;# VirusTotal Submission Script&#xA;# Jon Oberheide &amp;lt;jon@oberheide.org&amp;gt;&#xA;# http://jon.oberheide.org&#xA;&#xA;import os, sys, email, smtplib, hashlib&#xA;&#xA;SMTP_HOST = &#39;_HOST_&#39;&#xA;SMTP_PORT = 587&#xA;SMTP_USER = &#39;_USER_&#39;&#xA;SMTP_PASS = &#39;_PASS_&#39;&#xA;&#xA;TO_ADDR   = &#39;scan@virustotal.com&#39;&#xA;FROM_ADDR = &#39;_EMAIL_&#39;&#xA;&#xA;def main():&#xA;    if len(sys.argv) == 1:&#xA;    print &#39;please specify files to submit&#39;&#xA;    sys.exit(1)&#xA;&#xA;    filelist = sys.argv[1:]&#xA;    total = len(filelist)&#xA;    progress = 0&#xA;&#xA;    for filename in filelist:&#xA;    progress += 1&#xA;    data = open(filename, &#39;rb&#39;).read()&#xA;    sha1 = hashlib.sha1(data).hexdigest()&#xA;    base = os.path.basename(filename)&#xA;&#xA;    print &#39;%d of %d: %s (%s)&#39; % (progress, total, base, sha1)&#xA;&#xA;    msg = email.MIMEMultipart.MIMEMultipart()&#xA;    msg[&#39;From&#39;] = FROM_ADDR&#xA;    msg[&#39;To&#39;] = TO_ADDR&#xA;    msg[&#39;Date&#39;] = email.Utils.formatdate()&#xA;    msg[&#39;Subject&#39;] = &#39;SCAN&#39;&#xA;&#xA;    part = email.MIMEBase.MIMEBase(&#39;application&#39;, &#39;octet-stream&#39;)&#xA;    part.set_payload(data)&#xA;    email.Encoders.encode_base64(part)&#xA;    part.add_header(&#39;Content-Disposition&#39;, &#39;attachment; filename=&amp;quot;%s&amp;quot;&#39; % base)&#xA;    msg.attach(part)&#xA;&#xA;    smtp = smtplib.SMTP(host=SMTP_HOST, port=SMTP_PORT)&#xA;    if SMTP_USER and SMTP_PASS:&#xA;        smtp.starttls()&#xA;        smtp.login(SMTP_USER, SMTP_PASS)&#xA;    smtp.sendmail(FROM_ADDR, TO_ADDR, msg.as_string())&#xA;    smtp.close()&#xA;&#xA;if __name__ == &#39;__main__&#39;:&#xA;    main()&#xA;&lt;/code&gt;&lt;/pre&gt;</description>
			</item>
			<item>
				<title>dpkt Tutorial #2: Parsing a PCAP File</title>
				<link>https://jon.oberheide.org/blog/2008/10/15/dpkt-tutorial-2-parsing-a-pcap-file/</link>
				<pubDate>Wed, 15 Oct 2008 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2008/10/15/dpkt-tutorial-2-parsing-a-pcap-file/</guid>
				<description>&lt;p&gt;As we showed in the &lt;a href=&#34;https://jon.oberheide.org/blog/2008/08/25/dpkt-tutorial-1-icmp-echo/&#34;&gt;first dpkt&#xA;tutorial&lt;/a&gt;, dpkt makes it&#xA;simple to construct packets. dpkt is equally useful for parsing packets&#xA;and files, so in this second tutorial we will demonstrate parsing a PCAP&#xA;file and the packets contained within it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://code.google.com/p/dpkt/&#34;&gt;dpkt&lt;/a&gt; is a sweet framework for creating&#xA;and parsing packets. While dpkt doesn&amp;rsquo;t have much documentation, once&#xA;you get the hang of using one module, the rest fall into place fairly&#xA;easily. I&amp;rsquo;ll be doing a number of dpkt tutorials with simple tasks in&#xA;hopes of providing some &amp;quot;documentation by example&amp;quot;. If you have any&#xA;tasks you&amp;rsquo;d like to see done in dpkt, drop me a line.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Bash Brace Expansion Cleverness</title>
				<link>https://jon.oberheide.org/blog/2008/09/04/bash-brace-expansion-cleverness/</link>
				<pubDate>Thu, 04 Sep 2008 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2008/09/04/bash-brace-expansion-cleverness/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://www.gnu.org/software/bash/manual/bashref.html#Brace-Expansion&#34;&gt;Brace&#xA;expansion&lt;/a&gt;&#xA;is a nice feature in the Bash interpreter that happened to be exactly&#xA;what I needed during an audit. A good thing to log away in memory in&#xA;case you ever find yourself in a pen-test environment with similar&#xA;constraints.&lt;/p&gt;&#xA;&lt;h2 id=&#34;bash-command-injection&#34;&gt;Bash Command Injection&lt;/h2&gt;&#xA;&lt;p&gt;During an audit of a popular email appliance, I encountered a scenario&#xA;where attacker controlled input was improperly sanitized and passed as&#xA;the argument to a command in a shell interpreter. These vulnerabilities&#xA;are quite common and most commonly result in the attacker being able to&#xA;inject his own commands via the input vector which are then executed by&#xA;the shell.&lt;/p&gt;</description>
			</item>
			<item>
				<title>dpkt Tutorial #1: ICMP Echo</title>
				<link>https://jon.oberheide.org/blog/2008/08/25/dpkt-tutorial-1-icmp-echo/</link>
				<pubDate>Mon, 25 Aug 2008 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2008/08/25/dpkt-tutorial-1-icmp-echo/</guid>
				<description>&lt;p&gt;In this dpkt tutorial, I will demonstrate how to construct and send a&#xA;simple ICMP echo packet.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://code.google.com/p/dpkt/&#34;&gt;dpkt&lt;/a&gt; is a sweet framework for creating&#xA;and parsing packets. While dpkt doesn&amp;rsquo;t have much documentation, once&#xA;you get the hang of using one module, the rest fall into place fairly&#xA;easily. I&amp;rsquo;ll be doing a number of dpkt tutorials with simple tasks in&#xA;hopes of providing some &amp;quot;documentation by example&amp;quot;. If you have any&#xA;tasks you&amp;rsquo;d like to see done in dpkt, drop me a line.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Hardening DNS with IP TTLs</title>
				<link>https://jon.oberheide.org/blog/2008/08/10/hardening-dns-with-ip-ttls/</link>
				<pubDate>Sun, 10 Aug 2008 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2008/08/10/hardening-dns-with-ip-ttls/</guid>
				<description>&lt;p&gt;During Paul Vixie&amp;rsquo;s talk at WOOT on some of the operational challenges&#xA;of deploying source port randomization functonality in BIND, I started&#xA;thinking of a few simple ways to harden DNS infrastructure against&#xA;&lt;a href=&#34;https://www.kb.cert.org/vuls/id/800113&#34;&gt;VU#800113&lt;/a&gt; by leveraging the IP&#xA;TTL value.&lt;/p&gt;&#xA;&lt;h2 id=&#34;dns-cache-poisoning&#34;&gt;DNS Cache Poisoning&lt;/h2&gt;&#xA;&lt;p&gt;In order to increase the resilience of DNS against Dan Kaminsky&amp;rsquo;s&#xA;&lt;a href=&#34;https://www.kb.cert.org/vuls/id/800113&#34;&gt;cache poisoning attack&lt;/a&gt;, source&#xA;port randomization has been added to recursive DNS resolvers. Now, in&#xA;addition to guessing the 16-bit TXID, the attacker must also guess the&#xA;16-bit source port that the resolver used for the particular query.&#xA;While this greatly increases the amount of time the attacker must spend&#xA;to successfully poison a cache, it does not completely resolve the&#xA;problem.&lt;/p&gt;</description>
			</item>
			<item>
				<title>HotSec 2008 and USENIX Security 2008</title>
				<link>https://jon.oberheide.org/blog/2008/08/02/hotsec-2008-and-usenix-security-2008/</link>
				<pubDate>Sat, 02 Aug 2008 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2008/08/02/hotsec-2008-and-usenix-security-2008/</guid>
				<description>&lt;p&gt;I&amp;rsquo;m back from San Jose finally and while I won&amp;rsquo;t be breaking down a&#xA;full review of &lt;a href=&#34;https://www.usenix.org/event/hotsec08/&#34;&gt;HotSec&lt;/a&gt; and&#xA;&lt;a href=&#34;https://www.usenix.org/events/sec08/&#34;&gt;USENIX Security&lt;/a&gt; like I did for&#xA;WOOT, I thought I would point out some of the more interesting&#xA;presentations I was able to attend.&lt;/p&gt;&#xA;&lt;h2 id=&#34;hotsec-2008&#34;&gt;HotSec 2008&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2008/10/hotsec2008.png&#34; alt=&#34;hotsec 2008&#34; width=&#34;500&#34; height=&#34;80&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Panic Passwords: Authenticating under Duress&lt;/strong&gt;&lt;br&gt;&#xA;&lt;em&gt;Jeremy Clark and Urs Hengartner, University of Waterloo&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Some interesting duress schemes were presented such as 5-dictionary&#xA;(using 5 distinct words from dictionary to prevent from invalid keys&#xA;being interpreted as a duress key).&lt;/p&gt;</description>
			</item>
			<item>
				<title>WOOT 2008: The Good, The Bad, and The Ugly</title>
				<link>https://jon.oberheide.org/blog/2008/07/28/woot-2008-the-good-the-bad-and-the-ugly/</link>
				<pubDate>Mon, 28 Jul 2008 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2008/07/28/woot-2008-the-good-the-bad-and-the-ugly/</guid>
				<description>&lt;p&gt;Day one of my trip out to San Jose to attend the WOOT, HotSec, and&#xA;USENIX Security trifecta is over. The &lt;a href=&#34;https://www.usenix.org/events/woot08/&#34;&gt;2nd Workshop on Offensive&#xA;Technologies&lt;/a&gt; (WOOT) took place&#xA;today and I&amp;rsquo;ll be breaking it down with &amp;quot;The Good, The Bad, and The&#xA;Ugly&amp;quot;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2008/10/woot2008.png&#34; alt=&#34;woot 2008&#34; width=&#34;500&#34; height=&#34;80&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ll be discussing a few of the presentations at WOOT today: the ones&#xA;that peaked my interest (The Good), the ones that didn&amp;rsquo;t meet my&#xA;expectations (The Bad), and the funny or miscellaneous topics that were&#xA;discussed (The Ugly). WOOT started off on a good note with an impressive&#xA;intro video from Tal and Paul Vixie speaking about some of the&#xA;unexpected operational issues involved when enabling source port&#xA;randomization for resolvers. The rest of the conference went smoothly&#xA;and was on par with last year&amp;rsquo;s WOOT. I had to step out during the&#xA;session with &lt;a href=&#34;https://www.cs.ucsb.edu/~vigna/&#34;&gt;Giovanni&amp;rsquo;s&lt;/a&gt; phishing&#xA;study and &lt;a href=&#34;http://www.stanford.edu/~stinson/&#34;&gt;Elizabeth&amp;rsquo;s&lt;/a&gt;&#xA;botnet-related paper, so I unfortunately won&amp;rsquo;t be able to comment on&#xA;those presentations.&lt;/p&gt;</description>
			</item>
			<item>
				<title>PDPT: Passive DNS Port Test</title>
				<link>https://jon.oberheide.org/blog/2008/07/21/pdpt-passive-dns-port-test/</link>
				<pubDate>Mon, 21 Jul 2008 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2008/07/21/pdpt-passive-dns-port-test/</guid>
				<description>&lt;p&gt;The Passive DNS Port Test (PDPT) tool acts as a passive DNS monitor to&#xA;flag resolvers that may be vulnerable to the cache poisoning issue&#xA;described in &lt;a href=&#34;https://www.kb.cert.org/vuls/id/800113&#34;&gt;CERT VU #800113&lt;/a&gt;.&#xA;Similar to OARC&amp;rsquo;s porttest, this monitor will judge the source port&#xA;behavior of resolvers based on the standard deviation of observed source&#xA;ports.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-passive-approach&#34;&gt;The Passive Approach&lt;/h2&gt;&#xA;&lt;p&gt;Another VU #800113-related testing tool? Of course, we&amp;rsquo;ve already seen&#xA;a number of tools released to help administrators identify and patch&#xA;vulnerable resolvers: Dan has the &lt;a href=&#34;https://www.doxpara.com&#34;&gt;DNS Checker&lt;/a&gt;&#xA;tool on his website to allow visitors to test their resolvers. OARC has&#xA;the &lt;a href=&#34;https://www.dns-oarc.net/oarc/services/porttest&#34;&gt;porttest&lt;/a&gt; service&#xA;available to test the randomness of a specific resolver using dig. Niels&#xA;has released a &lt;a href=&#34;https://www.monkey.org/~provos/dnspredict.py&#34;&gt;tool&lt;/a&gt; to&#xA;test the randomness of the source ports and query ids of your resolver&#xA;and an &lt;a href=&#34;https://www.provos.org/index.php?/archives/43-DNS-Testing-Image.html&#34;&gt;embeddable&#xA;image&lt;/a&gt;&#xA;to place on a website to test the resolvers of the site&amp;rsquo;s visitors.&#xA;Jose Avila has released a&#xA;&lt;a href=&#34;https://www.onzra.com/CacheAudit-Latest.tgz&#34;&gt;tool&lt;/a&gt; to periodically dump&#xA;the cache of a resolver and check for potential poisoning.&lt;/p&gt;</description>
			</item>
			<item>
				<title>UofM-Specific Phishing Campaign</title>
				<link>https://jon.oberheide.org/blog/2008/07/21/uofm-specific-phishing-campaign/</link>
				<pubDate>Mon, 21 Jul 2008 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2008/07/21/uofm-specific-phishing-campaign/</guid>
				<description>&lt;p&gt;While receiving phishing emails in my University inbox is a common&#xA;occurrence, a recent email caught my eye due to its increased&#xA;sophistication and University-specific information.&lt;/p&gt;&#xA;&lt;h2 id=&#34;email-contents&#34;&gt;Email Contents&lt;/h2&gt;&#xA;&lt;pre&gt;&lt;code&gt;Dear Umich.edu WEBLOGIN Subscriber&#xA;&#xA;To complete your Umich.edu WEBLOGIN account, you must reply to this email&#xA;immediately and enter your password here (*********)&#xA;&#xA;Failure to do this will immediately render your email address&#xA;deactivated from our database.&#xA;&#xA;You can also confirm your email address by logging into your&#xA;Umich.edu WEBLOGIN account at https://weblogin.umich.edu/&#xA;&#xA;Thank you for using Umich.edu!&#xA;&#xA;THE Umich.edu TEAM&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;At first, this email appears to be a standard phishing template where&#xA;the email receipient&amp;rsquo;s domain name is simply inserted in the&#xA;appropriate places (eg. &amp;quot;Umich.edu&amp;quot;). These types of phishing email&#xA;are very common and don&amp;rsquo;t require any special intelligence about the&#xA;target.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Beware of Google App Engine SDK</title>
				<link>https://jon.oberheide.org/blog/2008/04/09/beware-of-google-app-engine-sdk/</link>
				<pubDate>Wed, 09 Apr 2008 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2008/04/09/beware-of-google-app-engine-sdk/</guid>
				<description>&lt;p&gt;An easily exploited vulnerability in Google App Engine&amp;rsquo;s SDK can put&#xA;your development servers at risk. While this bug is trivial to fix,&#xA;engineers at Google have declined to address the vulnerability, so be&#xA;cautious when using the SDK to develop your web service.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-vulnerability&#34;&gt;The Vulnerability&lt;/h2&gt;&#xA;&lt;p&gt;The vulnerability exists in the mail API of the Google App Engine SDK,&#xA;specifically in&#xA;&lt;em&gt;&lt;a href=&#34;https://code.google.com/p/googleappengine/source/browse/trunk/google/appengine/api/mail_stub.py&#34;&gt;google/appengine/api/mail_stub.py&lt;/a&gt;&lt;/em&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;def _SendSendmail(self, mime_message,&#xA;               popen=subprocess.Popen,&#xA;               sendmail_command=&#39;sendmail&#39;):&#xA;&#xA; try:&#xA;   tos = [mime_message[to] for to in [&#39;To&#39;, &#39;Cc&#39;, &#39;Bcc&#39;] if mime_message[to]]&#xA;  sendmail_command = &#39;%s %s&#39; % (sendmail_command, &#39; &#39;.join(tos))&#xA;&#xA;   try:&#xA;   child = popen(sendmail_command,&#xA;               shell=True,&#xA;               stdin=subprocess.PIPE,&#xA;               stdout=subprocess.PIPE)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The code constructs the command line arguments that will be passed to&#xA;sendmail and executed by the shell interpreter (eg. &amp;quot;/bin/sh -c&#xA;&amp;lsquo;sendmail_command&amp;rsquo;&amp;quot;). Unfortunately, since the To/Cc/Bcc entries are&#xA;not sanitized before the command line arguments are constructed, an&#xA;attacker could specify a malicious input that causes the shell&#xA;interpreter to execute any command the attacker desires.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Black Hat DC 2008 Briefings</title>
				<link>https://jon.oberheide.org/blog/2008/02/22/black-hat-dc-2008-briefings/</link>
				<pubDate>Fri, 22 Feb 2008 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2008/02/22/black-hat-dc-2008-briefings/</guid>
				<description>&lt;p&gt;Just arrived home from Washington, DC where I attended and presented at&#xA;the &lt;a href=&#34;https://www.blackhat.com&#34;&gt;Black Hat DC Briefings&lt;/a&gt;. I was fairly busy&#xA;throughout the briefings and didn&amp;rsquo;t make it to as many presentations as&#xA;I hoped, but I thought I&amp;rsquo;d detail a few of the more interesting ones.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2008/03/headbak2.jpg&#34; alt=&#34;headbak2.jpg&#34; width=&#34;500&#34; height=&#34;147&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;presentations-of-interest&#34;&gt;Presentations of Interest&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Cracking GSM&lt;/strong&gt;&lt;br&gt;&#xA;&lt;em&gt;David Hulton and Steve, Pico Computing, Inc.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;David and Steve&amp;rsquo;s presentation on GSM cracking definitely received the&#xA;most attention of the briefings. While the A5/1 GSM cipher has seen its&#xA;share of attacks in the past, the presenters showed how it could be&#xA;cracked with a price tag accessibile to the average joe. Using about&#xA;$1000 worth of equipment including a USPR (Universal Software Radio&#xA;Peripheral) to capture the encrypted streams and FPGAs to do the actual&#xA;cracking, they demonstrated that the A5/1 cipher could be cracked in&#xA;about half an hour. Scaling the system up with more FPGAs results in&#xA;even faster cracking time. Fun stuff, I need to get my hands on a USPR&#xA;ASAP.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Exploiting Live Virtual Machine Migration</title>
				<link>https://jon.oberheide.org/blog/2008/02/10/exploiting-live-virtual-machine-migration/</link>
				<pubDate>Sun, 10 Feb 2008 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2008/02/10/exploiting-live-virtual-machine-migration/</guid>
				<description>&lt;p&gt;Later this week, I&amp;rsquo;ll be presenting at the &lt;a href=&#34;https://www.blackhat.com&#34;&gt;Black Hat DC&#xA;Briefings&lt;/a&gt; on weaknesses in the security of&#xA;live virtual machine migration as implemented by popular vendors such as&#xA;VMware and Xen. I thought I&amp;rsquo;d provide a teaser in advance of my&#xA;presentation detailing some of the topics that will be discussed.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;a-trip-down-memory-lane&#34;&gt;A Trip Down Memory Lane&lt;/h2&gt;&#xA;&lt;p&gt;If you take a look back at the past few years, we&amp;rsquo;ve seen a systematic&#xA;breaking down of isolation boundaries within our computing platforms as&#xA;new technologies such as virtualization are employed.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Detecting and Evading CWSandbox</title>
				<link>https://jon.oberheide.org/blog/2008/01/15/detecting-and-evading-cwsandbox/</link>
				<pubDate>Tue, 15 Jan 2008 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2008/01/15/detecting-and-evading-cwsandbox/</guid>
				<description>&lt;p&gt;CWSandbox is one of the most comprehensive and full featured platforms&#xA;for automated malware analysis. In this post, we detail how a malware&#xA;sample being analyzed by CWSandbox may detect and evade the monitoring&#xA;functionality of CWSandbox in order to disguise its malicious&#xA;activities.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2008/03/box-sunbelt-cwsandbox.jpg&#34; alt=&#34;box-sunbelt-cwsandbox.jpg&#34; width=&#34;200&#34; height=&#34;85&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction-to-cwsandbox&#34;&gt;Introduction to CWSandbox&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.sunbelt-software.com/Developer/Sunbelt-CWSandbox/&#34;&gt;CWSandbox&lt;/a&gt;&#xA;is a platform developed by &lt;a href=&#34;https://www.sunbelt-software.com/&#34;&gt;Sunbelt&#xA;Software&lt;/a&gt; to automate the analysis of&#xA;malware samples inside a controlled environment. It generates detailed&#xA;reports of the runtime behavior of malware by monitoring the Win32 API&#xA;calls a sample makes during its execution. In order for sandboxed&#xA;environments such as CWSandbox to maintain their utility and accurately&#xA;analyze modern malicious threats, it is imperative that they are&#xA;hardened and resiliant against detection and fingerprinting. To detect&#xA;the presence of CWSandbox, several vectors of detection of worthy of&#xA;consideration:&lt;/p&gt;</description>
			</item>
			<item>
				<title>xkcd Malware Visualization</title>
				<link>https://jon.oberheide.org/blog/2007/11/30/xkcd-malware-visualization/</link>
				<pubDate>Fri, 30 Nov 2007 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2007/11/30/xkcd-malware-visualization/</guid>
				<description>&lt;p&gt;A recent &lt;a href=&#34;https://xkcd.com/350/&#34;&gt;xkcd comic&lt;/a&gt; related to malware&#xA;visualization is eerily similar to a system we&amp;rsquo;re currently running at&#xA;the University of Michigan.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-xkcd-comic&#34;&gt;The xkcd Comic&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2008/03/network.png&#34; alt=&#34;network.png&#34; width=&#34;500&#34; height=&#34;280&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;our-system&#34;&gt;Our System&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2008/03/malware.jpg&#34; alt=&#34;malware.jpg&#34; width=&#34;500&#34; height=&#34;375&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The system pictured is a production version of an architecture we&#xA;proposed last year at HotSec &amp;lsquo;07 (&lt;a href=&#34;https://jon.oberheide.org/files/hotsec07-cloud.pdf&#34;&gt;paper&lt;/a&gt;,&#xA;&lt;a href=&#34;https://jon.oberheide.org/files/hotsec07-cloud-pres.pdf&#34;&gt;presentation&lt;/a&gt;), essentially a&#xA;network-based AV service. The backend analysis system consists of&#xA;Xen-based virtualized containers which host various detection engines.&#xA;Candidate executables/files are acquired by a lightweight host-agent&#xA;(hooking CreateProcess on Win32, Dazuko on Linux/BSD, etc) and&#xA;transmitted to the backend for analysis by a bajillion (ok, maybe only&#xA;12) antivirus and behavioral engines. We currently employ antivirus&#xA;engines from Avast, AVG, BitDefender, ClamAV, F-Prot, F-Secure,&#xA;Kaspersky, McAfee, Symantec and Trend Micro. We also have two behavior&#xA;engines, Norman Sandbox Analyzer and CWSandbox, to provide runtime&#xA;behavioral profiles for candidate executions. This model has numerous&#xA;advantages including significantly increased detection coverage,&#xA;centralized management, and post-infection forensics. The photo shows&#xA;our beautiful 52&amp;quot; LCD screen displaying the output of the various Xen&#xA;VMs hosting the detection engines and the real-time detection results of&#xA;the analysis of a malware sample.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Facebook XSS</title>
				<link>https://jon.oberheide.org/blog/2007/08/15/facebook-xss/</link>
				<pubDate>Wed, 15 Aug 2007 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2007/08/15/facebook-xss/</guid>
				<description>&lt;p&gt;Facebook&amp;rsquo;s new-fangled applications functionality seemed like a ripe&#xA;opportunity for nasty cross-site scripting bugs. As it turns out,&#xA;multiple XSS vulnerabilities were present in the fb:swf tag of the&#xA;Facebook Markup Language.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2008/02/facebook.png&#34; alt=&#34;facebook.png&#34; width=&#34;400&#34; height=&#34;97&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;fbml-xss-vulnerabilities&#34;&gt;FBML XSS Vulnerabilities&lt;/h2&gt;&#xA;&lt;p&gt;Given that Facebook seems to roll out tons of new functionality all the&#xA;time without proper security testing and auditing, I was sure there had&#xA;to be at least a few holes. I finally got the motivation to do some bug&#xA;hunting while at &lt;a href=&#34;https://www.usenix.org/events/sec07/&#34;&gt;USENIX Security&lt;/a&gt;,&#xA;where I met a student, &lt;a href=&#34;https://web.archive.org/web/20070829160029/http://www.cs.virginia.edu:80/felt/&#34;&gt;Adrienne&#xA;Felt&lt;/a&gt;, from University of Virginia who&#xA;was presenting at the poster session about an XSS vuln she had found in&#xA;Facebook. As she wasn&amp;rsquo;t releasing any specific technical details about&#xA;the vulnerability since it was not yet patched, I found that motivation&#xA;enough to head back to my hotel and hack on Facebook for the night to&#xA;see if I could re-discover the hole she had found. In just a couple&#xA;hours, I had discovered an XSS vulnerability, which I found out the next&#xA;day was actually different that the one she had discovered.&lt;/p&gt;</description>
			</item>
			<item>
				<title>USENIX Security, HotSec, WOOT 2007</title>
				<link>https://jon.oberheide.org/blog/2007/08/10/usenix-security-hotsec-woot-2007/</link>
				<pubDate>Fri, 10 Aug 2007 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2007/08/10/usenix-security-hotsec-woot-2007/</guid>
				<description>&lt;p&gt;I recently attended the &lt;a href=&#34;https://www.usenix.org/events/sec07/&#34;&gt;USENIX Security&#xA;Symposium&lt;/a&gt; in Boston, MA. I also&#xA;attended two of the co-located workshops: the Workshop on Hot Topics in&#xA;Security (&lt;a href=&#34;https://www.usenix.org/events/hotsec07/&#34;&gt;HotSec&lt;/a&gt;), at which I&#xA;presented a research paper focusing on a new paradigm for antivirus&#xA;deployment, and the Workshop on Offensive Technologies&#xA;(&lt;a href=&#34;https://www.usenix.org/events/woot07/&#34;&gt;WOOT&lt;/a&gt;).&lt;/p&gt;&#xA;&lt;h2 id=&#34;hotsec-2007-workshop&#34;&gt;HotSec 2007 Workshop&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2008/02/hotsec07.jpg&#34; alt=&#34;hotsec07.jpg&#34; width=&#34;500&#34; height=&#34;77&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;At HotSec, I presented our paper titled &amp;quot;Rethinking Antivirus:&#xA;Executable Analysis in the Network Cloud&amp;quot;. The abstract follows:&lt;/p&gt;&#xA;&lt;p&gt;Antivirus software installed on each end host in an organization has&#xA;become the de-facto security mechanism used to defend against unwanted&#xA;executables. We argue that the executable analysis currently provided by&#xA;host-based antivirus software can be more efficiently and effectively&#xA;provided as an in-cloud network service. Instead of running complex&#xA;analysis software on every end host, we suggest that each end host run a&#xA;lightweight process to acquire executables entering a system, send them&#xA;into the network for analysis, and then run or quarantine them based on&#xA;a threat report returned by the network service. An executable analysis&#xA;service run inside an enterprise network or by a service provider could&#xA;integrate antivirus software, behavioral simulation, and other analysis&#xA;engines from multiple vendors providing better detection of malware and&#xA;simplify client software enabling deployment on a broader range of&#xA;devices. To explore this idea we construct a prototype composed of a&#xA;Windows based host agent and an in-cloud analysis service and evaluate&#xA;it using a diverse dataset of 5066 unique malicious executables. By&#xA;correlating information between multiple detection engines, our system&#xA;provides over 98% detection coverage of the malicious executables using&#xA;eight antivirus engines and two behavioral engines compared to a 54% to&#xA;86% detection rate using the latest commercial antivirus products.&lt;/p&gt;</description>
			</item>
			<item>
				<title>DIMVA 2007</title>
				<link>https://jon.oberheide.org/blog/2007/07/20/dimva-2007/</link>
				<pubDate>Fri, 20 Jul 2007 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2007/07/20/dimva-2007/</guid>
				<description>&lt;p&gt;I just got back from Switzerland, and despite numerous flight delays,&#xA;cancellations, and lost luggage (thanks NWA!), it was a great trip. I&#xA;presented some of my research at the Fourth International Conference on&#xA;Detection of Intrusions and Malware and Vulnerability Assessment&#xA;(&lt;a href=&#34;http://dimva2007.org&#34;&gt;DIMVA&lt;/a&gt;), and got to spend some vacation time in&#xA;Zurich, Lucerne, and Milan, Italy.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2008/02/dimva.png&#34; alt=&#34;dimva.png&#34; width=&#34;174&#34; height=&#34;140&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;characterizing-dark-dns-behavior&#34;&gt;Characterizing Dark DNS Behavior&lt;/h2&gt;&#xA;&lt;p&gt;The research I presented at DIMVA focused on the measurement of dark&#xA;DNS, or the DNS queries associated with darknet addresses. Evidence of&#xA;dark DNS activity has important implications with regards to darknet&#xA;sensor deployments. Misconfiguration or improperi delegation of reverse&#xA;DNS authority for darknet monitoring systems may allow evasion by an&#xA;attacker via DNS reconnaissance. We characterized the dark DNS activity&#xA;observed on a large operational network and presented a lightweight tool&#xA;to complement existing network sensors and low-interaction honeypots by&#xA;providing simple DNS services.&lt;/p&gt;</description>
			</item>
			<item>
				<title>pynids 0.5a Update Released</title>
				<link>https://jon.oberheide.org/blog/2007/05/07/pynids-05a-update-released/</link>
				<pubDate>Mon, 07 May 2007 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2007/05/07/pynids-05a-update-released/</guid>
				<description>&lt;p&gt;pynids is a python wrapper for libnids, a Network Intrusion Detection&#xA;System (NIDS) library offering sniffing, IP defragmentation, TCP stream&#xA;reassembly and port scan detection. This release is an update to Michael&#xA;Pomraning&amp;rsquo;s 0.5 release to allow control of libnid&amp;rsquo;s checksumming&#xA;options.&lt;/p&gt;&#xA;&lt;h2 id=&#34;checksum-control&#34;&gt;Checksum Control&lt;/h2&gt;&#xA;&lt;p&gt;Many modern NICs provide both TX and RX checksum offloading for TCP and&#xA;other protocols. This offloading functionality may cause the BPF tap&#xA;utilized by libnids to observe packets with incorrect checksums, and&#xA;drop legitimate packets during their processing, believing them to be&#xA;invalid due to the incorrect checksum.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Cosign SSO Vulnerability</title>
				<link>https://jon.oberheide.org/blog/2007/04/12/cosign-sso-vulnerability/</link>
				<pubDate>Thu, 12 Apr 2007 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2007/04/12/cosign-sso-vulnerability/</guid>
				<description>&lt;p&gt;During an independent audit, I discovered a critical vulnerability in&#xA;Cosign, a web-based single sign-on (SSO) platform which is currently in&#xA;use at numerous large universities.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2008/02/cosign.jpg&#34; alt=&#34;cosign.jpg&#34; width=&#34;399&#34; height=&#34;161&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction-to-cosign&#34;&gt;Introduction to Cosign&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://weblogin.org&#34;&gt;Cosign&lt;/a&gt; is a web-based single sign-on system,&#xA;written at the University of Michigan as part of the National Science&#xA;Foundation Middleware Initiative (NMI). Cosign is deployed extensively&#xA;at the University of Michigan and at educational institutions and other&#xA;organizations around the world.&lt;/p&gt;</description>
			</item>
			<item>
				<title>T-Mobile WiFi Hotspots</title>
				<link>https://jon.oberheide.org/blog/2007/02/12/t-mobile-wifi-hotspots/</link>
				<pubDate>Mon, 12 Feb 2007 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2007/02/12/t-mobile-wifi-hotspots/</guid>
				<description>&lt;p&gt;Some random technical notes on the T-Mobile WiFi Hotspots offered at&#xA;locations such as Starbucks. Since I spend a fair amount of time at the&#xA;24-hour Starbucks on&#xA;&lt;a href=&#34;https://maps.google.com/maps?f=q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=starbucks,+ann+arbor&amp;amp;ie=UTF8&amp;amp;cd=1&amp;amp;ll=42.310069,-83.672218&amp;amp;spn=0.124915,0.285645&amp;amp;z=12&amp;amp;iwloc=A&amp;amp;iwd=1&amp;amp;cid=42255430,-83687795,6721335157483092065&amp;amp;dtab=0&#34;&gt;Washtenaw&lt;/a&gt;,&#xA;I often end up playing around with the Cisco WAP instead of actually&#xA;doing work.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://jon.oberheide.org/images/2008/02/t-mobile-hotspot300x240.gif&#34; alt=&#34;t-mobile-hotspot300x240.gif&#34; width=&#34;280&#34; height=&#34;121&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;cisco-wap-devices&#34;&gt;Cisco WAP Devices&lt;/h2&gt;&#xA;&lt;p&gt;The T-Mobile hotspots are powered by a WAP and access control device&#xA;from Cisco. I attempted several times to social engineer my way into the&#xA;back up a Starbucks to get a picture of the actual equipment, but to no&#xA;avail. Before authentication, any HTTP requests to port 80 or 8080 are&#xA;redirected to the T-Mobile hotspot portal via the HTTP 302 Redirect&#xA;mechanism. After successful authentication, requests originated from an&#xA;host with an authorized MAC and IP address tuple are allowed through.&lt;/p&gt;</description>
			</item>
			<item>
				<title>RFID on Campus</title>
				<link>https://jon.oberheide.org/blog/2007/01/17/umich-rfid/</link>
				<pubDate>Wed, 17 Jan 2007 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2007/01/17/umich-rfid/</guid>
				<description>&lt;p&gt;Given my &lt;a href=&#34;https://jon.oberheide.org/blog/2005/04/06/umich-mcard-vuln/&#34;&gt;previous experience&lt;/a&gt; with&#xA;the Mcard identification system at the University of Michigan, I was&#xA;interested when I heard that &lt;a href=&#34;https://en.wikipedia.org/wiki/Rfid&#34;&gt;RFID&lt;/a&gt;&#xA;technology was being integrated into the Mcards. I will explore the&#xA;Mcard RFID and other current uses of RFID on campus.&lt;/p&gt;&#xA;&lt;h2 id=&#34;mcard-rfid&#34;&gt;Mcard RFID&lt;/h2&gt;&#xA;&lt;p&gt;The Mcards distributed for the &lt;a href=&#34;https://www.med.umich.edu/&#34;&gt;University of Michigan Health&#xA;System&lt;/a&gt; (UMHS) contain RFID technology from&#xA;&lt;a href=&#34;https://www.hidcorp.com/&#34;&gt;HID Corp&lt;/a&gt;. HID&amp;rsquo;s Prox is a proximity-based&#xA;access control system utilizing identification tags and readers that&#xA;operate on the 125 khz frequency. The tags, often embedded in PVC ID&#xA;cards, are passive and become active when entering the RF field of a&#xA;reader. The range of the reader can vary anywhere from 0.5 inches to 8&#xA;feet depending on the model and its power output.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Aimject 1.0 Released</title>
				<link>https://jon.oberheide.org/blog/2006/11/24/aimject-released/</link>
				<pubDate>Fri, 24 Nov 2006 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2006/11/24/aimject-released/</guid>
				<description>&lt;p&gt;Aimject facilitates man-in-the-middle attacks against AOL Instant&#xA;Messenger&amp;rsquo;s OSCAR protocol via a simple GTK interface. This 1.0 release&#xA;brings Aimject functionality to the masses, being available for Linux,&#xA;BSD, OS X, and Win32 platforms.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Instant messaging and real-time network communication are becoming&#xA;increasingly prevalent in both personal lives and the workplace. While&#xA;recent events have brought IM privacy to the attention of mass media,&#xA;security in most systems has not been properly addressed. Given the&#xA;growing reliance on IM communication for a wide variety of purposes,&#xA;focused investigation of potential security attacks is long overdue.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Google Safe Browsing</title>
				<link>https://jon.oberheide.org/blog/2006/11/13/google-safe-browsing/</link>
				<pubDate>Mon, 13 Nov 2006 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2006/11/13/google-safe-browsing/</guid>
				<description>&lt;p&gt;While &lt;a href=&#34;https://www.google.com/tools/firefox/safebrowsing/&#34;&gt;Google&amp;rsquo;s Safe&#xA;Browsing&lt;/a&gt; service has&#xA;been available for some time via the &lt;a href=&#34;https://tools.google.com/firefox/toolbar/&#34;&gt;Google&#xA;Toolbar&lt;/a&gt;, this feature will&#xA;see wide deployment with the release of Mozilla Corp&amp;rsquo;s &lt;a href=&#34;https://www.mozilla.com/en-US/firefox/&#34;&gt;Firefox&#xA;2&lt;/a&gt;. In this analysis, we will&#xA;delve into the workings of Google&amp;rsquo;s Safe Browsing service and its&#xA;integration with Firefox.&lt;/p&gt;&#xA;&lt;h2 id=&#34;safe-browsing&#34;&gt;Safe Browsing&lt;/h2&gt;&#xA;&lt;p&gt;Google Safe Browsing (SB) is an initiative to curb malicious phishing&#xA;activity by warning users when they navigate to a potential phishing&#xA;site. Obviously, this requires some coordination with the user&amp;rsquo;s web&#xA;browser. Currently, Firefox 1.x users can download the Google Toolbar&#xA;and Firefox 2.x has &lt;a href=&#34;https://www.mozilla.com/en-US/firefox/phishing-protection/&#34;&gt;native SB&#xA;support&lt;/a&gt;.&#xA;MSIE users cannot currently take advantage of Google&amp;rsquo;s SB service, but&#xA;IE 7 has &lt;a href=&#34;https://blogs.msdn.com/ie/archive/2005/09/09/463204.aspx&#34;&gt;native phishing&#xA;protection&lt;/a&gt;&#xA;provided by Microsoft.&lt;/p&gt;</description>
			</item>
			<item>
				<title>pybgpdump 0.1 Released</title>
				<link>https://jon.oberheide.org/blog/2006/09/22/pybgpdump-released/</link>
				<pubDate>Fri, 22 Sep 2006 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2006/09/22/pybgpdump-released/</guid>
				<description>&lt;p&gt;I&amp;rsquo;m happy to announce the availability of pybgpdump 0.1, a tool to&#xA;assist in the rapid analysis of BGP routing datasets. It combines the&#xA;functionality of libbgpdump and the ease of python to parse BGP messages&#xA;from MRT dumps.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features&#34;&gt;Features&lt;/h2&gt;&#xA;&lt;p&gt;Currently, analysis of BGP routing data is primarily done in C, using&#xA;either libbgpdump (RIPE) or route_btoa (Labovitz). While effective in&#xA;their own right, they lack the ease, speed, and simplicity of python&#xA;development.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Mozilla Auto-Update Vulnerability</title>
				<link>https://jon.oberheide.org/blog/2006/09/15/mozilla-autoupdate-vuln/</link>
				<pubDate>Fri, 15 Sep 2006 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2006/09/15/mozilla-autoupdate-vuln/</guid>
				<description>&lt;p&gt;Mozilla&amp;rsquo;s &lt;a href=&#34;https://wiki.mozilla.org/Software_Update&#34;&gt;auto-update system&lt;/a&gt;&#xA;is a feature recently added to Firefox and Thunderbird that promises to&#xA;bring prompt security updates to users without manual interaction.&#xA;Unfortunately, this feature contains a vulnerability allowing attackers&#xA;to hijack the update process and deliver malicious updates, resulting in&#xA;the victim&amp;rsquo;s host being compromised.&lt;/p&gt;&#xA;&lt;h2 id=&#34;methodology&#34;&gt;Methodology&lt;/h2&gt;&#xA;&lt;p&gt;To check for updates, Firefox contacts &lt;em&gt;aus2.mozilla.org&lt;/em&gt; over HTTPS and&#xA;requests the following XML file:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;/update/1/%PRODUCT%/%VERSION%/%BUILD_ID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/update.xml&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This URL template is stored in the &lt;em&gt;app.update.url&lt;/em&gt; preference. An&#xA;example URL with the placeholders replaced with real values:&lt;/p&gt;</description>
			</item>
			<item>
				<title>mPrint Privacy Violations</title>
				<link>https://jon.oberheide.org/blog/2006/08/31/mprint-privacy-violations/</link>
				<pubDate>Thu, 31 Aug 2006 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2006/08/31/mprint-privacy-violations/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://mprint.umich.edu&#34;&gt;mPrint&lt;/a&gt; is a useful service provided by&#xA;&lt;a href=&#34;https://www.itcs.umich.edu&#34;&gt;ITCS&lt;/a&gt; of the &lt;a href=&#34;https://umich.edu&#34;&gt;University of&#xA;Michigan&lt;/a&gt; to allow web-uploaded documents to be&#xA;printed on campus printers. Unfortunately, the designers of mPrint&#xA;included several &amp;quot;features&amp;quot; that violate the privacy of its users&#xA;without their knowledge.&lt;/p&gt;&#xA;&lt;h2 id=&#34;web-interface&#34;&gt;Web Interface&lt;/h2&gt;&#xA;&lt;p&gt;Previously, mPrint consisted of a simple form to upload documents and&#xA;select a printer to send the job to. This was an extremely useful&#xA;service if a user had internet access but did not have any University&#xA;printers locally configured on their computer.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Honeyd Remote Fingerprinting</title>
				<link>https://jon.oberheide.org/blog/2006/02/15/honeyd-remote-fingerprint/</link>
				<pubDate>Wed, 15 Feb 2006 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2006/02/15/honeyd-remote-fingerprint/</guid>
				<description>&lt;p&gt;&lt;a href=&#34;https://www.honeyd.org/&#34;&gt;Honeyd&lt;/a&gt; is a low-interaction honeypot developed&#xA;by Niels Provos designed to emulate services and personalities of&#xA;virtual hosts and networks. As honeypot deployments must remain&#xA;undetected to maintain their value, the ability of an attacker to&#xA;effectively and remotely fingerprint Honeyd is a serious issue.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ip-fragment-reassembly&#34;&gt;IP Fragment Reassembly&lt;/h2&gt;&#xA;&lt;p&gt;According to the Internet Protocol specification &lt;a href=&#34;https://www.ietf.org/rfc/rfc0791.txt&#34;&gt;(RFC&#xA;791)&lt;/a&gt;, a correct IP stack&#xA;implementation must identify corresponding fragments by matching the&#xA;source address, destination address, identification number, and protocol&#xA;number. However, Honeyd does not correctly follow RFC 791 and omits the&#xA;protocol number when matching corresponding fragments for reassembly.&#xA;The following code snippet is from Honeyd&amp;rsquo;s ipfrag.c:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Mcard Vulnerability</title>
				<link>https://jon.oberheide.org/blog/2005/04/06/umich-mcard-vuln/</link>
				<pubDate>Wed, 06 Apr 2005 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2005/04/06/umich-mcard-vuln/</guid>
				<description>&lt;p&gt;After investigating the security of the&#xA;&lt;a href=&#34;https://www.mcard.umich.edu&#34;&gt;Mcard&lt;/a&gt; magnetic card system at the&#xA;&lt;a href=&#34;https://www.umich.edu&#34;&gt;University of Michigan&lt;/a&gt;, which is used for&#xA;student and faculty identification cards, I discovered that it is&#xA;trivial to forge anyone&amp;rsquo;s Mcard given only their UMID/uniqname.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;The University of Michigan&amp;rsquo;s student/faculty identication cards,&#xA;Mcards, are used for a variety of uses such as photo ID, meal plans,&#xA;&lt;a href=&#34;https://web.archive.org/web/20050923204054/http://www.housing.umich.edu/dining/eplus.html&#34;&gt;Entree Plus&lt;/a&gt;,&#xA;&lt;a href=&#34;http://tcfbank.com&#34;&gt;TCF&lt;/a&gt; debit card, and access to dorms, computer&#xA;labs, and other University buildings. Mcards are issued to incoming&#xA;students and new faculty and staff when they join the University. They&#xA;possess a magnetic strip on the back that is used by readers across the&#xA;campus to authenticate the identity of the cardholder.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Wolverine Access Vulnerability</title>
				<link>https://jon.oberheide.org/blog/2004/07/25/wolverine-access-vuln/</link>
				<pubDate>Sun, 25 Jul 2004 00:00:00 +0000</pubDate>
				<guid>https://jon.oberheide.org/blog/2004/07/25/wolverine-access-vuln/</guid>
				<description>&lt;p&gt;While arranging my class schedule at the &lt;a href=&#34;https://www.umich.edu&#34;&gt;University of&#xA;Michigan&lt;/a&gt;, I discovered a vulnerability in&#xA;&lt;a href=&#34;https://wolverineaccess.umich.edu/&#34;&gt;Wolverine Access&lt;/a&gt; that allowed&#xA;unrestricted access to the social security numbers, names, and addresses&#xA;of every student in the University including recent alumni.&lt;/p&gt;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Wolverine Access (WA) is the University of Michigan&amp;rsquo;s online records&#xA;and registration system. It handles academic, financial, employment, and&#xA;personal information of students, faculty, and staff. It is based on&#xA;&lt;a href=&#34;https://web.archive.org/web/20030321060315/http://www4.peoplesoft.com:80/&#34;&gt;PeopleSoft&lt;/a&gt; software and maintained by&#xA;&lt;a href=&#34;https://www.mais.umich.edu&#34;&gt;MAIS&lt;/a&gt;. Most students utilize WA for class&#xA;registration, financial information, and other academic resources.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
