<?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>Securism Blog</title>
	<atom:link href="http://blog.securism.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.securism.com</link>
	<description>Simple Security.</description>
	<lastBuildDate>Sun, 12 Feb 2012 15:10:17 +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>Physical key management</title>
		<link>http://blog.securism.com/2012/02/physical-key-management/</link>
		<comments>http://blog.securism.com/2012/02/physical-key-management/#comments</comments>
		<pubDate>Sun, 12 Feb 2012 15:10:17 +0000</pubDate>
		<dc:creator>Walter Goulet</dc:creator>
				<category><![CDATA[How-to]]></category>
		<category><![CDATA[methods]]></category>

		<guid isPermaLink="false">http://blog.securism.com/?p=353</guid>
		<description><![CDATA[A trend that I&#8217;ve discovered as I work with hardware security modules (HSMs) is that the systems with the highest level of claimed security ultimately reduce key management to a physical problem. That is, credentials that are used to expose &#8230;<p class="read-more"><a href="http://blog.securism.com/2012/02/physical-key-management/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>A trend that I&#8217;ve discovered as I work with hardware security modules (HSMs) is that the systems with the highest level of claimed security ultimately reduce key management to a physical problem. That is, credentials that are used to expose key material to applications are password or PIN protected physical devices (smart cards, USB tokens and the like). This approach does make sense since theoretically such tokens are impervious to attacks that can be used against typical password based authentication systems. However, physical key management introduces it&#8217;s own problems.</p>
<p>First, it&#8217;s much easier to lose physical keys than it is to forget critical system passwords (assuming a robust password management system is in place). Loss of physical keys renders some or all of the HSM contents unusable to applications. Therefore, when setting up a HSM to prepare it for use by applications, it&#8217;s critical to make backups of your physical keys. The approach I recommend to clients is to identify at least 2 system owners that will act as key custodians for the physical keys. In addition to the keys that are assigned to system owners, a third and possible fourth set of keys are created for disaster recovery or for unlikely scenarios such as the two system owners simultaneously winning the lottery! Passwords or PINs used to access the material stored on the physical keys need to be protected as any other high value system password needs to be. For backup material, I always recommend that a slip of paper with the PIN/password used by the physical keys be stored directly with the keys in a tamper evident bag that is locked away in a safe (along with backup media that stores copies of the key material stored on the HSM itself of course!)</p>
<p>Another concern with physical key management is ensuring that all copies of keys are carefully inventoried and controlled. Unfortunately, I have found that this is much easier said than done and that you are better off designing your system under the assumption that there will be duplicate physical keys made that you will lose track of. The best defense against uncontrolled key material is to ensure that additional credentials/keys are necessary in order to use a duplicated key. The method that I recommend to clients using HSMs that support this feature is to require MofN authentication, otherwise known as witness keys. Witness keys are basically additional physical keys that all need to be presented together with a master key in order to gain access to HSM contents. The intent is that there would need to be collusion between multiple parties to actually make use of any single set of duplicated key material.</p>
<p>The last concern that I&#8217;ll discuss in this post are the responsibilities associated with being a physical key custodian. Obviously, anyone who is assigned a physical key needs to take all possible precautions to protect against the loss of their key and report it&#8217;s loss as soon as possible to system owners. Assuming that good backups are in place, it is relatively simple to replace a lost key. Perhaps a more important role, however, is to always question why their physical keys are needed for accessing the system. Applications which use HSMs for key storage can generally be configured to require physical keys to be used to unlock the HSM for each key access or to permit the HSM to be unlocked for a period of time while key access is required. The method and frequency of access to the HSM must be understood by all key holders (including witness key holders) so that out of the ordinary requests for presenting physical keys to the HSM can be detected.</p>
<p>As with any other security control, HSMs using physical keys can greatly reduce an organization&#8217;s risk, but only if solid operational processes are in place.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.securism.com/2012/02/physical-key-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding an additional layer of authentication to websites with HTTP Reverse Proxies</title>
		<link>http://blog.securism.com/2012/01/adding-an-additional-layer-of-authentication-to-websites-with-http-reverse-proxies/</link>
		<comments>http://blog.securism.com/2012/01/adding-an-additional-layer-of-authentication-to-websites-with-http-reverse-proxies/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 05:39:35 +0000</pubDate>
		<dc:creator>Walter Goulet</dc:creator>
				<category><![CDATA[How-to]]></category>
		<category><![CDATA[Network Design]]></category>
		<category><![CDATA[Web Authentication]]></category>

		<guid isPermaLink="false">http://blog.securism.com/?p=339</guid>
		<description><![CDATA[HTTP reverse proxies can be used to add an additional layer of client authentication without impacting internal web sites. This post describes how reverse proxies work and explains in detail how IIS7.5 was used to provide this functionality.<p class="read-more"><a href="http://blog.securism.com/2012/01/adding-an-additional-layer-of-authentication-to-websites-with-http-reverse-proxies/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>For my last client engagement, I was tasked with adding an additional layer of authentication to a publicly accessible website without actually modifying the website&#8217;s application code or web server configuration. After doing a little research, I came upon the idea of using a HTTP reverse proxy to intercept requests to the website and perform additional authentication before letting end users access the target web application.</p>
<p>If you are not familiar with the concept of a HTTP reverse proxy, think of it as a specialized web server that inspects incoming HTTP requests, forwards them to another (usually internal) web server after any local processing is completed, and makes sure that HTTP responses sent back to the client contain proper host names. The following diagram illustrates the typical processing flow when using a SSL enabled reverse proxy server that is acting as a front end to an internal web server.</p>
<p><img src="data:image/png;base64,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" alt="" /></p>
<p>In this diagram, the reverse proxy server is performing 3 major tasks:</p>
<ul>
<li>Performing an additional level of authentication for client connections.</li>
<li>Proxying HTTP requests and rewriting hostnames in HTTP responses.</li>
<li>Terminating SSL connection requests from clients.</li>
</ul>
<p>In addition to the tasks above, it is possible to use a reverse proxy server  as a poor mans web application firewall by filtering HTTP requests that contain invalid characters that could be used for basic SQLi attacks. Reverse proxy functionality is provided by external modules such as mod_proxy for Apache and URL Rewrite/Application Request Routing for IIS.</p>
<p>To get clients to connect to the reverse proxy server instead of the internal application server, the reverse proxy server is usually configured with a public DNS hostname and publicly routable IP address. Thus, any links that are made available to users will resolve to the public IP address/DNS hostname of the reverse proxy server. The reverse proxy server will then perform the job of mapping the external HTTP requests to the proper internal web server.</p>
<p>With that introduction out of the way, let&#8217;s discuss how a HTTP reverse proxy can be used to add an additional layer of authentication to a web application. As pointed out earlier, a HTTP reverse proxy is really nothing more than a dedicated web server with additional modules that decide when and how to forward traffic to another web server. Thus, when a user connects to a HTTP reverse proxy server, any authentication method that is supported by the reverse proxy server&#8217;s web server platform can be used to authenticate users.</p>
<p>For my engagement, I used IIS 7.5 with <a href="http://www.iis.net/download/urlrewrite">URL Rewrite 2.0</a> as my reverse proxy server. To provide an additional layer of authentication, I used the <a href="http://www.emc.com/security/rsa-securid/rsa-authentication-agents/iis-7-0.htm">RSA Web Authentication Agent 7.0</a> along with <a href="http://www.emc.com/security/rsa-authentication-manager-express.htm">Authentication Manager Express</a>. After installing the web authentication agent, I configured the agent to protect all resources on the reverse proxy server. This has the effect of forcing all HTTP requests that are accepted by the reverse proxy server to be intercepted and processed by the web authentication agent. Once the web authentication agent completed the authentication sequence with the client, a record of the authentication is stored in the client&#8217;s browser as a cookie. Immediately after the authentication sequence completes, the agent redirects the user back to their original destination which again points to the reverse proxy server. Since authentication is now complete, the web authentication agent will no longer intercept the request and will instead forward the request over to the URL rewrite module. The URL rewrite module will then simply forward requests to the internal web server per the rewrite rules that were configured.</p>
<p>As for the rewrite rules themselves, when using the RSA web authentication agent on the reverse proxy server I found it necessary to write 2 rules for incoming HTTP requests to ensure that the reverse proxy server did not forward requests for the web authentication agent to the internal web server. To handle requests that should be processed by the web authentication agent, I created an inbound URL rewrite rule that matched the URL path for requests to the web authentication agent. The action for this rule was to simply not process it, which permitted the request to drop out of the URL rewrite module and be handled by the web authentication agent. Any other request that did not match the agent&#8217;s URL path was forwarded to the internal web server. The following snippet from my web.config file illustrates the rules that were used:</p>
<pre>  &lt;rules&gt;
     &lt;rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="true"&gt;
      &lt;match url="(.*)" /&gt;
      &lt;conditions&gt;
       &lt;add input="{CACHE_URL}" pattern="^(https?)://" /&gt;
       &lt;add input="{REQUEST_URI}" pattern="(.*IISWebAgentIF.dll.*)" /&gt;
      &lt;/conditions&gt;
      &lt;action type="None" /&gt;
     &lt;/rule&gt;
     &lt;rule name="ReverseProxyInboundRule2" enabled="true" stopProcessing="true"&gt;
      &lt;match url="(.*)" /&gt;
      &lt;conditions&gt;
       &lt;add input="{CACHE_URL}" pattern="^(https?)://" /&gt;
      &lt;/conditions&gt;
       &lt;action type="Rewrite" url="http://www.example-internal.com:8080/{R:1}" logRewrittenUrl="true" /&gt;
      &lt;/rule&gt;
   &lt;/rules&gt;</pre>
<p>For fans of open source solutions, the same functionality could easily be provided with Apache&#8217;s mod_proxy module using the <a href="http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#proxypass">ProxyPass</a> and <a href="http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#proxypassreverse">ProxyPassReverse</a> directives. The virtual servers that contain these directives would then need to be configured to require authentication at which point any of the standard Apache user authentication methods such as mod_auth or mod_auth_ldap. Apache has the additional advantage of supporting the <a href="http://www.modsecurity.org/">mod_security </a>web application firewall, so the mod_proxy directives could be easily combined with mod_security to provide both additional client authentication and a transparent WAF.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.securism.com/2012/01/adding-an-additional-layer-of-authentication-to-websites-with-http-reverse-proxies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Considerations for cloud service providers and consumers</title>
		<link>http://blog.securism.com/2012/01/cloud-security-chicago-csa/</link>
		<comments>http://blog.securism.com/2012/01/cloud-security-chicago-csa/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 14:32:07 +0000</pubDate>
		<dc:creator>Walter Goulet</dc:creator>
				<category><![CDATA[Cloud]]></category>

		<guid isPermaLink="false">http://blog.securism.com/?p=334</guid>
		<description><![CDATA[Continuing my tentative steps into cloud security, I went to a talk given by Rafal Los of HP (http://h30499.www3.hp.com/t5/Following-the-White-Rabbit-A/bg-p/sws-119) last night at the Chicago Cloud Security Alliance chapter meeting. The purpose of the talk was to understand cloud security from &#8230;<p class="read-more"><a href="http://blog.securism.com/2012/01/cloud-security-chicago-csa/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Continuing my tentative steps into cloud security, I went to a talk given by Rafal Los of HP (http://h30499.www3.hp.com/t5/Following-the-White-Rabbit-A/bg-p/sws-119) last night at the Chicago Cloud Security Alliance chapter meeting. The purpose of the talk was to understand cloud security from two perspectives; as a consumer and as a provider of cloud computing services. The talk drew quite a bit of discussion from the crowd, mainly due to disagreements on terminology and over different approaches to managing cloud providers.</p>
<p>Some key takeaways for me:</p>
<ul>
<li>Cloud service providers pretty much cover the entire stack, from infrastructure all the way to software. However, you as a smart consumer still need some in-house expertise on the entire stack so you can adequately manage your providers.</li>
<li>Transparency is key for a cloud provider, but transparency means more than just sales sheets and sanitized ISO/ITIL compliant security policies. Think open Bugzilla style issue trackers that customers can follow to see issues affecting the service offered by their cloud providers.</li>
<li>Good lawyers are needed by both cloud providers and cloud consumers to manage liability (yes, even cloud consumers are exposed to some new liabilities when using cloud services.)</li>
<li>Vendor lock in to a cloud provider is scary to consumers; again good in house expertise is needed to design your cloud strategy to migrate easily between providers.</li>
</ul>
<p>Overall, it was a useful, thought provoking discussion that provided insight into areas of cloud computing I hadn&#8217;t thought of before. For any Chicago locals interested in the Chicago CSA, their website can be found <a href="http://chapters.cloudsecurityalliance.org/chicago/">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.securism.com/2012/01/cloud-security-chicago-csa/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Musings on Enterprise Identity Management</title>
		<link>http://blog.securism.com/2011/11/musings-on-enterprise-identity-management/</link>
		<comments>http://blog.securism.com/2011/11/musings-on-enterprise-identity-management/#comments</comments>
		<pubDate>Fri, 11 Nov 2011 03:40:59 +0000</pubDate>
		<dc:creator>Walter Goulet</dc:creator>
				<category><![CDATA[Fundamentals]]></category>

		<guid isPermaLink="false">http://blog.securism.com/?p=329</guid>
		<description><![CDATA[Funny how I learn something new everytime I visit a new customer. Seeing different environments and how different customers solve the same problems is eye opening. More importantly, the more environments I see the more I begin to understand how &#8230;<p class="read-more"><a href="http://blog.securism.com/2011/11/musings-on-enterprise-identity-management/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Funny how I learn something new everytime I visit a new customer. Seeing different environments and how different customers solve the same problems is eye opening. More importantly, the more environments I see the more I begin to understand how misconceptions I had held in the past.</p>
<p>As a little background, I broke into the infosec biz in the opposite way that many of my peers have. My first formal role in infosec was as a security systems engineer for Motorola. My job was to basically look at security standards, product management requirements, and security threats and design security features. Problem is, when you take that direction you miss out on the real world, hands on perspective of infosec and have difficulty understanding exactly how organizations infosec functions (if it even exists!) It&#8217;s way too easy to fall into the ivory tower mentality. Add a couple of years of grad school in infosec, and you have the makings of a great infosec philosopher, but not a practitioner. Consulting has really opened my eyes and is helping me understand what I never fully grasped before.</p>
<p>With that out of the way, during my last couple of engagements I&#8217;ve learned a ton about enterprise identity management and have corrected a major misconception I had held in the past. Earlier in my career, I was faced with solving the problem of figuring out how to integrate enterprise identity management systems with wireless equipment; so that system administrators could use their existing credentials to log into the management interfaces of the wireless infrastructure. At the time, the solution that struck me was to use a AAA server with RADIUS; after all RADIUS is easily extensible, simple to develop and support, and is flexible. What I completely failed to realize at the time is that a AAA server is in fact not intended to act as an identity management system. Sure, AAA stands for <span style="text-decoration: underline;">Authentication,</span> <span style="text-decoration: underline;">Authorization</span>, and <span style="text-decoration: underline;">Accounting<strong>,</strong></span> but the AAA server is generally just a relay and is not the actual identity management system.</p>
<p>As I have since learned, identity management is actually centered around one of the oldest protocols in the book, LDAP or Lightweight Directory Access Protocol. LDAP is a directory service that is designed to provide extremely fast lookups and extensive search capabilities. LDAP gets it speed from the hierarchical design of objects that are stored within the directory. All objects descend from a single root node, with each child node having one or more child nodes and one or more sibling nodes. Here&#8217;s a figure of a basic tree structure of an LDAP directory.</p>
<p><img src="data:image/png;base64,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" alt="" /></p>
<p>Each node in the directory is uniquely identifiable by use of a distinguished name. A distinguished name is made up by simply concatenating the identifiers for each ascendent node to the node being named. In this figure, the DN for me would be CN=Walter,OU=Person,OU=Users,DC=jdt,DC=com. Each node also has a collection of attributes associated with it that contain information such as date of creation, address, member groups, object identifier and any other information that is pertinent to the object itself. Lookups are done by connecting to the directory server and issuing queries. LDAP queries are interesting in that they are written in a reverse polish notation style; e.g. if you wanted to search for my name in the query above quickly, you could search for a person named Walter with the following query: (&amp;(OU=Users)(CN=Walter)).</p>
<p>To make LDAP directories generally useful, they usually provide some information to LDAP clients without requiring the client to authenticate. Examples would be a web based corporate address book that is accessible from a organizations intranet. However, in order to gain access more sensitive information, LDAP clients usually authenticate to a directory via a bind operation. In fact, this is how many network operating systems such as Active Directory, Novell etc. authenticate users; a bind against a corporate LDAP directory is performed using the user&#8217;s credentials. Once the bind is successful, the user is granted access to the local system and further authenticated LDAP queries can be performed to obtain additional information needed to grant the user access to resources.</p>
<p>LDAP itself does not provide any integrity or encryption mechanisms to protect information that is transmitted between the directory and LDAP clients. However, bind operations usually use authentication protocols which protect credentials that are transmitted such as NTLM or GSSAPI. To provide integrity and confidentiality for LDAP data, LDAP may also be transmitted over a TLS secured port (LDAPS). Yet another use case for an enterprise PKI that I had absolutely no idea about.</p>
<p>So, to complete the original story, what I&#8217;ve since discovered when it comes to centralized user management, enterprise identity management, don&#8217;t think of AAA services. Rather, think of LDAP directory services. As a matter of fact, AAA servers usually have plug-ins (such as FreeRADIUS&#8217;s rlm_ldap plugin) that let them use LDAP directories as a data source when performing authentication and authorization services.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.securism.com/2011/11/musings-on-enterprise-identity-management/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Adding more value to your customers</title>
		<link>http://blog.securism.com/2011/05/adding-more-value-to-your-customers/</link>
		<comments>http://blog.securism.com/2011/05/adding-more-value-to-your-customers/#comments</comments>
		<pubDate>Wed, 25 May 2011 01:20:34 +0000</pubDate>
		<dc:creator>Walter Goulet</dc:creator>
				<category><![CDATA[Fundamentals]]></category>
		<category><![CDATA[customer relations]]></category>
		<category><![CDATA[engagements]]></category>
		<category><![CDATA[value]]></category>

		<guid isPermaLink="false">http://blog.securism.com/?p=314</guid>
		<description><![CDATA[Looking back at my first job, I realize that some of the same concepts which I used to sell camera equipment in a retail store still apply to my consulting job that I have today. Being responsive to customer needs, &#8230;<p class="read-more"><a href="http://blog.securism.com/2011/05/adding-more-value-to-your-customers/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Looking back at my first job, I realize that some of the same concepts which I used to sell camera equipment in a retail store still apply to my consulting job that I have today. Being responsive to customer needs, explaining the benefits of what they are considering purchasing (or already have purchased), and in general going over and above the minimum requirements for your job are all perfectly valid concepts that apply even to security consultants.</p>
<p>As an example, in my current engagement I&#8217;m deploying a part of a tokenization solution to satisfy PCI requirements that my customer is required to satisfy. The scope of the engagement from my perspective is rather limited, but I&#8217;ve taken a deliberate effort to go above and beyond the minimum requirements outlined in the SOW (without increasing my scope, a fine line to walk for sure!) Specifically, while I was in the customer&#8217;s data center performing some configuration tasks, I looked around and noticed that there didn&#8217;t appear to be any cameras in position to observe the equipment I was configuring. As the customer explained that the equipment was considered &#8216;in scope&#8217; of the PCI DSS requirements, I pointed out that requirement 9.1.1 of the DSS requires the use of a video camera to monitor equipment (and yes, I know that the requirement is an and/or requirement). The customer contact I was working with was not part of the physical security team and couldn&#8217;t confirm whether or not the area was in fact monitored, but he took it as an action item to follow up on.</p>
<p>While in all likelihood this will turn out to be a non-issue, the customer expressed appreciation at my observation. This in turn leads to a stronger sense of trust between us and, in my opinion, enhances the overall value of the engagement. So next time you find yourself in a position where you can offer a little extra advice to your customers, consider going the extra mile. You won&#8217;t regret it!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.securism.com/2011/05/adding-more-value-to-your-customers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A primer on HSMs</title>
		<link>http://blog.securism.com/2011/05/a-primer-on-hsms/</link>
		<comments>http://blog.securism.com/2011/05/a-primer-on-hsms/#comments</comments>
		<pubDate>Thu, 12 May 2011 12:06:59 +0000</pubDate>
		<dc:creator>Walter Goulet</dc:creator>
				<category><![CDATA[Fundamentals]]></category>

		<guid isPermaLink="false">http://blog.securism.com/?p=312</guid>
		<description><![CDATA[A big part of my job is to advise customers how to protect high value secret keys such as root CA private keys, tokenization key encryption keys, etc. Solutions range from the relatively simple read-only private key file, passphrase protected &#8230;<p class="read-more"><a href="http://blog.securism.com/2011/05/a-primer-on-hsms/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>A big part of my job is to advise customers how to protect high value secret keys such as root CA private keys, tokenization key encryption keys, etc. Solutions range from the relatively simple read-only private key file, passphrase protected stored with minimal permissions to storing keys on dedicated, purpose built hardware devices. Purpose built hardware devices used for secure key storage are known as hardware security modules (HSM). A HSM can be thought of as both a secure key storage device and a hardware implementation of crypto algorithms. Unlike purpose built encryption hardware such as SSL accelerators, a HSM is not designed as a high throughput, low latency device designed to convert plaintext to ciphertext at high speeds. Rather, it is designed to limit the exposure of key material stored within it. This is accomplished by performing operations that require access to the key material within the HSM itself (such as digitally signing data). In some cases where necessary, HSMs can also provide the keys to authorized devices/users. Applications which wish to use HSMs typically use a vendor provided driver that integrates with various platforms (for example, Microsoft provides a Cryptographic Service Provider interface that can be used to integrate applications with HSMs).</p>
<p>In general, the design philosophy behind HSMs is that it should fail closed; meaning that if an attacker or unauthorized user attempts to repeatedly gain access to the HSM key material, the HSM will zeroize all stored keys. This design makes sense because if an attacker were to gain physical access to the HSM, it is preferable that the secret keys be destroyed rather than possibly be exposed. However, since the HSM protects high value keys, it is imperative that organizations which make use of HSMs have a robust key backup scheme in place such as sharing the key across multiple HSMs that are physically separated.</p>
<p>HSMs typically have a strong role based authentication mechanism built in that is designed to differentiate between key owners and HSM administrators. This separation of duties between key owners and administrators is crucial as it prevents HSM administrators from gaining access to key material. Authentication can be provided via the use of passphrases, or in some HSMs, via the use of individual hardware keys that are physically presented to the HSM.</p>
<p>Since access to key material and to the HSM itself needs to be carefully audited and tracked, a principle that is implemented in some HSMs is the concept of witness keys. A witness key is a separate set of keys that are distributed to other people (usually from different departments/organizations than HSM administrators or key owners) that must be presented to the HSM before access will be granted to the HSM and/or key material stored within the HSM. Witness key systems are also known as MofN systems, where &#8216;M&#8217; witness keys out of a total of &#8216;N&#8217; existing witness keys must be presented before access can be granted.</p>
<p>In summary, proper protection of high value keys is an important role that any security organization should take very seriously. HSMs can be a viable solution to help ensure that key material is stored in a safe, controlled fashion.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.securism.com/2011/05/a-primer-on-hsms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Use of publicly trusted certificates in enterprise networks</title>
		<link>http://blog.securism.com/2011/04/use-of-publicly-trusted-certificates-in-enterprise-networks/</link>
		<comments>http://blog.securism.com/2011/04/use-of-publicly-trusted-certificates-in-enterprise-networks/#comments</comments>
		<pubDate>Tue, 26 Apr 2011 20:49:20 +0000</pubDate>
		<dc:creator>Walter Goulet</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.securism.com/?p=304</guid>
		<description><![CDATA[Recently I&#8217;ve been involved in discussions in the Mozilla security policy mail list where the topic of permitting privately owned PKIs to be subordinates of publicly trusted CAs is being debated. It&#8217;s an interesting debate because I see valid reasons &#8230;<p class="read-more"><a href="http://blog.securism.com/2011/04/use-of-publicly-trusted-certificates-in-enterprise-networks/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Recently I&#8217;ve been involved in <a href="http://groups.google.com/group/mozilla.dev.security.policy/topics">discussions </a>in the Mozilla security policy mail list where the topic of permitting privately owned PKIs to be subordinates of publicly trusted CAs is being debated. It&#8217;s an interesting debate because I see valid reasons to both permit and forbid private PKIs from being subordinates of public CAs.</p>
<p>First, a little background. Previous visitors that have read my <a href="http://blog.securism.com/2009/01/summarizing-pki-certificate-validation/">post</a> on certificate validation will recall that a standard PKI hierarchy has a single CA (root CA) that is issuing certificates to subscribers. In this model, subscribers are assumed to have a copy of the root CA certificate in their devices. That certificate is then used to validate that certificates presented to the subscriber have been issued by the CA. In an enterprise network environment, a simple flat hierarchy where the root CA directly issues all subscriber certificates, all devices which will need to access resources protected by subscriber certificates would then need to be provisioned with the root CA certificate. In some simple environments, this is easy. For example, in a standard Microsoft Active Directory network, a domain controller could be configured to both act as a CA and could add the root CA certificate to group policy. Computers which are domain members could then fetch the root CA certificate as part of the domain login process.</p>
<p>However, as the set of devices which are used in enterprise networks continue to grow (iPads, iPhones) and as other web browsers (Mozilla, Opera) gain even more acceptance, the problem of provisioning root CA certificates gets more complicated. These devices/software applications obviously cannot be joined to the domain to obtain the root CA certificate. Therefore, the enterprise network administrator will have to provision the root CA certificate on these other devices using some other centralized certificate management solution.</p>
<p>Several commercial certificate authorities offer a service where they will issue a subordinate CA certificate to enterprise customers (full disclosure: my company offers this service as well.) In this case, an enterprise PKI CA certificate would be signed by a root CA certificate that is already embedded in most browsers, operating systems and devices. This permits the enterprise root CA to be trusted by those devices/applications without a need to provision an additional root CA certificate in them.</p>
<p>Such an approach has pros and cons to it. Let&#8217;s analyze this approach in the context of 4 common enterprise PKI use cases as outlined in my <a href="http://www.google.com/url?sa=t&amp;source=web&amp;cd=1&amp;ved=0CCYQFjAA&amp;url=http%3A%2F%2Fwww.sans.org%2Freading_room%2Fwhitepapers%2Fauditing%2Fanalyzing-enterprise-pki-deployments_33284&amp;rct=j&amp;q=walter%20goulet%20security&amp;ei=Zim3TYqdKpDEsAPOyJSpAQ&amp;usg=AFQjCNE-95Pvc20ntx3c4WcfSYYm1nu8VA&amp;sig2=sl4uVsUZxHsuMFUXEj-u2w&amp;cad=rja">SANS gold paper</a> using a simple pros/cons approach.</p>
<h3>802.1x WLAN</h3>
<p>Pros:</p>
<ul>
<li>The WLAN authenticator (typically a AAA server) is automatically trusted by wireless clients which makes it easy to seamlessly support both enterprise and guest WiFi use cases in the same WLAN infrastructure.</li>
</ul>
<p>Cons:</p>
<ul>
<li>Opens up WiFi clients to rogue AP attacks (if an attacker can obtain a valid certificate, he can easily setup a rogue AP that would be automatically trusted by enterprise WiFi clients which would enable him to exfiltrate credentials from those clients.)</li>
</ul>
<h3>HTTPS</h3>
<p>Pros:</p>
<ul>
<li>Enables enterprises to secure Intranet websites with HTTPS without requiring users to &#8216;click through&#8217; standard browser warnings.</li>
<li>Allows any device/web browser software to access the Intranet website without requiring additional user actions to provision the root CA certificate.</li>
</ul>
<p>Cons:</p>
<ul>
<li>Enterprise sub CAs could potentially issue valid certificates for Internet websites. A rogue enterprise CA administrator could easily issue certificates that do not belong to his enterprise domain. These certificates could be resold to attackers who could use them to setup MITM attacks for other HTTPS protected Internet sites.</li>
</ul>
<h3>S/MIME</h3>
<p>Pros:</p>
<ul>
<li>Digitally signed emails could be validated by email recipients that are outside of the enterprise.</li>
</ul>
<p>Cons:</p>
<ul>
<li>If an attacker is able to obtain a valid S/MIME certificate, he/she could send very convincing spear-phishing emails to enterprise users. It is unlikely that emails with valid digital signatures would be marked as spam by spam filtering software.</li>
</ul>
<h3>Infrastructure (routers, VPN gateways etc)</h3>
<p>Pros:</p>
<ul>
<li>Could possibly simplify the provisioning of new network infrastructure components.</li>
<li>Makes it easier to support additional VPN client types.</li>
</ul>
<p>Cons:</p>
<ul>
<li>Makes it much easier for an attacker who has physical access to the enterprise network to setup rogue devices; especially since many network devices which support certificate based authentication use the certificate as the sole means of identifying valid peers.</li>
</ul>
<p>In my opinion, the risks of using certificates rooted to a public CA for enterprise WLAN, S/MIME and infrastructure authentication outweigh the benefits. For securing Intranet websites with HTTPS, the benefits outweigh the risks because HTTPS protected websites could easily require the user to present credentials that are valid for the enterprise network. That being said, there are certainly additional controls that could be implemented in S/MIME and WLAN deployments to mitigate the risks pointed out above.</p>
<p>What do you think? Are there other risks or use cases for publicly trusted enterprise PKIs?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.securism.com/2011/04/use-of-publicly-trusted-certificates-in-enterprise-networks/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HOWTO: Getting the list of root certificates supported by Opera</title>
		<link>http://blog.securism.com/2011/04/howto-getting-the-list-of-root-certificates-supported-by-opera/</link>
		<comments>http://blog.securism.com/2011/04/howto-getting-the-list-of-root-certificates-supported-by-opera/#comments</comments>
		<pubDate>Mon, 25 Apr 2011 18:03:08 +0000</pubDate>
		<dc:creator>Walter Goulet</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.securism.com/?p=299</guid>
		<description><![CDATA[I&#8217;ve recently been given a task to determine the set of browsers and operating systems that a particular commonly trusted root certificate is embedded into. The methods to find this set vary depending on the browser vendor; I&#8217;ve found myself &#8230;<p class="read-more"><a href="http://blog.securism.com/2011/04/howto-getting-the-list-of-root-certificates-supported-by-opera/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently been given a task to determine the set of browsers and operating systems that a particular commonly trusted root certificate is embedded into. The methods to find this set vary depending on the browser vendor; I&#8217;ve found myself downloading various browsers to inspect their trust stores, digging into OS keystores, and when I&#8217;m lucky parsing a list that is publicly available. With Opera, I was happy to see that they <a href="https://certs.opera.com/">publish</a> their root certificate lists. Unfortunately, the format of the online repository leaves a little to be desired. The certificates are stored as a set of XML files that are named using a scheme which is most likely a hash or fingerprint of the certificate record (I&#8217;ve confirmed they are not named with the actual certificate thumbprint or serial number, even though that would seem to be a logical choice for the naming convention).</p>
<p>The schema of the XML files is simple enough; each file contains 3 fields of note: an issuer field a shortname field, and a certificate-data field. For my purposes, the field that I needed to analyze was the &#8216;Issuer&#8217; field. Since there are 255 certificates listed in the latest directory with the Opera site, I decided to automate my search using a combination of python, wget, and openssl commands. As this is my first foray into python, I ran into a few speedbumps along the way (especially since my previous scripting language of choice was Perl). In the end, I used the following script to automate my search. Hopefully this will save someone else time in the future.</p>
<pre>#!/usr/bin/python

import os
import sys
import subprocess
import re

url = sys.argv[1]
cmd = 'wget --quiet -O - %s' % (url)

print "Fetching the list of certs from ", url

# get the list of filenames
page = subprocess.Popen(cmd,shell=True, \
 stdout=subprocess.PIPE).communicate()[0]

p = re.compile(r".*\"\&gt;(.*xml)&lt;")
matches = p.findall(page)

for m in matches:
 certsrc = url + '/' + m
 cmd = 'wget --quiet -O - %s' % (certsrc)
 cert = subprocess.Popen(cmd,shell=True,\
 stdout = subprocess.PIPE).communicate()[0]
 p = re.compile(r"&lt;issuer&gt;\n(.*)\n&lt;/issuer&gt;",re.MULTILINE)

 issuer = p.search(cert)
 print "%s issuer: %s" % (m,issuer.group(1))
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.securism.com/2011/04/howto-getting-the-list-of-root-certificates-supported-by-opera/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>You are responsible for your own data security</title>
		<link>http://blog.securism.com/2011/04/you-are-responsible-for-your-own-data-security/</link>
		<comments>http://blog.securism.com/2011/04/you-are-responsible-for-your-own-data-security/#comments</comments>
		<pubDate>Sun, 24 Apr 2011 01:41:08 +0000</pubDate>
		<dc:creator>Walter Goulet</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[data security]]></category>
		<category><![CDATA[dropbox]]></category>

		<guid isPermaLink="false">http://blog.securism.com/?p=296</guid>
		<description><![CDATA[The recent outrage over Dropbox&#8217;s change in their terms and conditions appears to stem from a general perception by Dropbox users that the service will never reveal their personal information to anyone (Dropbox employees, law enforcement officials, and other Dropbox &#8230;<p class="read-more"><a href="http://blog.securism.com/2011/04/you-are-responsible-for-your-own-data-security/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>The recent <a href="http://www.zeropaid.com/news/93211/dropbox-nothing-shocking-about-handing-your-data-over-to-the-feds/">outrage</a> over Dropbox&#8217;s change in their <a href="http://blog.dropbox.com/?p=735">terms and conditions</a> appears to stem from a general perception by Dropbox users that the service will never reveal their personal information to anyone (Dropbox employees, law enforcement officials, and other Dropbox users.) I find the general reaction by users and the broader security community rather amusing. It should come as no surprise to anyone that information which is stored on your behalf by a service provider can be turned over to law enforcement officials with proper warrants. In any case, the lesson that all Dropbox (and really anyone who uses cloud based storage services) should take to heart is that if you really want to store your data securely in the cloud, you have to be responsible for your own data security.</p>
<p>I&#8217;ve been a Dropbox user for about 2 years now and regularly store sensitive personal information in my Dropbox folder. However, I don&#8217;t just trust that Dropbox is going to implement data security best practices to protect my data. Rather, I encrypt my sensitive files before storing them in my Dropbox folder. Solutions I&#8217;ve used are Truecrypt to create small data partitions that I can mount on my devices and 7zip with it&#8217;s built in AES encryption function. With these solutions, I alone am responsible for controlling when my encryption keys are disclosed. Even if Dropbox is required to share my files with law enforcement or if there is a major data breach in their service, my files are still safe because I control my private data encryption keys.</p>
<p>While it is perfectly reasonable to trust service providers with your information, it is not reasonable to always assume that you will have full control of your information. Users need to take responsibility for their own data protection.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.securism.com/2011/04/you-are-responsible-for-your-own-data-security/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Who can you trust? PKI under attack</title>
		<link>http://blog.securism.com/2011/04/who-can-you-trust-pki-under-attack/</link>
		<comments>http://blog.securism.com/2011/04/who-can-you-trust-pki-under-attack/#comments</comments>
		<pubDate>Thu, 14 Apr 2011 02:54:49 +0000</pubDate>
		<dc:creator>Walter Goulet</dc:creator>
				<category><![CDATA[Attacks]]></category>
		<category><![CDATA[DANE]]></category>
		<category><![CDATA[PKI]]></category>
		<category><![CDATA[trust]]></category>

		<guid isPermaLink="false">http://blog.securism.com/?p=290</guid>
		<description><![CDATA[Traditional PKI authentication schemes are being questioned and possibly supplanted by new site authentication schemes (DANE). <p class="read-more"><a href="http://blog.securism.com/2011/04/who-can-you-trust-pki-under-attack/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Last month, a major CA (Comodo) suffered a security breach when a certificate reseller account was <a href="http://www.comodo.com/Comodo-Fraud-Incident-2011-03-23.html">compromised</a> and used to fraudulently issue SSL certificates for high value domains, including www.google.com and login.yahoo.com. Adding to the raft of security breaches suffered by other security vendors (<a href="http://blogs.rsa.com/rivner/anatomy-of-an-attack/">RSA</a>, <a href="http://blog.barracuda.com/pmblog/index.php/2011/04/12/waf-importance/">Barracuda</a>), this breach has rightly so sparked additional attention to the inherent security of PKI and security systems in general. In this particular attack, the CA itself was not directly compromised but rather the account of a registration authority (RA) was breached. In standard PKI workflows, the CA is responsible for receiving certificate enrollment requests, forwarding the requests to a RA (also known as a vettor), and issuing certificates once the RA has approved the request. For online certificate enrollment systems operated by CAs and occasionally bundled into domain name registrations, certificate resellers may host a certificate enrollment site as well as have access to a &#8216;certificate vettor&#8217; interface both provided by a CA. This vettor interface is an administrative interface that permits the RA to examine the details of the certificate request which they can use to perform identity validation and other checks as required by the CA&#8217;s certificate policies/practice statements. This model means the CA can outsource the vetting and enrollment processing to partners/resellers.</p>
<p>In the Comodo incident, it&#8217;s quite possible the attacker was able to obtain credentials to the reseller&#8217;s vettor interface (I&#8217;m not with Comodo so this is speculation on my part). This would enable them to submit certificate enrollment requests for domains they didn&#8217;t own and immediately approve them. Luckily, the fraudulent certificates were discovered 15 minutes after issuance according to Comodo. Comodo isn&#8217;t saying how the fraudulent certificates were discovered, but most likely there are audit tools that scan issued certificates against a whitelist of known high value domains.</p>
<p>The implication of this attack and it&#8217;s effect on the industry has served to cause site operators to seriously question the value of CAs and look at alternative trust models. As explained in my other <a href="http://blog.securism.com/2009/01/summarizing-pki-certificate-validation/">post</a>, the current CA trust model requires users to trust their browser, operating system, and device vendors to include a list of &#8216;trusted&#8217; CA root certificates in their products. Site operators which wish to use SSL certificates to secure their websites must purchase certificates from one (or more) of these CAs, during which they prove domain ownership and, in the case of extended validation certificates, additional authentication information. In this model, note that end users (who have the most to lose from accessing fraudulent websites), have no power to choose who they trust (the decisions are made for them by site operators and browser vendors). Nominally, this is actually a good thing since end users generally can&#8217;t be expected to have enough information to make sensible trust decisions.</p>
<p>The biggest weakness that this trust model has exposed as a result of the Comodo incident is the difficulty in providing an effective way for fraudulently issued certificates to be revoked. While both CRLs and OCSP were used to revoke the certificates, the fact is that many end user devices do not regularly fetch certificate revocation information due to complexities with maintaining effective access to CRL/OCSP responders and continuing debate on how CRL/OCSP failures should be handled in browsers.</p>
<p>With that background, a couple of alternative trust schemes are being proposed within the IETF. Perhaps the most promising scheme is <a href="https://datatracker.ietf.org/wg/dane/charter/">DANE </a>(DNS based Authentication of Named Entities). The cool thing about DANE is that it leverages another major security protocol overhaul that&#8217;s been happening for the last 8 years or so (DNSSEC). Essentially, DANE provides a mechanism for a domain registrar to add a certificate/public key for a given website to that site&#8217;s DNS record. Since DNS lookups themselves will be secured using the underlying DNSSEC mechanisms (and the contents of the DNS records will be authentic and integrity protected via DNSSEC services), the DNS records are as safe a place as any to store key material used to secure a site (or any client resource that can use keys to secure connections). The controversy that I&#8217;m seeing with the DANE proposals is that the trust model doesn&#8217;t require a CA to issue certificates used to secure a site. In fact, DANE fully supports the notion of self signed certificates. The idea is that if you trust that the owner of the domain has already passed necessary validation to get a DNSSEC secured DNS record, why can&#8217;t you simply trust the owner to provision a key for his/her site especially since that key is protected by DNSSEC resources?</p>
<p>There are still lots of open questions and discussions around DANE, and the CA vendors are making strong arguments that their services are still required even in a DANE enabled ecosystem (the anti-fraud checks performed by CAs before issuing certificates are unlikely to be performed by DNS registrars and obviously a site operator would not need to perform such checks).</p>
<p>I know that I&#8217;ll be following the development of DANE and discussions on the IETF DANE <a href="http://www.ietf.org/mail-archive/web/dane/current/maillist.html">lists</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.securism.com/2011/04/who-can-you-trust-pki-under-attack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

