<?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>Veracode Blog &#187; Application Security Metrics</title>
	<atom:link href="http://www.veracode.com/blog/category/application-security-metrics/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.veracode.com/blog</link>
	<description>Application security testing, analysis, and metrics</description>
	<lastBuildDate>Thu, 09 Feb 2012 13:18:47 +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>Squashing Ants: The Dynamics of XSS Remediation</title>
		<link>http://www.veracode.com/blog/2010/09/squashing-ants-the-dynamics-of-xss-remediation/</link>
		<comments>http://www.veracode.com/blog/2010/09/squashing-ants-the-dynamics-of-xss-remediation/#comments</comments>
		<pubDate>Mon, 27 Sep 2010 15:30:31 +0000</pubDate>
		<dc:creator>Chris Eng</dc:creator>
				<category><![CDATA[Application Security]]></category>
		<category><![CDATA[Application Security Metrics]]></category>
		<category><![CDATA[QA]]></category>
		<category><![CDATA[RESEARCH]]></category>
		<category><![CDATA[SDLC]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.veracode.com/blog/?p=1285</guid>
		<description><![CDATA[Is anyone else getting tired of hearing excuses from customers &#8212; and worse yet, the security community itself &#8212; about how hard it is to fix cross-site scripting (XSS) vulnerabilities? Oh, come on. Fixing XSS is like squashing ants, but some would have you believe it&#8217;s more like slaying dragons. I haven&#8217;t felt inspired to [...]]]></description>
			<content:encoded><![CDATA[<p>Is anyone else getting tired of hearing excuses from customers &#8212; and worse yet, the security community itself &#8212; about how <em>hard</em> it is to fix cross-site scripting (XSS) vulnerabilities?  Oh, come on.  Fixing XSS is like squashing ants, but some would have you believe it&#8217;s more like slaying dragons.  I haven&#8217;t felt inspired to write a blog post in a while, but every once in a while, 140 characters just isn&#8217;t enough.  Grab your cup of coffee, because I may get a little rambly.</p>
<p><strong>Easy to Fix vs. Easy to Eradicate</strong></p>
<p>Let&#8217;s start with some terminology to make sure we&#8217;re all on the same page.  Sometimes people will say XSS is &#8220;not easy to fix&#8221; but what they really mean is that it&#8217;s &#8220;not easy to eradicate.&#8221;  Big difference, right?  Not many vulnerability classes are easy to eradicate.  Take buffer overflows as an example.  Buffer overflows were first documented in the early 1970s and began to be exploited heavily in the 1990s.  We understand exactly how and why they occur, yet they are far from extinct.  Working to eradicate an entire vulnerability class is a noble endeavor, but it&#8217;s not remotely pragmatic for businesses to wait around for it to happen.  We can bite off chunks through OS, API, and framework protections, but XSS or any other vulnerability class isn&#8217;t going to disappear completely any time soon.  So in the meantime, let&#8217;s focus on the &#8220;easy to fix&#8221; angle because that&#8217;s the problem developers and businesses are struggling with today.</p>
<p>It&#8217;s my belief that most XSS vulnerabilities can be fixed easily.  Granted, it&#8217;s not as trivial as wrapping a single encoding mechanism around any user-supplied input used to construct web content, but once you learn how to apply <a href="http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet">contextual encoding</a>, it&#8217;s really not that bad, provided you grok the functionality of your own web application.  An alarming chunk of reflected XSS vulnerabilities are trivial, reading the value of a GET/POST parameter and writing it directly to an HTML page.  Plenty of others are only marginally more complicated, such as retrieving a user-influenced value from the database and writing it into an HTML attribute.  I contend both of these examples are easy for a developer to fix; tell me if you disagree.  Basic XSS vulnerabilities like these are still very prevalent.</p>
<p>Of course, there are edge cases.  Take <a href="http://erlend.oftedal.no/blog/?blogid=91">this freakish example</a>, which combines browser-specific parsing behavior with the ill-advised use of tainted input in Javascript code.  Exceptions will always exist, but that doesn&#8217;t change the fact that <strong>most</strong> XSS flaws are straightforward to fix.  We can take a huge bite out of the problem by eliminating these basic reflected cases, just like we started attacking buffer overflows by discouraging the use of unbounded string manipulation functions.  Some will claim &#8220;developers shouldn&#8217;t be responsible for writing secure code,&#8221; which is noble and idealistic but also completely impractical in this day and age.  Maybe it&#8217;ll happen eventually, but in the meantime there are fires to put out.  So let&#8217;s step down from those ivory towers and impose some accountability.</p>
<p><strong>Ease of Fix vs. Willingness to Fix</strong></p>
<p>I&#8217;ve heard the assertion that XSS vulnerabilities aren&#8217;t getting fixed because they are difficult to fix.  Asking &#8220;what percentage of XSS vulnerabilities actually get fixed and deployed to production?&#8221; is a valuable metric for the business, but it doesn&#8217;t reflect the actual difficulty of fixing an XSS vulnerability.  It conflates the technical complexity with other <strike>excuses</strike>reasons <a href="http://jeremiahgrossman.blogspot.com/2009/05/8-reasons-why-website-vulnerabilities.html">why website vulnerabilities are not fixed</a>.  </p>
<p>At Veracode, we collected data in our <a href="http://www.veracode.com/images/pdf/soss/veracode-state-of-software-security-report-volume2.pdf">State of Software Security Vol. 2</a> report that reveals developers <em>are</em> capable of fixing security issues quickly.  While our data isn&#8217;t granular enough to state exactly how long it took to fix a particular flaw, we do know that in cases where developers did choose to remediate flaws and rescan, they reached an &#8220;acceptable&#8221; level of security in an average of 16 days.  This isn&#8217;t to say that every XSS was eliminated, but it suggests that most were (more details on our scoring methodology can be found in the appendix of the report).  </p>
<p>WhiteHat&#8217;s <a href="http://www.whitehatsec.com/home/assets/WPstats_fall10_10th.pdf">Fall 2010 study</a> shows that nearly half of XSS vulnerabilities are fixed, and that doing so takes their customers an average of 67 days.  These numbers differ from ours &#8212; particularly with regard to the number of days &#8212; but I think that can be attributed to prioritization.  Perhaps fixing the XSS vulnerability didn&#8217;t rise to the top of the queue until day 66.  Again, that&#8217;s more an indication that the business isn&#8217;t taking XSS seriously than it is of the technical sophistication required to fix.</p>
<p>At Veracode, we see thousands &#8212; sometimes tens of thousands &#8212; of XSS vulnerabilities a week.  Many are of the previously described trivial variety that can be fixed with a single line of code.  Some of our customers upload a new build the following day; others never do.  Motivation is clearly a factor.  Think about the XSS vulnerabilities that hit highly visible websites such as Facebook, Twitter, MySpace, and others.  Sometimes those companies push XSS fixes to production in a matter of hours!  Are their developers really that much better?  Of course not.  The difference is how seriously the business takes it.  When they believe it&#8217;s important, you can bet it gets fixed.</p>
<p><strong>Manufactured Contempt</strong></p>
<p>There&#8217;s a growing faction that believes <a href="http://diniscruz.blogspot.com/2010/09/why-do-we-think-we-can-comment-on-level.html">security practitioners are not qualified to comment</a> on the difficulty of security fixes (XSS or otherwise) because we&#8217;re not the ones writing the code.  The ironic thing is that this position is most loudly voiced by people in the infosec community!  It&#8217;s like they are trying to be the &#8220;white knights&#8221;, coddling the poor, fragile developers so their feelings aren&#8217;t hurt.  Who are we to speak for them?  I find the entire mindset misguided at best, disingenous and contemptuous at worst.  To be fair, Dinis isn&#8217;t the only one who has expressed this view, he&#8217;s just the straw that broke the camel&#8217;s back, so to speak.  You know who you are.</p>
<p>Look, the vast majority of security professionals aren&#8217;t developers and never have been (notable exceptions include Christien Rioux, HD Moore, Halvar Flake, etc.).  Trust me, we know it. I&#8217;ve written lots of code that I&#8217;d be horrified for any real developer to see.  My stuff may be secure, but I&#8217;d hate to be the guy who has to maintain, extend, or even understand it.  Here&#8217;s the thing &#8212; even though I can guarantee you I&#8217;d be terrible as a developer, most XSS flaws are so simple that even a security practioner like me could fix them!  Here&#8217;s another way of looking at it: developers solve problems <em>on a daily basis</em> that are <strong>much</strong> more complex than patching an XSS vulnerability.  Implying that fixing XSS is &#8220;too hard&#8221; for them is insulting!  </p>
<p>That being said, who says we&#8217;re not qualified to comment on a code-level vulnerability if we&#8217;re not the one writing the fix?  In fact, who&#8217;s to say that the security professional isn&#8217;t <strong>more</strong> qualified to assess the difficulty in some situations?  Specifically, if a developer doesn&#8217;t understand the root cause, how can he possibly estimate the effort to fix?  I&#8217;ve been on readouts where developers claim initially that several hundred XSS flaws will take a day each to fix, but then once they understand how simple it is they realize they can knock them all out in a week.  Communication and education go a long way.  Sure, sometimes there are complicating factors involved that affect remediation time, but I can&#8217;t recall a time where a developer has told me my estimate was downright unreasonable.  </p>
<p>Bottom line: By and large, I don&#8217;t think developers feel miffed or resentful when we try to estimate the effort to fix a vulnerability. They know that what we say isn&#8217;t the final word, it&#8217;s simply one input into a more complex equation.  Yes, developers do get annoyed when it seems like the security group is creating extra work for them, but that&#8217;s a different discussion altogether.</p>
<p><strong>Ceteris Paribus</strong></p>
<p>One final pet peeve of mine is the rationalization that security vulnerabilities take longer to fix because you have to identify the root cause, account for side effects, test the fix, and roll it into a either a release or a patch.  As opposed to other software bugs where fixes are accomplished by handwaving and magic incantations?  Of course not; these steps are common to just about <em>any software bug</em>.  In fact, I&#8217;d argue that identifying the root cause of a security vulnerability is much easier than hunting down an unpredictable crash, a race condition, or any other non-trivial bug.  Come to think of it, testing the fix may be easier too, at least compared to a bug that&#8217;s intermittent or hard to reproduce.  As for side effects and other QA testing, this is why we have regression suites!  If you build software and you don&#8217;t have the capability to run an automated regression suite after fixing a bug, then let&#8217;s face it, you&#8217;ve got bigger problems than wringing out a few XSS vulnerabilities.</p>
<p>My high school economics teacher used the term &#8220;ceteris paribus&#8221; at least once per lecture.  Loosely translated from Latin, it means &#8220;all other things being equal&#8221; and it&#8217;s often used in economics and philosophy to enable one to describe outcomes without having to account for other complicating factors.  The ceteris paribus concept doesn&#8217;t apply perfectly to this situation, but it&#8217;s close enough for a blog post, to wit: ceteris paribus, fixing a security-related bug is no more difficult than fixing <em>any other critical software bug</em>.  Rattling off all the steps involved in deploying a fix is just an attempt at misdirection.</p>
<p><strong>Closing Thoughts</strong></p>
<p>My hope in writing this post is to spur some debate around some of the reasons, excuses, and rationalizations that often accompany the surprisingly-divisive topic of XSS.  I want to hear from both security practitioners and developers on where you think I&#8217;ve hit or missed the mark. We don&#8217;t censor comments here, but there is a moderation queue, so bear with us if your comment takes a few hours to show up.</p>
<h5>Veracode Security Solutions</h5>
<div style="margin-left:15px;">
<a href="http://www.veracode.com/security/static-analysis-tool">Static Analysis Tool</a><br />
<a href="http://www.veracode.com/security/penetration-testing">Penetration Testing Tool</a><br />
<a href="http://www.veracode.com/security/static-code-analysis">Static Code Analysis</a><br />
<a href="http://www.veracode.com/security/vulnerability-scanning">Vulnerability Scanning</a><br />
<a href="http://www.veracode.com/security/web-application-security-testing">Web Application Testing</a><br />
<a href="http://www.veracode.com/security/software-testing-tools">Software Testing Tools</a><br />
<a href="http://www.veracode.com/security/source-code-security-analyzer">Source Code Security Analyzer</a><br />
<a href="http://www.veracode.com/security/code-security">Software Code Security</a><br />
<a href="http://www.veracode.com/security/application-testing-tool">Application Testing Tool</a><br />
<a href="http://www.veracode.com/security/code-analysis">Source Code Analysis</a><br />
<a href="http://www.veracode.com/security/code-review">Code Review Tools</a></div>
<h5>Veracode Security Threat Guides</h5>
<div style="margin-left:15px;">
<a href="http://www.veracode.com/security/sql-injection">Prevention of SQL Injection</a><br />
<a href="http://www.veracode.com/security/xss">Cross Site Scripting Vulnerabilities</a><br />
<a href="http://www.veracode.com/security/csrf">CSRF Attacks</a><br />
<a href="http://www.veracode.com/security/ldap-injection">LDAP Injection</a><br />
<a href="http://www.veracode.com/security/mobile-code-security">Mobile Code Security</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.veracode.com/blog/2010/09/squashing-ants-the-dynamics-of-xss-remediation/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Verizon Business Has a New Report on Data Breaches</title>
		<link>http://www.veracode.com/blog/2008/06/verizon-business-has-a-new-report-on-data-breaches/</link>
		<comments>http://www.veracode.com/blog/2008/06/verizon-business-has-a-new-report-on-data-breaches/#comments</comments>
		<pubDate>Thu, 12 Jun 2008 20:21:39 +0000</pubDate>
		<dc:creator>Chris Wysopal</dc:creator>
				<category><![CDATA[Application Security]]></category>
		<category><![CDATA[Application Security Metrics]]></category>
		<category><![CDATA[RESEARCH]]></category>
		<category><![CDATA[Add new tag]]></category>
		<category><![CDATA[data breaches]]></category>
		<category><![CDATA[privacy]]></category>
		<category><![CDATA[verizon]]></category>

		<guid isPermaLink="false">http://www.veracode.com/blog/?p=107</guid>
		<description><![CDATA[The Verizon Business data breach report is by far the most comprehensive and detailed report on data breaches I have seen. It is great to see the break down of what is the root cause of these expensive and significant computer security failures. While it is interesting to see counts of malware infected computers from [...]]]></description>
			<content:encoded><![CDATA[<p>The Verizon Business data breach report is by far the most comprehensive and detailed report on data breaches I have seen.  It is great to see the break down of what is the root cause of these expensive and significant computer security failures.  While it is interesting to see counts of malware infected computers from Symantec and vulnerability counts from CVE, this report gets to the actual attacks that organizations need to prevent with their security programs.</p>
<p><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--> <!--[if gte mso 10]></p>
<style>
 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:"Table Normal";
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-qformat:yes;
	mso-style-parent:"";
	mso-padding-alt:0in 5.4pt 0in 5.4pt;
	mso-para-margin:0in;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:10.0pt;
	font-family:"Times New Roman","serif";}
</style>
<p><![endif]--></p>
<p class="MsoNormal">Digging into the full report they say that 59% of the breaches involve hacking.  Of those the breakdown is this:</p>
<p class="MsoNormal">
<ul>
<li>Application/Service layer -39%</li>
<li>OS/Platform layer &#8211; 23%</li>
<li>Exploit known vulnerability -18%</li>
<li>Exploit unknown vulnerability &#8211; 5%</li>
<li>Use of back door -15%</li>
</ul>
<blockquote>
<p class="MsoNormal">“Attacks targeting applications, software, and services were by far the most common technique, representing 39 percent of all hacking activity leading to data compromise. This follows a trend in recent years of attacks moving up the stack. Far from passé, operating system, platform, and server-level attacks accounted for a sizable portion of breaches. Eighteen percent of hacks exploited a specific known vulnerability while 5 percent exploited unknown vulnerabilities for which a patch was not available at the time of the attack. Evidence of re-entry via backdoors, which enable prolonged access to and control of compromised systems, was found in 15 percent of hacking-related breaches. The attractiveness of this to criminals desiring large quantities of information is obvious.”</p>
<p class="MsoNormal">
</blockquote>
<p class="MsoNormal">The largest single type of breach is hacking and within that the largest type is application/service layer attacks. So if we multiply 59% times 39% we get 23% of those 500, or 115, data breaches are due attackers  hacking applications.  That is a very significant number of the whole slice of the data breach pie.  It is clear that securing applications is a significant part of protecting against data breaches.</p>
<p class="MsoNormal">
<p class="MsoNormal"><a href="http://www.verizonbusiness.com/resources/security/databreachreport.pdf">Full Report</a></p>
<h5>Veracode Security Solutions</h5>
<div style="margin-left:15px;">
<a href="http://www.veracode.com/security/application-testing-tool">Application Testing Tool</a><br />
<a href="http://www.veracode.com/security/static-analysis-tool">Static Analysis</a><br />
<a href="http://www.veracode.com/security/penetration-testing">Penetration Testing</a><br />
<a href="http://www.veracode.com/security/static-code-analysis">Static Code Analysis</a><br />
<a href="http://www.veracode.com/security/vulnerability-scanning">Vulnerability Scanning Tools</a><br />
<a href="http://www.veracode.com/security/web-application-security-testing">Web Application Security</a><br />
<a href="http://www.veracode.com/security/software-testing-tools">Software Testing Tools</a><br />
<a href="http://www.veracode.com/security/source-code-security-analyzer">Source Code Security Analyzer</a><br />
<a href="http://www.veracode.com/security/code-security">Software Code Security</a><br />
<a href="http://www.veracode.com/security/code-analysis">Source Code Analysis</a><br />
<a href="http://www.veracode.com/security/code-review">Code Review</a></div>
<h5>Veracode Security Threat Guides</h5>
<div style="margin-left:15px;">
<a href="http://www.veracode.com/security/sql-injection">SQL Injection Vulnerabilities</a><br />
<a href="http://www.veracode.com/security/xss">Cross Site Scripting</a><br />
<a href="http://www.veracode.com/security/csrf">Cross Site Request Forgery</a><br />
<a href="http://www.veracode.com/security/ldap-injection">LDAP Injection</a><br />
<a href="http://www.veracode.com/security/mobile-code-security">Mobile Code Security</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.veracode.com/blog/2008/06/verizon-business-has-a-new-report-on-data-breaches/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Classifying and Prioritizing Software Vulnerabilities</title>
		<link>http://www.veracode.com/blog/2007/10/classifying-and-prioritizing-software-vulnerabilities/</link>
		<comments>http://www.veracode.com/blog/2007/10/classifying-and-prioritizing-software-vulnerabilities/#comments</comments>
		<pubDate>Mon, 08 Oct 2007 21:51:08 +0000</pubDate>
		<dc:creator>Kate Munro</dc:creator>
				<category><![CDATA[Application Security]]></category>
		<category><![CDATA[Application Security Metrics]]></category>
		<category><![CDATA[RESEARCH]]></category>
		<category><![CDATA[SDLC]]></category>
		<category><![CDATA[CVSS]]></category>
		<category><![CDATA[software security testing]]></category>
		<category><![CDATA[software vulnerabilities]]></category>

		<guid isPermaLink="false">http://www.veracode.com/blog/?p=66</guid>
		<description><![CDATA[We were more than pleased to read a new report by John Pescatore of Gartner recommending that security managers adopt the use of the Common Vulnerability Scoring System (CVSS) to support more repeatable, fast-acting vulnerability management processes. This recommendation backs up the decision made by our CTO, Chris Wysopal, more than a year ago to [...]]]></description>
			<content:encoded><![CDATA[<p>We were more than pleased to read a new <a href="http://www.gartner.com/7_search/Search2Frame.jsp?keywords=CVSS">report </a>by <a href="http://www.gartner.com/AnalystBiography?authorId=14409">John Pescatore </a>of Gartner recommending that security managers adopt the use of the Common Vulnerability Scoring System (CVSS) to support more repeatable, fast-acting vulnerability management processes. </p>
<p>This recommendation backs up the decision made by our CTO, Chris Wysopal, more than a year ago to adopt the CVSS standard as a part of the Veracode rating system.</p>
<p>Another interesting recommendation in the report is: &#8220;Enterprieses should ensure that processes are in place to detect, assess, and manage each software vulnerability class.&#8221; You&#8217;ll need a combination of static, dynamic and manual testing to do it all.</p>
<p>Gartner requires you to have a login to read the entire article.</p>
<p>On a side note, we are now linking to Technorati:<br />
<a href="http://technorati.com/claim/abpkefv6vt" rel="me">Technorati Profile</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.veracode.com/blog/2007/10/classifying-and-prioritizing-software-vulnerabilities/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PCI Extends Its Reach to Application Security</title>
		<link>http://www.veracode.com/blog/2007/09/pci-extends-its-reach-to-application-security/</link>
		<comments>http://www.veracode.com/blog/2007/09/pci-extends-its-reach-to-application-security/#comments</comments>
		<pubDate>Fri, 21 Sep 2007 03:39:20 +0000</pubDate>
		<dc:creator>Chris Eng</dc:creator>
				<category><![CDATA[Application Security]]></category>
		<category><![CDATA[Application Security Metrics]]></category>
		<category><![CDATA[Compliance]]></category>
		<category><![CDATA[RESEARCH]]></category>
		<category><![CDATA[SDLC]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.veracode.com/blog/?p=63</guid>
		<description><![CDATA[Earlier this week, I attended the first PCI Community Meeting in Toronto, a gathering organized by the PCI Security Standards Council to bring QSAs, ASVs, and other PCI stakeholders together in one room with the PCI Council. Let&#8217;s be honest here &#8212; in the security industry, discussing regulatory compliance is about as dull as it [...]]]></description>
			<content:encoded><![CDATA[<p>Earlier this week, I attended the first PCI Community Meeting in Toronto, a gathering organized by the <a href="https://www.pcisecuritystandards.org/index.htm">PCI Security Standards Council</a> to bring QSAs, ASVs, and other PCI stakeholders together in one room with the PCI Council.  Let&#8217;s be honest here &#8212; in the security industry, discussing regulatory compliance is about as dull as it gets.  On the other hand, compliance is also a major catalyst, sometimes the only catalyst, in convincing organizations to improve their security posture, so it&#8217;s important to understand.  As might be expected, I focused my attention on the sessions dealing with upcoming application security requirements and standards.  Of particular interest were the two panel discussions covering the Payment Application Data Security Standard (PA-DSS) and Requirement 6.6 of the PCI Data Security Standard (PCI-DSS).</p>
<p><strong>PA-DSS</strong></p>
<p>The PA-DSS is basically an extension of Visa&#8217;s Payment Application Best Practices (PABP) guidelines.  Essentially, it&#8217;s a standard that will be applied to any application that stores, processes, or transmits cardholder data in a merchant or service provider environment.  This is not to be confused with the PCI-DSS, which applies to entities/companies as opposed to applications.  The PCI Council will release a draft of the PA-DSS in October for comments and suggestions, leading to a final version by the end of Q4.  They are currently working on the certification process for existing QPASPs (Visa&#8217;s certification for PA assessors) to become PA-QSAs by Q2 2008.</p>
<p>The panel outlined the changes to PABP as follows:</p>
<ul>
<li>Explanation/Clarification.  Just providing additional text around the best practices, presumably to make them easier to understand.</li>
<li>Enhancements.  Things necessary to turn a Best Practices document into a standard.  The panel did not go into exhaustive detail on the enhancements, but the examples given were requiring assessors to use forensic tools to examine the output of the PA, introducing stronger lab requirements, and requiring a penetration test of the PA to identify common (e.g. OWASP-style) vulnerabilities.</li>
<p>
</ul>
<p>Unfortunately, this was the extent of the detail.  I wanted more information on the enhancements but didn&#8217;t get a chance to ask a question due to time constraints.  Specifically, it would be nice to understand whether code analysis would be an alternate option for the penetration test requirement.  Or what exactly they meant by using forensic tools to examine the application&#8217;s output.</p>
<p>Other relevant questions that came up had to do with versioning and recertification.  For example, if a PA vendor releases a minor update, what is required in order to recertify the application?  Would they be required to conduct another pen test, even if all they did was add a minor feature, such as the ability to recognize a new type of gift card?  The panel&#8217;s response was that if a recompile was required then recertification would be necessary.  However, that recertification effort could be targeted towards the new functionality.  The other good question was under what lab conditions would the application be tested &#8212; the vendor or the customer.  If you consider applications such as SAP, PeopleSoft, etc. which tend to be highly customized for each customer install, does it make sense to test in a vendor lab only, with no context of how the application will be deployed and configured in a production environment?</p>
<p><strong>Requirement 6.6</strong></p>
<p>Requirement 6.6 of the PCI-DSS becomes mandatory in June 2008 and requires all web-facing applications to either undergo a code review OR be protected by a web application firewall.  There were questions on what &#8220;web-facing&#8221; means, and the Council admitted that it needed rewording.  This could be interpreted as any application using HTTP as a transport mechanism, or it could mean only those applications that were Internet-facing.  It sounded as if they meant the latter, but they did not say so outright which was confusing.  Web services applications would also be within scope.  Many people were confused about the requirements for a WAF, specifically because there are no guidelines on what functionality the WAF must have, how it must be configured, etc.  Joe Lindstrom, a panelist who runs Symantec&#8217;s compliance practice, outlined these features to look for when selecting a WAF:</p>
<ul>
<li>Layer of defense for known attacks (e.g. OWASP Top 10)</li>
<li>LDAP and/or Active Directory integration</li>
<li>Logging and monitoring capabilities</li>
<li>Minimal performance impact</li>
<p>
</ul>
<p>From a security perspective, I am not sure why performance impact was on the list.  As long as the security requirements are met, it should be up to you to decide how much of a performance hit your application can handle.  Another panelist, Dave Wichers from Aspect Security, suggested that a WAF should also do egress filtering to detect sensitive information such as track data leaving the network.</p>
<p>WAFs can be configured in so many different ways, however, that people were really looking for detailed guidelines on what would satisfy the requirement.  First, WAFs can be run in &#8220;detect&#8221; or &#8220;prevent&#8221; mode.  The former simply logs anomalies, while the latter actively blocks traffic once it detects those anomalies.  Obviously, this is a big difference from an operational risk perspective, and most organizations use &#8220;detect&#8221; mode for that reason.  Secondly, the effectiveness of a WAF is limited if it is not tuned specifically for the web application that it is protecting.  In order for it to know what constitutes malicious traffic, it needs to understand what normal application traffic looks like.  It&#8217;s kind of like tuning an IDS, except at the application layer.  Of course, this means that a certain amount of retraining is required whenever the application is updated or changed, so again, WAFs are commonly deployed without proper tuning in order to avoid unforeseen disruptions.</p>
<p>One panelist, Kennet Westby from Coalfire Systems, pointed out that Requirement 6.6 should not be an either-or option, since code review is an integral part of the SDLC.  This time, I made it up to the microphone before time expired, and asked if the council had considered making code review the sole requirement but allowing a WAF to be used as a compensating control.  In my view, this seemed more closely aligned with the intent of PCI as a security standard.  Incorporating code review into the development process is the best practice, whereas a WAF is essentially just a band-aid, not a replacement for code review.  Granted, a SDLC cannot be put in place overnight, and a WAF can be effective as quick fix &#8212; something is better than nothing &#8212; but it certainly shouldn&#8217;t be an equivalent way to satisfy the requirement.  Dave Wichers responded to my question, agreeing that code review was the &#8220;right way,&#8221; but added that a code review is not a viable option for many companies, thus they had to offer WAF as an alternative.  Time ran out, so I&#8217;m still not clear exactly what he meant by that, and I need to follow up to get more clarity on his comment.  Still, I saw some heads nodding and received some positive feedback from a couple people in the audience, so I guess I&#8217;m not the only one thinking along these lines.</p>
<p>The panel also brought up the question of whether automated code analysis solutions could be used to satisfy the code review requirement.  The general consensus on stage was that you still needed a security professional in the loop due to the false positive (FP) and false negative (FN) problem.  This isn&#8217;t to say that companies shouldn&#8217;t use these tools to help them achieve compliance, but that the tools alone would not satisfy the requirement.  While the panel did not recommend any specific products, they suggested that organizations should focus on three main factors when selecting code analysis vendors:</p>
<ul>
<li>Maturity of the product</li>
<li>Ease of integration into the SDLC</li>
<li>FP and FN rates as an accuracy benchmark</li>
<p>
</ul>
<p>The idea of benchmarking for FP/FN rates shows a level of maturity that this industry is undergoing.  It would be an eye-opening exercise to apply these standards to human code reviewers and human penetration testers as well.  In fact, I think people would be shocked when they realize the FN levels they are accepting today.</p>
<p>Staying on the topic of benchmarking for a moment, the WAF discussion is interesting.  What percentage of attacks do people think these are actually stopping?  Is it 20% or 80%?  I haven&#8217;t ever seen any solid data here, though anecdotally, the reviews certainly have not been glowing.  This is a big of an unknown as FP/FN rates of code analysis tools.  If automated code analysis is going to be held up to benchmark scrutiny, then WAFs and manual assessments need to be as well.</p>
<p><strong>Conclusions</strong></p>
<p>Overall, I found that the sessions were probably a little bit on the short side.  At each session I attended, there was never enough time at the end to address audience questions.  Many of the audience members were from companies working toward PCI compliance, so the questions tended to revolve around interpretation of the PCI language and intent (Is such-and-such considered a compensating control?  What do you mean by connected entities?), leaving less time for discussion of the technical merits of the security requirements.</p>
<h5>Veracode Security Solutions</h5>
<div style="margin-left:15px;">
<a href="http://www.veracode.com/security/application-testing-tool">Application Testing Tool</a><br />
<a href="http://www.veracode.com/security/static-analysis-tool">Static Analysis</a><br />
<a href="http://www.veracode.com/security/penetration-testing">Penetration Testing</a><br />
<a href="http://www.veracode.com/security/static-code-analysis">Static Code Analysis</a><br />
<a href="http://www.veracode.com/security/vulnerability-scanning">Vulnerability Scanning Tools</a><br />
<a href="http://www.veracode.com/security/web-application-security-testing">Web Application Security</a><br />
<a href="http://www.veracode.com/security/software-testing-tools">Software Testing Tools</a><br />
<a href="http://www.veracode.com/security/source-code-security-analyzer">Source Code Security Analyzer</a><br />
<a href="http://www.veracode.com/security/code-security">Software Code Security</a><br />
<a href="http://www.veracode.com/security/code-analysis">Source Code Analysis</a><br />
<a href="http://www.veracode.com/security/code-review">Code Review</a></div>
<h5>Veracode Security Threat Guides</h5>
<div style="margin-left:15px;">
<a href="http://www.veracode.com/security/sql-injection">SQL Injection Vulnerabilities</a><br />
<a href="http://www.veracode.com/security/xss">Cross Site Scripting</a><br />
<a href="http://www.veracode.com/security/csrf">Cross Site Request Forgery</a><br />
<a href="http://www.veracode.com/security/ldap-injection">LDAP Injection</a><br />
<a href="http://www.veracode.com/security/mobile-code-security">Mobile Code Security</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.veracode.com/blog/2007/09/pci-extends-its-reach-to-application-security/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Take WASC Data With a Grain of Salt</title>
		<link>http://www.veracode.com/blog/2007/04/take-wasc-data-with-a-grain-of-salt/</link>
		<comments>http://www.veracode.com/blog/2007/04/take-wasc-data-with-a-grain-of-salt/#comments</comments>
		<pubDate>Wed, 11 Apr 2007 00:31:45 +0000</pubDate>
		<dc:creator>Chris Eng</dc:creator>
				<category><![CDATA[Application Security]]></category>
		<category><![CDATA[Application Security Metrics]]></category>
		<category><![CDATA[RESEARCH]]></category>
		<category><![CDATA[Vulnerabilities]]></category>

		<guid isPermaLink="false">http://www.veracode.com/blog/?p=35</guid>
		<description><![CDATA[The Web Application Security Consortium (WASC) just published statistics on the prevalence of various web application vulnerabilities. The list was compiled from 31,373 automated assessments performed during 2006 by four contributing companies, with the methodology around data collection described as follows: The scans include a combination of raw scan results and results that have been [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.webappsec.org/">Web Application Security Consortium</a> (WASC) just <a href="http://www.webappsec.org/projects/statistics/">published statistics</a> on the prevalence of various web application vulnerabilities.  The list was compiled from 31,373 automated assessments performed during 2006 by four contributing companies, with the methodology around data collection described as follows:</p>
<blockquote><p>The scans include a combination of raw scan results and results that have been manually validated to remove false positive results. The statistics do not include the results of any purely manual security audits (aka human assessments).</p></blockquote>
<p>As with any statistical data, the results of this study should be digested with a healthy dose of skepticism and a solid understanding of the sampling bias.  Take, for example, a political tracking poll conducted by phone during normal business hours.  The results of the poll will only account for the opinions of voters with publicly listed phone numbers who happen to be home during the day (and who don&#8217;t screen their calls to weed out tracking polls).  The sampling bias of the WASC study is that it only accounts for the findings of automated web application scanners.  As a result, it primarily reflects the capabilities and limitations of these scanners, not the general state of web application security, as one might reasonably expect from a WASC publication.</p>
<p>Keeping this bias in mind, what does this data <em>really</em> tell us, beyond the fact that automated vulnerability scanners find a lot of XSS?  Does it give us true visibility into the actual prevalence and distribution of vulnerabilities in custom web applications?  My answer is no.</p>
<p>Let&#8217;s look at a sample of the prevalence data:</p>
<ul>
<li>100,059 instances of <a href="http://www.webappsec.org/projects/threat/classes/cross-site_scripting.shtml">XSS</a> across 26,531 web apps</li>
<li>23 instances of <a href="http://www.webappsec.org/projects/threat/classes/insufficient_authorization.shtml">Insufficient Authorization</a> across 4 web apps</li>
<li>84 instances of <a href="http://www.webappsec.org/projects/threat/classes/insufficient_authentication.shtml">Insufficient Authentication</a>, all occurring in 1 web app</li>
<li>426 instances of <a href="http://www.webappsec.org/projects/threat/classes/path_traversal.shtml">Path Traversal</a> across 374 web apps</li>
<p>
</ul>
<p>Those numbers just don&#8217;t pass the &#8220;giggle test.&#8221;  The category that stands out the most in that list is Insufficient Authorization, a very common vulnerability in my experience.  It&#8217;s highly unlikely that only four of the applications contain authorization-related vulnerabilities. All this does is highlight the limitations of automated web app scanners.</p>
<p>What about <a href="http://www.owasp.org/index.php/Cross-Site_Request_Forgery">Cross-Site Request Forgery</a>?  That doesn&#8217;t show up at all on the list, despite the fact that the vast majority of web applications are vulnerable to it (even <a href="http://jeremiahgrossman.blogspot.com/2006/10/more-on-netflixs-csrf-advisory.html">Jeremiah agrees</a> on this point).  It&#8217;s not on the list because it isn&#8217;t something the automated scanners can detect with any degree of accuracy.  For the same reason, several categories on the <a href="http://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project">OWASP Top Ten</a> aren&#8217;t even represented, such as <a href="http://www.owasp.org/index.php/Buffer_Overflow">Buffer Overflows</a> and <a href="http://www.owasp.org/index.php/Application_Denial_of_Service">Denial of Service</a>.</p>
<p>Now let&#8217;s talk about false positives.  The methodology clearly states that the data is a mixture of raw scan output and manually validated results.  Since the results are presented in aggregate, it is impossible to derive real meaning from the figures without insight into the following information:</p>
<ul>
<li>Which results came from which product</li>
<li>Which results have been manually validated</li>
<li>The historical false positive rates, by category, for each product</li>
<p>
</ul>
<p>There is also lack of clarity around the definition of &#8220;one vulnerability.&#8221;  Consider this code snippet:</p>
<pre>
Map params = request.getParameterMap();
PrintWriter pw = response.getWriter();
for (String key : params.keySet())
  for (String value : params.get(key))
    pw.println(key + "=" + value + " ");</pre>
<p>An automated scanner might report that as 100 different XSS vulnerabilities, one for each parameter that it fuzzed.  However, there is only one actual flaw in the code.  This is a simplistic example, but I suspect the inflated XSS numbers are partly due to this type of accounting.</p>
<p>In conclusion, here are the key takeaways from this list, after accounting for all of the weaknesses inherent to the methodology and the data itself:</p>
<ul>
<li>Automated web app scanners find a lot of XSS and SQL Injection</li>
<li>Automated web app scanners are ineffective at finding vulnerabilities that require some understanding of higher-level logic, e.g. Insufficient Authorization or CSRF</li>
<li>Including raw scan results from a category of products that are notorious for high false positive rates makes the resulting statistics even less meaningful</li>
<li>The many-to-one mapping of vulnerabilities to actual instances of flawed code artificially inflate the prevalence of certain categories</li>
<p>
</ul>
<p>In other words, this study provides minimal value to a veteran pen tester, and is misleading to just about anyone else.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.veracode.com/blog/2007/04/take-wasc-data-with-a-grain-of-salt/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Online “Pick Pocket” Attacks Getting Worse After All These Years</title>
		<link>http://www.veracode.com/blog/2007/03/online-%e2%80%9cpick-pocket%e2%80%9d-attacks-getting-worse-after-all-these-years/</link>
		<comments>http://www.veracode.com/blog/2007/03/online-%e2%80%9cpick-pocket%e2%80%9d-attacks-getting-worse-after-all-these-years/#comments</comments>
		<pubDate>Wed, 21 Mar 2007 20:58:21 +0000</pubDate>
		<dc:creator>Chris Wysopal</dc:creator>
				<category><![CDATA[Application Security]]></category>
		<category><![CDATA[Application Security Metrics]]></category>
		<category><![CDATA[RESEARCH]]></category>

		<guid isPermaLink="false">http://www.veracode.com/blog/?p=32</guid>
		<description><![CDATA[You see, Oliver&#8230; [sung] In this life, one thing counts In the bank, large amounts I&#8217;m afraid these don&#8217;t grow on trees, You&#8217;ve got to pick-a-pocket or two. You&#8217;ve Got To Pick-a-Pocket or Two lyrics, from Oliver! Does this ABC News story on criminals looting 401K and online trading accounts of tens of millions of [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" align="center">You see, Oliver&#8230; <span style="color: #006600"><br />
</span><span style="color: #009900">[sung] In this life, one thing counts<br />
In the bank, large amounts<br />
I&#8217;m afraid these don&#8217;t grow on trees,<br />
You&#8217;ve got to pick-a-pocket or two.</span><br />
<em>You&#8217;ve Got To Pick-a-Pocket or Two</em> lyrics, from <a href="http://oliverthemusical.com/">Oliver!</a></p>
<p>Does this <a href="http://blogs.abcnews.com/theblotter/2007/03/russian_crimina.html?WT.svl=bestoftheweb1">ABC News story</a> on criminals looting 401K and online trading accounts of tens of millions of dollars surprise anyone in the security field? Well of course it shouldn’t.  We have known about the potential for this type of criminal activity for over 8 years.</p>
<p>We are performing computing that requires high assurance, such as managing an online trading account, on a low assurance terminal, the home computer. The network layer of these transactions is using high security crypto in the form of SSL.  The financial institution very likely has excellent security on the servers that run their account management software. But what about the customer? Who is making sure his or her machine is up to the task of being part of a high assurance transaction? The answer is nobody. Attackers will always go for the weak link and that weak link is, by far, the end user’s computer.</p>
<p>I gave a <a href="http://www.veracode.com/blog/wp-content/uploads/2007/03/dcsb-talk-1999.pdf">presentation</a> at the Digital Commerce Society of Boston on April 6th, 1999. It was titled, “Client Security: You&#8217;ve got armored trucks, but what about the pick pockets?” Here is the presentation abstract from <a href="http://www.bugc.org/Notices/99/May/DCSB-May4.txt">the announcement</a>:</p>
<blockquote><p> Everyone in ecommerce these days is peddling better vaults for stores and stronger armored cars to deliver payments and merchandise. Does this really matter in an Internet world where you can pick the pocket of a consumer? Or more likely, to automate the pocket picking of a large number of consumers.</p>
<p>Current authentication and purchasing systems rely on consumers using off the shelf operating systems such as Windows 95/98. This is the operating system which Microsoft has admitted to having no security model. Current ecommerce client security is layering strong encryption on this bed of jello.</p>
<p>What are some of the attacks that are being used? What technology can be used to overcome this problem?</p></blockquote>
<p>In June 1999 I was interviewed on Dateline NBC by Lea Thompson. The story was about how banks were moving into the world of online banking without considering the risks of the customer’s home computer. It’s as if the banks were only setting up their branches in high crime neighborhoods, knowing there were dozens of skilled pick pockets waiting outside the door, and doing nothing to protect customers.</p>
<p>Catherine Allen, the CEO of BITS, a consortium of 100 of the largest financial institutions, was on the program defending financial organizations and stating that online banking was secure.</p>
<p>The final participants in the show were 2 young men in a dark room in San Francisco that agreed to demonstrate how a Trojan keystroke logger worked. The correspondent, Lea Thompson, sat at her home computer. The only information the young men knew was her email address. They sent her an email with a Trojan animated greeting card attached. It contained a keystroke logger. She opened the attachment. She then proceeded to log into her online checking account. Then she logged out. The young men in San Francisco retrieved her password from the keystroke log and proceeded to log in and check her balance.  They decided not to transfer any money because it might be considered wire fraud.</p>
<p>It was clear to any viewer of this Dateline NBC show 8 years ago that this was a problem. So where have we gotten in the intervening 8 years? Online crime has grown dramatically and most of the attacks are taking place on the customer’s home computer –- a threat that was clearly demonstrated to banks and customers on national television.</p>
<p>Symantec’s latest <a href="http://eval.symantec.com/mktginfo/enterprise/white_papers/ent-whitepaper_internet_security_threat_report_xi_03_2007.en-us.pdf">Internet Security Threat Report</a> has the sobering statistics showing that the “pick pocket” risk to online banking is getting worse.</p>
<ul>
<li>Home users were the most highly targeted sector, accounting for 93 percent of all targeted attacks.</li>
<li>Eighty-six percent of the credit and debit cards advertised for sale on underground economy servers known to Symantec were issued by banks in the United States.</li>
<li>The volume of Trojans in the top 50 malicious code samples reported to Symantec increased from 23 percent to 45 percent.</li>
<li>Trojans accounted for 60 percent of the top 50 malicious code samples when measured by potential infections.</li>
<li>Keystroke logging threats made up 79 percent of confidential information threats by volume of reports, up from 57 percent in the first half of the year and 66 percent in the second half of 2005.</li>
<li>Seventy-eight percent of malicious code that propagated did so over SMTP, making it the most commonly used propagation mechanism.</li>
<p>
</ul>
<p>So it is clear the combination of user behavior, home computer security, email, and online banking lead to massive amounts of online theft.</p>
<p>Back in 1999 at my talk at the Digital Commerce Society of Boston I recommended that banks require authentication tokens for accounts with more than $2000. A token doesn’t completely solve all of these problems but it can at least cut down on one of the biggest which is keystroke logging of passwords. This recommendation was dismissed as too expensive at the time. I recommended building software more securely which is starting to become an accepted practice but it needs to become a requirement.</p>
<p>What did we mainly do over the last 8 years? We upgraded operating systems and browsers. We added anti-virus, personal firewalls, and anti-phishing protection. We learned not to open certain attachments. Yet the problem got worse.</p>
<p>It is going to take a dramatic change in what we think of as secure authentication and a dramatic change in how we build software to turn this around. If we don’t do these things I fear in 2015 we will be looking at cybercrime rates that have either gone through the roof or people will have stopped trusting the Internet to manage financial accounts.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.veracode.com/blog/2007/03/online-%e2%80%9cpick-pocket%e2%80%9d-attacks-getting-worse-after-all-these-years/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

