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

<channel>
	<title>Security Musings &#187; software</title>
	<atom:link href="http://securitymusings.com/article/category/software/feed" rel="self" type="application/rss+xml" />
	<link>http://securitymusings.com</link>
	<description>Rants and raves from information security professionals</description>
	<lastBuildDate>Wed, 01 Feb 2012 21:41:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>How a Platform Using HTML5 Can Affect the Security of Your Website</title>
		<link>http://securitymusings.com/article/3159/how-a-platform-using-html5-can-affect-the-security-of-your-website</link>
		<comments>http://securitymusings.com/article/3159/how-a-platform-using-html5-can-affect-the-security-of-your-website#comments</comments>
		<pubDate>Wed, 01 Feb 2012 19:57:33 +0000</pubDate>
		<dc:creator>Joey Tyson</dc:creator>
				<category><![CDATA[cool]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[localstorage]]></category>
		<category><![CDATA[xss]]></category>

		<guid isPermaLink="false">http://securitymusings.com/?p=3159</guid>
		<description><![CDATA[tl;dr Abstract To improve performance, particularly for mobile users, many websites have started caching app logic on client devices via HTML5 local storage. Unfortunately, this can make common injection vulnerabilities even more dangerous, as malicious code can invisibly persist in the cache. Real-world examples of this problem have now been discovered in third-party &#8220;widgets&#8221; embedded [...]]]></description>
			<content:encoded><![CDATA[<h3><span style="font-weight: bold; font-size: 120%">tl;dr Abstract</span></h3>
<p><em>To improve performance, particularly for mobile users, many websites have started caching app logic on client devices via HTML5 local storage. Unfortunately, this can make common injection vulnerabilities even more dangerous, as malicious code can invisibly persist in the cache. Real-world examples of this problem have now been discovered in third-party &#8220;widgets&#8221; embedded across many websites, creating security risks for the companies using such services &#8211; even if their sites are otherwise protected against attacks. Striking a balance between security and performance can be difficult, but certain precautions may help prevent an attacker from exploiting local storage caches.</em></p>
<h3><span style="font-weight: bold; font-size: 120%">Background</span></h3>
<p>Throughout the history of web development, people have found ways to use and abuse various technologies beyond their intended purposes. Before CSS gained widespread support, many developers created complex layouts with HTML tables. Now that browsers provide far more presentation-layer tools, one can recreate complex images using only CSS. Such tricks can at times be very helpful in overcoming the limits of a browser-based environment, but they can also inadvertently create security issues.</p>
<p><span id="more-3159"></span>One feature commonly classified as part of HTML5 is local storage, a method for saving content on a visitor&#8217;s device that offers more space and flexibility than previous options (such as cookies). While intended as a client-side analogue to database storage, local storage has increasingly served another purpose: code caching. If a web app routinely requires large blocks of JavaScript, it can avoid downloading those chunks every time a visitor returns to the app by saving a copy of them in local storage. This can provide a significant performance boost, particularly on mobile devices, where bandwidth and typical caches can be much more limited.</p>
<h3><span style="font-weight: bold; font-size: 120%">Local Storage Attacks</span></h3>
<p>However, this approach opens new possibilities for attacking the app. If the local storage can be compromised, an attacker could inject malicious code that persists in the client-side cache. This payload would then be executed by the web app each time a user opened the site &#8211; even if they&#8217;d previously closed the browser. In fact, eradicating such code can be quite difficult, and the victim website might not even be able to detect an ongoing attack. Artur Janc, a security engineer at Google, outlined these issues in <a href="http://events.ccc.de/congress/2011/Fahrplan/events/4811.en.html">a talk last December</a> (<a href="http://www.youtube.com/watch?v=ppFcSP2HWdE">video</a>) detailing many of the dangerous ramifications they present, but as Janc notes, such an attack was also previously described by <a href="http://www.cs.berkeley.edu/~dawnsong/papers/2010%20emperors%20new%20api.pdf">a paper from researchers at Berkeley</a> (PDF) in May 2010.</p>
<p>Given the restrictions on access to a site&#8217;s local storage, modifying code saved there would nearly always require another vulnerability in the app as an initial attack vector. However, just one entry point for injecting code in a page would be enough to change the cache, and such problems tend to be quite common across the web. Many of these vulnerabilities (described as cross-site scripting, or XSS) are &#8220;reflected&#8221;, in that they only change a particular request for content, but using local storage automatically makes them capable of launching persistent attacks. Essentially, caching code in HTML5 local storage actually makes any existing cross-site scripting vulnerabities more dangerous.</p>
<p>And as influential researcher Michal Zalewski <a href="http://lcamtuf.blogspot.com/2011/10/origin-is-forever.html">also noted a few months before</a> Janc&#8217;s presentation, &#8220;if content from the compromised origin is commonly embedded on third-party pages (think syndicated &#8216;like&#8217; buttons or advertisements), with some luck, attacker&#8217;s JavaScript may become practically invincible&#8221;. In this age of mash-ups, data from a variety of sources are often mixed together, creating implicit trust relationships that may have significant effects on the security of an app. When a developer includes third-party JavaScript on his or her site, that code has the same capabilities as any other script on the page. Of course, modifying a static file on a remote server is generally not possible, even if cross-site scripting issues are present. But what if a third-party script from a site with XSS problems also stored code in local storage?</p>
<h3><span style="font-weight: bold; font-size: 120%">Vulnerabilities in the Wild</span></h3>
<p>As it turns out, this is no longer a hypothetical situation. Apture was a start-up that provided pop-up boxes for exploring content related to highlighted terms in a page. The service garnered praise from various tech media outlets, and the company was bought out by Google a few months ago. Just over a week ago, Google shut down the embedded search functionality, which was still in use by several sites after the acquisition. Apture is one example of a third-party &#8220;widget&#8221; service that used local storage code caching &#8211; and a page on the same domain as those scripts had a reflected XSS vulnerability which could be used to inject malicious code in the cache. This code would then be executed in the context of the site using Apture, meaning the problem with Apture&#8217;s service affected the security of many sites across the web.</p>
<p>And while Apture&#8217;s widgets are now offline, another service still operating on high-profile sites was recently found to have a similar issue (though in this case, scripts were not executed from the original site&#8217;s origin). This problem has been reported and is currently being addressed by the service&#8217;s engineers.</p>
<h3><span style="font-weight: bold; font-size: 120%">Reducing Risk</span></h3>
<p>Ultimately, there isn&#8217;t a simple way of avoiding this type of vulnerability while still getting the performance gains of client-side code caching. Another new HTML feature, application cache, is actually geared towards precisely this use case and would be harder to compromise, but it can create UI warnings in some browsers, such as Firefox. (Such warnings are a good practice, but may be unwanted for third-party widgets.) Ideally, any data in local storage should be treated as untrusted, even if it&#8217;s just content instead of code. But if local storage is used for scripts, it should be accessed from a domain that only serves static files. This will help reduce the likelihood of an XSS vulnerability that would have direct access to local storage, though the overall structure of an app should be taken into account to prevent indirect access as well. Newer browsers also support features such as sandboxed inline frames and Content Security Policy that could help limit the impact of embedded widgets if they became compromised.</p>
<p>I think it&#8217;s important to note that many smart people, including those behind Apture, have used local storage for caching app logic &#8211; even Google and Bing use a similar technique on their mobile sites &#8211; and that in theory, this method should not make a website less secure. And for many web developers, it may not be immediately obvious why local storage data should not be trusted. This is another case where a clever trick that serves its primary goal very well has unintended consequences when considered in a broader context. It&#8217;s also an example of possibly making trade-offs which balance usability with risk. Understanding these conflicts and connections is part of what information security is all about &#8211; and what we do at <a href="http://geminisecurity.com/">Gemini</a> every day. As browser features continue to expand and sites continue to integrate services from other domains, it&#8217;s likely we&#8217;ll see many more examples of security issues evolving in complexity &#8211; and organizations will need to adapt to such changes while still reducing risk.</p>
<p><em>Special thanks to <a href="http://twitter.com/0x6D6172696F">@0x6D6172696F</a>, <a href="http://twitter.com/lcamtuf">@lcamtuf</a>, <a href="http://twitter.com/thekos">@theKos</a>, and <a href="http://twitter.com/kkotowicz">@kkotowicz</a> for their help with this research!</em></p>
<h3><span style="font-weight: bold; font-size: 120%">Technical Details</span></h3>
<p>For a site to use Apture widgets, the owner included a bit of JavaScript on their pages:</p>
<pre class="brush:js">&lt;script id="aptureScript"&gt;
(function (){var a=document.createElement("script");a.defer="true";
a.src="http://www.apture.com/js/apture.js?siteToken=XXXXXXX";
document.getElementsByTagName("head")[0].appendChild(a);})();
&lt;/script&gt;</pre>
<p>This dynamically loaded an external script hosted on apture.com with a site token specified. The external script included various parameters, such as title, logo, and search URLs that are associated with the account identified by the token. This code then loaded another script based on the user&#8217;s browser which actually began setting up the framework for Apture to integrate with the site&#8217;s content.</p>
<p>For browsers that support it, HTML5 cross-document messaging then came into play. The Apture script inserted an inline frame into the page that loaded a file from cdn.apture.com. A callback function allowed this iframe to pass messages back to the original window context where the script is running (the non-Apture site). This iframe then loaded the actual app logic and passed the code back to the original site via the cross-document messaging interface.</p>
<p>At this point, you&#8217;re probably wondering why Apture didn&#8217;t simply load the app logic as another script in the original page; in fact, that&#8217;s precisely what Apture did if the browser didn&#8217;t support newer HTML5 features. But Apture&#8217;s iframe setup allowed them to take advantage of another HTML5 innovation that made their service load much faster. Web storage functionality provides the localStorage object, a place to save key/value data on the client which allows for more space and flexibility than cookies. This storage is persistent across browser sessions, but is specific to each domain and access to it is restricted by a same-origin policy.</p>
<p>Apture used a localStorage object for cdn.apture.com not only to save data, such as an ID for tracking users, but to actually cache their app logic code. If the cdn.apture.com iframe detected that this cache already existed, it would simply load the code from localStorage rather than issue another HTTP request for the 272KB worth of JavaScript &#8211; saving time and bandwidth. Apture introduced this functionality in January 2011.</p>
<p>But how does one load code from localStorage? For Apture, with this line in the cross-domain callback function:</p>
<pre class="brush:js">window.execScript ? window.execScript(f) : window.eval(f);</pre>
<p>Seeing code such as this should immediately raise red flags in the mind of any web developer. Those familiar with browser security may have heard the adage that &#8220;eval is evil&#8221;, and it certainly applies here. The eval function (or the analogous execScript function also seen above) treats its input as valid JavaScript and simply executes it in the current window&#8217;s global context. If an attacker can send malicious code to the function, that code will also be executed &#8211; a class of vulnerabilities known as cross-site scripting (XSS).</p>
<p>In Apture&#8217;s case, though, the code came from the cdn.apture.com storage, so one might assume it can be trusted &#8211; in theory, only pages from cdn.apture.com can modify the localStorage cache. But once again, the power of cross-site scripting demonstrates that many seemingly trustworthy data sources are still potential avenues of attack. The presence of any XSS on a cdn.apture.com page, including reflected XSS, would allow an attacker to execute code in that domain&#8217;s context and thus modify the localStorage object.</p>
<p>As it turns out, Apture did have an exploitable XSS vulnerability. The cdn.apture.com domain actually mirrored www.apture.com, including a topic page that loaded a topic title from the URL path and a YouTube video ID from a GET parameter. Both of these values were included in the page without being escaped to prevent XSS. This example URL includes a script that appends &#8220;alert(document.cookie)&#8221; to the app logic in localStorage:</p>
<pre>http://cdn.apture.com/search/xss?yt=%22%3E%3Cscript%3Eif%28
window.x%21%3D1%29%7BlocalStorage%5B%27app-49971756%27%5D
%3DlocalStorage%5B%27app-49971756%27%5D%2b%22alert%28
document.cookie%29%3B%22%7Dwindow.x%3D1%3C%2fscript%3E</pre>
<p>The window.x logic ensures that the code only executes once, since the parameter appears in the topic page multiple times. In an actual attack, more code would likely be needed, as the specific localStorage key includes a version number that could change depending on the user. This does not stop the attack, however, as the correct version can be loaded by the script before making changes to localStorage.</p>
<p>Once this vulnerability is used to insert attack code into localStorage (e.g. if the above URL were loaded in an invisible iframe on an attacker&#8217;s site), visiting any site that had Apture&#8217;s widgets would cause the attack code to be loaded from the Apture iframe and executed in the context of the non-Apture site. And since this is essentially an example of DOM-based XSS (the code is loaded dynamically on the client side), requests sent to those sites&#8217; servers would not include any XSS fingerprints, such as &lt;script&gt; in a GET or POST parameter. In summary, the localStorage code caching turned one reflected XSS vulnerability on Apture&#8217;s site into persistent, client-side XSS across all domains using their service.</p>
<div class="tweetthis" style="text-align:left;"><p> <a class="tt" href="http://twitter.com/intent/tweet?text=How+a+Platform+Using+HTML5+Can+Affect+the+Security+of+Your+Website+http%3A%2F%2Fsecuritymusings.com%2F%3Fp%3D3159" title="Post to Twitter"><img class="nothumb" src="http://securitymusings.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter2.png" alt="Post to Twitter" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://securitymusings.com/article/3159/how-a-platform-using-html5-can-affect-the-security-of-your-website&amp;t=How+a+Platform+Using+HTML5+Can+Affect+the+Security+of+Your+Website" title="Post to Facebook"><img class="nothumb" src="http://securitymusings.com/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://securitymusings.com/article/3159/how-a-platform-using-html5-can-affect-the-security-of-your-website/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using a Mac with VMWare vSphere (ESXi) 5</title>
		<link>http://securitymusings.com/article/3110/using-a-mac-with-vmware-vsphere-esxi-5</link>
		<comments>http://securitymusings.com/article/3110/using-a-mac-with-vmware-vsphere-esxi-5#comments</comments>
		<pubDate>Tue, 29 Nov 2011 21:07:14 +0000</pubDate>
		<dc:creator>Peter Hesse</dc:creator>
				<category><![CDATA[article]]></category>
		<category><![CDATA[general]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[Tutorial Tuesday]]></category>
		<category><![CDATA[macintosh]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[vmware]]></category>
		<category><![CDATA[vmware macintosh client]]></category>
		<category><![CDATA[vsphere]]></category>
		<category><![CDATA[vsphere macintosh client]]></category>

		<guid isPermaLink="false">http://securitymusings.com/?p=3110</guid>
		<description><![CDATA[One of the biggest complaints I’ve had with VMWare vSphere and VMWare ESX/ESXi over the last few years is that managing my virtual machines from my Mac computer was a hassle. The VMWare management utilities are all Windows-only, and even the few web-based tools either do not work or are extremely limited from a Mac. While [...]]]></description>
			<content:encoded><![CDATA[<p>One of the biggest complaints I’ve had with VMWare vSphere and VMWare ESX/ESXi over the last few years is that managing my virtual machines from my Mac computer was a hassle. The VMWare management utilities are all Windows-only, and even the few web-based tools either do not work or are extremely limited from a Mac. While it isn’t perfect yet, VMWare vSphere 5 has made it so you can actually do just about anything you need to using a Macintosh computer; you just need to go through a few hurdles.</p>
<p>To enable the administration of your various virtual machines, storage, clusters, datacenters, and the like, you can now use the vSphere 5 Web Client. Before it can be used, it must be authorized; the best instructions I found for this are <a href="http://www.virtualizationadmin.com/articles-tutorials/vmware-esx-and-vsphere-articles/general/getting-starting-vsphere-5-web-client.html">here</a>. Follow the steps in the “<span style="color: #000080;">Authorizing the vSphere Web Client (Server)</span>” section. This is a one-time configuration necessary to enable the vSphere Web Client.</p>
<p>Once authenticated, you will see something that looks very similar to the Windows-based vSphere Client running in your browser.</p>
<p><a href="http://securitymusings.com/wp-content/uploads/2011/11/Screen-shot-2011-11-29-at-3.11.24-PM.png"><img class="aligncenter size-medium wp-image-3111" title="vSphere Web Client" src="http://securitymusings.com/wp-content/uploads/2011/11/Screen-shot-2011-11-29-at-3.11.24-PM-300x168.png" alt="vSphere Web Client" width="300" height="168" /></a></p>
<p>This will satisfy most of your management needs, but it leaves out an all-important capability; the ability to remotely view the console of the systems. There&#8217;s a Console button, but it won&#8217;t work on a Mac. Once you’ve installed a machine, you can typically enable some sort of remote desktop capability in the operating system, but what do you do before then? If you’re running Windows, you use the vSphere client and open a console, but on a Mac, you’re out of luck. Right? Wrong.</p>
<p>There is an under-documented feature of vSphere that allows the capability of opening up VNC connections from the host directly to the console of the virtual machine. To perform this, we first have to enable incoming connections to your vSphere server, as vSphere 5 has an integrated firewall. This is the one step you will actually need to use the Windows vSphere Client; everything else can be done using the Web Client. This step needs to be executed once for each vSphere or ESXi host running virtual machines you want to access using VNC.</p>
<p><span style="text-decoration: underline;">In the Windows vSphere client</span>, choose the host you wish to enable VNC connections on. Choose the <strong>Configuration</strong> tab and on the left choose <strong>Security Profile</strong>. On the right, next to <strong>Firewall</strong> click <strong>Properties…</strong> As VMWare does not include VNC as a protocol, it is not listed as an available option. However the ports allowed by the <strong>gdbserver</strong> protocol will suit our purposes. Check the box next to <strong>gdbserver</strong>. (<em>It is also wise to highlight the <strong>gdbserver</strong> line and click the <strong>Firewall…</strong> button and lock down where you will allow these VNC connections to take place from; in ours I restricted this to our intranet.</em>) Click <strong>OK</strong> and you’ve now enabled the incoming ports to be used for VNC.</p>
<p>Finally, enabling VNC access to the console machines is a matter of setting advanced configuration parameters on each virtual machine, which can only be done when the virtual machine is off. To open up the advanced configuration:</p>
<ul>
<li><span style="text-decoration: underline;">In the Windows vSphere client</span>, choose the machine, click <strong>Edit Settings…</strong>, click the <strong>Options</strong> tab, choose <strong>Advanced-&gt;General</strong> on the left, and click <strong>Configuration Parameters…</strong> on the right.</li>
<li><span style="text-decoration: underline;">In the Web client</span>, choose the machine, click Edit Settings… under the <strong>VM Hardware</strong> section, click <strong>VM Options</strong>, click <strong>Advanced</strong>, and click <strong>Edit Configuration…</strong>.</li>
</ul>
<p>In both cases, you now want to add three rows by clicking the <strong>Add Row</strong> button.</p>
<table style="background-color: #ffffcc; border: 1px solid black;">
<tr>
<td style="padding: 10px; border: 1px solid black;"><strong>Name</strong></td>
<td style="padding: 10px; border: 1px solid black;"><strong>Value</strong></td>
</tr>
<tr>
<td style="font-family: monospace; padding: 10px; border: 1px solid black;">RemoteDisplay.vnc.enabled</td>
<td style="font-family: monospace; padding: 10px; border: 1px solid black;">true</td>
</tr>
<tr>
<td style="font-family: monospace; padding: 10px; border: 1px solid black;">RemoteDisplay.vnc.port</td>
<td style="padding: 10px; border: 1px solid black;"><em>5900-5999 are the “standard” ports, choose one different from other VMs on the host.</em></td>
</tr>
<tr>
<td style="font-family: monospace; padding: 10px; border: 1px solid black;">RemoteDisplay.vnc.password</td>
<td style="padding: 10px; border: 1px solid black;"><em>the VNC password used to access the VNC session; only the first 8 characters are encrypted using the VNC protocol, and weakly at that. Don&#8217;t rely on this for security.</em></td>
</tr>
</table>
<p>Once you’ve added these rows and click OK, you can now use a VNC client to connect to the console of the machine. Power up the machine, and then using Finder on the Mac, choose Go-&gt;Connect to Server (or hit Command-K), and type the following:</p>
<p><strong>vnc://</strong><span style="color: #0000ff;"><em>&lt;ip or name of esxi host&gt;</em></span><strong>:</strong><span style="color: #800080;"><em>&lt;port chosen in configuration settings&gt;</em></span><strong>/</strong></p>
<p>and click <strong>Connect</strong>. You will be prompted for your password, and depending on your client/version of OSX you may receive a warning about how keystroke encryption is not enabled. Accept the warning, and you will see the console of the virtual machine! (And note, since Macs don’t already use the three-finger salute, you can safely just press Ctrl-Alt-Del in that VNC-window to log into Windows systems!)</p>
<p>Once you’ve installed the operating system of choice, and enabled that OS’ remote desktop capability, you may want to disable this VNC access. Just shut down the VM, go back into the advanced options and change the <span style="font-family: monospace;">RemoteDisplay.vnc.enabled</span> setting to <span style="font-family: monospace;">false</span>.</p>
<p>Hopefully at some point soon, VMWare will enable a true web-based console application (which doesn’t require host-specific plugins to be installed) to go with their nice new web client. Until then, this is a reasonable workaround for accessing virtual machines using a Mac.</p>
<div class="tweetthis" style="text-align:left;"><p> <a class="tt" href="http://twitter.com/intent/tweet?text=Using+a+Mac+with+VMWare+vSphere+%28ESXi%29+5+http%3A%2F%2Fsecuritymusings.com%2F%3Fp%3D3110" title="Post to Twitter"><img class="nothumb" src="http://securitymusings.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter2.png" alt="Post to Twitter" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://securitymusings.com/article/3110/using-a-mac-with-vmware-vsphere-esxi-5&amp;t=Using+a+Mac+with+VMWare+vSphere+%28ESXi%29+5" title="Post to Facebook"><img class="nothumb" src="http://securitymusings.com/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://securitymusings.com/article/3110/using-a-mac-with-vmware-vsphere-esxi-5/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Can Client-Side JavaScript Protect Itself?</title>
		<link>http://securitymusings.com/article/3066/can-client-side-javascript-protect-itself</link>
		<comments>http://securitymusings.com/article/3066/can-client-side-javascript-protect-itself#comments</comments>
		<pubDate>Fri, 14 Oct 2011 03:59:58 +0000</pubDate>
		<dc:creator>Joey Tyson</dc:creator>
				<category><![CDATA[cool]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[Technology & Tool Thursday]]></category>

		<guid isPermaLink="false">http://securitymusings.com/?p=3066</guid>
		<description><![CDATA[Security researcher Mario Heiderich (also creator of the HTML5 Security Cheatsheet and lead developer for PHPIDS) has been posting some interesting cross-site scripting challenges lately that highlight aspects of security on the client side. The most recent, called XSSMe², involved a page with a reflected XSS vulnerability that allowed one to insert arbitrary HTML &#8211; no [...]]]></description>
			<content:encoded><![CDATA[<p>Security researcher <a href="http://heideri.ch/">Mario Heiderich</a> (also creator of the <a href="http://html5sec.org/">HTML5 Security Cheatsheet</a> and lead developer for <a href="https://phpids.org/">PHPIDS</a>) has been posting some interesting cross-site scripting challenges lately that highlight aspects of security on the client side. The most recent, called XSSMe², involved a page with a reflected XSS vulnerability that allowed one to insert arbitrary HTML &#8211; no filters applied by the server. The goal? Retrieve a particular bit of data, originally stored in document.cookie, without any user interaction. I say &#8220;originally,&#8221; because the page included JavaScript which attempted to lock down access to the data by removing it from document.cookie and hiding it unless retrieved by a user click. The code used evolved as bypasses were found, with several tricks employed along the way.</p>
<p>One trick was to hide the variable in a closure. In JavaScript, every function has its own local scope. If you define a variable within a function block, that variable is distinct from one defined in the global scope. In a way, the variable is hidden from code executed in the global scope, though the function can provide a gatekeeper method to access it. Consider this block of code:</p>
<pre class="brush:js">document.cookie = "secret";

var Safe = function() {
    var cookie = document.cookie;
    this.get = function(magicWord) {
        if (magicWord === "please") {
            return cookie;
        }
        return null;
    }
}
window.Safe = new Safe();

document.cookie = "";

alert(document.cookie);
alert(Safe.get(""));
alert(Safe.get("please"));</pre>
<p>The first alert returns nothing &#8211; document.cookie has been set to an empty string. The second alert only returns null, given the if statement in the definition of Safe.get. But with the third alert, the statement <code>return cookie</code> gets executed &#8211; and that statement is in the local scope of the function, so it returns the cookie variable defined in that scope, which is &#8220;secret&#8221;. This is the concept of a closure &#8211; the local variable of the function lives on as it was defined in that context.</p>
<p>Initially, this may seem to be a good defense against cross-site scripting, since the power of XSS comes from all a page&#8217;s scripts executing in the same scope. But as entries in the challenge demonstrated, a script has many resources for attacking itself. For instance, the challenge included code that checked whether a function requesting the secret variable was a mouse click event initiated by the user. That last bit came from checking the isTrusted property on the event, which should tell you whether the click came from a script or from the user.</p>
<p>But in JavaScript, new objects are created by cloning a model object called a prototype. If you change a particular prototype, any new variety of that object will inherit the changes you made. In this case, changing the isTrusted property of a mouse event&#8217;s prototype to always be true meant any spoofed clicks generated automatically by a script would fool the protective code and retrieve the secret value.</p>
<p>With each new bypass, Mario updated the code with new protections to block them. Eventually, he created a Firefox-specific version that essentially rewrote the entire page to get rid of the original Document Object Model and all its loopholes. If you&#8217;re interested in reading more about other bypass techniques and the challenge&#8217;s implications for client-side filtering, researcher Krzysztof Kotowicz has <a href="http://blog.kotowicz.net/2011/10/sad-state-of-dom-security-or-how-we-all.html">an excellent write-up</a> that covers more details. But the challenge is also worth studying as a way of understanding more about web scripting and XSS. I certainly learned more about closures and event spoofing by tackling the puzzle, and it helps illustrate the difficulties of trying to protect against code running in the same origin and same scope. We may be moving towards DOM features that provide enough security to block even client-side attacks, but for right now, any untrusted script has myriad ways of overcoming client-side protections.</p>
<div class="tweetthis" style="text-align:left;"><p> <a class="tt" href="http://twitter.com/intent/tweet?text=Can+Client-Side+JavaScript+Protect+Itself%3F+http%3A%2F%2Fsecuritymusings.com%2F%3Fp%3D3066" title="Post to Twitter"><img class="nothumb" src="http://securitymusings.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter2.png" alt="Post to Twitter" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://securitymusings.com/article/3066/can-client-side-javascript-protect-itself&amp;t=Can+Client-Side+JavaScript+Protect+Itself%3F" title="Post to Facebook"><img class="nothumb" src="http://securitymusings.com/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://securitymusings.com/article/3066/can-client-side-javascript-protect-itself/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cross-Site Scripting, Without the Scripting&#8230; or the Site</title>
		<link>http://securitymusings.com/article/3033/cross-site-scripting-without-the-scripting-or-the-site</link>
		<comments>http://securitymusings.com/article/3033/cross-site-scripting-without-the-scripting-or-the-site#comments</comments>
		<pubDate>Wed, 21 Sep 2011 21:34:06 +0000</pubDate>
		<dc:creator>Joey Tyson</dc:creator>
				<category><![CDATA[hacking]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[Tutorial Tuesday]]></category>
		<category><![CDATA[Vulnerability]]></category>
		<category><![CDATA[xss]]></category>
		<category><![CDATA[yesimadaylate]]></category>

		<guid isPermaLink="false">http://securitymusings.com/?p=3033</guid>
		<description><![CDATA[I often talk about cross-site scripting (XSS), and that&#8217;s partly because I think it&#8217;s a pretty interesting type of vulnerability that many developers tend to overlook. It can be quite dangerous, but can also be quite misunderstood. For one thing, the name can be misleading: exploiting XSS does not always involve scripting, and the proliferation [...]]]></description>
			<content:encoded><![CDATA[<p>I often talk about cross-site scripting (XSS), and that&#8217;s partly because I think it&#8217;s a pretty interesting type of vulnerability that many developers tend to overlook. It can be quite dangerous, but can also be quite misunderstood. For one thing, the name can be misleading: exploiting XSS does not always involve scripting, and the proliferation of web technologies has taken XSS issues beyond the browser.</p>
<p>One example of script-less cross-site scripting affected some <a href="http://www.switched.com/2007/11/09/hacked-alicia-keys-myspace-page-could-leave-you-with-a-virus/">high-profile MySpace users</a> in 2007. Attackers were able to inject HTML into celebrity MySpace pages, but the service filtered out typical &lt;script&gt; payloads. Seemingly innocent &lt;a&gt; links were allowed, though, and adding a bit of CSS allowed one to create an invisible link that covered the entire page. In this case, clicking anywhere on an infected profile led to a malware download.</p>
<p>This attack could be one of the first prominent cases of <a href="http://en.wikipedia.org/wiki/Clickjacking">clickjacking</a>, though the term is usually applied to attacks that hijack clicks with malicious inline frames (iframes). Allowing &lt;iframe&gt; elements in user-controlled HTML opens up a range of issues more broadly known as UI redressing. For instance, an iframe that covers the entire page could render a fake login form that appears to be legitimate given the site&#8217;s address, leading to a powerful phishing attack. Frames and forms can also be used to bypass CSRF protections.</p>
<p>Of course, you can sometimes launch simple CSRF attacks using only images. By setting the &#8220;src&#8221; attribute of an &lt;img&gt; element to another page, the browser will still execute a GET request to that page when it tries to load the image. Without proper CSRF protections, such an attack may be possible without XSS to begin with. But images can also be a source of information leakage or tracking, since GET requests to a malicious server will also likely include a &#8220;Referer&#8221; header.</p>
<p>While most XSS payloads do capitalize on the power of JavaScript, keep in mind that a browser can load scripts from many places besides within script tags. Event attributes for other elements and certain CSS properties are just two examples of places a script could slip in. And don&#8217;t forget about the risks of browser plug-ins &#8211; Flash 0-day issues or malicious PDF files can also be sources of trouble.</p>
<p>Finally, an issue this week served to remind that XSS is no longer just a concern within the context of a web browser. As HTML and JavaScript become a greater part of developing apps built outside the browser, XSS may pop up on other platforms. On Monday, a security researcher with the handle <a href="https://superevr.com/blog/">superevr</a> disclosed <a href="https://superevr.com/blog/2011/xss-in-skype-for-ios/">an XSS vulnerability</a> in Skype for iOS. By inserting HTML into the &#8220;Full Name&#8221; of a user, one could send messages that when viewed would launch code capable of stealing the phone&#8217;s address book. And this wasn&#8217;t the first time XSS has been a problem for Skype &#8211; a vulnerability in desktop versions was found <a href="http://www.geek.com/articles/news/skype-vulnerability-makes-for-easy-pc-hijacking-20110715/">a few months ago</a>, and XSS with shared content could lead to problems <a href="http://www.computerworld.com/s/article/9057778/Update_Skype_plugs_critical_bug_with_temp_move">back in 2008</a>.</p>
<p>Alternate labels, such as &#8220;HTML injection&#8221; or &#8220;web content injection,&#8221; have been proposed to describe cross-site scripting, but the established term is likely here to say. Still, remember that protecting against XSS does not simply mean blocking script tags, and keep in mind the power of XSS when integrating web technologies with other platforms.</p>
<div class="tweetthis" style="text-align:left;"><p> <a class="tt" href="http://twitter.com/intent/tweet?text=Cross-Site+Scripting%2C+Without+the+Scripting%E2%80%A6+or+the+Site+http%3A%2F%2Fsecuritymusings.com%2F%3Fp%3D3033" title="Post to Twitter"><img class="nothumb" src="http://securitymusings.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter2.png" alt="Post to Twitter" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://securitymusings.com/article/3033/cross-site-scripting-without-the-scripting-or-the-site&amp;t=Cross-Site+Scripting%2C+Without+the+Scripting%E2%80%A6+or+the+Site" title="Post to Facebook"><img class="nothumb" src="http://securitymusings.com/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://securitymusings.com/article/3033/cross-site-scripting-without-the-scripting-or-the-site/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Firefox Toolbox for Web App Hacking</title>
		<link>http://securitymusings.com/article/2905/a-firefox-toolbox-for-web-app-hacking</link>
		<comments>http://securitymusings.com/article/2905/a-firefox-toolbox-for-web-app-hacking#comments</comments>
		<pubDate>Thu, 21 Jul 2011 21:38:16 +0000</pubDate>
		<dc:creator>Joey Tyson</dc:creator>
				<category><![CDATA[hacking]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[Technology & Tool Thursday]]></category>

		<guid isPermaLink="false">http://securitymusings.com/?p=2905</guid>
		<description><![CDATA[If you&#8217;re new to the world of testing web application security, you may not be aware of the many great Firefox add-ons available that greatly help such endeavors. While others have compiled similar lists in the past, I thought this week would be a good time for me to share a few of the favorite [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re new to the world of testing web application security, you may not be aware of the many great Firefox add-ons available that greatly help such endeavors. While others have compiled similar lists in the past, I thought this week would be a good time for me to share a few of the favorite tools I use in my own web app work.</p>
<ol>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/httpfox/">HttpFox</a>: I&#8217;ve blogged about this one <a href="http://securitymusings.com/article/1786/monitor-network-traffic-in-firefox-with-httpfox">in the past</a>; it lists for you every HTTP request made during a given browser session, with details on headers, cookies, parameters, responses, and more. Very handy to monitor traffic when you&#8217;re browsing around an app.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/hackbar/">HackBar</a>: Another one I&#8217;ve <a href="http://securitymusings.com/article/1980/hacking-pages-in-firefox-with-the-hackbar">mentioned before</a>, the HackBar is a swiss-army knife that gives you some space for notes, common commands (such as base64 encoding or MD5 hashes), and perhaps best of all, an easy way to execute manual POST requests.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/firebug/">FireBug</a>: Perhaps one of the best-known Firefox plug-ins, FireBug is a powerful tool for inspecting a page&#8217;s DOM, debugging scripts, and investigating script variables.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/cookies-manager-plus/">Cookies Manager+</a>: As you can guess, this add-on lets you view and edit browser cookies to your heart&#8217;s content. Useful in tracking and spoofing session information.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/modify-headers/">Modify Headers</a>: Many web apps use special headers in various ways; this tool lets you set such headers manually when making requests. Spoofing XMLHttpRequest commands is one use case.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/user-agent-switcher/">User Agent Switcher</a>: I&#8217;ve seen apps with vulnerabilities that only affected mobile versions of the site. This extension lets you imitate just about any browser, allowing you to test different site interfaces.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/javascript-deobfuscator/">JavaScript Deobfuscator</a>: This is one add-on I only recently discovered, but I can already tell it will be quite useful. It logs JavaScript functions as they&#8217;re compiled or executed by the browser, which is particularly useful in dealing with obfuscated scripts.</li>
</ol>
<p>This list is by no means exhaustive and is geared towards manual testing, but it certainly provides a solid line-up for anyone looking to experiment with web app security. It also shows how easy it can be to get started tinkering with web apps. While I use Chrome for my everyday browsing, I use my tricked-out Firefox setup when I want to dig deeper. If you&#8217;re starting out, try using these add-ons against an educational app, such as <a href="https://www.owasp.org/index.php/Category:OWASP_WebGoat_Project">WebGoat</a>, <a href="http://google-gruyere.appspot.com/">Gruyere</a>, or <a href="http://www.dvwa.co.uk/">DVWA</a>.</p>
<div class="tweetthis" style="text-align:left;"><p> <a class="tt" href="http://twitter.com/intent/tweet?text=A+Firefox+Toolbox+for+Web+App+Hacking+http%3A%2F%2Fsecuritymusings.com%2F%3Fp%3D2905" title="Post to Twitter"><img class="nothumb" src="http://securitymusings.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter2.png" alt="Post to Twitter" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://securitymusings.com/article/2905/a-firefox-toolbox-for-web-app-hacking&amp;t=A+Firefox+Toolbox+for+Web+App+Hacking" title="Post to Facebook"><img class="nothumb" src="http://securitymusings.com/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://securitymusings.com/article/2905/a-firefox-toolbox-for-web-app-hacking/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Crockford&#8217;s History of JavaScript</title>
		<link>http://securitymusings.com/article/2880/crockfords-history-of-javascript</link>
		<comments>http://securitymusings.com/article/2880/crockfords-history-of-javascript#comments</comments>
		<pubDate>Tue, 28 Jun 2011 18:56:54 +0000</pubDate>
		<dc:creator>Joey Tyson</dc:creator>
				<category><![CDATA[cool]]></category>
		<category><![CDATA[general]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[Tutorial Tuesday]]></category>

		<guid isPermaLink="false">http://securitymusings.com/?p=2880</guid>
		<description><![CDATA[Ever wonder about how we came to have the technologies and programming languages used today? Yahoo&#8217;s senior JavaScript architect Douglas Crockford gave a presentation in early 2010 that traces the developments which brought us the beloved and hated language that powers client-side web behaviors. The video is nearly two hours and only the first in [...]]]></description>
			<content:encoded><![CDATA[<p>Ever wonder about how we came to have the technologies and programming languages used today? Yahoo&#8217;s senior JavaScript architect Douglas Crockford gave a presentation in early 2010 that traces the developments which brought us the beloved and hated language that powers client-side web behaviors. The video is nearly two hours and only the first in a series on JavaScript, but Crockford relates many interesting stories about the history of computing and notes patterns in how technology tends to develop. Check it out if you want to learn more about the background of that quirky yet powerful bit of tech we call JavaScript:</p>
<p><a href="http://developer.yahoo.com/yui/theater/video.php?v=crockonjs-1">Crockford on JavaScript: The Early Years</a></p>
<div class="tweetthis" style="text-align:left;"><p> <a class="tt" href="http://twitter.com/intent/tweet?text=Crockford%E2%80%99s+History+of+JavaScript+http%3A%2F%2Fsecuritymusings.com%2F%3Fp%3D2880" title="Post to Twitter"><img class="nothumb" src="http://securitymusings.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter2.png" alt="Post to Twitter" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://securitymusings.com/article/2880/crockfords-history-of-javascript&amp;t=Crockford%E2%80%99s+History+of+JavaScript" title="Post to Facebook"><img class="nothumb" src="http://securitymusings.com/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://securitymusings.com/article/2880/crockfords-history-of-javascript/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sending and Receiving S/MIME Encrypted Email on iOS 5 (Beta)</title>
		<link>http://securitymusings.com/article/2828/sending-and-receiving-smime-encrypted-email-on-ios-5-beta</link>
		<comments>http://securitymusings.com/article/2828/sending-and-receiving-smime-encrypted-email-on-ios-5-beta#comments</comments>
		<pubDate>Mon, 13 Jun 2011 22:08:20 +0000</pubDate>
		<dc:creator>Peter Hesse</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[Tutorial Tuesday]]></category>
		<category><![CDATA[Encrypted Email]]></category>
		<category><![CDATA[Encryption]]></category>
		<category><![CDATA[iOS 5]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPod Touch]]></category>
		<category><![CDATA[S/MIME]]></category>

		<guid isPermaLink="false">http://securitymusings.com/?p=2828</guid>
		<description><![CDATA[My last post on the topic of S/MIME on iOS 5 got a lot of helpful comments from readers filled in the gaps left by Apple’s current lack of documentation on this topic. The previous article is still the best place for information on how to set up your device to use S/MIME. This post [...]]]></description>
			<content:encoded><![CDATA[<p>My last post on the topic of S/MIME on iOS 5 got a lot of <a href="http://securitymusings.com/article/2808/using-smime-on-ios-5-beta#comments">helpful comments</a> from readers filled in the gaps left by Apple’s current lack of documentation on this topic. The <a href="http://securitymusings.com/article/2808/using-smime-on-ios-5-beta">previous article</a> is still the best place for information on how to set up your device to use S/MIME. This post has more information on actually <span style="text-decoration: underline;">using</span> S/MIME for encrypting email messages.</p>
<h2>Enabling S/MIME</h2>
<p>There’s a setting I missed in the previous post was pointed out by a commenter. After getting iOS 5 on the device and putting your certificates on there, you need to edit your email settings. Click Settings-&gt;Mail, Contacts, Calendars-&gt;Your email account-&gt;Account-&gt;Advanced. Scroll down to the S/MIME section and turn on S/MIME. (Note that this wasn’t required in order to read S/MIME encrypted email.) Enabling S/MIME causes two new options to appear, Sign and Encrypt. Selecting these will cause your iOS device to try and sign and/or encrypt each outgoing message. Make sure you <strong>enable the Encrypt option at this point</strong> to make your iOS device attempt to encrypt outgoing messages when possible.<span id="more-2828"></span></p>
<p style="text-align: center;"><a href="http://securitymusings.com/wp-content/uploads/2011/06/Screenshot-2011.06.13-16.31.43.png"><img class="aligncenter size-medium wp-image-2829" title="S/MIME Settings" src="http://securitymusings.com/wp-content/uploads/2011/06/Screenshot-2011.06.13-16.31.43-200x300.png" alt="S/MIME Settings" width="200" height="300" /></a></p>
<p>Immediately below the S/MIME section is a section called Certificates, which contains the certificates for which your device has private keys. You can select one of these certificates (clicking it puts a checkmark next to it) and this is the certificate that will be used to sign all outgoing messages (if you’ve turned on signing). <em>Note: you can select certificates that are not valid for the digitalSignature key usage value. I submitted a bug report (ID 9601006) to Apple about this today.</em></p>
<h2>Sending Encrypted Email With Exchange</h2>
<p>If you are connecting to a Microsoft Exchange Outlook Web Access server, and you have an enterprise public key infrastructure that publishes encryption certificates to users’ global address list (GAL) entries, you are in luck. Sending encrypted email could not be easier.</p>
<p style="text-align: left;">Simply enable the account <del>and ensure Contact syncing is being performed for the account</del><em><span style="color: #993300;"> for email and enable S/MIME (thanks, Allan)</span></em>. When you choose a contact, the iOS device will automatically attempt to download the recipient’s certificate from the GAL. If it considers it valid, you will see a lock icon displayed next to the “To” address like this:</p>
<p style="text-align: center;"><a href="http://securitymusings.com/wp-content/uploads/2011/06/Screenshot-2011.06.13-17.19.49-copy1.png"><img class="size-full wp-image-2831 aligncenter" title="Valid Recipient" src="http://securitymusings.com/wp-content/uploads/2011/06/Screenshot-2011.06.13-17.19.49-copy1-e1308002558454.png" alt="Valid Recipient" width="111" height="24" /></a></p>
<p style="text-align: left;">If it can’t find a valid certificate for your recipient, you’ll see something more like this:</p>
<h2 style="text-align: center;"><a href="http://securitymusings.com/wp-content/uploads/2011/06/Screenshot-2011.06.13-17.21.49-copy.png"><img class="size-full wp-image-2832 aligncenter" title="Invalid Recipient" src="http://securitymusings.com/wp-content/uploads/2011/06/Screenshot-2011.06.13-17.21.49-copy-e1308002625449.png" alt="Invalid Recipient" width="154" height="24" /></a></h2>
<h2 style="text-align: left;"><a href="http://securitymusings.com/wp-content/uploads/2011/06/Screenshot-2011.06.13-17.21.49-copy.png"></a><span style="font-size: 20px; font-weight: bold;">Sending Encrypted Email Without Exchange</span></h2>
<p>If you are not connecting to Exchange, there will need to be a bit more manual process to get certificates on to your device. If you’ve used S/MIME at all, you’re likely familiar with the “send me a signed email so I can send you an encrypted email” dance. iOS 5 is no exception. In order to send encrypted emails to recipients you will need their certificates, and as far as I can tell the only way to make that happen (aside from using Exchange) is through an exchange of signed emails.</p>
<p>Once your desired recipient has sent you a signed email, if the iOS device trusts the certificate used to sign it, you will see their name in the From field appear like this:</p>
<p style="text-align: center;"><a href="http://securitymusings.com/wp-content/uploads/2011/06/Screenshot-2011.06.13-17.29.51-copy.png"><img class="size-full wp-image-2833 aligncenter" title="Valid Signature" src="http://securitymusings.com/wp-content/uploads/2011/06/Screenshot-2011.06.13-17.29.51-copy-e1308002717361.png" alt="Valid Signature" width="137" height="24" /></a></p>
<p>If your device doesn&#8217;t trust them, it will look more like this:</p>
<p style="text-align: center;"><a href="http://securitymusings.com/wp-content/uploads/2011/06/Screenshot-2011.06.13-17.33.30-copy.png"><img class="size-full wp-image-2834 aligncenter" title="Invalid Signature" src="http://securitymusings.com/wp-content/uploads/2011/06/Screenshot-2011.06.13-17.33.30-copy-e1308002755265.png" alt="Invalid Signature" width="134" height="24" /></a></p>
<p style="text-align: left;">Click the sender’s name. If they are untrusted, you will see a reason why, and have a “Trust” button available to you to choose to trust this certificate from now on. In either case, you will see a “View Certificate” button. Click it.</p>
<p style="text-align: center;"><a href="http://securitymusings.com/wp-content/uploads/2011/06/Screenshot-2011.06.13-17.36.40.png"><img class="size-medium wp-image-2835 aligncenter" title="View Signer Certificate" src="http://securitymusings.com/wp-content/uploads/2011/06/Screenshot-2011.06.13-17.36.40-200x300.png" alt="View Signer Certificate" width="200" height="300" /></a></p>
<p>Click the “Install” button to install this certificate to your iOS device. Now when you reply to the sender’s email (or send them emails in the future), you will see a lock by their name indicating you will be encrypting the email to that individual.</p>
<h2>Hopeful Future Improvements</h2>
<p>I’d like to see some improvements. I’m filing <a href="https://bugreport.apple.com">bug reports</a> with Apple on each of these items, and I hope others will too.</p>
<p>First thing would be an improvement to the signing certificate selection, enabling you to (a) not choose encryption certificates for signing, and (b) make it clear what that selection is for anyway. The certificate selection option is enabled even when you choose Encrypt, which makes the setting user interface very confusing. (On a related note, on my device I could not see a Key Usage value for any certificate by looking at its details. I have also filed this as a bug.)</p>
<p>The second thing would be a capability to import certificates into the device which does not require Exchange or the signed email dance. I created a configuration profile containing public certificates for every user at my company. Unfortunately, iOS Mail did not have the capability to use these certificates for sending encrypted email. In fact, iOS could not even send <strong><span style="text-decoration: underline;">me</span></strong> an encrypted email until I first sent the device a signed email and imported it, even though my encryption certificate was on the device being used to read encrypted emails. Hopefully Apple will improve this in a future release.</p>
<p>Lastly, there should be a way to look in the contacts of the device to determine whether or not you have a (valid) encryption certificate for a user. If I am going to leave on a trip but I know I want to interact with a few people using encryption, I won’t know until I try to send them an email. The Address Book feature on my Mac already has this, it displays a little checkmark next to email addresses I can encrypt to.</p>
<p>Again, please let me know if you have any additional suggestions or feedback by entering a comment below!</p>
<div class="tweetthis" style="text-align:left;"><p> <a class="tt" href="http://twitter.com/intent/tweet?text=Sending+and+Receiving+S%2FMIME+Encrypted+Email+on+iOS+5+%28Beta%29+http%3A%2F%2Fsecuritymusings.com%2F%3Fp%3D2828" title="Post to Twitter"><img class="nothumb" src="http://securitymusings.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter2.png" alt="Post to Twitter" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://securitymusings.com/article/2828/sending-and-receiving-smime-encrypted-email-on-ios-5-beta&amp;t=Sending+and+Receiving+S%2FMIME+Encrypted+Email+on+iOS+5+%28Beta%29" title="Post to Facebook"><img class="nothumb" src="http://securitymusings.com/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://securitymusings.com/article/2828/sending-and-receiving-smime-encrypted-email-on-ios-5-beta/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Using S/MIME on iOS 5 (Beta) UPDATED</title>
		<link>http://securitymusings.com/article/2808/using-smime-on-ios-5-beta</link>
		<comments>http://securitymusings.com/article/2808/using-smime-on-ios-5-beta#comments</comments>
		<pubDate>Wed, 08 Jun 2011 19:09:54 +0000</pubDate>
		<dc:creator>Peter Hesse</dc:creator>
				<category><![CDATA[software]]></category>
		<category><![CDATA[Tutorial Tuesday]]></category>
		<category><![CDATA[Encrypted Email]]></category>
		<category><![CDATA[Encryption]]></category>
		<category><![CDATA[iOS 5]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPod Touch]]></category>
		<category><![CDATA[S/MIME]]></category>

		<guid isPermaLink="false">http://securitymusings.com/?p=2808</guid>
		<description><![CDATA[NOTE: I&#8217;ve updated this post in a few places below today, 6/13/2011, based on help from commenters. Also see the follow-up article Sending and Receiving S/MIME Encrypted Email on iOS 5 (Beta). During the 2011 Apple Worldwide Developer Conference keynote address, Scott Forstall indicated that iOS 5 would have support for S/MIME encrypted email. (Skip [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #993300;"><em>NOTE: I&#8217;ve updated this post in a few places below today, 6/13/2011, based on help from commenters. Also see the follow-up article <a href="http://securitymusings.com/article/2828/sending-and-receiving-smime-encrypted-email-on-ios-5-beta">Sending and Receiving S/MIME Encrypted Email on iOS 5 (Beta)</a>.</em></span></p>
<p>During the 2011 Apple Worldwide Developer Conference <a href="http://events.apple.com.edgesuite.net/11piubpwiqubf06/event/">keynote address</a>, Scott Forstall indicated that iOS 5 would have support for S/MIME encrypted email. (<em>Skip to 63:10 in the presentation.</em>) This morning I successfully upgraded to the iOS 5 Beta and started being able to read my S/MIME encrypted email. Here is how I did it.</p>
<p>What you need:</p>
<p>-       <a href="http://developer.apple.com/devcenter/ios/index.action#betadownloads">Xcode 4.2 and iOS SDK 5 beta</a> (requires iOS Developer Program account)</p>
<p>-       <a href="http://developer.apple.com/devcenter/ios/index.action#betadownloads">iOS 5 beta for your iOS device’s platform</a> (requires iOS Developer Program account)</p>
<p>-       <a href="http://developer.apple.com/devcenter/ios/index.action#betadownloads">iTunes 10.5 beta</a> (requires iOS Developer Program account)</p>
<p>-       <a href="http://support.apple.com/kb/DL851">iPhone Configuration Utility 3.3</a></p>
<p>-       Your S/MIME encryption and signature certificates exported in PKCS12 (.p12) format</p>
<p>(<em>Note there is some discussion about <a href="http://gizmodo.com/5809621/how-to-upgrade-to-ios-5-today-without-any-developer-account">not needing to pay for a developer program account to install iOS 5</a>. I went the legitimate route.</em>)</p>
<p>Click to read the whole walk-through of how I did it.<span id="more-2808"></span></p>
<h2>Installing iOS 5 Beta</h2>
<p>To install the iOS 5 Beta, make sure you have a backup; this will wipe your device. I used <a href="https://developer.apple.com/ios/manage/devices/howto.action">Apple’s guide</a>. First, install Xcode 4.2. Launch Xcode and plug in your iOS device. You should see a window similar to the following:</p>
<p style="text-align: center;"><a href="http://securitymusings.com/wp-content/uploads/2011/06/UseForDevelopment.jpg"><img class="aligncenter size-full wp-image-2809" title="New Device Detected" src="http://securitymusings.com/wp-content/uploads/2011/06/UseForDevelopment.jpg" alt="New Device Detected" width="400" height="222" /></a></p>
<p>Click “Use for Development”. If it doesn’t automatically bring you to the device organizer, click Window-&gt;Organizer. Your device should appear there in a Summary view. Under “Software Version”, click Other Version… and then choose the .ipsw file relevant to your device. Once you see the <strong>5.0 (9A5220p)</strong> choice under Software Version, click “Restore”. <strong><em>This will erase the contents of your iOS device including all pictures, music, videos, and apps. Make sure you have a backup.</em> </strong>Allow the restore to complete. Once it is complete, Xcode will again display the “New Device Detected” dialog, and you should click “Use for Development”. To complete the installation, launch iTunes 10.5 beta and set up the device.</p>
<p>Once you’ve set up the device, and either synced your Mail settings or manually configured them, go ahead and try and open up an encrypted email message. Here’s one that Joey sent me:</p>
<p style="text-align: center;"><a href="http://securitymusings.com/wp-content/uploads/2011/06/cantdecrypt.jpg"><img class="aligncenter size-medium wp-image-2810" title="Top Secret email I can't decrypt" src="http://securitymusings.com/wp-content/uploads/2011/06/cantdecrypt-202x300.jpg" alt="Top Secret email I can't decrypt" width="202" height="300" /></a></p>
<p>As you might guess, going to Settings &gt; General &gt; Profiles doesn’t do you much good. On my system, the only profile installed was the Provisioning Profile put there via my Developer account. So, we need to create one.</p>
<h2>Create and Install Configuration Profile</h2>
<p><span style="color: #993300;"><em>Note: If you don&#8217;t wish to deal with a configuration profile, you can also email yourself the .p12 file containing your certificate. Thanks to Oleg for the tip.</em></span></p>
<p>If you don’t already have it installed, install the <a href="http://support.apple.com/kb/DL851">iPhone Configuration Utility</a> and launch it. Make sure your iOS device is plugged in.</p>
<p>On the left side of the iPhone Configuration Utility, click on “Configuration Profiles”. Then click the “New” button at the top.</p>
<p style="text-align: center;"><a href="http://securitymusings.com/wp-content/uploads/2011/06/iphoneConfigUtil.png"><img class="aligncenter size-medium wp-image-2813" title="iPhone Configuration Utility" src="http://securitymusings.com/wp-content/uploads/2011/06/iphoneConfigUtil-300x171.png" alt="iPhone Configuration Utility" width="300" height="171" /></a></p>
<p>In the general section, it would be good to give your configuration profile a name. You will definitely need to provide a unique identifier for your configuration profile, so they are not confused across devices. While you can set a number of other required configurations on the device using this tool, the important one for S/MIME is the “Credentials” configuration. On the left scroll down to “Credentials” and click it.</p>
<p style="text-align: center;"><a href="http://securitymusings.com/wp-content/uploads/2011/06/config-credentials.png"><img class="aligncenter size-medium wp-image-2814" title="Configuring Credentials" src="http://securitymusings.com/wp-content/uploads/2011/06/config-credentials-300x171.png" alt="Configuring Credentials" width="300" height="171" /></a></p>
<p>Click “Configure” on the right-hand side to add your encryption certificate to the device. You will be prompted with a file selection dialog where you can choose your PKCS12 file containing your encryption certificate and private key.</p>
<p>Once your certificate appears in the window, you can scroll down and enter the password used to protect the PKCS12 file, or not. If you enter it, you will not be prompted to enter it when inputting the certificate on the device, but there will be a copy of your password stored with the profile. I chose <strong>not</strong> to enter my password at this time.</p>
<p>You should repeat this process for your signing certificate as well; click the + button toward the upper right to add a second certificate. In my experience, I could not read signed and encrypted emails unless I put both my signing and encryption certificates into the profile.</p>
<p>To install the configuration profile on your device, click your device on the left-hand side of the window, and go to the “Configuration Profiles” tab.</p>
<p style="text-align: center;"><a href="http://securitymusings.com/wp-content/uploads/2011/06/configurationprofiles.png"><img class="aligncenter size-medium wp-image-2815" title="Configuration Profiles" src="http://securitymusings.com/wp-content/uploads/2011/06/configurationprofiles-300x171.png" alt="Configuration Profiles" width="300" height="171" /></a></p>
<p>You should see the profile you just created. Click “Install” and your iOS device will beep or click at you. Look at the screen and you will see:</p>
<p style="text-align: center;"><a href="http://securitymusings.com/wp-content/uploads/2011/06/installprofileipod.jpg"><img class="aligncenter size-medium wp-image-2816" title="iOS Device Install Profile" src="http://securitymusings.com/wp-content/uploads/2011/06/installprofileipod-202x300.jpg" alt="iOS Device Install Profile" width="202" height="300" /></a></p>
<p>Click the “Install” button on your iOS device. You will get a warning that it will change settings on your device, click “Install Now”. You will then be prompted to enter the password used to protect your PKCS12 file if you didn’t save it as part of the configuration profile. Enter it, click “Return” and then “Done”.</p>
<p>Now when I re-launch Mail I can read Joey’s message:</p>
<p style="text-align: center;"><a href="http://securitymusings.com/wp-content/uploads/2011/06/reademail.jpg"><img class="aligncenter size-medium wp-image-2817" title="Encrypted Email" src="http://securitymusings.com/wp-content/uploads/2011/06/reademail-202x300.jpg" alt="Encrypted Email" width="202" height="300" /></a></p>
<p>Hooray! I’m reading encrypted email on an iOS device!</p>
<h2>Hopeful Future Improvements</h2>
<p>First, there is no indication on this encrypted email that it had been encrypted.<span style="color: #993300;"><em> <em>Note: See <a href="http://securitymusings.com/article/2828/sending-and-receiving-smime-encrypted-email-on-ios-5-beta">follow-up post</a> for how to fully enable and see these UI changes, thanks to Allan for pointing this out. </em></em></span>So, I don’t know if the sender thought it was sensitive. I think this will be changed in a future release. In the below still image I took from the keynote address, you can see a lock and the word “Secure” in the title bar of the message. Obviously it’s important that Apple provides this visual cue.</p>
<p style="text-align: center;"><a href="http://securitymusings.com/wp-content/uploads/2011/06/keynote-image-copy.png"><img class="aligncenter size-medium wp-image-2818" title="keynote-image copy" src="http://securitymusings.com/wp-content/uploads/2011/06/keynote-image-copy-161x300.png" alt="" width="161" height="300" /></a></p>
<p>Second is of course <span style="text-decoration: underline;">sending</span> encrypted and signed email. <span style="color: #993300;"><em><em>Note: Again, see <a href="http://securitymusings.com/article/2828/sending-and-receiving-smime-encrypted-email-on-ios-5-beta">follow-up post</a> for how to fully enable S/MIME. </em></em></span>Despite my best efforts (installing my CA as a root on the device, installing certificates for my co-workers, installing certificates for other email addresses of mine) I could not get the little lock icon to appear next to anyone’s name in the “To” field of any emails, nor could I get it to send encrypted emails.</p>
<p>I look forward to a future beta from Apple which has these features enabled. Stay tuned here, because once I figure them out I’ll document them.</p>
<p>Let me know if it worked for you, and please provide any other comments below!</p>
<div class="tweetthis" style="text-align:left;"><p> <a class="tt" href="http://twitter.com/intent/tweet?text=Using+S%2FMIME+on+iOS+5+%28Beta%29+UPDATED+http%3A%2F%2Fsecuritymusings.com%2F%3Fp%3D2808" title="Post to Twitter"><img class="nothumb" src="http://securitymusings.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter2.png" alt="Post to Twitter" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://securitymusings.com/article/2808/using-smime-on-ios-5-beta&amp;t=Using+S%2FMIME+on+iOS+5+%28Beta%29+UPDATED" title="Post to Facebook"><img class="nothumb" src="http://securitymusings.com/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://securitymusings.com/article/2808/using-smime-on-ios-5-beta/feed</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Security is More Than Cryptography</title>
		<link>http://securitymusings.com/article/2788/security-is-more-than-cryptography</link>
		<comments>http://securitymusings.com/article/2788/security-is-more-than-cryptography#comments</comments>
		<pubDate>Fri, 20 May 2011 18:43:09 +0000</pubDate>
		<dc:creator>Joey Tyson</dc:creator>
				<category><![CDATA[data protection]]></category>
		<category><![CDATA[general]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://securitymusings.com/?p=2788</guid>
		<description><![CDATA[A vulnerability demonstration this week involving a technology that&#8217;s generating buzz reminded me of an important concept: Security is as much about implementation as the underlying technologies you use. You can put together several &#8220;secure&#8221; components and still build an insecure system. The example that reminded me of this relates to Bitcoin, a somewhat controversial [...]]]></description>
			<content:encoded><![CDATA[<p>A vulnerability demonstration this week involving a technology that&#8217;s generating buzz reminded me of an important concept: Security is as much about implementation as the underlying technologies you use. You can put together several &#8220;secure&#8221; components and still build an insecure system.</p>
<p>The example that reminded me of this relates to Bitcoin, a somewhat controversial form of digital currency that&#8217;s recently been discussed by several high-profile media outlets. I&#8217;m not going to talk about any specific merits or problems associated with Bitcoin, but note that it relies on mathematically solid encryption schemes to allow transactions while preventing theft.</p>
<p>However, regardless of how strong your encryption, an insecure application using that encryption can introduce easily exploitable vulnerabilities. And Adam Baldwin of <a href="http://evilpacket.net">evilpacket</a> has shown how this can happen with Bitcoin by creating a <a href="http://evilpacket.net/2011/may/17/stealing-bitcoins/">video demo of XSS/CSRF problems</a> in a Bitcoin exchange site. These application-level issues could enable an attacker to steal Bitcoins without cracking the basic cryptography employed.</p>
<p>Using proven security technologies is important, but it&#8217;s only one part of securing your organization. I still remember my surprise when I first discovered that an &#8220;unbreakable&#8221; cipher did exist: the <a href="http://www.cryptosmith.com/archives/80">one-time pad</a>. But using one-time pads is often impractical, and they are still susceptible to compromise from human factors. Building secure business operations requires understanding the risks at each level of a system and having a defense-in-depth response.</p>
<p>At Gemini, we can help you assess those risks, architect strategies to handle them, then apply those solutions in your organization to produce measurable security improvements. Don&#8217;t simply trust in &#8220;encryption&#8221; or WAFs to protect your data &#8211; let us help you understand the big picture of your company&#8217;s security <a href="http://geminisecurity.com/company/contact">today</a>.</p>
<div class="tweetthis" style="text-align:left;"><p> <a class="tt" href="http://twitter.com/intent/tweet?text=Security+is+More+Than+Cryptography+http%3A%2F%2Fsecuritymusings.com%2F%3Fp%3D2788" title="Post to Twitter"><img class="nothumb" src="http://securitymusings.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter2.png" alt="Post to Twitter" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://securitymusings.com/article/2788/security-is-more-than-cryptography&amp;t=Security+is+More+Than+Cryptography" title="Post to Facebook"><img class="nothumb" src="http://securitymusings.com/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://securitymusings.com/article/2788/security-is-more-than-cryptography/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>OpenVPN on Android</title>
		<link>http://securitymusings.com/article/2766/openvpn-on-android</link>
		<comments>http://securitymusings.com/article/2766/openvpn-on-android#comments</comments>
		<pubDate>Thu, 12 May 2011 18:39:43 +0000</pubDate>
		<dc:creator>Tim Donaworth</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[general]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[Technology & Tool Thursday]]></category>

		<guid isPermaLink="false">http://securitymusings.com/?p=2766</guid>
		<description><![CDATA[OpenVPN isn’t anything new. But today I finally overcame a hurdle I had with trying to connect to our company VPN via my Android device. The OpenVPN for android project isn’t anything new; it’s actually been in the works since late 2009 if you follow it all the way back through a couple forks. The [...]]]></description>
			<content:encoded><![CDATA[<p>OpenVPN isn’t anything <a href="http://securitymusings.com/article/1942/openvpn-and-two-factor-authentication">new</a>. But today I finally overcame a hurdle I had with trying to connect to our company VPN via my Android device. The <a href="http://code.google.com/p/android-openvpn-installer/">OpenVPN for android</a> project isn’t anything new; it’s actually been in the works since late 2009 if you follow it all the way back through a couple forks.</p>
<p>The main issue that was holding me up wasn’t anything to do with Android-OpenVPN port itself. It was simply to do with the Android device I was using (thanks Samsung for crapping on us with the Galaxy S devices). A recent ROM update finally put the final pieces I needed into motion for being able to utilize OpenVPN. The main holdback was the lack of tun in the kernel of my Android build.</p>
<p><strong><span id="more-2766"></span></strong>Anyways, if you’ve been needing VPN access, or specifically need the OpenVPN variant they give it a shot. Outlined below is what you’ll need:</p>
<ul>
<li>A rooted Android device – You may also need an upgraded rom. The project is built using cynogen 6. If your device supports this ROM or one of its variants I highly recommend it. But if you’re like me and on a Samsung device or other unsupported device, look for upgrades at <a href="http://xda-developers.com">XDA-Developers</a>.</li>
<li>An OpenVPN configuration file. You’ll most likely have this along with your desktop client. (client.ovpn)</li>
<li>Android-openvpn-installer – Available <a href="http://code.google.com/p/android-openvpn-installer/downloads/detail?name=OpenVPN-Installer-0.2.3.apk&amp;can=2&amp;q=">here </a>or from the <a href="https://market.android.com/details?id=de.schaeuffelhut.android.openvpn.installer&amp;feature=search_result">Android Market</a>– this is mostly used to install the OpenVPN binaries onto your device.</li>
<li>Android-openvpn-settings – This (and this) is what you’ll actually use in Android to start/stop/configure the VPN.</li>
<li>A way to transfer files to your device’s SD card or internal storage (for those of you without expandable storage).</li>
</ul>
<p>&nbsp;</p>
<ol>
<li>Begin by rooting your device if it’s not done already. Look towards XDA-Developers if you need help with this.</li>
<li>Install the OpenVPN-Installer either from the <a href="http://code.google.com/p/android-openvpn-installer/downloads/detail?name=OpenVPN-Installer-0.2.3.apk&amp;can=2&amp;q=">Google Code page</a>, or directly from the <a href="https://market.android.com/details?id=de.schaeuffelhut.android.openvpn.installer&amp;feature=search_result">Android Market</a>.
<ol>
<li>Run the installer and remember which path you choose to install OpenVPN into. I chose the &#8220;<strong>/system/bin</strong>&#8221; directory. You’ll need to enter this directory into OpenVPN-Settings later.</li>
<li>If it installs correctly, it will show a green plus button and continue on.</li>
</ol>
</li>
<li>You’ll now need to transfer your OpenVPN configuration file to your device’s external storage. Create a folder on the root of the storage called &#8220;<strong>openvpn</strong>&#8221; and place your configuration file here.</li>
<li>Install OpenVPN-Settings either from the <a href="http://code.google.com/p/android-openvpn-settings/downloads/detail?name=OpenVPN-Settings-0.4.7.apk&amp;can=2&amp;q=">Google Code page</a>, or directly from the<a href="https://market.android.com/details?id=de.schaeuffelhut.android.openvpn&amp;feature=search_result"> Android Market</a>.
<ol>
<li>Once installed, you’ll need to configure it. <strong>Menu</strong> (button)<strong> -&gt; Advanced</strong></li>
<li>Now you’ll want to configure the two paths: “<strong>Path to configurations</strong>” and &#8220;<strong>Path to openvpn binary</strong>&#8220;</li>
<li>Select them one at a time and enter the required paths. For me, the configurations path ended up being &#8220;<strong>/sdcard/openvpn</strong>&#8221; and the binary path was &#8220;<strong>/system/bin/openvpn</strong>&#8220;.</li>
</ol>
</li>
<li>Now return to OpenVPN settings by using your back button and you should see a connection listed with the same name as your configuration file.</li>
<li>Enable the VPN by pressing the OpenVPN checkbox, once it’s enabled, press the checkbox for the connection you want to connect to.</li>
<li>You’ll need to enter your username and password, but the notification will most likely be in the top bar, so pull it down, click the notification, and enter your credentials. (You’ll have to do this every time you connect, no saving here).</li>
<li>Enjoy OpenVPN goodness!</li>
</ol>
<p>They’ve made the process of using it pretty straight forward, especially for what it used to be. Feel free to check out the Google Code sites if you would like to contribute or have any issues.</p>
<p>One big caveat on all of this as Uncle Ben once said – &#8220;with great power comes great responsibility&#8221; so be sure to continue using safe (read secure) computing practices, as once you’re on the VPN, your device is now connected to your company&#8217;s VPN. In most cases, this is useful for communicating with exchange servers or shared file access. But be sure to disconnect when you’re done using it and ensure you keep a device password.</p>
<p>Links:</p>
<p>OpenVPN-Installer &#8211; <a href="http://code.google.com/p/android-openvpn-installer/downloads/detail?name=OpenVPN-Installer-0.2.3.apk&amp;can=2&amp;q=">Code </a>| <a href="https://market.android.com/details?id=de.schaeuffelhut.android.openvpn.installer&amp;feature=search_result">Market</a></p>
<div class="wp-caption alignnone" style="width: 160px"><a rel="attachment wp-att-2772" href="http://securitymusings.com/article/2766/openvpn-on-android/openvpn-installer"><img class="alignleft size-full wp-image-2772" title="openvpn-installer" src="http://securitymusings.com/wp-content/uploads/2011/05/openvpn-installer.png" alt="" width="150" height="150" /></a><p class="wp-caption-text">android openvpn-installer</p></div>
<p>OpenVPN-Settings &#8211; <a href="http://code.google.com/p/android-openvpn-settings/downloads/detail?name=OpenVPN-Settings-0.4.7.apk&amp;can=2&amp;q=">Code </a>| <a href="https://market.android.com/details?id=de.schaeuffelhut.android.openvpn&amp;feature=search_result">Market </a></p>
<div class="wp-caption alignnone" style="width: 160px"><a rel="attachment wp-att-2774" href="http://securitymusings.com/article/2766/openvpn-on-android/openvpn-settings-2"><img class="alignleft size-full wp-image-2774" title="openvpn-settings" src="http://securitymusings.com/wp-content/uploads/2011/05/openvpn-settings1.png" alt="" width="150" height="150" /></a><p class="wp-caption-text">android openvpn-settings</p></div>
<div class="tweetthis" style="text-align:left;"><p> <a class="tt" href="http://twitter.com/intent/tweet?text=OpenVPN+on+Android+http%3A%2F%2Fsecuritymusings.com%2F%3Fp%3D2766" title="Post to Twitter"><img class="nothumb" src="http://securitymusings.com/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter2.png" alt="Post to Twitter" /></a> <a class="tt" href="http://www.facebook.com/share.php?u=http://securitymusings.com/article/2766/openvpn-on-android&amp;t=OpenVPN+on+Android" title="Post to Facebook"><img class="nothumb" src="http://securitymusings.com/wp-content/plugins/tweet-this/icons/en/facebook/tt-facebook.png" alt="Post to Facebook" /></a></p></div>]]></content:encoded>
			<wfw:commentRss>http://securitymusings.com/article/2766/openvpn-on-android/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

