<?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>Justice League Blog &#187; Software Security Touchpoints</title>
	<atom:link href="http://www.cigital.com/justice-league-blog/category/software-security-touchpoints/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.cigital.com/justice-league-blog</link>
	<description></description>
	<lastBuildDate>Fri, 04 May 2012 18:54:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>When All You Have is a Hammer&#8230;</title>
		<link>http://www.cigital.com/justice-league-blog/2011/05/03/when-all-you-have-is-a-hammer/</link>
		<comments>http://www.cigital.com/justice-league-blog/2011/05/03/when-all-you-have-is-a-hammer/#comments</comments>
		<pubDate>Wed, 04 May 2011 03:09:56 +0000</pubDate>
		<dc:creator>jOHN</dc:creator>
				<category><![CDATA[Admin]]></category>
		<category><![CDATA[Assurance]]></category>
		<category><![CDATA[Defects, Bugs, and Flaws]]></category>
		<category><![CDATA[Enterprise Software Security]]></category>
		<category><![CDATA[Software Security]]></category>
		<category><![CDATA[Software Security Touchpoints]]></category>
		<category><![CDATA[Software Testing]]></category>

		<guid isPermaLink="false">http://www.cigital.com/justiceleague/?p=776</guid>
		<description><![CDATA[We&#8217;ve probably all experienced organizations that rely principally on a single assessment technique (whether it be static or dynamic, manual or tool-based). Unfortunately, this is all too common for security practices. When this topic came up recently with the question (paraphrased), &#8220;Are there numbers that demonstrate the value of a security program making use of [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve probably all experienced organizations that rely principally on a single assessment technique (whether it be static or dynamic, manual or tool-based). Unfortunately, this is all too common for security practices. When this topic came up recently with the question (paraphrased), &#8220;Are there numbers that demonstrate the value of a security program making use of static, dynamic, and manual assessment techniques?&#8221; I thought some of our experience might apply.  </p>
<p> Cigital has always favored delivery of holistic assessments (those assessments that consider architecture/design as well as code, leveraging static &amp; dynamic tools, and using both tool-assisted and manual techniques). During my tenure as Director of Security, we found the following distribution of findings:</p>
<p><UL><br />
<LI>Static tool: 20%</LI><br />
<LI>Dynamic tool: 5% (*1)</LI><br />
<LI>Manual SCR: 15%</LI><br />
<LI>Architecture Risk Analysis: 60%</LI><br />
</UL></p>
<p>Those numbers may surprise and demand some explanation. For instance, though Microsoft at one point reported 50% of their findings were &#8220;flaws&#8221;, Cigital was finding 60% (on average, with as much as 70%) of its issues as &#8216;flaws&#8217;.  If anything, our classification of &#8216;flaw&#8217; was less inclusive though, and at the time I looked into this, I concluded that our larger percentage could be due to technique, focus on architecture in methodology (LoE), or level of customer familiarity/maturity with the tech-stack they developed on. </p>
<p>Likewise, our process started with a &#8220;whitebox&#8221; triage then shifted to exploratory testing (aka: dynamic) rather than the other way around (which I find common elsewhere) and that order-of-operations probably moved balance from dynamic to static. So, in practice we &#8220;found&#8221; vulnerabilities statically and then supported those findings with dynamic tests to validate their exploit-ability and impact (though perhaps dissatisfying, static gets the point in our data set here).</p>
<p><strong><em>Slicing by technique</em></strong><br />
Our experience made it pretty evident to us: skip assessment techniques and expect to miss some critical vulnerabilities. </p>
<p><strong><em>Slicing by vulnerability type</em></strong><br />
As I&#8217;ve mentioned in previous blog entries and mailing list posts, security managers need the capability to assess and report on their ability to find particular classes of security vulnerability as well. WASC&#8217;s <a href="http://projects.webappsec.org/w/page/13246989/Web-Application-Security-Statistics">Web Application Security Statistics</a> provide a starting point for both classes of attacks you might expect to find and their probability. There&#8217;s no shortage of vulnerability taxonomy work out there, so we&#8217;ll leave this topic at this superficial level. </p>
<p><strong><em>Optimizing a Security Practice</em></strong><br />
Whether you know what percentage of your reported findings come from each assessment technique, or you&#8217;re just starting to build your assessment practice, optimization (measurement, analysis, iterative improvement) should be a goal. To do this we combine our knowledge of the techniques we&#8217;re employing and the enumeration of vulnerabilities we want to find and report.</p>
<p>Confined to the context of static analysis, I described the following loop in a <a href="http://www.cigital.com/justiceleague/2011/02/02/if-its-so-hard-why-bother/">previous blog post</a> to do just that:</p>
<ul>
<li>Use a representative sample of <strong>your</strong> applications to observe a static analysis tool&#8217;s performance, not a contrived test suite.</li>
<li>Consider the tool&#8217;s findings relative to pen-testing findings on the same app. </li>
<ul>
<li>Did new and interesting findings result?</li>
<li>Did pen-testing findings found by the static tool provide adequate root-cause analysis and remediation advice to fix problems earlier?</li>
</ul>
<li>How long did it take to on-board an app? How will this scale to your portfolio of apps?</li>
<li>How long did it take to triage the results? How will this scale?</li>
</ul>
<p>The purpose of this trial experimentation was to provide some basic comparison between assessment techniques (though you could easily come up with a more thorough approach).  Of course, you&#8217;d want to consider findings from the perspective of all techniques, not just static tools. </p>
<p>Internally, we had our assessment lab managers write up a <em>qualitative</em> comparison of assessment techniques we employ, comparing how well each is &#8220;suited&#8221; to finding vulnerabilities against common vulnerability taxonomies (*2) and came up with the following:<br />
<UL><br />
<LI>ARA:               14%</LI><br />
<LI>Static tool:       12%</LI><br />
<LI>Manual SCR:  21%</LI><br />
<LI>Manual Pen:   21%</LI><br />
<LI>Dynamic Tool: 12%</LI><br />
<LI>Sec Testing:    20%</LI><br />
</UL></p>
<p>At this point, the reader may be asking why my experience differs from our lab managers&#8217;. Specifically, for instance, &#8220;why are dynamic techniques over-estimated here as compared to to historical findings rates?&#8221; Two reasons (at least) come to mind:</p>
<p><OL><br />
<LI>The balance of techniques that constitute our assessments  are &#8220;moving back&#8221; towards dynamic as software-under-test and market forces evolve</LI><br />
<LI>There&#8217;s a difference between how suited a technique is to discover something and how we choose to find it (I guarantee that in some circumstances this gap represent &#8216;optimization opportunities&#8217;, while in others it represents explicit technology or methodological choices).<br />
</OL></p>
<p><strong><em>The Caveat You&#8217;ve Come to Expect From Me</strong></em><br />
Whether your considering a vendor&#8217;s assessment service, an assessment standard, or your own internal assessment practice, it&#8217;s key to be able to detect biases. When others supply you assessment data you&#8217;ll likely uncover biases (though it may not be apparent to those reporting initially). Be careful, I doubt you&#8217;ll be able to compile, combine, or relate numbers you receive from varying sources for this reason. </p>
<p>If you&#8217;re compiling assessment data for the purpose of motivating practice improvement, you may want to either 1) extract universal similarities from the data you get and present those lessons learned to management, or 2) just list the others&#8217; experience separately. This can provide those to whom you&#8217;re presenting a compelling view to your perspective on differing assessment approaches.</p>
<p>In fact, many factors will muck up assessment comparison. For instance, when people report a percentage (like I did above), did they mean finding instances, findings, by type, or something else (*3)? What was their methodology, level-of-effort, and how did they conduct assessment. For instance, risk-based assessments produce a very different distribution (with wider variation) than time-boxed techniques, which more frequently drive to an explicit (or worse, implicit) checklist.</p>
<p>One thing universally seems true though: the more assessment techniques a software security practice makes use of, the more types of vulnerabilities it can expect to report.  </p>
<p>-jOHN</p>
<p>(*1)  &#8211; Clarification: our use of dynamic tools is human-assisted (both in terms of crawl and in follow-up with manual effort or leveraging internally developed tools).</p>
<p>(*2) &#8211;  WASC, OWASP Top 10, CWE Top 25</p>
<p>(*3) &#8211; My data is comprised of reported vulnerabilities. Answering questions about what risk-level I reported requires some abstraction as clients differ in their requirements there. Likewise, behavior regarding instances vs. buckets of &#8216;related vulns&#8217; requires addl. explanation.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cigital.com/justice-league-blog/2011/05/03/when-all-you-have-is-a-hammer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Moving to Mobile &#8211; New Threats</title>
		<link>http://www.cigital.com/justice-league-blog/2011/03/29/moving-to-mobile-new-threats/</link>
		<comments>http://www.cigital.com/justice-league-blog/2011/03/29/moving-to-mobile-new-threats/#comments</comments>
		<pubDate>Tue, 29 Mar 2011 17:45:11 +0000</pubDate>
		<dc:creator>jOHN</dc:creator>
				<category><![CDATA[Mobile Security]]></category>
		<category><![CDATA[Software Security]]></category>
		<category><![CDATA[Software Security Touchpoints]]></category>
		<category><![CDATA[Threat Modeling]]></category>

		<guid isPermaLink="false">http://www.cigital.com/justiceleague/?p=563</guid>
		<description><![CDATA[A 'move to mobile' represents an ideal opportunity to revisit threat modeling. The natural question: how do my threats change when I bring a model channel into my existing application?  ]]></description>
			<content:encoded><![CDATA[<p><strong><em>This post written in collaboration w/ <a href="http://www.cigital.com/justiceleague/author/jason/">Jason Rouse</a></em></strong></p>
<p>In the software development circles I travel, the topic of adding a mobile channel onto existing application/system infrastructure has come up a bunch recently. With regards to threat modeling a &#8216;move to mobile&#8217; represents an ideal opportunity to revisit threat modeling. Remember, I don&#8217;t necessarily prescribe threat modeling for well-known system arch-types (such as classic n-tier) and technology stacks as much as when teams attempt new and lesser known architectures.</p>
<p>The natural question: how do my threats change when I bring a mobile channel into my existing application?   Consider, for instance, a generic application, as depicted below:</p>
<div id="attachment_571" class="wp-caption aligncenter" style="width: 614px"><a href="http://www.cigital.com/justice-league-blog/2011/03/29/moving-to-mobile-new-threats/mobile-new-code-threats-2/" rel="attachment wp-att-571"><img src="/justice-league-blog/files/2011/03/Mobile-New-Code-Threats.png" alt="Existing Application w/ New Mobile Channel" width="453" height="378" class="size-full wp-image-571" /></a><p class="wp-caption-text">Existing Application w/ New Mobile Channel</p></div>
<p>This application supported a User and CSR through a browser interface, and had other connections to RESTful services in its middle tier. Now, we&#8217;ve added more controller and presentation tier logic, perhaps opting to reuse almost all the former application&#8217;s model. In this case, the new functionality aims to provide a more numerous set of users (2-4X as many as the plain browser interface) access to their accounts and services but with considerably lower bandwidth. The intent is that a sub-set of services would be offered (rate comparison and ACH transfer being omitted) and all available services will be provided in a crisp, simple, and responsive format. </p>
<p>Since we&#8217;ve discussed this example (and many like it) in threat modeling classes, we&#8217;ll leave these users and threats to the original system alone for now.</p>
<p>New portions of the system, being constructed to support mobile, are depicted in blue. In a future post, we&#8217;ll discuss how to more clearly identify the change in attack surface due to these additions. For now, let&#8217;s just consider the new Threats themselves. Again:</p>
<blockquote><p><em>Threat &#8211; A class of individuals or software agent executing on behalf of such an individual</em></p></blockquote>
<p>When we model threats we describe a threat&#8217;s capabilities, level of access, and skills to start. Let&#8217;s apply a few  of Threat Modeling techniques to identify new threats to consider. </p>
<p> <strong>1. Consider the system&#8217;s users</strong><br />
 When teams add new functionality to a system, or when they start a new development effort entirely, they commonly create user stories or perhaps even detailed use cases and requirements.</p>
<p>The first (and easiest) way to identify new threats to the system is to mine user stories, use cases, and other usage documentation (even marketectures often work) for their users. Then, consider:</p>
<ul>
<li>What evil or insidious behaviors could a user engage in?</li>
<li>What obnoxious or stupid behaviors could a user cause trouble with?</li>
</ul>
<p>Two users come to mind as we look at proposed new mobile functionality:</p>
<ol>
<li>Mobile device user (in this case, a smart phone)</li>
<li>Neighboring network user</li>
</ol>
<p>Combining the first items from our two lists above, we come to our first threat: a malicious mobile device user.</p>
<blockquote><p><em>1. Malicious Mobile Device User</em> &#8211; Device users possess the credentials to the device (including any UI, &#8216;app store&#8217;, or other username/password tuples) and likely possess the carrier account/credentials. Access includes physical access to the device and use of both of its applications and browsers. This threat can install applications, sync, and explore device contents with their computer.  Of course, this threat has access to device SDK and simulators as any developer would. See this threat depicted in the figure above with label &#8220;1&#8243;.</p></blockquote>
<p>When we discuss attack surfaces, we&#8217;ll discuss what kinds of access and capabilities these threats possess in a technology-specific fashion. Some conceptual actions include:<br />
<UL><br />
       <LI>Transfer device contents to computer for debugging, reversing, etc.</LI><br />
       <LI>Install purpose-built (malicious) applications on device</LI><br />
       <LI>Manipulate application settings, set up a proxy for web interaction, etc.</LI><br />
        <LI>Use both browser and application to access the same services/resources</LI><br />
        <LI>Jailbreak device</LI><br />
</UL></p>
<p><strong>Consider Evil/Insidious User Action</strong><br />
The last behavior piques particular interest. When the user decides, with malicious intention,  to jailbreak their device, additional malicious behaviors are available to them. Regardless of whether or not the jailbreak was motivated by malicious intent, the device&#8217;s security controls are compromised. In this case, applications can no longer trust that security features such as application signing apply or that a confidential path for their data exists between the application and network. Documenting threats in a traceability matrix allows one to show this escalation of privilege from one threat to another directly: </p>
</blockquote>
<p><a href="http://www.cigital.com/justice-league-blog/2011/03/29/moving-to-mobile-new-threats/privilege-escalation-tabular/" rel="attachment wp-att-596"><img src="/justice-league-blog/files/2011/03/Privilege-Escalation-Tabular.png" alt="Privilege Escalation - Tabular Format" width="634" height="84" class="aligncenter size-full wp-image-596" /></a></p>
<p>In summary, this behavior gives rise to another class of threat:</p>
<blockquote><p><em>2. Malicious Mobile Device</em> &#8211;  This threat has all the capabilities and access of a malicious mobile device user, but can also compromise or augment the device OS and its drivers. The figure above depicts this threat labeling it &#8220;4&#8243;. </p></blockquote>
<p>A broad range of capabilities results from this opportunity and if a device is compromised prior to the a victim application being loaded, malicious behavior can observe and affect the application installation process itself, or user signup/registration processes&#8211;which may include initial credential/key material exchange. This imagined scenario may quickly turn an application&#8217;s entire security proposition into a house of cards. </p>
<p><strong>Consider Obnoxious/Stupid User Action</strong><br />
Once you start, it&#8217;s hard not to imagine a multitude of stupid things a user could do with their mobile device.  Let&#8217;s focus on a common and important one: the user could leave the device somewhere, for it to be stolen. This scenario has two effects: first, this dramatically increases the population of Threat #1: malicious device user. Let&#8217;s split this threat into 1.A (previously described) and 1.B: malicious device user (same as 1.A but without the user&#8217;s credentials). However, Threat 1.B also increases the population of Threat #2&#8211;malicious devices because thieves can jailbreak devices even without user credentials. </p>
<p>An important third scenario impacts certain applications, like the generic one we describe above. If our threat traceability matrix (above) was filled out during a previous secure design exercise, it might include &#8220;password reset&#8221; use described in the mitigation column. Indeed, during many threat modeling courses jOHN teaches his participants indicate &#8220;we can remove the <em>malicious CSR</em> threat entirely by doing password reset out-of-band using a mobile phone.&#8221;</p>
<blockquote><p>
<strong>In the case that a phone is stolen and possesses the bank&#8217;s MobileBankingApp, perhaps which caches the user&#8217;s name, how effective is this control? </strong>
</p></blockquote>
<p>Many password reset implementations jOHN observes (using his accounts) suffer full compromise under the &#8216;stolen phone&#8217; scenario. In this case, the identification of a new threat causes us to reconsider or augment the design of our system so that it again demonstrates the security properties we desire.</p>
<p><strong>A Brief Diversion into the Mobile Threat Population</strong><br />
Looking superficially at search results, it appears as though ~120,000 phones are stolen in the UK annually; ~200,000 in Australia. Another site indicated 26M phones are stolen annually and resold. Regardless of how accurate these numbers are, this represents a much larger threat population than expected from security researchers and nefarious parties alone.</p>
<p><em>Not Stolen, &#8220;Something Borrowed&#8221;</em></p>
<p>Consider more generally the notion of the device being &#8220;out of sight&#8221; interaction briefly, perhaps through the following vectors:</p>
<p><UL><br />
<LI>Because stolen  (unknown to the device&#8217;s user) and returned after being tampered with</LI><br />
<LI>The device is plugged into another individual&#8217;s machine (perhaps for charging or for app download)</LI><br />
<LI>Device lent to individual for momentary use (phone call, game demo, contact/weather lookup)</LI><br />
<LI>Grey-market phone, donated phones, recycled/returned phones</LI><br />
</UL></p>
<p>Each of these cases exposes the whole of the device&#8217;s attack surface to exploitation without visual cues to the phone&#8217;s user. </p>
<p><em>And Who &#8216;Owns&#8217; These Devices Anyways</em></p>
<p>This is perhaps a good time to point out that the phone&#8217;s user may not be the phone&#8217;s owner. Family and corporate phone plans often provide access to the phone, remotely, unbeknownst to the user. In these cases, the phone&#8217;s owner must be considered a (yet unpictured in our diagram) threat from the user&#8217;s perspective. </p>
<p>From the phone (or account) owner&#8217;s perspective, the user represents a similar threat: the user can potentially add/modify/remove software without visual cues or notification. Our &#8216;single-user&#8217; device actually serves multiple masters:</p>
<p><OL><br />
<LI>Me</LI><br />
<LI>The Account Owner</LI><br />
<LI>Our Benevolent Dictators: Google/Apple&#8230; RIM/Microsoft?</LI><br />
<LI>Carriers: ATT, VeriZon&#8230; </LI><br />
<LI>Device Manufacturer</LI><br />
</OL></p>
<p><a href="http://www.cigital.com/justice-league-blog/2011/03/29/moving-to-mobile-new-threats/ownerhierarchy/" rel="attachment wp-att-667"><img src="/justice-league-blog/files/2011/03/OwnerHierarchy.png" alt="Device Owner Hierarchy" width="367" height="401" class="alignright size-full wp-image-667" /></a><br />
We know the benevolent dictators retain the right/capability to remove applications from our devices. What other capabilities must an application publisher be concerned about within their Threat Model?</p>
<p>Here in the diagram, you see the inevitable separation of the application store curator and the current set of benevolent dictators listed&#8211;<a href="http://www.amazon.com/mobile-apps/b?ie=UTF8&amp;node=2350149011">Amazon&#8217;s new application store </a>is a prime example.</p>
<p><strong>Reconsider Old Model&#8217;s Threats</strong><br />
Having conducted a threat model on the classic n-tier system before, a man-in-the-middle (MiM) threat was undoubtedly considered. Reconsider this threat in terms of the new architecture. </p>
<p>A common mistake modelers make in considering mobile MiM is to forget that devices contain not only applications that make Internet connections but that they also possess browsers:</p>
<blockquote><p><em>3. MiM</em> &#8211; This threat has access to traffic sent over the Internet (OR carrier network) sent either from the app to server or<br />
vice versa. When a device contains a browser, this threat can see both app to server traffic and browser to server traffic from the same account/device. This threat may be able to see traffic through (active or passive) interposition, or through landing code (script) w/in the device&#8217;s browser using classic web attacks (Depicted as Threat #4 in the figure above).</p></blockquote>
<p>Whether or not one needs to consider both Internet and carrier-based sniffing depends on other factors within the threat model. Cigital has always considered carrier-level compromise part of its mobile threat model, at a low barrier to entry. However, it bears mentioning that as recently as 2004 it was challenge to convince organizations that individuals could <em>&#8220;be the mobile network&#8221;</em>. It&#8217;s somewhat vindicating to see this as a <a href="http://www.wireless.att.com/learn/why/3gmicrocell/">consumer-grade scenario</a> now.</p>
<p>This isn&#8217;t the half of it though (and we&#8217;re getting ahead of ourselves a little bit in talking about attack surface here, but). Consider the following &#8216;radio-based&#8217; surfaces on the phone:</p>
<p><OL><br />
<LI>GSM Stack</LI><br />
<LI>CDMA Stack</LI><br />
<LI>802.11</LI><br />
<LI>Bluetooth</LI><br />
<LI>NFC (coming soon to a device near you!!!)</LI><br />
</OL></p>
<p>Remember, vulnerability in any of these implementations may cause our user to suffer a &#8220;<a href="http://www.cigital.com/justice-league-blog/2011/03/29/moving-to-mobile-new-threats/bluesniper-2/" rel="attachment wp-att-706">drive-by owning</a>&#8220;, leaving him/her with Threat #2: Malicious Device.</p>
<p><strong>Other Old Threat</strong><br />
Taking another cue from former efforts, modelers must consider the possibility that malicious applications will run alongside their applications within a mobile device. This scenario is no different than that of a browser, or any application running on the almost forgotten host computer.</p>
<blockquote><p><em>4. Malicious Application</em> &#8211; Threat represents either a compromised victim application on the device, a Trojan, or other malware (depicted in the figure above as #3). The causal vector may have been data interpreted and executed by a vulnerable app, a malicious application placed in an app store (or otherwise available for download), or different entirely. Such applications (malicious or corrupted) can attempt to poke and prod at your victim app directly, exploit the underlying device OS, or focus on server resources directly. The malicious app may possess a valid signature (or not, as advantageous) and has access to the device&#8217;s services (as per what the user has granted it). </p></blockquote>
<p><strong>Summary</strong><br />
Hopefully, this thought exercise has shown its reader threats they hadn&#8217;t considered. Hopefully it shows the reader the advantages of reconsidering a threat model as the architecture changes through normal means:</p>
<ol>
<LI>Start with the users/user-stories</LI><br />
<LI>Think maliciously</LI><br />
<LI>Think &#8216;stupid&#8217;</LI><br />
<LI>Re-consider old threats in the new architecture</LI><br />
<LI>Understand, you&#8217;re not the only device &#8216;user&#8217;, &#8216;owner&#8217;</LI>
</ol>
<p>It continues to surprise me that these techniques pay off even when only threats (the &#8216;who&#8217;) themselves are considered. </p>
<p>Next, we&#8217;ll write up how consideration of the attack surface differs as we &#8216;move to mobile&#8217; and begin to see how this expanded surface can have dramatic implications on the security posture of existing functionality.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cigital.com/justice-league-blog/2011/03/29/moving-to-mobile-new-threats/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Scrap Static Tools, just &#8220;Fix your code&#8221;?</title>
		<link>http://www.cigital.com/justice-league-blog/2011/02/23/scrap-static-tools-just-fix-your-code/</link>
		<comments>http://www.cigital.com/justice-league-blog/2011/02/23/scrap-static-tools-just-fix-your-code/#comments</comments>
		<pubDate>Wed, 23 Feb 2011 15:32:13 +0000</pubDate>
		<dc:creator>jOHN</dc:creator>
				<category><![CDATA[Assurance]]></category>
		<category><![CDATA[BSIMM]]></category>
		<category><![CDATA[Security Features]]></category>
		<category><![CDATA[Software Quality]]></category>
		<category><![CDATA[Software Security]]></category>
		<category><![CDATA[Software Security Touchpoints]]></category>

		<guid isPermaLink="false">http://www.cigital.com/justiceleague/?p=541</guid>
		<description><![CDATA[Recently, Gary and I collaborated on an InformIT article on static analysis. you will find our observations regarding static analysis shared by others. It&#8217;s encouraging to note that Flash Sheridan observes many of the same difficulties and more formally treats them in his ISSRE &#8217;10 publication. It&#8217;s worth a read. A few commentators shared some [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, Gary and I collaborated on an <a href="http://www.informit.com/articles/article.aspx?p=1680863">InformIT article</a> on static analysis.</p>
<p>you will find our observations regarding static analysis shared by others. It&#8217;s encouraging to note that Flash Sheridan observes many of the same difficulties and more formally treats them in his <a href="http://pobox.com/~flash/Static_Analysis_Deployment_Pitfalls.pdf">ISSRE &#8217;10 publication</a>.  It&#8217;s worth a read. </p>
<p>A few commentators shared some decent points I wanted to address in a comment. I&#8217;m cross-posting my commentary here:</p>
<p>Comments treating the application of static tools as a distinct (and unfavorable) alternative to &#8220;fixing your SDLC&#8221; disappoint me, especially from the OWASP community (of which I am a contributing paid member). In fact, the community&#8217;s OpenSAMM project actively prescribes use of static analysis in not one but four (4) unique activities. So, both BSIMM and SAMM see static analysis as a part of fixing one&#8217;s SDL. **Note that in both models, all activities are not compulsory.</p>
<p>&#8220;Fix your code&#8221; is another red-herring alternative to static analysis. I believe static analysis inseparable from effective usage of a secure programming toolkit (such as OWASP&#8217;s ESAPI or an organization&#8217;s own toolkit)  because static analysis tools can meet the need for organizations to 1) detect consistent and thorough use of secure APIs (and non-use of dangerous ones) as well as 2) detect incorrect usage of such APIs (whether through broken call-order, un-paired functions, or other bugs). We shouldn&#8217;t forget, as Mr. Manico indicates, 3) running static tools on these security toolkits themselves finds problems that careful review may not otherwise have found. </p>
<p>So, secure SDL models indicate usage and we&#8211;as a community&#8211;see use in these tools in helping remind developers how to correctly build secure code. I think we have to agree static analysis tools find exploitable bugs (even though sometimes in an overly expensive or time-consuming way). So, I think we&#8217;re stuck with them as a &#8216;best practice&#8217; in the short term, however little some of us may like them. To dynamic vendors out there, I&#8217;d even go so far as saying, &#8220;Early adopters have begun to over-rely on static means to find problems more effectively/efficiently found with dynamic tools. Don&#8217;t worry, the ones I&#8217;m working with will begin to tilt the balance back using assessment data&#8221;.</p>
<p>I would like to put a face-and-name on the key notion that almost all commentators have thus-far touched: the static analysis tool that gets used by a majority of application developers out there, in the future, will likely not look like the ones we have today.  And that&#8217;s fine too.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cigital.com/justice-league-blog/2011/02/23/scrap-static-tools-just-fix-your-code/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Increasing Static Visibility</title>
		<link>http://www.cigital.com/justice-league-blog/2011/02/06/increasing-static-visibility/</link>
		<comments>http://www.cigital.com/justice-league-blog/2011/02/06/increasing-static-visibility/#comments</comments>
		<pubDate>Sun, 06 Feb 2011 22:00:22 +0000</pubDate>
		<dc:creator>jOHN</dc:creator>
				<category><![CDATA[Assurance]]></category>
		<category><![CDATA[Defects, Bugs, and Flaws]]></category>
		<category><![CDATA[Software Security]]></category>
		<category><![CDATA[Software Security Touchpoints]]></category>

		<guid isPermaLink="false">http://www.cigital.com/justiceleague/?p=487</guid>
		<description><![CDATA[Sometimes, people talk loosely about an important difference between static and dynamic analyzers. Static analyzers, they say, achieve 100% coverage. They may complain that dynamic tools struggle to get even double-digit statement coverage of an application under test. Dan Cornell wrote a blog post on static analysis coverage. He observed that while the static tool [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes, people talk loosely about an important difference between static and dynamic analyzers. Static analyzers, they say, achieve 100% coverage. They may complain that dynamic tools struggle to get even double-digit statement coverage of an application under test.   </p>
<p><a href="https://twitter.com/#!/danielcornell">Dan Cornell</a> wrote a <a href="http://denimgroup.posterous.com/coverage-is-key-static-analysis-can-only-scan">blog post </a>on static analysis coverage. He observed that while the static tool he used completed its scan, it didn&#8217;t find things it should. He implicitly referred to this as coverage. </p>
<p>I&#8217;ve often put things as follows:</p>
<blockquote><p>Your tool can&#8217;t find what it can&#8217;t see and it can&#8217;t see what it doesn&#8217;t parse.</p></blockquote>
<p>This got said often years back because at the time it was quite difficult to integrate tools effectively into a builds so that they would in fact &#8216;see&#8217; everything and successfully parse it (*1). We referred to this concept of how well we, as operators, had integrated as providing <strong>visibility</strong> into the code. These days, market leading tools don&#8217;t have nearly the problem they used to with finding the code they need to parse&#8230; or parsing that code successfully (*2).</p>
<p>These days, the frameworks developers use for persistence, object remoting, application navigation, and view display challenge visibility most. Tools see the code for your controller and parse it successfully but they don&#8217;t necessarily understand what it represents. This happens in almost every application I scan, even the painfully simple ones. </p>
<p>We couldn&#8217;t have our Consultants going out into the world armed with tools bearing only spotty visibility into applications so I wrote a utility <code>identifyEntryPoints</code> to find entry points on its own. We don&#8217;t want Consultants guessing at what their static analysis tool missed or popping the hood open to try to discern what it found and <em>not doing what they&#8217;re paid to do: <strong>assess the application</strong></em>, so I wrote another utility <code>entryPointCompare</code> to compare what the tool found vs. what I was able to find programmatically. See actual output below (I&#8217;ve replaced the static tool&#8217;s name with &#8216;TOOL XXX&#8217;):</p>
<pre style="margin: 0 auto;padding: 1em 3px;width: 90%;overflow: scroll;border: 1px solid #999">
Sanguine:demo jsteven$ /Users/jsteven/code/demo/working/engine/util/entrypointCompare.py
2011-02-06 09:07:08,158 INFO     bois_1.0        bin.execPythonRobot STARTING: /Users/jsteven/code/demo/working/engine/util/entrypointCompare.py
Factory 31, [TOOL XXX] 0
 TOOL XXX missed set(['Index', 'csrchat', 'accountsList', 'Transfer', 'editProfileFormBean', 'newAccountFormBean', 'fileList', 'Auth', 'newClientFormBean', 'qaFormBean', 'UserProfile', 'SetupProfileAction', 'uploadFile', 'VerifyAnswerAction', 'BeanEditProfileAction', 'existingClientFormBean', 'GetDocuments', 'ChatPoll', 'announcements', 'modifyDocument', 'BeanCreateAccountAction', 'ChangePasswordAction', 'VerifyClientAction', 'ChatSend', 'Help', 'fileUploader', 'BackOfficeAdmin', 'passwordFormBean', 'BeanCreateClientAction', 'action', 'Accounting'])
</pre>
<p>Here, I ran the test on Cigital&#8217;s own internal &#8220;Bank of Insecurities&#8221;, which is a simple Struts1 application. The utility&#8217;s output represents all the actions and forms that account for web-based input in their own respective ways. Sure looks like some pretty important stuff was missed in there huh? </p>
<p>The next step was to write a third program <code>registerEntryPoints</code> which would write rules for the missing entry/exit points as appropriate so that the beefy commercial static analysis tool could do what it does best. These utilities represent just some of the internal workings of Cigital&#8217;s <a href="http://www.cigital.com/solutions/esp/">ESP platform</a>. </p>
<p><strong><em>Yes, but my tool finds stuff all the time</strong></em><br />
Would a tool not find any findings without detecting entry points? Well, it <em>would</em> likely find potential vulnerability but only using more local syntactic analysis. Remember, &#8220;you can&#8217;t find what you can&#8217;t see&#8230;&#8221;</p>
<p><strong><em>I&#8217;m sensing a theme in your posts jOHN</strong></em><br />
OK, so, that&#8217;s two blog posts (Mr. Cornell and my own) complaining about what I refer to visibility. Now what? </p>
<p><strong><em>Spend time cataloging your chosen tool&#8217;s performance</em></strong><br />
Cigital experience indicates that as few as 10-13 reasonably chosen applications can serve as a representative sample for as many as 300 applications on the Java platform. When you pilot those 10-13 applications, conduct the following steps to avoid the visibility failures seen above in the portfolio as a whole:</p>
<ol>
<li>On-board the application using whatever tool interface gives the most feedback about missing artifacts (*3) </li>
<li>Explore scan logs for identified entry points</li>
<li>Manually explore the application&#8217;s deployment descriptors and critical configuration files</li>
<li>Document controller logic as framework default or developer extended</li>
<li>Identify key entities within the DAO/persistence framework</li>
</ol>
<p>When you&#8217;ve done that for 10-13 apps, our representative sample, stop and take stock of what you&#8217;ve collected. You&#8217;ll have created a very good list of items for which you&#8217;ll want to create custom rules. Different tools call the kind of rules you&#8217;ll create different things, but suffice it to say you&#8217;ll be writing rules to tell the tool that it&#8217;s:</p>
<ul>
<li>Entry: Taking input from untrusted web sources</li>
<li>Entry: Taking input from untrusted partner applications</li>
<li>Exit: Placing data in a untrusted view (browser, service repsonse, etc.)</li>
<li>Exit: Conducting CRUD operations on entity data</li>
</ul>
<p>The above list is by no means exhaustive. Indeed, you&#8217;ll want to look at data originating from the persistence tier and headed to the web (not listed above) but we often consider this as a second phase of customization. You&#8217;ll also want to begin considering data entry/exit from 2nd and 3rd party components within the applications being tests. Again, another good subsequent customization phase. </p>
<p><strong><em>Gosh, this sounds expensive</em></strong><br />
Yes; &#8216;well. Compared to simply running a static analysis tool using its IDE-based GUI, triaging results, and calling it quits this is darned expensive. However, it dramatically raises your visibility into an application&#8217;s vulnerability (you should also expect false-positive reduction). </p>
<p>Compare this to the potential difference in quality and depth of a manual, tool-assisted penetration test and an automated vulnerability scan. An engineer running AppScan costs much less than an expert penetration test and organizations have come to not only expect different results, but see these as two very different services. I predict that we&#8217;ll see a similar distinction between two services (automated and more expert-driven) in the static space in a few years. </p>
<p><em><strong>Leveraging Manual Efforts Across Assurance Activities</em></strong><br />
If your organization doesn&#8217;t conduct manual penetration testing and is unwilling to pay your engineers to properly on-board applications into its static analysis tool, then neither static nor dynamic analysis will benefit from high visibility into applications under test. The cost will look &#8220;high&#8221; and &#8220;extra&#8221; as well.</p>
<p>Conducting the kind of analysis described by this entry (targeting entry and exit points) can inform both static and dynamic analysis alike. Conduct this exercise for applications built with representative technology stacks. On the static front, write custom rules based on your work. On the dynamic side, furnish this work to your dynamic testers (even if they are external vendors) so that their exploration benefits from it. </p>
<p>(*1) &#8211; Coverity&#8217;s Prevent was always a notable exception and able to integrate with even challenging build environments without much pain.<br />
(*2) &#8211; Limitations still exist with complex (distributed) build systems, code-generation schemes, and even the more mundane JSP compilation process.<br />
(*3) &#8211; Ask if you need help here, last time I published tool details, vendors got cranky.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cigital.com/justice-league-blog/2011/02/06/increasing-static-visibility/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Strengthening Software Security through collaboration</title>
		<link>http://www.cigital.com/justice-league-blog/2008/09/16/strengthening-software-security-through-collaboration/</link>
		<comments>http://www.cigital.com/justice-league-blog/2008/09/16/strengthening-software-security-through-collaboration/#comments</comments>
		<pubDate>Tue, 16 Sep 2008 17:03:57 +0000</pubDate>
		<dc:creator>justiceadmin</dc:creator>
				<category><![CDATA[Software Security]]></category>
		<category><![CDATA[Software Security Touchpoints]]></category>

		<guid isPermaLink="false">http://www.cigital.com/justiceleague/2008/09/16/strengthening-software-security-through-collaboration/</guid>
		<description><![CDATA[This is a guest post from Brian Mizelle, a managing principal at Cigital. Today, Microsoft announced the launching of its SDL Pro Network. Cigital is proud to be part of this pilot offering, and pleased to continue to take the message (and the delivery) of software security to the market. As a network of independent [...]]]></description>
			<content:encoded><![CDATA[<p><em>This is a guest post from Brian Mizelle, a managing principal at Cigital.</em></p>
<p>Today, Microsoft announced the launching of its <a href="http://blogs.msdn.com/sdl/default.aspx">SDL Pro Network</a>.  Cigital is proud to be part of this pilot offering, and pleased to continue to take the message (and the delivery) of software security to the market.  As a network of independent software security professionals, the SDL Pro Network will collectively take our best of breed experiences and work collaboratively to develop unified service offerings around Microsoft’s SDL methodology.</p>
<p>At Cigital we are proud of our extensive experience running more than six large-scale enterprise software security initiatives spanning customers in financial services, independent software vendors, and embedded systems.  We have <a href="http://www.cigital.com/training/">trained</a> several thousand developers, architects and executives on the fundamentals of software security.  We have rolled out tools and best practices for many of our best customers.  We have helped to grow the <a href="http://www.informit.com/articles/article.aspx?p=1237978">software security</a> market from its infancy.  Cigital is the largest and most experienced software security services provider in the world, and we look forward to continuing our market leadership through our partnership with Microsoft.</p>
<p>The number of firms delivering software security services is small and forms a tightly knit community, including companies of varying sizes, experience and areas of expertise.  As a group, we have all read and embraced the three top software security methodologies, including <a href="http://www.owasp.org/index.php/Category:OWASP_CLASP_Project">CLASP</a> from OWASP, the <a href="http://www.cigital.com/training/touchpoints/">Touchpoints</a> from our own CTO Dr. Gary McGraw, and of course, Microsoft’s SDL.   Regardless of what flavor of methodology our customers subscribe to, we all share the common goal of educating and delivering services that protect our clients’ assets and good name through better software security.   Collaborative efforts that bring together the best minds in the business can only help improve what we do with our own customers and broaden our thoughts on the subject.</p>
<p>Kudos to Microsoft for pulling the SDL Pro Network together.   Our clients will all benefit from the experience…stay tuned to this space for more.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cigital.com/justice-league-blog/2008/09/16/strengthening-software-security-through-collaboration/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Software security is growing</title>
		<link>http://www.cigital.com/justice-league-blog/2008/08/12/software-security-is-growing/</link>
		<comments>http://www.cigital.com/justice-league-blog/2008/08/12/software-security-is-growing/#comments</comments>
		<pubDate>Tue, 12 Aug 2008 21:40:29 +0000</pubDate>
		<dc:creator>gem</dc:creator>
				<category><![CDATA[Software Security]]></category>
		<category><![CDATA[Software Security Touchpoints]]></category>

		<guid isPermaLink="false">http://www.cigital.com/justiceleague/2008/08/12/software-security-is-growing/</guid>
		<description><![CDATA[In April 2007, I published a darkreading article on the size of the software security space with some analysis of what was happening. It took me a bit longer to gather the numbers this year, but I finally got what I needed and published an informIT article recently explaining how software security is growing. I [...]]]></description>
			<content:encoded><![CDATA[<p>In April 2007, I published <a href="http://www.darkreading.com/document.asp?doc_id=122253">a darkreading article</a> on the size of the software security space with some analysis of what was happening.  It took me a bit longer to gather the numbers this year, but I finally got what I needed and published <a href="http://www.informit.com/articles/article.aspx?p=1237978">an informIT article</a> recently explaining how software security is growing.</p>
<p>I am very optimistic about the growth of the software security field over the last few years.  Things are certainly moving in the right direction (toward white box analysis instead of outside-&gt;in black box, out of the myopic focus on Web apps, and toward full-lifecycle programs based on <a href="http://www.buildsecurityin.com/concepts/touchpoints/">the touchpoints</a>).  The numbers show this growth and these trends objectively. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.cigital.com/justice-league-blog/2008/08/12/software-security-is-growing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On Open Source</title>
		<link>http://www.cigital.com/justice-league-blog/2008/01/09/on-open-source/</link>
		<comments>http://www.cigital.com/justice-league-blog/2008/01/09/on-open-source/#comments</comments>
		<pubDate>Wed, 09 Jan 2008 17:00:32 +0000</pubDate>
		<dc:creator>gem</dc:creator>
				<category><![CDATA[Assurance]]></category>
		<category><![CDATA[Software Security]]></category>
		<category><![CDATA[Software Security Touchpoints]]></category>

		<guid isPermaLink="false">http://www.cigital.com/justiceleague/2008/01/09/on-open-source/</guid>
		<description><![CDATA[There has been a recent flurry of activity regarding security assurance on a hush-hush open source mailing list I lurk on. The debate recently has to do with formal methods versus code scanning&#8230; apples and oranges in my view. However, there&#8217;s a new flurry of press over Coverity&#8217;s use of their tool to analyze well-known [...]]]></description>
			<content:encoded><![CDATA[<p>There has been a recent flurry of activity regarding security assurance on a hush-hush open source mailing list I lurk on.  The debate recently has to do with formal methods versus code scanning&#8230; apples and oranges in my view.  However, there&#8217;s a new flurry of press over Coverity&#8217;s use of their tool to analyze well-known globs of open source.  (One poster suggested that passing a scan like this with flying colors means security has been attained&#8230; argh!)</p>
<p>Some pointers:</p>
<blockquote><p>
<em>From <a href="http://slashdot.org/article.pl?sid=08/01/09/0027229">Slashdot</a></em><br />
Posted by: kdawson, on 2008-01-09 01:20:00</p>
<p>Stony Stevenson alerts us to a US Department of Homeland Security program in which subcontractors have been examining FOSS source code for security vulnerabilities. InformationWeek.com takes a glass-half-empty approach to reporting the story, saying that for FOSS code [1]on average 1 line in 1000 contains a security bug. From the article: &#8216;A total of 7,826 open source project defects have been fixed through the Homeland Security review, or one every two hours since it was launched in 2006&#8230;&#8217; ZDNet Australia prefers to emphasize those FOSS projects that [2]fixed every reported bug, thus achieving a clean bill of health according to DHS. These include PHP, Perl, Python, Postfix, and Samba.
</p></blockquote>
<p>Firstly, I am a big fan of code scanning and believe that use of static analysis tools should <em>always</em> be one of the basic security steps integrated into every SDLC.  However, there are huge problems with declaring security after passing a code scan with an arbitrary tool and a random set of rules.  The most obvious issue is that security defects come in two flavors&#8212;bugs and flaws&#8212;each accounting for roughly 50% of defects in practice.  Code scanning tools can only find bugs.  Here are two stupid examples for effect: can a code scanning tool determine that no user authentication was performed?  How about whether or not a playback attack will work?</p>
<p>The second most obvious problem is that the list of rules enforced by a static analysis engine can never be complete.  Discussion about this is left as an exercise for the reader.</p>
<p>Architectural risk analysis (crazily called &#8220;threat modeling&#8221; by Microsofties) is, like code scanning, an essential software security best practice.  Formal methods are one way to go about attacking the flaw problem.  In the US we rely on flakier heuristic-based approaches such as the one we use at Cigital.  But no matter the approach, we can&#8217;t ignore the architecture.</p>
<p>References</p>
<ol>
<li><a href="http://www.informationweek.com/story/showArticle.jhtml?articleID=205600229&amp;cid=RSSfeed_IWK_All">http://www.informationweek.com/story/showArticle.jhtml?articleID=205600229&amp;cid=RSSfeed_IWK_All</a></li>
<li><a href="http://www.zdnet.com.au/news/security/soa/11-open-source-projects-pass-security-health-check/0,130061744,339284949,00.htm">http://www.zdnet.com.au/news/security/soa/11-open-source-projects-pass-security-health-check/0,130061744,339284949,00.htm</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.cigital.com/justice-league-blog/2008/01/09/on-open-source/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Sharing architecture ideas with the community</title>
		<link>http://www.cigital.com/justice-league-blog/2007/08/31/sharing-architecture-ideas-with-the-community/</link>
		<comments>http://www.cigital.com/justice-league-blog/2007/08/31/sharing-architecture-ideas-with-the-community/#comments</comments>
		<pubDate>Fri, 31 Aug 2007 19:26:54 +0000</pubDate>
		<dc:creator>justiceadmin</dc:creator>
				<category><![CDATA[Assurance]]></category>
		<category><![CDATA[Defects, Bugs, and Flaws]]></category>
		<category><![CDATA[Enterprise Software Security]]></category>
		<category><![CDATA[Software Quality]]></category>
		<category><![CDATA[Software Security Touchpoints]]></category>

		<guid isPermaLink="false">http://www.cigital.com/justiceleague/2007/08/31/sharing-architecture-ideas-with-the-community/</guid>
		<description><![CDATA[We’re pleased to have a guest blogger for this Justice League entry. Michael Cohen is a Senior Security Consultant at Cigital where he is responsible for leading, assessing, architecting and implementing secure software for Fortune 500 companies. Michael also works with Cigital teams on enterprise-wide security solutions intended to improve an organization&#8217;s security posture and [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>We’re pleased to have a guest blogger for this Justice League entry.  Michael Cohen is a Senior Security Consultant at Cigital where he is responsible for leading, assessing, architecting and implementing secure software for Fortune 500 companies. Michael also works with Cigital teams on enterprise-wide security solutions intended to improve an organization&#8217;s security posture and help them meet audit and regulatory requirements.  Michael just gave a talk to the Washington, DC <a href="http://www.iasahome.org/">IASA chapter</a> that was well received, and is now the subject of this entry:</p></blockquote>
<p>When I hear software architects talk about the architecture they’ve crafted to depict the various structures and behaviors of a system, they point out interesting techniques they’ve applied that best convey how the system should work and be put together. An architect’s enthusiasm for the little details reveals a great sense of accomplishment and creativity, but most of all good architecture conveys sorely needed information in order to help those who develop, test and maintain the system. Sharing the tips and tricks gathered from the field is what helps our community move forward to building better software. A classic example of this is the <a href="http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612"><em>Design Patterns</em></a> book written by the Gang of Four. </p>
<p>Not too long ago I was also sharing my ideas on architecture and security at a local IASA chapter here in Washington, DC.  The group was a crowd of like-minded architects who work for large Fortune 500 companies, government agencies, and promising local startups. My topic was pragmatic secure architecture.  The basic idea was to look at some real ways to incorporate security into architecture using Cigital’s risk management and threat modeling practices. You can find the <a href="http://www.cigital.com/presentations/pragmatic/">slides for my presentation here</a>.</p>
<p>For the uninitiated, threat modeling is a way of depicting where threats (think malicious people, attackers, and so on) can touch a software architecture and how they may be able to exploit critical assets using various attack patterns.  Threat modeling is valuable for determining an architecture’s security posture. In addition, identifying risks in user requirements and business goals, and tying those risks to a threat model results in a map of how design flaws impact the system, its users and the overall business. Threat models coupled with identified high-level risks are a great way to get other stakeholders involved with security decisions.  And mind you, these are stakeholders who would otherwise be unable to contribute and supply critical feedback. </p>
<p>The attendees at the chapter meeting were glad they attended the presentation and heard something worthwhile that they could use in their daily architectural activities.  Many people brought up interesting points about how to best protect critical assets, what a real risk to a system is, and what is considered a good enough mitigation. What I found particularly interesting was how threat modeling provided a way for everyone to contribute interesting ideas about where security vulnerabilities may exist and how they could be mitigated (which, if you think about it, is the entire point of threat models).  </p>
<p>I encourage any architect to share their ideas on building a better architecture with their peers, whether it be at a local organization or at a conference. As a senior security consultant at Cigital, I like to take shared ideas and mold them into my own unique way of thinking about the world.   The best results come when I can apply new ideas to my daily activities as I help our customers assess and create more secure software. </p>
<p>… On an entirely separate note, McGraw still owes me money. I’m watching you, Gary.<br />
[tags]software architecture,software quality,software security,touchpoints[/tags] </p>
]]></content:encoded>
			<wfw:commentRss>http://www.cigital.com/justice-league-blog/2007/08/31/sharing-architecture-ideas-with-the-community/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>From the foreword to Secure Programming with Static Analysis</title>
		<link>http://www.cigital.com/justice-league-blog/2007/07/06/from-the-foreword-to-secure-programming-with-static-analysis/</link>
		<comments>http://www.cigital.com/justice-league-blog/2007/07/06/from-the-foreword-to-secure-programming-with-static-analysis/#comments</comments>
		<pubDate>Fri, 06 Jul 2007 20:28:11 +0000</pubDate>
		<dc:creator>gem</dc:creator>
				<category><![CDATA[Software Security]]></category>
		<category><![CDATA[Software Security Touchpoints]]></category>

		<guid isPermaLink="false">http://www.cigital.com/justiceleague/2007/07/06/from-the-foreword-to-secure-programming-with-static-analysis/</guid>
		<description><![CDATA[This is the foreword that I wrote for Brian Chess and Jacob West’s excellent new book Secure Programming with Static Analysis. I recommend this book for all software security practitioners. Developers, in particular, will find the book extremely helpful. For more on other books in the software security series, see http://www.buildingsecurityin.com. On the first day [...]]]></description>
			<content:encoded><![CDATA[<p><em>This is the foreword that I wrote for Brian Chess and Jacob West’s excellent new book </em>Secure Programming with Static Analysis<em>.  I recommend this book for all software security practitioners.  Developers, in particular, will find the book extremely helpful.  For more on other books in the software security series, see <a href="http://www.buildingsecurityin.com">http://www.buildingsecurityin.com</a>.</em></p>
<p>On the first day of class, mechanical engineers learn a critical lesson—pay attention and learn this stuff or the bridge you build could fall down.  This lesson is most powerfully illustrated by a video of the Tacoma Narrows Bridge shaking itself to <a href="http://www.enm.bris.ac.uk/anm/tacoma/tacoma.html">death</a>.  Figure 0-1 shows a 600-foot section of the bridge falling into the water in 1940.  By contrast, on the first day of software engineering class, budding developers are taught that they can build anything that they can dream of.  They usually start with “hello world.???</p>
<div style="text-align: center">
<img src="/justice-league-blog/files/2007/07/bridge.gif" alt="Tacoma Narrows bridge" /></p>
<p style="text-align: left"><em>Figure 0-1: A 600-foot section of the Tacoma Narrows bridge crashes into Puget Sound as the bridge twists and torques itself to death.  Mechanical engineers are warned early on that this can happen if they don’t practice good engineering.</em></p>
</div>
<p>An overly-optimistic approach to software development has certainly led to the creation of some mind-boggling stuff, but it has likewise allowed us to paint ourselves into the corner from a security perspective.  Simply put, we neglected to think about what would happen to our software if it were intentionally and maliciously attacked.</p>
<p>Much of today’s software is so fragile that it barely functions properly when its environment is pristine and predictable.  If the environment that our fragile software runs in turns out to be pugnacious and pernicious (as much of the Internet environment turns out to be) software fails spectacularly, splashing into the metaphorical Puget Sound.</p>
<p>The biggest problem in computer security today is that most systems aren’t constructed with security in mind.  Reactive network technologies such as firewalls can help alleviate obvious script kiddie attacks on servers, but they do nothing to address the real security problem—bad software.  If we want to solve the computer security problem, we need to do more to build secure software.</p>
<p>Software security is the practice of building software to be secure and function properly under malicious attack.  This book is about one of software security’s most important practices—code review with a static analysis tool.</p>
<p>As practitioners become aware of software security’s importance, they are increasingly adopting and evolving a set of best practices to address the problem. Microsoft has carried out a noteworthy effort under its Trustworthy Computing Initiative.  Many Cigital customers are in the midst of enterprise scale software security initiatives. Most approaches in practice today encompass training for developers, testers, and architects; analysis and auditing of software artifacts; and security engineering. There’s no substitute for working software security as deeply into the development process as possible and taking advantage of the engineering lessons software practitioners have learned over the years.</p>
<p>In my book <em>Software Security</em>, I introduce a set of seven best practices called <em>touchpoints</em>. Putting software security into practice requires making some changes to the way most organizations build software.  The good news is that these changes don’t need to be fundamental, earth shattering, or cost prohibitive. In fact, adopting a straightforward set of engineering best practices, designed in such a way that security can be interleaved into existing development processes, is often all it takes. </p>
<p>Figure 0-2 specifies the software security touchpoints and shows how software practitioners can apply them to the various software artifacts produced during software development. This means understanding how to work security engineering into requirements, architecture, design, coding, testing, validation, measurement, and maintenance.</p>
<div style="text-align: center">
<img src="/justice-league-blog/files/2007/07/touchpoints.gif" alt="Software Security Touchpoints" /></p>
<p style="text-align: left"><em>Figure 0-2: The software security touchpoints as introduced and fleshed out in</em> Software Security: Building Security In.</p>
</div>
<p>Some touchpoints are by their very nature more powerful than others.  Adopting the most powerful ones first is only prudent.  The top two touchpoints are <strong>Code review with a static analysis tool</strong>, and <strong>Architectural risk analysis</strong>.  This book is all about the first.</p>
<p>All software projects produce at least one artifact&#8212;code.  This fact moves code review to the number one slot on our list.  At the code level, the focus is on implementation bugs, especially those that static analysis tools that scan source code for common vulnerabilities can discover.  Several tools vendors now address this space, including Fortify Software the company that Brian and Jacob work for.  </p>
<p>Implementation bugs are both numerous and common (just like real bugs in the Virginia countryside) and include nasty creatures like the notorious buffer overflow, which owes its existence to the use (or misuse) of vulnerable APIs (e.g., gets(), strcpy(), and so on in C).  Code review processes, both manual and (even more important) automated with a static analysis tool, attempt to identify security bugs prior to the software’s release.  </p>
<p>Of course, no single technique is a silver bullet.  Code review is a necessary but not sufficient practice for achieving secure software. Security bugs (especially in C and C++) are a real problem, but architectural flaws are just as big a problem.  Doing code review alone is an extremely useful activity, but given that this kind of review can only identify bugs, the best a code review can uncover is around 50% of the security problems. Architectural problems are very difficult (and mostly impossible) to find by staring at code. This is especially true for modern systems made of hundreds of thousands of lines of code. A comprehensive approach to software security involves holistically combining both code review and architectural analysis.</p>
<p>By its very nature, code review requires knowledge of code. An infosec practitioner with little experience writing and compiling software is going to be of little use during a code review.  The code review step is best left in the hands of the members of the development organization, especially if they are armed with a modern source code analysis tool. With the exception of information security people who are highly experienced in programming languages and code-level vulnerability resolution, there is no natural fit for network security expertise during the code review phase. This may come as a great surprise to those organizations currently attempting to impose software security on their enterprises through the infosec division. Even though the idea of security enforcement is solid, making enforcement at the code level successful when it comes to code review requires real hands-on experience with code.</p>
<p>The problem is that most developers have little idea what bugs to look for, or what to do about bugs if they do happen find them.  That’s where this book, <em>Secure Programming with Static Analysis</em>, comes in.  The book that you have in your hands is the most advanced work on static analysis and code review for security ever released.  It teaches you not only what the bugs are (what I sometimes call the “bug parade??? approach to software security), but how to find them with modern static analysis tools, and more importantly what to do to correct them.  By putting the lessons in this book into practice, you can go a long way toward helping to solve the software security problem.</p>
<p>You can purchase a copy of <em>Secure Programming with Static Analysis</em> from <a href="http://www.amazon.com/Programming-Analysis-Addison-Wesley-Software-Security/dp/0321424778/ref=pd_bbs_sr_1/104-2577668-4903944?ie=UTF8&amp;s=books&amp;qid=1181852272&amp;sr=8-1">Amazon</a>.</p>
<p>[tags]touchpoints, software security, static anlaysis, Brian Chess, Jacob West[/tags]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cigital.com/justice-league-blog/2007/07/06/from-the-foreword-to-secure-programming-with-static-analysis/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A Mini-Architecture for Security Guidance</title>
		<link>http://www.cigital.com/justice-league-blog/2007/05/25/a-mini-architecture-for-security-guidance/</link>
		<comments>http://www.cigital.com/justice-league-blog/2007/05/25/a-mini-architecture-for-security-guidance/#comments</comments>
		<pubDate>Fri, 25 May 2007 17:46:36 +0000</pubDate>
		<dc:creator>jOHN</dc:creator>
				<category><![CDATA[Enterprise Software Security]]></category>
		<category><![CDATA[Software Security]]></category>
		<category><![CDATA[Software Security Touchpoints]]></category>

		<guid isPermaLink="false">http://www.cigital.com/justiceleague/2007/05/25/a-mini-architecture-for-security-guidance/</guid>
		<description><![CDATA[Benjamin Tomhave wrote about &#8220;tiering&#8221; security guidance when I cross-posted a comment to my last blog entry on the SC-L mailing list. Quoting him: The higher up you are in the policy framework, the more general and time-enduring the content should be. The farther you progress down the framework to a more detailed level, the [...]]]></description>
			<content:encoded><![CDATA[<p>Benjamin Tomhave wrote about &#8220;tiering&#8221; security guidance when I cross-posted a comment to my last blog entry on the SC-L mailing list. Quoting him:</p>
<blockquote><p>The higher up you are in the policy framework, the more general and time-enduring the content should be. The farther you progress down the framework to a more detailed level, the more perishable the content will be, out of necessity. </p></blockquote>
<p>Later he continues:</p>
<blockquote><p>&#8230;is because implementers need it.  They&#8217;re not security experts (usually) and do not necessarily grok security the same way a seasoned (salty?) security person might.because &#8220;implementers need it&#8221;.
</p></blockquote>
<p>This tiering was implicit to my first post. In fact your most senior security resources can probably use nothing but Security Principals (as described by McGraw&#8217;s BSS Book and the famous <a href="http://web.mit.edu/Saltzer/www/publications/protection/">Saltzer paper</a>) and find both insidious vulnerabilities as well as brand-new &#8220;Game over&#8221; architectural flaws with new development technologies they aren&#8217;t familiar with. But, the more junior (inexperienced) or development-oriented (constructive) the person being targeted, the more specific the guidance must be in order to be valuable without requiring inordinate effort.</p>
<p>Because we&#8217;re trying to change the behavior of the majority of our  Developers&#8211;who range in skill from OK to Hero and whom may have never had even a security awareness class&#8211;I find &#8220;technology-specific&#8221; guidance moves the ball the furthest. </p>
<p>In my previous two posts I talk about forms various levels of standards take, and the way in which one might create it. It occurs to me that I all but showed the bigger picture and might as well follow up to do so. Below, you&#8217;ll find a map of how I show security guidance flowing throw and effecting a software development team (click-through for full detail):</p>
<p align="center"><a class="imagelink" href="/justice-league-blog/files/2007/05/knowledge-collateral-maturation.jpg" title="Mini-Knowledge Architecture"><img src="/justice-league-blog/files/2007/05/knowledge-collateral-maturation.jpg" alt="Mini-Knowledge Architecture" width="500" height="328" /></a></p>
<p>As information moves from top to bottom and from left to right it becomes more specific and actionable, but also more perishable (as has been said). To build security in, one must think about security&#8217;s implications throughout the lifecycle, so I see no reason why security knowledge (regardless of how specific) shouldn&#8217;t mirror artifacts used to construct the application itself: software requirements, design, and the code itself. </p>
<p>Though not central to this discussion, the diagram has been annotated to indicate who should produce and consume this information. Here, I&#8217;ll point out that your centralized Application Security Resources can probably most effectively and efficiently create the generic security guidance, but will need help of Security Architects to create the more technology-specific guidance and garner broad buy-in.</p>
<p>My last post presented a brief model of how one might organize and fund this in practice.<br />
-jOHN</p>
<p>[tags]knowledge architecture,software security[/tags]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cigital.com/justice-league-blog/2007/05/25/a-mini-architecture-for-security-guidance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

