<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.0.11" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>Comments on: Is Penetration Testing Security Testing?</title>
	<link>http://www.cigital.com/justiceleague/2008/04/09/is-penetration-testing-security-testing/</link>
	<description>The Cigital Software Security and Quality Blog</description>
	<pubDate>Fri, 16 May 2008 08:01:11 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.11</generator>

	<item>
		<title>by: Rafal Los</title>
		<link>http://www.cigital.com/justiceleague/2008/04/09/is-penetration-testing-security-testing/#comment-9033</link>
		<pubDate>Mon, 12 May 2008 16:25:14 +0000</pubDate>
		<guid>http://www.cigital.com/justiceleague/2008/04/09/is-penetration-testing-security-testing/#comment-9033</guid>
					<description>John,
  Fascinating analysis.  I would like to point out a few things.  First, let me reference something I've already written on the topic of penetration testing and its value [http://portal.spidynamics.com/blogs/rafal/archive/2008/04/04/What_2700_s-the-point-of-_2200_penetration-testing_22003F00_.aspx]

1) First - Blackbox testing (a la web app vulnerability scanners) has its place in immediately identifying to a business the high-risk "low hanging fruit" that attackers will likely go for.  While some pundits out there are claiming that you can only achieve as much as 50% vulnerability detection with a Blackbox tool, I would argue that it's the 50% that will be found by 99% of the "attackers" and should be  fixed and analyzed first.
2) Second - once you've had a chance to look at the Blackbox results, it's time to pull out the IDE-integrated tools which can not only help you by analyzing your code (byte-code + source) [http://portal.spidynamics.com/blogs/rafal/archive/2008/05/06/Static-Code-Analysis-Failures.aspx] and providing a thorough data-trace analysis of your inputs as they move through the application.  After all, external data is the risk you're mitigating... right?
3) Next - I do agree that QA testers need tools.  They should have something that maps business requirements right into their testing framework so that "Security Vulnerabilities" are just as much a defect as anything else the business dictates [http://portal.spidynamics.com/blogs/rafal/archive/2008/04/01/Security-vulnerabilities-as-quality-defects_3F00_.aspx].

  Anywho... I have been saying for a very long time - security analysis of web applications is not a point-in-time, "do it before we go live", activity.  It must be integrated into the SDLC, scrutinized from the developer's IDE, analyzed as a defect in QA testing, and finally Blackbox tested before releasing to production.  Oh, and just to throw in a shameless plug, the HP ASC (formerly SPIynsmics, http://www.hp.com/go/securitysoftware/) suite does exactly that with scary precision.

Thanks!</description>
		<content:encoded><![CDATA[<p>John,<br />
  Fascinating analysis.  I would like to point out a few things.  First, let me reference something I&#8217;ve already written on the topic of penetration testing and its value [http://portal.spidynamics.com/blogs/rafal/archive/2008/04/04/What_2700_s-the-point-of-_2200_penetration-testing_22003F00_.aspx]</p>
<p>1) First - Blackbox testing (a la web app vulnerability scanners) has its place in immediately identifying to a business the high-risk &#8220;low hanging fruit&#8221; that attackers will likely go for.  While some pundits out there are claiming that you can only achieve as much as 50% vulnerability detection with a Blackbox tool, I would argue that it&#8217;s the 50% that will be found by 99% of the &#8220;attackers&#8221; and should be  fixed and analyzed first.<br />
2) Second - once you&#8217;ve had a chance to look at the Blackbox results, it&#8217;s time to pull out the IDE-integrated tools which can not only help you by analyzing your code (byte-code + source) [http://portal.spidynamics.com/blogs/rafal/archive/2008/05/06/Static-Code-Analysis-Failures.aspx] and providing a thorough data-trace analysis of your inputs as they move through the application.  After all, external data is the risk you&#8217;re mitigating&#8230; right?<br />
3) Next - I do agree that QA testers need tools.  They should have something that maps business requirements right into their testing framework so that &#8220;Security Vulnerabilities&#8221; are just as much a defect as anything else the business dictates [http://portal.spidynamics.com/blogs/rafal/archive/2008/04/01/Security-vulnerabilities-as-quality-defects_3F00_.aspx].</p>
<p>  Anywho&#8230; I have been saying for a very long time - security analysis of web applications is not a point-in-time, &#8220;do it before we go live&#8221;, activity.  It must be integrated into the SDLC, scrutinized from the developer&#8217;s IDE, analyzed as a defect in QA testing, and finally Blackbox tested before releasing to production.  Oh, and just to throw in a shameless plug, the HP ASC (formerly SPIynsmics, <a href="http://www.hp.com/go/securitysoftware/" rel="nofollow">http://www.hp.com/go/securitysoftware/</a>) suite does exactly that with scary precision.</p>
<p>Thanks!
</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: Andre Gironda</title>
		<link>http://www.cigital.com/justiceleague/2008/04/09/is-penetration-testing-security-testing/#comment-7642</link>
		<pubDate>Wed, 09 Apr 2008 17:24:45 +0000</pubDate>
		<guid>http://www.cigital.com/justiceleague/2008/04/09/is-penetration-testing-security-testing/#comment-7642</guid>
					<description>From a book I recently read:

&lt;i&gt;Functional (&lt;b&gt;black-box&lt;/b&gt;) methods can be applied to any unit, build, or system, since they assume no knowledge of how either was constructed or what it contains. Such methods require a sufficient and unambiguous specification if they are to be effective. (Devising black-box tests for some code from its specification at the time the specification is written is a useful verification of the specification; if it can’t be done, the specification isn’t good enough). This is what you will normally do for a system test.

Structural (&lt;b&gt;white-box&lt;/b&gt;) methods can also be used on any unit or build, but are cheapest to devise when used on structured programs, e.g., well-written programs in a structured language. These are usually applied to unit tests.

&lt;b&gt;Dynamic analysis&lt;/b&gt; techniques are derivative methods which assume that a particular technique such as condition tables, finite state machines, object-orientation, or functional programming, has been used to develop the software; we use knowledge of that technique to determine the test cases, so these have very special areas of application. These can be applied at both system test and
unit test times. These are usually applied to unit tests.

&lt;b&gt;Static analysis&lt;/b&gt; techniques can best be used before integration, and can also point to the need for
more-rigorous unit testing. These require using tools to analyze the source code. These are usually applied to unit tests.

Symbolic evaluation carried out by an automated symbolic evaluation tool places no special requirement on the unit, except of course that it be in the language evaluated by the tool. This involves "dry-running" the code, and recording the output values of variables algebraically
rather than using specific values for input variables. This is usually applied to unit tests.&lt;/i&gt;

Coverity, Valgrind, Purify, Insure++ -- these are all dynamic analysis tools.  However, none of these are `black box' tools.  In fact, dynamic analysis is usually a white-box (structural) activity, just as code coverage is also a structural / white-box activity.

Fortify SCA, Ounce, and SPIN are examples of static analysis tools in the classic sense that you only refer to.

I often consider all requirements gathering analysis tools (e.g. HP/Mercury TestDirector, IBM/Rational RequisitePro, NASA SATC ARM) to be static analysis tools, even though the definition above doesn't factor these tools in.  In some ways, you don't hit on the importance of requirements enough, but you're mixing a lot of testing/inspection methods.  Let me see if I can be of some assistance here.

There are tools strictly outside of static analysis that perform code comprehension or other analysis of source code.  Examples include SciTools Understand, Clover, EMMA, PartCover, NCover, tcov, gcov, and lcov.  Some of these require integration.  I would prefer to put most tools in a separate "code comprehension" category.  The word `hybrid' is simply too generic and confusing for iterative purposes.

In summary:
1) Black-box testing - EP, BVA, feature tests
2) White-box testing - Code comprehension, dynamic analysis
2a) Code-comprehension/coverage (white-box) - Statement, decision, condition, multiple-condition, LCSAJ, path analysis
2b) Dynamic analysis (white-box) - runtime tests usually done with a symbol table, assertion tests, source tracing
3) Static analysis - DFA, CFA, function value analysis, symbolic execution, mutation tests, fault-injection
3a) Fault-injection - input-based fuzz tests to cause crashes (e.g. stack-based buffer overflow), input tests propagate to output (e.g. cross-site scripting), input tests propagate to function pointer (e.g. heap overflows), etc

Compuware SecurityChecker and Fortify PTA are fault-injection tools (not hybrids, sorry!).  However, CUTE is an example of a real hybrid tool that also supports symbolic execution.  However, CUTE is also technically a fuzz testing tool!

Regardless, these are static analysis tools.  There is no such thing as a hybrid tool in the way that you speak of.  There is no gray-box.  There is no way to combine a dynamic analysis tool with a static analysis tool (special note below).

You are correct in identifying that most other classic penetration-testing tools are black-box "feature testing" tools.  I think that some classically labeled fuzz testing tools are mislabeled, and they are actually quite more like EC/BVA tools for negative testing.

Real fuzz testing tools are fault-injectors, which are static analysis tools that have access to code.  Note that source code is not necessary thanks to binary and bytecode disassembly and decompilation.

PaiMei is a type of hybrid tool that crosses the dynamic and static analysis boundaries.  Your holy grail is basically a tool that uses the control-flow path of execution information from dynamic analysis and combines it with output from a DFA (static analysis).  Great idea, but it's lacking quite a bit of important information, such as the data values.

See: P. Fairfield, D. Hedley, and M. A. Hennell. &lt;i&gt;Test coverage analysers&lt;/i&gt;. Alvey deliverable A35. Alvey Directorate. Project SE/031.</description>
		<content:encoded><![CDATA[<p>From a book I recently read:</p>
<p><i>Functional (<b>black-box</b>) methods can be applied to any unit, build, or system, since they assume no knowledge of how either was constructed or what it contains. Such methods require a sufficient and unambiguous specification if they are to be effective. (Devising black-box tests for some code from its specification at the time the specification is written is a useful verification of the specification; if it can’t be done, the specification isn’t good enough). This is what you will normally do for a system test.</p>
<p>Structural (<b>white-box</b>) methods can also be used on any unit or build, but are cheapest to devise when used on structured programs, e.g., well-written programs in a structured language. These are usually applied to unit tests.</p>
<p><b>Dynamic analysis</b> techniques are derivative methods which assume that a particular technique such as condition tables, finite state machines, object-orientation, or functional programming, has been used to develop the software; we use knowledge of that technique to determine the test cases, so these have very special areas of application. These can be applied at both system test and<br />
unit test times. These are usually applied to unit tests.</p>
<p><b>Static analysis</b> techniques can best be used before integration, and can also point to the need for<br />
more-rigorous unit testing. These require using tools to analyze the source code. These are usually applied to unit tests.</p>
<p>Symbolic evaluation carried out by an automated symbolic evaluation tool places no special requirement on the unit, except of course that it be in the language evaluated by the tool. This involves &#8220;dry-running&#8221; the code, and recording the output values of variables algebraically<br />
rather than using specific values for input variables. This is usually applied to unit tests.</i></p>
<p>Coverity, Valgrind, Purify, Insure++ &#8212; these are all dynamic analysis tools.  However, none of these are `black box&#8217; tools.  In fact, dynamic analysis is usually a white-box (structural) activity, just as code coverage is also a structural / white-box activity.</p>
<p>Fortify SCA, Ounce, and SPIN are examples of static analysis tools in the classic sense that you only refer to.</p>
<p>I often consider all requirements gathering analysis tools (e.g. HP/Mercury TestDirector, IBM/Rational RequisitePro, NASA SATC ARM) to be static analysis tools, even though the definition above doesn&#8217;t factor these tools in.  In some ways, you don&#8217;t hit on the importance of requirements enough, but you&#8217;re mixing a lot of testing/inspection methods.  Let me see if I can be of some assistance here.</p>
<p>There are tools strictly outside of static analysis that perform code comprehension or other analysis of source code.  Examples include SciTools Understand, Clover, EMMA, PartCover, NCover, tcov, gcov, and lcov.  Some of these require integration.  I would prefer to put most tools in a separate &#8220;code comprehension&#8221; category.  The word `hybrid&#8217; is simply too generic and confusing for iterative purposes.</p>
<p>In summary:<br />
1) Black-box testing - EP, BVA, feature tests<br />
2) White-box testing - Code comprehension, dynamic analysis<br />
2a) Code-comprehension/coverage (white-box) - Statement, decision, condition, multiple-condition, LCSAJ, path analysis<br />
2b) Dynamic analysis (white-box) - runtime tests usually done with a symbol table, assertion tests, source tracing<br />
3) Static analysis - DFA, CFA, function value analysis, symbolic execution, mutation tests, fault-injection<br />
3a) Fault-injection - input-based fuzz tests to cause crashes (e.g. stack-based buffer overflow), input tests propagate to output (e.g. cross-site scripting), input tests propagate to function pointer (e.g. heap overflows), etc</p>
<p>Compuware SecurityChecker and Fortify PTA are fault-injection tools (not hybrids, sorry!).  However, CUTE is an example of a real hybrid tool that also supports symbolic execution.  However, CUTE is also technically a fuzz testing tool!</p>
<p>Regardless, these are static analysis tools.  There is no such thing as a hybrid tool in the way that you speak of.  There is no gray-box.  There is no way to combine a dynamic analysis tool with a static analysis tool (special note below).</p>
<p>You are correct in identifying that most other classic penetration-testing tools are black-box &#8220;feature testing&#8221; tools.  I think that some classically labeled fuzz testing tools are mislabeled, and they are actually quite more like EC/BVA tools for negative testing.</p>
<p>Real fuzz testing tools are fault-injectors, which are static analysis tools that have access to code.  Note that source code is not necessary thanks to binary and bytecode disassembly and decompilation.</p>
<p>PaiMei is a type of hybrid tool that crosses the dynamic and static analysis boundaries.  Your holy grail is basically a tool that uses the control-flow path of execution information from dynamic analysis and combines it with output from a DFA (static analysis).  Great idea, but it&#8217;s lacking quite a bit of important information, such as the data values.</p>
<p>See: P. Fairfield, D. Hedley, and M. A. Hennell. <i>Test coverage analysers</i>. Alvey deliverable A35. Alvey Directorate. Project SE/031.
</p>
]]></content:encoded>
				</item>
</channel>
</rss>
